吃货联盟订餐系统

  • 项目需求
  • 项目环境准备
  • 项目覆盖技能点
  • 阶段划分
  • 难点分析
    • 使用数组对象保存订单信息
    • 访问订单信息
    • 删除订单信息
    • 计算订单的总金额
  • 项目实现思路
    • 数据初始化
    • 实现菜单切换
    • 实现查看餐袋
    • 实现我要订餐
    • 实现签收订单
    • 实现删除订单
    • 实现我要点赞
  • 代码展示

项目需求

现今已进入网络时代,人们的日常生活已离不开网络,如网上购物、看新闻、交友等。“只要点点手指,就能送餐上门”,网上订餐越来越受到都是年轻人的青睐。先要求开发一个网上订餐系统,需要实现我要订餐、查看餐袋、签收订单、删除订单、我要点赞和退出系统6个功能。项目运行结果如下所示:
欢迎使用“吃货联盟订餐系统”
***************************************************、
1、我要订餐
2、查看餐袋
3、签收订单
4、删除订单
5、我要点赞
6、退出系统
****************************************************、

项目环境准备

完成“吃货联盟订餐系统”,对于开发环境的要求如下:
开发工具:MyEclipse,JDK(我用的是IDEA和JDK1.8.0_241)
开发语言:java

项目覆盖技能点

程序基本概念:程序、变量、数据类型
流程控制:顺序、选择、循环、跳转语句
数组

阶段划分

第一阶段:分析数据主体(重难点)
第二阶段:分析并完成整体框架(重难点)
第三阶段:分析并完成退出功能
第四阶段:分析并完成订餐功能
第五阶段:分析并完成查看餐袋功能
第六阶段:分析并完成签收订单功能
第七阶段:分析并完成删除功能(重难点)
第八阶段:分析总完成我要点赞功能

难点分析

使用数组对象保存订单信息

根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜名及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以使用数组来保存多条相同类型的信息。定义6个分组分别保存订单的订餐人姓名、选择的菜品及份数、送餐时间、送餐地址、订单状态、总金额,各数组中下标相同的元素组成一条订单信息。

访问订单信息

访问各数组中第i+1条订单信息可采用如下方式:
订餐人姓名:name[i];
所选菜品信息:dishMegs[i];
送餐时间:time[i];
送餐地址:addresses[i];
订单状态:states[i];
订单的总金额:sumPrices[i];

删除订单信息

若数组中下标为delld的元素虚删除,后面的元素则依次前移一位,即后一位的数据覆盖前一位的数据。

计算订单的总金额

本项目中,在接收到订单的菜品编号和份数之后,通过“菜品编号-1”得到该菜品单价的保存位置,再利用“单价*份数”公式计算出预定菜品的总金额。同时,按“菜品名+份数”格式,使用“+”运算符将菜品名称和预定份数用字符串保存。

项目实现思路

数据初始化

(1)创建OrderingMgr类,在main()方法定义6个数组分别存储6类订单信息:订单人姓名(name)、选择菜品信息(dishMegs)、送餐时间(times)、送餐地址(addresses)、订单状态(states)、总金额(sumPrice)。
(2)创建3个数组,用来存储3中菜品的名称、单价和点赞数等信息。

实现菜单切换

执行程序,输出系统主菜单。用户根据显示的主菜单,输入功能编号实现菜单的显示和菜单切换。
(1)当输入1~5时,输出相关的菜单项信息。
(2)显示“输入0返回:”。输入0,则返回主菜单;否则,退出系统,终止程序的运行,输出提示信息“谢谢使用,欢迎下次光临!”。

实现查看餐袋

遍历系统中已有的订单,并逐条显示输出,内容包括序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、总金额、订单状态(已预订或已完成)。

实现我要订餐

为用户显示系统中提供的菜品信息,获得订餐人信息,形成订单。每条订单包含如下信息:
(1)订餐人姓名:要求用户输入。
(2)选择菜品及份数:显示3个公选择菜品的序号、名称、单价、点赞数,提示用户输入要选择的菜品序号及份数。
(3)送餐时间:当天10:00-20:00件整点送餐,要求用户输入10~20商务整数,输入有误,重新输入。
(4)送餐地址:要求用户输入。
(5)状态:订单的当前状态。订单有两种状态,0为已预订(默认状态),1为已完成(订单已签收)。
(6)总金额:订单总金额。总金额=菜品单价*份数+送餐费。其中,当单订单单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。

实现签收订单

送餐完成后,要将用户签收订单的状态由“已预订”修改为“已完成”。业务要求如下:
(1)如果订单的当前状态为:“已预订”且数组下标为用户输入的订单序号减1,就签收。(2)如果订单的当前的状态为“已完成”且数组下标为用户输入的订单序号间1,不可签收。
控制台接收要签收的订单序号。利用for循环结构遍历全部订单,利用if选择结构判断names数组中订餐人姓名是否为null,订单状态是否为已预定且数组下标是指定订单序号减1.如果条件成立,该订单的状态值修改为1(即已完成)。

实现删除订单

我们可以删除系统中处于“已完成”状态的订单,具体要求如下:
(1)接收要删除的订单序号。
(2)如果指定订单的状态为“已完成”且数组下标值为用户输入的订单序号减1,执行删除操作。
(3)如果指定订单的状态为“已预订”且数组下标值为用户输入的订单序号减1,不能删除。
执行删除操作,其他情况给出相应提示信息。
分步实现以下功能:
(1)查找订单序号相符、订单名称不为空,且状态为“已完成”的订单。
(2)执行删除该序号订单的操作,即后一位元素覆盖前一位元素,最后一位清空。
(3)如果指定订单的状态是“已预订”,则不允许删除。

实现我要点赞

选择执行“我要点赞”菜单项,界面显示菜品序号、菜品名、单价、点赞数,提示用户输入要点赞的菜品序号。

代码展示

import java.util.Scanner;
public class Chihuo {public static void main(String[] args) {final double NO_SEND_MONEY = 80;String[] dishes = {"东坡肉", "地锅鸡", "水煮鱼", "佛跳墙"};double[] prices = {45, 38, 28, 99};int[] like = {11, 22, 33, 44};int choseNum;String[][] bills = new String[1024][];String name = null;int pcs = 0;//份数int time = 0;String address = null;String status = null;Scanner sc = new Scanner(System.in);int chose = 0;do {System.out.println("欢迎使用吃货联盟订餐系统");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("请选择:");chose = sc.nextInt();switch (chose) {case 1:System.out.println("****我要订餐****");System.out.print("请输入订餐人姓名:");name = sc.next();System.out.println("序号\t菜品\t单价");for (int i = 0; i < dishes.length; i++) {System.out.println(i + 1 + "\t" + dishes[i] + "\t" + prices[i] + "元");}do {System.out.print("请选择您要点的菜品编号:");choseNum = sc.nextInt();if (choseNum > 0 && choseNum <= dishes.length) {break;} else {System.out.println("您的输入有误,重新输入!");}} while (true);do {System.out.print("请选择您需要的份数");pcs = sc.nextInt();if (pcs > 0) break;System.out.println("份数不能小于0,重新输入!");} while (true);do {System.out.print("请输入送餐的时间(10点至20点整点送餐):");time = sc.nextInt();if (time >= 10 && time <= 20) break;System.out.println("输入有误,重新输入!");} while (true);System.out.print("请输入送餐地址:");address = sc.next();System.out.print("订餐成功!");System.out.print("您订的是:" + dishes[choseNum - 1]);System.out.print("送餐时间:" + time + "点");double dishPrice = prices[choseNum - 1] * pcs;int sendMoney = 0;if (dishPrice < NO_SEND_MONEY) {sendMoney = 6;}double totalPrice = dishPrice + sendMoney;System.out.print("餐费:" + dishPrice + "元,送餐费" + sendMoney + "元,总计" + totalPrice + "元");//插入订单,遍历订单,如果为空,则插入for (int i = 0; i < bills.length; i++) {if (bills[i] == null) {bills[i] = new String[7];bills[i][0] = name;bills[i][1] = dishes[choseNum - 1] + " " + pcs + "份";bills[i][2] = time + "点";bills[i][3] = address;bills[i][4] = totalPrice + "元";bills[i][5] = "已预订";break;}}System.out.print("输入0返回");chose = sc.nextInt();break;case 2:System.out.println("****查看餐袋****");System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");for (int i = 0; i < bills.length; i++) {if (bills[i] == null) {break;}System.out.println(i + 1 + "\t" + bills[i][0] + "\t" + bills[i][1] + "\t" + bills[i][2] + "\t" + bills[i][3] + "\t" + bills[i][4] + "\t" + bills[i][5]);}System.out.print("输入0返回");chose = sc.nextInt();break;case 3:System.out.println("****签收订单****");if (bills[0] == null) {System.out.println("订单为空,不可签收!");System.out.print("输入0返回:");chose = sc.nextInt();break;}System.out.println("序号\t订餐人\t餐品信息\t总金额\t订单状态");int i = 0;for (; i < bills.length; i++) {if (bills[i] == null) {break;}System.out.println(i + 1 + "\t" + bills[i][0] + "\t" + bills[i][1] + "\t" + bills[i][4] + "\t" + bills[i][5]);}int signNum;do {System.out.println("请选择要签收的订单编号:");signNum = sc.nextInt();if (signNum > 0 && signNum <= i) break;System.out.println("订单不存在,重新输入!!");} while (true);if (bills[signNum - 1][5].equals("已完成"))System.out.println("订单已经完成签收,不需要重复签收");elsebills[signNum - 1][5] = "已完成";System.out.print("输入0返回:");chose = sc.nextInt();break;case 4:System.out.println("****删除订单****");if (bills[0] == null) {System.out.println("订单为空,不可删除!");System.out.print("输入0返回:");chose = sc.nextInt();break;}System.out.println("序号\t订餐人\t餐品信息\t总金额\t订单状态");int k = 0;for (; k < bills.length; k++) {if (bills[k] == null) {break;}System.out.println(k + 1 + "\t" + bills[k][0] + "\t" + bills[k][1] + "\t" + bills[k][4] + "\t" + bills[k][5]);}int delNum;do {System.out.println("请选择要删除的订单编号:");delNum = sc.nextInt();if (bills[0] == null) break;{}if (delNum > 0 && delNum <= k) break;System.out.println("订单不存在,重新输入!!");} while (true);//未完成的订单不能删除//删除订单需要考虑选择的订单删除后,后面的订单需要前移if (!bills[delNum - 1][5].equals("已完成"))System.out.println("未完成的订单不能删除!");else {for (int s = delNum - 1; bills[s] != null; s++) {if (delNum == bills.length) {bills[delNum - 1] = null;} else {bills[s] = bills[s + 1];}}System.out.println("删除完成!");}System.out.print("输入0返回");chose = sc.nextInt();break;case 5:System.out.println("****我要点赞****");System.out.println("序号\t菜品\t\t单价\t点赞数");for (int j = 0; j < dishes.length; j++) {System.out.println(j + 1 + "\t" + dishes[j] + "\t" + prices[j] + "元" + "\t" + like[j]);}int likeNum;do {System.out.println("请选择要点赞的菜品:");likeNum = sc.nextInt();if (likeNum > 0 && likeNum <= like.length) break;System.out.println("没有这个菜品,请重新输入!");} while (true);like[likeNum - 1]++;System.out.println("谢谢点赞");System.out.print("输入0返回");chose = sc.nextInt();break;}} while (chose == 0);System.out.println("谢谢使用,欢迎下次光临!");}
}

输出结果:

大数据学习——Java项目实战-吃货联盟订餐系统相关推荐

  1. java案例之吃货联盟订餐系统

    java案例之吃货联盟订餐系统 今天是本博主第一次发博客记录的学习之旅,如有错误欢迎大家指出在下的失误呀, 废话不多说上案例!! 吃货联盟具体的功能如图6个功能所示 整体的开发思路如下 订单类主要有六 ...

  2. 小实战项目之——吃货联盟订餐系统

    系统概述: 我要订餐 查看餐袋 签收订单 删除订单 我要点赞 退出系统 下面是实例代码: import java.util.Scanner;public class OrderFoodSys {pub ...

  3. Java基础之吃货联盟订餐系统Version1.0

    注意:此项目为刚学完Java基础至数组的入门程序. 吃货联盟订餐系统Version1.0是在数组的基础上完成的一个小项目,由于只是运用数组实现了一些简单的功能, 所以我管它叫Version1.0,即1 ...

  4. 吃货联盟订餐系统(查看餐袋功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  5. 吃货联盟订餐系统全功能(点赞功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  6. 吃货联盟订餐系统(签收订单功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  7. 吃货联盟订餐系统(删除订单功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  8. 吃货联盟订餐系统(订餐功能实现)

    import java.util.Scanner; //吃货联盟订餐系统 public class OrderFoodSys {     public static void main(String[ ...

  9. Day8吃货联盟订餐系统

    import java.util.Scanner; /** 吃货联盟订餐系统 / public class ChiHuoLianMeng { public static void main(Strin ...

最新文章

  1. 自行车车把会吧车刮坏吗_花10分钟即可开始使用车把
  2. 【PAT】1009. Product of Polynomials (25)
  3. sql判断字段是否为空
  4. 哆啦A梦消除连连看游戏源码项目完整版
  5. 线程安全退出 VS PostMessage,SendMessage的区别
  6. JEECG社区招募新人啦
  7. canvas+howler.js 解决同页面视频、音频同时播放问题
  8. Python程序打包成.exe文件(弹窗恶搞小程序附源码)
  9. C++函数与java函数菜鸟级的对比理解
  10. 美团知识图谱问答技术实践与探索
  11. 影院售票系统 php源码,影院售票系统
  12. VS2013 ADO.NET 连接 SQLEXPRESS
  13. autocad.net-图片打印合成
  14. jenkins+svn+脚本实现CIDI
  15. idea安装findBugs 报idea运行项目报错Cannot run program
  16. 【安全牛学习笔记】Kali Linux基本工具
  17. 5-20 打印九九口诀表 (15分)
  18. onedrive教育版登录不上
  19. 转载:BP(反向传播算法)公式推导及例题解析
  20. python禅怎么读_python学习——python之禅

热门文章

  1. 小学计算机室均衡解说词,迎接县均衡化国家验收学校解说词(2017.11.14)
  2. STM32 SystemCoreClockUpdate()函数详解
  3. EXCEL计算公式之:excel跨文件、跨Sheet的合并计算公式
  4. 敢问路在何方。。。。
  5. 安装opencv失败解决
  6. 诺基亚梦醒 明年推双核手机和Symbian升级
  7. PS橡皮擦的小圆圈不见了
  8. ssm+jsp计算机毕业设计海鲜商行信息管理系统80scc(程序+lw+源码+远程部署).
  9. Javascript 字节数组与Number类型的转化
  10. qq图标在html里显示不出来,Win7系统任务栏通知区域没有显示QQ图标怎么办