吃货联盟java程序2

一.代码
import java.util.Scanner;

//吃货联盟订餐系统
public class orderFoodSys{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
try{
//定义数据主体:菜品
String[] disNames={“红烧排骨”,“空心菜”,“水煮肉片”};//菜单
double[] prices={50,10,38};//价格
int[] praiseNums=new int[4];//点赞数
//定义数据主体:订单-订餐人 餐品信息 送餐时间 送餐地址 总金额 订单状态
String[] names=new String[4];
String[] disMsg=new String[4];
int[] times=new int[4];
String[] addresses=new String[4];
double[] sumPrices=new double[4];
int[] states=new int[4];//0:已预订 1:已完成

		//初始化2个订单信息
		names[0]="张三";
		disMsg[0]="红烧排骨两份";
		times[0]=15;
		addresses[0]="恒宝路15号";
		sumPrices[0]=100;
		states[0]=0;

		names[1]="李四";
		disMsg[1]="水煮肉片两份";
		times[1]=16;
		addresses[1]="金融北路15号";
		sumPrices[1]=76;//餐费>50免配送费,不然,配送费6元
		states[1]=0;
		//记录用户是否退出系统的状态:退出true,不退出false
		boolean flag=false;
		int num=-1;//用户输入0返回时的输入数字,num=0时重复显示主菜单
		System.out.println("欢迎使用\"吃货联盟订餐系统\"");
		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();
			switch (choose) {
				case 1:
					System.out.println("********我要订餐***********");
					//判断前提是订单未满,boolean变量来标识订单是否满了的结果,满了flase-不能订单,反之能订单
					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单价");
							for(int j=0;j<disNames.length;j++){
								String praise=(praiseNums[j]==0)?"":praiseNums[j]+"赞";
								System.out.println((j+1)+"\t"+disNames[j]+"\t"+prices[j]+"\t"+praise);
							}
							//菜品编号的输入及判断
							System.out.print("请输入您要点的菜的编号:");
							int no=input.nextInt();
							while(no<1||no>disNames.length){
								System.out.println("请重新输入正确的菜品编号");
								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.println("请输入10到20之间的整数:");
								time=input.nextInt();
							}
							//输入送餐地址
							System.out.print("请输入送餐地址:");
							String address=input.next();
							//输出订单信息给用户看,并把订单信息添加到订单信息
							System.out.println("订餐成功");
							//菜品信息: 菜名名称  份数
							String dishInfo=disNames[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+"元");

							//把订餐信息添加到数组里面去

							names[i]=name;
							disMsg[i]=dishInfo;
							times[i]=time;
							addresses[i]=address;
							sumPrices[i]=sumPrice;

							//本次订餐结束,跳出循环
							break;
						}
					}
					if(!isAdd){
						System.out.println("对不起,你的餐袋已满!");
					}
					
					break;
				case 2:
					System.out.println("********查看餐袋***********");
					System.out.println("序号\t姓名\t订餐人\t\t配送时间\t派送地址\t\t配送金额\t订单状态");
					int i=0;
					while(names[i]!=null){
						String time=times[i]+"点";
						String state=(states[i]==1)?"已签收":"未签收";
						System.out.println((i+1)+"\t"+names[i]+"\t"+disMsg[i]+"\t"+time+"\t"+addresses[i]+"\t"+sumPrices[i]+"\t"+state);
						i++;
					}
					break;
				case 3:
					System.out.println("********签收订单***********");
					//签收之前,要先判断订单是否存在,
					//false-不存在,不能签收:true-存在,且预定状态,能签收;存在,完成状态,不能签收
					boolean isSign=false;
					System.out.println("请输入您要签收的订单编号");
					int signNo=input.nextInt();
					for(int j=0;j<names.length;j++){
						if(names[j]!=null&&states[j]==0&&j==signNo-1){
							//有订单信息,且该订单未签收
							isSign=true;
							states[j]=1;
							System.out.println("订单签收成功");
						}else if(names[j]!=null&&states[j]==1&&j==signNo-1){
							//有订单信息,但该订单已经签收
							isSign=true;
							System.out.println("您选择的订单已经签收,不能再次签收");
						}
					}if(!isSign){
						System.out.println("您选择的订单不存在");
					}
					break;
				case 4:
					System.out.println("********删除订单***********");
					//删除之前,要先判断订单是否存在,
					//false-不存在,不能删除:true-存在,且预定状态,不能删除;存在,完成状态,删除
					boolean isDelete=false;
					System.out.println("请输入您要删除的订单编号");
					int deleteNo=input.nextInt();
					for(int j=0;j<names.length;j++){
						if(names[j]!=null&&states[j]==0&&j==deleteNo-1){
							//有订单信息,且该订单未签收
							isDelete=true;
							System.out.println("您签收的订单未签收,不能删除");
							
						}else if(names[j]!=null&&states[j]==1&&j==deleteNo-1){
							//有订单信息,但该订单已经签收
							isDelete=true;
							//但是订单状态为已完成,所以可以删除
							//找到删除订单的位置下标i,把i后面的元素依次往前移动,最后一个数组要制空
				
							for(int k=j;k<names.length-1;k++){
								names[k]=names[k+1];
								disMsg[k]=disMsg[k+1];
								times[k]=times[k+1];
								addresses[k]=addresses[k+1];
								sumPrices[k]=sumPrices[k+1];
								states[k]=states[k+1];
							}
							//注意是length-1,length的话会越界
							
							names[names.length-1]=null;
							disMsg[names.length-1]=null;
							times[names.length-1]=0;
							addresses[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("********我要点赞***********");
					//输出菜品信息
					System.out.println("请输入你要点赞的菜品序号:");
					System.out.println("序号\t菜名\t单价");
					for(int j=0;j<disNames.length;j++){
						String praise=(praiseNums[j]==0)?"":praiseNums[j]+"赞";
						System.out.println((j+1)+"\t"+disNames[j]+"\t"+prices[j]+"\t"+praise);
					}
					int praiseNum=input.nextInt();
					while(praiseNum<1||praiseNum>disNames.length){
						System.out.println("请输入正确的菜品序号");
						praiseNum=input.nextInt();
					}
					praiseNums[praiseNum-1]++;
					break;
				case 6:
					flag=true;
					//退出系统
					break;
				default:
					flag=true;
					//退出系统
					break;
			}
			if(!flag){
				System.out.println("请输入0返回");
				num=input.nextInt();
			}else{
				break;
			}
		} while (num==0);
		System.out.println("感谢使用吃货联盟订餐系统");
	} finally {
		input.close();
	}
}

}
二.部分运行结果
在这里插入图片描述在这里插入图片描述在这里插入图片描述
三.debug
1.程序调试到订餐功能时,在控制台输入经常没办法正常输入,刚开始还以为是自己控制输入的代码类型不匹配导致的,后来发现并没有不匹配,打电话问同学才知道myeclipse本身的控制台对中文输入不兼容,要输入中文必须得调整光标,而且中文输入法的数字和英文输入法的数字也是不一样的。
2.还有比较常出现的错误就是数组下标越界问题,在使用.length方法时,经常没考虑到是否要-1,就越界了。

发布了35 篇原创文章 · 获赞 3 · 访问量 555

猜你喜欢

转载自blog.csdn.net/biaogegegege1/article/details/104680558