package com.kkb.pojo;//bean public class Express { private String number; private String company; private Integer code; //构造方法 public Express(){ } @Override public String toString() { return number+"-"+company+"-"+code; } public Express(String number, String company, Integer code) { this.number = number; this.company = company; this.code = code; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } }
-------------------------------------------------------------------------------------------------------------
package com.kkb.dao; import com.kkb.pojo.Coordinate; import com.kkb.pojo.Express; import java.rmi.server.ExportException; import java.util.Random; /* 快递管理 */ public class ExpressDao { private Express[][] expressArr=new Express[10][10];//表示快递的柜子 private int size=0;//表示快递柜中有多少个快递 public ExpressDao() { //添加几个快递 expressArr[0][0]=new Express("10001","顺丰",123456); expressArr[2][1]=new Express("10002","圆通",112233); expressArr[5][2]=new Express("12321","中通",159463); size=3; } /** * 根据坐标去获取快递 * @param x * @param y * @return */ public Express findExpressByCoordinate(int x,int y){ return expressArr[x][y]; } /** * 根据取件码查询快递的位置 * @param code * @return */ public Coordinate findExpressByCode(int code) { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (expressArr[i][j] != null && expressArr[i][j].getCode() == code) return new Coordinate(i, j); } } return null; } /** * 根据快递单号去修改快递 * @param number * @return */ public boolean update(String number,Express newExpress) throws Exception { //判断该单号的快递是否存在 Coordinate coordinate=findExpressByNumber(number); if (coordinate==null){ throw new Exception("该快递不存在"); } //根据坐标获取到要修改的快递 Express expresses=expressArr[coordinate.getX()][coordinate.getY()]; //修改该快递的公司和单号 expresses.setCompany(newExpress.getCompany()); expresses.setNumber(newExpress.getNumber()); return true; } /** * 根据快递单号来进行删除 * @param number * @return */ public boolean delete(String number) throws Exception { //判断该单号的快递是否存在 Coordinate coordinate=findExpressByNumber(number); if (coordinate==null){ throw new Exception("该快递不存在"); } expressArr[coordinate.getX()][coordinate.getY()]=null;//表示删除 size--;//实际的快递个数 return true; } /** * 根据我们的快递单号查找 * @param number * @return */ public Coordinate findExpressByNumber(String number){ for (int i=0;i<10;i++){ for (int j=0;j<10;j++){ if (expressArr[i][j]!=null &&expressArr[i][j].getNumber().equals(number)) return new Coordinate(i,j); } } return null; } /** * 添加一个快递到快递柜中 * @param express * @return */ public Coordinate add(Express express) throws Exception { if (size==100){//如果满了 throw new Exception("快递柜已满,不能添加快递了"); } Random random=new Random(); int x,y; do { x = random.nextInt(10); y = random.nextInt(10); }while(expressArr[x][y]!=null);//该位置有快递,重新生成坐标 //系统产生随机的取件码 int code; do { code = random.nextInt(900000) + 100000; }while (isExistCode(code));//如果重复就要重新生成 express.setCode(code);//设置取件码 expressArr[x][y]=express; size++;//添加一个快递我们的实际数量要加一 return new Coordinate(x,y); } /** * 判断取件码是否重复 * @param code * @return */ public boolean isExistCode(int code){ for (int i=0;i<10;i++){ for (int j=0;j<10;j++){ if (expressArr[i][j]!=null && expressArr[i][j].getCode()==code) return true; } } return false; } /* 获取快递柜 */ public Express[][] getAllExpress() { return expressArr; } public int getSize() { return size; } }
-----------------------------------------------------------------------------------------------------------
package com.kkb.pojo; public class Coordinate { private int x; private int y; public Coordinate(){ } public Coordinate(int x,int y){ this.x = x; this.y = y; } public int getX(){ return x; } public void setX(int x){ this.x = x; } public int getY(){ return y; } public void setY(int y){ this.y = y; } }
-------------------------------------------------------------------------------------------------
package com.kkb.view; import com.kkb.dao.ExpressDao; import com.kkb.exception.OutNumberBoundException; import com.kkb.pojo.Coordinate; import com.kkb.pojo.Express; import java.util.Scanner; public class View { private Scanner input=new Scanner(System.in); private ExpressDao expressDao=new ExpressDao(); /** * 起始菜单 * @return */ public int startMenu() { int num=0; do{ System.out.println("----欢迎来到开课吧快递管理系统-----"); System.out.println("请选择:"); System.out.println("1.管理员"); System.out.println("2.普通用户"); System.out.println("0.退出"); String strNum = input.nextLine(); try { num = validateNum(strNum,0,2); break; } catch (NumberFormatException e) { System.err.println(e.getMessage()); //e.printStackTrace(); } catch (OutNumberBoundException e) { System.err.println(e.getMessage()); //e.printStackTrace(); } }while(true); if (num==1){ administorMenu(); }else if (num==2){ userMenu(); }else if (num==0) { System.out.println("谢谢使用"); } return num; } /** * 用户的菜单 */ public void userMenu(){ int code; do { System.out.print("请输入取件码"); String strCode = input.nextLine(); try { code = validateNum(strCode, 100000, 900000); break; } catch (OutNumberBoundException e) { e.printStackTrace(); } }while (true); //调用dao中的方法判断取件码是否存在 Coordinate coordinate=expressDao.findExpressByCode(code); if(coordinate!=null){ int x=coordinate.getX(); int y=coordinate.getY(); //根据坐标获取快递信息 Express express=expressDao.findExpressByCoordinate(x,y); System.out.println("快递信息:"); System.out.println("\t所在位置:柜子的第"+(x+1)+"排第"+(y+1)+"列"); System.out.println("\t"+express); //从柜子当中去移除 try { if (expressDao.delete(express.getNumber())) System.out.println("删除成功"); } catch (Exception exception) { //exception.printStackTrace(); System.err.println("删除失败"+exception.getMessage()); } }else{ System.out.println("该取件码不存在"); } } /* 管理员的菜单 */ private void administorMenu() { int num; do { System.out.println("1.快递录入"); System.out.println("2.快递删除"); System.out.println("3.快递修改"); System.out.println("4.查看所有快递"); System.out.println("0.返回上一级菜单"); System.out.print("请选择功能序号"); String strNum = input.nextLine(); try { num = validateNum(strNum, 0, 4); break; } catch (NumberFormatException e) { System.err.println(e.getMessage()); //e.printStackTrace(); } catch (OutNumberBoundException e) { System.err.println(e.getMessage()); //e.printStackTrace(); } } while (true); if (num==1){ addExpress(); }else if (num==2){ deleteExpress(); }else if (num==3){ updateExpress(); }else if (num==4){ System.out.println("------查看所有快递------"); Express[][] allExpress = expressDao.getAllExpress(); printByGrid(allExpress); //printAllExpress(allExpress); }else if (num==0){ startMenu(); } } /** * 修改快递 */ private void updateExpress(){ System.out.println("----------快递修改--------"); System.out.println("请输入要修改的快递单号"); String number=input.nextLine(); Express newExpress=new Express(); System.out.println("请输入修改后的快递单号和公司"); newExpress.setNumber(input.nextLine()); newExpress.setCompany(input.nextLine()); try { if (expressDao.update(number,newExpress)){ System.out.println("修改成功"); }else{ System.out.println("修改失败"); } } catch (Exception exception) { System.out.println("修改失败"); System.out.println(exception.getMessage()); //exception.printStackTrace(); } } /** * 删除快递 */ private void deleteExpress(){ System.out.println("-----快递删除-----"); System.out.println("请输入要删除的快递单号"); String number=input.nextLine(); try { if(expressDao.delete(number)){ System.out.println("删除成功"); }else { System.out.println("删除失败"); } } catch (Exception exception) { System.out.println("删除失败"); System.err.println(exception.getMessage()); //exception.printStackTrace(); } } /** * 快递录入 */ private void addExpress() { System.out.println("-----快递录入------"); Express express = new Express(); System.out.println("请输入快递单号和公司"); express.setNumber(input.nextLine()); express.setCompany(input.nextLine()); try { Coordinate coordinate = expressDao.add(express); System.out.println("添加成功,放在了快递柜当中的第" + (coordinate.getX() + 1) + "排第" + (coordinate.getY() + 1) + "列"); System.out.println("快递柜中共有" + expressDao.getSize() + "个快递"); } catch (Exception exception) { System.out.println("添加失败"); System.err.println(exception.getMessage()); exception.printStackTrace(); } } /** * 打印快递柜当中的所有非空的格子中的快递信息 * @param allExpress */ private void printAllExpress(Express[][] allExpress) { for (int i = 0; i < allExpress.length; i++) { for (int j = 0; j < allExpress[i].length; j++) { if (allExpress[i][j] != null) System.out.println(allExpress[i][j]); } } } /** * 按照快递柜的方式打印快递信息 * @param allExpress */ private void printByGrid(Express[][] allExpress) { for (int i = 0; i < allExpress.length; i++) { for (int j = 0; j < allExpress[i].length; j++) { if(allExpress[i][j]==null){ System.out.printf("%-20s","空\t"); }else System.out.printf("%-20s",allExpress[i][j]+"\t"); } System.out.println(); } } private int validateNum(String strNum,int begin,int end) throws NumberFormatException,OutNumberBoundException{ try{ int num=Integer.valueOf(strNum); if (num<begin || num>end){ throw new OutNumberBoundException("数字范围必须在"+begin+"和"+end+"之间!"); } return num; }catch (NumberFormatException exception){ throw new NumberFormatException("输入的必须是数字"); } } }
----------------------------------------------------------------------
调试
package com.kkb.test; import com.kkb.view.View; public class MainTest { public static void main(String[] args) { View view=new View(); while(true) { if(view.startMenu()==0) break; } } }
-------------------------------------------------------------------------------
package com.kkb.exception; public class OutNumberBoundException extends Throwable { public OutNumberBoundException(String s) { super(s); } }