当前位置: 首页 > news >正文

UML外卖系统报告(包含具体需求分析)

在这里插入图片描述

1 系统背景

随着互联网技术的快速发展,外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制,而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来,实现了点餐、支付、配送等关键环节的无缝协作。

外卖订餐系统的目标是简化人们的订餐过程,提供便捷的外卖服务。系统允许顾客通过网页或手机应用平台进行在线订餐,浏览菜单、选择餐品、定制口味,并可选择不同的支付方式完成支付。餐厅方面可以通过系统管理菜单、接受新的订单、派发配送任务,并对订单进行统计和分析。配送人员可以通过系统接受配送任务,并实时更新配送进度。

外卖订餐系统的需求来源于顾客对于更加方便快捷的订餐方式的期望,以及餐厅和配送人员对于提升效率和客户满意度的追求。因此,通过设计和实现一个高效、可靠、易用的外卖订餐系统,可以提升整个订餐服务的质量和效率,实现顾客、餐厅和配送人员的共赢。

2 系统开发环境

2.1 硬件环境

项目最低配置推荐配置
内存淮海晚报2G
CPU单核四核
硬盘10G500G
带宽512K10M

表2-1 硬件环境表

2.2 软件环境

(1)操作系统:Windows 11

(2)数据库软件:

MySQL8.0: 用于支持数据库

Navicat Premium: 用于专业人员管理数据库数据

(3)Java环境:

java version “1.8.0_201”

Java™ SE Runtime Environment (build 1.8.0_201-b09)

Java HotSpot™ 64-Bit Server VM (build 25.201-b09, mixed mode)

  1. 配置环境

IDEA 2019.3.3 x64

Node v14

网络:100Mbps的无线网络

2.3 相关技术

  1. 编程语言:系统将使用Java作为主要开发语言,以实现系统的功能和逻辑。

  2. 开发框架:系统将采用Spring、ASP.NET等作为开发框架,以提供开发所需的基础设施和工具。

  3. 数据库:系统将使用MySQL作为数据存储和管理的技术,以支持数据的持久化存储和高效查询。

  4. 前端技术:系统的用户界面将采用HTML、CSS、JavaScript等进行开发,以实现用户友好的交互体验和界面设计。

  5. 云平台服务:系统的部署和运行将基于Azure提供的云计算服务,以实现系统的可用性、可扩展性和灵活性。

  6. 版本控制:系统开发过程中将使用Git进行代码版本管理,以确保开发团队的协作和代码的版本控制。

3 需求分析

3.1 可行性分析

这个系统是基于Java并结合MySQL语言开发的外卖点餐系统。

在Java开发方面,我已经具备一定的基础,并在实践中深入研究了Java进阶教程,掌握了Windows图形化界面和Java面向对象等操作。

在数据库方面,我专注于MySQL关系型数据库,在实现外卖点餐系统中的数据操作时,严谨地运用各种MySQL关系型语句,并将其与Windows GUI界面相结合。

3.2 功能需求

1.系统组成:系统管理、订单管理、商家、订餐者、配送员。每个部门都有专门人员进行

管理执行不同的功能。

2.登录模块:用户使用自己的账号密码登录相应端系统,从而进行订餐、评论等操作。管理员使用自己的账号密码登录相应端系统,从而进行订单管理、评论、餐品管理等操作。(其中用户可为订餐者,配送员,商家,管理员)

3.评论模块:商家、配送员查看用户评价。

4.订餐模块:订餐者选择相应商家,在相应商家选择自己想要的菜,根据自己需求下订单,商家级配送员根据情况进行接单。订餐者可对自己的订单进行删除、添加等,订餐管理员可对订单进行查看、更新订单等。

5.店铺管理模块:商家根据店铺对商家名,商家介绍,及其相关菜品种类,价格进行修改、删除等操作以及申请成为外卖商家店铺操作。

6.订单管理模块:用户可对自己的订单进行删除、添加等,餐厅管理人员可对订单进行查看、更新订单等。

7.维护管理模块:管理员系统进行测试、修复及其相关用户管理。

3.3 性能需求

  1. 并发处理:系统应能够处理大量用户同时访问、点餐和支付的需求,保证并发用户的正常操作。

  2. 响应时间:系统应能够在合理的时间内响应用户的请求,包括菜单浏览、搜索、点餐和支付等功能的响应时间。

  3. 可用性:系统应具备高可用性,保证24小时稳定运行,避免因系统故障或维护而导致的长时间无法使用。

  4. 安全性:系统应保护用户信息的安全性,采用合适的加密和身份验证机制,防止未授权访问及数据泄露。

  5. 扩展性:系统应具备良好的扩展性,能够根据用户量的增加灵活地扩展服务器和网络资源,以保证系统的性能和稳定性。

  6. 容错性:系统应具备容错能力,能够处理和恢复部分系统故障,保证系统的连续性和可靠性。

以下是性能处理方面:

(1)并发度:1000(Tomcat)

(2)响应时间:5s

(3)事务处理:2分钟

(4)可扩展性:基于接口的MVC架构

(5)安全性:基于角色的权限管理

3.4 系统用例

1.参与者:①管理员②商家③订餐者④配送员

3.4.1顶层用例图

介绍个用例之间相互关系。

图1顶层用例图

3.4.2查看评价用例图

商家、配送员查看用户评价

图 2查看评价用例图

3.4.3登录用例图

用户使用自己的账号密码登录相应端系统,从而进行订餐、评论等操作。管理员使用自己的账号密码登录相应端系统,从而进行订单管理、评论、餐品管理等操作。(其中用户可为订餐者,配送员,商家,管理员)外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3登录用例图

3.4.4订餐用例图

订餐者选择相应商家,在相应商家选择自己想要的菜,根据自己需求下订单,商家级配送员根据情况进行接单。订餐者可对自己的订单进行删除、添加等,订餐管理员可对订单进行查看、更新订单等。

图 4订餐用例图

3.4.5店铺管理用例图

图 5店铺管理用例图

3.4.6订单管理用例图

用户可对自己的订单进行删除、添加等,餐厅管理人员可对订单进行查看、更新订单等

图6 订单管理用例图

图7配送订单管理用例图

3.4.7维护系统用例图

管理员系统进行测试、修复及其相关用户管理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图8维护系统用例图

3.4.8一级用例图

图9一级用例图

4 系统概要设计

4.1 系统运行原理

  1. 用户注册与登录:

用户通过注册账号并登录系统,可以使用系统的各项功能。系统在用户注册时进行账号信息的有效性验证,并将用户信息保存在用户数据库中。

  1. 餐厅信息管理:

管理员可以添加、编辑和删除餐厅信息,包括餐厅名称、地址、联系信息等。用户可以根据餐厅名和位置等信息查询餐厅,以选择合适的餐厅进行订餐。

  1. 菜单管理:

餐厅管理员可以在系统中添加、编辑和删除菜单项,包括菜名、价格、描述等。用户可以浏览餐厅的菜单,并选择自己想要的菜品进行订购。

  1. 订单管理:

用户选择菜品后,系统会根据用户的选择生成订单。订单包括用户信息、餐厅信息、菜品信息和订单状态等。系统会实时更新订单状态,例如待付款、正在配送和已完成等状态。

  1. 支付与配送:

用户在系统中选择合适的支付方式完成付款,并填写配送地址和联系方式。系统将根据订单状态进行配送,并及时更新订单状态。用户可以通过系统追踪订单状态,以了解订单的配送进度。

  1. 评价与反馈:

用户可以对已完成的订单进行评价和反馈。系统会显示用户的评价和餐厅的评分,以帮助其他用户选择餐厅和菜品。

  1. 管理与维护:

系统管理员可以对系统进行管理和维护,包括用户管理、餐厅管理、订单管理等。管理员还可以分析和统计系统的运行情况,例如用户使用情况、菜品销量等,以便优化系统的性能和用户体验。

4.2 系统框架结构图

本系统采用了前后端分离的方式,在后端框架中我们可将其看成三层结构Web服务层、业务逻辑服务层和持久层,前端则是用Vue搭建的HTML页面,前后端通过Axios封装的Ajax技术跨域传值,数据则用Json格式封装,在这里前后端分离架构图如图4-1所示:

图4-1 前后端分离架构图

5 数据库设计

5.1需求分析

分析用户的需求,包括数据、功能和性能需求

5.1.1. 数据需求分析

  • 用户需要存储和管理餐厅的菜单信息,包括菜名、描述、价格、类别等。

  • 用户需要存储和管理用户信息,包括用户名、密码、联系方式等。

  • 用户需要存储和管理订单信息,包括订单号、用户信息、菜单项、订单状态、订单金额

  • 用户需要存储和管理配送地址信息,包括用户ID、收货人姓名、电话号码、地址等。

  • 用户需要存储和管理支付信息,包括订单号、支付方式、支付状态、支付金额等。

5.1.2. 功能需求分析

  • 用户需要能够通过系统浏览餐厅的菜单,并查看菜品的详细信息。

  • 用户需要能够将菜品加入到购物车,并进行添加、编辑和删除操作。

  • 用户需要能够下单,并选择配送地址和支付方式。

  • 用户需要能够查看订单状态和支付状态,并进行相应的操作,如取消订单、确认收货等。

  • 用户需要能够查看历史订单,并进行评价、投诉等操作。

  • 管理员需要能够管理菜单,包括添加、编辑、删除菜品。

  • 管理员需要能够管理用户,包括查看用户信息、冻结用户等操作。

  • 管理员需要能够处理订单,包括接单、派送等操作。

5.1.3. 性能需求分析

  • 系统需要能够处理大量用户的并发访问,保证用户的响应时间在可接受范围内。

  • 数据库需要能够存储大量的菜品、用户、订单等数据,保证数据的读写操作的及时性和准确性。

  • 系统需要具备良好的稳定性和可靠性,确保数据不会丢失或意外损坏。

  • 数据库查询和索引设计需要优化,以提高系统的性能和响应速度。

5.2概念结构设计

主要采用E-R模型进行设计,包括画E-R图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图5.1 E-R图设计1

抽象出系统的实体,并设计部分E-R图,如下。

用户信息(用户编号、姓名、手机号、性别、身份证号、头像、状态)如图5. 2

图5.2 用户信息实体图

菜品信息(菜品编号、菜品名称、菜品分类id、菜品价格、商品码、图片、描述信息、状态、顺序、创建时间、更新时间、创建人、修改人)如图5.3

图5.3 菜品信息实体图

订单信息(订单编号、订单名、订单状态、下单用户、地址id、下单时间、结账时间、支付方式、实收金额、备注、手机号)如图5.4

图54 订单信息实体图

地址信息(编号、用户id、收货人、性别、手机号、省级区划编号、省级名称、市级区划编号、市级名称、区级区划编号、区级名称、详细地址、标签)如图5.5

图5.5 地址信息实体图

订单明细(编号、名字、图片、订单id、菜品id、套餐id、口味、数量、金额)如图5.6

图5.6 订单明细实体图

5.3逻辑结构设计

通过将E-R图转换成表,实现从E-R模型到关系模型的转换

据数据库概念结构设计中的实体及属性描述、以及数据库的规范化理论,设计管理员信息表、分类信息表、菜品管理信息表、订单信息表、订单明细表、、购物车信息表和用户信息表、表5.7至表5.12是各个数据库表的逻辑结构。

表5.7 管理员信息表

字段名列类型与长度描述备注
numvarchar(255)工号主键
namevarchar(32)姓名非空
usernamevarchar(32)姓名非空
passwordvarchar(64)密码非空

表5.8分类信息表

字段名列类型与长度描述备注
idbigint(20)编号主键
typeint(11)类型非空
namevarchar(64)分类名称非空
sotrint(11)顺序非空
Create_timedatetime创建时间非空
Update_timedatetime更新时间非空
Create_user bigint(20)创建人非空
Update_user bigint(20)修改人非空

表5.9 菜品管理信息表

字段名列类型与长度描述备注
idbigint(20)编号主键
namevarchar(64)菜品名称非空
category_idbigint(20)菜品分类id非空
pricedecimal(10,2)菜品价格非空
codevarchar(64)商品码非空
imagevarchar(200)图片非空
description varchar(400)描述信息非空
status int(11)0 停售 1 起售非空
sortint(11)顺序非空
Create_timedatetime创建时间非空
Update_timedatetime更新时间非空
Create_user bigint(20)创建人非空
Update_user bigint(20)修改人非空
is_deletedint(11)是否删除非空

表5.10 订单信息表

字段名列类型与长度描述备注
idbigint(20)编号主键
numbervarchar(50)订单号非空
statusint(11)订单状态 1待付款,2待派送,3已派送,4已完成,5已取消非空
user_id bigint(20)下单用户非空
address_book_idbigint(20)地址id非空
order_timedatetime 下单时间非空
checkout_timedatetime结账时间非空
pay_methodint(11)支付方式 1微信,2支付宝非空
amountvarchar(255)实收金额非空
remarkvarchar(255)备注非空
phone varchar(11) 电话非空
addressvarchar(255)地址非空
user_namevarchar(32)用户名非空
consigneevarchar(50) 收货人非空

表5.11 订单明细表

字段名列类型与长度描述备注
id bigint(20)编号主键
namevarchar(50)名字非空
imagevarchar(100)图片非空
order_idbigint(20)订单id非空
dish_idbigint(20)菜品id非空
setmeal_idbigint(20)套餐id非空
dish_flavorvarchar(50)口味非空
number int(11)数量非空
amountdecimal(10,2)金额非空

表5.12 用户信息表

字段名列类型与长度描述备注
idbigint(20)编号主键
namevarchar(50)姓名非空
phone varchar(100)手机号非空
sexvarchar(2)性别非空
id_numbervarchar(18)身份证号非空
avatarvarchar(500)头像非空
statusint(11)状态0:禁用1:正常非空

5.4数据库物理设计

主要是为所设计的数据库选择合适的存储结构和存取路径

1. 创建数据库:-- 如果已有该数据库,则删除DROP DATABASE IF EXISTS OnlineFoodOrdering;-- 创建数据库CREATE DATABASE OnlineFoodOrdering CHARSET=UTF8;2. 创建数据库表:-- 使用数据库USE OnlineFoodOrdering;-- table 1: SystemManagementDROP TABLE IF EXISTS SystemManagement;CREATE TABLE SystemManagement (id INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,username VARCHAR(20),password VARCHAR(20),role VARCHAR(20));-- table 2: OrderManagementDROP TABLE IF EXISTS OrderManagement;CREATE TABLE OrderManagement (id INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,order_id VARCHAR(20),customer_id INT(10),restaurant_id INT(10),delivery_person_id INT(10),status VARCHAR(20),total_price DECIMAL(10, 2),order_date TIMESTAMP);-- table 3: RestaurantDROP TABLE IF EXISTS Restaurant;CREATE TABLE Restaurant (id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,name VARCHAR(50),location VARCHAR(100),contact_number VARCHAR(20));-- table 4: CustomerDROP TABLE IF EXISTS Customer;CREATE TABLE Customer (id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,name VARCHAR(50),address VARCHAR(100),contact_number VARCHAR(20));-- table 5: DeliveryPersonDROP TABLE IF EXISTS DeliveryPerson;CREATE TABLE DeliveryPerson (id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,name VARCHAR(50),contact_number VARCHAR(20),vehicle_number VARCHAR(20));

数据存储:

图5.13 数据存储图

java/com/example/order/dao/DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(@Nullable Context context, int version) {

super(context, “OrderStore.db”, null, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

String createOrders = “create table orders (” +

“id integer primary key autoincrement,” +

“name text,” +

“image integer,” +

“money real,” +

“time text,” +

“username text)”;

db.execSQL(createOrders);

}

java/com/example/order/dao/OrderDao.java

public static void saveOrder(List orders) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
for (Order order : orders) {
ContentValues values = new ContentValues();
values.put(“name”, order.getName());
values.put(“image”, order.getImage());
values.put(“money”, order.getMoney());
values.put(“time”, order.getTime());
values.put(“username”, order.getUsername());

db.insert(“orders”, null, values);
}

5.5数据库的实施

包括编程、测试和试运行

6 系统功能模块实现

[描述对系统功能模块的实现,包括实现功能需求描述、流程图、类图、核心代码(不能超过一页)、运行效果图等]

6.1 所有模块的实现(类图)

综合运动识别对象和类的方法,按照需求陈述中出现的内容得到“外卖点餐管理系统”的候选类有:商家、订餐者、配送员、系统管理员、订餐管理员、订餐者订餐下单、商家接单、配送员配送、订餐者评价、商家、配送员查看评价、商家申请成为外卖店铺、申请成功等内容。

店铺管理类

图6-1 店铺管理类图

订餐类

图6-2 订餐类图

源代码部分示例:


```sql```sql```python
<font style="color:#CC7832;">class_attributes 	
(list class_attribute_list</font><font style="color:#CC7832;">			  (object ClassAttribute "ID"</font><font style="color:#CC7832;">				
quid       	"5DFB76720278")</font><font style="color:#CC7832;">			  (object ClassAttribute "pwd"</font><font style="color:#CC7832;">			quid       	"5DFB7676029F")))</font><font style="color:#CC7832;">		   (object Class "Merchant"</font><font style="color:#CC7832;">			
quid       	"5DFB750C025F"</font><font style="color:#CC7832;">		stereotype 	"entity"</font><font style="color:#CC7832;">			
superclasses 	(list inheritance_relationship_list</font><font style="color:#CC7832;">			  (object Inheritance_Relationship</font><font style="color:#CC7832;">				
quid       	"5DFC96D20128"</font><font style="color:#CC7832;">				
supplier   	"Logical View::Entity::USER"</font><font style="color:#CC7832;">			quidu      	"5DFB74FC034C"))</font><font style="color:#CC7832;">			
used_nodes 	(list uses_relationship_list</font><font style="color:#CC7832;">			   (object Uses_Relationship</font><font style="color:#CC7832;">			quid       	"5DFC96D9038A"</font><font style="color:#CC7832;">			supplier   	"Logical View::Entity::Shop"</font><font style="color:#CC7832;">			quidu      	"5DD253F800AC")</font><font style="color:#CC7832;">			   (object Uses_Relationship</font><font style="color:#CC7832;">				
quid       	"5DFC96DC0396"</font><font style="color:#CC7832;">				
supplier   	"Logical View::Entity::Food"</font><font style="color:#CC7832;">				
quidu      	"5DD253EE02B1"))</font><font style="color:#CC7832;">		operations 	(list Operations</font><font style="color:#CC7832;">			(object Operation "getShopName"</font><font style="color:#CC7832;">			quid       	"5DFB7732034E"</font><font style="color:#CC7832;">			concurrency 	"Sequential"</font><font style="color:#CC7832;">			opExportControl 	"Public"</font><font style="color:#CC7832;">			uid        	0)</font><font style="color:#CC7832;">			 (object Operation "setShopName"</font><font style="color:#CC7832;">			quid       	"5DFB774702E8"</font><font style="color:#CC7832;">			concurrency 	"Sequential"</font><font style="color:#CC7832;">			opExportControl 	"Public"</font><font style="color:#CC7832;">			uid        	0))</font>

用户登录部分代码:

<font style="color:#CC7832;">
public void index() throws IOException{</font><font style="color:#CC7832;">    User user1 = userService.getUser(user);</font><font style="color:#CC7832;">       if (user1 != null){</font><font style="color:#CC7832;">        if (user1.getIsSh() == 1){</font><font style="color:#CC7832;">             if (user1.getRole().getEnName().equals("admin")){</font><font style="color:#CC7832;">                    ActionContext.getContext().getSession().put("user", user1);</font><font style="color:#CC7832;">               }</font><font style="color:#CC7832;">              if (user1.getRole().getEnName().equals("js")){</font><font style="color:#CC7832;">                    
ActionContext.getContext().getSession().put("user1", user1);</font><font style="color:#CC7832;">             }</font><font style="color:#CC7832;">               if (user1.getRole().getEnName().equals("xs")){</font><font style="color:#CC7832;">         ActionContext.getContext().getSession().put("user2", user1);</font><font style="color:#CC7832;">               }</font><font style="color:#CC7832;">              map.put("flag", 1);</font><font style="color:#CC7832;">                
map.put("url", "login_indexs.do");</font><font style="color:#CC7832;">               map.put("id", user1.getId());</font><font style="color:#CC7832;">               JsonUtils.toJson(map);</font><font style="color:#CC7832;">           }else {</font><font style="color:#CC7832;">              map.put("flag", 2);</font><font style="color:#CC7832;">               JsonUtils.toJson(map);</font><font style="color:#CC7832;">            
}</font><font style="color:#CC7832;">     }else {</font><font style="color:#CC7832;">           map.put("flag", 3);</font><font style="color:#CC7832;">           JsonUtils.toJson(map);</font><font style="color:#CC7832;">        
}</font><font style="color:#CC7832;"> }</font>

6.1.3 功能需求

流程图

系统流程图:

图6-3 系统流程图

6.1.3 模块设计

[利用软件工程类图和时序图进行表述]

1订餐顺序图

图6-4订餐顺序图

2商家顺序图

图6-5商家顺序图

6.1.4 详细设计

说明
方法名称及类型下单 (POST)
方法功能描述此方法允许顾客通过网页或手机应用平台进行在线订餐。
顾客可以浏览菜单、选择餐品、定制口味,并选择不同的支付
方式完成订单。
Input输入参数输入参数包括顾客详细信息、所选菜品、定制选项和支付信息。
Return返回值成功下单后,该方法将返回订单确认消息或订单号
Exception抛出异常如果支付过程出现问题或任何必需的输入参数缺失或无效,
该方法将抛出下单异常。
说明
方法名称及类型管理订单 (GET/POST)
方法功能描述该方法允许餐厅工作人员管理菜单、接受新订单、分配配送任务,
并对订单进行统计分析。
Input输入参数输入参数可能包括订单状态过滤器、统计分析的日期范围和
其他订单管理的条件。
Return返回值根据具体操作,该方法可能返回更新后的订单详情、统计报告
或确认消息。
Exception抛出异常如果尝试修改不存在的订单或存在未经授权的访问尝试,
该方法将抛出订单管理异常。

6.1.5 数据库

数据库触发器:

触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。由于本系统的触发器比较多,在这里我只写出了其中的一部分触发器。

代码实现:

Private Sub bjcx_Click(Index As Integer)If qxstra = "0” ThenMsgBox " 你没有权限进行操作!, vbExclamation + vbOKOnly, ”警告"Exit SubEnd If订单查询.ShowEnd SubPrivate Sub bjkcsz_Click(Index As Integer)If qxstra = ”0" ThenMsgBox " 你没有权限进行操作!", vbExclamation + vbOKOnly, ”警告"Exit SubEnd If订单设置.ShowEnd SubPrivate Sub bjll_Click(Index As Integer)订单浏览。ShowEnd SubPrivate Sub bjsc_Click(Index As Integer)If qxstra = ”0” ThenMsgBox ” 你没有权限进行操作!”, vbExclamation + vbOKOnly, ”警告"Exit SubEnd If订单删除.ShowEnd SubPrivate Sub bjtj_Click(Index As IntegerIf qxstra =0ThenMsgBox ” 你没有权限进行操作!", vbExclamation + vbOKOnly

通过上述对外卖点餐系统管理-管理员端的设计与实现,可以得出实现该系统需要使用的数据实体,从而得知该系统的类图如图6-6所示。

图6-6 类图

1建立构件图

图6-7 构建图

2建立部署图

图6-8 部署图

6.1.6 界面原型/实现效果图

图6-9 界面实现图1

图6-10 界面实现图2

7 测试

单元测试用例

模块测试 - 用户注册功能

测试目的:验证用户注册模块的功能是否符合需求。

测试步骤:输入有效的用户信息(用户名、密码、联系方式),点击注册按钮。

预期结果:系统应成功创建新用户,并且在数据库中存储该用户的信息。

性能测试 - 菜品搜索响应时间

测试目的:评估菜品搜索功能的响应时间和性能。

测试步骤:进行多次菜品搜索操作,记录每次搜索的响应时间。

预期结果:平均响应时间应符合性能要求,能够在合理时间内返回搜索结果。

接口测试 - 支付接口验证

测试目的:验证支付接口与第三方支付服务的交互是否正常。

测试步骤:模拟支付过程,包括选择菜品、填写支付信息、模拟付款。

预期结果:支付接口应正确调用第三方支付服务,返回支付结果并更新订单状态。

集成测试用例

模块间接口测试 - 用户登录与订单管理模块

测试目的:验证用户登录后能否顺利进行订单管理操作。

测试步骤:用户登录后尝试创建、修改和取消订单。

预期结果:用户能够成功登录,并且订单管理模块能够正确识别已登录用户的身份,并允许其进行订单管理操作。

系统测试用例

系统连接验证 - 前台下单与后台订单管理协同测试

测试目的:验证前台用户下单后是否能够被后台订单管理系统正确接收并处理。

测试步骤:模拟用户在前台下单,同时检查后台订单管理系统是否能正确接收到订单信息并进行相应处理。

预期结果:后台系统应正确处理并管理前台下单的订单信息,确保订单状态和内容一致。

确认测试用例

内部确认测试 - 系统需求与实现的一致性验证

测试目的:验证系统实现是否符合内部制定的需求规格。

测试步骤:针对各项系统需求,逐一验证系统实现是否符合需求描述。例如,用户注册、菜品浏览、订单管理等方面的需求。

预期结果:系统实现应符合需求规格,满足预期的功能和性能要求。

测试流程:

7.1单元测试

以管理员(admin 用户)、身份从登录界面登录,测试系统的登录功能,以及管理员用户是否成功建立连接。

管理员登录测试结果如表7.1。

测试用例
(用户名、密码)
预期结果测试结果
(“”,“”)用户名不能为空提示:输入用户名
(“admin”,“”)密码不能为空提示:输入密码
(“admin”,“123456”)密码错误提示:输入正确密码
(“admin”,“123123”)登录成功登录成功,跳转到外卖管理页面

表 7.1 测试结果表一

7.2.餐品管理测试

测试流程:

以超级管理员(admin 用户)从登录界面登录管理员,测试系统的套餐管理功能,测试结果如表 7.2。

测试用例
(名称、价格、库存、描述,图标,分类、状态)
预期结果测试结果
添加套餐
(“精品四人餐”、“四人餐”、“254”,菜品两道,图片一张,“好吃划算”)
添加成功,返回套餐列表显示套餐的信息。添加成功,返回套餐列表显示套餐的信息。
添加用户
(“”、“四人餐”、“254”,菜品两道,图片一张,“好吃划算”)
添加失败提示框“请输入套餐名称”
删除套餐
(ids:1594972446119768066
删除失败删除失败,弹出提示框显示“套餐正在售卖中,不能删除”
修改员工
(“精品四人餐”修改为“超值四人餐”)
修改成功套餐名称“精品四人餐”改为“超值四人餐”

表 7.2 测试结果表二

7.3 系统测试

测试流程:

测试管理员,用户的登录系统性,再测试不是本系统用户是否能登录成功。管理员,用户登录测试结果如表7.3。

测试用例
(学号/工号、用户名、密码)
测试结果
管理员登录
(admin、123456)
登录成功,跳转到外卖系统管理主页
管理员登录
(admin、123456)
登录失败,提示“登录失败”
用户登录
(xiaoming,123456)
登录成功,跳转到点餐主页
用户登录
(xiao,12345678)
登录失败,提示“登录失败”
非本系统用户登录
(xiaohao,123456)
登录失败,提示“登录失败”

表7.3 测试结果表三

8 总结

在系统设计过程中,我大致实现了这些功能:

基于分类信息的管理。分类信息管理的功能包括添加分类、修改分类、删除分类等功能。

基于菜品和套餐信息的管理。菜品和套餐信息管理的功能包括添加菜品和套餐、修改菜品和套餐、删除菜品以及套餐,起售(禁售)菜品和套餐等功能。

基于订单信息的管理。订单信息管理的功能包括查看、派送订单、完成订单和订单的模糊查询等功能。

根据了解Redis数据读写速度非常快,因为它是基于内存操作的,单线程避免了多个线程直接的来回切换,底层采用了Hash算法,而且Redis是用C语言编写的,是最“接近”操作系统的语言,所以执行速度相对较快。我们利用Redis的这些特行,将商品信息和商品分类信息存储到Redis中,极大的提高了系统的性能,使客户得到了更好的使用体验。

在整个开发和测试过程中,通过该平台的正常运行,加强了平台的功能与评测,并对部分功能进行了优化,提高了平台使用效果。该平台可用于多种人群和各种餐饮行业的商家,商家可以自定义菜品来进行运营。也可以发布到云平台,具有较强的应用性。

在系统设计完成后,我发现在开发过程中,我对于UML的掌握程度得到了很大的提升。我能够更加熟练地运用不同的UML图表来描述系统的不同方面,如用例图、类图、时序图等。这使得我能够更好地将需求转化为系统设计,并将设计转化为代码。通过这个项目,我也深刻理解了系统设计的重要性,只有进行充分的设计才能确保系统具备良好的扩展性、可维护性和可靠性。

在对系统设计的总结中,我注意到了一些问题。首先是需求的变化。在项目过程中,需求可能会发生变化,为了应对这种情况,我需要及时地更新设计并与团队成员共享变更。其次是模块之间的交互,我发现在设计中会涉及到不同模块之间的交互,需要充分考虑各模块的接口设计和信息传递方式。最后是系统性能的考虑,我需要在设计中考虑系统负载、响应时间等因素,以确保系统能够满足用户的需求。

在后期进一步工作中,我计划进行系统的测试和优化。通过各种测试方法,如单元测试、集成测试和系统测试,我将确保系统在各种情况下能够正常运行。同时,我还会进行系统的性能优化,根据测试结果,对系统进行调整和改进,以提高系统的效率和稳定性。通过这个项目,我不仅在UML的运用上取得了进一步的提升,还学到了系统设计的重要性和设计的关键考虑因素。在后期工作中,我将继续努力,通过测试和优化来完善系统,以不断提高系统的质量和用户体验.

用户登录

**ID:**UC01

**名称:**用户登录系统

**用例属性:**基本功能

**参与者:**订餐者、配送员、商家、管理员

**描述:**不同类型的用户使用自己的账号密码登录相应的系统端,以进行后续操作。

**优先级:**高

**触发条件:**用户打开外卖系统,希望进行订餐、管理等操作。

**前置条件:**用户已注册账号。

**后置条件:**用户成功登录系统,进入相应的操作界面。

正常流程:

用户打开外卖系统登录页面。

输入账号和密码。

系统验证账号密码的正确性。

验证通过后,根据用户类型进入相应的系统界面。

订餐者订餐

**ID:**UC02

**名称:**订餐者下单

**用例属性:**核心功能

**参与者:**订餐者

**描述:**订餐者选择商家并下单购买菜品。

**优先级:**高

**触发条件:**订餐者有订餐需求。

**前置条件:**订餐者已登录系统。

**后置条件:**生成订单,商家和配送员可查看订单。

正常流程:

订餐者登录系统后,进入订餐模块。

浏览可选择的商家列表。

选择一个商家进入其菜品页面。

挑选自己想要的菜品加入购物车。

确认订单信息后提交订单。

订餐者订单管理

**ID:**UC03

**名称:**订餐者管理订单

**用例属性:**基本功能

**参与者:**订餐者

**描述:**订餐者对自己的订单进行管理操作,如删除、添加菜品等。

**优先级:**中

**触发条件:**订餐者需要修改订单或查看订单状态。

**前置条件:**订餐者已登录系统且有订单存在。

**后置条件:**订单状态更新或菜品信息修改。

正常流程:

订餐者登录系统后,进入订单管理模块。

查看自己的订单列表。

可以选择对订单进行删除、添加菜品等操作。

商家店铺管理

**ID:**UC04

**名称:**商家管理店铺

**用例属性:**基本功能

**参与者:**商家

**描述:**商家对自己的店铺信息和菜品进行管理。

**优先级:**中

**触发条件:**商家需要修改店铺信息或菜品信息。

**前置条件:**商家已登录系统。

**后置条件:**店铺信息或菜品信息更新。

正常流程:

商家登录系统后,进入店铺管理模块。

可以修改商家名、商家介绍。

对店铺的菜品种类、价格进行修改、删除等操作。

可以申请成为外卖商家店铺。

订单管理(管理员)

**ID:**UC05

**名称:**管理员管理订单

**用例属性:**管理功能

**参与者:**管理员

**描述:**管理员对所有订单进行查看和更新操作。

**优先级:**高

**触发条件:**管理员需要监控订单状态或进行订单调整。

**前置条件:**管理员已登录系统。

**后置条件:**订单状态更新或问题订单得到处理。

正常流程:

管理员登录系统后,进入订单管理模块。

查看系统中的所有订单列表。

可以根据实际情况对订单进行更新操作,如修改订单状态等。

系统维护管理

**ID:**UC06

**名称:**系统维护

**用例属性:**管理功能

**参与者:**管理员

**描述:**管理员对系统进行测试、修复和用户管理等维护操作。

**优先级:**高

**触发条件:**系统出现问题或需要进行定期维护。

**前置条件:**管理员已登录系统。

**后置条件:**系统稳定运行,用户信息得到有效管理。

正常流程:

管理员登录系统后,进入维护管理模块。

对系统进行测试,检查系统的稳定性和性能。

发现问题时进行修复操作。

对用户进行管理,如添加、删除用户等。

相关文章:

UML外卖系统报告(包含具体需求分析)

1 系统背景 随着互联网技术的快速发展&#xff0c;外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制&#xff0c;而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来&#xff0c;…...

net Core Data Protection 数据保护 加密 编码 哈希 FromServices

》》》 通过构造函数 获取服务 [Route("api/[controller]")][ApiController]public class DataProtectController : ControllerBase{[HttpGet]public string Info(){return "zen";}// [FromServices] 自动获取 builder.Services.AddDataProtection()注…...

4K手机壁纸之动漫系列

因为平台限制了图片大小&#xff0c;大家将就看吧&#xff0c;原图找me...

关于eclipse的workspace

如果项目很多&#xff0c;为了方便管理&#xff0c;最好不要是使用working set 对项目进行分组。一个workspace加载项目过多&#xff0c;即使进行分组&#xff0c;有些操作也很对所有项目生效。为了避免卡顿&#xff0c;建议直接使用workspace分组管理&#xff0c;而不是workin…...

Vue引入高德地图自定义信息窗体绑定点击事件无效解决方案

你们好&#xff0c;我是金金金。 场景 笔者用的Vue3&#xff0c;引入了高德地图&#xff0c;version为2.0&#xff0c;场景如下&#xff1a; 在地图上根据经纬度度打点标记了一个位置&#xff0c;然后点击点标记弹出自定义信息窗体&#xff0c;右上角关闭按钮则是绑定了关闭自定…...

私域朋友圈运营

今天必须给大家分享一份超棒的朋友圈运营思维导图 有了它&#xff0c;你可以逐步打造属于自己的精彩朋友圈&#x1f389;。无论是想分享生活点滴&#x1f4a7;&#xff0c;还是展示个人魅力✨&#xff0c;又或者推广自己的业务&#x1f4c8;&#xff0c;这份思维导图都能给你指…...

【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览

文件预览 Vue3一. word二. excel三. ppt四. pdf4.1 vue-pdf-embed4.2 iframe 五. 视频六&#xff1a;扩展——kkFileView Vue3 一. word 安装&#xff1a;npm install docx-preview父页面 <template><div><DocPreviewv-if"filePath.includes(docx)"…...

如何加密电脑磁盘?电脑本地磁盘加密方法介绍

随着信息技术的不断发展&#xff0c;电脑磁盘加密已经成为保护个人隐私和数据安全的重要手段。本文将介绍几种常见的电脑本地磁盘加密方法&#xff0c;帮助用户保护自己的数据安全。 文件夹只读加密专家 文件夹只读加密专家不仅可以加密电脑中的文件夹&#xff0c;还可以加密保…...

1688、淘宝、京东搜索商品聚合接口技术实现与代码示例

在当今电商领域&#xff0c;多平台商品搜索已成为用户获取多样化商品信息的重要途径。为了满足用户对1688、淘宝、京东等主流电商平台商品搜索的需求&#xff0c;开发一个跨平台的商品搜索聚合接口显得尤为重要。本文将详细介绍如何实现这一接口&#xff0c;包括接口设计、平台…...

视频智能分析平台LiteAIServer烟火识别软件引领烟火检测与识别的智能新纪元

随着人工智能技术的飞速进步&#xff0c;视频智能分析技术正以前所未有的深度和广度渗透至安全防护、环境监测等多个关键领域。其中&#xff0c;烟火识别软件LiteAIServer凭借其卓越的烟火检测与识别算法&#xff0c;成为了业界瞩目的焦点。 一、烟火检测&#xff1a;守护公共安…...

VUE前端按钮添加遮罩层

需求 当前需求是由于部分按钮操作的执行时间过长&#xff0c;因此添加遮罩层&#xff0c;防止用户误操作。 实现方式 在请求接口时创建遮罩层&#xff0c;并将遮罩层保存为全局唯一&#xff0c;请求成功或失败时&#xff0c;关闭遮罩层即可&#xff0c;切记&#xff0c;请求…...

列出机器学习方向的创新点

以下是机器学习方向的一些创新点: 一、算法创新 新型神经网络架构 图神经网络(Graph Neural Networks,GNNs) 传统的神经网络主要处理欧几里得空间的数据,如图像(网格结构)和序列(线性结构)。然而,现实世界中有许多数据具有图结构,如社交网络、分子结构等。图神经网…...

ffmpeg视频滤镜:腐蚀滤镜

滤镜简述 erosion 官网链接> FFmpeg Filters Documentation 这个滤镜会在视频上应用腐蚀操作&#xff0c;腐蚀操作是形态学中一种操作&#xff0c;接触过opencv的同学应该很熟悉。滤镜主要有如下作用&#xff1a; 去除噪声&#xff1a;腐蚀可以帮助去除图像中的小颗粒噪…...

react18中在列表项中如何使用useRef来获取每项的dom对象

在react中获取dom节点都知道用ref&#xff0c;但是在一个列表循环中&#xff0c;这样做是行不通的&#xff0c;需要做进一步的数据处理。 实现效果 需求&#xff1a;点击每张图片&#xff0c;当前图片出现在可视区域。 代码实现 .box{border: 1px solid #000;list-style: …...

java前后端项目问题总结

java前后端项目问题总结 1、字段 数据库 数据库在建表时除了需要的字段还有六个必要字段 主键 id 逻辑删 is_delete 创建人create_by 创建时间create_time 修改人 update_by 修改时间 update_time 这些字段在实体类中写法 //Date注解会自动生成一个无参构造&#xf…...

Qt设置浏览器为父窗口,嵌入播放器窗口

本项目旨在利用Qt框架实现一个创新的用户界面&#xff0c;允许将Qt窗口作为子窗口嵌入到浏览器中&#xff0c;增强用户体验并实现更丰富的交互功能。随着Web技术的不断发展&#xff0c;越来越多的应用程序希望结合桌面应用程序和Web浏览器的优势&#xff0c;以便更好地满足用户…...

运行Vue项目报错ChunkLoadError: Loading chunk 0 failed.

今天在搭建一个前后端分离的项目&#xff0c;前端报了一个问题&#xff0c;由于我不太了解前端&#xff0c;找了好多办法都没解决。因为是维护老项目&#xff0c;拿到源码大概率是没有问题的&#xff08;我也是赌的……只能按照没问题来查了&#xff09;&#xff0c;最后耐下心…...

腾讯云上基于 Apache Pulsar 的大规模生产实践

导语 Pulsar Meetup 2024 北京站已经成功落下帷幕。在本次盛会中&#xff0c;腾讯云的高级工程师韩明泽和王震江为与会者带来了精彩的演讲。他们围绕多网接入、集群迁移以及高可用最佳实践这三大核心议题&#xff0c;深入剖析了《腾讯云上基于 Apache Pulsar 的大规模生产实践…...

Linux网络:序列化与反序列化

Linux网络&#xff1a;序列化与反序列化 序列化与反序列化jsonjsoncppValue对象序列化反序列化WriterReader 序列化与反序列化 在网络通信中&#xff0c;最重要的就是通过接口&#xff0c;将数据通过网络发送给另一台主机。那么另一台主机收到数据后&#xff0c;就可以对数据进…...

Aloudata BIG 主动元数据平台支持 Oracle/DB2 存储过程算子级血缘解析

Aloudata BIG 算子级血缘主动元数据平台已经支持 Oracle 类型、DB2 类型的存储过程算子级血缘解析&#xff0c;并达到 90% 血缘解析准确率&#xff1a; 能够识别准确的字段级数据加工依赖关系&#xff1b;能够识别多级嵌套调用的存储过程的血缘&#xff1b;能够推断存储过程内…...

Java 解决阿里云OSS服务器私有权限图片通过URL无法预览的问题

简单描述一下此场景的业务: 由于系统中需要将上传的图片在系统中展示(private私有权限不能直接通过url直接展示),不想通过先下载下来然后以流的形式返回给前台展示这种方法很不友好,毕竟现在前台展示方式都是通过图片URL进行展示,所以就上官网查看API文档,果然找到了解决…...

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

【高心星出品】 目录 应用打包HAP、HAR、HSPModule类型HAPHAR创建HAR建立依赖HAR共享内容 HSP创建HSP建立依赖同上HSP共享内容同上 HAR VS HSP 应用打包HAP、HAR、HSP 一个应用通常会包含多种功能&#xff0c;将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发…...

Android demo文件内容记录

<style name"Theme.Demo1" parent"Theme.MaterialComponents.DayNight.DarkActionBar"><!-- Primary brand color. --><item name"colorPrimary">color/purple_500</item>//状态栏的背景色&#xff0c;优先级小于androi…...

掌握SQL高阶技巧,助你提高数据处理的效率和查询性能

高级 SQL 技巧 窗口函数&#xff08;Window Functions&#xff09; 窗口函数允许你对数据集的特定行执行计算&#xff0c;而不会聚合结果。常见的窗口函数包括&#xff1a; ROW_NUMBER()&#xff1a;为每一行分配一个唯一的序号。RANK()&#xff1a;为每一行分配一个排名&am…...

【AI服务器】全国产PCIe 5.0 Switch SerDes 测试和分析,以11槽PCIe GPU底板(PCIe 4.0/5.0)为例(二)

3 PCIe 4.0 SerDes 和 5.0 SerDes 要求比较 表 2 总结 PCIe 4.0 和 5.0 SerDes 要求之间的差 异。PCIe 标准包含三个相互依赖的规范&#xff0c;这些规范 旨在确保不同供应商的 SerDes 和通道的互操作性&#xff1a; ● PCIe BASE 规范定义了整个协议栈的芯片 级性能,是一…...

#数据结构(二)--栈和队列

栈和队列 一栈 1.栈的顺序存储结构 特点&#xff1a;先进后出 栈是一种只能在一端进行插入或删除操作的线性表。 表中允许插入删除操作的一端为栈顶&#xff08;top&#xff09;&#xff0c;表的另一端为栈底&#xff08;bottom&#xff09;&#xff0c; 1 结构体的定义 …...

react18中的函数组件底层渲染原理分析

react 中的函数组件底层渲染原理 react组件没有局部与全局之分&#xff0c;它是一个整体。这点跟vue的组件化是不同的。要实现 react 中的全局组件&#xff0c;可以将组件挂在react上&#xff0c;这样只要引入了react&#xff0c;就可以直接使用该组件。 函数式组件的创建 …...

提升产品竞争力之--IPD产品成本篇

在汉捷的咨询过程中&#xff0c;很多企业老总交流时都会提起这个抱怨&#xff1a;“现在产品竞争太激烈了&#xff0c;客户买产品首先看价格&#xff0c;你价格高一点就买别家的啦……” 汉捷咨询在前文谈到“通过定义产品包需求&#xff0c;来提升产品竞争力。差异化开发&…...

如何在Debian操作系统上安装Docker

本章教程&#xff0c;主要介绍如何在Debian 11 系统上安装Docker。主要使用一键安装Docker脚本和一键卸载脚本来完成。 一、安装Docker #!/bin/bashRED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0mCURRENT_DIR$(cd "$(dirname "$0")…...

ArrayList和Array、LinkedList、Vector 间的区别

一、ArrayList 和 Array 的区别 ArrayList 内部基于动态数组实现&#xff0c;比 Array&#xff08;静态数组&#xff09; 使用起来更加灵活&#xff1a; ArrayList 会根据实际存储的元素动态地扩容或缩容&#xff0c;而 Array 被创建之后就不能改变它的长度了。ArrayList 允许…...

宁德网站建设/今天有哪些新闻

0 前言 本文参考 《控制系统仿真与计算机辅助设计 第2版》薛定宇 机械工业出版社《MATLAB for Control Engineers》Katsuhiko Ogata现代控制理论线性系统入门(一)状态方程描述下的动态系统《现代控制理论基础》— 2 什么是状态与状态空间 本文已假设读者具有自动控制原理的…...

布吉网站建设哪家便宜/网站流量统计工具

在看软考题目中&#xff0c;发现软件开发中有许多各阶段对任务的定义。在采用结构化开发方法进行软件开发时&#xff0c;设计阶段接口设计主要依据需求分析阶段的数据流图&#xff0c;接口设计的主要任务是描述软件与外部环境之间的交互关系&#xff0c;软件内模块之间的调用关…...

类似58同城的网站怎么做/在哪里做推广效果好

Jstat是JDK中提供的一个简单实用工具&#xff0c;用于提供与JVM性能相关的统计信息&#xff0c;例如垃圾收集和编译活动。 jstat的主要优势在于&#xff0c;它可以在运行JVM且无需任何先决条件的情况下动态捕获这些指标。 那是什么意思&#xff1f; 例如&#xff0c;如果要捕获…...

不用域名推广网站/最近热点新闻事件

上篇博客《SSH快速进阶——struts2简单的实例》中&#xff0c;处理用户登陆的action—LoginAction为&#xff1a; package com.danny.user.action;public class LoginAction {private String username;private String password;public String getUsername() {return username;…...

wordpress附件/站内优化主要从哪些方面进行

清除浮动之父级添加overflow 这样就能很好的解决这个问题了。 缺点&#xff1a;无法显示溢出的部分呀...

百度收录比较好的网站/佛山网站建设

Mac安装RabbitMQ&#xff0c;开始使用了brew安装方式&#xff0c;不知是本机的原因还是其他什么总是安装不上&#xff0c;试用了各种解决方法还是没有成功&#xff0c;又使用wget方式&#xff0c;还是有问题&#xff0c;最后采用了直接下载压缩包解压命令行启动的方式安装启动了…...