快递柜控制台

快递管理任务

任务内容:

 代码层描述:

 view:

package com.java.view;

import com.java.bean.Express;

import java.util.Scanner;

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

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

    /**
     * 再见语
     */
    public void bye(){
        System.out.println("欢迎下次光临");
    }

    /**
     * 选择身份的菜单
     * @return
     */
    public int menu(){
        System.out.println("请输入您的身份 1、快递员 2、用户");
        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 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 cMenu();
        }
        return num;
    }

    /**
     * 快递员录入快递
     * @return 包含了快递的公司和单号的对象
     */
    public Express insert(){
        System.out.println("请按提示输入快递信息");
        System.out.println("请输入快递单号:");
        System.out.println("请输入快递公司:");
        String number = input.nextLine();
        String company = input.nextLine();
        Express e = new Express();
        e.setCompany(company);
        e.setNumber(number);
        return e;
    }

    /**
     * 查找快递信息
     * @return
     */
    public String findNumber(){
        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());
    }

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

    /**
     * 提示已存在快递
     */
    public void expressExist(){
        System.out.println("您输入的快递码有误, 请重新存储");
    }

    /**
     * 修改快递信息
     * @param e
     */
    public void update(Express e){
        System.out.println("请输入新的快递信息");
        System.out.println("请输入新的快递公司");
        System.out.println("请输入新的快递单号");
        String number = input.nextLine();
        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;
    }
    /**
     * 操作成功
     */
    public void success(){
        System.out.println("操作成功");
    }

    /**
     * 将给定数组的快递信息 遍历显示
     * @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("暂无快递信息");
        }

    }

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

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

expressdDao:

package com.java.Dao;

import com.java.bean.Express;

import java.util.Random;

public class ExpressDao {
    private Express[][] data = new Express[10][10];
    private int size;
    private Random random = new Random();
/**
 * 视频还有一个构造块初始化了这个二维数组,你没写吧
 * 在上面改成[10][10]也可以
 *
 */
    /**
     * 用于存储快递
     * @param e
     * @return
     */
    public boolean add(Express e){
        {
            for(int i=0;i<10;i++){
                data[i] = new Express[10];
            }
        }
        if(size == 100){
            return false;
        }
        //1、创建两个从0-9的下标
        int x = -1;
        int y = -1;
        while (true){
            x = random.nextInt(10);
            y = random.nextInt(10);
            if(data[x][y] == null) {
                break;
            }
        }
        //2、取件码
        int code = randomCode();
        e.setCode(code);
        data[x][y] = e;
        return true;

    }

    /**
     * 保证取件码不重复
     * @return
     */
    public int randomCode(){
        while (true){
            //生成六位随机数
            int code = random.nextInt(900000)+100000;
            Express e = findByCode(code);
            if(e == null){
                return code;
            }else{

            }
        }

    }

    /**
     * 利用快递单号查找快递
     * @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 查询结果 查询失败返回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 && data[i][j].getCode() == code){
                        return data[i][j];
                    }
            }
        }
        return null;

    }

    /**
     * 多余的操作 为了MVC更圆润
     * @param oldExpress
     * @param newExpress
     */
    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;
    }

}

Express:

package com.java.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;
    }

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

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

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

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

main:

package com.java.main;

import com.java.Dao.ExpressDao;
import com.java.bean.Express;
import com.java.view.views;

public class Main {
    //1       初始化视图对象
   private static views v = new views();
    //2       初始化Dao对象
    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:
                    System.out.println("欢迎下次使用");
                    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: {//快递录入
                       //1、     提示输入用户信息
                      Express e = v.insert();
                      //2、      判断能否存入
                      Express e2 = dao.findByNumber(e.getNumber());
                      //3、      存储快递
                      if (e2 == null){
                          //未存储过 存
                          dao.add(e);
                          v.printExpress(e);
                      }else{
                          //单号在快递柜中已存在
                          v.expressExist();
                      }

               }

                   break;
               case 2:{ //快递修改
                   String number = v.findNumber();
                   Express e = dao.findByNumber(number);
                   Express e2 = e;
                   if (e == null){
                       v.printNull();
                   }else{
                       v.printExpress(e);
                       v.update(e2);
                       dao.update(e,e2);
                       v.printExpress(e);
                   }



               }
                   break;
               case 3:{//快递删除
                   String number = v.findNumber();
                   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;
           }
       }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值