java练手——快递E站小项目—MVC结构二维数组存储数据

快递E站小项目--------MVC结构二维数组存储数据

通过自己搭建的MVC结构,二维数组存储数据缓存,实现简单的控制台快递柜功能,只能实现一次性的功能演示。

————————————————————————————————————————————

用户分为 快递员,普通用户

快递员:

增加快递:输入单号、公司、自动生成取件码
删除快递:输入单号删除快递
修改快递:输入单号查询快递,修改单号和公司,取件码不变
查询快递:显示当前所有快递

普通用户:

取快递:输入取件码,删除快递。

————————————————————————————————————

MVC结构

M——model

存储快递数据基本信息——快递单号、快递公司、取件码

public class Express implements Serializable {
    
    
    private String number;  //快递单号
    private String company;  //快递公司
    private int code;   //取件码
    
    //重写toString方法
    @Override
    public String toString() {
    
    
        return "Express{" +
                "number='" + number + '\'' +
                ", company='" + company + '\'' +
                ", code=" + code +
                '}';
    }
    
    //基础数据实现get和set方法,方便外面操作数据,因为外面无法操作私有(private)属性数据
    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;
    }
}

V——view

提共界面,实现与用户的信息交互

import express.java.bean.Express;


import java.util.Scanner;

public class View {
    
    
    Scanner input = new Scanner(System.in);

    /**
     * 进入系统
     */
    public void welcome() {
    
    
        System.out.println("欢迎使用快递管理系统");
    }

    /**
     * 退出
     */
    public void exit() {
    
    
        System.out.println("欢迎下次使用");
    }

    /**
     * 主菜单选择身份
     * @return num身份选项
     */
    public int menu() {
    
    
        System.out.println("请根据提示,输入功能序号:");
        System.out.println("1:快递员,2:用户,3:退出");
        //使用nextLine,不产生冲突,
        String text = input.nextLine();
        int num = -1;
        try {
    
    
            num = Integer.parseInt(text);
        }catch(NumberFormatException e) {
    
    

        }
        if(num<0 || num>2) {
    
    
            return menu();
        }
        return num;
    }

    /**
     * 快递员菜单
     */
    public int cMenu() {
    
    
        System.out.println("请根据提示,输入功能:");
        System.out.println("1:快递录入,2:快递修改,3:快递删除,4:查看快递,0:退出");
        String text = input.nextLine();
        int num = -1;
        try {
    
    
            num = Integer.parseInt(text);
        }catch(NumberFormatException e) {
    
    

        }
        if(num<0 || num>4) {
    
    
            return cMenu();
        }
        return num;
    }

    /**
     *用户菜单
     */
    public int uMenu() {
    
    
        System.out.println("请根据提示取件");
        System.out.println("请输入取件码");
        String code = input.nextLine();
        int num = -1;
        try {
    
    
            num = Integer.parseInt(code);
        }catch(NumberFormatException e) {
    
    

        }
        if(num<10000 || num>999999) {
    
    
            System.out.println("输入有误,请重新输入");
            return uMenu();
        }
        return num;
    }

    /**
     * 添加快递
     * @return
     */
    public Express add() {
    
    
        System.out.println("请根据操做输入快递信息");
        System.out.println("请输入快递单号:");
        String number = input.nextLine();
        System.out.println("请输入公司名:");
        String company = input.nextLine();
        Express e = new Express();
        e.setNumber(number);
        e.setCompany(company);
        return e;
    }

    /**
     * 提示用户输入快递单号
     * @return
     */
    public String findByNumber() {
    
    
        System.out.println("请输入快递信息");
        System.out.println("请输入要操作的快递单号:");
        String number = input.nextLine();
        return number;
    }

    /**
     * 打印信息
     * @param e
     */
    public void printExress(Express e) {
    
    
        System.out.println("快递信息如下:");
        System.out.println("快递单号"+e.getNumber()+",快递公司"+e.getCompany()+",取件码"+e.getCode());
    }

    /**
     * 更新快递信息
     * @param e
     */
    public void update(Express e) {
    
    
        System.out.println("请根据操做输入快递信息");
        System.out.println("请输入快递单号:");
        String number = input.nextLine();
        System.out.println("请输入公司名:");
        String company = input.nextLine();
        e.setNumber(number);
        e.setCompany(company);
    }
    
    /**
    *删除提示
    */
    public int delete(){
    
    
        System.out.println("请根据提示,输入功能序号:");
        System.out.println("1:删除,2:不删除,3:退出");
        //使用nextLine,不产生冲突,
        String text = input.nextLine();
        int num = -1;
        try {
    
    
            num = Integer.parseInt(text);
        }catch(NumberFormatException e) {
    
    

        }
        if(num<0 || num>2) {
    
    
            return delete();
        }
        return num;
    }

    /**
    *查询打印所有快递
    */
    public void printAll(Express[][] es) {
    
    
        if (es == null || es.length == 0) {
    
    
            System.out.println("暂无快递");
            return;
        }
        for (int i=0; i<10; i++) {
    
    
            for (int j=0; j<10; j++) {
    
    
                if (es[i][j] != null) {
    
    
                    System.out.println("第" + (i + 1) + "排,第" + (j + 1) + "列");
                    printExress(es[i][j]);
                }
            }
        }
    }
    
    //提示单号存在
    public void expressExist(){
    
    
        System.out.println("此单号已经存在");
    }
}

C——Controller

实现数据处理的的逻辑功能

import express.java.bean.Express;
import java.util.Random;

public class ExpressDao {
    
    

    private static int size = 0;  //储存的大小
    private Express[][] data = new Express[10][];  //初始化二维数组
    //构造代码块,类加载一次自动执行一次,实现二维数组自动初始化
    {
    
    
        for (int i=0; i<10; i++) {
    
    
            data[i] = new Express[10];
        }
    }
    private Random random = new Random();

    /**
     * 添加快递方法,x、y看作快递柜位置,随机位置存储
     * @param e
     * @return
     */
    public boolean add(Express e) {
    
    
        if (size == 10) {
    
    
            return false;
        }
        int x = -1;
        int y = -1;
        while(true) {
    
    
            x = random.nextInt(10);
            y = random.nextInt(10);
            if(data[x][y] == null){
    
    
                break;
            }
        }
        int code =randomCode();
        e.setCode(code);
        data[x][y] = e;
        return  true;
    }

    /**
     * 自动生成六位取件码
     * @return
     */
    private int randomCode() {
    
    
        while (true) {
    
    
            int code = random.nextInt(900000) + 100000;
            Express e = findByCode(code);
            if (e == null) {
    
    
                return code;
            }else {
    
    
                continue;
            }
        }
    }


    /**
     * 按照查询单号快递对象
     * @param number
     * @return
     */
    public Express findByNumber(String number) {
    
    
        Express e = new Express();
        e.setNumber(number);
        for (int i=0; i<10; i++){
    
    
            for (int j=0; j<10; j++){
    
    
                if (data[i][j] != null) {
    
    
                    if (e.equals(data[i][j])) {
    
    
                        return data[i][j];
                    }
                }
            }
        }
        return null;
    }

    /**
     * 按照取件码查询快递对象
     * @param code
     * @return
     */
    public Express findByCode(int code) {
    
    
        for (int i=0; i<10; i++){
    
    
            for (int j=0; j<10; j++){
    
    
               if (data[i][j] != null) {
    
    
                   if (data[i][j].getCode() == code) {
    
    
                       return data[i][j];
                   }
               }
            }
        }
        return null;
    }

    /**
     * 删除快递
     * @param e
     */
    public void delete(Express e) {
    
    
        p:for (int i=0; i<10; i++){
    
    
            for (int j=0; j<10; j++){
    
    
                if (e.equals(data[i][j])) {
    
    
                    data[i][j] = null;
                    break p;
                }
            }
        }
    }

    /**
     * 更新快递,可忽略本步骤,只是演示数据交互
     * @param oldExpress
     * @param newExpress
     */
    public void update(Express oldExpress,Express newExpress) {
    
    
        delete(oldExpress);
        add(newExpress);
    }

    /**
     * 查找所有快递
     * @return
     */
    public Express[][] findAll(){
    
    
        return data;
    }
}

Main

功能的综合实现,

import express.java.bean.Express;
import express.java.dao.ExpressDao;
import express.java.view.View;

public class Main {
    
    
    private static View v = new View();
    private static ExpressDao dao = new ExpressDao();
    
    public static void main(String[] args) {
    
    

        v.welcome();
        //选择用户类型
        m:while (true) {
    
    
            int menu = v.menu();
            switch (menu) {
    
    
                case 0:
                    break m;
                case 1:
                    cClient();
                    break;
                case 2:
                    uClient();
                    break;
                case 3:
                    break m;
            }
        }
    }

    /**
     * 普通用户取件功能
     */
    private static void uClient() {
    
    
        int code = v.uMenu();
        Express  e = dao.findByCode(code);
        if (e == null) {
    
    
            System.out.println("快递不存在");
        }else {
    
    
            v.printExress(e);
            dao.delete(e);
            System.out.println("取件成功");
        }
    }

    /**
     * 快递员各项功能
     */
    private static void cClient() {
    
    
        while (true) {
    
    
            int menu = v.cMenu();
            switch (menu) {
    
    
                case 0:
                    return;
                case 1: {
    
    
                    Express e = v.add();
                    Express e2 = dao.findByNumber(e.getNumber());
                    if (e2 == null) {
    
    
                        dao.add(e);
                    } else {
    
    
                        v.expressExist();
                    }
                }
                break;
                case 2: {
    
    
                    String number = v.findByNumber();
                    Express a = dao.findByNumber(number);

                    if (a == null) {
    
    
                        System.out.println("快递不存在");
                    } else {
    
    
                        v.printExress(a);
                        v.update(a);
                        dao.update(a, a);
                        v.printExress(a);
                    }
                }
                break;
                case 3: {
    
    
                    String number = v.findByNumber();
                    Express e = dao.findByNumber(number);
                    if (e == null) {
    
    
                        System.out.println("快递不存在");
                    } else {
    
    
                        v.printExress(e);
                        int type = v.delete();
                        if (type == 1) {
    
    
                            dao.delete(e);
                        }
                    }
                }
                break;
                case 4: {
    
    
                    Express[][] data = dao.findAll();
                    v.printAll(data);
                }
                break;

            }
        }
    }
}

以上是快递柜实现的所有代码,可以参考和修改,希望提出建议
改进本次项目,使用集合进行数据 存储和实现序列化的本地文件存储数据

项目改进博客终极版快递E站——使用集合存储数据,序列化到本地文件

猜你喜欢

转载自blog.csdn.net/weixin_45600855/article/details/113142953