Java基础练习——吃货联盟
提示:使用选择、循环以及数组等基础进行编写
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、使用步骤
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循环,并输出谢谢惠顾
总结
提示:这里对文章进行总结:
例如:以上就是我根据循环的基础写的吃货联盟系统,以及个人的编写思路,如有更好的方法请指教