带你深入了解Java!吃货联盟实战!

< 吃货联盟 >

  • 精简版美团
  • 吃货联盟系统包含的功能:我要订餐、查看餐袋、我要签收、点赞菜品、退出系统

一、业务分析

业务驱动技术

  • 我要订餐
    – 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);
	}
}

猜你喜欢

转载自blog.csdn.net/Gastby98/article/details/89061822