目录
今天的任务,是完成快递 E 栈(控制台简易版)系统。 经过了变量,流程控制,数组三部分的学习,让我们通过一个小项目来巩 固这些技能点吧!可不要小看我们之前学习的这些内容,现在我们足以通过这 些知识点完成一版简易的,基于控制台版本的快递 E 栈,在完成的过程中,大 家既要掌握知识的应用,也要学习里面的业务逻辑,为我们之后更大的快递 E 栈系统实现做准备。
功能介绍:
1. 角色切换(快递员和普通用户
快递员功能:存快递,删除快递,修改快递,查看所有快递
普通用户功能:取快递
2. 存快递
3. 删除快递
4. 修改快递
5. 查看所有快递
6. 取快递
思路:
1:数组可以表示快递柜,利用遍历来查找快递,创建对象,相当于一个快递柜的存取。
2:switch循环适合一个一个展现的项目,在此项目中比for更适合作主循环
3:数组下标的特性,从0下标开始,无论有多少个下标都不可能=-1,利用-1来判断对象是否创建
踩坑原因:
不知道contentEquals()方法和Math.random()方法
代码实现
package com.java.bean;
import java.util.Scanner;
public class ExpressArray {
public static void main(String[] args) {//主方法
Scanner scan = new Scanner(System.in);//控制台接收数据
String[] OrderId = new String[10];//快递单号
String[] comName = new String[10];//快递名称
int[] codeGet = new int[10];//取件码
System.out.println("欢迎使用新职课快递柜======");
System.out.println("请输入你的身份信息: 1.快递员 2.用户");
int num = scan.nextInt();//接收整数型num1
switch (num) {
case 1://快递员
System.out.println("请选择: 1.存快递 2.删除快递 3.修改快递信息 4.查看所有快递信息");
int num2 = scan.nextInt();//接收整数型num2
switch (num2) {
case 1: //存快递
int index1 = -1;//给定index1一个-1的值,用于判断快递柜是否已满,循环遍历
for (int i = 0; i < OrderId.length; i++) {//遍历数组,String类型数组初始值为null
if (OrderId[i] == null) {//查看有没有null,如果存了对象就不是null了
index1 = i;//如果有null,就把他赋值给index
break;//结束语句
}
}
if (index1 == -1) {//如果index还是-1说明i没有给index赋值,证明所有数组都不是null
System.out.println("快递柜已满,无法继续存入");
} else {//既然能走到else,说明有数组为null,那么久可以给这个数组下标重新赋值
System.out.println("请输入快递单号:");
String number1 = scan.next();//输入number1
OrderId[index1] = number1;//将数组OrderId[index1]下标赋值number1
System.out.println("请输入快递公司:");
String company = scan.next();//输入company
comName[index1] = company;//将comName[index1]下标赋值company
int code = (int) (Math.random() * 100000) + 100000;//int类型的取件码code赋值一个1000以内的数
codeGet[index1] = code;//上面code是个随机六位数,把codeGet[index1]下标赋值给他
System.out.println("快递已经存入,取件码是" + code);//输出取件码
break;//结束语句
}
break;
case 2: {//删除快递
System.out.println("请输入您要删除的快递单号");
String number2 = scan.next();//接收一个string类型的数据,number2
int index2 = -1;//同样先给定index2下标一个-1的值,查找跟number2相同的对象
for (int i = 0; i < OrderId.length; i++) {//遍历数组后,如果有跟number相同的对象把他赋值给index下标
if ((number2).equals(OrderId[i])) {//如果i下标的快递单号有跟number2相同的,则找到目标
index2 = i;//找到目标将i赋值给index
break;//结束if语句
}
}
if (index2 == -1) {//如果index还是-1说明i没有给index2赋值,证明所有下标的数组数据都不是number2
System.out.println("该快递单号不存在");
} else {//程序走到这里,说明index不是-1,number2已经找到。
OrderId[index2] = null;//但index下标下的三个数组都是初始值,说明快递已经被删除
comName[index2] = null;
codeGet[index2] = 0;
System.out.println("已删除改快递单号");
}
break;
}
case 3: {//修改快递
System.out.println("请输入您要修改的快递单号");
String number3 = scan.next();//接收一个string类型的数据,number2
int index3 = -1;//同样先给定index3下标一个-1的值,查找跟number3相同的对象
for (int i = 0; i < OrderId.length; i++) {
if ((number3).contentEquals(OrderId[i])) {
index3 = i;
break;
}
if (index3 == -1) {//如果index3还是-1说明i没有给index3赋值,证明所有下标的数组数据都不是number3
System.out.println("该快递单号不存在");
} else {//程序走到这里,说明index3不是-1,number3已经找到
System.out.println("请输入新的快递单号");
String number4 = scan.next();//接收一个string类型的数据,number4
OrderId[index3] = number4;//将数组OrderId[index3]下标赋值number4
System.out.println("请输入新的快递公司");
String newCompany = scan.next();//接收一个string类型的数据,newCompan
comName[index3] = scan.next();//将comName[index3]下标赋值company
int newCodeGet = (int) (Math.random() * 100000) + 100000;//随机数创建
codeGet[index3] = newCodeGet;//将六位随机数赋值给新的取件码newCodeGet
}
break;
}
}
case 4: {//查看所有快递
int index4 = -1; //判断快递柜是否全空
for (int i = 0; i < OrderId.length; i++) {//遍历数组
if (OrderId[i] != null) {//只要有一个下标
index4 = 0;//给index赋值0
break;//结束语句
}
}
if (index4 == -1) {//如果index4还是-1说明i没有给index4赋值,证明所有下标的数组数据都是null
System.out.println("快递柜为空,暂无快递");
} else {//程序走到这里,说明index4不是-1,index4已经赋值0
System.out.println("所有快递信息如下:");
System.out.println("快递单号\t公司名称\t取件码");
for (int i = 0; i < OrderId.length; i++) {//遍历数组输出新的取件码信息
System.out.println(OrderId[i] + "\t" + comName[i] + "\t" + codeGet[i]);
}
}
}
break;//结束循环
}
case 2://用户
System.out.println("请输入取件码");
int codeUser = scan.nextInt();//接收一个int类型的数据,codeUser
int index = -1;//匹配取件码
for (int i = 0; i < OrderId.length; i++) {
if (codeGet[i] != 0 && codeGet[i] == codeUser) {
index = i;
break;
}
}
if (index == -1) {//如果index还是-1说明i没有给index4赋值,即没有匹配到
System.out.println("未找到该快递");
} else {//程序走到这里,说明已经匹配上
OrderId[index] = null;//取件码为null,说明被取走
System.out.println("你已取件成功");
}
break;
}
}
}