欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

成为Java程序员Day10:快递管理系统

程序员文章站 2024-03-24 09:42:04
...

题目

成为Java程序员Day10:快递管理系统

题目分析

快递管理系统

MVC框架
模块分析:
1.V视图展示(欢迎,菜单,子菜单…)
2.M 数据存储(快递数据)
3.C调度逻辑(根据视图接受到用户输入,调度数据。

/*
*先分成三部分去理解,先创建三个包,分别为视图vivew,数据存储bean和调度逻辑dao
*/

view

package com.kaikeba.Day9.dao;

import com.kaikeba.Day9.bean.Express;

import java.util.Random;

public class ExpressDao {
    private Express[][] data = new Express[10][];
    private int size;

    {
        for (int i = 0; i < 10; i++) {
            data[i] = new Express[10];

        }
    }

    //    当前存储的快递数



    private Random random = new Random();

    public boolean add(Express e) {
        if (size == 100) {
            return false;
        }

//        随机生成2个0-9的下标
        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;
    }

    /*
     *
     * 模板方法设计模式
     *
     * */

    private int randomCode() {
        //100000-999999
        //0-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 (int i = 0; i <10 ; i++) {
            for (int j = 0; j < 10; j++) {
                //if(data[i][j].equals(e)){
                // return data[i][j];
                //
                // }
                //data[i][j]有可能是空的 所以不能把它放前面

                if(e.equals(data[i][j])){
                    return data[i][j];
                }

            }

        }
        return null;
    }
    /*
    *
    * 根据取件码查询快递
    * code 要查询的取件码
    * 查询的结果,查询失败返回NULL
    *
    * */

    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;

    }
/*
* 多余的操作,为了MVC更圆润。
* */
    public void update(Express oldExpress , Express newExpress) {
        delete(oldExpress);
        add(newExpress);
    }

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

            }

        }
    }

    public Express[][] findAll( ) {
        return data;
    }

}

bean.Express

package com.kaikeba.Day9.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 boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Express express = (Express) o;
        return Objects.equals(number, express.number);
    }

    @Override
    public int hashCode() {

        return Objects.hash(number);
    }

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


    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.ExpressDao

package com.kaikeba.Day9.dao;

import com.kaikeba.Day9.bean.Express;

import java.util.Random;

public class ExpressDao {
    private Express[][] data = new Express[10][];
    private int size;

    {
        for (int i = 0; i < 10; i++) {
            data[i] = new Express[10];

        }
    }

    //    当前存储的快递数



    private Random random = new Random();

    public boolean add(Express e) {
        if (size == 100) {
            return false;
        }

//        随机生成2个0-9的下标
        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;
    }

    /*
     *
     * 模板方法设计模式
     *
     * */

    private int randomCode() {
        //100000-999999
        //0-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 (int i = 0; i <10 ; i++) {
            for (int j = 0; j < 10; j++) {
                //if(data[i][j].equals(e)){
                // return data[i][j];
                //
                // }
                //data[i][j]有可能是空的 所以不能把它放前面

                if(e.equals(data[i][j])){
                    return data[i][j];
                }

            }

        }
        return null;
    }
    /*
    *
    * 根据取件码查询快递
    * code 要查询的取件码
    * 查询的结果,查询失败返回NULL
    *
    * */

    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;

    }
/*
* 多余的操作,为了MVC更圆润。
* */
    public void update(Express oldExpress , Express newExpress) {
        delete(oldExpress);
        add(newExpress);
    }

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

            }

        }
    }

    public Express[][] findAll( ) {
        return data;
    }

}

main

package com.kaikeba.Day9.main;

import com.kaikeba.Day9.bean.Express;
import com.kaikeba.Day9.dao.ExpressDao;
import com.kaikeba.Day9.view.Views;

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

    public static void main(String[] args) {

//        初始化dao对象
        ExpressDao dao = new ExpressDao();
//        1.欢迎
        v.welcome();
//        2.弹出身份选择菜单
        m:
        while (true) {
            int menu = v.menu();
            switch (menu) {
                case 0:
                    break m;
                case 1:
                    cClient();
                    break;
                case 2:
                    uClient();
                    break;
            }
        }
        v.bye();
    }

    private static void uClient() {
//        1.取件码获取
        int code = v.uMenu();
//        2.根据取件码,取出快递。
        Express e = dao.findByCode(code);
        if (e == null){
            v.printNull();
        }else {
            v.success();
            v.prinExpress(e);
        }
    }

    private static void cClient() {
        int menu = v.cMenu();
        switch (menu) {
            case 0:
                return;
            case 1: {
//                1.提示输入快递信息
                Express e = v.insert();
//                2.快递是否已经存储
                Express e2 = dao.findByNumber(e.getNumber());
//                3.存储快递
                if (e2 == null) {
//                   未存储,存
                    dao.add(e);
                    v.prinExpress(e);
                } else {
//                    快递单号已经存在
                    v.expressExist();
                }
            }
            break;
            case 2: {
//                快递修改
//                1.提示输入快递信息
                String number = v.findByNumber();
//                2.查找数据
                Express e = dao.findByNumber(number);
                Express e2 = e;
                if (e == null) {
                    v.printNull();
                } else {
                    v.prinExpress(e);
//                  4.提示修改
                    v.update(e2);
                    dao.update(e, e2);
                }

            }
            break;
            case 3: {
//                删除
//                1.提示输入快递信息
                String number = v.findByNumber();
//                2.查找数据
                Express e = dao.findByNumber(number);
                if (e == null) {
                    v.printNull();
                } else {
                    v.prinExpress(e);
                    int type = v.delete();
                    if (type == 1 ){
                        dao.delete(e);
                        v.success();
                    }

                }
            }
            break;
            case 4: {
//                查看所有
                Express[][] data=dao.findAll();
                v.printAll(data);
            }
            break;

        }
    }


}

总结:

MVC框架
1.分开处理,将视图,数据,和调度逻辑分开,分别处理。
2.可以忽略其中逻辑关系,就当前功能进行设计。
3.初学者容易接受,但是感觉有点绕。

MCV用来分割页面和数据库访问的框架,降低了两者的耦合度,同时通过Controller的控制,也使系统更加的灵活,使我们的代码更健壮,复用性更强。但是个人觉得对于复杂的生产环境,估计不够用,而且有些情况不适用,所以MVC的使用还得深入理解。

相关标签: 学习日志