快递 E 栈系统(控制台简易版)

目录

一、前言

     1.1、功能介绍:

     1.2、项目分析:

二、角色切换

    2.1、主界面

    2.2、choice()方法

    2.3、findPackage()方法     

 三、快递员功能实现

   3.1、存快递 addPackage()方法

   3.2、删除快递delPackage()方法

   3.3、 查看快递信息readPackage()方法

   3.4、修改快递信息changePackage() 方法

四、用户取件功能

五、总结 

六、源码 

七、实验结果


一、前言

        在经过变量,流程控制,数组这三部分知识的学习,现在我们足以通过这些知识点完成一版简易的,基于控制台版本的快递 E 栈。通过后续的不断学习,博主还会对该快递E栈系统的功能、实现方法进行改进,记得关注博主后续的文章哟。


     1.1、功能介绍:

        系统角色的切换(快递员,普通用户)

  •                       快递员功能      :  ①存快递,②删除快递,③修改快递,④查看所有快递
  •                       普通用户功能  :  ①取快递

       根据选择的角色不同,切换出相应的功能菜单;再根据功能菜单的提示,选择相应的功能,对快递信息进行操作。


      1.2、项目分析:

             本次项目快递 E 栈系统(控制台简易版),主要是针对快递的存取问题;

             快递的信息:  (可以根据自己的需求,添加删除其它信息,如姓名等)

  •                        取件码
  •                        快递单号
  •                        快递公司

            而本次项目是比较初级的,涉及的知识只有变量,流程控制,数组;所以可以我们可以把上述三个快递的信息,分别存储到三个数组里。

           然后相同下标,对应的数组元素就是一个快递的全部信息。如下面代码所示:

 static int[] packageCode = new int[100];    //定义 快递单号  数组 :packageCode
 static String[] company = new String[100];  //定义 快递公司  数组 :company
 static int[] takePartsCode = new int[100];  //定义 取件码   数组 :takePartsCode
 static int sum = 0;      //定义  快递E栈  快递总数

        后面  ①存快递,②删除快递,③修改快递,④查看所有快递 、 ⑤取快递的功能,也就是针对数组里面的元素进行增删改查的操作,即可。


二、角色切换

        2.1、主界面

    首先,就是设计出该系统角色选择的界面,选择之后调用出相应的功能菜单。

        角色代码:

  •     1---快递员
  •     2---普通用户

      为了模拟,该系统一直处于在线状态,我们可以利用do—while   +  switch语句实现,这样我们就一直可以在控制台里面,输入角色代码,进行不同的操作。
   

public static void main(String[] args) {
        /**
         *   利用  do_while + switch 语句,实现 快递E栈系统  死循环 执行
         */
        do {
            print();
            int idCode = input.nextInt();     //输入身份识别码
            switch (idCode) {
                case 1 :        //代号1,进入快递员系统
                    choice();   //调用 choice 方法,快递员功能菜单
                    break;
                case 2 :       //代号2,进入 用户取件系统
                    System.out.println("请输入取件码:");
                    int takeCode = input.nextInt();    //定义  用户取件码 :takeCode
                    int codeIndex = findPackage(takeCode ,1); //先调用  查找快递findPackage()方法, 返回的是  其下标,没有则返回-1
                    takePackage(codeIndex);
                    break;
                default :    //输入其他,打印提醒
                    System.out.println("输入错误!请重新输入!");
                    break;
            }
        }while(true);

    }

    choice()方法,是调用出快递员的功能菜单

    findPackage(takeCode ,1)方法,表示用户取件时,先根据取件码查找一下数组里面,有没有存储该快递,有则取出,无则提醒“取件码有误”。

         “1”:表示findPackage()方法,是根据取件码,来查找快递,

         “0”:表示findPackage()方法,是根据快递单号,来查找快递。    findPackage()方法 后面会介绍的。

   其中switch语句里的  default,是输入除上述以外的角色代码时,进行提醒,重新输入正确的角色代码。






 2.2、choice()方法

             choice()方法:快递员的功能菜单展示、调用各个功能方法。

              功能代码: 

              1---存快递  :addPackage();         2---删除快递    : delPackage()          3---查看所有快递  :readPackage();

              4---修改快递信息  :changePackage()         5---退出快递员系统

public static void choice() {
             //利用  do_while + switch 语句,实现 快递E栈系统  死循环 执行;并且为do_while取名为 aa,方便后续结束  do_while循环
        aa:do {
            System.out.println("请选择操作:1-存快递  2-删除快递  3-查看所有快递  4-修改快递信息   0-退出快递员系统");
            switch (input.nextInt()) {
                case 1 :             // 1 表示 选择了 “存快递”  功能!!!
                    addPackage();
                    break;
                case 2 :            // 2 表示 选择了 “删除快递”  功能!!!
                    System.out.println("请输入要要删除的快递单号:");
                    int delCode = input.nextInt();        //定义 需要删除的快递单号 :delCode
                    int codeIndex = findPackage(delCode,0); //先调用  查找快递findPackage()方法, 返回的是  其下标,没有则返回-1
                    delPackage(codeIndex);        //将   findPackage()方法 返回值  传入  删除方法delPackage();
                    break;
                case 3 :          // 3 表示 选择了 “查看快递”  功能!!!
                    readPackage();
                    break;
                case 4 :          // 2 表示 选择了 “修改快递信息功能”  功能!!!
                    changePackage();
                    break;
                case 0 :          // 0  表示 退出 快递员系统
                    break  aa;
                default :
                    System.out.println("亲爱的快递员,您的操作选择有误");
                    break;
            }
        }while(true);

    }



    2.3、findPackage()方法     

            findPackage(int code , int   flage)方法 ,主要是为了 :

  •    快递员在存储快递时,检测输入的快递单号是否重复。
  •   普通用户在取快递时,输入的取件码是否存在。
  •   flage 表示选取 “快递单号”查找、还是选取“取件码”查找;当然flag ,是不用我们输入的,在选择系统角色时,就已经定好了flag。
  •   若查找到,就返回下标; 未查找到则返回“-1”,根据返回值进行下一步的操作
 public static int findPackage(int code ,int flag) {   //接收需要查找的  快递单号!!!
        if (flag == 0) {
            for (int i = 0; i < sum; i++) {
                if (packageCode[i] == code) {      //如果在 存放快递的数组中,找到,就return  其下标;
                    return i;
                }
            }
        }else if (flag == 1) {
            for (int i = 0; i < sum; i++) {
                if (takePartsCode[i] == code) {      //如果在 存放快递的数组中,找到,就return  其下标;
                    return i;
                }
            }
        }

        return -1 ;        //没查找到 则return -1;
    }

 三、快递员功能实现


             快递员功能      :  ①存快递,②删除快递,③修改快递,④查看所有快递  


         3.1、存快递 addPackage()方法

                     由前面代码可知,在选择“存快递”功能之后,我们下一步就需要输入“快递单号”、“快递公司”,然后随机生成“取件码”;而“快递单号”、“取件码”,是不能有重复的。

  (但当时,没考虑到“取件码”不能重复,所以编写的代码里,只针对“快递单号”的重复问题做出了代码编写。这是一个小bug。)

  (还有就是选择了该功能,就必须存入一个快递,该功能才能结束,这也算是bug!!!~~~~(>_<)~~~~)。

  (不过,针对于前面提到的知识,用这个代码来练习,还是可以的。也算是一种经验分享,小伙伴们慎重获取!!!

                   言归正传,在输入一个完整的快递信息之后,通过相同下标存入快递信息的不同数组。然后sum++,这表示该系统的快递总数加1。

 public static void addPackage(){
        System.out.println("请输入快递单号:");

        /**
         * 调用 查找快递 findPackage()方法,传入  输入的快递单号和0,0表示按照 快递单号查找 ;1表示按照 取件码查找;
         * 调用 该方法 主要是为了  放置快递单号 重复!!!!
         */
        bb:do {
            int num = input.nextInt();    //从键盘 输入  新的快递单号
            switch (findPackage(num,0)) {       //switch 先调用findPackage()函数,参数0,表示该函数 以快递单号来 查找
                case -1 :                           // -1 表示,输入的快递单号,还未存在  ,下一步可以写进 packageCode[]数组里
                    packageCode[sum] = num;
                    break bb;                     //结束 该 do_while循环!!!
                default:
                    System.out.println("此快递单号已存在!!! 请重新输入!!!");
            }
        }while(true);
        System.out.println("请输入快递公司:");
        company[sum] = input.next();          //输入 快递公司名称
        takePartsCode[sum] =  random.nextInt(900)+100;    //随机产生  取件码
        System.out.println("快递存入成功! 取件码为:"+takePartsCode[sum]);
        sum++;
    }



 3.2、删除快递delPackage()方法

            在选择删除功能后,输入要删除快递的“快递单号”,也是先查找该“快递单号”是否存在:

  •             不存在,打印提示信息。
  •             存在,则删除三个数组里面,对应该快递 的元素。(这根据findPackage()方法,返回的下标,进行删除)
public static void delPackage(int codeIndex) {
        switch (codeIndex) {
            case -1 :                 //根据  ndPackage()方法 的返回值    -1 则表示没有该快递 无法删除!
                System.out.println("没有找到快递!!!");
                break;
            default :               // 根据  ndPackage()方法 的返回值 ,得到该快递  在packageCode[]里面  的下标,然后进行 删除操作!!!
                if (codeIndex != sum-1){
                    for (int i = codeIndex; i < sum-1; i++){
                        packageCode[i] = packageCode[i+1];
                        company[i] = company[i+1];
                        takePartsCode[i] =takePartsCode[i+1];
                    }
                }
                System.out.println("删除成功!!!");
                sum--;       //    删除成功   packageCode[]数组  大小 减一!!!
                break;
        }
    }



3.3、 查看快递信息readPackage()方法

          选择查看快递信息功能,比较简单,就是把三个数组对应  在控制台打印出来。当然也要判断,数组里面有没有存入快递,如果数组为空,表示没有快递,则打印提示信息。

public static void readPackage() {
        System.out.println("QJX快递E栈——快递信息:");
        System.out.println("=================================\n");
        System.out.print("快递单号"+"\t");
        System.out.print("快递公司"+"\t");
        System.out.println("取件码");
        if (sum!=0) {                                   // 首先 判断,数组里面 有没有存入快递,有,则打印信息
            for (int i = 0; i < sum; i++){
                System.out.print(packageCode[i]+"\t"+"\t");
                System.out.print(company[i]+"\t"+"\t");
                System.out.println(takePartsCode[i]);
            }
        }else {                                     // 没有,则打印 ”空空如也“的 提醒信息
            System.out.println("-------  ╮(╯▽╰)╭ 空空如也 -------");
        }
        System.out.println("\n=================================");
    }



3.4、修改快递信息changePackage() 方法

             修改快递信息功能,再选择之后,也是要输入需要修改快递的“快递单号”,然后判断是否存在,然后根据findPackage()方法返回的下标,对数组进行相应的重新赋值操作。

            其实,这几个功能的实现,大同小异,理解了一个,其余就差不多了。

public static void changePackage() {
        System.out.println("请输入要修改的快递单号:");
        int chCode = input.nextInt();    //定义 需要修改的快递单号 :chCode
        int codeIndex = findPackage(chCode,0);//先调用  查找快递findPackage()方法, 返回的是  其下标,没有则返回-1
        switch (codeIndex) {
            case -1 :                //根据 findPackage()方法  的返回值。 -1 表示没找到,无法修改快递信息
                System.out.println("没有找到快递!!!");
                break;
            default :              // 根据 findPackage()方法  的返回值,得到 快递对应的下标 ,然后对数组 进行重新赋值;已达到修改的目的!!!
                System.out.println("请输入新的快递单号:");
                packageCode[codeIndex] = input.nextInt();
                System.out.println("请输入新的公司名称:");
                company[codeIndex] = input.next();
                System.out.println("修改成功!!!");
                break;
        }
    }

四、用户取件功能

         用户取件功能,根据用户输入的“取件码”,先判断是否存在。

  •                不存在,则打印提醒信息。
  •                存在,则删除三个数组里面,对应的快递信息。
public static void takePackage(int codeIndex) {
        switch (codeIndex) {
            case -1 :
                System.out.println("没有找到这个快递!!!请核对取件码");
                break;
            default :
                if (codeIndex != sum-1){
                    for (int i = codeIndex; i < sum-1; i++){
                        packageCode[i] = packageCode[i+1];
                        company[i] = company[i+1];
                        takePartsCode[i] =takePartsCode[i+1];
                    }
                }
                System.out.println("取件成功!!!");
                sum--;
                break;
        }
    }

五、总结 

          这一次快递 E 栈系统(控制台简易版),总体来说还是比较简单的,主要还是针对博主前段时间学习变量,流程控制,数组这三部分知识的一次融合整理与应用。所以,这个代码还是很多不足之处,比如说:

数组存满之后,快递员接着存储快递,代码就会出现错误。

②没考虑到“取件码”不能重复。

③存快递功能,必须存入一个快递,才能结束该功能。

      可能还有许多不足,请小伙伴们加以指正。通过后面不断的学习,我也会不断完善该系统的,这只是最初级的版本!

六、源码 

         这里,我奉上自己编写的源代码,希望对小伙伴们有所帮助。

package task;

/**
 * 快递 E 栈训练任务(控制台简易版)
 * @author Q
 */
import java.util.Random;
import java.util.Scanner;



public class Task_010105 {
    static Scanner input = new Scanner(System.in);   //定义输入 input; static表加载 主函数时,同时加载
    static int[] packageCode = new int[100];    //定义 快递单号  数组 :packageCode
    static String[] company = new String[100];  //定义 快递公司  数组 :company
    static int[] takePartsCode = new int[100];  //定义 取件码   数组 :takePartsCode
    static int sum = 0;      //定义  快递E栈  快递总数
    static Random random = new Random();    //随机数
    public static void main(String[] args) {
        /**
         *   利用  do_while + switch 语句,实现 快递E栈系统  死循环 执行
         */
        do {
            print();
            int idCode = input.nextInt();     //输入身份识别码
            switch (idCode) {
                case 1 :        //代号1,进入快递员系统
                    choice();   //调用 choice 方法,快递员功能菜单
                    break;
                case 2 :       //代号2,进入 用户取件系统
                    System.out.println("请输入取件码:");
                    int takeCode = input.nextInt();    //定义  用户取件码 :takeCode
                    int codeIndex = findPackage(takeCode ,1); //先调用  查找快递findPackage()方法, 返回的是  其下标,没有则返回-1
                    takePackage(codeIndex);
                    break;
                default :    //输入其他,打印提醒
                    System.out.println("输入错误!请重新输入!");
                    break;
            }
        }while(true);

    }
    /**
     * 打印 输入身份识别码  的提示  print()方法!
     */
    public static void print(){
        System.out.println("===========欢迎使用QJX快递E栈===========");
        System.out.println("请输入您的身份: 1-快递员     2-用户");
    }

    /**
     *快递员 操作选择函数
     */
    public static void choice() {
             //利用  do_while + switch 语句,实现 快递E栈系统  死循环 执行;并且为do_while取名为 aa,方便后续结束  do_while循环
        aa:do {
            System.out.println("请选择操作:1-存快递  2-删除快递  3-查看所有快递  4-修改快递信息   0-退出快递员系统");
            switch (input.nextInt()) {
                case 1 :             // 1 表示 选择了 “存快递”  功能!!!
                    addPackage();
                    break;
                case 2 :            // 2 表示 选择了 “删除快递”  功能!!!
                    System.out.println("请输入要要删除的快递单号:");
                    int delCode = input.nextInt();        //定义 需要删除的快递单号 :delCode
                    int codeIndex = findPackage(delCode,0); //先调用  查找快递findPackage()方法, 返回的是  其下标,没有则返回-1
                    delPackage(codeIndex);        //将   findPackage()方法 返回值  传入  删除方法delPackage();
                    break;
                case 3 :          // 3 表示 选择了 “查看快递”  功能!!!
                    readPackage();
                    break;
                case 4 :          // 2 表示 选择了 “修改快递信息功能”  功能!!!
                    changePackage();
                    break;
                case 0 :          // 0  表示 退出 快递员系统
                    break  aa;
                default :
                    System.out.println("亲爱的快递员,您的操作选择有误");
                    break;
            }
        }while(true);

    }

    /**
     *    存快递 addPackage()方法
     */
    public static void addPackage(){
        System.out.println("请输入快递单号:");

        /**
         * 调用 查找快递 findPackage()方法,传入  输入的快递单号和0,0表示按照 快递单号查找 ;1表示按照 取件码查找;
         * 调用 该方法 主要是为了  放置快递单号 重复!!!!
         */
        bb:do {
            int num = input.nextInt();    //从键盘 输入  新的快递单号
            switch (findPackage(num,0)) {       //switch 先调用findPackage()函数,参数0,表示该函数 以快递单号来 查找
                case -1 :                           // -1 表示,输入的快递单号,还未存在  ,下一步可以写进 packageCode[]数组里
                    packageCode[sum] = num;
                    break bb;                     //结束 该 do_while循环!!!
                default:
                    System.out.println("此快递单号已存在!!! 请重新输入!!!");
            }
        }while(true);
        System.out.println("请输入快递公司:");
        company[sum] = input.next();          //输入 快递公司名称
        takePartsCode[sum] =  random.nextInt(900)+100;    //随机产生  取件码
        System.out.println("快递存入成功! 取件码为:"+takePartsCode[sum]);
        sum++;
    }

    /**
     *    查找快递  是否存在   findPackage()方法
     */
    public static int findPackage(int code ,int flag) {   //接收需要查找的  快递单号!!!
        if (flag == 0) {
            for (int i = 0; i < sum; i++) {
                if (packageCode[i] == code) {      //如果在 存放快递的数组中,找到,就return  其下标;
                    return i;
                }
            }
        }else if (flag == 1) {
            for (int i = 0; i < sum; i++) {
                if (takePartsCode[i] == code) {      //如果在 存放快递的数组中,找到,就return  其下标;
                    return i;
                }
            }
        }

        return -1 ;        //没查找到 则return -1;
    }

    /**
     *   删除快递  delPackage()方法
     */
    public static void delPackage(int codeIndex) {
        switch (codeIndex) {
            case -1 :                 //根据  ndPackage()方法 的返回值    -1 则表示没有该快递 无法删除!
                System.out.println("没有找到快递!!!");
                break;
            default :               // 根据  ndPackage()方法 的返回值 ,得到该快递  在packageCode[]里面  的下标,然后进行 删除操作!!!
                if (codeIndex != sum-1){
                    for (int i = codeIndex; i < sum-1; i++){
                        packageCode[i] = packageCode[i+1];
                        company[i] = company[i+1];
                        takePartsCode[i] =takePartsCode[i+1];
                    }
                }
                System.out.println("删除成功!!!");
                sum--;       //    删除成功   packageCode[]数组  大小 减一!!!
                break;
        }
    }

    /**
     *    查看快递 ,打印所有快递信息 ,readPackage()方法
     */
    public static void readPackage() {
        System.out.println("QJX快递E栈——快递信息:");
        System.out.println("=================================\n");
        System.out.print("快递单号"+"\t");
        System.out.print("快递公司"+"\t");
        System.out.println("取件码");
        if (sum!=0) {                                   // 首先 判断,数组里面 有没有存入快递,有,则打印信息
            for (int i = 0; i < sum; i++){
                System.out.print(packageCode[i]+"\t"+"\t");
                System.out.print(company[i]+"\t"+"\t");
                System.out.println(takePartsCode[i]);
            }
        }else {                                     // 没有,则打印 ”空空如也“的 提醒信息
            System.out.println("-------  ╮(╯▽╰)╭ 空空如也 -------");
        }
        System.out.println("\n=================================");
    }

    /**
     *  修改快递信息  changePackage() 方法
     */
    public static void changePackage() {
        System.out.println("请输入要修改的快递单号:");
        int chCode = input.nextInt();    //定义 需要修改的快递单号 :chCode
        int codeIndex = findPackage(chCode,0);//先调用  查找快递findPackage()方法, 返回的是  其下标,没有则返回-1
        switch (codeIndex) {
            case -1 :                //根据 findPackage()方法  的返回值。 -1 表示没找到,无法修改快递信息
                System.out.println("没有找到快递!!!");
                break;
            default :              // 根据 findPackage()方法  的返回值,得到 快递对应的下标 ,然后对数组 进行重新赋值;已达到修改的目的!!!
                System.out.println("请输入新的快递单号:");
                packageCode[codeIndex] = input.nextInt();
                System.out.println("请输入新的公司名称:");
                company[codeIndex] = input.next();
                System.out.println("修改成功!!!");
                break;
        }
    }

    /**
     *   用户取件 ,takePackage()
     */
    public static void takePackage(int codeIndex) {
        switch (codeIndex) {
            case -1 :
                System.out.println("没有找到这个快递!!!请核对取件码");
                break;
            default :
                if (codeIndex != sum-1){
                    for (int i = codeIndex; i < sum-1; i++){
                        packageCode[i] = packageCode[i+1];
                        company[i] = company[i+1];
                        takePartsCode[i] =takePartsCode[i+1];
                    }
                }
                System.out.println("取件成功!!!");
                sum--;
                break;
        }
    }
}

 七、实验结果

             存快递功能:




  删除快递功能




 修改快递功能:




查看快递功能:





用户取件功能: 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新计划

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值