一、业务逻辑
吃货联盟数据主体分析:
姓名:输入 String
餐品信息:序号、餐品名string、价格double、点赞数int
用3个一维数组实现
份数:输入 int 大于0的整数
时间:输入int 10~20点之间的整数
地址:输入 String
订单信息:String 二维数组
序号、姓名、餐品名、分数、价格(总价)、地址、时间、状态
签收订单:改变订单的状态 如果已完成则不能再次签收
删除订单:不能删除未完成的订单,序号要对应变动
我要点赞:对应菜品的点赞数++
程序控制分析:
1、欢迎页循环:do-while
2、Scanner控制输入
二、代码实现
package cn.kgc.kb11;
import java.util.Scanner;
public class MeiTuan {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int choose;
String[] dishes={
"清水牛肉","酸汤肥牛","剁椒鱼头","清炒菜心"};
double[] prices={
108,42,68,28};
int[] honors={
50,100,20,12};
String[][] orders=new String[1024][];
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("请选择:");
choose=sc.nextInt();
if(choose>0&&choose<6){
switch(choose){
case 1:
System.out.println("******我要订餐******");
System.out.print("请输入订餐人姓名:");
String name=sc.next();
System.out.println("序号\t菜品\t\t单价\t\t点赞数");
for (int i = 0; i < dishes.length; i++) {
System.out.println(i+1+"\t"+dishes[i]+"\t"+prices[i]+"\t\t"+honors[i]+"次点赞");
}
int dishNum;
do{
System.out.print("请选择你要点的菜品编号:");
dishNum=sc.nextInt();
if(dishNum<1||dishNum>dishes.length) {
System.out.println("对不起,你的输入有误,请重新输入");
}
}while(dishNum<1||dishNum>dishes.length);
int pcs;
do{
System.out.print("请选择您需要的份数:");
pcs=sc.nextInt();
if(pcs<1) {
System.out.println("对不起,你的输入有误,请重新输入");
}
}while(pcs<1);
int time;
do{
System.out.print("请输入送餐时间(10点到20点整点):");
time=sc.nextInt();
if(time<10||time>20) {
System.out.println("对不起,你的输入有误,请重新输入");
}
}while(time<10||time>20);
System.out.print("请输入送餐地址:");
String address=sc.next();
System.out.println("订餐成功!!");
System.out.println("您定的是:"+dishes[dishNum-1]+"\t\t"+pcs+"份");
System.out.println("送餐时间点是:"+time+"点");
double cost=pcs*prices[dishNum-1];
double sent=cost>50?0:6;
System.out.println("餐费:"+cost+"元,送餐费"+sent+"元,总计:"+(cost+sent)+"元");
for (int i = 0; i < orders.length; i++) {
if(orders[i]==null){
//判断二位数组里原来有没有东西,如果为空,可以插入
orders[i]=new String[2]; //因为不知道二位数组的长度,所以用new
orders[i][0]=name+"\t"+dishes[dishNum-1]+" "+pcs+"份\t"+time+"点\t"+ address+"\t"+(cost+sent)+"元";
orders[i][1]="已预订";
break; //插完元素就跳出去,不可以重复插入到整个数组中
}
}
break;
case 2:
System.out.println("******查看餐袋******");
System.out.println("序号\t订餐人\t餐品信息\t送餐日期\t送餐地址\t总金额\t\t订单状态");
for (int i = 0; i < orders.length; i++) {
if(orders[i]!=null){
System.out.println(i+1+"\t"+orders[i][0]+"\t\t"+orders[i][1]);
}else {
break;
}
}
break;
case 3:
System.out.println("******签收订单******");
System.out.println("序号\t订餐人\t餐品信息\t送餐日期\t送餐地址\t总金额\t\t订单状态");
for (int i = 0; i < orders.length; i++) {
if(orders[i]!=null){
System.out.println(i+1+"\t"+orders[i][0]+"\t\t"+orders[i][1]);
}else {
break;
}
}
int num=0;
int end=0;
do {
System.out.println("请选择要签收的订单序号:");
for (int i = 0; i < orders.length; i++) {
if(orders[i]==null) {
end=i;
break; //遍历已经输入的订单,遇到空就知道跳出
}
}
num=sc.nextInt();
if(num<1||num>end){
System.out.println("输入有误,请重新输入!");
}else if(!"已预订".equals(orders[num-1][1])){
System.out.println("订单已签收,不能重复签收");
}else{
orders[num-1][1]="已完成";
break;
}
}while(num<1||num>end||!"已完成".equals(orders[num-1][1]));
break;
case 4:
System.out.println("******删除订单******");
System.out.println("序号\t订餐人\t餐品信息\t送餐日期\t送餐地址\t总金额\t\t订单状态");
for (int i = 0; i < orders.length; i++) {
if(orders[i]!=null){
System.out.println(i+1+"\t"+orders[i][0]+"\t\t"+orders[i][1]);
}else {
break;
}
}
int n=0;
int e=0;
do{
System.out.print("请输入要删除的订单序号");
for (int i = 0; i < orders.length; i++) {
if(orders[i]==null) {
e=i;
break; //遍历已经输入的订单,遇到空就知道跳出
}
}
n=sc.nextInt();
boolean isDeleted=false;
if(n<1||n>e){
System.out.println("对不起,你的输入有误,请重新输入");
}else if(!"已完成".equals(orders[n-1][1])){
System.out.println("不能删除未完成的订单");
}else {
boolean isDelete=true;
for (int i = n-1; i < orders[i].length; i++) {
if(n-1==orders.length){
orders[i]=null;
isDelete=true;
}else {
orders[i]=orders[i+1];//前移
if(orders[i]==null){
isDelete=true;
break;
}
}
}
if(isDeleted){
break;
}
}
}while(n<1||n>e||!"已预订".equals(orders[n-1][1]));
break;
case 5:
System.out.println("******我要点赞******");
System.out.println("序号\t菜品\t\t单价\t\t点赞数");
for (int i = 0; i < dishes.length; i++) {
System.out.println(i+1+"\t"+dishes[i]+"\t"+prices[i]+"\t\t"+honors[i]+"次点赞");
}
int d;
do{
System.out.print("请选择你要点赞的菜品:");
d=sc.nextInt();
if(d<1||d>honors.length){
System.out.println("对不起,你的输入有误,请重新输入!");
}else{
honors[d-1]++;
}
}while(d<1||d>honors.length);
break;
default:
}
System.out.print("输入0返回主页:");
choose=sc.nextInt();
}else {
break;
}
}while(choose==0);
System.out.println("谢谢使用,欢迎下次光临!");
}
}
三、实现效果