目录
概要
本项目是一个简单的快递管理系统,使用Java IO流进行数据的持久化存储。系统允许用户添加、查询、更新和删除快递信息。通过命令行界面与用户进行交互,实现基本的快递管理功能。
整体架构流程
ExpressInfomation
类:表示快递信息的数据模型。Manager
类:管理快递信息的增删改查操作。ExpressManager
类:命令行界面,与用户进行交互。- Pepole类:表示用户的数据类型。
- PickCode类:自动生成取件码类。
技术名词
- Java语言
- Java IO流(File, FileReader, FileWriter, BufferedReader, BufferedWriter等)
技术细节
1. ExpressInfomaion 类
定义快递信息的数据模型,发件人、收件人和取件码。
package com.express.pojo;
import java.io.Serializable;
public class ExpressInfomation implements Serializable {
private People srcPeople;
private People destPeople;
private String pickupCode;
public ExpressInfomation(People srcPeople, People destPeople,String pickupCode){
this.srcPeople = srcPeople;
this.destPeople = destPeople;
this.pickupCode = pickupCode;
}
public People getSrcPeople() {
return srcPeople;
}
public People getDestPeople() {
return destPeople;
}
public String getPickupCode() {
return pickupCode;
}
}
2. Manager 类
实现快递信息的增删改查功能。使用Java IO流将数据存储到文本文件中。
package com.express.controlnet;
import com.express.pojo.ExpressInfomation;
import com.express.pojo.People;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Manage {
List<ExpressInfomation> list = new ArrayList<ExpressInfomation>();
//入库
public void add(){
People srcPeople = new People();
People desrPeople = new People();
Scanner sc = new Scanner(System.in);
//发件人信息
System.out.println("请输入发件人的姓名");
String name = sc.next();
System.out.println("请输入发件人的地址");
String address = sc.next();
System.out.println("请输入发件人的手机号");
String callPhone = sc.next();
srcPeople.setName(name);
srcPeople.setAddress(address);
srcPeople.setCallPhone(callPhone);
//收件人信息
System.out.println("请输入收件人的姓名");
String newname = sc.next();
System.out.println("请输入收件人的地址");
String newaddress = sc.next();
System.out.println("请输入收件人的手机号");
String newcallPhone = sc.next();
desrPeople.setName(newname);
desrPeople.setAddress(newaddress);
desrPeople.setCallPhone(newcallPhone);
//取件码信息
String pickupCode = PickupCode.Random_();
ExpressInfomation ei = new ExpressInfomation(srcPeople,desrPeople,pickupCode);
//检查取件码是否相同
for (ExpressInfomation e : list){
if (e.getPickupCode().equals(pickupCode)){
System.out.println("该包裹位置已被占用");
return;
}
}
list.add(ei);
System.out.println("取件码"+ei.getPickupCode());
}
//出库
public void delect(String pickupCode){
boolean cheak = true;
for ( int i = 0 ; i < list.size(); i++) {
if(list.get(i).getPickupCode().equals(pickupCode)){
list.remove(i);
cheak = false;
}
}
//判断是否出库成功
if (!cheak){
System.out.println(pickupCode +"出库成功");
}else {
System.out.println(pickupCode +"没有该包裹");
}
}
//查询快递
public void select(String name){
for (ExpressInfomation e: list) {
if (e.getPickupCode().equals(name)){
System.out.println("收件人信息"+ e.getDestPeople());
System.out.println("发件人信息"+ e.getSrcPeople());
}
if(e.getSrcPeople().getName().equals(name)){
System.out.println("发件人"+name + "取件码:" + e.getPickupCode());
}
if(e.getDestPeople().getName().equals(name)){
System.out.println("收件人"+name + "取件码:" + e.getPickupCode());
}
}
}
//文件写人
public void outputExpress() throws Exception {
String filePath = "D:\\data.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
oos.writeObject(list);
oos.close();
}
//文件写出
public void inputExpress() throws Exception {
String filePath = "d:\\data.dat";
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
list = (List<ExpressInfomation>) ois.readObject();
}
}
3. ExpressManage 类
实现命令行界面,允许用户与系统进行交互。
package com.express.controlnet;
import java.util.Scanner;
public class ExpressManage {
static Manage manage = new Manage();
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
boolean box = true;
//文件写入
manage.inputExpress();
while (box) {
System.out.println("欢迎进入————— 快递管理系统 ———————");
System.out.println("1、快递入库");
System.out.println("2、快递出库");
System.out.println("3、查询包裹");
System.out.println("4或者任意键退出");
int check = sc.nextInt();
switch (check) {
case 1: {
manage.add();
manage.outputExpress();
break;
}
case 2: {
System.out.println("请输入快递信息(快递单号)");
String pickupCode = sc.next();
manage.delect(pickupCode);
manage.outputExpress();
break;
}
case 3: {
System.out.println("请输入快递信息(收件人姓名、发件人姓名、快递单号)");
String name = sc.next();
manage.select(name);
break;
}
default: {
box = false;
}
}
}
}
}
4. People 类
用户的数据类型包含 姓名、电话、地址以及对应的getter和setter方法以及tostring方法。
package com.express.pojo;
import java.io.Serializable;
public class People implements Serializable {
private String name;
private String address;
private String callPhone;
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", callPhone='" + callPhone + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCallPhone() {
return callPhone;
}
public void setCallPhone(String callPhone) {
this.callPhone = callPhone;
}
}
4. PickupCode 类
自动生成取件码的工具类例如 4501--02
package com.express.controlnet;
import java.util.Random;
import java.util.Scanner;
public class PickupCode {
public static String Random_(){
String number = null;
String num1 = new String((int)(Math.random()*10000) + "");
String num2 = new String((int)(Math.random()*100) + "");
if (num2.length() < 2 ){
num2 = "0" + num2;
}
if (num1.length() < 4 ){
while(num1.length() != 4) {
num1 = "0" + num1;
}
}
number = num1 + "--" + num2;
return number;
}
}
运行截图
入库截图:
出库截图:
查询截图: