用Java做一个吃货联盟订餐系统 详细项目实战介绍

2021-08-20 11:55:41 浏览数 (3337)

一、前言

刚刚学完java基础入门,主要学习Java基本环境搭建,定义变量、选择结构,循环结构、数组等。本阶段结束尝试接触此次吃货联盟订餐系统,第一次敲这么长的代码,后面多见识见识应该就好了,多加努力啊!

吃货联盟订餐系统包含的功能:我要订餐、查看餐袋、签收订单、删除订单、我要点赞、退出系统

二、基本业务分析

我要订餐

1.输入订餐人姓名

2.将所有的菜品进行展示

3.输入要订的菜品序号

4.输入要订的菜品份数

5.输入配送时间

6.输入配送地址

7.显示订餐信息

查看餐袋

1.直接展示所有的订单信息

我要签收

1.展示所有的订单信息

2.输入要签收的订单序号

3.如果已经完成不允许重复签收

4.如果未完成则可以进行签收

5.展示签收成功

删除订单

1.展示所有的订单信息

2.输入要删除的订单序号

3.如果未完成(已预订)则不允许删除

4.如果已完成可以进行订单删除

5.展示删除成功

我要点赞

1.展示所有的菜品信息

2.输入点赞的菜品序号

3.提示点赞成功

退出系统

1.提示结束语

2.执行程序退出

三、完整代码

public class OrderingMsg {

	public static void main(String[] args) {
		//初始化数据
		//数据主体:一组订单信息
		String[] names = new String[4];         //订餐人姓名
		String[] dishMegs = new String[4];      //所选菜品
		int[] times = new int[4];               //送餐时间
		String[] addresses = new String[4];       //送餐地址
		int[] states = new int[4];               //订单状态:0 已预购 1 已完成
		double[] sumPrices = new double[4];     //总金额
		
		//初始化两个订单信息
		names[0] = "盖伦";
		dishMegs[0] = "红烧带鱼 2份";
		times[0] = 3;
		addresses[0] = "德玛西亚";
		sumPrices[0] = 76.0;
		states[0] = 1;
		
		names[1] = "拉克丝";
		dishMegs[1] = "红烧带鱼 1份";
		times[1] = 10;
		addresses[1] = "德玛西亚";
		sumPrices[0] = 20;
		
		//供选择的菜品信息
		String[] dishNames = {"红烧带鱼","鱼香肉丝","时令蔬菜"};
		//菜品单价
		double[] prices = new double[] {38.0,20.0,10};
		int[] praiseNums = new int[3];
		Scanner input = new Scanner(System.in);
		//用户输入0返回主菜单,否则退出系统
		int num = -1;
		//标记用户是否提出系统 true:退出系统
		boolean isExit = false;
		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();
		    //记录用户选择的功能编号
		    boolean isAdd = false;
		    //找到要签收的订单
		    boolean isSignFind = false;
		    //找到要删除的订单
		    boolean isDelFind = false;
		    //根据用户选择的功能编号执行响应功能
		    switch (choose) {
			
		    case 1:
		    	//我要订餐
				System.out.println("*********我要订餐*********");
				//循环展示菜单
				for (int j = 0; j <names.length; j++) {
					//找到第一个空位置,可以添加订单信息
					if(names[j]==null) {
						//标记位置,可以订餐
						isAdd =true;
						System.out.println("请输入订餐人的姓名:");
						String name = input.next();
						//显示供选择的菜品信息
						System.out.println("序号"+"	"+"菜名"+"	"+"单价");
						for (int i = 0; i < dishNames.length; i++) {
							String price = prices [i] +"元";
							String priaiseNum =(praiseNums[i])>0?praiseNums[i]+"赞":"";
							System.out.println((i+1)+"	"+dishNames[i]+"	"+price+"	"+priaiseNum);
						}
						//用户点菜
						System.out.println("请选择您要点的菜品编号:");
						int chooseDish = input.nextInt();
						System.out.println("请选择您需要的份数:");
						int number = input.nextInt();
					 String  dishMeg =	dishNames[chooseDish-1]+""+number+"份";
					 double sumPrice = prices[chooseDish-1]*number;
					 //餐费满50元,免送餐费10元
					 double deliCharge =(sumPrice>=50)?0:6;
					 System.out.println("请输入送餐时间(送餐时间是10点至20点间整点送餐:)");
					 int time = input.nextInt();
					 while (time<10||time>20) {
						 System.out.println("您输入有误,请输入10~20间的整数!");
						 time = input.nextInt();
					 }
					 System.out.println("请输入送餐地址:");
					 String address =input.next();
					 //无需添加状态,默认是0,即已预订状态.
					 System.out.println("订餐成功!");
					 System.out.println("您订的是:"+dishMeg);
					 System.out.println("送餐时间是:"+time+"点");
					 System.out.println("餐费:"+sumPrice+"元,送餐费"+deliCharge+"元,总计:"+(sumPrice+deliCharge)+"元");
					 //添加数据
					 names[j]=name;
					 dishMegs[j] =dishMeg;
					 times[j] =time;
					 addresses[j] =address;
					 sumPrices[j] =sumPrice+deliCharge;
					 break;
					}
				}
				if(!isAdd) {
					System.out.println("对不起,您的餐袋已满!");
				}
		    	break;
		    case 2:
		    	 //查看餐袋
				System.out.println("*********查看餐袋**********");
				System.out.println("序号	订餐人	餐品信息		送餐时间		总金额	订单状态");
				for (int i = 0; i < names.length; i++) {
					//查看餐袋中的内容,如果是空就跳出,不在查看
					if (names[i]==null) {
						String state = (states[i]==0)?"已预定":"已完成";
						String data = times[i]+"日";
						String sumPrice = sumPrices[i]+"元";
						System.out.println((i+1)+"	"+names[i]+"	"+dishMegs[i]+"	"+addresses[i]+"	"+sumPrice+"	"+state);
					}
				}
		    	break;
		    case 3:
		    	//签收订单
		    	System.out.println("*********签收订单**********");
		    	System.out.println("请选择要签收的订单序号:");
		    	int signOrder = input.nextInt();
		    	for (int i = 0; i < names.length; i++) {
					//状态为已预定,序号为用户输入的订单序号:可签收
		    		//状态为已完成,序号为用户输入订单序号:不可签收
		    		if (names[i]!=null&&states[i]==1&&signOrder==i+1) {
						System.out.println("您选择的订单已完成签收,不能再次签收");
						isSignFind = true;
					}
				}
		    	//未找到的订单序号:不可签收
		    	if (!isSignFind) {
					System.out.println("您选择的订单不存在!");
				}
		    	break;
		    case 4:
		    	//删除订单
		    	System.out.println("*********删除订单**********");
		    	System.out.println("请输入要删除的订单序号:");
		    	int delId = input.nextInt();
		    	for (int i = 0; i < names.length; i++) {
					//状态值为已完成 选侯志为用户输入的序号:可删除
		    		//状态值为已预定 序号值为用户输入的序号:不可删除
		    		if (names[i]!=null&&states[i]==1&&delId==i+1) {
						isDelFind = true;
						//执行删除操作:删除位置后的元素依次前移
						for (int j = delId+1; j < names.length-1; j++) {
							names[j] = names[j+1];
							dishMegs[j] = dishMegs[j+1];
							times[j] = times[j+1];
							addresses[j] = addresses[j+1];
							states[j] = states[j+1];
						}
						//最后一位清空
						names[names.length-1] = null;
						dishMegs[dishMegs.length-1] = null;
						times[names.length] = 0;
						addresses[names.length-1] = null;
						states[names.length-1] = 0;
						System.out.println("删除订单成功!");
						break;
					}else if (names[i]!=null&&states[i]==0&&delId==i+1) {
						System.out.println("您选择的订单未签收,不能删除!");
						isDelFind = true;
						break;
					}
				}
		    	//未找到该序号的订单,不能删除
		    	if (isDelFind) {
					System.out.println("您要删除的订单不存在!");
				}
		    	break;
		    case 5:
		    	//我要点赞
		    	System.out.println("*********我要点赞**********");
		    	//显示菜品信息
		    	System.out.println("序号"+"	"+"菜名"+"	"+"单价");
		    	for (int i = 0; i < dishNames.length; i++) {
					String price = prices[i]+"元";
					String praiseNum = (praiseNums[i])>0?praiseNums[i]+"赞":"";
					System.out.println((i+1)+"	"+dishNames[i]+"	"+price+"	"+praiseNum);
				}
		    	System.out.println("请选择您要点赞的菜品序号:");
		    	int praiseNum = input.nextInt();
		    	praiseNums[praiseNum-1]++;   //点赞数+1
		    	System.out.println("点赞成功");
		    	break;
		    case 6:
		    	//退出系统
		    	isExit = true;
		    	break;
		    	default:
		    		//退出系统
		    		isExit = true;
		    	    break;
		    	    
	}
		    if (isExit) {
				System.out.println("返回0输出:");
				num = input.nextInt();
			}else {
				break;
			}
        }while (num==0);
		System.out.println("感谢使用,欢迎下次光临");
   }
}

四、有关eclipse的快捷键

1.补全代码的声明:alt + /

2.快速修复: ctrl + 1

3.批量导包:ctrl + shift + o

4.使用单行注释:ctrl + /

5.使用多行注释: ctrl + shift + /

6.取消多行注释:ctrl + shift +

7.复制指定行的代码:ctrl + alt + down 或 ctrl + alt + up

8.删除指定行的代码:ctrl + d

9.上下移动代码:alt + up 或 alt + down

10.切换到下一行代码空位:shift + enter

11.切换到上一行代码空位:ctrl + shift + enter

12.如何查看源码:ctrl + 选中指定的结构 或 ctrl + shift + t

13.退回到前一个编辑的页面:alt + left

14.进入到下一个编辑的页面(针对于上面那条来说的):alt + right

15.光标选中指定的类,查看继承树结构:ctrl + t

16.复制代码: ctrl + c

17.撤销: ctrl + z

18.反撤销: ctrl + y

19.剪切:ctrl + x

20.粘贴:ctrl + v

21.保存: ctrl + s

22.全选:ctrl + a

23.格式化代码: ctrl + shift + f

24.选中数行,整体往后移动:tab

25.选中数行,整体往前移动:shift + tab

26.在当前类中,显示类结构,并支持搜索指定的方法、属性等:ctrl + o

27.批量修改指定的变量名、方法名、类名等:alt + shift + r

28.选中的结构的大小写的切换:变成大写: ctrl + shift + x

29.选中的结构的大小写的切换:变成小写:ctrl + shift + y

30.调出生成 getter/setter/构造器等结构: alt + shift + s

31.显示当前选择资源(工程 or 文件)的属性:alt + enter

32.快速查找:参照选中的 Word 快速定位到下一个 :ctrl + k

33.关闭当前窗口:ctrl + w

34.关闭所有的窗口:ctrl + shift + w

35.查看指定的结构使用过的地方:ctrl + alt + g

36.查找与替换:ctrl + f

37.最大化当前的 View:ctrl + m

38.直接定位到当前行的首位:home

39.直接定位到当前行的末位:end

到这里,本篇关于Java实战练习做一个吃货联盟订餐系统的内容就介绍到此结束了,同时也扩展了一些关于Eclipse工具的一些常用快捷键,希望能够对大家有所帮助。如果你还想要了解更多关于Java实战练习的项目,请多多关注W3Cschool相关内容,也希望大家可以多多支持我们!