任务要求:分模块进行编写,面向对象,要有快递员类,用户类,快递员要有增删改查的功能,用户可以凭随机取件码拿快递。
我的思路:分为master主模块,view视图模块,Dao存储模块,和Express快递功能模块
一,Master主模块
package com.mei.cn5.a;
import com.mei.cn5.b.View;
import com.mei.cn5.c.Express;
import com.mei.cn5.d.Dao;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Master {
public static Scanner in = new Scanner(System.in);
public static List<Dao> parcelArray = new ArrayList<>();
public static Set<Integer> codeCheck = new HashSet<>();
public static void main(String[] args) {
while (true){
startMenu();
}
}
private static void startMenu() {
view.start();
while (true) {
int num = in.nextInt();
if (num == 1) {
staffMenu();
} else if (num == 2) {
userMenu();
} else if (num == 3) {
System.exit(0);
} else {
System.out.println("请重新输入");
}
}
}
private static void userMenu() {
view.userStart();
while (true) {
int num = in.nextInt();
if (num == 1) {
userGetMod();
} else if (num == 2) {
showMod();
} else if (num == 3) {
startMenu();
} else if (num == 4) {
System.exit(0);
} else {
System.out.println("请重新输入");
}
}
}
private static void userGetMod() {
view.usergetmodStart();
Express.userGetMod();
userMenu();
}
private static void staffMenu() {
view.staffStart();
while (true) {
int num = in.nextInt();
if (num == 1) {
saveMod();
} else if (num == 2) {
getMod();
} else if (num == 3) {
updateMod();
} else if (num == 4) {
showMod();
} else if (num == 5) {
startMenu();
} else if (num == 6) {
System.exit(0);
} else {
System.out.println("请重新输入");
}
}
}
private static void showMod() {
view.showmodStart();
Express.showMod();
startMenu();
}
private static void updateMod() {
view.updatemodStart();
Express.updateMod();
staffMenu();
}
private static void getMod() {
view.getmodStart();
Express.getMod();
staffMenu();
}
private static void saveMod() {
Express.saveMod();
staffMenu();
}
}
ps:主程序中的主方法调用startMenu运用的无限循环可能导致程序效率低,可以选择其他方法调用
二,Express快递功能模块
package com.mei.cn5.c;
import com.mei.cn5.d.Dao;
import java.util.Random;
import static com.mei.cn5.a.Master.*;
public class Express {
public static void showMod(){
for (Dao parcelMessage : parcelArray) {
System.out.println(parcelMessage.getUid() + "\t" + parcelMessage.getCompanyName() + "\t"
+ parcelMessage.getPickupCode() + "\t");
}
}
public static void saveMod(){
if (parcelArray.size() > 999) {
System.out.println("快递柜已存满");
}
System.out.println("请输入一个新的快递单号");
String num = in.next();
System.out.println("请输入快递公司");
String com = in.next();
int id;
do {
id = new Random().nextInt(1000);
} while (codeCheck.contains(id));
parcelArray.add(new Dao(num, com, id));
}
public static void getMod() {
String num = in.next();
Dao parcelMessage = getByUid(num);
if (parcelMessage == null) {
System.out.println("这个单号不正确,请重新输入");
getMod();
} else {
parcelArray.remove(parcelMessage);
codeCheck.remove(parcelMessage.getPickupCode());
}
}
private static Dao getByUid(String num) {
for (Dao parcelMessage : parcelArray) {
if (parcelMessage.getUid().equals(num)) {
return parcelMessage;
}
}
return null;
}
public static void updateMod() {
System.out.println("请输入要修改的快递单号");
String num = in.next();
Dao parcelMessage = getByUid(num);
if (parcelMessage == null) {
System.out.println("这个单号不正确");
} else {
System.out.println("请输入修改后的快递单号");
num = in.next();
System.out.println("请输入新的公司名");
String com = in.next();
parcelMessage.setUid(num);
parcelMessage.setCompanyName(com);
}
}
public static void userGetMod() {
int num = in.nextInt();
Dao parcelMessage = getByPickupCode(num);
if (parcelMessage == null) {
System.out.println("你的取件码无效,请重新输入");
} else {
System.out.println("取件成功");
parcelArray.remove(parcelMessage);
}
}
private static Dao getByPickupCode(int num) {
for (Dao parcelMessage : parcelArray) {
if (parcelMessage.getPickupCode() == num) {
return parcelMessage;
}
}
return null;
}
}
ps:这里博主偷懒,本应把所有System.out.print语句内容放到view模块下,正常调用方法即可。
还有就是如果不会使用
public static List<Dao> parcelArray = new ArrayList<>()
可以选择用数组进行修改和存取快递
private static void getMetmod(int indexget) {
for(int i = indexget ; i < index ; i++){
uid[i] = uid[i+1];
comp[i] = comp[i+1];
code[i] = code[i+1];
}
index--;
startMenu();
}
一个思路,需要修改
三,Dao存储模块
package com.mei.cn5.d;
import com.mei.cn5.c.Express;
public class Dao {
private String uid;
private String companyName;
private int pickupCode;
public Dao(String uid, String companyName, int pickupCode) {
this.uid = uid;
this.companyName = companyName;
this.pickupCode = pickupCode;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public int getPickupCode() {
return pickupCode;
}
}
ps:本模块主要存储快递相关信息,按需更改代码即可
四,View视图模块
本模块比较简单,主要是各种对话,用于装饰系统
package com.mei.cn5.b;
import com.mei.cn5.a.Master;
public class View extends Master {
public static void start(){
System.out.println("===菜单===");
System.out.println("请选择您的身份");
System.out.println("1,快递员 2,用户 3,退出");
}
public static void userStart() {
System.out.println("欢迎来到用户操作系统");
System.out.println("=请选择您需要的功能=");
System.out.println("1,取快递 2,查快递 3,返回 4,退出");
}
public static void staffStart() {
System.out.println("欢迎来到快递员操作系统");
System.out.println("=请选择您需要的功能=");
System.out.println("1,存快递 2,取快递 3,修改快递 4,查快递 5,返回 6,退出");
}
public static void showmodStart() {
System.out.println("查询信息");
System.out.println("单号\t公司\t取件码");
}
public static void updatemodStart() {
System.out.println("请输入要修改的快递单号");
}
public static void getmodStart() {
System.out.println("请输入要取出的快递单号");
}
public static void usergetmodStart() {
System.out.println("请输入你的取件码");
}
}