设计一个订单系统
题目要求:
难点:
- 订餐人的不同信息存放在不同数组中,如何实现空间与订餐人的一一对应(映射)
》》不同数组的同一位置例如a[1],b[1],对应同一个订餐人小明的订餐信息。 - 删除订单时,已订餐的编号中间怎么去掉删除订单后的空位,使已订餐信息连续存放。
》》for循环,找到最后一个非空订单信息编号,存起来 。end
》》使用for循环,将从删除订单编号开始,直到最后一个非空订单信息编号-1结束,后一位的订单信息存放至前一位中。
》》删除订单前的最后一个已订餐信息清空。end
》》注意:删除的订单时最后一个,则不必挪,满足订餐信息连续存放的条件
易错点:
- 订单编号-1=数组中存放的序列号
- 整个系统可以执行,也可以退出系统,并且至少先执行一次
》do{}while(进入系统的条件成立);
java程序
package exercise;
import java.util.Scanner;
public class OrderSystem {
public static void main(String[] args) {
String[] orderNames = new String[20];
String[] orderDish = new String[20];
String[] orderTimes = new String[20];
String[] orderAddress = new String[20];
double[] sumPrice = new double[20];
int[] states = new int[20];
int[] loveNum = new int[20];
String[] dishmegs = {"红烧带鱼","鱼香肉丝","时令鲜蔬"};
double[] prices = {38.0,20.0,10.0};
int exstsignal = 1;
orderNames[0]="张青";
orderDish[0] = dishmegs[0] ;
orderTimes[0] ="12";
orderAddress[0] = "天成路207路";
sumPrice[0] = 74.0;
states[0] = 1;
orderNames[1]="张青1";
orderDish[1] = dishmegs[1] ;
orderTimes[1] ="12";
orderAddress[1] = "天成路208路";
sumPrice[1] = 20.0;
int putIndex = 0;
Scanner input = new Scanner(System.in);
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.println("请选择:");
switch(input.nextInt()){
case 1:
for (int i = 0; i < orderNames.length; i++) {
if(orderNames[i] == null){
putIndex = i;
break;
}
}
System.out.println("请输入订餐人姓名:");
orderNames[putIndex] = input.next();
System.out.println("序号\t\t\t菜名\t\t\t单价\t\t\t");
System.out.println("1\t\t红烧带鱼\t\t38.0元");
System.out.println("2\t\t鱼香肉丝\t\t20.0元");
System.out.println("3\t\t时令鲜蔬\t\t10.0元");
System.out.println("请选择您要点的菜品编号:");
int dishmegsIndex = input.nextInt();
orderDish[putIndex] = dishmegs[dishmegsIndex-1];
System.out.println("请选择您需要的份数");
int num = input.nextInt();
System.out.println("请输入送餐时间(送餐时间是10点到20点间整点送餐):");
orderTimes[putIndex] = input.next();
System.out.println("请输入送餐地址:");
orderAddress[putIndex] = input.next();
sumPrice[putIndex] = prices[dishmegsIndex-1]*num;
System.out.println("订餐成功!");
System.out.println("您订的是:"+orderDish[putIndex]+"\t\t"+num+"份");
System.out.println("送餐时间:"+orderTimes[putIndex]+"点");
System.out.println("餐费:"+sumPrice[putIndex]+",送餐费0.0元,总计:"+sumPrice[putIndex]+"元");
System.out.println("输入0返回:");
if(input.nextInt() == 0){
break;
}
break;
case 2:
System.out.println("***查看餐袋***");
System.out.println("序号"+"\t\t"+"订餐人"+"\t\t"+"餐品信息"+"\t\t"+"送餐日期"+"\t\t"+"送餐地址"+"\t\t"+"总金额"+"\t\t"+"订单状态"+"\t\t"+"点赞数");
for (int i = 0; i < orderNames.length ; i++) {
if(orderNames[i] != null){
System.out.println((i+1)+"\t\t"+orderNames[i]+"\t\t"+orderDish[i]+"\t\t"+orderTimes[i]+"\t\t"+orderAddress[i]+"\t\t"+sumPrice[i]+"\t\t"+(states[i]==0?"已预定":"已完成")+"\t\t"+loveNum[i]);
}
}
System.out.println("输入0返回:");
if(input.nextInt() == 0){
break;
}
break;
case 3:
System.out.println("***签收订单***");
System.out.println("请选择要签收的订单编号:");
int toReceiveNum = input.nextInt();
states[toReceiveNum-1] = 1;
System.out.println("订单签收成功!!");
System.out.println("输入0返回:");
if(input.nextInt() == 0){
break;
}
break;
case 4:
System.out.println("***删除订单***");
System.out.println("请输入要删除的订单编号:");
int toDeleteNum = input.nextInt();
int toDeleteIndex = toDeleteNum-1;
orderNames[toDeleteIndex]=null;
orderDish[toDeleteIndex] = null ;
orderTimes[toDeleteIndex] = null;
orderAddress[toDeleteIndex] = null;
sumPrice[toDeleteIndex] = 0;
states[toDeleteIndex] = 0;
int endnotnullIndex =orderNames.length-1;
for (int i = toDeleteIndex + 1; i < orderNames.length; i++) {
if(orderNames[i] == null){
endnotnullIndex = i - 1;
break;
}
}
if((toDeleteNum-1) != (orderNames.length-1)){
for (int i = toDeleteIndex+1; i <= endnotnullIndex ; i++) {
orderNames[i-1]=orderNames[i];
orderDish[i-1] = orderDish[i] ;
orderTimes[i-1] = orderTimes[i];
orderAddress[i-1] = orderAddress[i];
sumPrice[i-1] = sumPrice[i];
states[i-1] = states[i];
loveNum[i-1] = loveNum[i];
}
orderNames[endnotnullIndex]=null;
orderDish[endnotnullIndex] = null ;
orderTimes[endnotnullIndex] = null;
orderAddress[endnotnullIndex] = null;
sumPrice[endnotnullIndex] = 0;
states[endnotnullIndex] = 0;
}
break;
case 5:
System.out.println("***我要点赞***");
System.out.println("序号\t\t\t菜名\t\t\t单价\t\t\t");
System.out.println("1\t\t红烧带鱼\t\t38.0元");
System.out.println("2\t\t鱼香肉丝\t\t20.0元");
System.out.println("3\t\t时令鲜蔬\t\t10.0元");
System.out.println("请选择您要点赞的菜品编号:");
loveNum[input.nextInt()-1] += 1;
break;
case 6:
System.out.println("谢谢使用,欢迎下次");
exstsignal = 0;
break;
}
}while(exstsignal == 1);
}
}