java-快递管理
题干如上:
模块分析
将整个系统拆分成视图展示,数据存取与调度逻辑,通过拆分,可以更好的完成整个系统,以及进行后期的优化。
1.视图展示(包括欢迎界面,菜单,子菜单,提示语等)
2.数据存取(通过数组、集合等,此题中采用二维数组才存储)
3.调度逻辑(根据视图接收的用户输入内容,调度数据存取)
代码
Scanner input = new Scanner(System.in);//获取用户键盘输入内容
//异常处理代码
try{// 有可能发生异常的代码段
}catch(异常类型1 对象名1){异常的处理操作
}
view(视图界面内的代码)
public int menu(){//创建主菜单界面System.out.println("请输入功能序号:");System.out.println("1. 快递管理");//进入快递员管理界面,可以更改说辞System.out.println("2. 用户取件");//进入用户取件界面,可以更改说辞System.out.println("0. 退出");String text = input.nextLine();//定义用户输入内容,因为无法控制用户输入内容,所以定义为字符串类型int num = -1;//给予num一个初始不符合的值try{//将用户输入的取件码,转换为int数据类型num = Integer.parseInt(text);}catch(NumberFormatException e){}//异常处理if(num<0 || num>2){System.out.println("输入错误,请重新输入");return menu();}//当界面输入数字超出范围后提示并返回菜单return num;
}
public int mMenu(){//创建快递员菜单界面System.out.println("请选择功能序号:");System.out.println("1. 快递录入");System.out.println("2. 快递修改");System.out.println("3. 快递删除");System.out.println("4. 查看所有快递");System.out.println("0. 返回上一层界面");//以上为快递员管理界面String text = input.nextLine();int num = -1;try{//将用户输入的取件码,转换为int数据类型num = Integer.parseInt(text);}catch(NumberFormatException e){}if(num<0 || num>4){System.out.println("输入错误,请重新输入");return mMenu();}//同主界面return num;
}
public int uMenu(){//创建用户菜单界面System.out.println("请输入取件码");String pick = input.nextLine();int num = -1;try{//将用户输入的取件码,转换为int数据类型num = Integer.parseInt(pick);}catch(NumberFormatException e){System.out.println("请输入正确的取件码");return uMenu();}//判断取件码if(num<100000 || num>9999999){System.out.println("输入错误,请重新输入");return uMenu();}return num;}
这里将主菜单界面视作一级操作界面;快递员以及用户操作界面为二级界面;快递录入,快递查询,用户取件界面等为三级界面。
我们根据二级界面来设计三级界面具体内容。
public Express insert(){//1.快递录入三级界面System.out.println("根据提示,输入快递信息");System.out.println("请输入快递单号");String number = input.nextLine();System.out.println("请输入快递公司");String company = input.nextLine();Express e = new Express();e.setCompany(company);//将输入的数据存入到调度逻辑里定义的Cpmpanye.setNumber(number);return e;
}
//快递员根据单号查找快递
public String findNumber(){System.out.println("请输入快递单号: ");String number = input.nextLine();return number;
}
//快递信息输出
public void printExpress(Express e){System.out.println("快递信息如下:");System.out.println("快递公司: "+ e.getCompany()+",快递单号: "+e.getNumber());
//快递员修改信息
public Express update(Express e){System.out.println("请输入新的快递单号");String number = input.nextLine();System.out.println("请输入新的快递公司");String company = input.nextLine();e.setNumber(number);e.setCompany(company);return e;
}
快递员修改信息思路为:通过单号查找快递,系统输出快递信息,再修改快递信息。同时可以删除快递信息。
//快递员删除快递信息
public int delete(){System.out.println("是否确认删除");System.out.println("1. 确认删除");System.out.println("2. 取消删除");System.out.println("0. 退出");String text = input.nextLine();int num = -1;try{num = Integer.parseInt(text);}catch(NumberFormatException e){}if(num<1 || num>2){System.out.println("输入错误,请重新输入");return delete();}return num;
}
//快递员调出所有快递信息
public void printAll(Express[][] es){int count = 0;//通过循环,打印输出快递信息for(int i=0;i<10;i++){for(int j=0;j<10;j++){if(es[i][j] != null){count++;System.out.print("第"+(i+1)+"排"+(j+1)+"列快递");printExpress(es[i][j]);}}}if (count == 0){System.out.println("暂无快递信息");}
}
考虑到有些操作会查询不到信息或输入错误,所以设置提示语。
//当查询快递无信息时的提示语
public void printNull(){System.out.println("快递不存在,请确认输入是否正确");
}
//提示用户取件成功
public void printCode(Express e){System.out.println("快递取件码为:"+e.getCode());
}
//快递员存储时存储重复的提示语
public void expressExist(){System.out.println("快递单号已存储");
}
//通用提示语
public void success(){System.out.println("操作成功");
}
以上为快递员操作的三级界面。
public int uMenu(){//创建用户菜单界面System.out.println("请输入取件码");String pick = input.nextLine();int num = -1;try{//将用户输入的取件码,转换为int数据类型num = Integer.parseInt(pick);}catch(NumberFormatException e){System.out.println("请输入正确的取件码");return uMenu();}//判断取件码if(num<100000 || num>9999999){System.out.println("输入错误,请重新输入");return uMenu();}return num;}
业主只有取件操作,所以三级界面简洁。
Express
//快递单号
private String number;
//快递公司
private String company;
//取件码
private int code;
创建Express.java文件,在其中定义快递单号,快递公司,取件码。
通过快捷键创建 set和get方法、tostring方法,重新定义equals方法。
Expressdao(数据存储)
//创建二维数组,存储快递(此处可以视作10*10的快递柜)
private Express [][] date = new Express[10][];
//定义一个size 视作当前存储的快递数
private int size;
{for(int i=0;i<10;i++){date[i] = new Express[10];}
}
private Random r = new Random();//定义随机数
//快递员添加快递的操作
public boolean add(Express e){if(size == 100){return false;//当存储快递数为100时即快递柜无空位}//随机生成二维数组下标int x = -1;int y = -1;while(true){x = r.nextInt(10);//生成x,y的随机坐标y = r.nextInt(10);if(date[x][y] == null){//此位置无快递break;}}//存入坐标int code =randomCode();e.setCode(code);date[x][y] = e;return true;
}
//生成六位数取件码
private int randomCode(){//100000-999999 = 0~899999+100000while(true){int code = r.nextInt(900000) + 100000;//如果查到了快递则继续生成新的取件码Express e = findCode(code);//如果没有查到,则返回生成的取件码,即取件码生成成功if (e == null) {return code;}}}
//查找单号-遍历法
public Express findNumber(String number){Express e = new Express();e.setNumber(number);for(int i = 0 ;i<10;i++){for(int j = 0;j<10;j++){if (date[i][j] != null)if (e.equals(date[i][j])){return date[i][j];}}}return null;
}
//查找取件码-遍历法
public Express findCode(int code){for(int i = 0 ;i<10;i++){for(int j = 0;j<10;j++){if (date[i][j] != null)if (date[i][j].getCode() == code){return date[i][j];}}}return null;
}
//删除快递
public void delete(Express e){//命名循环为pp:for(int i = 0 ;i<10;i++) {for (int j = 0; j < 10; j++) {if (e.equals(date[i][j])) {date[i][j] = null;break p;//返回p循环}}}
}
//查找所有快递
public Express[][] findAll(){return date;
}
rundemo(调度逻辑)
//main方法,为了以后更方便的更改,所以拆分了其中的方法
public static void main(String[] args) {init();
}
//初始化view,这里创建了一个名为 view的view方法
private static view view =new view();
//初始化Expressdao
private static Expressdao dao = new Expressdao();
//定义init方法
public static void init(){int menu = view.menu();//主界面m:while(true){switch(menu){//主界面0选项:退出case 0:break m;//主界面1选项:进入快递员界面case 1:mClient();break;//主界面2选项:进入用户界面case 2:uClient();break ;}}}
//定义用户界面的调用逻辑
public static void uClient(){//获得用户输入的取件码int code = view.uMenu();//取出快递Express e = dao.findCode(code);if (e == null){view.printNull();}else{view.printExpress(e);view.success();}}
//定义快递员界面的调度逻辑
public static void mClient(){while(true){int menu = view.mMenu();switch(menu){case 0:return;case 1:{//提示输入快递信息Express e = view.insert();//查询快递单号是否已经存储Express e2 = dao.findNumber(e.getNumber());//存储快递if (e2 == null){dao.add(e);view.printExpress(e);break;}else{//单号重复view.expressExist();}}//快递修改case 2:{//输入快递信息String number = view.findNumber();//查找数据Express e =dao.findNumber(number);Express e2 = e;//打印快递信息if (e == null){view.printExpress(e);}else{view.printExpress(e);view.update(e2);dao.update(e,e2);view.printExpress(e2);}}break;//删除快递case 3:{//输入快递单号并查找String number = view.findNumber();Express e = dao.findNumber(number);if (e == null){view.printNull();}else{view.printExpress(e);int type = view.delete();if(type == 1){dao.delete(e);view.success();}}}break;//查看所有case 4:{Express[][] date = dao.findAll();view.printAll(date);}break;}}
}
以上就是通过java实现的快递管理系统。
view.printExpress(e);int type = view.delete();if(type == 1){dao.delete(e);view.success();}}}break;//查看所有case 4:{Express[][] date = dao.findAll();view.printAll(date);}break;}
}
}
以上就是我经过学习和请教后使用java实现的快递管理系统。如有重复,纯属水平有限[捂脸]。本人只是java学习中的小学生,有更好的想法请说明并解释,不然我怕我看不懂[捂脸]。