小区快递管理系统
知识点
抽象类、多态、equals、Object类的概念,类的继承与使用,二维数组的使用。
拓展内容:
String.valueOf()方法:把数据转换为字符串类型
注意:null类型数据不能直接用于比较判断,需要转换为字符串类型
功能实现
描述:疫情期间为了减少人员接触,很多小区在快递的配送流程中,加入了快递柜.
抽象类(父类):快递系统类
用于存放二维数组,类似数据库
public abstract class ExpressSystem {
ExpressSystem(){}
//封装属性
public String getOrderNum() {
return orderNum;
}
public void setOrderNum(String orderNum) {
this.orderNum = orderNum;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getTakeOutNum() {
return takeOutNum;
}
public void setTakeOutNum(String takeOutNum) {
this.takeOutNum = takeOutNum;
}
//快递单号
private String orderNum;
//快递公司
private String company;
//6位取件码
private String takeOutNum;
//快递柜,20表示快递柜数量(随意修改)
static Object[][] cabinet = new Object[20][3];
//x存放柜子位置
//0存放快递的单号的位置
//1存在快递公司的位置
//2存放6位取件码的位置
@Override
public String toString() {
return "这是系统类";
}
}
子类:管理员系统类
实现管理员的增删改查操作
import java.util.Random;
import java.util.Scanner;
public class UserSystem extends ExpressSystem{
UserSystem() {
super();
}
//快递录入
void write(String orderNum, String company) {
//随机产生柜子位置
Random random = new Random();
int x = 0;
int count = 0;
while (true) {
x = random.nextInt(cabinet.length);
if (String.valueOf(cabinet[x][0]).equals("null")) {
break;
}
if (count>50) {
System.out.println("快递好像存满了,请查看所有快递");
exit();
}
count++;
}
//随机产生6位取件码,转换为String类型
String takeOutNum = "0";
takeOutNum = String.valueOf(random.nextInt(999999));
//发送取件码短信给用户,不用实现
//存入父类
setCompany(company);
setOrderNum(orderNum);
setTakeOutNum(takeOutNum);
//存入数组
cabinet[x][0] = getOrderNum();
cabinet[x][1] = getCompany();
cabinet[x][2] = getTakeOutNum();
System.out.println("-------已写入的数据是-------");
System.out.println("柜子位置:"+x);
System.out.println("快递单号"+orderNum);
System.out.println("快递公司:"+company);
System.out.println("取件码:"+takeOutNum);
}
private void exit() {
// TODO Auto-generated method stub
}
//删除快递,根据单号
void remove(String orderNum) {
//根据单号判断柜子x
for (int i = 0; i < cabinet.length; i++) {
if (String.valueOf(cabinet[i][0]).equals(String.valueOf(orderNum))) {
int x = i;
//存入父类
setCompany(null);
setOrderNum(null);
setTakeOutNum(null);
//存入数组
cabinet[x][0] = getOrderNum();
cabinet[x][1] = getCompany();
cabinet[x][2] = getTakeOutNum();
System.out.println("-------快递已删除-------");
System.out.println("柜子位置:"+x+" 号的快递已删除");
}
}
}
//修改快递,根据单号
void update(String orderNum) {
//根据单号判断柜子x
for (int i = 0; i < cabinet.length; i++) {
if (String.valueOf(cabinet[i][0]).equals(String.valueOf(orderNum))) {
int x = i;
Scanner input = new Scanner(System.in);
//输入修改公司、输入修改单号、输入修改取件码
System.out.print("修改公司名:");
String company = input.nextLine();
System.out.print("修改单号:");
orderNum = input.nextLine();
System.out.print("修改取件码:");
String takeOutNum = input.nextLine();
//存入父类
setCompany(company);
setOrderNum(orderNum);
setTakeOutNum(takeOutNum);
//存入数组
cabinet[x][0] = getOrderNum();
cabinet[x][1] = getCompany();
cabinet[x][2] = getTakeOutNum();
System.out.println("-------已修改的数据是-------");
System.out.println("柜子位置:"+x);
System.out.println("快递单号"+cabinet[x][0]);
System.out.println("快递公司:"+cabinet[x][1]);
System.out.println("取件码:"+cabinet[x][2]);
}
}
System.out.println("执行结束");
}
//查看所有快递,遍历打印
void print() {
for (int i = 0; i < cabinet.length; i++) {
System.out.print("柜子位置"+i+",");
System.out.print("快递单号"+cabinet[i][0]+",");
System.out.print("快递公司"+cabinet[i][1]+",");
System.out.print("取件码"+cabinet[i][2]+"。");
System.out.println();
}
}
@Override
public String toString() {
return "这是管理员类";
}
}
子类:普通用户类
实现用户取快递操作(其实就是管理员删快递)
public class User extends ExpressSystem{
public User() {
super();
}
//取快递(删除快递)
void takeOut(String takeOutNum) {
//根据取件码号判断柜子x
for (int i = 0; i < cabinet.length; i++) {
if (String.valueOf(takeOutNum).equals(String.valueOf(cabinet[i][2]))) {
int x = i;
System.out.println("-------将要取出的快递是-------");
System.out.println("柜子位置:"+x);
System.out.println("快递单号"+cabinet[x][0]);
System.out.println("快递公司:"+cabinet[x][1]);
System.out.println("取件码:"+cabinet[x][2]);
//存入父类
setCompany(null);
setOrderNum(null);
setTakeOutNum(null);
//存入数组
cabinet[x][0] = getOrderNum();
cabinet[x][1] = getCompany();
cabinet[x][2] = getTakeOutNum();
System.out.println("快递已取出");
}
}
System.out.println("执行结束");
}
@Override
public String toString() {
return "这是用户类";
}
}
main类:测试类
测试所有类的方法是否有bug,是否成功
public class Test {
public static void main(String[] args) {
UserSystem userSystem = new UserSystem();
//管理员写入数据
userSystem.write("13", "公司");
userSystem.write("15", "公司");
userSystem.write("19", "公司");
userSystem.write("20", "公司");
//管理员修改数据
userSystem.update("13");
//管理员删除数据
userSystem.remove("20");
User user = new User();
//用户取出快递(删除数据)
user.takeOut("6613");
//打印所有数据
userSystem.print();
}
}