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

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 功能测试

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

项目源码

源码下载地址

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


原文地址:https://blog.csdn.net/m0_48081612/article/details/130971291
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/301636

相关文章

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实