1.需要模拟的功能
我要订餐
查看餐袋
签收订单
删除订单
我要点赞
退出系统
2.创建需要模拟的数据,使用数组
String[] nameArray = new String[4];//订餐人的姓名
String[] dishMegArray = new String[4];//所选菜品信息
int[] timeArray = new int[4];//送餐时间
String[] addressesArray = new String[4];//送餐地址
int[] statesArray = new int[4];//订单状态0:已预订 1:已完成
double[] sumPriceArray = new double[4];//订单总金额
3.对数据进行初始化(作为对比数据)
//初始化第一个订单
nameArray[0] = "张晴";
dishMegArray[0] = "红烧带鱼 2份";
timeArray[0] = 12;
addressesArray[0] = "天成路207号";
statesArray[0] = 1;
sumPriceArray[0] = 76.0;
//初始化第二个订单
nameArray[1] = "张晴";
dishMegArray[1] = "鱼香肉丝 2份";
timeArray[1] = 18;
addressesArray[1] = "天成路207号";
statesArray[1] = 0;
sumPriceArray[1] = 45.0;
4.创建菜品信息
String[] dishNameArray = {"红烧带鱼","鱼香肉丝","时令蔬菜"};//菜品种类
double[] priceArray = {38.0,20.0,10.0};//菜品单价
int[] praiseArray = new int[3];//菜品点赞数
5.先写大体的框架
System.out.println("欢迎使用吃货联盟订餐系统");
//主菜单
switch (num){
case 1:
//我要订餐
break;
case 2:
//查看餐袋
break;
case 3:
//签收订单
break;
case 4:
//删除订单
break;
case 5:
//我要点餐
break;
case 6:
//退出订单
break;
6.主菜单
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("请选择:");
num = sc.nextInt();//用户输入不同的数字
for (;num >6 || num < 0;){//判断用户输入数字是否合法
System.out.println("输入有误,请重新输入");
num = sc.nextInt();//用户输入不同的数字
7.我要订餐
创建新的元素,将新的元素赋进数组内
System.out.println("********我要订餐********");
boolean isAdd = false;//定义一个布尔变量,初始值为false,用于判断是否符合订餐条件
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
if (nameArray[i] == null){//当nameArray数组为空时才可以订餐
isAdd = true;//判断为true,可以订餐
System.out.println("请输入订餐人姓名:");
String name = sc.next();
//显示菜品信息
System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
//定义一个“i”,使i小于数组dishNameArray的长度,并且自增,用来寻找数组中每一个元素
for (int j = 0;j < dishNameArray.length;j++){
//打印可选择菜品
System.out.println((j + 1) + "\t\t" + dishNameArray[j] + "\t" + priceArray[j] +
"\t" + praiseArray[j]);
}
System.out.println("请输入您要点的菜品编号:");
int serial = sc.nextInt();
for (;serial > 3 || serial < 1;){
System.out.println("输入有误,请重新输入");
serial = sc.nextInt();
}
System.out.println("请输入您需要的分数:");
int additional = sc.nextInt();
for (;additional < 1;){
System.out.println("输入有误,请重新输入");
additional = sc.nextInt();
}
//定义一个变量,接收所点菜品信息
String dishMeg = dishNameArray[serial - 1] + " " + additional + "份";
//定义一个变量,接收总金额
double sumprice = priceArray[serial -1] * additional;
//满50减6
double send = (sumprice >= 50)? 0:6;
System.out.println("请输入送餐时间:(10到20点整送餐)");
int time = sc.nextInt();
for (;time < 10 || time > 20;){
System.out.println("输入有误,请输入10——20之内的整数");
timeArray[i] = sc.nextInt();
}
System.out.println("请输入送餐地址:");
String addresses = sc.next();
System.out.println("订餐成功!");
System.out.println("******************************");
System.out.println("您的姓名:" + name);
System.out.println("您订的是" + dishMeg);
System.out.println("送餐时间" + time);
System.out.println("送餐地址:" + addresses);
System.out.println("餐费:" + sumprice + ",送餐费:" + send + "总计:" + (sumprice + send));
//添加数据
nameArray[i] = name;
dishMegArray[i] = dishMeg;
timeArray[i] = time;
addressesArray[i] = addresses;
sumPriceArray[i] = sumprice + send;
break;
}
}
if (!isAdd){
System.out.println("您的餐袋已满,,无法继续订餐!");
}
8.查看餐袋
查看餐袋就是查看数组内所有元素
System.out.println("********查看餐袋********");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐日期\t送餐地址\t\t\t总金额\t\t订单状态");
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
if (nameArray[i] != null){
//遍历这6个数组
System.out.println((i + 1) + "\t" + nameArray[i] + "\t\t" + dishMegArray[i] + "\t" +
timeArray[i] + "\t\t" + addressesArray[i] + "\t\t" + sumPriceArray[i] + "\t\t" +
statesArray[i]);
}
}
9.签收订单
对数组状态的重新赋值
System.out.println("********签收订单********");
System.out.println("请选择要签收的订单序号:");
//定义一个变量表示序号,从键盘输入
int serialNumber = sc.nextInt();
boolean select = true;//定义一个布尔变量,初始值为true
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
//遍历nameArray和statesArray数组
if (nameArray[i] != null && statesArray[i] == 0 && serialNumber == i + 1){
statesArray[i] = 1;//将数组状态重新赋值,赋值为已签收
System.out.println("订单签收成功");
select = false;//标记此次订单
}else if (nameArray[i] != null && statesArray[i] == 1 && serialNumber == i + 1){
System.out.println("订单已签收完成,不能重复签收!!!");
select = false;//标记此次订单
}
}
if (select){
System.out.println("您的订单不存在!!!");
}
10.删除订单
对数组内特定下标的元素赋值为null,并将后一个元素赋值给前一个元素
System.out.println("********删除订单********");
boolean isfind = false;//定义一个布尔变量,初始值为true
System.out.println("请输入要删除的订单编号:");
int delld = sc.nextInt();
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
if (nameArray[i] != null && statesArray[i] == 1 && delld == i + 1){
isfind = true;//找到符合if内条件的订单
for (int j = delld - 1;j < nameArray.length -1;j++){
//将所有数组的后一位赋值给上一位,删除操作
nameArray[j] = nameArray[j + 1];
dishMegArray[j] = dishMegArray[j + 1];
timeArray[j] = timeArray[j + 1];
addressesArray[j] = addressesArray[j + 1];
statesArray[j] = statesArray[j + 1];
sumPriceArray[j] = sumPriceArray[j + 1];
}
//将最后一位赋值为变量end
int end = nameArray.length - 1;
//将0和null赋值给变量end,删除成功
nameArray[end] = null;
dishMegArray[end] = null;
timeArray[end] = 0;
addressesArray[end] = null;
statesArray[end] = 0;
sumPriceArray[end] = 0;
System.out.println("删除成功");
break;
}else if (nameArray[i] != null && statesArray[i] == 0 && delld == i + 1){
System.out.println("未签收不能删除");
isfind = true;//找到符合else if内条件的订单
break;
}
}
if (!isfind){
System.out.println("未找到订单");
}
11.我要点赞
对数组内特定下标所对应元素的替换
System.out.println("********我要点赞********");
System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
for (int i = 0;i < dishNameArray.length;i++){
//定义一个“i”,使i小于数组dishNameArray的长度,并且自增,用来寻找数组中每一个元素
System.out.println((i + 1) + "\t\t" + dishNameArray[i] + "\t" + priceArray[i] +
"\t" + praiseArray[i]);
}
System.out.println("请输入您要点餐的菜品编号:");
int digital = sc.nextInt();
if (digital < 1 || digital > 4){
System.out.println("您的输入有误,请输入餐袋内已有编号");
}
//使此数组的元素自增,来表示每次点赞数加1
praiseArray[digital - 1]++;
System.out.println("点赞成功");
12.实现每一级菜单都可返回主菜单
在开头实现键盘录入,在每一级菜单中加入对于是否为0的判断,最后使用do-while来撑起整个结构。
Scanner sc = new Scanner(System.in);//用户可从键盘输入
int num = -1;//定义一个数字,等于0时返回一级菜单
System.out.println("输入0返回");
num = sc.nextInt();//返回一级菜单
for (;num != 0;){
System.out.println("输入有误,请重新输入");
num = sc.nextInt();
while (num == 0);
13.整体代码
package cn.blue;
import java.util.Scanner;
/**
* @authorDesc 诸神在上,佑我程序,玄功护体,BUG皆去!
* @author Xunan
* @date 2022-07-16 13:50:55
* @version 1.0.0
* @description 网上订餐系统(模拟)
*/
public class Version {
/**
* @description 功能如下:
* 我要订餐
* 查看餐袋
* 签收订单
* 删除订单
* 我要点赞
* 退出系统
* @author Xunan
* @date 2022-07-16 13:51:07
* @param args
* @return
*/
public static void main(String[] args) {
//创建一组数组,保存订单的信息
String[] nameArray = new String[4];//订餐人的姓名
String[] dishMegArray = new String[4];//所选菜品信息
int[] timeArray = new int[4];//送餐时间
String[] addressesArray = new String[4];//送餐地址
int[] statesArray = new int[4];//订单状态0:已预订 1:已完成
double[] sumPriceArray = new double[4];//订单总金额
//初始化第一个订单
nameArray[0] = "张晴";
dishMegArray[0] = "红烧带鱼 2份";
timeArray[0] = 12;
addressesArray[0] = "天成路207号";
statesArray[0] = 1;
sumPriceArray[0] = 76.0;
//初始化第二个订单
nameArray[1] = "张晴";
dishMegArray[1] = "鱼香肉丝 2份";
timeArray[1] = 18;
addressesArray[1] = "天成路207号";
statesArray[1] = 0;
sumPriceArray[1] = 45.0;
//创建菜品信息数组
String[] dishNameArray = {"红烧带鱼","鱼香肉丝","时令蔬菜"};//菜品种类
double[] priceArray = {38.0,20.0,10.0};//菜品单价
int[] praiseArray = new int[3];//菜品点赞数
System.out.println("欢迎使用吃货联盟订餐系统");
Scanner sc = new Scanner(System.in);//用户可从键盘输入
int num = -1;//定义一个数字,等于0时返回一级菜单
do {
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("请选择:");
num = sc.nextInt();//用户输入不同的数字
for (;num >6 || num < 0;){//判断用户输入数字是否合法
System.out.println("输入有误,请重新输入");
num = sc.nextInt();//用户输入不同的数字
}
switch (num){
case 1:
System.out.println("********我要订餐********");
boolean isAdd = false;//定义一个布尔变量,初始值为false,用于判断是否符合订餐条件
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
if (nameArray[i] == null){//当nameArray数组为空时才可以订餐
isAdd = true;//判断为true,可以订餐
System.out.println("请输入订餐人姓名:");
String name = sc.next();
//显示菜品信息
System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
//定义一个“i”,使i小于数组dishNameArray的长度,并且自增,用来寻找数组中每一个元素
for (int j = 0;j < dishNameArray.length;j++){
//打印可选择菜品
System.out.println((j + 1) + "\t\t" + dishNameArray[j] + "\t" + priceArray[j] +
"\t" + praiseArray[j]);
}
System.out.println("请输入您要点的菜品编号:");
int serial = sc.nextInt();
for (;serial > 3 || serial < 1;){
System.out.println("输入有误,请重新输入");
serial = sc.nextInt();
}
System.out.println("请输入您需要的分数:");
int additional = sc.nextInt();
for (;additional < 1;){
System.out.println("输入有误,请重新输入");
additional = sc.nextInt();
}
//定义一个变量,接收所点菜品信息
String dishMeg = dishNameArray[serial - 1] + " " + additional + "份";
//定义一个变量,接收总金额
double sumprice = priceArray[serial -1] * additional;
//满50减6
double send = (sumprice >= 50)? 0:6;
System.out.println("请输入送餐时间:(10到20点整送餐)");
int time = sc.nextInt();
for (;time < 10 || time > 20;){
System.out.println("输入有误,请输入10——20之内的整数");
timeArray[i] = sc.nextInt();
}
System.out.println("请输入送餐地址:");
String addresses = sc.next();
System.out.println("订餐成功!");
System.out.println("******************************");
System.out.println("您的姓名:" + name);
System.out.println("您订的是" + dishMeg);
System.out.println("送餐时间" + time);
System.out.println("送餐地址:" + addresses);
System.out.println("餐费:" + sumprice + ",送餐费:" + send + "总计:" + (sumprice + send));
//添加数据
nameArray[i] = name;
dishMegArray[i] = dishMeg;
timeArray[i] = time;
addressesArray[i] = addresses;
sumPriceArray[i] = sumprice + send;
break;
}
}
if (!isAdd){
System.out.println("您的餐袋已满,,无法继续订餐!");
}
System.out.println("输入0返回");
num = sc.nextInt();//返回一级菜单
for (;num != 0;){
System.out.println("输入有误,请重新输入");
num = sc.nextInt();
}
break;
case 2:
System.out.println("********查看餐袋********");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐日期\t送餐地址\t\t\t总金额\t\t订单状态");
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
if (nameArray[i] != null){
//遍历这6个数组
System.out.println((i + 1) + "\t" + nameArray[i] + "\t\t" + dishMegArray[i] + "\t" +
timeArray[i] + "\t\t" + addressesArray[i] + "\t\t" + sumPriceArray[i] + "\t\t" +
statesArray[i]);
}
}
System.out.println("输入0返回");
num = sc.nextInt();//返回一级菜单
for (;num != 0;){
System.out.println("输入有误,请重新输入");
num = sc.nextInt();
}
break;
case 3:
System.out.println("********签收订单********");
System.out.println("请选择要签收的订单序号:");
//定义一个变量表示序号,从键盘输入
int serialNumber = sc.nextInt();
boolean select = true;//定义一个布尔变量,初始值为true
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
//遍历nameArray和statesArray数组
if (nameArray[i] != null && statesArray[i] == 0 && serialNumber == i + 1){
statesArray[i] = 1;//将数组状态重新赋值,赋值为已签收
System.out.println("订单签收成功");
select = false;//标记此次订单
}else if (nameArray[i] != null && statesArray[i] == 1 && serialNumber == i + 1){
System.out.println("订单已签收完成,不能重复签收!!!");
select = false;//标记此次订单
}
}
if (select){
System.out.println("您的订单不存在!!!");
}
System.out.println("输入0返回");
num = sc.nextInt();
for (;num != 0;){//返回一级菜单
System.out.println("输入有误,请重新输入");
num = sc.nextInt();
}
break;
case 4:
System.out.println("********删除订单********");
boolean isfind = false;//定义一个布尔变量,初始值为true
System.out.println("请输入要删除的订单编号:");
int delld = sc.nextInt();
//定义一个“i”,使i小于数组nameArray的长度,并且自增,用来寻找数组中每一个元素
for (int i = 0;i < nameArray.length;i++){
if (nameArray[i] != null && statesArray[i] == 1 && delld == i + 1){
isfind = true;//找到符合if内条件的订单
for (int j = delld - 1;j < nameArray.length -1;j++){
//将所有数组的后一位赋值给上一位,删除操作
nameArray[j] = nameArray[j + 1];
dishMegArray[j] = dishMegArray[j + 1];
timeArray[j] = timeArray[j + 1];
addressesArray[j] = addressesArray[j + 1];
statesArray[j] = statesArray[j + 1];
sumPriceArray[j] = sumPriceArray[j + 1];
}
//将最后一位赋值为变量end
int end = nameArray.length - 1;
//将0和null赋值给变量end,删除成功
nameArray[end] = null;
dishMegArray[end] = null;
timeArray[end] = 0;
addressesArray[end] = null;
statesArray[end] = 0;
sumPriceArray[end] = 0;
System.out.println("删除成功");
break;
}else if (nameArray[i] != null && statesArray[i] == 0 && delld == i + 1){
System.out.println("未签收不能删除");
isfind = true;//找到符合else if内条件的订单
break;
}
}
if (!isfind){
System.out.println("未找到订单");
}
System.out.println("输入0返回");
num = sc.nextInt();
for (;num != 0;){//返回一级菜单
System.out.println("输入有误,请重新输入");
num = sc.nextInt();
}
break;
case 5:
System.out.println("********我要点赞********");
System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
for (int i = 0;i < dishNameArray.length;i++){
//定义一个“i”,使i小于数组dishNameArray的长度,并且自增,用来寻找数组中每一个元素
System.out.println((i + 1) + "\t\t" + dishNameArray[i] + "\t" + priceArray[i] +
"\t" + praiseArray[i]);
}
System.out.println("请输入您要点餐的菜品编号:");
int digital = sc.nextInt();
if (digital < 1 || digital > 4){
System.out.println("您的输入有误,请输入餐袋内已有编号");
}
//使此数组的元素自增,来表示每次点赞数加1
praiseArray[digital - 1]++;
System.out.println("点赞成功");
System.out.println("输入0返回");
num = sc.nextInt();//返回一级菜单
for (;num != 0;){
System.out.println("输入有误,请重新输入");
num = sc.nextInt();
}
break;
case 6:
System.out.println("退出系统");
break;
}
}while (num == 0);
}
}
个人运行没什么大问题,运行截图太多就不放了。