Java基础练习——吃货联盟

提示:使用选择、循环以及数组等基础进行编写


文章目录

  • 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循环,并输出谢谢惠顾

总结

提示:这里对文章进行总结:
例如:以上就是我根据循环的基础写的吃货联盟系统,以及个人的编写思路,如有更好的方法请指教

Java基础练习——吃货联盟相关推荐

  1. Java基础之吃货联盟订餐系统Version1.0

    注意:此项目为刚学完Java基础至数组的入门程序. 吃货联盟订餐系统Version1.0是在数组的基础上完成的一个小项目,由于只是运用数组实现了一些简单的功能, 所以我管它叫Version1.0,即1 ...

  2. java案例之吃货联盟订餐系统

    java案例之吃货联盟订餐系统 今天是本博主第一次发博客记录的学习之旅,如有错误欢迎大家指出在下的失误呀, 废话不多说上案例!! 吃货联盟具体的功能如图6个功能所示 整体的开发思路如下 订单类主要有六 ...

  3. 刚刚开始学习java,自己慢慢写了最基础的吃货联盟

    package com.fengqing.test01;//包文件名称import java.util.Scanner;//调用scanner工具包public class Test {//类文件名称 ...

  4. 大数据学习——Java项目实战-吃货联盟订餐系统

    吃货联盟订餐系统 项目需求 项目环境准备 项目覆盖技能点 阶段划分 难点分析 使用数组对象保存订单信息 访问订单信息 删除订单信息 计算订单的总金额 项目实现思路 数据初始化 实现菜单切换 实现查看餐 ...

  5. 吃货联盟java代码

    import java.util.Scanner;   //吃货联盟 public class MeiTuan {       public static void main(String[] arg ...

  6. 吃货联盟订餐系的退出系统功能实现

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  7. 吃货联盟订餐系统(查看餐袋功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  8. 吃货联盟订餐系统全功能(点赞功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  9. Day8吃货联盟订餐系统

    import java.util.Scanner; /** 吃货联盟订餐系统 / public class ChiHuoLianMeng { public static void main(Strin ...

最新文章

  1. css表示第一个元素和最后一个元素,CSS第一个和最后一个子元素
  2. [***.launch] is neither a launch file in package [***] nor is [***] a launch
  3. typedef VS #define —— C语言中的 关键字 与 C指令
  4. 离散制造业的数据采集之路
  5. 分布式事务中的2PC
  6. Head First设计模式读书笔记——策略模式
  7. [css] css3的:nth-child和:nth-of-type的区别是什么?
  8. 什么标签用于在表单中构建复选框_UI/UX笔记之如何设计好表单
  9. L1-076 降价提醒机器人 (10 分)-PAT 团体程序设计天梯赛 GPLT
  10. 管理感悟:你说负责,关键在于怎样负责?
  11. 计算机网络数据通信基础题,数据通信基础练习题(含答案)
  12. 计算机专业英语词汇pdf,计算机专业英语词汇(完美排版,大容量打印版).pdf.pdf
  13. 李开复:在谷歌的最后一天
  14. 英尺 厘米_在35,000英尺处重建747
  15. 【刘文彬】【源码解读】EOS测试插件:txn_test_gen_plugin.cpp
  16. speedoffice(Word)如何给文字添加下划线
  17. Appium 自动化用例设计(TESTNG 篇)
  18. 英语语言能力测试软件,英语语言能力测试标准
  19. MATLAB中的mvnrnd函数介绍
  20. 临期经济诞生了好特卖,临期食品正在“入侵”消费时代

热门文章

  1. js内置对象中的String
  2. C++中引用变量详解
  3. Java小白入门200例79之Java类的封装
  4. koa框架数据导出为excel格式
  5. 如何测试视频会议的延迟
  6. 服务器硬盘掉线解决过程分析
  7. 在Amazon SageMaker上快速、灵活构建TensorFlow模型的在线推理服务
  8. 建模simulink - xpc调试手段
  9. 诺奖以上,真相未满:追捕黑洞二百年
  10. win8连接wifi成功但受限制_连接wifi成功但受限制如何解决 连接wifi成功但受限制解决【步骤】...