Java MVC快递管理系统

Java MVC快递管理系统


题目

在这里插入图片描述

分析

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

bean

package com.fukang.bean;

import java.util.Objects;

public class Express {

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

    public Express() {
    }

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

    public String getNumber() {
        return number;
    }

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

    public String getCompany() {
        return company;
    }

    public int getCode() {
        return code;
    }

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

    public void setCode(int code) {
        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 String toString() {
        return "Express{" +
                "number='" + number + '\'' +
                ", company='" + company + '\'' +
                ", code=" + code +
                '}';
    }

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

dao

package com.fukang.dao;

import com.fukang.bean.Express;

import java.util.Random;

public class ExpressDao {
    private Express[][] data = new Express[10][];
    {
        for(int i=0; i<10; i++){
            data[i] = new Express[10];
        }
    }
    private Random random = new Random();
    //当前存储的快递数
    private int size;

    /**
     * 存储快递
     * @param e
     * @return
     */
    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;
     }

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

    /**
     * 通过单号查找
     * @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(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 oldExpress
     * @param newExpress
     */
     public void update(Express oldExpress, Express newExpress){
         delete(oldExpress);
         add(newExpress);
     }

    /**
     * 删除快递
     * @param e
     */
     public void delete(Express e){
         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;
                 }
             }
         }
     }

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

}

View

package com.fukang.view;

import com.fukang.bean.Express;


import java.util.Scanner;

public class Views {

    private Scanner input = new Scanner(System.in);

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

    /**
     * 再见界面
     */
    public void bye(){
        System.out.println("欢迎下次使用!");
    }

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

        }
        if(num<0 || num>2){
            System.out.println("您的输入有误,请重新输入!");
            return menu();
        }
        return num;
    }

    /**
     * 用户目录
     * @return
     */
    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<100000 || num>999999){
            System.out.println("您的输入有误,请重新输入!");
            return uMenu();
        }
        return num;
    }

    /**
     * 快递员目录
     * @return
     */
    public int cMenu(){
        System.out.println("请根据提示,输入功能序号:");
        System.out.println("1. 快递录入");
        System.out.println("2. 快递修改");
        System.out.println("3. 快递删除");
        System.out.println("4. 查看所有快递");
        System.out.println("0. 返回上一层");
        String text = input.nextLine();
        int num = -1;
        try{
            num = Integer.parseInt(text);
        }catch (NumberFormatException e){

        }
        if(num<0 || num>4){
            System.out.println("您的输入有误,请重新输入!");
            return menu();
        }
        return num;
    }

    /**
     * 快递录入
     * @return 包含快递单号和快递公司
     */
    public Express insert(){
        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 printExpress(Express e){
        System.out.println("快递信息如下:");
        System.out.println("快递公司:" + e.getCompany() + ", 快递单号:" + e.getNumber() + ",取件码:" + e.getCode());
    }

    /**
     * 更新快递信息
     * @param e
     * @return
     */
    public void update(Express e){
        System.out.println("请输入新的快递单号:");
        String number = input.nextLine();
        System.out.println("请输入新的快递公司:");
        String company = input.nextLine();
        e.setNumber(number);
        e.setCompany(company);
    }

    /**
     * 询问是否删除
     * @return
     */
    public int delete(){
        System.out.println("是否确认删除:");
        System.out.println("1. 确认删除");
        System.out.println("2. 取消操作");
        String text = input.nextLine();
        int num = -1;
        try{
            num = Integer.parseInt(text);
        }catch (NumberFormatException e){

        }
        if(num<1 || num>2) {
            System.out.println("您的输入有误,请重新输入!");
            return delete();
        }
        return num;
    }

    /**
     * 遍历快递
     * @param es
     */
    public void printAll(Express[][] es){
        int count = 0;
        for(int i=0; i<10; i++){
            for(int j=0; j<10; j++){
                if(es[i][j] != null){
                    count++;
                    System.out.print("第" + (i+1) + "排 第" + (j+1) + "列,");
                    printExpress(es[i][j]);
                }
            }
        }
        if(count == 0){
            System.out.println("暂无快递信息");
        }
    }

    /**
     * 快递已经存在
     */
    public void expressExist(){
        System.out.println("此快递已经存在,请勿存储");
    }

    /**
     * 打印空
     */
    public void printNull(){
        System.out.println("快递不存在,请检查您的输入");
    }

    /**
     * 打印取件码
     * @param e
     */
    public void printCode(Express e){
        System.out.println("快递的取件码为:" + e.getCode());
    }

    /**
     * 操作成功
     */
    public void success(){
        System.out.println("操作成功");
    }
}

Main

package com.fukang.main;

import com.fukang.bean.Express;
import com.fukang.dao.ExpressDao;
import com.fukang.view.Views;

public class Main {

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

    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;
            }
        }
        v.bye();
    }

    /**
     * 用户客户端
     */
    private static void uClient(){
        //获取取件码
        int code = v.uMenu();
        //根据取件码取出快递
        Express e = dao.findByCode(code);
        if(e == null){
            v.printNull();
        }else{
            v.success();
            v.printExpress(e);
            dao.delete(e);
        }
    }

    /**
     * 快递员客户端
     */
    private static void cClient(){
        while(true){
                int menu = v.cMenu();
                switch (menu){
                    case 0: {              //返回上一层
                        return;
                    }
                    case 1: {              //快递录入
                        //提示输入快递信息
                        Express e = v.insert();
                        //此快递是否存储过
                        Express e2 = dao.findByNumber(e.getNumber());
                        //存储快递
                        if(e2 == null){
                            dao.add(e);
                            v.printExpress(e);
                        }else{
                            v.expressExist();
                        }
                        break;
                    }
                    case 2: {                //快递修改
                        //用户输入快递信息
                        String number = v.findByNumber();
                        //查找信息
                        Express e = dao.findByNumber(number);
                        //打印快递信息
                        if(e == null){
                            v.printNull();
                        }else{
                            v.printExpress(e);
                            v.update(e);
                            dao.update(e, e);         //无用操作
                            v.printExpress(e);
                        }
                        break;
                    }
                    case 3: {                         //快递删除
                        //输入快递单号
                        String number = v.findByNumber();
                        //查找快递对象
                        Express e = dao.findByNumber(number);
                        if(e == null){
                            v.printNull();
                        }else{
                            v.printExpress(e);
                            int type = v.delete();
                            if(type == 1){
                                dao.delete(e);
                                v.success();
                            }
                        }
                        break;
                    }
                    case 4: {                       //查看所有
                        Express[][] data = dao.findAll();
                        v.printAll(data);
                        break;
                    }
                }
        }
    }

}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值