java-快递管理

news/2024/10/22 17:24:09/

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学习中的小学生,有更好的想法请说明并解释,不然我怕我看不懂[捂脸]。

http://www.ppmy.cn/news/695499.html

相关文章

快递价格c++

题目描述 冷月老师去寄顺丰快递&#xff0c;顺丰快递收费如下&#xff1a; 1.快递起步价13元&#xff0c;如果超过首重就需要收取续重费。称重结果四舍五入&#xff0c;保留一位小数。 2.首重与续重&#xff1a;首重为1kg&#xff0c;不足首重只收取起步价。超过首重的话、每…

快递运输 一辆运送快递的货车

注意!答案仅作为参考(实际考试中下列代码通过用例100%,但不代表最优解) 一辆运送快递的货车 运送的快递放在大小不等的长方体快递盒中 为了能够装载更多的快递同时不能让货车超载 需要计算最多能装多少个快递 注:快递的体积不受限制 快递数最多1000个 货车载重最大50000 …

Mybatis 入门及实践

Mybatis 入门及实践 文章目录 Mybatis 入门及实践前言一. 简介二. 入手案例2.1 前置准备2.1.1 Maven依赖2.1.2 sql准备2.1.3 Log4j2 配置1. Maven引入2. log4j2.xml 2.2 代码流程构建步骤2.2.1 Mybatis前置知识2.2.2 步骤流程2.2.3 代码实现 三. XML映射器前置代码3.1 select3.…

深入定制网络体验:探索进阶书签脚本技巧

当你掌握了基础的书签脚本技巧后&#xff0c;你可能会想要进一步深入这个领域&#xff0c;探索更高级的功能和创造力。本文将介绍一些进阶的书签脚本技巧&#xff0c;并提供一些示例代码&#xff0c;帮助你更好地利用书签脚本定制化你的网络体验。 1. 使用 AJAX 请求 书签脚本…

练习英文发音的网站

https://youglish.com/pronounce/nio/english?

kindle如何设置不闪屏_Nook GlowLight 3低调现身 色温调节和不闪屏能否打破Kindle垄断?...

不知大家是否还记得Nook&#xff1f;它是美国图书零售商Barnes & Noble旗下的电纸书品牌&#xff0c;发布了新款带有夜间模式的GlowLight 3。而Nook的上一款电纸书产品还是15年发售的GlowLight Plus。 GlowLight 3在设计和硬件上并没有太多新意&#xff0c;6寸300ppi的电子…

“Kindle App中文字体9MB下载失败”解决办法

从应用商店下载的国际版kindle app没有广告&#xff0c;但也没有语音朗读功能。新版的软件似乎不能下载中文字体&#xff0c;提示如下图。经测试&#xff0c;更换网络、卸载重装、刷系统都不能解决。 可以通过安装旧版本app&#xff0c;配置完成&#xff08;下载字体&#xff0…

eSpeak TTS 中英文真人发音引擎

eSpeak TTS 中英文真人发音引擎 Tcl/Tk 扩展与 eSpeak API 示例。转载时请注明出处&#xff1a;http://www.tcltk.cn 这几天看残奥会真的是大受感动。现场有那么多观众能为残疾人运动员加油鼓劲&#xff0c;看到运动员在赛场上努力拼搏的情景&#xff0c;听到运动员们背后的故事…