java吃货联盟订餐系统—把思路抽丝剥茧讲给你听

java吃货联盟订餐系统—把思路抽丝剥茧讲给你听吃货联盟订餐系统详细讲解 吃货联盟 java

大家好,欢迎来到IT知识分享网。

思路框架:

完整代码在文章末尾

一、吃货联盟一共有六个功能

1.我要订餐

2.查看餐袋

3.签收订单

4.删除订单

5.我要点赞

6.退出系统

二、首先要完成基本的存储需要使用数组:

1).这六个数组存储的是变化的量

1.String userNames[] = new String[4]; //保存用户姓名 2.String dishMegs[] = new String[4]; //订餐信息,包括菜名和份数,所以是个字符串类型 3.int times[] = new int[4]; //送餐时间 4.String addresses[] = new String[4]; //送餐地址 5.int status[] = new int[4]; //订单状态:0:已预定 1:已签收 6.Double sumMoney[] = new Double[4]; //订单的总金额

2).还需要一些数组来装相对固定不变的值

1.String[] dishNames={"红烧带鱼","鱼香肉丝","时令鲜蔬"}; //装菜名 2.double[] prices ={38.0,20.0,10.0}; //装菜的价格 3.int praiseNums[]=new int[3]; //装点赞数

三、整体框架

基本框架需要先实现菜单切换:

1.当输入1-5时:会有相关的菜单选项

2.用while包裹switch来显示循环菜单。

3.设置boolean的原因是为了退出while循环

4.基本框架如下,基本框架完成了只需要再逐步完成各个功能了

 boolean f=true; while(f){ 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("请选择:"); int choose=scanner.nextInt(); Scanner scanner=new Scanner(System.in); System.out.println("请选择"); int choose=scanner.nextInt(); switch (choose){ case 1: System.out.println("我要订餐"); break; case 2: System.out.println("查看餐袋"); break; case 3: System.out.println("签收订单"); break; case 5: System.out.println("我要点赞"); break; case 6: System.out.println("退出系统"); isExit=true; break; } } 

代码实现功能:

功能一:我要订餐

思路:

1.输入订餐人姓名,菜品编号,菜品份数,送餐时间,送餐地址

2.等用户输入完上面的数据后要重新显示一遍:菜品和份数,送餐时间和总额,这些都需要放到数组里

3.需要把用户输入的菜名和份数装在一个String数组中,这样显示的时候比较方便

1.我要订餐上:

分析代码:这一块主要是让用户输入信息

1.外层设置一个for循环用来给把信息挨个装进数组

2.紧接着用一个if来判断一下userName数组是否还有空余,如果有空余就进行以下的操作, isAdd这个变量是用来判断餐袋满了没,也可以用else来实现”餐袋已满”。

 3.让用户依次输入信息,当输入到选择菜品前,应该展示那些固定数组中的菜品和价格。

4.存储信息时这里用的是字符串类型的变量,为了展示的时候

 case 1: System.out.println("我要订餐"); boolean isAdd = false;//记录是否可以订餐 for (int i = 0; i < userNames.length; i++) { if (userNames[i] == null) { isAdd = true; System.out.println("请输入订餐人姓名"); String name = scanner.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 chioceDish = scanner.nextInt(); System.out.println("请选择您要的份数"); int number = scanner.nextInt(); //把份数和菜名都存在dishMeg这个String数组中 String dishMeg = dishNames[chioceDish - 1] + "" + number + "份"; double sumPrice = number * prices[chioceDish - 1]; System.out.println("请输入送餐时间 (送餐时间是10点-20点间整点送达):"); int time = scanner.nextInt(); while (time > 20 || time < 10) { System.out.println("对不起您输入的时间有误,请输入10点-20点间的整数"); time = scanner.nextInt(); } System.out.println("请输入送餐地址"); String address = scanner.next(); 

2.我要订餐下:

分析代码:这一块主要是把存的用户的信息输出出去

1.把上面用户存入的姓名,菜品信息,地址,送餐时间,总价。把这些存入数组并且终止for循环

 System.out.println("订餐成功!"); System.out.println("您订的是:" + dishMeg); System.out.println("送餐时间" + time); System.out.println("餐费:" + sumPrice); userNames[i] = name; dishMegs[i] = dishMeg; addresses[i] = address; times[i] = time; sumMoney[i] = sumPrice; break; } if (!isAdd) { System.out.println("对不起,您的餐袋已满"); } } break; 

功能二:查看餐袋

查看餐袋据相当于是显示历史订单

1.查看餐袋就是把功能一存进去的值再用字符串拼接一下,取出来,这里的for循环是为了循环取出字符串中的值,用三元运算符把数值转为文字,最后把这些值拼接起来

 case 2: System.out.println("查看餐袋"); System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品信息" + "\t" + "送餐时间" + "\t" + "送餐地址" + "\t" + "总金额" + "\t" + "订单状态"); for (int i = 0; i < userNames.length; i++) { if (userNames[i] != null) { // 0为已预定,1为已完成 String state = (status[i] == 0 ? "已预定" : "已完成"); System.out.println((i + 1) + "\t" + userNames[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t" + "点" + addresses[i] + "\t" + sumMoney[i] + "\t" + state); } }

功能三:签收订单

状态为0的订单是已预定订单,可以签收

状态为1的订单是已完成订单,已经签收过了,不能再次签收

1.boolean isSignFind = false;这个变量是为了识别是否找到订单,没找到值为false,找到了值为true,是为了应对没找到此订单这种情况,末尾有一个条件判断

2.if (userNames[i] != null && status[i] == 0 && signOrderId == i + 1)的意思是找到用户名不为空,状态为0,而且订单号等于数组序号+1的进入签收,否则显示已签收

case 3: //0已预定,1,已完成 System.out.println("签收订单"); boolean isSignFind = false;//找到要签收的订单 System.out.println("请选择要签收的订单号"); int signOrderId = scanner.nextInt(); for (int i = 0; i < userNames.length; i++) { if (userNames[i] != null && status[i] == 0 && signOrderId == i + 1) { status[i] = 1;//将状态值设为已签收 System.out.println("订单签收完成"); isSignFind = true; } else if (userNames[i] != null && status[i] == 1) { System.out.println("您选择的订单已完成签收,不能再次签收"); isSignFind = true; } } if (!isSignFind) { System.out.println("您选择的订单不存在"); } break;

功能四:删除订单

这个功能的难点是:当我们删除了一个订单之后,userNames[] 、dishMegs[]、 times[]、addresses[] 、status[] 、 sumMoney[] 这六个数组的值都要往前挪一位,填补上删除的空缺,把空缺放进数组的末尾。

1完成的订单才能被删除,未完成的订单不能删

2.isDelFind变量是为了标记这个删除订单是否被找到

3.第二个for循环是为了删除数值:直接把要删除订单的上一个值覆盖掉要删除的值,然后把最后的值清空

 case 4: // 删除订单号需要其他数组的都往前挪一位 System.out.println("删除订单"); boolean isDelFind = false;//标记未找到的删除订单 System.out.println("请输入要删除的订单编号"); int delOrderId = scanner.nextInt(); for (int j = 0; j < userNames.length; j++) { //当用户名不为空,状态为已完成的可以删除 if (userNames[j] != null && status[j] == 1) { isDelFind = true;//表示已找到 // 为啥这个地方要length-1,有的地方都不用 for (int k = delOrderId - 1; k < userNames.length - 1; k++) { userNames[k] = userNames[k + 1]; dishMegs[k] = dishMegs[k + 1]; sumMoney[k] = sumMoney[k + 1]; times[k] = times[k + 1]; status[k] = status[k + 1]; addresses[k] = addresses[k + 1]; } // 把最后一位清空 int endIndex = userNames.length - 1; userNames[endIndex] = null; dishMegs[endIndex] = null; sumMoney[endIndex] = 0.0; times[endIndex] = 0; status[endIndex] = 0; addresses[endIndex] = null; System.out.println("删除订单成功"); break; } else if (userNames[j] != null && status[j] == 0) { System.out.println("您选择的订单还没签收,不能删除"); isDelFind = true; } if (!isDelFind) { System.out.println("您要删除的订单不存在"); } break; } break;

功能五:我要点赞

点赞的数量是装在praiseNums[]这个数组里的,而且赞的数量只能增加

1.点赞前需要先展示菜单,第一个for循环就是为了展示菜品和数量

2.System.out.println(price);等于System.out.println(prices[j] + “元”);可以换成自己喜欢的方式

3.点赞的序号-1才等于要点赞的菜品数组下标

case 5: System.out.println("我要点赞"); // 显示菜单 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 dishPriaseID = scanner.nextInt(); praiseNums[dishPriaseID - 1] += 1; System.out.println("点赞成功"); break;

功能六:退出系统

这里结合前面的while循环,如果退出系统f会赋值为false,就不能进入系统了

 boolean f = true; while (f) { System.out.println("欢迎使用“吃货联盟订餐系统"); System.out.println("*"); System.out.println("1.我要订餐"); System.out.println("2.查看餐袋"); // 下面的代码省略 }
case 6: System.out.println("退出系统"); f = false; break;

全部代码:

import java.util.Scanner; public class Main { public static void main(String[] args) { // 功能:1.我要订餐 2.查看餐袋 3.签收订单 4.删除订单 5.我要点赞 6.退出系统 Scanner scanner = new Scanner(System.in); String userNames[] = new String[4]; //保存用户姓名 String dishMegs[] = new String[4]; //订餐信息,包括菜名和份数,所以是个字符串类型 int times[] = new int[4]; //送餐时间 String addresses[] = new String[4]; //送餐地址 int status[] = new int[4]; //订单状态:0:已预定 1:已签收 Double sumMoney[] = new Double[4]; //订单的总金额 // 这几个数组装的是固定的 String[] dishNames = {"红烧带鱼", "鱼香肉丝", "时令鲜蔬"}; double[] prices = {38.0, 20.0, 10.0}; int praiseNums[] = new int[3]; // 1.主页面 boolean f = true; while (f) { 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("请选择:"); int choose = scanner.nextInt(); switch (choose) { case 1: System.out.println("我要订餐"); boolean isAdd = false;//记录是否可以订餐 for (int i = 0; i < userNames.length; i++) { if (userNames[i] == null) { isAdd = true; System.out.println("请输入订餐人姓名"); String name = scanner.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 chioceDish = scanner.nextInt(); System.out.println("请选择您要的份数"); int number = scanner.nextInt(); //把份数和菜名都存在dishMeg这个String数组中 String dishMeg = dishNames[chioceDish - 1] + "" + number + "份"; double sumPrice = number * prices[chioceDish - 1]; System.out.println("请输入送餐时间 (送餐时间是10点-20点间整点送达):"); int time = scanner.nextInt(); while (time > 20 || time < 10) { System.out.println("对不起您输入的时间有误,请输入10点-20点间的整数"); time = scanner.nextInt(); } System.out.println("请输入送餐地址"); String address = scanner.next(); System.out.println("订餐成功!"); System.out.println("您订的是:" + dishMeg); System.out.println("送餐时间" + time); System.out.println("餐费:" + sumPrice); // 存放数据 userNames[i] = name; dishMegs[i] = dishMeg; addresses[i] = address; times[i] = time; sumMoney[i] = sumPrice; break; } if (!isAdd) { System.out.println("对不起,您的餐袋已满"); } } break; case 2: System.out.println("查看餐袋"); System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品信息" + "\t" + "送餐时间" + "\t" + "送餐地址" + "\t" + "总金额" + "\t" + "订单状态"); for (int i = 0; i < userNames.length; i++) { if (userNames[i] != null) { // 0为已预定,1为已完成 String state = (status[i] == 0 ? "已预定" : "已完成"); System.out.println((i + 1) + "\t" + userNames[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t" + "点" + addresses[i] + "\t" + sumMoney[i] + "\t" + state); } } break; case 3: //0已预定,1,已完成 System.out.println("签收订单"); boolean isSignFind = false;//找到要签收的订单 System.out.println("请选择要签收的订单号"); int signOrderId = scanner.nextInt(); for (int i = 0; i < userNames.length; i++) { // 状态为已预定status=0的已预定的可以签收 // 状态为已预定status=1的已签收的不可以签收 if (userNames[i] != null && status[i] == 0 && signOrderId == i + 1) { status[i] = 1;//将状态值设为已签收 System.out.println("订单签收完成"); isSignFind = true; } else if (userNames[i] != null && status[i] == 1) { System.out.println("您选择的订单已完成签收,不能再次签收"); isSignFind = true; } } if (!isSignFind) { System.out.println("您选择的订单不存在"); } break; case 4: // 删除订单号需要其他数组的都往前挪一位 System.out.println("删除订单"); boolean isDelFind = false;//标记未找到的删除订单 System.out.println("请输入要删除的订单编号"); int delOrderId = scanner.nextInt(); for (int j = 0; j < userNames.length; j++) { //当用户名不为空,状态为已完成的可以删除 if (userNames[j] != null && status[j] == 1) { isDelFind = true;//表示已找到 for (int k = delOrderId - 1; k < userNames.length - 1; k++) { userNames[k] = userNames[k + 1]; dishMegs[k] = dishMegs[k + 1]; sumMoney[k] = sumMoney[k + 1]; times[k] = times[k + 1]; status[k] = status[k + 1]; addresses[k] = addresses[k + 1]; } // 把最后一位清空 int endIndex = userNames.length - 1; userNames[endIndex] = null; dishMegs[endIndex] = null; sumMoney[endIndex] = 0.0; times[endIndex] = 0; status[endIndex] = 0; addresses[endIndex] = null; System.out.println("删除订单成功"); break; } else if (userNames[j] != null && status[j] == 0) { System.out.println("您选择的订单还没签收,不能删除"); isDelFind = true; } if (!isDelFind) { System.out.println("您要删除的订单不存在"); } break; } break; case 5: System.out.println("我要点赞"); // 显示菜单 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" + prices[j] + "元" + "\t" + priaisenum); } System.out.println("请选择您要点赞的菜品序号"); int dishPriaseID = scanner.nextInt(); praiseNums[dishPriaseID - 1] += 1; System.out.println("点赞成功"); // 第二个循环是为了展示点出的赞 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" + prices[j] + "元" + "\t" + priaisenum); } break; case 6: System.out.println("退出系统"); f = false; break; } } } }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/150868.html

(0)
上一篇 2025-03-16 18:25
下一篇 2025-03-16 18:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信