Java - 快递管理系统进阶 (网络编程, 客户端与服务器端, 服务器端与本地之间的数据交互)

Java - 快递管理系统进阶 (客户端与服务器端, 服务器端与本地之间的数据交互)1. 任务要求基于之前的快递管理系统对其进行重构从而实现数据存储于客户端的分离2. 代码分层疑问 => 不应该通过实例访问静态类成员删除现在需要已删除完就对本地数据进行修改, 因为是建立在服务器上的, 所以每一次的操作都和本地数据的存取息息相关~网络编程的学习让我知道最不方便的就是服务端数据与本地数据的交互, 数据传输极为麻烦且冗余代码过多, 相信后期通过将数据层的代码提取出来后会极大的简化这一部分的开
摘要由CSDN通过智能技术生成

1. 任务要求

基于之前的快递管理系统对其进行重构从而实现数据存储于客户端的分离

2. 代码分层

20201022132


3. 关键代码

3.1 ExpressDao类(持久层操作类)
package com.java.Express12.dao;

import com.java.Express12.bean.Express;
import com.java.Express12.bean.Location;
import com.java.Express12.util.Tools;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

public class ExpressDao {
   
    private ArrayList<Express> expressList = new ArrayList<Express>();
    private Random random = new Random();
    private int size = 0;
    private static Tools tool = new Tools();

    public void setExpressList(ArrayList<Express> expressList) {
   
        this.expressList = expressList;
    }

    /**
     * 添加存储快递
     *
     * @param e
     * @return
     */
    public boolean add(Express e) throws IOException {
   
        //判断快递柜是否满了
        if (size == 100) {
   
            return false;
        }
        //生成x,y位置, x = random.nextInt(10) (0~9 随机生成)
        int x = -1;
        int y = -1;
        //比较该位置无快递才能存入, 否则不结束循环(不断的重新生成)
        while (true) {
   
            x = random.nextInt(10);
            y = random.nextInt(10);
            if (!(expressList.contains(x) && expressList.contains(y))) {
   
                break;
            }
        }
        Location l = new Location();
        l.setX(x);
        l.setY(y);
        e.setLocation(l);
        expressList.add(e);
        //生成取件码 (遍历取件码)
        int code = randomCode();
        e.setCode(code);
        tool.storeExpress(expressList);
        return true;
    }

    /**
     * 模板方法设计模式 => 知道返回结果就先写个方法
     *
     * @return
     */
    private int randomCode() {
   
        //100000~999999 => 100000 +899999
        while (true) {
   
            int code = random.nextInt(900000) + 100000;
            Express e = findByCode(code);
            if (e == null) {
   
                return code;
            }
        }
    }

    public Express findByNumber(String number) {
   
        Express e = new Express();
        e.setNumber(number);
        for (Express express : expressList) {
   
            String num = express.getNumber();
            if (num.equals(number)) {
   
                return express;
            }
        }
        return null;
    }

    public Express findByCode(int code) {
   
        for (Express express : expressList) {
   
            int code1 = express.getCode();
            if (code == code1) {
   
                return express;
            }
        }
        return null;
    }

    public void update(Express oldExpress, Express newExpress) throws IOException {
   
        delete(oldExpress);
        add(newExpress);
        tool.storeExpress(expressList);
    }

    public void delete(Express e) throws IOException {
   
        for (Express express : expressList) {
   
            if (e.equals(express)) {
   
                expressList.remove(express);
                size--;
                break;
            }
        }
        tool.storeExpress(expressList);
    }

    public ArrayList<Express> findAll() throws IOException {
   
        return tool.loadExpress();
    }
}

3.2 Client客户端类
package com.java.Express12.cloud;

import com.java.Express12.bean.Express;
import com.java.Express12.view.Views;

import java.io.*;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * @author: Aleo阿乐
 * @date: 2020/10/21
 * @time: 15:40
 */
public class Client {
   

    /**
     * 声明视图类, 确保客户端尽量不涉及持久层操作(虽然有些还是偷了点懒)
     */
    public static Views v = new Views();

    public static void main(String[] args) throws IOException, ClassNotFoundException {
   
        Scanner input = new Scanner(System.in);
        // 传入本机地址和端口
        Socket socket 
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值