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

news2024/11/26 11:11:39

在这里插入图片描述

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: SystemManagement

DROP 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: OrderManagement

DROP 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: Restaurant

DROP 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: Customer

DROP 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: DeliveryPerson

DROP 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” Then

MsgBox " 你没有权限进行操作!, vbExclamation + vbOKOnly, ”警告"

Exit Sub

End If

订单查询.Show

End Sub

Private Sub bjkcsz_Click(Index As Integer)

If qxstra = ”0" Then

MsgBox " 你没有权限进行操作!", vbExclamation + vbOKOnly, ”警告"

Exit Sub

End If

订单设置.Show

End Sub

Private Sub bjll_Click(Index As Integer)

订单浏览。Show

End Sub

Private Sub bjsc_Click(Index As Integer)

If qxstra = ”0” Then

MsgBox ” 你没有权限进行操作!”, vbExclamation + vbOKOnly, ”警告"

Exit Sub

End If

订单删除.Show

End Sub

Private Sub bjtj_Click(Index As IntegerIf qxstra =0Then

MsgBox ” 你没有权限进行操作!", 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

**名称:**系统维护

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

**参与者:**管理员

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

**优先级:**高

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

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

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

正常流程:

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

职业规划:程序员的成长之路

引言 在快速发展的技术行业中&#xff0c;作为一名程序员&#xff0c;职业规划是至关重要的。从初出茅庐到成为技术专家&#xff0c;每一步都需要明确的目标和不懈的努力。 成长历程 初级阶段&#xff08;0-2年&#xff09; 学习与适应&#xff1a;刚入行时&#xff0c;主要任…

Redis 安装部署与常用命令

目录 一、关系数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3关系型数据库和非关系型数据库区别 &#xff08;1&#xff09;数据存储方式不同 &#xff08;2&#xff09;扩展方式不同 &#xff08;3&#xff09;对事务性的支持不同 1.4 非关系型数据…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode&#xff08;独立服务器模式&#xff09; 2、two server mode&#xff08;双服务器模式&#xff09; 3、distributed multiple-executor mode&#xff08;分布式多…

54页可编辑PPT | 大型集团企业数据治理解决方案

这份PPT是关于大型集团企业数据治理的全面解决方案&#xff0c;它详细介绍了数据治理的背景、需求、管理范围、框架、解决思路&#xff0c;以及数据治理在实际操作中的关键步骤。内容涵盖了数据架构、数据质量、数据应用等方面的问题&#xff0c;并提出了数据资产透视、智能搜索…

使用 NumPy 和 Matplotlib 实现交互式数据可视化

使用 NumPy 和 Matplotlib 实现交互式数据可视化 在数据分析中&#xff0c;交互式可视化可以更好地帮助我们探索和理解数据。虽然 Matplotlib 是静态绘图库&#xff0c;但结合一些技巧和 Matplotlib 的交互功能&#xff08;widgets、event handlers&#xff09;&#xff0c;我…

使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML

使用 Python 的 BeautifulSoup&#xff08;bs4&#xff09;解析复杂 HTML&#xff1a;详解与示例 在 Web 开发和数据分析中&#xff0c;解析 HTML 是一个常见的任务&#xff0c;尤其是当你需要从网页中提取数据时。Python 提供了多个库来处理 HTML&#xff0c;其中最受欢迎的就…

C++ 整型大数运算(大整数运算)项目

C 整型大数运算项目 一、项目介绍二、项目变量成员三、项目实现构造函数加法减法乘法先计算再进位边计算边进位 除法与取模判断输入输出 四、项目源代码展示在 Big_integer.h 中&#xff1a;在 Big_integer.cpp 中&#xff1a; 五、测试准确性六、优化方向 一、项目介绍 整型大…

Character AI被起诉!14岁青少年自杀,AI陪伴何去何从

终于&#xff0c;AI在青少年心理问题方面&#xff0c;被推上了风口浪尖。 最近&#xff0c;美国佛罗里达州&#xff0c;一名14岁男孩Sewell Setzer的父母控告Character AI公司&#xff0c;声称孩子沉迷该公司的AI聊天机器人&#xff0c;最后走上了自杀的道路。 跟AI聊天还能致…

基于STM32F103的按键检测仿真

基于STM32F103的按键检测 仿真软件&#xff1a; Proteus 8.17 编程软件&#xff1a; Keil 5 仿真实现&#xff1a; 按键第一次按下LED灯亮&#xff0c;第二次按下LED灯灭&#xff0c;往复 按键检测原理&#xff1a; 按键在电路中一端接单片机的IO口&#xff0c;一端接GND&a…

高效库存管理:金蝶云星空与管易云的盘亏单对接方案

高效库存管理&#xff1a;金蝶云星空与管易云的盘亏单对接方案 金蝶云星空与管易云的盘亏单对接方案 在企业日常运营中&#xff0c;库存管理是至关重要的一环。为了实现高效、准确的库存盘点和数据同步&#xff0c;我们采用了轻易云数据集成平台&#xff0c;将金蝶云星空的数据…

JavaWeb合集20-定时任务框架SpringTask

二十、Spring Task 定时任务框架&#xff1a;Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 1、Spring Task cron 表达式 cron表达式在线生成器: https://cron.qqe2.com/ cron表达式其实就是一个字符串&#xff0c;通过cron…

极值点与拐点 专题小结

基础知识点 极值点与拐点的知识点 极值点相关概念了解 拐点相关概念了解极值点定义了解 二次函数求根公式理解 1、两个交点的解 2、单个交点的解 3、无交点的情况 含参数的函数 含参二次函数与x轴交点个数影响正负性变化&#xff0c;从而达成条件是否有极值点和拐点。 多重…

优先算法——移动零(双指针)

目录 1. 题目解析 2. 算法原理 3.代码实现 题目: 力扣题目链接&#xff1a;移动零 1. 题目解析 题目截图如下&#xff1a; 不过要注意&#xff0c;这个移动题目要求是在原数组中原地操作&#xff0c;不能新额外开辟一个数组来修改。 2. 算法原理 这个原理可以称之为数…

qt 滚动条 美化

qt QScrollBar 滚动条分为竖直与水平滚动条&#xff0c;两者设置上类似&#xff0c;但也有一些不同&#xff0c;下面主要讲述美化及注意事项。 一、竖直滚动条 竖直滚动条分为7个部分&#xff1a; sub-line、 up-arrow 、sub-page、 hanle、 add-line、 dow-arrow、 add-pag…

SQLI LABS | Less-8 GET-Blind-Boolian Based-Single Quotes

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-8/ 靶场提示 …

前端实现监控埋点

前端实现监控埋点 前言 我们在应用开发完成本地测试跑通以后上线&#xff0c;线上可能会出现一些测试没有测出来的问题&#xff0c;那么这个时候我们如何定位到哪里会出现问题呢&#xff0c;因为在测试环境可能浏览器的不同&#xff0c;或是没有做兜底出现了一些线上的问题&a…

TLS协议基本原理与Wireshark分析

01背 景 随着车联网的迅猛发展&#xff0c;汽车已经不再是传统的机械交通工具&#xff0c;而是智能化、互联化的移动终端。然而&#xff0c;随之而来的是对车辆通信安全的日益严峻的威胁。在车联网生态系统中&#xff0c;车辆通过无线网络与其他车辆、基础设施以及云端服务进行…

取消element-ui中账号和密码登录功能浏览器默认的填充色,element-ui登录账号密码输入框禁用浏览器默认填充色问题

标题 问题展示 修改后 <div class="loginForm"><el-formref="formB":model="formDataB":rules="rulesB"class="login-form"label-position="left"><el-form-item prop="userNo" clas…

Spring Boot与Flyway实现自动化数据库版本控制

一、为什么使用Flyway 最简单的一个项目是一个软件连接到一个数据库&#xff0c;但是大多数项目中我们不仅要处理我们开发环境的副本&#xff0c;还需要处理其他很多副本。例如&#xff1a;开发环境、测试环境、生产环境。想到数据库管理&#xff0c;我们立刻就能想到一系列问…

Java最全面试题->Java基础面试题->JavaWeb面试题->Maven面试题

文章目录 Maven什么是maven&#xff1f;maven优缺点&#xff1f;maven常见的依赖范围有哪些?maven 坐标的含义?maven 常用命令?maven构建的过程&#xff1f;maven的生命周期&#xff1f;使用“mvn clean package”命令进行项目打包&#xff0c;该命令具体做了什么&#xff1…