首页 > 编程语言 >java基础-总结案例

java基础-总结案例

时间:2023-03-13 19:33:39浏览次数:49  
标签:总结 java 订单 System 案例 订餐 println 输入 out

利用java基础,实现如图所示的功能

案例涉及要点:

      # 程序基本概念 
        变量
        数据类型
      # 流程控制
        顺序
        选择
        循环
        跳转语句
      # 数组

1、实现步骤分布:

      第一阶段:分析数据主体(重难点)

      第二阶段:分析并完成整体框架(重难点)

      第三阶段:分析并完成退出功能

      第四阶段:分析并完成订餐功能

      第五阶段:分析并完成查看餐袋功能

      第六阶段:分析并完成签收订单功能

      第七阶段:分析并完成删除功能(重难点)

      第八阶段:分析总完成我要点赞功能

2、系统概述

    "只要动动手指,就能送餐上门",网上定餐深受现代人青睐,现开发一个网上订餐系统,功能如下
     # 我要订餐
     # 查看餐袋
     # 签收订单
     # 删除订单
     # 我要点赞
     # 退出系统

3、实现菜单切换

     # 需求说明
       编写程序入口,实现菜单显示和切换

     # 思路分析
       使用循环控制菜单显示,
       0退出循环
       使用switch语句实现菜单切换

     # 难点提示
       使用标识变量来控制循环退出

菜单切换代码展示(省略主函数):

	// 定义是否返回主菜单变量
	int returnMenu = -1;
	
	// 定义是否退出订餐系统变量
	boolean exitFlag = false;
            Scanner input = new Scanner(System.in);
      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.print("请选择菜单序号:");
          int chooseNum = input.nextInt();
          
          switch(chooseNum){
            case 1:
                System.out.println("++++++ 我要订餐 ++++++\n");
              break;
            case 2:
                System.out.println("++++++ 查看餐袋 ++++++\n");
              break;
            case 3:
                System.out.println("++++++ 签收订单 ++++++\n");
              break;
            case 4:
                System.out.println("++++++ 删除订单 ++++++\n");
              break;
            case 5:
                System.out.println("++++++ 我要点赞 ++++++\n");
              break;
            case 6:
                System.out.println("++++++ 退出系统 ++++++\n");
              break;
            default:
                System.out.println("输入序号非法\n");
                exitFlag = true;
              break;
          }
          // 判断是否需要退出系统,当选择了退出系统或者输入序号非法,会自动退出
          if (exitFlag) {
              break;
          }			
          // 提示输入0返回主菜单
          System.out.print("输入0,返回主菜单:");
          returnMenu = input.nextInt();
          }while (returnMenu == 0);
          
          System.out.println("谢谢使用,欢迎下次光临!");
          input.close();

实现我要订餐代码展示(放入case 1中):

				System.out.println("++++++ 我要订餐 ++++++\n");
				 // 循环遍历订餐订单数组,找可以存放订餐订单的位置,就是第一个为null的位置
				for (int i = 0; i < orderNameStrings.length; i++) {
					//如果当前下标对应的数据为null,说明下标位置所在的位置可以使用
					if(null == orderNameStrings[i]){
						isFullFalg = false;
						//提示输入订餐人姓名
						System.out.println("输入订餐人姓名");
						String orderName = input.next();
						
						//展示订单菜品列表数据
						System.out.println("序号\t菜品\t单价\t点赞数");
						for (int j = 0; j < foodNameStrings.length; j++) {
							System.out.println(j+1+"\t"
									+foodNameStrings[j]+"\t"
									+foodPrices[j]+"\t"
									+foodZan[j]+"\t");
							
							
						}
						//提示输入订单菜品序号
						System.out.println("输入订单菜品序号");
						int foodIndex = input.nextInt();
						
						//确保输入菜品序号有效
						while (foodIndex < 1 || foodIndex>foodNameStrings.length) {
							System.out.println("输入有误,重新输入");
							foodIndex = input.nextInt();
							
						}
						//提示输入订单菜品份数
						System.out.println("输入订单菜品份数:");
						int foodCount = input.nextInt();
						
						//提示输入订单配送时间
						System.out.println("输入订单配送时间(10-20点整点送餐):");
						int orderTime = input.nextInt();
						
						//确保输入配送时间有效
						while (orderTime < 10 || orderTime>20) {
							System.out.println("输入有误,重新输入");
							orderTime = input.nextInt();
						}
						//提示输入订单配送地址
						System.out.println("输入订单配送地址:");
						String orderAddress = input.next();
						
						
						//计算订餐总价:菜品的单价*订餐份数+配送费(满六十免配送费,不满六十,加五元配送费)
						//计算订餐总价
						double orderPrice = foodPrices[foodIndex - 1] * foodCount;
						
						//计算订餐配送费
						double songPrice = orderPrice>=60?0.0:5.0;
						
						// 拼接订餐详情
						String ordeInFoString = foodNameStrings[foodIndex - 1];
						
						//保存订餐完整信息
						orderNameStrings[i] = orderName;
						orderDetailStrings[i] = orderDetailStrings[foodIndex]+foodCount+"份";
						orderTimes[i] = orderTime;
						orderAddrs[i] = orderAddress;
						orderPrices[i] = orderPrice+songPrice;
						
						orderStates[i] = 0;
						
						//提示订餐成功
						System.out.println("------------------");
						System.out.println("订餐成功!!!");
						System.out.println("您顶的是:"+ordeInFoString);
						System.out.println("送餐时间:"+orderTime+"点");
						System.out.println("餐费:"+orderPrice+"元,送餐费:"+songPrice+",总计"+orderPrices[i]);
						System.out.println("");
						System.out.println("------------------");
						

						//订餐成功后,立刻结束,否则,当前存放订餐订单位置及后续位置都是空,会导致继续订单,直到订满订餐订单数组
						break;
					}
					
				}
				// 如果循环结束,餐袋是否已满,
				if(isFullFalg){
					System.out.println("餐袋已满,请联系管理员");
				}

实现查看餐袋:

                                    // 先输出订餐订单标题头
				System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t总金额\t订单状态");
				//循环遍历订餐订单数据,查询订餐订单数据
				//由于订餐订单被拆分成6个长度统一的数组,只需要选择使用其中一个        数据作为循环条件即可
				for (int i = 0; i < orderNameStrings.length; i++) {
					//订单都是按照下标书序存储的,只要订单人姓名为null,说明后续都是空的,没有订餐信息,结束循环
					if (null == orderNameStrings[i]) {
						//结束循环
						break;
					}
					//输出餐袋中已存的订餐订单数据
					System.out.println(i+1+"\t"
							+ orderNameStrings[i]+"\t"
							+ orderDetailStrings[i]+"\t"
							+ orderTimes[i]+"\t"
							+ orderAddrs[i]+"\t"
							+ orderPrices[i]+"\t"
							+ (orderStates[i] == 0?"已预订":"已完成"));
				}

实现签收订单:

				//定义已有订单数量
				int signOrderCount = 0;
				
				//展示当前餐袋中,所有的订餐订单的概要信息
				System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t总金额\t订单状态");
				for (int i = 0; i < orderNameStrings.length; i++) {
					if(null == orderNameStrings[i]){
						break;
					}
					signOrderCount++;
					System.out.println(i+1+"\t"
							+orderNameStrings[i]+"\t"
							+orderDetailStrings[i]+"\t"
							+(orderStates[i]==0?"已预订":"已完成"));
				}
				if (signOrderCount==0) {
					System.out.println("暂无数据,请反回");
				}
				//提示输入签收订单序号
				System.out.println("请输入签收订单序号:");
				int signOrderIndex = input.nextInt();
				
				while(signOrderIndex<1||signOrderCount<signOrderIndex){
					System.out.println("输入错误重新输入");
					signOrderIndex = input.nextInt();
				}
				//执行签收订单,只是已预订的订单才可以执行签收,已完成订单,不能重复签收
				if(orderStates[signOrderIndex - 1]==0){
					orderStates[signOrderIndex - 1] = 1;
					System.out.println("成功签收");
				}

实现删除订单:

				// 定义已有订餐订单数量
				int delOrderCount = 0;
				
				// 删除订单,展示当前餐袋中,所有的订餐订单的概要信息
				System.out.println("序号\t订餐人\t餐品信息\t\t订单状态");
				for (int i = 0; i < orderNames.length; i++) {
					// 如果遍历到空的位置,直接结束订单展示
					if (null == orderNames[i]) {
						break;
					}
					// 输出餐袋中已存的订餐订单数据
					System.out.println(i + 1 + "\t" 
							+ orderNames[i] + "\t"
							+ orderDetails[i] + "\t"
							+ (orderStates[i] == 0 ? "已预订" : "已完成"));
					
					// 已有订餐订单数量+1
					delOrderCount++;
				}
				
				// 补充:当餐袋订单数据为空,无法执行删除操作,需要直接结束
				if (delOrderCount == 0) {
					// 提示暂无订餐订单数据,直接结束删除操作
					System.out.println("\t暂无订餐数据,无需删除!!!\n");
					break;
				}
				
				// 提示输入删除订单序号
				System.out.print("请输入删除订单序号:");
				int delOrderIndex = input.nextInt();
				
				// 如果输入的删除订单序号,不存在,重新输入
				while(delOrderIndex < 1 || delOrderIndex > delOrderCount){
					System.out.print("输入的删除订单序号,不存在,请重新输入:");
					delOrderIndex = input.nextInt();
				}
				
				// 执行删除订单,只有已完成订单才可以删除,如果订单状态是已预订,不能删除
				if (orderStates[delOrderIndex - 1] == 1) {
					// 订单是已完成,可以执行删除操作,直接将后面的订单数据依次覆盖前面的订单数据
					for (int i = delOrderIndex - 1; i < delOrderCount - 1; i++) {
						orderNames[i] = orderNames[i + 1];
						orderDetails[i] = orderDetails[i + 1];
						orderTimes[i] = orderTimes[i + 1];
						orderAddrs[i] = orderAddrs[i + 1];
						orderPrices[i] = orderPrices[i + 1];
						orderStates[i] = orderStates[i + 1];
					}
					
					// 将最后一个重复的已存在的订单置空
					orderNames[delOrderCount - 1] = null;
					orderDetails[delOrderCount - 1] = null;
					orderTimes[delOrderCount - 1] = 0;
					orderAddrs[delOrderCount - 1] = null;
					orderPrices[delOrderCount - 1] = 0.0;
					orderStates[delOrderCount - 1] = 0;
					
					// 提示订单删除成功
					System.out.println("序号为:" + delOrderIndex + " 的订餐订单,删除成功!!!\n");
					
				} else {
					System.out.println("序号为:" + delOrderIndex + " 的订餐订单,已预订,不允许删除,请先签收订单!!!\n");
				}

实现我要点赞:

                                    // 展示点赞菜品列表数据
				System.out.println("序号\t菜名\t单价\t点赞数");
				for (int j = 0; j < foodNames.length; j++) {
					System.out.println(j + 1 + "\t"
							+ foodNames[j] + "\t"
							+ foodPrices[j] + "\t" 
							+ foodZans[j]);
				}
				
				// 提示输入点赞菜品序号
				System.out.print("请输入点赞菜品序号:");
				int zanFoodIndex = input.nextInt();
				
				// 确保输入的菜品序号有效,如果输入序号非法,要重新输入,防止下标越界
				while(zanFoodIndex < 1 || zanFoodIndex > foodNames.length){
					System.out.print("输入菜品序号非法,请重新输入:");
					zanFoodIndex = input.nextInt();
				}
				
				// 执行点赞,直接根据选择的菜品序号,给保存菜品点赞数数组中对应值+1
				foodZans[zanFoodIndex - 1]++;
				System.out.println("给" + foodNames[zanFoodIndex - 1] + "菜品,点赞成功!!!\n");

最终完整代码展示:

    import java.util.Scanner;

    public class FoodieMgr {

    public static void main(String[] args) {
	// 吃货联盟订餐系统基本实现
	
	// 系统输入对象
	Scanner input = new Scanner(System.in);
	
	// 定义是否返回主菜单变量
	int returnMenu = -1;
	
	// 定义是否退出订餐系统变量
	boolean exitFlag = false;
	
	// 初始化吃货订餐系统的菜品数据
	// 由于菜品数据类型不统一,但是数组存储的相同数据类型的一组数据,可以将菜品数据拆分成三个数组,借助数组相同下标,是同一个菜品数据
	// 菜品名称数组
	String[] foodNames = {"红烧鳜鱼", "酸汤肥牛", "宫保鸡丁"};
	
	// 菜品价格数组
	double[] foodPrices = {69.0, 59.0, 49.0};
	
	// 菜品点赞数数组
	int[] foodZans = {1, 1, 1};
	
	// 初始化吃货订餐系统的订餐订单数据
	// 由于订餐订单数据类型不统一,存储方式和菜品一致,拆分为多个数组,借助数组相同下标,是同一个订餐订单数据
	// 订餐人
	String[] orderNames = new String[5];

	// 订餐详情
	String[] orderDetails = new String[5];

	// 配送时间
	int[] orderTimes = new int[5];

	// 配送地址
	String[] orderAddrs = new String[5];

	// 订单状态
	int[] orderStates = new int[5];

	// 订单总价
	double[] orderPrices = new double[5];
	
	// 初始化订单订单数据,方便查看餐袋
	orderNames[0] = "胡八一";
	orderDetails[0] = "红烧鳜鱼 1份";
	orderTimes[0] = 10;
	orderAddrs[0] = "南海归墟";
	orderStates[0] = 1;
	orderPrices[0] = 69.0;

	orderNames[1] = "王胖子";
	orderDetails[1] = "酸汤肥牛 1份";
	orderTimes[1] = 11;
	orderAddrs[1] = "南海归墟";
	orderStates[1] = 0;
	orderPrices[1] = 64.0;

	orderNames[2] = "雪莉杨";
	orderDetails[2] = "宫保鸡丁 2份";
	orderTimes[2] = 12;
	orderAddrs[2] = "南海归墟";
	orderStates[2] = 1;
	orderPrices[2] = 98.0;
	
	// 循环展示吃货订餐系统主菜单,可以选择菜单,并循环切换
	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.print("请选择菜单序号:");
		int chooseNum = input.nextInt();
		
		// 根据用户选择的菜单序号,执行对应的菜单功能
		switch (chooseNum) {
			case 1:
				System.out.println("++++++ 我要订餐 ++++++\n");
				// 定义餐袋中的订单是否已经订满标识变量,如果餐袋满,不允许继续订餐的
				// 默认餐袋中订单已满,如果订餐可以找到订餐订单位置,将标识变量改为false,没满
				boolean isFullFlag = true;
				
				// 循环遍历订单订单数组,找可以存放订单订单的位置,就是第一个为null的位置
				for (int i = 0; i < orderNames.length; i++) {
					// 如果当前下标对应的订餐人姓名为null,代表此下标位置所有的数组都没有存放订餐订单数据,可以使用
					if (null == orderNames[i]) {
						
						// 餐袋没有订满,可以继续订餐,修改标识为false
						isFullFlag = false;
						
						// 提示输入订餐人姓名
						System.out.print("请输入订餐人姓名:");
						String orderName = input.next();
						
						// 展示订餐菜品列表数据
						System.out.println("序号\t菜名\t单价\t点赞数");
						for (int j = 0; j < foodNames.length; j++) {
							System.out.println(j + 1 + "\t"
									+ foodNames[j] + "\t"
									+ foodPrices[j] + "\t"+ foodZans[j]);
						}
						
						// 提示输入订餐菜品序号
						System.out.print("请输入订餐菜品序号:");
						int foodIndex = input.nextInt();
						
						// 确保输入的菜品序号有效,如果输入序号非法,要重新输入,防止下标越界
						while(foodIndex < 1 || foodIndex > foodNames.length){
							System.out.print("输入菜品序号非法,请重新输入:");
							foodIndex = input.nextInt();
						}
						
						// 提示输入订餐菜品份数
						System.out.print("请输入订餐菜品份数:");
						int foodCount = input.nextInt();
						
						// 提示输入订餐配送时间
						System.out.print("请输入送餐时间(系统送餐时间:10-20点整点送餐):");
						int orderTime = input.nextInt();

						// 确保输入的送餐时间有效,如果输入时间非法,要重新输入
						while(orderTime < 10 || orderTime > 20){
							System.out.print("超出系统送餐时间范围,请重新输入:");
							orderTime = input.nextInt();
						}
						
						// 提示输入送餐地址
						System.out.print("请输入订餐送餐地址:");
						String orderAddr = input.next();
						
						// 计算订餐总价:订餐菜品总价(选择菜品的单价 * 订餐份数) + 配送费(满60,免配送费,如果不足60,加5元配送费)
						// 计算订餐菜品总价
						double foodMoney = foodPrices[foodIndex - 1] * foodCount;
						
						// 计算订餐配送费
						double songMoney = foodMoney >= 60 ? 0.0 : 5.0;
						
						// 拼接订餐详情
						String orderDetail = foodNames[foodIndex - 1] + " " + foodCount + "份";
						
						// 保存订餐订单完整信息
						orderNames[i] = orderName;
						orderDetails[i] = orderDetail;
						orderTimes[i] = orderTime;
						orderAddrs[i] = orderAddr;
						orderPrices[i] = foodMoney + songMoney;
						orderStates[i] = 0; // 可以不设置,默认就是0
						
						// 提示订餐成功
						System.out.println("-----------------------------------");
						System.out.println("订餐成功!!!");
						System.out.println("您订的是:" + orderDetail);
						System.out.println("送餐时间:" + orderTime + "点");
						System.out.println("餐费:" + foodMoney + "元,送餐费:" + songMoney + ",总计:" + orderPrices[i] + "元。");
						System.out.println("-----------------------------------");
						
						// 订餐成功后,立刻结束循环,否则,当前存放订餐订单位置及后续位置都是空,会导致继续订餐,直到订满订餐订单数组
						break;
					}
					
				}
				
				// 如果循环结束,餐袋订单是否已满标识变量值仍然为true,代表订餐失败,餐袋已满,无法继续
				if (isFullFlag) {
					System.out.println("系统餐袋已满,无法继续订餐,请联系系统管理员!!!\n");
				}
				
				break;
			case 2:
				System.out.println("++++++ 查看餐袋 ++++++\n");
				// 输出订单订单标题头
				System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t总金额\t订单状态");
				// 循环遍历订单订单数组,查询已订餐订单数据
				// 由于订单订单被拆分为6个长度统一的数组,只需要选择使用其中一个数组作为循环条件即可
				for (int i = 0; i < orderNames.length; i++) {
					// 订餐订单都是按照下标顺序存储的,只要订单人姓名为null,说明后续都是空的(没有订餐订单信息),结束循环遍历
					if (null == orderNames[i]) {
						// 结束循环
						break;
					}
					// 输出餐袋中已存的订餐订单数据
					System.out.println(i + 1 + "\t" 
							+ orderNames[i] + "\t"
							+ orderDetails[i] + "\t"
							+ orderTimes[i] + "\t"
							+ orderAddrs[i] + "\t"
							+ orderPrices[i] + "元\t"
							+ (orderStates[i] == 0 ? "已预订" : "已完成"));
				}
				break;
			case 3:
				System.out.println("++++++ 签收订单 ++++++\n");
				
				// 定义已有订餐订单数量
				int signOrderCount = 0;
				
				// 签收订单,展示当前餐袋中,所有的订餐订单的概要信息
				System.out.println("序号\t订餐人\t餐品信息\t\t订单状态");
				for (int i = 0; i < orderNames.length; i++) {
					// 如果遍历到空的位置,直接结束订单展示
					if (null == orderNames[i]) {
						break;
					}
					// 输出餐袋中已存的订餐订单数据
					System.out.println(i + 1 + "\t" 
							+ orderNames[i] + "\t"
							+ orderDetails[i] + "\t"
							+ (orderStates[i] == 0 ? "已预订" : "已完成"));
					
					// 已有订餐订单数量+1
					signOrderCount++;
				}
				
				// 补充:当餐袋订单数据为空,无法执行签收操作,需要直接结束
				if (signOrderCount == 0) {
					// 提示暂无订餐订单数据,直接结束签收操作
					System.out.println("\t暂无订餐数据,无需签收!!!\n");
					break;
				}
				
				// 提示输入签收订单序号
				System.out.print("请输入签收订单序号:");
				int signOrderIndex = input.nextInt();
				
				// 如果输入的签收订单序号,不存在,重新输入
				while(signOrderIndex < 1 || signOrderIndex > signOrderCount){
					System.out.print("输入的签收订单序号,不存在,请重新输入:");
					signOrderIndex = input.nextInt();
				}
				
				// 执行签收订单,只有是已预订的订单才可以执行签收,已完成订单,不能重复签收
				if (orderStates[signOrderIndex - 1] == 0) {
					// 将已预订的订单状态改为:已完成状态
					orderStates[signOrderIndex - 1] = 1;
					// 提示签收成功
					System.out.println("序号为:" + signOrderIndex + " 的订餐订单,签收成功!!!\n");
				} else {
					System.out.println("序号为:" + signOrderIndex + " 的订餐订单,已完成,不能重复签收!!!\n");
				}
				
				break;
			case 4:
				System.out.println("++++++ 删除订单 ++++++\n");
				
				// 定义已有订餐订单数量
				int delOrderCount = 0;
				
				// 删除订单,展示当前餐袋中,所有的订餐订单的概要信息
				System.out.println("序号\t订餐人\t餐品信息\t\t订单状态");
				for (int i = 0; i < orderNames.length; i++) {
					// 如果遍历到空的位置,直接结束订单展示
					if (null == orderNames[i]) {
						break;
					}
					// 输出餐袋中已存的订餐订单数据
					System.out.println(i + 1 + "\t" 
							+ orderNames[i] + "\t"
							+ orderDetails[i] + "\t"
							+ (orderStates[i] == 0 ? "已预订" : "已完成"));
					
					// 已有订餐订单数量+1
					delOrderCount++;
				}
				
				// 补充:当餐袋订单数据为空,无法执行删除操作,需要直接结束
				if (delOrderCount == 0) {
					// 提示暂无订餐订单数据,直接结束删除操作
					System.out.println("\t暂无订餐数据,无需删除!!!\n");
					break;
				}
				
				// 提示输入删除订单序号
				System.out.print("请输入删除订单序号:");
				int delOrderIndex = input.nextInt();
				
				// 如果输入的删除订单序号,不存在,重新输入
				while(delOrderIndex < 1 || delOrderIndex > delOrderCount){
					System.out.print("输入的删除订单序号,不存在,请重新输入:");
					delOrderIndex = input.nextInt();
				}
				
				// 执行删除订单,只有已完成订单才可以删除,如果订单状态是已预订,不能删除
				if (orderStates[delOrderIndex - 1] == 1) {
					// 订单是已完成,可以执行删除操作,直接将后面的订单数据依次覆盖前面的订单数据
					for (int i = delOrderIndex - 1; i < delOrderCount - 1; i++) {
						orderNames[i] = orderNames[i + 1];
						orderDetails[i] = orderDetails[i + 1];
						orderTimes[i] = orderTimes[i + 1];
						orderAddrs[i] = orderAddrs[i + 1];
						orderPrices[i] = orderPrices[i + 1];
						orderStates[i] = orderStates[i + 1];
					}
					
					// 将最后一个重复的已存在的订单置空
					orderNames[delOrderCount - 1] = null;
					orderDetails[delOrderCount - 1] = null;
					orderTimes[delOrderCount - 1] = 0;
					orderAddrs[delOrderCount - 1] = null;
					orderPrices[delOrderCount - 1] = 0.0;
					orderStates[delOrderCount - 1] = 0;
					
					// 提示订单删除成功
					System.out.println("序号为:" + delOrderIndex + " 的订餐订单,删除成功!!!\n");
					
				} else {
					System.out.println("序号为:" + delOrderIndex + " 的订餐订单,已预订,不允许删除,请先签收订单!!!\n");
				}
				break;
			case 5:
				System.out.println("++++++ 我要点赞 ++++++\n");
				// 展示点赞菜品列表数据
				System.out.println("序号\t菜名\t单价\t点赞数");
				for (int j = 0; j < foodNames.length; j++) {
					System.out.println(j + 1 + "\t"
							+ foodNames[j] + "\t"
							+ foodPrices[j] + "\t" 
							+ foodZans[j]);
				}
				
				// 提示输入点赞菜品序号
				System.out.print("请输入点赞菜品序号:");
				int zanFoodIndex = input.nextInt();
				
				// 确保输入的菜品序号有效,如果输入序号非法,要重新输入,防止下标越界
				while(zanFoodIndex < 1 || zanFoodIndex > foodNames.length){
					System.out.print("输入菜品序号非法,请重新输入:");
					zanFoodIndex = input.nextInt();
				}
				
				// 执行点赞,直接根据选择的菜品序号,给保存菜品点赞数数组中对应值+1
				foodZans[zanFoodIndex - 1]++;
				System.out.println("给" + foodNames[zanFoodIndex - 1] + "菜品,点赞成功!!!\n");
				break;
			case 6:
				System.out.println("++++++ 退出系统 ++++++\n");
				exitFlag = true;
				break;

			default:
				System.out.println("输入序号非法\n");
				exitFlag = true;
				break;
		}
		
		// 判断是否需要退出系统,当选择了退出系统或者输入序号非法,会自动退出
		if (exitFlag) {
			break;
		}
		
		// 提示输入0返回主菜单
		System.out.print("输入0,返回主菜单:");
		returnMenu = input.nextInt();
		
	} while (returnMenu == 0);
	
	System.out.println("谢谢使用,欢迎下次光临!");
	
	input.close();

     }
 }

标签:总结,java,订单,System,案例,订餐,println,输入,out
From: https://www.cnblogs.com/hhy-Boom-Boom-Boom/p/javaBase_08-summary.html

相关文章

  • 使用Java实现BMI指数测试
    前言:使用Java实现BMI指数测试,根据用户提供的身高和体重,调用Scanner方法类,通过类名.的方式进行对象调用,抓取用户数据,再新建一个double函数用来接收用户的数据,使用print函数......
  • 2023/3/13结对总结
    设计思路:1.创建两个表<1>第一个:存储所有车站信息:(1)车站唯一标识:id(2)线路号:number(3)车站名:station(4)车站所在线路标识号:characteristic<2>第二个:所有联通车站节点数......
  • java基础-一维数组
    1、什么是数组:数组是一个变量,存储是相同数据类型的一组数据,声明数组,就是在内存中划分一串连续的空间注意:数组一经定义,大小就确定了,不可以在此基础上再增加......
  • 3月10日课后总结
    3/10课后总结random模块importrandomprint(random.random())#产生一个0-1之间的随机数注意会是小数print(random.uniform(1,5))#产生1-5之间的随机数,会是小......
  • 2023/3/13结对总结
    设计思路:1.创建两个表 <1>第一个:存储所有车站信息: (1)车站唯一标识: (2)线路号:number (3)车站名:station (4)车站所在线路标识号:characte......
  • java基础-排序算法&&二维数组
    1、冒泡排序--升序原理:每次比较相邻两数小的交换到前面每轮结束后最大的数交换到最后口诀:冒泡排序速记口诀(升序)n个数字来排队......
  • JavaScript作用域闭包(你不知道的JavaScript)
    JavaScript闭包,是JS开发工程师必须深入了解的知识。3月份自己曾撰写博客《​​JavaScript闭包​​》,博客中只是简单阐述了闭包的工作过程和列举了几个示例,并没有去刨根问底,......
  • JavaScript词法作用域(你不知道的JavaScript)
    JavaScript并不是传统的块级作用域,而是函数作用域!一、作用域1.JavaScript引擎在代码执行前会对其进行编译,在这个过程中,像vara=2这样的声明会被分解成两个独立的步骤:......
  • JAVA重试机制多种方式深入浅出
    重试机制在分布式系统中,或者调用外部接口中,都是十分重要的。重试机制可以保护系统减少因网络波动、依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制。......
  • 【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现
    简介建造者模式(BuilderPattern),也叫生成器模式,属于创建型模式。它使用多个简单的对象一步一步构建成一个复杂的对象。它允许你使用相同的创建代码生成不同类型和形式的对......