JAVA基础练习项目之吃货联盟

吃货联盟


目录

1.项目需求

2.订餐功能

3.查看功能

4.签收功能

5.删除功能

6.点赞功能

7.项目源码

8.总结


        实现功能:需实现简单的订餐、查看、签收、删除、点赞功能。


1.项目需求

        实现各个模块的简单功能,对数据的建立,对框架的构成进行详细的书写。

2.订餐功能

        缺点(未完成的点):未能单人多点功能

case 1:
				// 判断数组中是否有位置,若有,则进,若无,则说明餐袋已满。
				int numNull = 0;
				for (int i = 0; i < names.length; i++) {
					if (names[i] == null) {
						System.out.println("*****新增订餐*****");
						// 订餐人姓名
						System.out.print("请输入订餐人姓名:");
						names[i] = sc.next();
						// 显示菜单信息
						System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
						// 循环打印菜单
						for (int j = 0; j < dishName.length; j++) {
							System.out.println(
									(j + 1) + "\t\t" + dishName[j] + "\t\t" + dishMoney[j] + "\t\t" + dishLike[j]);
						}
						System.out.print("请选择您要点的菜品编号:");
						int menusNo = sc.nextInt();
						System.out.print("请选择您需要的份数:");
						int menusNum = sc.nextInt();
						dishMegs[i] = dishName[(menusNo - 1)] + " " + menusNum + "份";
						// 送餐时间
						System.out.print("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
						int menusTime = sc.nextInt();
						while (menusTime < 10 || menusTime > 20) {
							System.out.println("不在送餐时间内,请重新输入");
							menusTime = sc.nextInt();
						}
						times[i] = menusTime;
						// 送餐地址
						System.out.print("请输入送餐地址:");
						address[i] = sc.next();
						// 状态(新增时,订单状态位默认)
						states[i] = 0;
						// 总金额(若总金额>50,则价格不变;总金额<50,加收5元送餐费)
						double allMoney = dishMoney[(menusNo - 1)] * menusNum;
						if (allMoney >= 50) {
							sumPrices[i] = allMoney;
						} else {
							sumPrices[i] = allMoney + 5;
						}
						break;
					} else {
						numNull = i;
					}
				}
				if (numNull == names.length - 1) {
					System.out.println("餐袋已满,请及时处理。");
				}

				break;

3.查看功能

			case 2:
				System.out.println("*****查看餐袋*****");
				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 sumPrice = sumPrices[i] + "元";
						String state;
						if (states[i] == 0) {
							state = "已预定";
						} else {
							state = "已完成";
						}
						System.out.println((i + 1) + "\t" + names[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t"
								+ address[i] + "\t" + sumPrices[i] + "\t" + states[i]);
					}
				}

				break;

4.签收功能

			case 3:
				System.out.println("*****签收订单*****");
				// 手动输入需要签收订单的编号
				System.out.print("请选择需要签收的订单序号:");
				int orderNo = sc.nextInt();
				// 如果,订单状态位"已预定",才可以被签收;"已完成"的订单不需要签收
				// states 保存订单状态:0表示已预定,1表示已完成
				for (int i = 0; i < names.length; i++) {
					if (names[i] != null && states[i] == 0 && orderNo == i + 1) {
						states[i] = 1;
						System.out.println("订单签收成功!!!!!");

					} else if (names[i] != null && states[i] == 1 && orderNo == i + 1) {
						System.out.println("该订单已被签收,不能重复签收。。。。。");
					} else if (names[i] == null && orderNo == i + 1) {
						System.out.println("您输入的订单不存在!!!");
					}
				}
				break;

5.删除功能

			case 4:
				System.out.println("*****删除订单*****");
				// 被签收过的才可以删除
				System.out.print("选择您要删除的订单:");
				int delNum = sc.nextInt();// 手动录入需要删除的订单序号
				for (int i = 0; i < names.length; i++) {

					if (names[i] != null && states[i] == 0 && delNum == i + 1) {
						System.out.println("订单尚未签收,不能被删除。。。。。");
					}
					// 会删除代码后全部的订单
					else if (names[i] != null && states[i] == 1 && delNum == i + 1) {
						names[i] = null;
						System.out.println("订单删除成功。。。。。");
						// 删除订单后,以后的元素依次往前移动
						if (names[i] == null) {
							for (int j = i; j < names.length - 1; j++) {
								names[j] = names[j + 1];
								dishMegs[j] = dishMegs[j + 1];
								times[j] = times[j + 1];
								address[j] = address[j + 1];
								sumPrices[j] = sumPrices[j + 1];
								states[j] = states[j + 1];

							}
						}
						// 将最后一位清空
						int endIndex = names.length - 1;
						names[endIndex] = null;
						dishMegs[endIndex] = null;
						times[endIndex] = 0;
						address[endIndex] = null;
						sumPrices[endIndex] = 0;
						states[endIndex] = 0;
					}

					// ----------------------------


				}
				break;

6.点赞功能

        缺点:未能依照订单信息进行点赞功能等。

			case 5:
				System.out.println("*****我要点赞*****");
				System.out.println("序号\t"+"菜名\t"+"单价\t"+"点赞数\t");
				for (int i = 0; i < dishName.length; i++) {			
					System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
				}
				System.out.print("请选择要点赞的菜品编号:");
				int dishLike1 = sc.nextInt();
				dishLike[dishLike1-1]++;
				System.out.println("点赞成功!!!!!");
				System.out.println();
				//显示点赞后的菜单
				for (int i = 0; i < dishName.length; i++) {			
					System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
				}
				break;

7.项目源码

package ch07;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 
 * @author 94063
 * @time 2023/6/2
 *
 */
public class Test {

	public static void main(String[] args) {
		// 吃货联盟订餐系统
		Scanner sc = new Scanner(System.in);

		// 定义各类数组,最多接收4条订单
		String names[] = new String[4];// 保存订餐人的姓名
		String dishMegs[] = new String[4];// 保存所选信息,包括菜品名称及份数
		int times[] = new int[4];// 保存送餐时间
		String address[] = new String[4];// 保存送餐地址
		int states[] = new int[4];// 保存订单状态:0表示已预定,1表示已完成
		double sumPrices[] = new double[4];// 保存订单总金额

//------------------------------------------------------------------------	
		// 菜品信息
		String dishName[] = new String[] { "红烧带鱼", "鱼香肉丝", "麻婆豆腐" };// 菜品名称
		double dishMoney[] = new double[] { 38.0, 20.0, 10.0 };// 菜品单价
		int dishLike[] = new int[3]; // 菜品点赞

//------------------------------------------------------------------------
		boolean isExit = false; // 是否退出系统,true为退出

		int num = -1;// 循环赋初值
		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.print("请选择:");
//------------------------------------------------------------------------
			int choose = sc.nextInt();// 手动输入选择,进入相对应的界面
			switch (choose) {
			case 1:
				// 判断数组中是否有位置,若有,则进,若无,则说明餐袋已满。
				int numNull = 0;
				for (int i = 0; i < names.length; i++) {
					if (names[i] == null) {
						System.out.println("*****新增订餐*****");
						// 订餐人姓名
						System.out.print("请输入订餐人姓名:");
						names[i] = sc.next();
						// 显示菜单信息
						System.out.println("序号\t\t菜名\t\t单价\t\t点赞数");
						// 循环打印菜单
						for (int j = 0; j < dishName.length; j++) {
							System.out.println(
									(j + 1) + "\t\t" + dishName[j] + "\t\t" + dishMoney[j] + "\t\t" + dishLike[j]);
						}
						System.out.print("请选择您要点的菜品编号:");
						int menusNo = sc.nextInt();
						System.out.print("请选择您需要的份数:");
						int menusNum = sc.nextInt();
						dishMegs[i] = dishName[(menusNo - 1)] + " " + menusNum + "份";
						// 送餐时间
						System.out.print("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
						int menusTime = sc.nextInt();
						while (menusTime < 10 || menusTime > 20) {
							System.out.println("不在送餐时间内,请重新输入");
							menusTime = sc.nextInt();
						}
						times[i] = menusTime;
						// 送餐地址
						System.out.print("请输入送餐地址:");
						address[i] = sc.next();
						// 状态(新增时,订单状态位默认)
						states[i] = 0;
						// 总金额(若总金额》50,则价格不变;总金额《50,加收5元送餐费)
						double allMoney = dishMoney[(menusNo - 1)] * menusNum;
						if (allMoney >= 50) {
							sumPrices[i] = allMoney;
						} else {
							sumPrices[i] = allMoney + 5;
						}
						break;
					} else {
						numNull = i;
					}
				}
				if (numNull == names.length - 1) {
					System.out.println("餐袋已满,请及时处理。");
				}

				break;
			case 2:
				System.out.println("*****查看餐袋*****");
				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 sumPrice = sumPrices[i] + "元";
						String state;
						if (states[i] == 0) {
							state = "已预定";
						} else {
							state = "已完成";
						}
						System.out.println((i + 1) + "\t" + names[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t"
								+ address[i] + "\t" + sumPrices[i] + "\t" + states[i]);
					}
				}

				break;
			case 3:
				System.out.println("*****签收订单*****");
				// 手动输入需要签收订单的编号
				System.out.print("请选择需要签收的订单序号:");
				int orderNo = sc.nextInt();
				// 如果,订单状态位"已预定",才可以被签收;"已完成"的订单不需要签收
				// states 保存订单状态:0表示已预定,1表示已完成
				for (int i = 0; i < names.length; i++) {
					if (names[i] != null && states[i] == 0 && orderNo == i + 1) {
						states[i] = 1;
						System.out.println("订单签收成功!!!!!");

					} else if (names[i] != null && states[i] == 1 && orderNo == i + 1) {
						System.out.println("该订单已被签收,不能重复签收。。。。。");
					} else if (names[i] == null && orderNo == i + 1) {
						System.out.println("您输入的订单不存在!!!");
					}
				}
				break;
//------------------------------------------------------------------------------				
			case 4:
				System.out.println("*****删除订单*****");
				// 被签收过的才可以删除
				System.out.print("选择您要删除的订单:");
				int delNum = sc.nextInt();// 手动录入需要删除的订单序号
				for (int i = 0; i < names.length; i++) {

					if (names[i] != null && states[i] == 0 && delNum == i + 1) {
						System.out.println("订单尚未签收,不能被删除。。。。。");
					}
					// 会删除代码后全部的订单
					else if (names[i] != null && states[i] == 1 && delNum == i + 1) {
						names[i] = null;
						System.out.println("订单删除成功。。。。。");
						// 删除订单后,以后的元素依次往前移动
						if (names[i] == null) {
							for (int j = i; j < names.length - 1; j++) {
								names[j] = names[j + 1];
								dishMegs[j] = dishMegs[j + 1];
								times[j] = times[j + 1];
								address[j] = address[j + 1];
								sumPrices[j] = sumPrices[j + 1];
								states[j] = states[j + 1];

							}
						}
						// 将最后一位清空
						int endIndex = names.length - 1;
						names[endIndex] = null;
						dishMegs[endIndex] = null;
						times[endIndex] = 0;
						address[endIndex] = null;
						sumPrices[endIndex] = 0;
						states[endIndex] = 0;
					}

					// ----------------------------


				}
				break;
// --------------------------------------------------------
			case 5:
				System.out.println("*****我要点赞*****");
				System.out.println("序号\t"+"菜名\t"+"单价\t"+"点赞数\t");
				for (int i = 0; i < dishName.length; i++) {			
					System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
				}
				System.out.print("请选择要点赞的菜品编号:");
				int dishLike1 = sc.nextInt();
				dishLike[dishLike1-1]++;
				System.out.println("点赞成功!!!!!");
				System.out.println();
				//显示点赞后的菜单
				for (int i = 0; i < dishName.length; i++) {			
					System.out.println((i+1)+"\t"+dishName[i]+"\t"+dishMoney[i]+"\t"+dishLike[i]);
				}
				break;
// --------------------------------------------------------
			case 6:
				System.out.println("谢谢使用,欢迎下次光临!!!!!");
				isExit = true;
				break;
			default:
				System.out.println("谢谢使用,欢迎下次光临!!!!!");
				isExit = true;
				break;
			}

			if (!isExit) {
				System.out.print("输入0返回:");
				num = sc.nextInt();
			} else {
				break;
			}

		} while (num == 0);

//-------------------------------------------------------------------------

	}

}

8.总结

        项目仅实现书中所要求的简单功能,参照目前已知的一些软件来看,实用性较差,主要锻炼思维逻辑性,未完成的功能有如下几点:

  1. 订餐功能里,单人多点等功能未实现
  2. 删除订单后,需要有回收箱(该功能与后面点赞相关联)
  3. 点赞共能需在已完成的订单中进行,未购买的菜品等不可点赞等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚人钊呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值