还记得之前的快递管理吗?学习了集合以后,使用集合来进行快递信息的存储吧。


一共分为四个部分:

  • 快递信息部分(Express)
  • 管理员部分(快递员)(Courier)
  • 用户部分(Customer)。
  • 调用部分(Main)
  1. 第一部分是快递信息(Express)

包含了变量的建立,快递单号expressId,快递单公司company,快递柜子号数boxNum,取件码codes。以及它们的getter/setter方法、toString方法。

/*** 快递信息部分*/import java.util.Objects;public class Express {private int expressId;private String company;private int boxNum;private int codes;//柜子数量设置,决定随机到的柜号范围int boxNumAll = 100;@Overridepublic String toString() {return "Express{" +"expressId=" + expressId +", company='" + company + '\'' +", boxNum=" + boxNum +", codes=" + codes +'}';}public Express() {}public Express(int expressId, String company, int boxNum, int codes) {this.expressId = expressId;this.company = company;this.boxNum = boxNum;this.codes = codes;}public int getExpressId() {return expressId;}public void setExpressId(int expressId) {this.expressId = expressId;}public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}public int getBoxNum() {return boxNum;}public void setBoxNum(int boxNum) {this.boxNum = boxNum;}public int getCodes() {return codes;}public void setCodes(int codes) {this.codes = codes;}
}
  1. 第二部分是管理员(快递员)(Courier)

该部分有管理员的增(add)、删(delete)、改(change)、查(viewsAll)方法。

/*** 快递员操作*/import java.io.IOError;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;//创建Courier类继承Express类
public class Courier extends Express{Scanner input = new Scanner(System.in);//创建自动生成数据Random类的对象Random random = new Random();//创建取件码codes和柜号boxNumint codes = -1;int boxNum = -1;int expressNum = -1;//boolean类型的q元素用于判断该下面是否符合条件boolean q = true;//创建一个无参构造public Courier() {}//快递录入add()方法,需要传入一个ArrayList集合public void add(ArrayList<Express> array) throws IOError{//生成范围100000-999999范围的取件码,要求取件码不能重复h:while (true){//当传入的array集合为空,不判断if(array.size() == 0) {codes = random.nextInt(900000)+100000;break h;}//当传入的array集合不为空,进行判断,不能使得取件码重复for(int i = 0;i <array.size(); i++){//把array集合当中的第i个数据传给exp对象!这一点我也是看书看知识点看了好久,集合忘记的兄弟加油//创建Express对象exp,就近原则,指的是进处的expExpress exp = array.get(i);codes = random.nextInt(900000)+100000;if(codes != exp.getCodes()){//随机生成的取件码与array集合里面的取件码不相同时就可以使用该codesbreak h;}}//该break避免当for循环走完仍未找到合适的取件码时跳出,这是一个bugbreak;}//系统自动生成柜子号码,且保证不能重复柜子号,原理与生成取件码一样k:while (true){Express exp = new Express();if(array.size() == 0){boxNum = random.nextInt(exp.boxNumAll);break;}for(int i = 0;i <array.size(); i++){exp = array.get(i);boxNum = random.nextInt(exp.boxNumAll);if(boxNum != exp.getBoxNum()){break k;}}break;}//用户输入快递单号、公司名称,写入集合System.out.println("请输入快递单号:");String num = input.nextLine();try{expressNum = Integer.parseInt(num);}catch (NumberFormatException e){System.out.println("输入有误请重新操作!");}if(expressNum != -1) {Express exp = new Express();//确保快递单号已写入for (int i = 0; i < array.size(); i++) {exp = array.get(i);if (exp.getExpressId() == expressNum) {System.out.println("该快递已存在,请重新操作");q = false;break;}}}if (q == true) {Express exp = new Express();//注意,前面生成的取件码、柜号,输入的单号都还未存储到集合当中System.out.println("请输入快递公司:");String company = input.nextLine();//把取件码、柜号,输入的单号都存储到对象当中exp.setBoxNum(boxNum);exp.setCompany(company);exp.setExpressId(expressNum);exp.setCodes(codes);//把对象数据存进array集合array.add(exp);System.out.println("快递存储成功!");//打印快递信息System.out.println(exp);}}//快递员的删除操作delete()方法,传入一个ArrayList的集合public void delete(ArrayList<Express> array){System.out.println("请输入要删除的单号:");String num = input.nextLine();int expressId = -1;try{expressId = Integer.parseInt(num);}catch (NumberFormatException n){System.out.println("输入有误请重新操作");}if(expressId != -1){for(int i = 0;i < array.size(); i++){Express exp = new Express();exp = array.get(i);if(exp.getExpressId() == expressId){//删除快递信息array.remove(i);System.out.println("快递删除成功!");break;}else if(i == array.size()-1){//遍历以后未找到快递System.out.println("没有找到快递,请检查单号是否正确,重新进行操作");break;}}}}//快递员修改信息操作public void change(ArrayList<Express> array){System.out.println("请输入需要修改的快递的单号:");String num = input.nextLine();int expressId = -1;try{expressId = Integer.parseInt(num);}catch (NumberFormatException e){System.out.println("输入有误,请重新操作");}if(expressId != -1) {for (int i = 0; i < array.size(); i++) {Express exp = new Express();exp = array.get(i);if (exp.getExpressId() == expressId) {System.out.println("请输入要修改的选项\n1.单号\n2.公司");String temp = input.nextLine();int s = -1;try {s = Integer.parseInt(temp);} catch (NumberFormatException n) {System.out.println("输入有误请重新操作");}switch (s) {case 1: {System.out.println("请输入修改后的单号:");int newExpressId = input.nextInt();exp.setExpressId(newExpressId);System.out.println("修改成功");break;}case 2: {System.out.println("请输入修改后的公司:");String newCompany = input.nextLine();exp.setCompany(newCompany);System.out.println("修改成功");break;}default:System.out.println("输入有误请重新操作");break;}} else if (i == array.size() - 1) {//遍历结束未找到指定信息System.out.println("没有找到快递,请检查单号是否正确");break;}}}}//快递员查看所有快递操作public void viewsAll(ArrayList<Express> array){Express exp = new Express();if(array.size() == 0){System.out.println("还未存储快递");}else{//Express exp = new Express();for(int i = 0;i < array.size(); i++){exp = array.get(i);System.out.println(exp);}}}
}
  1. 第三部分是用户(Customer)

该部分就有一个取出快递并且删除快递的功能。

/*** 用户部分*/import java.util.ArrayList;
import java.util.Scanner;//继承Express类
public class Customer extends Express {Scanner input = new Scanner(System.in);Express e = new Express();int codes = -1;//用来标记柜子是否被存入boolean b = false;//无参构造public Customer() {}//取件getExpress()方法,传入一个ArrayList集合public void getExpress(ArrayList<Express> array){System.out.println("-----进入取件系统-----");System.out.println("请输入6位取件码");String c = input.nextLine();try{codes = Integer.parseInt(c);}catch (NumberFormatException n){System.out.println("输入有误,请根据提示重新操作");getExpress(array);}for(int i=0;i<array.size();i++){e = array.get(i);if(e.getCodes() == codes){System.out.println(e+"柜门已打卡,请取走快递!");//删除快递array.remove(i);b = true;}}if(b == false){System.out.println("为找到该快递,请联系快递公司或重新操作!");}}
}

功能方法都写出来了,剩下就是调用了:

4. Main函数调用部分:

/*** main函数部分*/import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {///创建Scanner对象input支持输入Scanner input = new Scanner(System.in);//创建ArrayList<>集合对象,存储数据ArrayList<Express> array = new ArrayList<>();//使用while(true)死循环不断的纠正用户输入p:while (true){//提示用户输入System.out.println("请输入选项\n1.快递员\n2.用户\n0.退出");//创建Courier、Custoer对象Courier co = new Courier();Customer cu = new Customer();//全局使用input.nextLine()接收不会导致接收错误String a = input.nextLine();//用于检验接收输入是否成功,使用try-catch判断int index = -1;try {//使用Integer.parseInt()方法转化为int类型的数据index = Integer.parseInt(a);}catch (NumberFormatException e){System.out.println("输入有误,请重新输入");}//赋值成功进入下一步if(index != -1) {//使用switch()分支语执行用户选项switch (index) {case 0://退出,直接终止死循环while(true)System.out.println("退出成功,再见");break p;case 1: {//快递员选项,功能列表System.out.println("选择快递员功能:\n1.录入快递\n2.修改快递\n" +"3.删除快递\n4.查看所有快递\n0.退出");//接收选项String num = input.nextLine();int temp = -1;try {temp = Integer.parseInt(num);} catch (NumberFormatException n) {System.out.println("输入有误,请重新操作");}//再次使用switch()分支语句接收用户输入选项switch (temp) {case 0://直接退出该分支语句break;case 1://录入快递,调用Curier类的add方法,传入一个ArrayList集合co.add(array);break;case 2://修改快递,调用Curier类的change()方法,传入一个ArrayList集合co.change(array);break;case 3://删除快递,调用Curier类的delete()方法,传入一个ArrayList集合co.delete(array);break;case 4://查看所有快递,调用Curier类的viewAll()方法,传入一个ArrayList集合co.viewsAll(array);break;default://选项都不能匹配,输入有误,回到首页菜单System.out.println("输入有误,请重新操作");}}//该break的存在是以为得符合switch语法规则break;case 2://选择用户,传入一个ArrayList集合cu.getExpress(array);break;default:System.out.println("您的输入有误,请重新操作!");break;}}}}
}

有些有bug的地方,希望大家多多指正!

Java-使用集合存储快递的信息相关推荐

  1. JAVA班级年龄平均值代码_java用list集合存储学生信息并算出成绩平均值操作

    需求 键盘输入五名学生信息并录入list集合; 输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值: 计算并输出他们Java语言成绩的最大值和最小值. 思路 用Scanner 键盘输入 ...

  2. java 学生信息 list_java用list集合存储学生信息并算出成绩平均值操作

    需求 键盘输入五名学生信息并录入list集合; 输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值: 计算并输出他们Java语言成绩的最大值和最小值. 思路 用Scanner 键盘输入 ...

  3. java list初始值null_关于list集合存储null的问题

    工作中,遇到list集合存储null的问题,不确定list能否存储null值.于是写一些demo测试list,set,table,及map存储null的问题. 1.list之arraylist 1 p ...

  4. java集合输入存储_Java练习IO流使用Properties集合存储数据并...

    案例: package IO; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; ...

  5. java之集合框架一Collection接口

    1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是 ...

  6. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  7. 发现大量Java原语集合处理

    在阅读博客文章5减少Java垃圾收集开销的技巧时 ,我想起了一个名为Trove的小型Java收集库,该库"为Java提供了高速的常规和原始收集". 我对应用Trove允许原始类型的 ...

  8. 集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。

    集合练习.学生信息包括学号.姓名.出生日期.性别.把N个学生的信息放入一个集合中.可以根据学号,对学生信息进行检索.并可以根据生日进行排序输出. Student.java package Collec ...

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

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

最新文章

  1. Windows2012R2 Hyper-v3.0 高可用群集安装及配置(Live Migration)
  2. Leetcode70场双周赛-第一题2144. 打折购买糖果的最小开销
  3. python字典删除元素_Python简单遍历字典及删除元素的方法
  4. 关于java自动生成一个tostring-json,解决hibernate框架,每次全属性输出,的数据动态且限制对象的属性书写到前端,使用模板!
  5. 牛客 - 拿物品(贪心)
  6. 打破冷漠僵局文章_研究僵局–第2部分
  7. ECharts属性设置
  8. 盘点20款主流应用FPS,最Skr帧率测试方法都在这里!
  9. Java小游戏程序打包成exe文件
  10. GTP-U 5GS用户面GTP协议解析
  11. 给定两个水壶,一个可以装4升水,一个能装3升水,水壶上没有任何度量标记。有一水龙头可以用来往壶中灌水。问题是怎样在能装4升的水壶里面恰好只装2升水
  12. 计算机如何执行(运行)程序
  13. 使用Aspose Java在word中绘制插入表格
  14. 纠正几个不好的工作习惯
  15. 360buy二次融资
  16. Date型日期格式转换
  17. express的api接口暴露
  18. 利用Java Calendar类打印日历
  19. 隐藏代码Android,手机隐藏代码大集合 知道5个以上是大神
  20. 13种图片后期美化处理LR预设

热门文章

  1. 拉格朗日乘数法及python实现
  2. vue项目代码格式不统一怎么办?一招教你解决
  3. Android屏幕适配之百分比布局LinearLayout、RelativeLayout、FrameLayout
  4. 生成HTML注册页面
  5. 【JavaScript】什么是JavaScript?
  6. 电商运营指标体系梳理
  7. WEB服务器迁移协议,web服务器迁移
  8. Bia布刷题日记 2022/2/16
  9. java根据出生日期自动计算年龄(工具类)
  10. 2019计算机二级c题库百度云,【2019年整理】年全国计算机等级考试二级c语言上机题库.docx...