快递 E 栈系统05(数组+面向对象+集合+IO+多线程+网络编程)

本文介绍了使用Java实现的快递E栈系统,结合面向对象、集合、IO、多线程和网络编程技术。系统经过改进,取消了test模块,优化了dao层,实现了服务端和客户端的多线程交互,支持多个客户端登录操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写再前面的话:

1,本文为Java学习五部分第一部分所有项目回顾(快递e站部分-对应Java体系第一部分第三阶段-13-网络)网络编程那里我同样也没有把练习作业写上,当然不止这一个练习作业。又不是所有的练习和项目都值得发博客。哪些作业在网盘里都有对应体现。
2,整体项目系列博客(包括整体快递e站系列)
3,完整的Java体系链接(比你想的更多的Java内容)

需求介绍:

在这里插入图片描述

涉及到的知识点:

上一版:
面向对象+集合+IO
这一版:
面向对象+集合+IO+多线程+网络编程

代码运行成功截图:

一,同时开启服务端与客户端

在这里插入图片描述

二,在客户端存入快递2

在这里插入图片描述

三,关闭客户端并重新开启

在这里插入图片描述

四,两个客户端登录

在这里插入图片描述

思路分析:

上一版的流程图如下:
在这里插入图片描述
以上一个快递 E 栈系统04(数组+面向对象+集合+IO)为基础讲一下这个。
这次改动的比较大,
1,首先test取消了
2,bean层不变
在这里插入图片描述
3,dao层大改动:
   3.1变量上:快递类的list集合表示链表的初始位置,创建了整个项目存储数据的文件(静态私有不可变变量)
   3.2初始化数据里的确定快递柜大小去掉,直接再创建变量时确定了。
   3.3对于以前的逻辑进行了很多改动(这里看代码就能知道,也都好理解,附录:dao层结构图)
在这里插入图片描述
4,view层这个可以去掉了。我当时忘记删除了。他的概况:
在这里插入图片描述
5,main层为主要改动部分,因为要用多线程,所以分为服务端与客户端。
server:
在这里插入图片描述
client:
在这里插入图片描述
6,异常类和IO层没有改动
总流程:
在这里插入图片描述

代码

bean层

package com.wyh.rewu.bean;
import java.io.Serializable;

/**
 * 快递实体类
 */
public class Express implements Serializable {
   

    private String number; // 单号
    private String company; // 快递公司
    private int code; // 取件码

    // 坐标
    public Integer x;
    public Integer y;

    public String getNumber() {
   
        return number;
    }

    public void setNumber(String number) {
   
        this.number = number;
    }

    public String getCompany() {
   
        return company;
    }

    public void setCompany(String company) {
   
        this.company = company;
    }

    public int getCode() {
   
        return code;
    }

    public void setCode(int code) {
   
        this.code = code;
    }

    public Integer getX() {
   
        return x;
    }

    public void setX(Integer x) {
   
        this.x = x;
    }

    public Integer getY() {
   
        return y;
    }

    public void setY(Integer y) {
   
        this.y = y;
    }

    public Express() {
   
    }

    public Express(String number, String company, int code, Integer x, Integer y) {
   
        this.number = number;
        this.company = company;
        this.code = code;
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
   
        return "Expresss{" +
                "number='" + number + '\'' +
                ", company='" + company + '\'' +
                ", code=" + code +
                ", x=" + x +
                ", y=" + y +
                '}';
    }
}

dao层

package com.wyh.rewu.dao;
import com.wyh.rewu.bean.Express;
import com.wyh.rewu.util.IOUtil;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class ExpressDao{
   
    //链表的初始设置
    private static List<Express> expressList = new ArrayList<>(100);
    //存储快递的文件名
    public static final String FILE_NAME = "快递信息.txt";

    //静态 代码块
    static {
   
        File file = new File(FILE_NAME);
        if (!file.exists()){
   //如果文件不存在,创建文件
            try {
   
                if (file.createNewFile()){
   //创建文件名为FILE_NAME的文件
                    System.out.println("第一次启动项目,创建储存文件成功!");
                }
            } catch (IOException e) {
   
                System.out.println(e.getMessage());
            }
        }
    }

    //初始化数据
    public void Dao() {
   
        //从文件中读取数据
        try {
   
            Object obj = IOUtil.readFile(FILE_NAME);
            if (obj!=null && obj instanceof List){
   
                expressList = (List<Express>) obj;
            }
        }catch (IOException | ClassNotFoundException e) {
   
            System.out.println(e.getMessage());
        }
    }

    /**
     * 获得快递的所有信息
     * @return
     */
    public static List<Express> getExpressList() {
   
        return expressList;
    }

    /**
     * 添加快递
     * @param express
     * @return
     * @throws Exception
     */
    public static Express add(Express express) throws Exception {
   
        Random random = new Random();
        if (expressList.size() == 100) {
   
            System.out.println("快递柜已存满!");
            return null;
        }
        int x, y;
        do {
   
            x = random.nextInt(10);
            y = random.nextInt(10);
        } while (isExist(x, y));

        int code;
        do {
   
            code = random.nextInt(900000) + 100000;
        } while (isExistCode(code));
        express.setCode(code);
        express.setX(x);
        express.setY(y);
        expressList.add(express);
        IOUtil.wirteFile(expressList,FILE_NAME);//更新文档中的数据
        return express;
    }


    /**
     * 添加快递中,判断当前位置是否已经存在快递
     * @param x
     * @param y
     * @return
     */
    public static boolean isExist(int x, int y) {
   
        for (Express express : expressList) {
   
            if (express.getX() == x && express.getY() == y) {
   
                return true;
            }
        }
        return false;
    }

    /**
     * 判断取件码是否已经存在
     * @param code
     * @return
     */
    public static boolean isExistCode(int code) {
   
        for (Express express : expressList) {
   
            if (express.getCode() == code) {
   
                return true;
            }
        }
        return false;
    }

    /**
     * 根据快递单号查找快递,如果不存在返回-1
     * @param number
     * @return
     */
    public static int findByNumber(String number) {
   
        int i = 0;
        for (Express express : expressList) {
   
            if (number.equals(express.getNumber())) {
   
                return i;
            }
            i++;
        }
        return -1;
    }


    /**
     * 删除快递
     * @param number
     * @return
     * @throws Exception
     */
    public static boolean delete(String number) throws Exception {
   
        int index = findByNumber(number);
        if (index == -1) {
   
            return false;
        }
        expressList.remove(index);//删除快递的操作
        IOUtil.wirteFile(expressList,FILE_NAME);
        return true;
    }

    /**
     * 更新快递
     * @param number
     * @param newExpress
     * @return
     * @throws Exception
     */
    public static boolean update(String number, Express newExpress) throws Exception {
   
        int index = findByNumber(number);
        if (index == -1) {
   
            System.out.println("快递不存在!");
            return false;
        }
        Express express1 = expressList.get(index);
        express1.setNumber(newExpress.getNumber());
        express1.setCompany(newExpress.getCompany());
        IOUtil.wirteFile(expressList,FILE_NAME);//数据加入
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值