废话不多说,直接上代码。
package homework.chapter2.section2;
import java.util.Scanner;
public class Express {
/**
* 快递柜中最多有100个柜子
*/
static MyPackage[] myPackages = new MyPackage[100];
/**
* counter变量保存快递柜中现有多少个柜子存放了快递
*/
static int counter = 0;
public static void main(String[] args) {
Menu.mainMenu();
while (true) {
int temp = Operator.setSelect();
if (temp == 1) {
Menu.courierMenu();
switch (Operator.setSelect()) {
case 1:
Courier.add();
break;
case 2:
Courier.deleteByTrackingNumber();
break;
case 3:
Courier.modify();
break;
case 4:
Courier.viewAll();
break;
default:
System.out.println("您输入的操作代码有误!");
break;
}
} else if (temp == 2) {
Menu.userMenu();
User.getPackage();
} else {
System.out.println("您输入的用户类型不存在,请重新输入!");
Menu.mainMenu();
}
}
}
}
/**
* Menu类存放菜单视图
*/
class Menu {
/**
* 主菜单
*/
public static void mainMenu() {
System.out.println("=====欢迎使用新职课快递柜=====");
System.out.println("请输入您的身份:1-快递员,2-用户");
}
/**
* 快递员操作菜单
*/
public static void courierMenu() {
System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
}
/**
* 用户操作菜单
*/
public static void userMenu() {
System.out.println("请输入取件码:");
}
}
/**
* Operator类存放各种通用操作方法
*/
class Operator {
static private Scanner scanner = new Scanner(System.in);
static private int select = 0;
static private String trackingNumber = null;
static private String company = null;
static private String code = null;
/**
* 定义选择操作者身份的方法
*/
public static int setSelect() {
select = scanner.nextInt();
return select;
}
/**
* 定义输入快递单号的方法
*/
public static String setTrackingNumber() {
trackingNumber = scanner.next();
return trackingNumber;
}
/**
* 定义输入快递公司的方法
*/
public static String setCompany() {
company = scanner.next();
return company;
}
/**
* 定义生成取件码的方法(以生成3位取件码为例,此处假设取件码不会重复输入,判重功能待后期完善)
*/
public static String setCode() {
int i1, i2, i3;
i1 = (int) (Math.random() * 10);
i2 = (int) (Math.random() * 10);
i3 = (int) (Math.random() * 10);
code = Integer.toString(i1) + Integer.toString(i2) + Integer.toString(i3);
return code;
}
/**
* 定义获取取件码的方法
*/
public static String getCode() {
code = scanner.next();
return code;
}
}
/**
* 定义Package快递包裹类
*/
class MyPackage {
/**
* 快递单号
*/
String trackingNumber;
/**
* 快递公司名称
*/
String company;
/**
* 取件码
*/
String code;
}
/**
* 定义快递员操作类
*/
class Courier {
/**
* 定义快递员新增快递信息的方法
*/
public static void add() {
if (Express.counter >= 100) {
System.out.println("快递柜已满,无法放入更多包裹!");
Menu.mainMenu();
} else {
MyPackage myPackage = new MyPackage();
System.out.println("请输入快递单号:");
myPackage.trackingNumber = Operator.setTrackingNumber();
System.out.println("请输入公司名称:");
myPackage.company = Operator.setCompany();
myPackage.code = Operator.setCode();
System.out.println("快递已存入,取件码是:" + myPackage.code);
Express.myPackages[Express.counter++] = myPackage;
Menu.mainMenu();
}
}
/**
* 定义快递员根据快递单号删除快递信息的方法
*/
public static void deleteByTrackingNumber() {
// 快递柜已空
if (Express.counter <= 0) {
System.out.println("快递柜已空,没有待删除的快递信息!");
Menu.mainMenu();
} else { // 快递柜内还有包裹
boolean flag = false;
System.out.println("请输入要删除的快递单号:");
String trackingNumber = Operator.setTrackingNumber();
for (int i = 0; i < Express.counter; i++) {
// 找到相应快递单号的快递信息(此处假设快递单号不会重复输入,判重功能待后期完善)
if (Express.myPackages[i].trackingNumber.equals(trackingNumber)) {
// 先把i下标的元素置为null,之后直到counter之间的快递信息在数组中前移一个位置,相当于抹去了i记录
Express.myPackages[i] = null;
for (int j = i + 1; j < Express.counter; j++) {
Express.myPackages[i] = Express.myPackages[j];
}
// 柜中快递数量减1
Express.counter--;
flag = true;
System.out.println("删除成功。");
Menu.mainMenu();
break;
}
}
if (!flag) {
System.out.println("未找到快递。");
Menu.mainMenu();
}
}
}
/**
* 定义快递员根据取件码删除快递信息的方法
*/
public static void deleteByCode(String code) {
// 快递柜已空
if (Express.counter <= 0) {
System.out.println("快递柜已空,没有待删除的快递信息!");
Menu.mainMenu();
} else { // 快递柜内还有包裹
for (int i = 0; i < Express.counter; i++) {
// 找到相应快递单号的快递信息(此处假设快递单号不会重复输入,判重功能待后期完善)
// 由于是用户取件成功后才调用该方法删除被取出的快递信息,所以取件码一定存在
if (Express.myPackages[i].code.equals(code)) {
// 先把i下标的元素置为null,之后直到counter之间的快递信息在数组中前移一个位置,相当于抹去了i记录
Express.myPackages[i] = null;
for (int j = i + 1; j < Express.counter; j++) {
Express.myPackages[i] = Express.myPackages[j];
}
// 柜中快递数量减1
Express.counter--;
break;
}
}
}
}
/**
* 定义快递员修改快递信息的方法
*/
public static void modify() {
// 快递柜已空
if (Express.counter <= 0) {
System.out.println("快递柜已空,没有待修改的快递信息!");
Menu.mainMenu();
} else { // 快递柜内还有包裹
boolean flag = false;
System.out.println("请输入要修改的快递单号:");
String trackingNumber = Operator.setTrackingNumber();
for (int i = 0; i < Express.counter; i++) {
// 找到相应快递单号的快递信息(此处假设快递单号不会重复输入,判重功能待后期完善)
if (Express.myPackages[i].trackingNumber.equals(trackingNumber)) {
System.out.println("请输入新的快递单号:");
Express.myPackages[i].trackingNumber = Operator.setTrackingNumber();
System.out.println("请输入新的公司名称:");
Express.myPackages[i].company = Operator.setCompany();
flag = true;
System.out.println("修改成功。");
Menu.mainMenu();
break;
}
}
if (!flag) {
System.out.println("未找到快递。");
Menu.mainMenu();
}
}
}
/**
* 定义快递员查看所有快递信息的方法
*/
public static void viewAll() {
System.out.println("快递单号\t\t" + "公司名称\t\t" + "取件码\t\t");
for (int i = 0; i < Express.counter; i++) {
System.out.println(Express.myPackages[i].trackingNumber + "\t\t" +
Express.myPackages[i].company + "\t\t" + Express.myPackages[i].code + "\t\t");
}
Menu.mainMenu();
}
}
/**
* 定义用户操作类
*/
class User {
public static void getPackage() {
String code = Operator.getCode();
// 快递柜已空
if (Express.counter <= 0) {
System.out.println("快递柜已空,没有可取出的包裹!");
} else { // 快递柜内还有包裹
for (int i = 0; i < Express.counter; i++) {
if ((Express.myPackages[i].code).equals(code)) {
System.out.println("取件成功。");
// 取件成功后要删除该取件码所对应的快递(此处假设取件码不会重复生成,判重功能待后期完善)
Courier.deleteByCode(code);
Menu.mainMenu();
break;
}
}
}
}
}