系统开发背景:网络时代,基于Java的外卖服务业蒸蒸日上,为了以后就业的工作需求,现对此系统通过Java基础进行浅层次的开发
分析系统有如下功能:我要订餐、查看餐袋、签收订单、删除订单、我要点赞、退出系统。
首先编写一组订单信息做为数据主体
订单信息有:订餐人、所定餐品信息、送餐时间、送餐地址、订单状态、总金额
String[] names = new String[4];//订餐人
String[] dishMegs =new String[4];//所定餐品信息
int[] times =new int[4];//送餐时间
String[] addresses =new String[4];//送餐地址
int[] states =new int[4];//订单状态 0:已经预定 1:已经完成
double[] sumPrices =new double[4];//总金额
随后,编写数据主体:一组餐品信息
String[] dishNames={"红烧带鱼\t","鱼香肉丝\t","水果沙拉\t"};
double[] prices={38.0,42.0,10.0};
int[] praiseNums =new int[3];//点赞数
最后,通过dowhile循环(dowhile循环先进行操作,然后再进行判断)显示主菜单
int num=-1;
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.print("请选择");
int choose =input.nextInt();
因为功能已经被划分,接下来我们使用switch语句执行功能
一、我要订餐
完成用户订餐,每条订单包含如下信息:
1、订餐人姓名:要求用户输入
2、选择菜品及份数:显示三个菜单序号、名称、单价、点赞数,提示用户输入要 选择的菜品序号及份数
3、送餐时间:要求当天 10 到 20 点间整点送餐,要求用户输入 10~20 的整数,输 入错误,重复输入。
4、 送餐地址:要求用户输入 状态:两种状态:0:已预定(默认状态) 1、已完成(订单已签收)
5、 总金额: 总金额 = 菜品单价*份数-送餐费 (送餐费:当单笔订单金额达到 50 元时,免送餐费,否则,需交纳 6 元送餐费) 订餐成功后,显示订单信息。
6、最后要记得用插旗的方法来标记是否餐袋已满
boolean isAdd =false;//true记录一个空的位置
case 1:
//1.我要订餐
System.out.println("********我要订餐*******");
//1.查找要插入的位置
for (int i = 0; i < names.length; i++) {
//如果空,则记录下来
if (names[i] ==null){
isAdd=true;//记录一个空的位置
//执行插入操作
//显示所有菜品信息
System.out.println("序号\t餐品名\t单价\t点赞数");
for (int j = 0; j < dishNames.length; j++) {
String price = prices[j]+"元";
String praise =praiseNums[j]+"赞";
System.out.println((j+1)+"\t"+dishNames[j]+"\t"+price+"\t"+praise);
}
//输入所选餐品编号以及份数
System.out.print("输入所选餐品序号");
int chooseDish=input.nextInt();
System.out.print("请选择份数");
int number =input.nextInt();
String dishMeg =dishNames[chooseDish-1]+" "+number+"份";
//输入订餐人姓名
System.out.println("请输入订餐人姓名");
String name =input.next();
//输入送餐时间
System.out.println("请输入送餐时间");
int time=input.nextInt();
while (time<10 || time>20){
System.out.println("您输入的送餐时间不能小于10点以及大于20点");
time =input.nextInt();
}
//输入送餐地址
System.out.println("请输入送餐地址");
String address =input.next();
//计算餐费
double sumPrice=prices[chooseDish-1]*number;
//送餐费
double deliCharge = sumPrice>=50?0.0:6.0;
//显示订单信息
System.out.println("订餐成功,您订的是"+dishMeg);
System.out.println("订餐人"+name);
System.out.println("送餐时间"+time);
System.out.println("送餐地址"+address);
System.out.println("餐费"+sumPrice+",送餐费"+deliCharge+"元");
//保存数据
names[i] =name;
dishMegs[i] =dishMeg;
times[i] =time;
sumPrices[i] =sumPrice+deliCharge;
addresses[i] =address;
break;
}
}//如果不为空,则提示信息
if (!isAdd ){
System.out.println("对不起,你的餐袋已满");
}
break;
二、查看餐袋
遍历显示已有定单
内容包括:序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、 状态(已预定或已完成)、总金额
case 2:
//2.查看餐袋
System.out.println("********查看餐袋**********");
System.out.println("序号\t订餐人\t所订餐品信息\t送餐时间\t送餐地址\t\t总金额\t订餐状态");
for (int i = 0; i < names.length; i++) {
if (names[i] !=null){
String time=times[i]+"点";
String sumPrice =sumPrices[i]+"元";
String state =states[i]==0?"已预定":"已完成";
System.out.println((i+1)+"\t"+names[i]+"\t"+dishMegs[i]+"\t"+time+"\t"+addresses[i]+"\t"+sumPrice+"\t"+state);
}
}
break;
三、签收订单
1、找到,状态是已完成,不能再次签收
2、找到,状态是已预定,可以签收、
3、没找到,提示信息没找到
case 3:
//3.签收订单
System.out.println("*********签收订单**********");
// 要求用户输入一个签收的订单序号
System.out.println("请输入要查找的订单序号");
System.out.println("序号\t订餐人\t所订餐品信息\t送餐时间\t送餐地址\t\t总金额\t订餐状态");
for (int i = 0; i < names.length; i++) {
if (names[i] !=null){
String time=times[i]+"点";
String sumPrice =sumPrices[i]+"元";
String state =states[i]==0?"已预定":"已完成";
System.out.println((i+1)+"\t"+names[i]+"\t"+dishMegs[i]+"\t"+time+"\t"+addresses[i]+"\t"+sumPrice+"\t"+state);
}
}
int signOrderId =input.nextInt();
boolean isFind = false;
// 查找这条订单(遍历循环)
for (int i = 0; i < names.length; i++) {
// 1、找到,状态是已完成,不能再次签收
// 2、找到,状态是已预定,可以签收
if (names[i]!=null && states[i]==1 && signOrderId==(i+1)){
System.out.println("对不起,您的订单已完成");
isFind=true;
break;
}else if (names[i]!=null && states[i]==0 && signOrderId==(i+1)){
states[i]=1;//改变状态值
System.out.println("订单签收成功");
isFind=true;
break;
}
}
// 3、没找到,提示信息没找到
if (!isFind){
System.out.println("对不起,没有找到这条订单");
}
break;
四、删除订单
循环查找订单
1、找到此订单,已签收,执行删除操作
2、找到订单但未签收则提示信息
3、未找到订单,提示信息没找到
case 4:
//4.删除订单
// 1、输入要删除订单的序号(从1开始);
System.out.println("********删除订单********");
System.out.println("请输入要删除的订单序号");
int delId = input.nextInt();
int delIndex=-1;//删除订单的下标
boolean isDelFind = false;
// 2、循环查找这条订单
for (int i = 0; i < names.length; i++) {
// 找到此订单,已签收,执行删除操作
if (names[i]!=null && states[i]==1 && delId==(i+1)){
delIndex = i;
isDelFind = true;
break;
}
// 找到订单但未签收则提示信息
else if (names[i]!=null && states[i]==0 && delId==(i+1)){
System.out.println("订单未签收,不能删除");
break;
}
}
// 未找到订单,提示信息没找到
if (!isDelFind){
System.out.println("未找到订单");
}
//执行删除操作
if (delIndex != -1){
//循环移位删除
for (int i = delIndex+1; i < names.length-1; i++) {
names[i-1] =names[i];
dishMegs[i-1] =dishMegs[i];
times[i-1]=times[i];
addresses[i-1]=addresses[i];
states[i-1]=states[i];
}
//最后一位清空
names[names.length-1] =null;
dishMegs[names.length-1]=null;
times[names.length-1]=0;
addresses[names.length-1]=null;
states[names.length-1]=0;
System.out.println("订单删除成功");
}
break;
五、我要点赞
1、显示供点赞的餐品列表
2、输入要点赞的餐品序号
3、该序号的餐品点赞数+1
4、显示点赞数
case 5:
//5。我要点赞
System.out.println("************我要点赞************");
// 1、显示供点赞的餐品列表
System.out.println("序号\t餐品名\t单价\t点赞数");
for (int j = 0; j < dishNames.length; j++) {
String price = prices[j]+"元";
String praise =praiseNums[j]+"赞";
System.out.println((j+1)+"\t"+dishNames[j]+"\t"+price+"\t"+praise);
}
// 2、输入要点赞的餐品序号
System.out.println("请输入要点赞的菜品");
int dishId =input.nextInt();
// 3、该序号的餐品点赞数+1
praiseNums[dishId-1]++;
// 4、显示点赞数
System.out.println("点赞成功");
System.out.println(dishNames[dishId-1]+" "+praiseNums[dishId-1]+"赞");
break;
六、退出系统
当用户输入1~5之外的数字时,退出循环,否则提示输入0返回
case 6:
//6.退出系统
default:
break;
}
//当用户输入1~5之外的数字时,退出循环,否则提示输入0返回
if(choose<1 || choose>5){
break;
}else {
// 循环条件:
// 输入0返回
System.out.println("输入0返回");
num = input.nextInt();
}
}while (num==0);
System.out.println("谢谢使用,欢迎下次光临");
}