吃货联盟
目录
实现功能:需实现简单的订餐、查看、签收、删除、点赞功能。
1.项目需求
实现各个模块的简单功能,对数据的建立,对框架的构成进行详细的书写。
2.订餐功能
缺点(未完成的点):未能单人多点功能
case 1:
// 判断数组中是否有位置,若有,则进,若无,则说明餐袋已满。
int numNull = 0;
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
System.out.println("*****新增订餐*****");
// 订餐人姓名
System.out.print("请输入订餐人姓名:");
names[i] = sc.next();
// 显示菜单信息
System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
// 循环打印菜单
for (int j = 0; j < dishName.length; j++) {
System.out.println(
(j + 1) + "\t\t" + dishName[j] + "\t\t" + dishMoney[j] + "\t\t" + dishLike[j]);
}
System.out.print("请选择您要点的菜品编号:");
int menusNo = sc.nextInt();
System.out.print("请选择您需要的份数:");
int menusNum = sc.nextInt();
dishMegs[i] = dishName[(menusNo - 1)] + " " + menusNum + "份";
// 送餐时间
System.out.print("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
int menusTime = sc.nextInt();
while (menusTime < 10 || menusTime > 20) {
System.out.println("不在送餐时间内,请重新输入");
menusTime = sc.nextInt();
}
times[i] = menusTime;
// 送餐地址
System.out.print("请输入送餐地址:");
address[i] = sc.next();
// 状态(新增时,订单状态位默认)
states[i] = 0;
// 总金额(若总金额>50,则价格不变;总金额<50,加收5元送餐费)
double allMoney = dishMoney[(menusNo - 1)] * menusNum;
if (allMoney >= 50) {
sumPrices[i] = allMoney;
} else {
sumPrices[i] = allMoney + 5;
}
break;
} else {
numNull = i;
}
}
if (numNull == names.length - 1) {
System.out.println("餐袋已满,请及时处理。");
}
break;
3.查看功能
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) {
String time = times[i] + "点";
String sumPrice = sumPrices[i] + "元";
String state;
if (states[i] == 0) {
state = "已预定";
} else {
state = "已完成";
}
System.out.println((i + 1) + "\t" + names[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t"
+ address[i] + "\t" + sumPrices[i] + "\t" + states[i]);
}
}
break;
4.签收功能
case 3:
System.out.println("*****签收订单*****");
// 手动输入需要签收订单的编号
System.out.print("请选择需要签收的订单序号:");
int orderNo = sc.nextInt();
// 如果,订单状态位"已预定",才可以被签收;"已完成"的订单不需要签收
// states 保存订单状态:0表示已预定,1表示已完成
for (int i = 0; i < names.length; i++) {
if (names[i] != null && states[i] == 0 && orderNo == i + 1) {
states[i] = 1;
System.out.println("订单签收成功!!!!!");
} else if (names[i] != null && states[i] == 1 && orderNo == i + 1) {
System.out.println("该订单已被签收,不能重复签收。。。。。");
} else if (names[i] == null && orderNo == i + 1) {
System.out.println("您输入的订单不存在!!!");
}
}
break;
5.删除功能
case 4:
System.out.println("*****删除订单*****");
// 被签收过的才可以删除
System.out.print("选择您要删除的订单:");
int delNum = sc.nextInt();// 手动录入需要删除的订单序号
for (int i = 0; i < names.length; i++) {
if (names[i] != null && states[i] == 0 && delNum == i + 1) {
System.out.println("订单尚未签收,不能被删除。。。。。");
}
// 会删除代码后全部的订单
else if (names[i] != null && states[i] == 1 && delNum == i + 1) {
names[i] = null;
System.out.println("订单删除成功。。。。。");
// 删除订单后,以后的元素依次往前移动
if (names[i] == null) {
for (int j = i; j < names.length - 1; j++) {
names[j] = names[j + 1];
dishMegs[j] = dishMegs[j + 1];
times[j] = times[j + 1];
address[j] = address[j + 1];
sumPrices[j] = sumPrices[j + 1];
states[j] = states[j + 1];
}
}
// 将最后一位清空
int endIndex = names.length - 1;
names[endIndex] = null;
dishMegs[endIndex] = null;
times[endIndex] = 0;
address[endIndex] = null;
sumPrices[endIndex] = 0;
states[endIndex] = 0;
}
// ----------------------------
}
break;
6.点赞功能
缺点:未能依照订单信息进行点赞功能等。
case 5:
System.out.println("*****我要点赞*****");
System.out.println("序号\t"+"菜名\t"+"单价\t"+"点赞数\t");
for (int i = 0; i < dishName.length; i++) {
System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
}
System.out.print("请选择要点赞的菜品编号:");
int dishLike1 = sc.nextInt();
dishLike[dishLike1-1]++;
System.out.println("点赞成功!!!!!");
System.out.println();
//显示点赞后的菜单
for (int i = 0; i < dishName.length; i++) {
System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
}
break;
7.项目源码
package ch07;
import java.util.Arrays;
import java.util.Scanner;
/**
*
* @author 94063
* @time 2023/6/2
*
*/
public class Test {
public static void main(String[] args) {
// 吃货联盟订餐系统
Scanner sc = new Scanner(System.in);
// 定义各类数组,最多接收4条订单
String names[] = new String[4];// 保存订餐人的姓名
String dishMegs[] = new String[4];// 保存所选信息,包括菜品名称及份数
int times[] = new int[4];// 保存送餐时间
String address[] = new String[4];// 保存送餐地址
int states[] = new int[4];// 保存订单状态:0表示已预定,1表示已完成
double sumPrices[] = new double[4];// 保存订单总金额
//------------------------------------------------------------------------
// 菜品信息
String dishName[] = new String[] { "红烧带鱼", "鱼香肉丝", "麻婆豆腐" };// 菜品名称
double dishMoney[] = new double[] { 38.0, 20.0, 10.0 };// 菜品单价
int dishLike[] = new int[3]; // 菜品点赞
//------------------------------------------------------------------------
boolean isExit = false; // 是否退出系统,true为退出
int num = -1;// 循环赋初值
System.out.println("欢迎使用“吃货联盟订餐系统”");
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("请选择:");
//------------------------------------------------------------------------
int choose = sc.nextInt();// 手动输入选择,进入相对应的界面
switch (choose) {
case 1:
// 判断数组中是否有位置,若有,则进,若无,则说明餐袋已满。
int numNull = 0;
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
System.out.println("*****新增订餐*****");
// 订餐人姓名
System.out.print("请输入订餐人姓名:");
names[i] = sc.next();
// 显示菜单信息
System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
// 循环打印菜单
for (int j = 0; j < dishName.length; j++) {
System.out.println(
(j + 1) + "\t\t" + dishName[j] + "\t\t" + dishMoney[j] + "\t\t" + dishLike[j]);
}
System.out.print("请选择您要点的菜品编号:");
int menusNo = sc.nextInt();
System.out.print("请选择您需要的份数:");
int menusNum = sc.nextInt();
dishMegs[i] = dishName[(menusNo - 1)] + " " + menusNum + "份";
// 送餐时间
System.out.print("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
int menusTime = sc.nextInt();
while (menusTime < 10 || menusTime > 20) {
System.out.println("不在送餐时间内,请重新输入");
menusTime = sc.nextInt();
}
times[i] = menusTime;
// 送餐地址
System.out.print("请输入送餐地址:");
address[i] = sc.next();
// 状态(新增时,订单状态位默认)
states[i] = 0;
// 总金额(若总金额》50,则价格不变;总金额《50,加收5元送餐费)
double allMoney = dishMoney[(menusNo - 1)] * menusNum;
if (allMoney >= 50) {
sumPrices[i] = allMoney;
} else {
sumPrices[i] = allMoney + 5;
}
break;
} else {
numNull = i;
}
}
if (numNull == names.length - 1) {
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) {
String time = times[i] + "点";
String sumPrice = sumPrices[i] + "元";
String state;
if (states[i] == 0) {
state = "已预定";
} else {
state = "已完成";
}
System.out.println((i + 1) + "\t" + names[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t"
+ address[i] + "\t" + sumPrices[i] + "\t" + states[i]);
}
}
break;
case 3:
System.out.println("*****签收订单*****");
// 手动输入需要签收订单的编号
System.out.print("请选择需要签收的订单序号:");
int orderNo = sc.nextInt();
// 如果,订单状态位"已预定",才可以被签收;"已完成"的订单不需要签收
// states 保存订单状态:0表示已预定,1表示已完成
for (int i = 0; i < names.length; i++) {
if (names[i] != null && states[i] == 0 && orderNo == i + 1) {
states[i] = 1;
System.out.println("订单签收成功!!!!!");
} else if (names[i] != null && states[i] == 1 && orderNo == i + 1) {
System.out.println("该订单已被签收,不能重复签收。。。。。");
} else if (names[i] == null && orderNo == i + 1) {
System.out.println("您输入的订单不存在!!!");
}
}
break;
//------------------------------------------------------------------------------
case 4:
System.out.println("*****删除订单*****");
// 被签收过的才可以删除
System.out.print("选择您要删除的订单:");
int delNum = sc.nextInt();// 手动录入需要删除的订单序号
for (int i = 0; i < names.length; i++) {
if (names[i] != null && states[i] == 0 && delNum == i + 1) {
System.out.println("订单尚未签收,不能被删除。。。。。");
}
// 会删除代码后全部的订单
else if (names[i] != null && states[i] == 1 && delNum == i + 1) {
names[i] = null;
System.out.println("订单删除成功。。。。。");
// 删除订单后,以后的元素依次往前移动
if (names[i] == null) {
for (int j = i; j < names.length - 1; j++) {
names[j] = names[j + 1];
dishMegs[j] = dishMegs[j + 1];
times[j] = times[j + 1];
address[j] = address[j + 1];
sumPrices[j] = sumPrices[j + 1];
states[j] = states[j + 1];
}
}
// 将最后一位清空
int endIndex = names.length - 1;
names[endIndex] = null;
dishMegs[endIndex] = null;
times[endIndex] = 0;
address[endIndex] = null;
sumPrices[endIndex] = 0;
states[endIndex] = 0;
}
// ----------------------------
}
break;
// --------------------------------------------------------
case 5:
System.out.println("*****我要点赞*****");
System.out.println("序号\t"+"菜名\t"+"单价\t"+"点赞数\t");
for (int i = 0; i < dishName.length; i++) {
System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
}
System.out.print("请选择要点赞的菜品编号:");
int dishLike1 = sc.nextInt();
dishLike[dishLike1-1]++;
System.out.println("点赞成功!!!!!");
System.out.println();
//显示点赞后的菜单
for (int i = 0; i < dishName.length; i++) {
System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
}
break;
// --------------------------------------------------------
case 6:
System.out.println("谢谢使用,欢迎下次光临!!!!!");
isExit = true;
break;
default:
System.out.println("谢谢使用,欢迎下次光临!!!!!");
isExit = true;
break;
}
if (!isExit) {
System.out.print("输入0返回:");
num = sc.nextInt();
} else {
break;
}
} while (num == 0);
//-------------------------------------------------------------------------
}
}
8.总结
项目仅实现书中所要求的简单功能,参照目前已知的一些软件来看,实用性较差,主要锻炼思维逻辑性,未完成的功能有如下几点:
- 订餐功能里,单人多点等功能未实现
- 删除订单后,需要有回收箱(该功能与后面点赞相关联)
- 点赞共能需在已完成的订单中进行,未购买的菜品等不可点赞等