Java—点餐系统
需求:
分析:
代码:
package Demo20210113;
import java.util.Scanner;
/**
* @Author shall潇
* @Date 2021/1/13
* @Description 点餐系统
*/
public class EatLeagueSystem {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int choice;
String[] dishes = {"假红烧肉", "炭烤生蚝", "开水白菜", "真佛跳墙"}; //菜类
double[] dish_price = {18, 23, 12, 30}; //菜的单价
int[] honer = {12, 45, 203, 11}; //点赞数
String[][] order = new String[1024][];
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.println("********请输入选择:***********");
choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("***我要订餐***");
System.out.println("请输入订餐人姓名:");
String user_name = sc.next();
System.out.println("序号\t菜品\t\t单价");
for (int i = 0; i < dishes.length; i++) {
System.out.println((i + 1) + "\t" + dishes[i] + "\t" + dish_price[i]);
}
int disNum = 0;
do {
System.out.println("请输入您要的菜品编号:");
disNum = sc.nextInt();
if (disNum <= 0 || disNum >= dishes.length) {
System.out.println("输入有误");
}
} while (disNum <= 0 || disNum >=dishes.length);
int pcs = 0;
do {
System.out.println("请输入您需要的份数");
pcs = sc.nextInt();
if (pcs < 0) {
System.out.println("输入有误");
}
}while (pcs < 0) ;
int time = 0;
do {
System.out.println("请输入送餐时间10~20点");
time = sc.nextInt();
if (time < 10 || time > 20) {
System.out.println("输入有误");
}
} while (time < 10 && time > 20);
System.out.println("请输入您的收货地址");
String address = sc.next();
System.out.println("订餐成功!");
System.out.println("您订的是:" + dishes[disNum - 1] + "\t份数:" + pcs);
System.out.println("送餐时间:" + time + "点");
double cost = dish_price[disNum - 1] * pcs;
double sent = cost > 30 ? 6 : 3;
double total = cost + sent;
System.out.println("订餐费:" + cost + "\t送餐费:" + sent + "\t总计:" + total);
for (int i = 0; i < order.length; i++) {
if (order[i] == null){ //如果订单为空
order[i] = new String[2]; //定义两列
order[i][0] = user_name+"\t"+dishes[disNum-1]+" "+pcs+"份\t"+time+"点\t"+ address+"\t"+total+"元"; //第一列:订单基本信息
order[i][1] = "已预订"; //第二列:订单状态
break;
}
}
break;
case 2:
System.out.println("***查看餐袋***");
System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
for (int i = 0; i < order.length; i++) {
if (order[i]!=null){
System.out.println(i+1+"\t"+order[i][0]+"\t"+order[i][1]);
}else {
break;
}
}
break;
case 3:
System.out.println("***签收订单***");
System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
for (int i = 0; i < order.length; i++) {
if (order[i]!=null){ //如果有订单就输出
System.out.println(i+1+"\t"+order[i][0]+"\t"+order[i][1]);
int ordernum = 0; //定义要签收的订单号
int end = 0; //定义最后一位
do {
System.out.println("请选择要签收的订单号");
for (int j = 0; j < order.length; j++) {
if (order[j] == null) {
end = j;
break;
}
}
ordernum = sc.nextInt();
if (ordernum < 1 || ordernum > end) {
System.out.println("输入有误");
} else if (!"已预订".equals(order[ordernum - 1][1])) {
System.out.println("订单已签收,不能重复签收");
} else {
order[ordernum - 1][1] = "已完成";
System.out.println("订单签收成功");
break;
}
} while (ordernum < 1 || ordernum > end || !"已预订".equals(order[ordernum - 1][1]));
break; //只是导致bug的一个原因,不加的话会卡死,哈哈哈
}else { //没有订单就退出
break;
}
}
break;
case 4:
System.out.println("***删除订单***");
System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
for (int i = 0; i < order.length; i++) {
if (order[i]!=null){
System.out.println(i+1+"\t"+order[i][0]+"\t"+order[i][1]);
}else {
//System.out.println("\n暂无订单!\n");
break;
}
}
int n = 0; //定义要删除的订单号
int e = 0; //定义最后一位
do{
for (int k = 0; k < order.length; k++) {
if(order[k]==null){
e =k;
break;
}
}
System.out.println("请输入要删除的订单号");
n = sc.nextInt();
if(n<1||n>e){
System.out.println("请重新输入");
}else if(!"已完成".equals(order[n-1][1])){
System.out.println("未签收不能删除");
}else {
boolean isDelete = false; //定义删除操作标志
for (int j = n-1; j < order.length; j++) {
if(j==order.length-1){ //如果要删除的是最后一位
order[j]=null; //先置空
isDelete = true;
}else {
order[j] = order[j+1]; //前移
if(order[j]==null){
isDelete = true;
break;
}
}
}
if(isDelete){
System.out.println("订单删除成功");
break;
}
}
}while (n<1||n>e||!"已完成".equals(order[n-1][1]));
break;
case 5:
System.out.println("***我要点赞***");
for (int i = 0; i < dishes.length; i++) {
System.out.println((i+1)+"\t"+dishes[i]+"点赞数:"+honer[i]); //先输出序号,菜品,点赞数
}
int hornor_dish_pos = 0; //记录被点赞的菜品序号
do{
System.out.println("请选择要点赞的菜品序号:(每次点赞只能点赞一次)");
hornor_dish_pos = sc.nextInt();
if(hornor_dish_pos<=0 || hornor_dish_pos>=dishes.length){
System.out.println("输入序号有误");
}else {
honer[hornor_dish_pos - 1]++; //被点赞的菜品的点赞数++
System.out.println("点赞完成!");
break;
}
}while (hornor_dish_pos<=0 || hornor_dish_pos>=dishes.length);
break;
default:
System.exit(0);
}
if (choice >= 1 && choice <= 6) {
System.out.println("输入0返回");
choice = sc.nextInt();
} else {
break;
}
} while (choice == 0) ;
System.out.println("欢迎使用本系统");
}
}
其实内容并不是太好,因为这只是利用之前讲的内容做的,并没有用到函数,try-catch,集合等等,所以显的很乱并且不够简洁,但基本代码逻辑和业务逻辑都没有问题。但是本程序有两个bug:
第一个是签收订单功能里面只能输出第一个订单信息,但其他信息不显示(确实存进去了,可以去2功能查看一下)
第二个实删除订单功能里面如果全部是未签收状态的订单,会卡死。
其实一开始这两个都是一样的bug,只不过我改完签收订单的bug(可以解决循环卡死的问题)产生新的bug,哈哈哈哈。原因是在一开始的if语句最后加了一句break,导致输出只能输出第一个订单信息。所以,就产生了新bug,删除功能的就懒得改了。