文章目录
吃货联盟订餐系统
刚刚学完java基础入门,主要学习Java基本环境搭建,定义变量、选择结构,循环结构、数组等。本阶段结束尝试接触此次吃货联盟订餐系统,第一次敲这么长的代码,后面多见识见识应该就好了,多加努力啊!
吃货联盟订餐系统包含的功能:我要订餐、查看餐袋、签收订单、删除订单、我要点赞、退出系统
覆盖技能点
程序基本概念
- 变量
- 数据类型
流程控制
- 顺序
- 选择
- 循环
- 跳转语句
数组
系统概述
“只要动动手指,就能送餐上门”,网上定餐深受现代人青睐,现开发一个网上订餐系统,功能如下
我要订餐
查看餐袋
签收订单
删除订单
我要点赞
退出系统
阶段划分
第一阶段:分析数据主体(重难点)
第二阶段:分析并完成整体框架(重难点)
第三阶段:分析并完成退出功能
第四阶段:分析并完成订餐功能
第五阶段:分析并完成查看餐袋功能
第六阶段:分析并完成签收订单功能
第七阶段:分析并完成删除功能(重难点)
第八阶段:分析总完成我要点赞功能
用例1:实现菜单切换
需求说明
- 编写程序入口,实现菜单显示和切换
思路分析:
- 使用循环控制菜单显示, 0退出循环
- 使用switch语句实现菜单切换
难点提示
- 使用标识变量来控制循环退出
// 系统输入对象
Scanner input = new Scanner(System.in);
int num = -1;
// 定义是否退出订餐系统变量
boolean isExit = false;
// 循环展示吃货订餐系统主菜单,可以选择菜单,并循环切换
// 系统输入对象
Scanner input = new Scanner(System.in);
int num = -1;
// 定义是否退出订餐系统变量
boolean isExit = false;
// 循环展示吃货订餐系统主菜单,可以选择菜单,并循环切换
do {
System.out.println("欢迎使用“吃货联盟订餐系统”");
System.out.println("****************************");
System.out.println("1、我要订餐");
System.out.println("2、查看餐袋");
System.out.println("3、签收订单");
System.out.println("4、删除订单");
System.out.println("5、我要点赞");
System.out.println("6、退出系统");
System.out.println("****************************");
// 提示输入菜单序号
System.out.print("请选择:");
int choose = input.nextInt();
switch (choose) {
case 1:
System.out.println("***我要订餐***");
break;
case 2:
System.out.println("***查看餐袋***");
break;
case 3:
System.out.println("***签收订单***");
break;
case 4:
System.out.println("***删除订单***");
break;
case 5:
System.out.println("***我要点赞***");
break;
case 6:
isExit = true;
break;
default:
System.out.println("输入非法!");
isExit = true;
break;
}
if (!isExit) {
System.out.print("输入0返回:");
num = input.nextInt();
}else {
break;
}
} while (num == 0);
System.out.println("谢谢使用,欢迎下次光临!");
用例2:数据初始化
需求说明
初始化菜品信息
初始化订单信息
实现:
// 初始化订餐系统的菜品数据
// 由于菜品数据类型不统一,但是数组存储的相同数据类型的一组数据,可以将菜品数据拆分成三个数组,借助数组相同下标,是同一个菜品数据
// 菜品名称数组
String[] dishNames = {
"红烧带鱼","鱼香肉丝","时令鲜蔬"};
// 菜品价格数组
double[] dishPrices = {
38.0,20.0,10.0};
// 菜品点赞数数组
int[] dishPraises = {
0,0,0};
// 初始化吃货订餐系统的订餐订单数据
// 订餐人
String[] orderNames = new String[5];
// 订餐详情
String[] orderDetails = new String[5];
//配送时间
int[] orderTimes = new int[5];
//配送地址
String[] orderAddrs = new String[5];
// 订单状态
int[] orderStates = new int[5];
//订单总价
double[] orderPrices = new double[5];
// 初始化订餐订单数据,方便查看餐袋
orderNames[0] = "张晴";
orderDetails[0] = "红烧带鱼 2份";
orderTimes[0] = 12;
orderAddrs[0] = "天成路207号";
orderStates[0] = 1;
orderPrices[0] = 76.0;
orderNames[1] = "张晴";
orderDetails[1] = "鱼香肉丝 2份";
orderTimes[1] = 18;
orderAddrs[1] = "天成路207号";
orderStates[1] = 0;
orderPrices[1] = 45.0;
用例3:实现查看餐袋功能
需求说明
- 遍历系统中已有的订单,并逐条显示输出
思路分析
- 使用订餐人数组长度控制循环次数
- 对输出数据进行处理
难点提示
- 仅遍历订餐人信息不为空的记录,需判断
实现:
case 2:
System.out.println("***查看餐袋***");
// 输出订单标题头
System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态");
// 循环遍历订单数组,查询已定餐的订单数据
// 由于订餐订单被拆分为6个长度统一的数据,只需要选择使用其中一个数组作为循环条件即可
for (int i = 0; i < orderNames.length; i++) {
// 订餐订单都是按照下标顺序存储的,只要订单人姓名为null,说明后续都是空的(没有订单信息),结束循环
if (null == orderNames[i]) {
break;
}
// 输出餐袋中已存的订单数据
System.out.println(i + 1 + "\t"
+ orderNames[i] + "\t"
+ orderDetails[i] + "\t"
+ orderTimes[i] + "\t"
+ orderAddrs[i] + "\t"
+ orderPrices[i] + "\t"
+ (orderStates[i] == 0? "已预定" : "已完成"));
}
break;
用例4:实现我要订餐功能
需求说明
- 增加订单信息,实现我要订餐
思路分析
完成功能要求:
- 定位新增位置
- 接收订餐信息
- 计算订单总金额
- 计算送餐费
难点提示
确定新增位置:第一个name为null的位置
case 1:
System.out.println("***我要订餐***");
// 定义餐袋中的订单是否已经订满的标识变量,如果餐袋满了,不允许继续订餐
// 默认餐袋中订单已满,如果订餐可以找到订单位置,标识变量改为false,没满为true
boolean isFullFlag = false;
// 循环遍历订餐订单数组,找可以存放订餐订单的位置,就是第一个为null的位置
for (int i = 0; i < orderNames.<