吃货联盟订餐系统

package experiment4;

import java.util.Scanner;

public class OrderFoodSystem {
	public static void main(String args[]) {
		//定义数据主体:菜品
		String[] dishNames= {"红烧带鱼","鱼香肉丝","时令蔬菜"};//菜品名称  菜品编号1 dishNames[0]
		double[] prices= {38.0,20.0,10.0};//单价
		int[] praiseNums=new int[3];//点赞数
		//定义数据主体:订单-订餐人  餐品信息    送餐时间 送餐地址   总金额  订单状态
		String[] names=new String[4];
		String[] dishMsg=new String[4];//菜品名称+订份数
		int[] times=new int[4];
		String[] adresses=new String[4];
		double[] sumPrices=new double[4];
		int[] states=new int[4];//0:已预定  1:已完成
		
		//初始化2个订单信息
		names[0]="张三";
		dishMsg[0]="红烧带鱼 2份";
		times[0]=10;
		adresses[0]="知春路223号";
		sumPrices[0]=76;//餐费>50免配送费,不然,配送费6元
		states[0]=0;
		
		names[1]="李四";
		dishMsg[1]="鱼香肉丝 1份";
		times[1]=13;
		adresses[1]="天成路207号";
		sumPrices[1]=26;//餐费>50免配送费,不然,配送费6元
		states[1]=1;
		
		//搭建项目流程整体框架
		int num=-1;//用户输入0返回时的输入数字,num=0时重复显示主菜单;num在用户每次订单操作后进行提示重新赋值
		Scanner input=new Scanner(System.in);
		System.out.println("欢迎使用“吃货联盟订餐系统”");
		boolean flag=false;//记录用户是否退出系统的状态 false是退出状态  True是不退出状态
		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(choose){
			case 1:
				System.out.println("\n********************我要订餐*******************");
				//订餐前提是订单未满,boolean变量标识订单是否满了的结果,满了false-不能订餐,反之能订餐
				boolean isAdd=false;
				for(int i=0;i<names.length;i++){
					if(names[i]==null) {
						//订单未满,可以订餐
						isAdd=true;
						//订餐;;;
						System.out.print("请输入订餐人姓名:");
						String name=input.next();
						System.out.println("序号\t菜名\t单价\t");
						for(int j=0;j<dishNames.length;j++) {
							String praise=(praiseNums[j]==0)?"":praiseNums[j]+"赞";
							System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+praise);

						}
						//菜品编号的输入及判断
						System.out.print("请输入您要点的菜品编号:");
						int no=input.nextInt();
						while(no<1||no>dishNames.length) {
							System.out.print("本店没有这个菜品,请重新选择:");
							no=input.nextInt();
						}
						//点菜份数
						System.out.print("请输入您需要点的菜品份数:");
						int number=input.nextInt();
						//送餐时间的输入及判断
						System.out.print("请输入送餐时间(送餐时间只能在10~20之间的整点):");
						int time=input.nextInt();
						while(time<10||time>20) {
							System.out.print("您输入有误,请输入10~20之间的整数:");
							time=input.nextInt();
						
					}
						//送餐地址
						System.out.print("请输入送餐地址:");
						String address=input.next();
						//输出订餐信息给用户看,并把订单信息添加到订单信息
						System.out.println("订餐成功!");
						//菜品信息:菜品名称 份数
						String dishInfo=dishNames[no-1]+" "+number+"份";//用户选择的菜品下标比真正的数组元素下标大一
						System.out.println("您订的是:"+dishInfo);
						System.out.println("送餐时间:"+time+"点");
						//餐费 配送费 总计
						double dishPrice= prices[no-1]*number;//单价*份数
						double peiSong=(dishPrice>50)?0:6;
						double sumPrice=dishPrice+peiSong;
						System.out.println("餐费:"+dishPrice+"元:配送费:"+peiSong+"总计:"+sumPrice);
					
						//把订餐信息添加到数组中去,插入订单的位置是关键:i
						names[i]=name;
						dishMsg[i]=dishInfo;
						times[i]=time;
						adresses[i]=address;
						sumPrices[i]=sumPrice;
						//本次订餐结束跳出循环
						break;
						
				}
				}
				if(!isAdd) {
					System.out.println("对不起,您的餐袋已满");
				}
				break;
				
			case 2:
				System.out.println("\n********************查看餐袋*******************");
				System.out.println("序号\t订餐人\t订餐菜品\t\t配送时间\t配送地址\t\t订单金额\t订单状态");
				for(int i=0;i<names.length;i++) {
					if(names[i]!=null) {//输出非空订单
						String time=times[i]+"点";
						String state=(states[i]==0)?"已预定":"已完成";
						System.out.println((i+1)+"\t"+names[i]+"\t"+dishMsg[i]+"\t"+times[i]+"\t"+adresses[i]+"\t"+sumPrices[i]+"\t"+state);
					}
					
				}
				break;
			case 3:
				System.out.println("\n********************签收订单*******************");
				//签收之前。要先判断订单是否存在,
				//false-不存在,不能签收;true存在,且预定状态,能签收;存在,完成状态,不能签收
				boolean isSign=false;
				System.out.println("请输入您要签收的订单编号:");
				int sigNo=input.nextInt();
				for(int i=0;i<names.length;i++) {
					if(names[i]!=null&&states[i]==0 &&i==sigNo-1) {
						//代表有订单信息,并且订单状态为已预定,并且用户输入的订单编号我能找到
						//能签收
						isSign=true;
						states[i]=1;
						System.out.println("订单已签收!");
					}else if(names[i]!=null&&states[i]==1 &&i==sigNo-1) {
						//代表有订单信息,并且订单状态为已完成,并且用户输入的订单编号我能找到
						//不能签收
						isSign=true;
						//但是订单状态为已完成,不能签收
						System.out.println("您选择的订单已经完成签收,不能再次签收!");
					}
					
				}
				if(!isSign) {
					System.out.println("您选择的订单不存在!");
				}
				
				break;
			case 4:
				System.out.println("\n********************删除订单*******************");
				
				//删除之前。要先判断订单是否存在,
				//false-不存在,不能删除;true存在,且预定状态,不能删除;存在,完成状态,可删除
				boolean isDelete=false;
				System.out.println("请输入您要删除的订单编号:");
				int deleteNo=input.nextInt();
				for(int i=0;i<names.length;i++) {
					if(names[i]!=null&&states[i]==0 &&i==deleteNo-1) {
						//代表有订单信息,并且订单状态为已预定,并且用户输入的订单编号我能找到
						isDelete=true;
						//并且订单状态为已预定,不能删除
						System.out.println("您选择的订单未签收,不能删除!");
						
					}else if(names[i]!=null&&states[i]==1 &&i==deleteNo-1) {
						//代表有订单信息,并且订单状态为已完成,并且用户输入的订单编号我能找到
						
						isDelete=true;
						//但是订单状态为已完成,能删
						//找到删除订单位置的下标i,把i后面的元素依此往前移动,最后一个位置要置空
						//注意:移动的过程其实就是把后一个元素往前一个元素复制的过程
						//最后一个元素一定要置空,就可以下新订单了
						for(int j=1;j<names.length-1;j++) {
							names[j]=names[j+1];
							dishMsg[j]=dishMsg[j+1];
							times[j]=times[j+1];
							adresses[j]=adresses[j+1];
							sumPrices[j]=sumPrices[j+1];
							states[j]=states[j+1];
						}
						//最后一个元素一定要置空,就可以下新订单了
						names[names.length-1]=null;
						dishMsg[names.length-1]=null;
						times[names.length-1]=0;
						adresses[names.length-1]=null;
						sumPrices[names.length-1]=0;
						states[names.length-1]=0;
						System.out.println("删除订单成功!");
						
					}
					
				}
				if(!isDelete) {
					System.out.println("您选择的订单不存在!");
				}
				
				break;
			case 5:
				System.out.println("\n********************我要点赞*******************");
				//显示菜品信息
				System.out.println("序号\t菜名\t单价\t");
				for(int j=0;j<dishNames.length;j++) {
					String praise=(praiseNums[j]==0)?"":praiseNums[j]+"赞";
					System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+"\t"+praise);

				}
				//点赞
				System.out.println("请输入您要点赞的菜品序号:");
				int praiseNo=input.nextInt();
				while(praiseNo<1||praiseNo>dishNames.length) {
					System.out.print("本店没有这个菜品,无法点赞!请重新输入菜品序号:");
					praiseNo=input.nextInt();
				}
				//关键点,把哪个位置的菜品点赞数+1,点赞菜品的位置=praiseNo-1
				praiseNums[praiseNo-1]++;
				System.out.println("点赞成功!");
				break;
			case 6:
				//退出系统
				flag=true;
				break;
			default://当输入比如7 8等数字时就是退出系统
				flag=true;
				//退出系统
				break;
			} if(!flag)//flag 等同于flag==false
			{
				System.out.print("请输入0返回:");
				num=input.nextInt();
			}else {
				break;
			}
			
		}while(num==0);
		System.out.println("谢谢使用,欢迎下次光临!");
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值