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

快递 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;

}

}

}

七、实验结果

存快递功能:

删除快递功能

修改快递功能:

查看快递功能:

用户取件功能:

相关数据