包含了变量的建立,快递单号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;
@Override
public 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;
}
}
该部分有管理员的增(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和柜号boxNum
int 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,就近原则,指的是进处的exp
Express exp = array.get(i);
codes = random.nextInt(900000)+100000;
if(codes != exp.getCodes()){
//随机生成的取件码与array集合里面的取件码不相同时就可以使用该codes
break h;
}
}
//该break避免当for循环走完仍未找到合适的取件码时跳出,这是一个bug
break;
}
//系统自动生成柜子号码,且保证不能重复柜子号,原理与生成取件码一样
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);
}
}
}
}
该部分就有一个取出快递并且删除快递的功能。
/**
* 用户部分
*/
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的地方,希望大家多多指正!