< 吃货联盟 >
- 精简版美团
- 吃货联盟系统包含的功能:我要订餐、查看餐袋、我要签收、点赞菜品、退出系统
一、业务分析
业务驱动技术
- 我要订餐:
– 1、 输入订餐人姓名
– 2、 将所有菜品进行展示
– 3、 输入要订的菜品序号
– 4、 输入要顶的菜品份数
– 5、 输入配送时间
– 6、 输入配送地址
– 7、 现实订餐信息 - 查看餐袋:
– 1、 直接展示所有的订单信息 - 我要签收:
– 1、 展示所有的订单信息
– 2、 输入要签收订单的订单序号
– 3、 如果已经完成不允许重复签收
– 4、 如果未完成则可以进行签收
– 5、订单签收成功 - 删除订单:
– 1、 展示所有订单的信息
– 2、 输入要删除的订单序号
– 3、 如果未完成(已预定)则不允许删除
– 4、 如果已完成可以进行订单删除
– 5 、 展示删除成功 - 我要点赞:
– 1、 展示所有的菜品信息
– 2、 输入点赞的菜品序号
– 3、 提示点赞成功 - 退出系统:
– 1、提示结束语
– 2、 执行程序退出
二、技术难点分析
- 存储难点:
···订单信息:
姓名 订单菜品+份数 送餐时间 送餐地址 订单状态(0表示已经预订 1表示已经完成) 总金额
···使用变量 :
如果存储3个订单 需要定义很多个变量(X)
···使用数组:
数组是长度不可变的(因技术限制,假定最大存储产长度为4)
数组是一组相同类型的数据,虽然我们一个数组中无法直接存储一条订单信息,但是我们可以定义多个数组,每个数组形同索引用来存储一条订单信息,例如:多个数组的下标为0,表示第一条订单;下标为1,表示第二条点订单: - 订单和菜品遍历:
– 因为下标仙童表示同一条点歌单或菜品信息,所有可以遍历一个数组时进行遍历其它多个数组
- 订单的签收和菜品的点赞:
– 就是将对应的数组进行重新赋值而已 - 删除订单:
– 当删除时最后一条订单信息时,只需要将订单信息置为数组默认值即可
当删除的是非最后一条订单信息时,需要先将下标后的元素进行前移,然后将最后信息进行置为默认值。 - 订单总金额:
– 菜品的单价 * 份数 + 配送费
当实际消费总金额 >= 50 则配送减免 否则配送5元配送费
三、 Eclipse 快捷键
- Alt+/ 语法提示
main方法的额快捷键: 输入main ——> Alt+/
输出语句快速创建: 输入 syso ——> Alt+/
向上/向下复制当前行: Ctrl + Alt + ↑ / ↓
向上/向下当前/选中行:Alt + ↑ / ↓
快速补全/修复: Ctrl + 1
全局导包: Ctrl + Shift +Q
快速遍历刚写完某数组:for ——> Alt+/——>选择上方遍历的数组
四、代码示例
package gatsby26;
/**
* 吃货联盟
*
*/
import java.util.*;
import javax.swing.plaf.synth.SynthScrollBarUI;
public class ChiHuoLianMeng {
public static void main(String[] args){
Scanner Gatsby = new Scanner(System.in);
//数据初始化
//定义name订餐人姓名
String[] name = {"奥宝马","特朗普",null,null};
//定义menu所选的餐名信息和份数
String[] menu = {"海胆刺身 2份","北极贝刺身2份",null,null};
//定义time送餐时间
int[] time = {10,12,0,0};
//定义site送餐地址
String[] site = {"中南海21号 ","中南海21号 ",null,null};
//定义state状态 0、代表预定 1、代表已完成
int[] state = {1,0,0,0};
//定义money金额
double[] money = {138,259,0,0};
//定义点赞数
int[] like = {0,0,0};
//用于输入零返回主菜单
boolean condition = true;
//用于输入不符合餐品序号
boolean condition0 = true;
//用于输入送餐时间不符合10-20点
boolean condition1 = true;
//用于签收订单
boolean condition2 = true;
//用于数组没有空间
boolean condition3 = true;
//定义数组存储菜品、价格、点赞数量
String[] greens = {"海胆刺身 ","三文鱼刺身","北极贝刺身"};
double[] moneys = {64.0,89.0,129.5};
int[] quantity = new int[3];
System.out.println("欢迎来到-吃货联盟-操作系统");
one1:do {
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("请选择:");
//输入选择变量,select选择
String select = Gatsby.next();
one3:switch(select) {
case "1":
System.out.println("········我要订餐········");
for(int one = 0;one < name.length;one++) {
if(name[one] == null) {
condition3 = false;
System.out.print("请输入订餐人姓名:");
String name1 = Gatsby.next();
System.out.println("——————————————餐品信息——————————————");
System.out.println("餐品序号\t餐品名称\t\t餐品单价");
for(int two = 0;two < greens.length;two++) {
System.out.println((two+1)+"\t"+greens[two]+"\t\t"+moneys[two]+" 元");
}
System.out.println(" 餐品配送费10元(满200元免配送费)");
System.out.println("——————————————————————————————————");
int greens1;
do {
System.out.print("请输入你选择餐品的序号:");
greens1 = Gatsby.nextInt();
if(greens1 > 3 || greens1 < 1) {
System.out.println("你输入的餐品序号不存在!请重新输入:");
}else {
condition0 = false;
}
}while(condition0);
System.out.print("请输入你订餐的份数:");
int menu1 = Gatsby.nextInt();
do {
System.out.print("请输入你的送餐时间(10 ~ 20 点整):");
int time1 = Gatsby.nextInt();
time[one] = time1;
//不符合送餐时间则提示重新输入
if(time1 < 10 || time1 > 20) {
System.out.println("你输入的收餐时间不在配送时间范围内请重新输入");
}else {
condition1 = false;
}
}while(condition1);
System.out.print("请输入你的收餐地址:");
String site1 = Gatsby.next();
//存入信息
name[one] = name1;
//字符型
menu[one] = greens[greens1-1]+menu1+"份";
site[one] = site1;
//不算运费的价格 为金额数组下标(序号减1)的值乘份数
double moneyss = moneys[greens1-1]*menu1;
//定义变量配送费
double freight = (moneyss >= 200)? 0 : 10;
//总金额为 金额 为金额数组下标(序号减1)的值乘份数+运费
money[one] = moneys[greens1-1]*menu1+freight;
System.out.println("——————————————————————————————————订单信息————————————————————————————————————————");
System.out.println("序号\t订餐人\t菜品名称及数量\t价格\t运费\t总金额\t送货时间\t送货地址");
System.out.println((one+1)+"\t"+name[one]+"\t"+menu[one]+"\t"+moneyss+"\t"+freight+"\t"+money[one]+"\t"+time[one]+"\t"+site[one]);
System.out.println("————————————————————————————————————————————————————————————————————————————————");
break;
}
}
if(condition3) {
System.out.println("订单已满!请删除清理订单后订餐!");
}
break;
case "2":
System.out.println("·······查看菜袋·······");
System.out.println("—————————————————————————————————订单信息————————————————————————————————————————");
System.out.println("序号\t订餐人\t菜品名称及数量\t总金额\t送货时间\t送货地址\t订单状态");
for(int one = 0 ;one < name.length;one++) {
//晒选数组为空,只显示循环出已经存了数据数组
if(name[one] != null) {
String state1 = (state[one]==0) ? "已预定" : "已完成";
System.out.println((one+1)+"\t"+name[one]+"\t"+menu[one]+"\t"+money[one]+"\t"+time[one]+"\t"+site[one]+"\t"+state1);
}
}
System.out.println("——————————————————————————————————————————————————————————————————————————————");
break;
case "3":
System.out.println("·······签收订单·······");
System.out.println("—————————————————————————————————订单信息————————————————————————————————————————");
System.out.println("序号\t订餐人\t菜品名称及数量\t总金额\t送货时间\t送货地址\t订单状态");
for(int one = 0 ;one < name.length;one++) {
//晒选数组为空,只显示循环出已经存了数据数组
if(name[one] != null) {
String state1 = (state[one]==0) ? "已预定" : "已完成";
System.out.println((one+1)+"\t"+name[one]+"\t"+menu[one]+"\t"+money[one]+"\t"+time[one]+"\t"+site[one]+"\t"+state1);
}
}
System.out.println("——————————————————————————————————————————————————————————————————————————————");
System.out.print("请输入你要选择签收的订单:");
int serial = Gatsby.nextInt();
for(int one = 0;one < name.length;one++) {
//输入序号对应的订单不能已签收也就时为1,并要求对应的订单数组不是空的
//还有符合输入的数字范围为数组循环数字加1也就是1-4之间
if(state[one] == 1 && name[one] != null && serial == one+1) {
System.out.println("你的输入的订单已经完成不能重复签收,请重新选择:");
//使订单不存在的的选择结构条件不符
condition2 = false;
}
//与上面选择结构意义相同
if(state[one] == 0 && name[one] != null && serial == one+1){
state[one] = 1;
System.out.println("订单签收成功");
//使订单不存在的的选择结构条件不符
condition2 = false;
}
}
//如果输入不符合上面的选择结构则为true执行下面结构内容
if(condition2) {
System.out.println("订单不存在!!");
}
break;
case "4":
System.out.println("·······删除订单·······");
System.out.print("请输入你要删除订单的序号:");
int delete = Gatsby.nextInt();
one2:for(int one = 0;one < name.length;one++) {
//符合条件删
if(name[one] != null && state[one] == 1 && delete == one+1) {
//内循环减一因为后面没有需要换的数组
for(int two = 0;two < name.length-1;two++ ) {
//随着循环次数变化后面数组赋值给前一位置数组
name[two] = name[two+1];
menu[two] = menu[two+1];
time[two] = time[two+1];
site[two] = site[two+1];
state[two] = state[two+1];
money[two] = money[two+1];
//把第最后一排数组定义为默认值也就是空
name[two+1] = null;
menu[two+1] = null;
time[two+1] = 0;
site[two+1] = null;
state[two+1] = 0;
money[two+1] = 0;
System.out.println("订单删除成功!");
break one2;
}
}
//不符合条件
if(name[one] == null || state[one] == 0 || delete != one+1) {
System.out.println("删除失败!原因可能所选订单尚未签收或订单不存在!");
break one2;
}
}
break;
case "5":
System.out.println("·······我要点赞·······");
System.out.println("——————————————————————————————————————————————————————————————————————————————");
System.out.println("序号\t菜品名称\t\t单价\t点赞数量");
for(int one = 0;one < greens.length;one++) {
System.out.println((one+1)+"\t"+greens[one]+"\t\t"+moneys[one]+"\t"+like[one]);
}
System.out.println("——————————————————————————————————————————————————————————————————————————————");
System.out.print("请输入你要点赞的菜品序号:");
int like1 = Gatsby.nextInt();
//一共三种商品所以输入的点赞序号要在1-3之间
if(like1 > 3 && like1 < 1) {
System.out.println("订单不错在哦!");
}
if(like1 <= 3 && like1 > 0){
like[like1-1] ++ ;
System.out.println("点赞成功!感谢你的赞哦!");
}
break;
case "6":
System.out.println("谢谢使用,欢迎下次光临!");
//输入6实现直接结束程序
break one1;
default:
System.out.println("你输入有误!!");
break;
}
System.out.print("输入·0·返回主菜单:");
do {
String select1 = Gatsby.next();
if(!"0".equals(select1)){
System.out.println("你输入有误!请重新进行输入:");
continue ;
}
break;
}while(condition);
}while(condition);
}
}