面向对象练习:快递柜代码
先看结构:
主程序 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("输入错误,请重新输入!");}}}
}
面向对象练习:快递柜代码相关推荐
- 人工智能研究中心快递柜——代码分析八
2021SC@SDUSC 本次开始介绍柜子的具体使用功能的实现. 由于关于wxml方面都是使用view标签设置相应参数,进行展示故不做具体分析,主要是对 wx:if的运用,合理使用js中传入的数据参数 ...
- 人工智能研究中心快递柜——代码分析七
2021SC@SDUSC 目录 index.wxml index.js 本次分析项目中柜子的定位功能的实现. index.wxml 在微信官方开发文档中,提供了map组件,通过对wx.createMa ...
- 丰巢快递柜启动超时收费3元封顶;谷歌市值一夜暴涨5000亿;两行代码构成的npm包影响到了数百万项目 | EA周报...
EA周报 2020年4月30日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 热点大事件 丰巢快递柜启动超时收费3元封顶,菜鸟驿站表态继续免费保管 从深圳市丰巢科技有 ...
- centos代码切换图形_CentOS已死;微软将强行升级部分旧版本 Windows 10 用户;黑客远程打开莫斯科近3000个快递柜...
编辑 | 万佳 本周架构视点:CentOS 8 落幕,CentOS 已死:微软将强行升级部分旧版本 Windows 10 用户:Travis CI 不再为开源项目提供免费服务:JavaScript 诞 ...
- 单方面论述题-区间贪心快递柜详解+代码——zzx的博客
题目描述 合肥市某区有一条路叫科丁路,科丁路是一条长度为L的笔直的路(可以比拟为x轴),路的两边有分布了N个小区,现在要在这条路上建一些快递柜方便居民收发快递,为了使得收发快递方便,快递公司规定每个小 ...
- 飞鸽快递系统代码_自动售卖机、视觉+重力柜、自动寻址机、智能寄存柜解决方案及整套源代码...
智能售卖机.自动寻址机.快递柜系统整套源代码及解决方案,产品已成型,可快速部署,且有成功运作案例. 智能售卖机.自动寻址机.快递柜系统系统包括(后台数据管理中心,智能售卖机.自动寻址机.快递柜系统终端 ...
- 快递取件码生成软件_一种快递柜取件码生成装置及其使用方法与流程
本发明涉及快递柜技术领域,尤其是快递柜取件码生成装置及其使用方法. 背景技术: 随着人们生活与消费水平的提高,快递业也迅猛发展,快递柜的应用也越来越普及.现如今,许多社区或公共场所已经安装了大量的智能 ...
- [附源码]JAVA+ssm基于Internet快递柜管理系统(程序+Lw)
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- [附源码]Python计算机毕业设计SSM基于Internet快递柜管理系统(程序+LW)
环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,St ...
- Java综合练习小项目——快递柜
快递柜 前言 这是针对基础部分的综合练习,需要了解的知识有变量.数据类型.数组. 取快递是现在大部分人都会做的事情,那么小白该怎么写出一个简单的取快递的程序呢?那么请按照以下功能条件来写出一个简单的快 ...
最新文章
- LSTM登顶20世纪AI论文高引No.1,NLP技术崛起!!!
- 目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?...
- python 鼠标键盘操作 pyautogui
- 关于计算机网络技术专业的演讲稿,有关互联网的演讲稿
- 264编码基本概念 FFMpeg的解码流程
- Apache日志切割shell脚本
- 双电容单相电机接线图解_拿走不谢!75例自动控制原理图、接线图
- Html5 video 标签中视频有声音没画面问题解决过程
- 16. Zend_Controller
- tushare数据分析(1)
- 使用sql语句查询access数据库
- 对面板数据模型中的一些理解
- springboot 微信支付接口
- 八年Java开发心路历程,看我如何一步一步攻克面试官,上岸蚂蚁金服!
- 用Python画一棵分形树
- es6 符号 双问号
- kubelet源码分析(二)之 NewMainKubelet
- SpringBoot实战系列之发送短信验证码
- 存储模型(蓝色字体是自己想的,没有被证实)
- php echo 双引号,php字符串单引号和双引号的区别