欢迎页面
Scanner输入
使用do-while循环
1、控制台输出订餐系统欢迎页面
2、变量接收控制台输入的数字
2、用switch选择进入(1-5),同时判断返回主页面的条件,即重新加载主页面
3、不在1-5范围内break退出系统
int chose=1;
Scanner input=new Scanner(System.in);
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("请选择:");
chose=input.nextInt();
switch (chose){
case 1:
System.out.println("***我要订餐***");
break;
case 2:
System.out.println("***查看餐袋***");
break;
case 3:
System.out.println("***订单签收***");
break;
case 4:
System.out.println("***删除订单***");
break;
case 5:
System.out.println("***我要点赞***");
break;
default:
}
if (chose>0&&chose<6){//定义重新加载
System.out.println("输入0返回");
chose=input.nextInt();
}else {//不在1-5范围内直接退出系统
System.out.println("欢迎下次光临!");
break;
}
}while(chose==0);//重新加载的条件
我要订餐
1、在主页面输入1进入我要订餐页面
2、输入订餐人姓名
3、输入菜品序号前,需要加载餐品信息:序号 菜品 单价 ,因此需要用一维数组存储菜品、单价数据
4、依次输入菜品序号(不能小于1或大于菜品的最大序号)、份数(不能小于1)、时间(10-20)、地址
这里的序号是从1开始,数组下标从0开始
5、计算金额
//餐品信息
String[] dishes={"油焖茄子","干锅包菜","红烧带鱼","水煮肉片"};
double[] prices={15,20,22,35};
System.out.println("***我要订餐***");
System.out.println("请输入订餐人姓名:");
String name=input.next();
//加载菜品和单价 先定义数组来存储这些数据
System.out.println("序号\t\t菜品\t\t单价");
for (int i = 0; i < dishes.length; i++) {
System.out.println(i+1+"\t\t"+dishes[i]+"\t\t"+prices[i]);
}
int dishNum=0;
do{
System.out.println("请选择菜品序号:");
dishNum=input.nextInt();
if (dishNum<0||dishNum>dishes.length){
System.out.println("输入有误,请重新输入:");
}
}while (dishNum<0||dishNum>dishes.length);
int num=0;
do{
System.out.println("请输入需要的份数:");
num=input.nextInt();
if (num<1){
System.out.println("输入有误,请重新输入:");
}
}while(num<1);
int time=0;
do{
System.out.println("请输入送餐时间(10-20整点):");
time=input.nextInt();
if (time<10||time>20){
System.out.println("输入错误,请重新输入:");
}
}while(time<10||time>20);
System.out.println("请输入送餐地址:");
String address=input.next();
double price=prices[dishNum-1]*num;
double sent=price>50?6:0;
double total=sent+price;
System.out.println("餐费:"+price+"元,送餐费:"+sent+"元,总计:"+total+"元");
查看餐袋
1、查看餐袋前,首先要将我要订餐里面的信息存放在数组里面才能查看到
String[][] information =new String[1024][];
for (int i = 0; i < information.length; i++) {
if (information[i]==null){
information[i]=new String[2];
information[i][0]=name+"\t\t"+dishes[dishNum-1]+num+"份"+"\t\t"+time+"点"+"\t\t"+
address+"\t\t"+total+"元";
information[i][1]="已预定";
break;//不加全都赋值了
}
}
2、将信息循环遍历出来
System.out.println("***查看餐袋***");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t\t送餐地址\t\t总金额\t订单状态");
for (int i = 0; i < information.length; i++) {
if (information[i]!=null){
System.out.println(i+1+"\t"+information[i][0]+"\t"+information[i][1]);
}else{
break;//不打印null
}
}
订单签收
1、将订单信息打印出来
2、确定订单的个数
3、条件判断 小于1大于订单个数 状态不是已预定 提示重新输入
其他修改订单状态 同时break
int a=0;
int b=0;
do{
for (int i = 0; i < information.length; i++) {
if (information[i]==null){
a=i;//确定订单的个数 假设012 则3是null a=3
break;
}
}
b=input.nextInt();
if (b<1||b>a){
System.out.println("输入有误");
}else if (!"已预定".equals(information[b-1][1])){
System.out.println("订单已经签收");
}else{
information[b-1][1]="已完成";
break;
}
}while(b<1||b>a ||!"已预定".equals(information[b-1][1]));
删除订单
1、将订单信息打印出来
2、确定订单的个数
3、条件判断 小于1大于订单个数 状态不是已完成 提示重新输入
4、如果输入的值n满足条件 则对应的下标是n-1
从n-1开始遍历数组
(1)如果正好是数组的最后一个 直接将值更改为null
(2) 不在最后一个 则将后面的往前移 当i+1赋给i的值为null时,说明后面都是null ,break
5、如果删除的正好是第一个,第二个状态是已预定,
while(d<1||d>c||!“已完成”.equals(information[d-1][1]));
此时会继续循环 因此在更改值之后,应该设置标志位true,同时当标志位是true时 直接跳出while
System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t\t送餐地址\t\t总金额\t订单状态");
for (int i = 0; i < information.length; i++) {
if (information[i]!=null){
System.out.println(i+1+"\t"+information[i][0]+"\t"+information[i][1]);
}else{
break;
}
}
int c=0;
int d=0;
do{
for (int i = 0; i < information.length; i++) {
if (information[i]==null){
c=i;
break;
}
}
d=input.nextInt();
if (d<1||d>c){
System.out.println("输入有误");
}else if (!"已完成".equals(information[d-1][1])) {
System.out.println("订单状态不是已完成");
}else{
boolean flag=false;
for (int i = d-1; i < information.length; i++) {
if (i==information.length-1){
information[i]=null;//删除最后一个 直接将最后一个值改为null
flag=true;
}else{
information[i]=information[i+1];
if (information[i]==null){
flag=true;
break;
}
}
}
if (flag){
System.out.println("删除成功");
break;//跳出while
}
}
}while(d<1||d>c||!"已完成".equals(information[d-1][1]));
我要点赞
1、新建一维数组存储点赞数
2、展示餐品信息
3、如果输入的要点赞的菜品序号在范围内(dishes.length),对应的下标点赞数+1
int dianZan=0;
do{
System.out.println("序号\t\t菜品\t\t\t单价\t点赞数");
for (int i = 0; i < dishes.length; i++) {
System.out.println(i + 1 + "\t\t" + dishes[i] + "\t\t" + prices[i] + "元" + "\t" + honors[i]);
}
System.out.println("请输入要点赞的菜品序号:");
dianZan=input.nextInt();
if (dianZan<1||dianZan>dishes.length){
System.out.println("输入有误,重新输入!");
}else {
honors[dianZan-1]++;
System.out.println("点赞成功!");
}
}while(dianZan<1||dianZan>dishes.length);