提示:使用选择、循环以及数组等基础进行编写
文章目录
- Java基础练习——吃货联盟
- 前言
- 一、使用步骤
- 1.代码
- 2.编写思路
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、使用步骤 1.代码代码如下(示例):
public class EatDemo { public static void main(String[] args) { //我要订餐的需求=10 //10 需要一个餐单 //品名 String[] names = {"鱼香肉丝", "鸭血粉丝", "桂花糕点 ", "南京板鸭"}; //价格 double[] prices = {18.8, 20, 8, 47}; //库存 int[] saves = {10, 10, 10, 10}; //用户选择的id列表,应该是数组,记录的是产品的下标 //记录用户的姓名 String[] uname = new String[4]; //记录每个单品的点赞数量 int[] like = new int[4]; //记录系统订单详情 String[] chooseDish = new String[4]; //记录订单的点菜数量 int[] chooseNumber = new int[4]; //记录订单总价 double[] choosePriceSum = new double[4]; //记录订单发货状态 int[] chooseFa = new int[4]; //1.订餐系统需要循环运作,制造一个死循环,给出退出条件 //原因是,有退出系统选项 //需要接受客户输入 Scanner scan = new Scanner(System.in); //需要一个退出标志位 int num = -1; boolean flag = false; System.out.println("网上订餐系统:"); do { 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.print("请根据序号,输入您想进行的 *** 作:"); int selected = scan.nextInt(); switch (selected) { case 1: //我要订餐 System.out.println("您好,欢迎进入订餐页面"); //先判断是否可以订餐,如果座位满了,停止使用点餐 boolean addTest = false; //请顾客选择, 顾客可能选多个,所以这边是循环选择 for (int i = 0; i < uname.length; i++) { if (uname[i] == null) { addTest = true; //记录订餐人的姓名,并将用户输入的姓名存入uname数组 System.out.print("请输入订餐人的姓名:"); String name = scan.next(); uname[i] = name; //提示用户进行选择菜品,并完善表头 System.out.println("菜品如下,请您选择你想要的菜的编号:"); System.out.println("序号" + "t" + "菜品名称" + "t" + "菜品单价" + "t" + "库存数量" + "t" + "点赞数量"); //利用for循环,将菜品的详情进行展示 for (int j = 0; j < names.length; j++) { System.out.println((j + 1) + "t" + names[j] + "t" + prices[j] + "t" + saves[j]+ "t" + like[j]); } System.out.print("请选择您要点的菜品编号:"); int dishId = scan.nextInt(); //判断用户所输入的编号是否符合存在,不存在的话请重新输入 while (dishId < 1 || dishId > names.length) { System.out.print("您输入的菜品不存在,请重新输入:"); dishId = scan.nextInt(); } //当用户选择的数量超过该单品的库存的时候,要用户重新选择 System.out.print("请选择您要点的菜品份数:"); int fen = scan.nextInt(); while (fen < 0 || fen > saves[dishId - 1]) { System.out.print("您购买的数量已经超过库存,请重新输入"); fen = scan.nextInt(); } //记录库存数量 saves[dishId - 1] = saves[dishId - 1] - fen; //判断用户所点的分数是否超过内存 //生成已点餐详细信息,包括菜品名称、菜品单价、点菜数量以及总价 System.out.println("请您确认订单信息"); System.out.println("菜品名称" + "t" + "菜品单价" + "" + "t" + "点菜数量" + "" + "t" + "菜品总价" + ""); System.out.println((names[dishId - 1]) + "t" + (prices[dishId - 1]) + "元" + "t" + (fen) + "份" + "t" + (prices[dishId - 1] * fen) + "元"); //记录订单信息 //记录预定者姓名 uname[i] = name; //记录选择的菜品名称 chooseDish[i] = names[dishId - 1]; //记录选择的菜品的数量 chooseNumber[i] = fen; //记录选择的菜品的总价 choosePriceSum[i] = (prices[dishId - 1] * fen); //记录订单的发货状态,初始化为0标识未发货 chooseFa[i] = 0; break; } } if (!addTest) { System.out.println("系统不支持继续订餐,请删除已完成订单后,继续订餐"); } break; case 2: //查看餐袋 //这是已经下单的订单信息,请查看 System.out.println("这是已经下单的订单信息,请查看"); System.out.println("序号" + "t" + "订餐人" + "t" + "餐品名称" + "t" + "点菜数量" + "" + "t" + "菜品总价" + "" + "t" + "订单状态"); //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量 for (int k = 0; k < uname.length; k++) { //判断数组中的下标是否为空,如果为空则不显示 if (uname[k] == null) { break; } //首先将预定状态改为文字,此处采用三目运算符 String state = chooseFa[k] == 0 ? "已预订" : "已发货"; System.out.println((k + 1) + "t" + (uname[k]) + "t" + (chooseDish[k]) + "t" + (chooseNumber[k]) + "份" + "t" + (choosePriceSum[k]) + "元" + "t" + (state)); } //需要给用户提供返回上一级 break; case 3: //签收订单 //需要遍历餐单,根据用户的订单列表 ,展示对应的商品,并计算价格 System.out.println("这是订单的状态,请您查看并签收"); System.out.println("序号" + "t" + "订餐人" + "t" + "餐品名称" + "t" + "点菜数量" + "" + "t" + "菜品总价" + "" + "t" + "订单状态"); //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量 for (int l = 0; l < uname.length; l++) { //判断数组中的下标是否为空,如果为空则不显示 if (uname[l] == null) { break; } //首先将预定状态改为文字,此处采用三目运算符 String state = chooseFa[l] == 0 ? "已预订" : "已发货"; System.out.println((l + 1) + "t" + (uname[l]) + "t" + (chooseDish[l]) + "t" + (chooseNumber[l]) + "份" + "t" + (choosePriceSum[l]) + "元" + "t" + (state)); } //这里需要根据用户是否结账,在库存中,减去用户的吃掉的数量 System.out.print("请选择要签收的订单:"); int sfr = scan.nextInt(); //判断输入的序号是否超过订单数量 while (sfr < 0 || sfr > uname.length) { System.out.print("超出范围,请重新输入:"); sfr = scan.nextInt(); } //判断订单状态是否已发货,已发货显示订单签收成功,无需重复签收 if (chooseFa[sfr - 1] == 0) { chooseFa[sfr - 1] = 1; System.out.println("订单签收成功"); } else if (chooseFa[sfr - 1] == 1) { System.out.println("订单已签收,请勿重新签收"); } else { System.out.println("系统异常,无法签收"); } //给用户一个输出,已结账,输出一句话就可以 //需要给用户提供返回上一级 break; case 4: //删除订单 //你需要复制查看餐袋的代码 System.out.println("这是所有的订单,请您查看并进行删除 *** 作"); System.out.println("序号" + "t" + "订餐人" + "t" + "餐品名称" + "t" + "点菜数量" + "" + "t" + "菜品总价" + "" + "t" + "订单状态"); //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量 for (int m = 0; m < uname.length; m++) { //判断数组中的下标是否为空,如果为空则不显示 if (uname[m] == null) { break; } //首先将预定状态改为文字,此处采用三目运算符 System.out.println((m + 1) + "t" + (uname[m]) + "t" + (chooseDish[m]) + "t" + (chooseNumber[m]) + "份" + "t" + (choosePriceSum[m]) + "元" + "t" + (chooseFa[m] == 0 ? "已预定" : "已发货")); } //这里需要根据用户是否结账,在库存中,减去用户的吃掉的数量 System.out.print("请选择要删除的订单:"); int DeDish = scan.nextInt(); while (DeDish > uname.length || DeDish < 1) { System.out.print("超出范围,请重新输入:"); DeDish = scan.nextInt(); } //此处出现错误,需要认真听讲 //错误已经解决,在case1中对chooseFa采用的是减去而不是赋值,所以会出现出现-1的情况跳过执行(chooseFa[(DeDish - 1)] == 1) if (chooseFa[(DeDish - 1)] == 1) { for (int n = DeDish - 1; n < uname.length - 1; n++) { uname[n] = uname[n + 1]; chooseDish[n] = chooseDish[n + 1]; chooseNumber[n] = chooseNumber[n + 1]; choosePriceSum[n] = choosePriceSum[n + 1]; chooseFa[n] = chooseFa[n + 1]; } uname[uname.length - 1] = null; chooseDish[uname.length - 1] = null; chooseNumber[chooseNumber.length - 1] = 0; choosePriceSum[choosePriceSum.length - 1] = 0; chooseFa[chooseFa.length - 1] = 0; System.out.println("订单删除成功"); } else if (chooseFa[DeDish - 1] == 0) { System.out.println("您未确认订单,请确认订单之后进行删除操作"); } else { System.out.println("系统异常"); } //需要更新用户的餐单列表和餐单数量列表 //需要给用户提供返回上一级 break; case 5: //我要点赞 //展示商品列表 System.out.println("这是未签收的订单,请您查看并签收"); System.out.println("序号" + "t" + "订餐人" + "t" + "餐品名称" + "t" + "点菜数量" + "" + "t" + "菜品总价" + "" + "t" + "订单状态" + "t" + "点赞数量"); //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量 for (int m = 0; m < uname.length; m++) { //判断数组中的下标是否为空,如果为空则不显示 if (uname[m] == null) { break; } //首先将预定状态改为文字,此处采用三目运算符 String state = chooseFa[m] == 0 ? "已预订" : "已发货"; System.out.println((m + 1) + "t" + (uname[m]) + "t" + (chooseDish[m]) + "t" + (chooseNumber[m]) + "份" + "t" + (choosePriceSum[m]) + "元" + "t" + (state) + "t" + like[m]); } //根据用户输入的餐品id,记录对应的点赞 System.out.print("请选择您要点赞的菜品序号:"); int chose2 = scan.nextInt(); while (chose2 > uname.length || chose2 < 0) { System.out.print("超出范围,请重新输入:"); chose2 = scan.nextInt(); } like[chose2 - 1]++; System.out.println("给" + chooseDish[chose2 - 1] + "点赞成功"); //用户可能对同一个商品点赞很多次,需要多次记录 //需要给用户提供返回上一级 break; case 6: //退出系统 System.out.println("欢迎下次使用!"); flag = true; break; default: System.out.println("输如错误,请重新选择。"); break; } if (!flag) { System.out.print("请输入0返回主菜单:"); num = scan.nextInt(); } else { break; } } while (num == 0); System.out.println("谢谢惠顾,欢迎下次光临"); } }2.编写思路
代码如下(示例):
主界面: 利用了Switch语句进行选择,输入(1-6)内数字进行相应的 *** 作,如果输入超出范围,则提示输入错误,按0跳转回主界面重新进入主界面。 外层套用了do while循环进行选择,定义一个变量num,当用户输入0的时候再次进入Switch循环 同时定义一个退出标志位Boolean型的flag,如果Boolean=true时,退出do while循环,同时退出程序,当退出程序的时候提示谢谢惠顾。 当进入Switch一个功能结束之后,会跳出循环,这时候我们用!flag这个来进行 *** 作,!flag=false,这时,重新进入主界面,进入Switch循环进行选择,当选择退出系统时彻底退出do while循环。 case1我要订餐: 用户在主界面输入1之后成功跳转到我要订餐页面,同时出现欢迎词 首先用Boolean add=false对购物车进行判断,如果购物车已满则返回false,同时提示用户进行删除 *** 作,如果购物车没有满的情况下根据用户数量数组进入for循环进行遍历。 在for循环中要做的 *** 作,一个是给用户姓名进行赋值 之后根据菜品的名字数组建立一个for循环,遍历菜品的详情 跳出for循环,提醒你输入想要买的商品的序号,同时利用while语句对你输入的序号进行判断,如果超出菜品数组的长度或者小于0则报错,提醒你重新进行输入 提醒你输入想要买的商品的份数,同时利用while语句对你输入的份数进行判断,如果超出库存量则报错,提醒你重新进行输入 以上成功之后则进入余量的处理,用余量减去用户选择的份数得到当前余量 同时利用for循环,列出本次 *** 作所购买的商品的订单详情 建立用户选择的商品的数组,包括价格、数量、总价、商品名称、商品的发货情况等数组 将之前 *** 作的分数以及商品名称等内容赋值给商品的详情的数组 *** 作结束,跳转到判断!flag,提示输入0返回主界面,当while num=0的时候,符合条件,重新进入do while循环进入主界面。 case2查看餐袋: 用户在主界面输入2进入查看餐袋页面,同时出现查看订单的标题 根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情 同时判断数组内容是否为空,如果为空的的话返回break,不显示 利用三目运算符,将0或者1改成已预订或者已完成 显示已下单的商品的详细的信息 case3签收订单: 用户在输入3进入签收订单页面,同时出现签收订单页面 根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情 同时判断数组内容是否为空,如果为空的的话返回break,不显示 利用三目运算符,将0或者1改成已预订或者已完成 显示已下单的商品的详细的信息 输入要签收的订单的编号,根据输入的编号寻找订单 首先要用while语句判定输入序号是否正确,不正确重新输入 其次利用if语句判断输入的需要的状态,如果=0的话将发货状态改为已发货,同时输出已签收成功 如果=1的话,显示订单已签收请勿重新签收,如果为其它则返回系统异常,退出循环 case4删除订单: 根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情 同时判断数组内容是否为空,如果为空的的话返回break,不显示 在输出商品信息的商品状态利用三目运算符,将0或者1改成已预订或者已完成 定义一个变量,用来接收输入的选择的删除的序号 显示已下单的商品的详细的信息,并提示请选择要删除的订单 先判断发货状态,如果是已预定的则不能删除,如果是已发货的则可以删除改订单 同时在if循环中判断如果是已发货,则进入for循环 for循环是根据选择的菜品的名称来的,定位到选择的序号位置(变量-1),从这个位置开始遍历 利用数组中序号下一个前移进行替换,遍历后只剩最后一个位置没有内容,跳出循环 给最后一个位置赋值null或者0; 跳出循环,输入0进入主界面 case5我要点赞: 根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情 同时判断数组内容是否为空,如果为空的的话返回break,不显示 在输出商品信息的商品状态利用三目运算符,将0或者1改成已预订或者已完成 定义一个变量,用来接收输入的选择的删除的序号 显示已下单的商品的详细的信息,提示输入你要点赞的菜品的序号 定义一个变量接收序号 利用while语句判断输入序号的范围是否超出范围,如果超出则重新输入 根据输入的序号变量定位选择的菜品位置(变量-1),同时该数组位置的点赞数量执行自增运算。 输出给该位置菜品点赞成功 case6退出系统: 进入后首先提示欢迎下次使用,然后执行Boolean flag=true *** 作,退出do while循环,并输出谢谢惠顾
总结
提示:这里对文章进行总结:
例如:以上就是我根据循环的基础写的吃货联盟系统,以及个人的编写思路,如有更好的方法请指教
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)