Java IO流实例小项目(快递管理系统)

目录

概要

整体架构流程

技术名词

技术细节

运行截图


概要

        本项目是一个简单的快递管理系统,使用Java IO流进行数据的持久化存储。系统允许用户添加、查询、更新和删除快递信息。通过命令行界面与用户进行交互,实现基本的快递管理功能。

整体架构流程

  1. ExpressInfomation 类:表示快递信息的数据模型。
  2. Manager 类:管理快递信息的增删改查操作。
  3. ExpressManager 类:命令行界面,与用户进行交互。
  4. Pepole类:表示用户的数据类型。
  5. 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;
    }

}

运行截图

入库截图:

出库截图:

查询截图:

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值