写再前面:
1,本文为Java学习第五部分第一阶段所有项目回顾(快递e站部分-对应Java体系第一部分第一阶段-04-数组任务)
2,整体项目系列博客(包括整体快递e站系列)
3,完整的Java体系链接(比你想的更多的Java内容)
需求介绍:
任务一:角色切换(快递员和普通用户)
快递员功能:存快递,删除快递,修改快递,查看所有快递
普通用户功能:取快递
任务二:存快递
任务三:删除快递
任务四:修改快递
任务五:查看所有快递
任务六:取快递
涉及到的知识点:
Java基础语法(变量,数据类型,标识符,数据类型转换,方法,运算符),流程控制(API,Scanner类,执行结构),数组
代码运行截图:
任务一:
任务二:
任务三:
任务四:
任务五:
任务六:
思路分析:
这个比较简单,写再一个类里就可以了。
想一想,如果要完成这个功能,那么第一步就是要定义变量对不对。开始要输入数字,那就需要Scanner方法。要输入取件码,就要给取件码定义一个变量,取件码不能只有一个(要一个快递一个取件码)那么取件码就是数组类型的了。取件码也不能凭空从石头里崩出来,肯定需要我们自己定义,那么我们就需要定义随机数,生成取件码了。快递公司,快递公司,还需要什么,公司名称,这个只有一个公司负责快递就太搞笑了。所以这个也是数组类型的。快递单号就不解释了,取过快递的都懂。最后再定义一个数组下标,方便存快递和计数快递个数。
所以第一步很明确了:
对应的流程图
代码:
import java.util.Random;
import java.util.Scanner;
import javax.imageio.stream.ImageInputStream;
public class Task00_ZongHeLianXi {
static Scanner input = new Scanner(System.in);
public static String[] numberArr = new String[100];// 快递单号
public static String[] companyArr = new String[100];// 快递公司
public static int[] codeArr = new int[100];// 取件码
public static int index = 0;// 数组下标,快递柜中有多少个快递
public static Random random = new Random();// 定义随机数
/**
* 快递 E 栈训练任务(控制台简易版)
* 总需求:
* 1. 角色切换(快递员和普通用户)
* 2. 存快递
* 3. 删除快递
* 4. 修改快递
* 5. 查看所有快递
* 6. 取快递
* @param args
*/
public static void main(String[] args) {
demo00_startMenu();
}
/**
* 角色切换功能,总方法
*/
public static void demo00_startMenu() {
TuiChu:do {
System.out.println("--------欢迎使用新职课快递柜----------");
System.out.println("请输入您的身份:1-快递员 2-用户 0-退出");
int id = input.nextInt();
switch (id) { // 感觉这里用switch更好
case 1:
// 快递员--展示快递员的菜单
demo01_deliverymanMenu();
break;
case 2:
// 普通用户
demo01_userMenu();
break;
case 0:
System.out.println("谢谢使用,程序退出");
break TuiChu;
default:
System.out.println("请按照指示输入");
break;
}
}while(true);
}
/**
* 用户菜单
*/
public static void demo01_userMenu() {
System.out.println("请输入取件码");
int code = input.nextInt();
int codeIndex = demo02_isExist(code);
if (codeIndex == -1) {
System.out.println("未找到快递");
} else {
del(codeIndex);
System.out.println("取件成功");
}
}
/**
* 快递员菜单
*/
public static void demo01_deliverymanMenu() {
System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
int id = input.nextInt();
switch (id) {
case 1:
demo02_saveExpress();
break;
case 2:
demo02_delExpress();
break;
case 3:
demo02_updateExpress();
break;
case 4:
printAll();
break;
default:
System.out.println("请按照指示输入");
break;
}
}
/**
* 存快递
*/
public static void demo02_saveExpress() {
System.out.println("请输入快递单号");
String number = input.next();
System.out.println("请输入公司名称");
String company = input.next();
// 自动生成取件码 100-900
int code = random.nextInt(900)+100;
// 保证取件码不重复
do {
code = random.nextInt(900)+100;
}while(demo02_isExist(code)!=-1);
numberArr[index] = number;
companyArr[index] = company;
codeArr[index] = code;
index++;
System.out.println("快递已存入,取件码是:"+code);
}
/**
* 删除快递
*/
public static void demo02_delExpress() {
System.out.println("请输入要删除的快递单号");
String number = input.next();
int delIndex = findByNumber(number);
if (delIndex == -1) {
System.out.println("未找到快递!");
} else {
del(delIndex);
System.out.println("删除成功");
}
}
/**
* 修改快递
*/
public static void demo02_updateExpress() {
System.out.println("请输入要修改的快递单号");
String number = input.next();
int updateIndex = findByNumber(number);
if (updateIndex == -1) {
System.out.println("未找到快递");
} else {
System.out.println("请输入新的快递单号");
number = input.next();
System.out.println("请输入新的公司名称");
String company = input.next();
numberArr[updateIndex]=number;
companyArr[updateIndex]=company;
System.out.println("修改成功");
}
}
/**
* 查看所有快递
*/
public static void printAll() {
System.out.println("-----所有快递信息-------");
System.out.println("快递单号\t公司名称\\t取件码");
for (int i = 0; i < index; i++) {
System.out.println(numberArr[i]+"\t"+companyArr[i]+"\t"+codeArr[i]);
}
}
/**
* 删除方法
* @param delIndex 快递单号
*/
public static void del(int delIndex) {
if (delIndex!=numberArr.length-1) {
for (int i = delIndex; i < index; i++) {
numberArr[i]=numberArr[i+1];
companyArr[i]=companyArr[i+1];
codeArr[i]=codeArr[i+1];
}
}
index--;
}
/**
* 根据快递单号查找
* @param number 找到的下标,-1代表未找到
* @return
*/
public static int findByNumber(String number) {
for (int i = 0; i < index; i++) {
if (numberArr[i].equals(number)) {
return i;
}
}
return -1;
}
/**
* 判断取件码是否重复
* @param code
* @return
*/
public static int demo02_isExist(int code) {
for (int i = 0; i < index; i++) {// 循环遍历取件码
if (codeArr[i]== code) {// 判断是否重复
return i;
}
}
return -1;
}
}