刚刚开始学习java,自己慢慢写了最基础的吃货联盟

package com.fengqing.test01;//包文件名称

import java.util.Scanner;//调用scanner工具包

public class Test {//类文件名称
	public static void main(String[] args) {//main方法
	    //定义数据主体(菜品类):菜品
		String[] dishnames   = {"红烧带鱼","鱼香肉丝","时令蔬菜"};//菜品名称数组
		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完成
		//初始化订单1(数组下标为0):
		names[0]     = "张三";
		dishMsg[0]   = "红烧带鱼2份";
		times[0]     = 10;
		adresses[0]  = "知春路";  
		sumPrices[0] =76;//餐费>= 50免费配送,<50配送费六元,共计76元。
		states[0]    =0;//0为预定
		//初始化订单2(数组下标为1):
		names[1]     = "李四";
		dishMsg[1]   = "鱼香肉丝1份";
		times[1]     = 13;
		adresses[1]  = "天成路";  
		sumPrices[1] =26;//餐费>= 50免费配送,<50配送费六元,餐费20元,配送费6元,共计26。
		states[1]    =1;//1为签收
		//搭建项目主体框架
		int num = -1;//用户输入0返回时的输入的数字,num = 0时 重复显示主菜单,num在用户每次订餐后进行提示重新赋值。
		Scanner input = new Scanner(System.in);//创建Scanner
		System.out.println("欢迎使用“吃货联盟订餐系统”");//显示中文双引号。
		//System.out.println("欢迎使用\"吃货联盟订餐系统\"");//显示英文双引号。
		//记录用户是否退出系统状态:退出true-----不退出 false.
		boolean flag = false;//初始状态为false
		//do-while循环,此处为do-while的语句序列,可参考do-while循环过程图。
		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.println("请选择:");
			int choose = input.nextInt();// choose接收Scanner类中的 nextInt()方法输入一个整数。
			//Switch循环,choose作为switch的表达式,此参考switch循环过程图。
			switch(choose){                                  
				case 1://订餐功能模块
					System.out.println("\n*****我要订餐*****");//\n是光标下移一个,请与\t区分好
					//订餐前提示订单未满,boolean变标识订单是否满了结果,满false不能订餐,未满true能订餐
					boolean isadd = false;//more可以订餐
					for(int i = 0;i < names.length;i ++){
						if(names[i] == null){//58-61订餐是否为空
							//可以订单
							isadd = true;//isadd为true可以订餐
							System.out.print("请输入订餐人:");
							String name = input.next();//name请看101行
							//循环输出菜品信息
							System.out.println("序号\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("本店没有此菜品信息");
							}
							//点菜份数
							System.out.println("请选择菜品份数: ");
							int number = input.nextInt();//number代表份数
							//送餐时间及判断
							System.out.print("请输入送餐时间: ");
							int time = input.nextInt();
							while(time < 10 || time >20){//如果输入不正确,while会一直循环
								System.out.println("输入错误(请示如10-20之间证书): ");
								time = input.nextInt();
							}
							//送餐地址
							System.out.println("请输入送餐地址");
							String address = input.next();
							//输出订单信息给用户看
							System.out.println("订单成功");
							//菜品信息:菜品名称 份数
							String dishInfo=  dishnames[no-1] + "" + "份" ;//把dishnames下标和number份数以字符串形式赋给dishInfo
							System.out.println("您的订单是 " + dishnames[no-1]);//数组下标0开始,客户看到1开始,所以减一	 
							System.out.println("您的送餐时间 " + time + "点");
							//餐费 配送费 总计
							//餐费 prices数组下标比用户选择菜品编号小一
							double dishprice = prices[no - 1] * number;//餐费=单价*分数	
							double peisong = (dishprice > 50)?0:6; //prisong=配送费
							double sumPrice = dishprice + peisong;
							System.out.println("餐费:" + dishprice + "配送费:" + peisong + "总计;" + sumPrice + "元");
							//把订餐信息加入订单信息,插入订单关键位置i
							names[i]     = name;//62行相关
							dishMsg[i]   = dishInfo;//菜品信息+分数
							times[i]     = time;//时间
							adresses[i]  = address;//地址
							sumPrices[i] = sumPrice;//配送费
							//跳出for循环
							break;
						}
				    }	//不能定餐
						if(!isadd){//isadd为false所以不能订餐 
							System.out.println("订餐已满,无法订餐");						
						 }
					break;
				case 2://查看餐袋功能模块
					System.out.println("\n*****产看餐袋*****");//\n是光标下移一个,请与\t区分好
					System.out.println("序号\t订餐人\t订餐菜品\t\t配送时间\t配送地址\t订餐价格\t订单状态 ");
						for(int i = 0;i < names.length;i++){
							if(names[i] != null){//显示names不为null的订单
								String time = times[i] + "点";
								String state = (states[i] ==0)?"已订单":"已完成"; 
								System.out.println((i+1)+"\t"+names[i]+"\t"+dishMsg[i]+"\t"+time+"\t"+adresses[i]+"\t"+sumPrices[i]+"\t"+state );
							}
						}
					break;
				case 3:
					System.out.println("\n*****签收订单*****");//\n是光标下移一个,请与\t区分好
					//签收之前判断订单是否存。boolea判断false不能签收,true能签收
					System.out.println("请输入需要签收单号:");
						int signo = input.nextInt();
						boolean isSign = false;
						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*****删除订单*****");//\n是光标下移一个,请与\t区分好
					//删除之前判断订单是否存。boolea判断false不能删除,true能删除
					System.out.println("请输入需要删除单号:");
						int deleteNo = input.nextInt();
						boolean isDelete = false;
						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;
								//提示不能签收 
								//*注意删除*删除就是把数组的下一个元素向前移动,也可以裂解为覆盖前一个位置。最后一个元素置空
								for(int j = 0;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[dishMsg.length - 1]   = null;
								times[times.length - 1]     = 0;
								adresses[adresses.length - 1]  = null;
								sumPrices[sumPrices.length - 1] = 0;
								states[states.length - 1]    = 0; 
								System.out.println("删除订单成功:");
							}
						}
						if(!isDelete){
							System.out.println("订单不存在");
						}
					break;
				case 5:
					System.out.println("\n*****我要点赞*****");//\n是光标下移一个,请与\t区分好
					break;
				case 6:
					//退出系统:为退出二级菜单(do-while为一级,Switch为二级),用户输入0正常退出switch循环,且在do-while中
					flag = false;//false是为了保证退出Switch二级。
					break;//跳出循环Switch
				default:
					//退出系统,用户输入0以外(且不是1-6)的数字退出switch循环,并退出do-while。
					flag = true;//因为初始值为false,且if取反,所有会直接switch和do-while。
					break;//跳出循环Switch	
			}
			if(!flag){// !flag代表flag = false,可理解为取反。flag为false执行此下方,为true进入else执行break。
				System.out.print("请输入0返回: ");
				num = input.nextInt();//num接收Scanner类中的 nextInt()方法输入一个整数。
			}else{//
				break;
			}
		}while(num == 0);//括号内为do-while的条件表达式,可参考do-while循环过程图。
		System.out.println("谢谢使用,欢迎下次光临");
	} 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值