先看结构:

主程序 Express_3_6

package cloud.windinfo.demo.express_3_6;import cloud.windinfo.demo.express_3_6.bean.Express;
import cloud.windinfo.demo.express_3_6.dao.ExpressDao;
import cloud.windinfo.demo.express_3_6.view.View;public class Express_3_6 {private static View view = new View(); //建立控制台private static ExpressDao expressDao = new ExpressDao();   //建立快递柜public static void main(String[] args) {Express_3_6 main = new Express_3_6();view.wellcome();    //显示欢迎while(true){switch (view.choiceActerMenu()){    //1-快递员,2-用户,0-退出系统case 1:     //快递员while(main.courier(view.courierMenu())){}   //调用快递员方法,返回true一直在快递员功能界面循环break;case 2: //用户int code=view.inputCode();  //输入取件码if(code==0){break;}else{Express e=expressDao.findExpressByCode(code);   //根据取件码找快递if (e==null){System.out.println("取件码不存在");}else{expressDao.getExpressOut(e).setNum(null);   //把快递取出来并且删掉单号System.out.println("快递已经成功取出!");}}break;case 0:view.goodbye();return;}}}/*快递员方法* @param 快递员功能界面的选项* @return 是否继续留在快递员功能界面* */private boolean courier(int choice){while(true){switch (choice){    //1-快递录入,2-删除快递,3-修改快递,4-查看所有快递,5-浏览快递柜,0-返回上级case 1: //快递录入String putNum = view.inputNum();    //输入单号if(putNum.equals("0")){return true;}if(expressDao.findExpressByNum(putNum)!=null){  //查询是否已有单号System.out.println("单号已存在!");return true;}String company = view.inputCompany();   //输入公司名if(company.equals("0")){return true;}Express newExpress = new Express(putNum,company);//建立快递对象,取件码和柜号为空expressDao.putExpressIn(newExpress);    //执行存入方法,得到取件码和柜号属性return true;case 2:     //删除快递String delNum = view.inputNum();    //输入单号if(delNum.equals("0")){return true;}Express delExpress=expressDao.findExpressByNum(delNum); //根据单号找快递if(delExpress==null){   //没找到System.out.println("单号不存在!");}else{  //找到了expressDao.getExpressOut(delExpress).setNum(null);  //取出来,并删除单号System.out.println("快递删除成功!");}return true;case 3: //修改快递String updateNum = view.inputNum(); //  输入单号查找if(updateNum.equals("0")){return true;}Express updateExpress=expressDao.findExpressByNum(updateNum);if(updateExpress==null){    //如果没找到System.out.println("单号不存在!");return true;}else { //找到以后String newNum = view.inputNum();    //输入新单号if(newNum.equals("0")){return true;}String newCompany = view.inputCompany();    //输入新的公司名if(newCompany.equals("0")){return true;}updateExpress.setNum(newNum);   //修改单号updateExpress.setCompanyName(newCompany);   //修改公司名System.out.println("修改快递成功!");}return true;case 4: //查看所有快递,遍历,非空打印for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if(expressDao.getExpressBox()[i][j]!=null){System.out.println(expressDao.getExpressBox()[i][j].toString());}}}return true;case 5: //打印快递柜System.out.println(expressDao.toString());return true;case 0: //返回false跳出快递员功能菜单return false;}}}
}

bean(封装)包,快递包裹类

package cloud.windinfo.demo.express_3_6.bean;import java.util.Arrays;/*
* 快递类,我不会动,我只有属性
* 属性:单号、取件码、公司名称、箱号(坐标)
* 方法:getter、setter、equals、toString
* */
public class Express {//单号private String num;//公司名private String companyName;//取件码private int code=-1;//在快递柜的箱号,0下标为横坐标,1下标为纵坐标,未在快递柜状态为{-1,-1}private int[] expressLocation= {-1,-1};public Express() {}//有参构造方法,只传入单号和公司名称,取件码和箱号(坐标)由快递柜生成public Express(String num, String company) {this.num = num;this.companyName = company;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getCompanyName() {return companyName;}public void setCompanyName(String companyName) {this.companyName = companyName;}public int[] getExpressLocation() {return expressLocation;}public void setExpressLocation(int[] expressLocation) {this.expressLocation = expressLocation;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Express express = (Express) o;return num.equals(express.num);}@Overridepublic String toString() {return "Express{" +"num='" + num + '\'' +", code=" + code +", company='" + companyName + '\'' +", expressLocation=" + Arrays.toString(expressLocation) +'}';}
}

dao包(存储),快递柜类

package cloud.windinfo.demo.express_3_6.dao;import cloud.windinfo.demo.express_3_6.bean.Express;import java.util.Arrays;
import java.util.Random;/*
* 快递柜类
* 属性:代表快递箱的二维数组,两个维度代表横纵坐标,数组存储Express快递对象
* 方法:getter、setter、存快递putExpressIn、分配快递箱productIndex、生成取件码prudentCode、
*      取快递getExpressOut、根据单号找快递findExpressByNum、根据取件码找快递findExpressByCode\
*       打印快递柜方法toString
* */
public class ExpressDao {private Random random = new Random();private Express[][] expressBox =new Express[10][10];public ExpressDao() {}public  Express[][] getExpressBox() {return expressBox;}public void setExpressBox(Express[][] expressBox) {this.expressBox = expressBox;}/*存快递方法* @param 没存过的快递,expressLocation={-1,-1}* @return 存成功:expressLocation 改为快递箱的坐标,存失败仍返回{-1,-1}* */public Express putExpressIn(Express e){//根据单号找快递if(findExpressByNum(e.getNum())!=null){ //如果找到了System.out.println("这个快递已经有了,下一个"); //这个快递已存过,快递对象原样退回}else{  //如果没找到int[] index = productIndex();   //分配一个空箱,拿到坐标if(index[0]==-1){System.out.println("快递柜已满,存件失败!");return e;}expressBox[index[0]][index[1]]=e;   //快递对象存进去e.setExpressLocation(index);    //把箱号存入快递对象的箱号属性int code = prudentCode();   //产生4位随机取件码e.setCode(code);    //把取件码存入快递对象的取件码属性System.out.println("快递已存入 第"+e.getExpressLocation()[0]+"行 第"+e.getExpressLocation()[1]+"列 快递箱,单号:"+e.getNum());//把存在箱子里的快递对象返回}return e;}/*取快递方法* @param 要取的快递对象* @return 被取出的快递对象 Express e(e.expressLocation= {-1,-1},e.code=-1)* */public Express getExpressOut(Express e){int[] index=e.getExpressLocation();expressBox[index[0]][index[1]]=null;e.setCode(-1);e.setExpressLocation(new int[]{-1,-1});return e;    }/*分配快递箱方法* @param* @return 长度2整数数组,下标1代表横坐标,下标2代表纵坐标* */public int[] productIndex(){int[] index={-1,-1}; //定义一个长度2的数组存放快递箱的坐标int nullNum=0;  //初始化空箱计数for (int i = 0; i < 10; i++) {  //遍历快递柜数空箱for (int j = 0; j < 10; j++) {if(expressBox[i][j]==null){nullNum++;}}}if(nullNum==0){ //没有空箱就退出去return index;}while(true){    //只有分到的箱子是空的,才返回箱子的坐标,否则一直找index[0]=random.nextInt(10);index[1]=random.nextInt(10);if(expressBox[index[0]][index[1]]==null){return index;}}}/*生成取件码方法* @param* @return 取件码1000~9999* */public int prudentCode(){int code=random.nextInt(8999)+1000;if(findExpressByCode(code)!=null){prudentCode();}return code;}//根据单号找快递/*@param String 单号*@return 快递对象* */public Express findExpressByNum(String num){for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if(expressBox[i][j]!=null&&num.equals(expressBox[i][j].getNum())){return expressBox[i][j];}}}return null;}//根据取件码找快递/*@param int 单号* @return 快递对象* */public Express findExpressByCode(int code){for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if(expressBox[i][j]!=null&&code==expressBox[i][j].getCode()){return expressBox[i][j];}}}return null;}//打印快递柜方法/*把快递柜每个快递箱存放的内容按行列打印* 空箱打印[    ]* */@Overridepublic String toString() {System.out.print(String.format("%4s"," "));for (int i = 0; i < 10; i++) {System.out.print(String.format("%8s",i));}System.out.println();for (int i = 0; i < 10; i++) {System.out.print(String.format("%8s",i));for (int j = 0; j <10; j++) {if(expressBox[i][j]==null){System.out.print(String.format("%8s","[    ]"));}else{System.out.print(String.format("%8s",expressBox[i][j].getNum()));}}System.out.println();}return "快递箱存储单号列表已打印";}
}

view(界面)包,人机界面类

package cloud.windinfo.demo.express_3_6.view;import java.util.Scanner;//控制台类
public class View {private Scanner input =new Scanner(System.in);public View() {}//欢迎public void wellcome(){System.out.println("欢迎使用Express快递柜3_6版,请根据提示操作^_^");}//再见public void goodbye(){System.out.println("感谢您的使用,请随手关闭柜门,Bye~~~");}/*选择身份* @return 身份序号 1、快递员 2、用户 0、退出系统* */public int choiceActerMenu(){int choice=-1;while(true){try{System.out.println("请选择您的身份:1-快递员,2-用户,0-退出系统");String choiceStr = input.nextLine();choice = Integer.parseInt(choiceStr);   //验证是否数字if(choice<0||choice>2){ //验证是否012throw new RuntimeException();   //不是012抛出异常,重新运行方法}return choice;}catch (RuntimeException e) {System.out.println("输入错误,请重新输入!");}}}/*快递员功能菜单* @param* @return 功能序号* */public int courierMenu(){int choice=-1;while(true){try{System.out.println("请选择您的操作:1-快递录入,2-删除快递,3-修改快递,4-查看所有快递,5-浏览快递柜,0-返回上级");String choiceStr = input.nextLine();choice = Integer.parseInt(choiceStr);if(choice<0||choice>5){throw new RuntimeException();}return choice;}catch (RuntimeException e) {System.out.println("输入错误,请重新输入!");}}}/*输入单号* @param* @return 字符串格式单号,返回"0"需要回到快递员功能菜单* */public String inputNum(){System.out.println("请输入6位数字单号(0-返回):");String num = input.nextLine();try{if(num.equals("0")){return num;}int numInt=Integer.parseInt(num);if(numInt<100000){throw new RuntimeException();}}catch (RuntimeException e) {System.out.println("单号输入错误,请重新输入!");num= inputNum();}return num;}/*快递员输入公司* @param* @return String 公司名称* */public String inputCompany(){System.out.println("请输入公司名称(0-返回):");String company = input.nextLine();return company;}//用户功能菜单public int userMenu(){return inputCode();}/*输入取件码方法* @param* @return int 四位数字取件码 1000* */public int inputCode(){int code=-1;while(true){try{System.out.println("请输入取件码,或输入0退出");String choiceStr = input.nextLine();code = Integer.parseInt(choiceStr);if(code<1000||code>9999){System.out.println("取件码输入错误,请重新输入!");throw new RuntimeException();}return code;}catch (RuntimeException e) {System.out.println("输入错误,请重新输入!");}}}
}

面向对象练习:快递柜代码相关推荐

  1. 人工智能研究中心快递柜——代码分析八

    2021SC@SDUSC 本次开始介绍柜子的具体使用功能的实现. 由于关于wxml方面都是使用view标签设置相应参数,进行展示故不做具体分析,主要是对 wx:if的运用,合理使用js中传入的数据参数 ...

  2. 人工智能研究中心快递柜——代码分析七

    2021SC@SDUSC 目录 index.wxml index.js 本次分析项目中柜子的定位功能的实现. index.wxml 在微信官方开发文档中,提供了map组件,通过对wx.createMa ...

  3. 丰巢快递柜启动超时收费3元封顶;谷歌市值一夜暴涨5000亿;两行代码构成的npm包影响到了数百万项目 | EA周报...

    EA周报 2020年4月30日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 热点大事件 丰巢快递柜启动超时收费3元封顶,菜鸟驿站表态继续免费保管 从深圳市丰巢科技有 ...

  4. centos代码切换图形_CentOS已死;微软将强行升级部分旧版本 Windows 10 用户;黑客远程打开莫斯科近3000个快递柜...

    编辑 | 万佳 本周架构视点:CentOS 8 落幕,CentOS 已死:微软将强行升级部分旧版本 Windows 10 用户:Travis CI 不再为开源项目提供免费服务:JavaScript 诞 ...

  5. 单方面论述题-区间贪心快递柜详解+代码——zzx的博客

    题目描述 合肥市某区有一条路叫科丁路,科丁路是一条长度为L的笔直的路(可以比拟为x轴),路的两边有分布了N个小区,现在要在这条路上建一些快递柜方便居民收发快递,为了使得收发快递方便,快递公司规定每个小 ...

  6. 飞鸽快递系统代码_自动售卖机、视觉+重力柜、自动寻址机、智能寄存柜解决方案及整套源代码...

    智能售卖机.自动寻址机.快递柜系统整套源代码及解决方案,产品已成型,可快速部署,且有成功运作案例. 智能售卖机.自动寻址机.快递柜系统系统包括(后台数据管理中心,智能售卖机.自动寻址机.快递柜系统终端 ...

  7. 快递取件码生成软件_一种快递柜取件码生成装置及其使用方法与流程

    本发明涉及快递柜技术领域,尤其是快递柜取件码生成装置及其使用方法. 背景技术: 随着人们生活与消费水平的提高,快递业也迅猛发展,快递柜的应用也越来越普及.现如今,许多社区或公共场所已经安装了大量的智能 ...

  8. [附源码]JAVA+ssm基于Internet快递柜管理系统(程序+Lw)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. [附源码]Python计算机毕业设计SSM基于Internet快递柜管理系统(程序+LW)

    环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,St ...

  10. Java综合练习小项目——快递柜

    快递柜 前言 这是针对基础部分的综合练习,需要了解的知识有变量.数据类型.数组. 取快递是现在大部分人都会做的事情,那么小白该怎么写出一个简单的取快递的程序呢?那么请按照以下功能条件来写出一个简单的快 ...

最新文章

  1. LSTM登顶20世纪AI论文高引No.1,NLP技术崛起!!!
  2. 目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?...
  3. python 鼠标键盘操作 pyautogui
  4. 关于计算机网络技术专业的演讲稿,有关互联网的演讲稿
  5. 264编码基本概念 FFMpeg的解码流程
  6. Apache日志切割shell脚本
  7. 双电容单相电机接线图解_拿走不谢!75例自动控制原理图、接线图
  8. Html5 video 标签中视频有声音没画面问题解决过程
  9. 16. Zend_Controller
  10. tushare数据分析(1)
  11. 使用sql语句查询access数据库
  12. 对面板数据模型中的一些理解
  13. springboot 微信支付接口
  14. 八年Java开发心路历程,看我如何一步一步攻克面试官,上岸蚂蚁金服!
  15. 用Python画一棵分形树
  16. es6 符号 双问号
  17. kubelet源码分析(二)之 NewMainKubelet
  18. SpringBoot实战系列之发送短信验证码
  19. 存储模型(蓝色字体是自己想的,没有被证实)
  20. php echo 双引号,php字符串单引号和双引号的区别

热门文章

  1. python PIL Image 图像处理基本操作
  2. 机顶盒安装APK方法
  3. 基于XTerm模拟发包实现
  4. 【Games101】Lecture05 光栅化 笔记
  5. java中BOM是什么_Java处理带BOM的文本情况是什么?
  6. Scala中的面向对象
  7. 面试经验|华为二面分享 真难ε=(´ο`*)))唉
  8. 智能安全帽-4G记录仪等移动视频图传系统里面的RTSP流输出的实现机制
  9. 更改文件夹目录、硬盘、U盘的图标
  10. JavaWeb学习笔记(上)