吃货联盟订餐系统
我们前三阶段的练习都是在Console(控制台)上展示的!我们是在学习语法阶段。未来的产品不会以控制台形式展示给客户。
控制台系统 精简版的美团
吃货联盟订餐系统包含的功能:我要订餐,查看餐袋,我要签收,删除订单,点赞菜品,退出系统。
1.业务驱动技术。
1.我要订餐
0.提升用户体验,餐袋已满,不再进行一下操作。
1.输入点餐人姓名
2.将所有的菜品进行展示
3.输入要订的菜品序号
4.输入要订的菜品份数
5.输入配送时间
6.输入配送地址(及联系电话)
7.显示订餐信息
8.返回上一层
2.查看餐袋
1.直接展示(自己)所有的订单信息
3.我要签收
1.显示所有的订单信息
2.输入要签收的订单序号
3.判断,如果已经签收完成的订单不允许重复签收,未完成签收的订单则可以进行签收
5.展示签收成功
4.删除订单
1.展示所有的订单信息
2.输入要删除的订单序号
3.判断,如果未完成(显示已预订)则不允许删除,已完成的则可以进行订单删除
4.删除成功
5.我要点赞(显示菜品的点赞累加)
1.展示所有的菜品信息
2.输入点赞的菜品序号
3.提示点赞成功
6.退出系统
1.提示结束语
2.执行程序退出
2.技术难点分析
1.存储难点
姓名,订餐菜品 + 分数,送餐时间,送餐地址,订单状态(0表示已预订,1表示已完成),总金额....
1.使用变量
如果存储3个订单,需要定义跟多变量(X)
2.使用数组
数组是长度不可变得(因技术限制假定最大存储长度为4)
数组是一组相同类型数据,虽然我们一个数组中无法直接存储一条订单信息,但是我们可以定义多个数组,每个数组的相同索引用来存储一条订单信息。例如:多个数组的下标为0表示第一条订单,下标为1是表示第二条订单......
菜品信息:
菜名,单价,点赞数。
2.订单和菜品遍历
因为下标相同表示同一条订单或菜品信息,所以可以遍历一个数组时进行遍历其他多个数组。
for(int i = 0;i < names.length;i++){
syso(names[i] + "\t" + totalMoney[i] + ......)
}
3.订单签收和菜品点赞
就是将对应的数组进行重新赋值而已。
4.删除订单
当删除的是最后一条订单信息是,只需要将最后一条订单信息置为数值默认值即可。
names[names.length - 1] = null;
totalMoney[totalMoney.length - 1] = 0;
.....
当删除的是非最后一条订单信息时,需要先将此下标后的元素前移动,然后将最后信息进行置为默认值。
5.订单总金额计算
菜品的单价 * 份数
当实际消费总金额 >= 50元 则配送费减免 ,否则需要5元配送费。
配送费计算三元运算符
菜品的单价 * 份数 >= 50 ? 0 : 5;
小程序:
package dome;
import java.util.*;
/**
* 我的吃货联盟订餐系统
* @author Li-BetterMen
*
*/
public class Lianxi {
public static void main(String[] args) {
//定义变量,姓名(name),总金额(sumPrice),菜品(dishMeg),时间(time),地址(addresse),订单状态(state)
String name;
String dishMeg;
String address;
String sumPrice;
int time;
String state;
//声明数组,姓名(names),总金额(sumPrices),菜品(dishMegs),时间(times),地址(addresses),订单状态(states)
String[] names = new String[4];
String[] dishMegs = new String[4];
String[] addresses = new String[4];
double[] sumprices = new double[4];
int[] times = new int[4];
int[] states = new int[4];
//声明数组,菜名,菜价,菜品好评点赞
String[] dishNames = {"红烧肉","红烧鱼","红烧牛肉"};
double[] prices = new double[] {30.0,35.0,40.0,};
int[] praiseNums = new int[3];
//标记用户返回和退出
int num = -1;
boolean isExit = false;
Scanner input = new Scanner(System.in);
int case1;
do {
System.out.println("\t欢迎使用“吃货联盟订餐系统”\n************************************");
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.println("请选择:");
int choose = input.nextInt();
switch(choose) {
case 1:
System.out.println("************我要订餐************");
Boolean isAdd = false;
for(int i = 0;i < names.length;i++) {
if(names[i] == null) {
isAdd = true;
System.out.print("请输入订餐人的姓名:");
name = input.next();
System.out.println("序号" + "\t" + "菜名" + "\t" + "单价" + "\t" + "点赞数");
for(int j = 0;j < dishNames.length;j++) {
String price = prices[j] + "元";
String priaiseNum = (praiseNums[j]) > 0? praiseNums[j] + "赞" :"0";
System.out.println((j + 1) + "\t" + dishNames[j]
+ "\t" + price + "\t" + priaiseNum);
}
System.out.println("请选择您要点的菜品名称:");
int chooseDish = input.nextInt();
System.out.print("请选择你需要的份数:");
int number = input.nextInt();
dishMeg = dishNames[chooseDish - 1] + " "+ number + "份";
double sumprice = prices[chooseDish - 1] * number;
double deliCharge = (sumprice >= 50) ? 0 : 5;
System.out.print("请输入送餐时间(送餐时间是早上10点-----晚上8点,整点送餐):");
time = input.nextInt();
while(time < 10 || time > 20) {
System.out.print("你的输入有误,请输入早上10点-----晚上8点之间的整数!");
time = input.nextInt();
}
System.out.print("请输入送餐地址:");
address = input.next();
System.out.println("订餐成功!");
System.out.println("您订的是:"+ dishMeg);
System.out.println("您的送餐时间是:" + time + "点");
System.out.println("餐费:" + sumprice + "元,送餐费"
+ deliCharge +"元,总计:"
+ (sumprice + deliCharge) + "元。");
names[i] = name;
dishMegs[i] = dishMeg;
times[i] = time;
addresses[i] = address;
sumprices[i] = sumprice + deliCharge;
break;
}
}
if(!isAdd) {
System.out.println("对不起,你的餐袋已经满了!");
}
break;
case 2:
System.out.println("************查看餐袋************");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态");
for(int i = 0; i < names.length;i++) {
if(names[i] != null) {
state = (states[i] == 0) ? "已预订" : "已完成";
String date = times[i] + "点";
sumPrice = sumprices[i] + "元";
System.out.println((i + 1) + "\t" + names[i] + "\t"
+ dishMegs[i] + "\t" + date + "\t"
+ addresses[i] + "\t" + sumPrice + "\t" + state);
}
}
break;
case 3:
System.out.println("************签收订单************");
boolean isSignFind = false;
System.out.print("请选择要签收的订单序号:");
int signOrderld = input.nextInt();
for(int i = 0;i < names.length;i++) {
if(names[i] != null && states[i] == 0
&& signOrderld == i + 1) {
states[i] = 1;
System.out.println("订单签收成功!");
isSignFind = true;
}else if(names[i] != null && states[i] == 1
&& signOrderld == i +1) {
System.out.println("您选择的订单已完成签收,不能再次签收!");
isSignFind = true;
}
}
if(!isSignFind) {
System.out.println("您选择的订单不存在!");
}
break;
case 4:
System.out.println("************删除订单************");
boolean isDelFind = false;
System.out.print("请输入要删除的订单序号:");
int delld = input.nextInt();
for(int i = 0;i < names.length;i++) {
if(names[i] != null && states[i] == 1 && delld == i + 1) {
isDelFind = true;
for(int j = 0;j < names.length - 1;j++) {
names[j] = names[j + 1];
dishMegs[j] = dishMegs[j + 1];
times[j] = times[j + 1];
addresses[j] = addresses[j + 1];
states[j] = states[j + 1];
sumprices[j] = sumprices[j + 1];
}
int endIndex = names.length - 1;
names[endIndex] = null;
dishMegs[endIndex] = null;
times[endIndex] = 0;
addresses[endIndex] = null;
states[endIndex] = 0;
sumprices[endIndex] = 0;
System.out.println("删除订单成功!");
break;
}else if(names[i] != null && states[i] ==0 && delld == i + 1) {
System.out.println("你选择的订单未签收,不能删除!");
isDelFind = true;
break;
}
}
if(!isDelFind) {
System.out.println("你要删除的订单不存在!");
}
break;
case 5:
System.out.println("************我要点赞************");
System.out.println("序号" + "\t" + "菜名" + "\t" + "单价");
for(int i = 0;i < dishNames.length;i++) {
String price = prices[i] + "元";
String priaiseNum = (praiseNums[i] > 0 ? praiseNums[i] + "赞" : " ");
System.out.println((i + 1) + "\t" + dishNames[i] + "\t" + price + "\t" + priaiseNum);
}
System.out.print("请选择您要点赞的菜品序号:");
int priaiseNum = input.nextInt();
praiseNums[priaiseNum - 1]++;
System.out.println("点赞成功!");
break;
case 6:
isExit = true;
break;
default:
isExit = true;
break;
}
if(!isExit) {
System.out.println("返回上一层请输入0");
num = input.nextInt();
}else {
break;
}
}while(num == 0);
System.out.println("谢谢使用,欢迎下次光临!");
}
}