小白一看就会的Java集合写简单的快递管理系统 |
您所在的位置:网站首页 › 快递单号编写标准 › 小白一看就会的Java集合写简单的快递管理系统 |
小白一看就会的Java集合写最简单的快递管理系统
任务概述程序思路程序分解完整代码实现效果
任务概述
管理员 快递录入 柜子位置(系统产生不能重复) 快递单号(输入产生) 快递公司(输入产生) 6位取件码(系统产生不能重复)删除快递(根据单号) 修改快递(根据单号) 查看所有快递(遍历) 普通用户 快递取出 输入取件码:显示快递信息和哪个柜子中,从柜子中移除这个快递 程序思路1.视图和部分功能(view) 呈现给用户所看到的界面和大致的功能,如:文字提示等等。 同时让自己写程序有一个大局观,知道下一步该做什么。2.通用对象方法(express) 建立通用方法和对象,方便使用3主程序(main) 用主程序调用之前的视图和功能类方法,直接连接运行 程序分解1.View 需要实现的内容: (1)欢迎和再见 (2)选择管理员或者用户身份菜单(判断输入参数要合理) (3)快递员浏览的菜单、用户浏览的菜单(判断输入参数要合理) (4)快递删除:是否删除界面(判断输入参数要合理) (5)提示存取错误:快递不存在、已存在的提示语 考察点:字符串转数字Integer.parseInt(text)、异常处理NumberFormatException、返回数据类型1)欢迎和再见 public void welcome() { System.out.println("欢迎使用XXX快递管理系统!"); } public void bye() { System.out.println("再见,欢迎下次使用!"); }2)选择管理员或者用户身份菜单 public int menu() { //提示用户输入 System.out.println("请根据提示,输入功能序号:"); System.out.println("1.快递员"); System.out.println("2.普通用户"); System.out.println("0.退出"); //接收输入内容存储到text String text = input.nextLine(); //异常处理 int num = -1; try { //字符串转数字 num = Integer.parseInt(text); }catch(NumberFormatException e) { } //判断,防止用户误操作 if ( num 2 ) { System.out.println("输入错误,请重新输入0-2之间的功能序号:"); //返回menu让用户重新输入 return menu(); } return num; }3)快递员浏览的菜单、用户浏览的菜单(判断输入参数要合理) //快递员浏览的菜单 public int cMenu(){ //提示用户 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 { num = Integer.parseInt(text); }catch(NumberFormatException e) { } if ( num 4 ) { System.out.println("输入错误,请重新输入0-4的功能序号:"); return cMenu(); } return num; } //用户浏览的菜单 public int uMenu(){ //提示用户 System.out.println("请根据提示,进行取件:"); System.out.println("请输入您的取件码:"); //接收用户输入的取件码存储到变量code String code = input.nextLine(); //异常处理 int num = -1; try { num = Integer.parseInt(code); }catch(NumberFormatException e) { } //判断是否为6位数取件码 if ( num 999999 ) { System.out.println("输入错误,请重新输入6位取件码:"); //不是让用户重新输入 return uMenu(); } return num; }4)快递删除:是否删除界面(判断输入参数要合理) public int delete() { //提示用户输入 System.out.println("是否确认删除:"); System.out.println("1.确认删除"); System.out.println("2.取消删除"); //接收用户输入的取件码存储到变量text String text = input.nextLine(); int num = -1; try { num = Integer.parseInt(text); }catch(NumberFormatException e) { } if ( num 2 ) { System.out.println("输入错误,请重新输入:"); return delete(); } return num; }5)提示存取错误:快递不存在、已存在的提示语 public void expressExit(){ System.out.println("此单号在快递柜中已存在,请勿重复存储!"); } public void printNull(){ System.out.println("快递不存在,请检查输入!"); }2.Express 需要实现的内容: (1)创建快递对象 (2)无参构造方法 (3)有参构造方法 (4)Getter和Setter方法 (5)equals()和hashCode方法 (6)toString()方法 public Express(String number) { this.number = number; } public Express(String number, String company, int code, int x, int y) { this.number = number; this.company = company; this.code = code; this.x = x; this.y = y; } public String getNumber() { return number; } public String getCompany() { return company; } public int getCode() { return code; } public int getX() { return x; } public int getY() { return y; } public void setNumber(String number) { this.number = number; } public void setCompany(String company) { this.company = company; } public void setCode(int code) { this.code = code; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Express express = (Express) o; return code == express.code && x == express.x && y == express.y && Objects.equals(number, express.number) && Objects.equals(company, express.company); } @Override public int hashCode() { return Objects.hash(number, company, code, x, y); } @Override public String toString() { return "Express{" + "number='" + number + '\'' + ", company='" + company + '\'' + ", code=" + code + ", x=" + x + ", y=" + y + '}'; } }3.main 主程序需要实现的内容: 调用欢迎和再见 (1)case选择 (2)生成快递信息 (3)修改快递信息 (4)删除快递信息 (5)查询快递信息1)case选择 //快递员菜单 m:while (true) { int menu = v.menu(); switch (menu) { case 0: // 退出 v.bye(); break m; case 1: // 快递员 cClient(); break; case 2: // 普通用户 uClient(); break; } } while (true) { int menu = v.cMenu(); switch (menu) { case 0: return; case 1:{ // 快递录入 System.out.println("请根据提示,输入快递信息:"); System.out.println("请输入快递公司:"); String company = input.nextLine(); System.out.println("请输入快递单号:"); String number = input.nextLine(); // 内容 } break; case 2: { // 快递修改 System.out.println("请输入要修改的快递单号:"); String oldExpressNumber = input.nextLine(); // 内容 } break; case 3 : { // 快递删除 System.out.print("请输入要删除的快递单号:"); String delExpressNumber = input.nextLine(); // 内容 } break; case 4 :{ // 查看所有快递 // 内容 } break; } }2)生成快递信息(快递录入) // 随机生成不重复的六位数取货码 int code = 0; do{ code = random.nextInt(900000)+100000; }while(expressMap.get(code) != null); // Hashmap保证不重复 // 生成 不重复 的快递位置 int x = -1; int y = -1; do{ x = random.nextInt(10); y = random.nextInt(10); }while(expressMap.get(x) != null && expressMap.get(y) != null); // 创建一个快递对象 Express e = new Express(number,company,code,x,y); expressMap.put(number, e); System.out.println("恭喜你,快递存储成功!"); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); //记录存储的快递数 count++; System.out.println("当前快递存储数为:"+count);3)修改快递信息 System.out.println("请输入新的快递信息:"); System.out.println("请输入快递公司:"); String company = input.nextLine();//接收输入 System.out.print("请输入新的快递单号:"); String newExpressNumber = input.nextLine();//接收输入 //找到旧的快递取件码和位置 int code = expressMap.get(oldExpressNumber).getCode(); int x = expressMap.get(oldExpressNumber).getX(); int y = expressMap.get(oldExpressNumber).getY(); //更新新的快递数据 Express e = new Express(newExpressNumber,company,code,x,y); //删除之前的快递单号 expressMap.remove(oldExpressNumber); expressMap.put(newExpressNumber, e); System.out.println("恭喜你,快递信息修改成功!"); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");4)删除快递信息 int type = v.delete(); if (type == 1) { // 取货码 存储位置 快递 信息清空 expressMap.remove(expressMap.get(delExpressNumber).getCode()); expressMap.remove(expressMap.get(delExpressNumber).getX()); expressMap.remove(expressMap.get(delExpressNumber).getY()); expressMap.remove(delExpressNumber); System.out.println("恭喜你,快递删除成功!"); //减去快递删除数量 count --; System.out.println("当前快递存储数为:"+count);5)查询快递信息 // 查看所有快递 for (String number : expressMap.keySet()) { Express e = expressMap.get(number); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列") System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); //根据单号查找快递 for (String number : expressMap.keySet()) { temp ++ ; // 单号存在 if (expressMap.get(number).getCode() == code ){ String s = number; Express e = expressMap.get(s); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); // 用户取件后删除之前的数据 System.out.println("取货成功!"); expressMap.remove(e.getCode()); expressMap.remove(e.getX()); expressMap.remove(e.getY()); expressMap.remove(e.getNumber()); count --; break; // 单号不存在 } else if (count == temp ){ //调用视图View里的printNull提示用户 v.printNull(); } 完整代码View视图界面 import java.util.Scanner; public class View { private Scanner input = new Scanner(System.in); // 欢迎与再见 public void welcome() { System.out.println("欢迎使用XXX快递管理系统!"); } public void bye() { System.out.println("欢迎下次使用!"); } // 选择身份的菜单 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; try { num = Integer.parseInt(text); }catch(NumberFormatException e) { } if ( num 2 ) { System.out.println("输入错误,请重新输入:"); return menu(); } return num; } // 快递员浏览的菜单 public int cMenu(){ 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 { num = Integer.parseInt(text); }catch(NumberFormatException e) { } if ( num 4 ) { System.out.println("输入错误,请重新输入:"); return cMenu(); } return num; } // 用户浏览的菜单 public int uMenu(){ System.out.println("请根据提示,进行取件:"); System.out.println("请输入您的取件码:"); String code = input.nextLine(); int num = -1; try { num = Integer.parseInt(code); }catch(NumberFormatException e) { } if ( num 999999 ) { System.out.println("输入错误,请重新输入:"); return uMenu(); } return num; } // 询问是否删除 public int delete() { System.out.println("是否确认删除:"); System.out.println("1.确认删除"); System.out.println("2.取消删除"); String text = input.nextLine(); int num = -1; try { num = Integer.parseInt(text); }catch(NumberFormatException e) { } if ( num 2 ) { System.out.println("输入错误,请重新输入:"); return delete(); } return num; } public void expressExit(){ System.out.println("此单号在快递柜中已存在,请勿重复存储!"); } public void printNull(){ System.out.println("快递不存在,请检查输入!"); } }Express对象方法 import java.util.Objects; public class Express { private String number; // 快递单号 private String company; // 快递公司 private int code; // 取件码 private int x; // 快递箱排数 private int y; // 快递箱列数 public Express(String number) { this.number = number; } public Express(String number, String company, int code, int x, int y) { this.number = number; this.company = company; this.code = code; this.x = x; this.y = y; } public String getNumber() { return number; } public String getCompany() { return company; } public int getCode() { return code; } public int getX() { return x; } public int getY() { return y; } public void setNumber(String number) { this.number = number; } public void setCompany(String company) { this.company = company; } public void setCode(int code) { this.code = code; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Express express = (Express) o; return code == express.code && x == express.x && y == express.y && Objects.equals(number, express.number) && Objects.equals(company, express.company); } @Override public int hashCode() { return Objects.hash(number, company, code, x, y); } @Override public String toString() { return "Express{" + "number='" + number + '\'' + ", company='" + company + '\'' + ", code=" + code + ", x=" + x + ", y=" + y + '}'; } }Main主程序 import java.util.*; public class main { private static View v = new View(); private static Map expressMap = new HashMap(); private static Scanner input = new Scanner(System.in); private static Random random = new Random(); private static int count; public static void main(String[] args) { v.welcome(); // 身份选择菜单 m:while (true) { int menu = v.menu(); switch (menu) { case 0: // 退出 v.bye(); break m; case 1: // 快递员 cClient(); break; case 2: // 普通用户 uClient(); break; } } } // 快递员菜单 private static void cClient() { while (true) { int menu = v.cMenu(); switch (menu) { case 0: return; case 1:{ // 快递录入 System.out.println("请根据提示,输入快递信息:"); System.out.println("请输入快递公司:"); String company = input.nextLine(); System.out.println("请输入快递单号:"); String number = input.nextLine(); if (expressMap.get(number) != null) { v.expressExit(); } else { // 生成 不重复 的六位数取货码 int code = 0; do{ code = random.nextInt(900000)+100000; }while(expressMap.get(code) != null); // 生成 不重复 的快递位置 int x = -1; int y = -1; do{ x = random.nextInt(10); y = random.nextInt(10); }while(expressMap.get(x) != null && expressMap.get(y) != null); Express e = new Express(number,company,code,x,y); expressMap.put(number, e); System.out.println("快递存储成功!"); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); count++; System.out.println("当前快递存储数为:"+count); } } break; case 2: { // 快递修改 System.out.println("请输入要修改的快递单号:"); String oldExpressNumber = input.nextLine(); if (expressMap.get(oldExpressNumber) == null) { v.printNull(); } else { System.out.println("请输入新的快递信息:"); System.out.println("请输入快递公司:"); String company = input.nextLine(); System.out.print("请输入新的快递单号:"); String newExpressNumber = input.nextLine(); int code = expressMap.get(oldExpressNumber).getCode(); int x = expressMap.get(oldExpressNumber).getX(); int y = expressMap.get(oldExpressNumber).getY(); Express e = new Express(newExpressNumber,company,code,x,y); expressMap.remove(oldExpressNumber); expressMap.put(newExpressNumber, e); System.out.println("恭喜你,快递信息修改成功!"); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); } } break; case 3 : { // 快递删除 System.out.print("请输入要删除的快递单号:"); String delExpressNumber = input.nextLine(); if (expressMap.get(delExpressNumber) == null) { v.printNull(); } else { int type = v.delete(); if (type == 1) { // 取货码 存储位置 快递 信息清空 expressMap.remove(expressMap.get(delExpressNumber).getCode()); expressMap.remove(expressMap.get(delExpressNumber).getX()); expressMap.remove(expressMap.get(delExpressNumber).getY()); expressMap.remove(delExpressNumber); System.out.println("快递删除成功!"); count --; System.out.println("当前快递存储数为:"+count); } } } break; case 4 :{ // 查看所有快递 for (String number : expressMap.keySet()) { Express e = expressMap.get(number); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); } System.out.println("当前快递存储数为:"+count); break; } } } } private static void uClient() { int code = v.uMenu(); int temp = 0; // 根据code找快递单号 for (String number : expressMap.keySet()) { temp ++ ; // 单号存在 if (expressMap.get(number).getCode() == code ){ String s = number; Express e = expressMap.get(s); System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列"); System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]"); // 用户取件后 System.out.println("取货成功!"); expressMap.remove(e.getCode()); expressMap.remove(e.getX()); expressMap.remove(e.getY()); expressMap.remove(e.getNumber()); count --; break; // 单号不存在 } else if (count == temp ){ v.printNull(); } } } } 实现效果录入 删除 用户取件 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |