手动实现简易版小区快递柜管理系统 Version 0.1.1

1 项目概述

众所周知,快递柜是用来存放快递的,其基本功能就包括存快递和取快递。快递柜系统仅面向两个使用人群——普通用户和快递员。对于普通用户来说就仅仅是取快递这一个功能,这里就不展开叙述。对于快递员来说,他们并不仅仅是送快递的快递员,而是快递的管理者,对快递柜的数据进行操作才可以做到管理,因此这个快递柜系统不是仅包含一个存放快递的功能。

快递员作为快递的管理者,快递柜系统应该提供增删改查这4个基本功能:
1.存放快递:供快递员录入快递信息(包括:快递单号、快递公司的名称),录入完成后信息存储到系统中并返回一个六位随机数的取件码,用于以后用户取件;
2.删除快递:当快递信息录入有误时,快递员需要删除已经录入的快递信息,系统中根据输入的单号进行删除,释放快递柜空间;
3.修改快递:当发现快递信息有误需要修改的时候,此功能可以实现删除存放和存放功能合一,而不用删除完之后再录入那么浪费时间;
4.查看所有:顾名思义,查看柜子中全部快递的信息和单号,以及其摆放位置。

2 实现步骤

明确了各个模块的功能之后,我们就可以着手编写我们的代码了。这个系统是一个可以与用户交互和储存信息的系统,因此整体就分成3部分来写,第一部分是视图部分,实现控制台的输入输出,第二部分是快递数据的结构和存取,第三部分是调度部分,用于输入输出的与数据的衔接。

2.1 视图部分

管理系统一套流程下来会涉及很多打印,在初始就会打印欢迎的话,紧接着来的就是身份选择,当选择身份为普通用户的时候会打印提示输入取件码,输入的取件码通过筛选之后交由调度方法进行判断,判断结束后打印取件成功或者失败。当选择快递员时,快递员对快递有4个操作可以选择,增、删、改、查。存放(增加)快递时,当快递柜非满时需要输入单号和公司名称才能完成存放,此时将输出快递柜的位置和取件码,当快递员输入的单号与柜中的单号重复时会提示输入有错误。删除快递需要根据单号,判断是否存在可以删除快递的数据,不存在将退出当前操作,存在时会进一步询问是否真的要删可以选择进行或者取消。修改则为删除和增加的两个方法的结合体,先让快递员输入单号判断是否存在然后询问是否继续修改,若继续则输入新的信息和输出新的位置单号,操作结束。查看所有快递,则是把快递所有的信息打印出来,可以查看到先前所有操作过的快递。

2.2 数据部分

把快递的单号、公司和取件码封装成一个快递类,把快递柜看作一个又快递类对象组成的数组,而存放的位置就是这个二维数组的下标。

2.3 调度部分

重头戏来了,有了与用户交互的界面和储存数字的空间,还需要需要对两者进行调度,才能有效的实现需求。由于在用户输入时以及对输入的内容进行初步筛选,筛掉有格式或数值有异常的,因此能够进入调度部分而信息不会报错并进行下一步的运行。当接收到用户的信息之后,调用方法进行判断、储存、输出,因此代码的复用性也很高,对复用性高的代码块封装成方法即可。在调度方法编写的时候,尽可能简洁,把每个模块提炼成一个一个的方法,在每一个模块方法中再细分实现不同功能的子模块,进一步抽取成方法,以此类推。在后续使用起来更有层次感、更简洁,维护工作也因为条理清晰而变得轻松。

3 代码详情

由于修改快递采用的是先删除再修改,当后续存放快递发现取消操作之后就连原先的数据进行删除了,因此我在后续需要增加一个存放被删除掉快递的方法,当输入有误时取消了操作,即修改不成功需要复原,因此需要在修改判断取消后插入这个恢复数据的方法。

3.1 视图部分的源代码

package show;

import data.Express;
import data.ExpressMsg;

import java.util.Random;
import java.util.Scanner;


public class View {
   
    // 视图部分
    // View类用于控制台输出提示语句

    // 储存被删除的一个快递,并储存的行和列
    private Express recycle = null;
    private int line,row;

    /**
     * 选择身份的菜单,1-快递员,2-普通用户,0-退出
     * @return 输入的数值代表身份
     */
    public int menu(){
   
        int a ;
        System.out.println("请选择身份:");
        System.out.println("1-快递员");
        System.out.println("2-普通用户");
        System.out.println("0-退出程序");
        Scanner input = new Scanner(System.in);

        try {
   
            String s = input.nextLine();
            a = Integer.parseInt(s);
            if (a < 0||a > 2) {
   
                Exception e = new Exception();
                throw e;

            }else {
   
                return a;
            }

        }catch (Exception e){
   
            System.out.println("身份输入有误,请重新输入");
            return menu();
        }
    }

    /**
     * 快递员的操作菜单,1-增加快递,2-删除快递,3-修改快递,4-查看所有,0-退出
     * @return 输入的数值代表操作
     */
    public int operation(){
   
        int a = -1;
        System.out.println("您的身份为快递员,可以进行以下操作:");
        System.out.println("1-存放快递");
        System.out.println("2-删除快递");
        System.out.println("3-修改快递信息");
        System.out.println("4-查看所有快递");
        System.out.println("0-返回上一级");
        Scanner input = new Scanner(System.in);
        String s = input.nextLine();
        try {
   
            a = Integer.parseInt(s);
            if (a < 0 || a > 4) {
   
                Exception e = new Exception();
                throw e;
            }
            return a;
        }catch (Exception e){
   
            return operation();
        }
    }

    /**
     * 1-增加快递操作,传入快递类对象,判断是否存在相同单号的快递
     * @param e 快递类的对象,与箱中的快递作比较
     * @return 存成功返回true,失败返回false
     */
    public boolean add(Express e){
   
        // 判断是否存在相同单号的快递
        if(this.exist(e))
            return false;
        // 存储入快递柜
        while (true){
   
            Random random = new Random();
            int i = random.nextInt(10);
            int j = random.nextInt(10);
            if(ExpressMsg.express[i][j] == null) {
   
                ExpressMsg.express[i][j] = e;
                printLine(e, i, j);
                break;
            }
        }

        ExpressMsg.count++;
        
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值