综合实战 网上订餐系统——吃货联盟

2023-10-29 15:40

本文主要是介绍综合实战 网上订餐系统——吃货联盟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第一章 绪论
    • 1.1 研究背景与意义
    • 1.2 基本开发技术
    • 1.3 相关技术分析
  • 第二章 需求分析
    • 2.1 主页面
    • 2.2 订单页面
    • 2.3 签收订单页面
    • 2.4 删除订单页面
    • 2.5 点赞页面
    • 2.6 订餐页面
  • 第三章 系统设计
    • 3.1 数据初始化
    • 3.2 主页面
    • 3.3 订单页面
    • 3.4 签收订单页面
    • 3.5 删除订单页面
    • 3.6 点赞页面
    • 3.7 订餐页面
  • 第四章 系统实现与测试
    • 4.1 订餐功能
    • 4.2 查看餐袋
    • 4.3 签收功能
    • 4.4 删除功能
    • 4.5 点赞功能
    • 4.6 功能测试
  • 项目源码

第一章 绪论

1.1 研究背景与意义

如今已进入网络时代,人们的日常生活已离不开网络,人们通过网络购物、看新闻、交友等。只要动动手指,就能送餐上门,网上订餐越来越受到都市年轻人的青睐。现要求开发一个网上订餐系统,需要实现“我要订餐”、“查看餐袋”、“签收订单”、“删除订单”、“我要点赞”和“退出系统”6个功能。项目运行结果如图所示。
在这里插入图片描述

1.2 基本开发技术

开发工具:IntelliJ IDEA,JDK1.8
开发语言:Java

1.3 相关技术分析

项目覆盖的技能点如下:
程序基本概念——程序、变量、数据类型。
使用顺序、选择、循环、跳转语句编写程序。
数组的使用

第二章 需求分析

2.1 主页面

在这里插入图片描述

2.2 订单页面

在这里插入图片描述

2.3 签收订单页面

在这里插入图片描述

2.4 删除订单页面

在这里插入图片描述

2.5 点赞页面

在这里插入图片描述

2.6 订餐页面

在这里插入图片描述

第三章 系统设计

3.1 数据初始化

将商品信息与订单信息定义为数组,为测试考虑暂时把订单上限设置到4个,并初始化三个商品和两个订单。

        //**********1.数据初始化*****************************************************************************************//1.1 商品信息String[] dishNames = new String[]{"红烧带鱼","鱼香肉丝","时令鲜蔬"};double[] prices = new double[]{38.0,22.5,10.0};int[] praiseNums = new int[]{0,0,0};//1.2 订单信息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];double[] sumPrices = new double[4];//1.3 初始化两个订单names[0] = "张晴";dishMegs[0] = "红烧带鱼两份";times[0] = 13;addresses[0] = "天成路207号";states[0] = 1;sumPrices[0] = 76.0;names[1] = "张晴";dishMegs[1] = "鱼香肉丝两份";times[1] = 13;addresses[1] = "天成路207号";states[1] = 0;sumPrices[1] = 45.0;

3.2 主页面

构造整体框架,利用do while让用户能够持续操作,再用Scanner类接受用户的输入信息,用switch case让用户能够达到各个功能页面,并记录几个关键判断初始值,如isExit、isAdd、isSignFind、isDelFind,判断用户是否退出系统、是否可以订餐、是否订单已经签收和是都已经删除。

//********2.主页面***********************************************************************************************Scanner scanner = new Scanner(System.in);int num = -1; //返回菜单标识,返回主页面/退出系统boolean isExit = false; //判断用户是否退出当前系统System.out.println("欢迎来到吃货联盟");do{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 choise = scanner.nextInt();//1.记录是否可以订餐boolean isAdd = false;//2.定义是否已经签收的订单的状态标识;boolean isSignFind = false;//3.定义删除标识boolean isDelFind = false;//利用switch实现用户分支判断switch (choise){case 1:System.out.println("**********我要订餐**********");break;case 2:System.out.println("**********查看餐袋**********");break;case 3:System.out.println("**********签收订单**********");break;case 4:System.out.println("**********删除订单**********");break;case 5:System.out.println("**********我要点赞**********");break;case 6:isExit = true;break;default:isExit = true;break;}if(!isExit){System.out.println("输入0退出");num= scanner.nextInt();}else {break;}}while (num == 0);System.out.println("谢谢,欢迎下次光临");

3.3 订单页面

利用for循环,依次打印数组订单信息中的内容,打印时用\t(制表符)保证格式美观,并用if进行判空,空信息直接跳过,增加运行速度。

 //*******************3.订单页面************************************************************************System.out.println("序号\t订餐人\t\t餐品信息\t送餐日期\t\t送餐地址\t总金额\t订单状态");for(int i = 0;i< names.length;i++){//如果订单不为空if(names[i] != null){String stateStr = (states[i]==0)?"已预定":"已完成";System.out.println((i+1)+"\t"+names[i]+"\t\t"+dishMegs[i]+"\t"+times[i]+"\t\t" +addresses[i]+"\t"+sumPrices[i]+"\t"+stateStr);}}

3.4 签收订单页面

for循环遍历数组,当为用户输入的编号时停止,用if判断订单状态是否为“已预定”,如为是,则将状态改为“已完成”;如为“已完成”,则发出警告并返回主页面。

//*******************4.签收订单页面************************************************************************System.out.println("请选择要签收的订单序号");//获取用户输入的订单序号int signOrderId = scanner.nextInt();for(int i = 0;i< names.length;i++){if(names[i] != null && states[i] == 0 && signOrderId == i+1){//name[i] != null的含义判断如果存在数组中有订单//states[i] == 0 的含义是订单状态为已预定状态//signOrderId == i+1 如果订单列表中某个订单的号的角标+1和用户输入的序号等价//如果符合上述条件,则修改订单状态,由0置1states[i] = 1;isSignFind = true;System.out.println("签收成功");} else if (names[i] != null && states[i] == 1 && signOrderId == i+1) {//如果订单的状态为1System.out.println("您选择的订单已完成签收,不能重复签收");isSignFind = true;}}if(!isSignFind){System.out.println("您选择的订单号不存在");}

3.5 删除订单页面

依旧是for循环遍历订单信息,当订单信息编号与用户输入的一致且订单状态为“已完成”时,删除该信息,将数组后面的信息前移一位,并将数组中最后一位信息置空;如果输入不存在的订单或订单状态为“已预定”,则无法删除订单,弹出警告并返回主页面。

 //*******************5.删除订单页面************************************************************************System.out.println("请输入要删除的订单");int delId = scanner.nextInt();for(int i = 0;i<names.length;i++){if(names[i] != null && states[i] == 1 && delId == i+1){//条件1:存在该订单 条件2:订单状态已完成 条件3:输入的订单号存在于当前订单数据中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];sumPrices[j] = sumPrices[j+1];}//最后一位清空names[names.length-1] = null;dishMegs[names.length-1] = null;times[names.length-1] = 0;addresses[names.length-1] = null;states[names.length-1] = 0;sumPrices[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("您选择的订单不存在");}

3.6 点赞页面

首先先利用for循环遍历商品信息,将其打印在控制台上,然后根据用户输入的菜品序号为其点赞数加一。

  //*******************6.点赞页面************************************************************************System.out.println("序号\t菜名\t\t单价\t\t点赞数");for(int i = 0;i< dishNames.length;i++){System.out.println((i+1)+"\t"+dishNames[i]+"\t"+prices[i]+"\t"+praiseNums[i]);}System.out.println("请输入你要点赞的菜品序号:");int praiseNum = scanner.nextInt();if(praiseNum <= 0 || praiseNum> dishNames.length){System.out.println("您输入的菜品不存在");}else {praiseNums[praiseNum-1]++;System.out.println("点赞成功");}

3.7 订餐页面

先用for循环遍历订单信息,如果订单信息还有空位置则可以继续进行订餐,否则弹出警告。依次让用户输入“订餐人姓名”、“菜品编号”、“菜品数量”、“送餐时间”和“送餐地址”,接着打印用户本次订餐的信息,并将信息添加到数组当中。

 //*******************7.订餐页面************************************************************************for(int i = 0;i< names.length;i++){if(names[i] == null){isAdd = true;System.out.println("请输入订餐人姓名");String name = scanner.next();System.out.println("序号\t菜名\t单价\t点赞数");for(int j = 0;j< dishNames.length;j++){System.out.println((j+1)+"\t"+dishNames[j]+"\t"+prices[j]+"\t"+praiseNums[j]);}//用户点菜System.out.println("请输入点的菜的编号");int chooseDish = scanner.nextInt();System.out.println("请输入需要的份数");int number = scanner.nextInt();String dishMeg = dishNames[chooseDish-1]+number+"份";//菜品总价格double sumPrice = prices[chooseDish-1] * number;//运送费double deliCharget = sumPrice>50?0:6;System.out.println("请输入送餐时间(送餐时间为10点到20点整):");//送餐时间int time = scanner.nextInt();if(time<10 || time>20){System.out.println("您的输入有误,请输入10-20之间的整数");time = scanner.nextInt();}System.out.println("请输入运送地址");//运送地址String address = scanner.next();//打印订餐信息System.out.println("*******订餐成功*******");System.out.println("您订购的是"+dishMeg);System.out.println("运送时间为"+time+"点");System.out.println("餐费"+sumPrice);System.out.println("运送费"+deliCharget);System.out.println("总价格"+(sumPrice+deliCharget));//添加信息到数组中names[i] = name;dishMegs[i] = dishMeg;times[i] = time;addresses[i] = address;states[i] = 0;sumPrices[i] = sumPrice+deliCharget;break;}}if(!isAdd){System.out.println("对不起,您的购物车已满");}

第四章 系统实现与测试

4.1 订餐功能

输入1进入订餐页面,依次输入订餐人姓名、点的菜的编号、点的菜的数量、送餐时间和送餐地址,系统将自动打印本次订餐信息。
在这里插入图片描述
在这里插入图片描述

4.2 查看餐袋

输入2进入查看餐袋页面,系统将显示您所有的订餐信息。
在这里插入图片描述

4.3 签收功能

输入3进入签收订单页面,再输入需要签收的订单,系统将输出“签收成功“。
在这里插入图片描述

4.4 删除功能

输入4进入删除订单页面,再输入需要删除的订单,系统将输出“删除订单成功“。
在这里插入图片描述

4.5 点赞功能

输入5进入我要点赞页面,系统会打印所有的菜品信息,输入你想要点赞的菜品的序号,系统将输出“点赞成功“。

4.6 功能测试

功能模块测试用例预期结果测试结果
主页面输入正确的页面序号跳转到响应的功能模块通过
主页面输入错误的页面序号退出系统通过
订餐功能输入合法的订餐信息订餐成功并打印信息通过
订餐功能输入不合法的菜的编号示意用户并重新输入通过
订餐功能输入不合法的菜的数量示意用户并重新输入通过
订餐功能输入不合法的订餐时间示意用户并重新输入通过
订餐功能再次输入不合法的订餐时间示意用户并重新输入通过
查看餐袋进入查看餐袋页面显示所有订单信息通过
签收订单输入已预定的订单编号签收成功并将订单状态改为已完成通过
签收订单输入已完成的订单编号弹出警告并返回主页面通过
签收订单输入不存在的订单编号弹出警告并返回主页面通过
删除订单输入已完成的订单编号删除成功并将后续所有信息前移一位通过
删除订单输入已预定的订单编号弹出警告并返回主页面通过
删除订单输入不存在的订单编号弹出警告并返回主页面通过
点赞功能输入存在的菜的编号点赞成功并且该菜点赞数加已通过
点赞功能输入不存在的菜的编号点赞失败并且弹出警告通过
退出功能返回主页时输入正确的字符成功返回主页通过
退出功能返回主页时输入错误的字符退出系统通过

项目源码

源码下载地址

这篇关于综合实战 网上订餐系统——吃货联盟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301636

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1