快乐E栈项目实战第五阶段

本文档详细介绍了快乐E栈项目的第五阶段,实现了快递信息的网络通信功能。服务端使用Java实现,接收多个客户端连接,支持快递信息的存储、查询和删除。客户端通过连接服务端进行快递操作,包括添加、修改和查询。通过自定义的简单协议,数据以字符串形式在网络间传输。同时,服务端和客户端进行了简单的异常处理和身份验证。
摘要由CSDN通过智能技术生成

快乐E栈项目实战第五阶段


1、前言

学习完网络编程了,我们可以试着开发一个服务端程序,将快递信息发送到服务端进行文件存储,实际项目中也基本上都会将重要信息保存到服务端的,将数据存储在客户端并不安全。

此外,服务端支持多线程技术,我们尝试测试多客户端发送服务端进行快递存储,也就是多快递柜信息存储到服务端。

2、功能分析

由于需要多个客户端,所以我们还需要对不同客户端进行身份区分,暂时使用简单id的方式进行区分,一般设备可以发送mac地址作为唯一id,我们这里简化,客户端发送任意字符串即可,服务端也暂时不做校验。

分析下来客户端增加了如下功能:

  • 1、客户端唯一码获取,一般取设备唯一mac地址;
  • 2、身份远端验证;
  • 3、与服务端通信;

服务端功能:

  • 1、多客户端连接;
  • 2、客户端身份确认;
  • 3、以客户端身份mac为文件名创建文件;
  • 4、多客户端快递信息存储;
  • 5、文件操作;
  • 6、与多客户端通信;

3、简单协议设计

为了实现客户端和服务端的业务交互,我们需要设计简单的业务协议用来传输指令和数据,由于我们还没有总结json、xml等格式,所以暂时还是使用纯字符串的方式来囊括指令和数据。

我们的指令和快递数据通过";"分隔,第一个内容为指令,后续的为相关通信数据,为了减少程序的复杂性,暂时设计并实现以下指令:connectCheck、saveExpress、queryExpress、disconnect。

  • connectCheck:用于客户端和服务端的连接判断以及获取该客户端的快递信息存储文件名,没有该文件则创建(实际项目中可能还有注册等过程,暂时都省略,等后续总结了数据库、前端等内容后再来完善,目前的重心是实践网络编程)
  • saveExpress:用于存储快递信息,各个快递的信息也通过分号分隔转换为字符串后交互,增加、删除、修改后将全部内容进行传递存储;(不做单独的处理,文件操作单独处理较麻烦,等后续总结完数据库后使用数据库来进行这些操作更方便,这里可以用来数据字符串操作)
  • queryExpress:查询快递信息,在客户端启动开始后建立连接完成就可以从数据库查询所有数据,然后存储到本地内存中,界面的查询实际上只是从内存中查询,不用频繁查询服务端文件(实际项目中不是特别重要的数据一般也会这样缓存到客户端,但是为了防止内存修改可能有的数据也不会缓存)
  • disconnect:客户端断开连接

协议示例:

connectCheck;deviceMac=123456789

saveExpress;96=number\:123,company\:顺丰,code\:677491;70=number\:124,company\:圆通,code\:638754;20=number\:125,company\:中通,code\:990138

queryExpress;

disconnect;

4、代码

(1).服务端

Main:

package com.xiaoyaoyou.expressserver.main;

import com.xiaoyaoyou.expressclient.bean.Express;
import com.xiaoyaoyou.expressserver.dao.ExpressDao;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Objects;

public class Main {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(5555);
        System.out.println("服务端创建成功");

        while (true) {
            Socket socket = serverSocket.accept();

            new Thread(new Runnable() {
                @Override
                public void run() {
                    SocketServer socketServer = new SocketServer();
                    ExpressDao expressDao = null;
                    while (true) {
                        String res = socketServer.read(socket);
                        if(res == null) {
                            continue;
                        }
                        System.out.println(res);
                        String[] ss = res.split(";");
                        if (Objects.equals(ss[0], "connectCheck")) {
                            System.out.println("connectCheck");
                            String mac = ss[1].split("=")[1];
                            System.out.println(mac);
                            expressDao = new ExpressDao(mac);
                            socketServer.write(socket, "success");
                        } else if (Objects.equals(ss[0], "saveExpress")) {
                            expressDao.saveExpress(ss);
                            socketServer.write(socket, "success");
                        } else if (Objects.equals(ss[0], "queryExpress")) {
                            String data = expressDao.queryAllExpress();
                            if(data == null) {
                                socketServer.write(socket, "failed");
                            } else {
                                socketServer.write(socket, data);
                            }
                        } else if(Objects.equals(ss[0], "disconnect")) {
                            System.out.println("客户端断开连接");
                            break;
                        }
                    }
                }
            }).start();
        }
   }
}

对收发做了简单封装:

package com.xiaoyaoyou.expressserver.main;

import com.xiaoyaoyou.expressserver.dao.ExpressDao;

import java.io.*;
import java.net.Socket;

public class SocketServer {
    public String read(Socket socket) {
        InputStream inputStream;
        try {
            inputStream = socket.getInputStream();
        } catch (IOException e) {
            System.out.println("Get inputstream from client failed.");
            return null;
        }

        //做客户端身份验证,暂时只做文件名匹配,(等学完json和xml后续通信使用json等格式传递),目前示例:connectCheck;deviceMac:xxx
        BufferedReader bufferedReader;
        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String text;
        try {
            text = bufferedReader.readLine();
            return text;
        } catch (IOException e) {
            System.out.println("read from client inputstream faild.");
            //应该是设置超时阻塞读取,读取多少次还不成功就关闭该连接
        }
        return null;
    }

    public void write(Socket socket, String message) {
        OutputStream outputStream;
        try {
            outputStream = socket.getOutputStream();
        } catch (IOException e) {
            System.out.println("get output stream failed.");
            return;
        }
        PrintStream printStream = new PrintStream(outputStream);
        printStream.println(message);
        System.out.println("服务端发送:"+message);
    }
}

dao(目前就是查询文件和写入文件,为了方便写入每次删除文件然后再写入,快递信息固化为100个,不然文件遍历写和查询会很麻烦,我们这里的重点是网络编程):

package com.xiaoyaoyou.expressserver.dao;

import com.xiaoyaoyou.expressclient.bean.Express;

import java.io.*;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Properties;
import java.util.Random;

public class ExpressDao {
    private String pathName;

    public ExpressDao(String pathName) {
        this.pathName = pathName;
        File file = new File(pathName);
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
    }

    public void saveExpress(String[] ss) {
        File file = new File(pathName);
        if(file.exists()) {
            file.delete();
        }
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(pathName, true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        PrintStream printStream = new PrintStream(fileOutputStream);
        for(int i = 1; i < 101; i++) {
            printStream.println(ss[i]);
        }
        try {
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String queryAllExpress() {
        String res = "";
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(pathName);
        } catch (FileNotFoundException e) {
            System.out.println("file reader failed.");
            return null;
        }
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        try {
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                res += line;
                res += ";";
            }
        } catch (IOException e) {
            System.out.println("file reader failed.");
            return null;
        }

        if(res != "") {
            return res;
        }

        System.out.println("res is null.");
        return null;
    }
}

(2).客户端

Main(对socket的操作做了简单封装):

package com.xiaoyaoyou.expressclient.main;

import com.xiaoyaoyou.expressclient.dao.ExpressDao;
import com.xiaoyaoyou.expressclient.view.Views;

import java.io.IOException;

public class Main {
    //初始化视图对象
    private static Views v = new Views();
    //初始化dao对象
    private static ExpressDao dao = new ExpressDao();

    private static CourierClient cClient;
    private static UserClient uClient;

    public static void main(String[] args) {
        init();

        while (run()) {
        }

        destroy();
    }

    /**
     * 初始化
     */
    private static void init() {
        //1.欢迎
        v.welcome();

        cClient = new CourierClient(dao, v);
        uClient = new UserClient(dao, v);

        dao.queryAll();
    }

    /**
     * 主进程运行流程
     * @return
     */
    private static boolean run() {
        //2.弹出身份选择菜单
        int menu = v.menu();
        switch (menu) {
            case 0:
                //退出
                return false;
            case 1:
                //快递员
                cClient.select();
                break ;
            case 2:
                //用户
                uClient.getExpress();
                break ;
        }

        return true;
    }

    /**
     * 资源释放
     */
    private static void destroy() {
        dao.socketClient.disconnect();
        //释放资源
        v.bye();
    }
}
package com.xiaoyaoyou.expressclient.main;

import java.io.*;
import java.net.Socket;

public class SocketClient {
    private Socket socket;

    public SocketClient(String host, int port) {
        try {
            socket = new Socket(host, port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public boolean connectCheck(String mac) {
        if(socket == null) {
            return false;
        }
        this.write("connectCheck;deviceMac="+mac);
        System.out.println("connectCheck");
        String res = this.read();
        if(res == "success") {
            return true;
        }

        return false;
    }

    public String read() {
        if(socket == null) {
            System.out.println("socket is null.");
            return null;
        }
        InputStream inputStream = null;
        try {
            inputStream = socket.getInputStream();
        } catch (IOException e) {
            System.out.println("get input stream is null.");
            return null;
        }
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String text = "";
        String line = null;
        try {
            text = bufferedReader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("客户端收到消息:" + text);
        return text;
    }

    public void write(String message) {
        if(socket == null) {
            System.out.println("socket is null");
            return;
        }
        OutputStream outputStream = null;
        try {
            outputStream = socket.getOutputStream();
            PrintStream printStream = new PrintStream(outputStream);
            printStream.println(message);
        } catch (IOException e) {
            System.out.println("socket get outputstream is null.");
        }
    }

    public void disconnect() {
        this.write("disconnect");
    }
}
package com.xiaoyaoyou.expressclient.main;

import com.xiaoyaoyou.expressclient.bean.Express;
import com.xiaoyaoyou.expressclient.dao.ExpressDao;
import com.xiaoyaoyou.expressclient.view.Views;

public class UserClient {
    private ExpressDao dao;
    private Views v;

    public UserClient() {
    }

    public UserClient(ExpressDao dao, Views v) {
        this.dao = dao;
        this.v = v;
    }

    public ExpressDao getDao() {
        return dao;
    }

    public void setDao(ExpressDao dao) {
        this.dao = dao;
    }

    public Views getV() {
        return v;
    }

    public void setV(Views v) {
        this.v = v;
    }

    public void getExpress() {
        //1、获取取件码
        int code = v.uMenu();
        //2、根据取件码取出快递
        Express e = dao.findByCode(code);
        if (e == null) {
            v.printNull();
        } else {
            v.success();
            v.printExpress(e);
            dao.delete(e);
        }
    }
}

bean:

package com.xiaoyaoyou.expressclient.bean;

import java.util.Objects;

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

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

    @Override
    public String toString() {
        return "number:" + number +
                ",company:" + company +
                ",code:" + code;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass() || number == null || number.equals("null")) return false;
        Express express = (Express) o;
        return number.equals(express.number);
    }

    @Override
    public int hashCode() {
        return Objects.hash(number);
    }

    public Express() {
    }

    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;
    }
}

dao(原本的文件存储全部去掉了放到服务端了,目前查询只在客户端开始时查询一次放到内存中,然后修改、删除、添加都将所有内容全部发送服务端进行覆盖存储,等到有了数据库再细化接口即可):

package com.xiaoyaoyou.expressclient.dao;

import com.xiaoyaoyou.expressclient.bean.Express;
import com.xiaoyaoyou.expressclient.main.SocketClient;

import java.util.ArrayList;
import java.util.Objects;
import java.util.Random;

public class ExpressDao {
    private ArrayList<Express> data = null;
    public SocketClient socketClient;
    //当前存储的快递数(空间换时间)
    private int size;
    {
        data = new ArrayList<Express>();
        for(int i = 1; i <= 100; i++) {
            data.add(new Express("null", "null", 0));
        }
    }

    public ExpressDao() {
        socketClient = new SocketClient("127.0.0.1", 5555);
        socketClient.connectCheck("123456");
    }

    public boolean queryAll() {
        socketClient.write("queryExpress;");
        System.out.println("queryExpress");
        String res = socketClient.read();
        if(res == null) {
            return false;
        }

        if(res.equals("failed")) {
            return false;
        }

        String[] ss = res.split(";");
        for(int i = 0; i < ss.length; i++) {
            parseExpress(ss[i], data.get(i));
        }

        return true;
    }

    public void parseExpress(String str, Express express) {
            String[] ss2 = str.split(",");
            for(int j = 0; j < ss2.length; j++) {
                String[] ss3 = ss2[j].split(":");
                if(j == 0) {
                    express.setNumber(ss3[1]);
                } else if(j == 1) {
                    express.setCompany(ss3[1]);
                } else if(j == 2) {
                    express.setCode(Integer.parseInt(ss3[1]));
                }
            }
    }

    private Random random = new Random();

    /**
     * 用于存储快递
     * @param e
     * @return
     */
    public boolean add(Express e) {
        if(size == 100) {
            return false;
        }
        //1. 随机生成ArrayList的下标
        int index = -1;

        while (true) {
            index = random.nextInt(100);
            if (Objects.equals(data.get(index).getNumber(), "null")) {
                //此位置无快递
                break;
            }
        }
        //2. 取件码
        int code = randomCode();
        e.setCode(code);
        data.get(index).setCode(code);
        data.get(index).setNumber(e.getNumber());
        data.get(index).setCompany(e.getCompany());
        size++;

        saveExpressInfo();

        return true;
    }

    /**
     * 生成取件码(模板方法设计模式)
     * @return
     */
    private int randomCode() {
        while (true){
            int code = random.nextInt(900000)+100000;
            Express e = findByCode(code);
            if(e == null) {
                return code;
            }
        }
    }

    /**
     * 根据快递单号查询快递
     * @param number
     * @return 查询的结果,查询失败时返回null
     */
    public Express findByNumber(String number) {
        Express e = new Express();
        e.setNumber(number);
        for (Express v: data) {
            if(e.equals(v)) {
                return v;
            }
        }

        return null;
    }

    /**
     * 根据取件码查询快递
     * @param code 要查询的取件码
     * @return 查询的结果,查询失败时返回null
     */
    public Express findByCode(int code) {
        for (Express e: data) {
            if (e != null) {
                if (e.getCode() == code) {
                    return e;
                }
            }
        }
        return null;
    }


    /**
     * 多余的操作,为了mvc更圆润
     * @param oldExpress
     * @param newExpress
     */
    public void update(Express oldExpress, Express newExpress) {
        saveExpressInfo();
    }

    /**
     * 删除快递
     * @param e
     */
    public void delete(Express e) {
        if (data.isEmpty()) {
            return;
        }
        for (Express v: data) {
            if(e.getNumber() == v.getNumber()) {
                e.setCode(0);
                e.setCompany(null);
                e.setNumber(null);
                size--;
                break;
            }
        }

        saveExpressInfo();
        return ;
    }

    public ArrayList<Express> findAll() {
        return data;
    }

    /**
     * 存储快递信息
     */
    private void saveExpressInfo() {
        System.out.println("save express info");
        StringBuilder message = new StringBuilder("saveExpress;");
        for (Express e: data) {
           message.append(e.toString());
           message.append(";");
        }
        System.out.println(message.toString());
        socketClient.write(message.toString());
    }
}

5.结果

服务端

服务端创建成功
connectCheck;deviceMac=123456
connectCheck
123456
服务端发送:success
queryExpress;
服务端发送:number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:123,company:haha,code:127376;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
服务端发送:success
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:125,company:hhihi,code:127376;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
服务端发送:success
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
服务端发送:success
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:123,company:haha,code:504032;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
服务端发送:success
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:123,company:haha,code:504032;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
服务端发送:success
disconnect
客户端断开连接

客户端

connectCheck
客户端收到消息:success
欢迎使用快乐E栈快递管理系统
queryExpress
客户端收到消息:number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
请根据提示,输入功能序号:
1. 快递员
2. 普通用户
0. 退出
1
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
4
快递公司:hehe,快递单号:124,取件码:605055
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
1
请根据提示,输入快递信息:
请输入快递单号:
123
请输入快递公司:
haha
save express info
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:123,company:haha,code:127376;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
快递公司:haha,快递单号:123,取件码:127376
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
4
快递公司:hehe,快递单号:124,取件码:605055
快递公司:haha,快递单号:123,取件码:127376
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
2
请根据提示,输入快递信息:
请输入要操作的快递单号:
123
快递公司:haha,快递单号:123,取件码:127376
请根据提示,输入新的快递单号:
125
请根据提示,输入新的快递公司:
hhihi
save express info
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:125,company:hhihi,code:127376;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
快递公司:hhihi,快递单号:125,取件码:127376
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
4
快递公司:hehe,快递单号:124,取件码:605055
快递公司:hhihi,快递单号:125,取件码:127376
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
3
请根据提示,输入快递信息:
请输入要操作的快递单号:
125
快递公司:hhihi,快递单号:125,取件码:127376
是否确认删除?
1. 确认删除
2. 取消操作
0. 退出
1
save express info
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
操作成功
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
1
请根据提示,输入快递信息:
请输入快递单号:
123
请输入快递公司:
haha
save express info
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:124,company:hehe,code:605055;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:123,company:haha,code:504032;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
快递公司:haha,快递单号:123,取件码:504032
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
4
快递公司:hehe,快递单号:124,取件码:605055
快递公司:haha,快递单号:123,取件码:504032
请根据提示,输入功能序号:
1. 快递录入
2. 快递修改
3. 快递删除
4. 查看所有快递
0. 返回上级目录
0
请根据提示,输入功能序号:
1. 快递员
2. 普通用户
0. 退出
2
请根据提示,输入六位取件码:
请输入您的取件码
605055
操作成功
快递公司:hehe,快递单号:124,取件码:605055
save express info
saveExpress;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:123,company:haha,code:504032;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;number:null,company:null,code:0;
请根据提示,输入功能序号:
1. 快递员
2. 普通用户
0. 退出
0
欢迎下次使用~

截图:

在这里插入图片描述

生成的文件123456:

number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:123,company:haha,code:504032
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
number:null,company:null,code:0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称系统有问题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值