1 系统背景
随着互联网技术的快速发展,外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制,而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来,实现了点餐、支付、配送等关键环节的无缝协作。
外卖订餐系统的目标是简化人们的订餐过程,提供便捷的外卖服务。系统允许顾客通过网页或手机应用平台进行在线订餐,浏览菜单、选择餐品、定制口味,并可选择不同的支付方式完成支付。餐厅方面可以通过系统管理菜单、接受新的订单、派发配送任务,并对订单进行统计和分析。配送人员可以通过系统接受配送任务,并实时更新配送进度。
外卖订餐系统的需求来源于顾客对于更加方便快捷的订餐方式的期望,以及餐厅和配送人员对于提升效率和客户满意度的追求。因此,通过设计和实现一个高效、可靠、易用的外卖订餐系统,可以提升整个订餐服务的质量和效率,实现顾客、餐厅和配送人员的共赢。
2 系统开发环境
2.1 硬件环境
项目 | 最低配置 | 推荐配置 |
---|---|---|
内存 | 淮海晚报 | 2G |
CPU | 单核 | 四核 |
硬盘 | 10G | 500G |
带宽 | 512K | 10M |
表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)
- 配置环境
IDEA 2019.3.3 x64
Node v14
网络:100Mbps的无线网络
2.3 相关技术
-
编程语言:系统将使用Java作为主要开发语言,以实现系统的功能和逻辑。
-
开发框架:系统将采用Spring、ASP.NET等作为开发框架,以提供开发所需的基础设施和工具。
-
数据库:系统将使用MySQL作为数据存储和管理的技术,以支持数据的持久化存储和高效查询。
-
前端技术:系统的用户界面将采用HTML、CSS、JavaScript等进行开发,以实现用户友好的交互体验和界面设计。
-
云平台服务:系统的部署和运行将基于Azure提供的云计算服务,以实现系统的可用性、可扩展性和灵活性。
-
版本控制:系统开发过程中将使用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 性能需求
-
并发处理:系统应能够处理大量用户同时访问、点餐和支付的需求,保证并发用户的正常操作。
-
响应时间:系统应能够在合理的时间内响应用户的请求,包括菜单浏览、搜索、点餐和支付等功能的响应时间。
-
可用性:系统应具备高可用性,保证24小时稳定运行,避免因系统故障或维护而导致的长时间无法使用。
-
安全性:系统应保护用户信息的安全性,采用合适的加密和身份验证机制,防止未授权访问及数据泄露。
-
扩展性:系统应具备良好的扩展性,能够根据用户量的增加灵活地扩展服务器和网络资源,以保证系统的性能和稳定性。
-
容错性:系统应具备容错能力,能够处理和恢复部分系统故障,保证系统的连续性和可靠性。
以下是性能处理方面:
(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 系统运行原理
- 用户注册与登录:
用户通过注册账号并登录系统,可以使用系统的各项功能。系统在用户注册时进行账号信息的有效性验证,并将用户信息保存在用户数据库中。
- 餐厅信息管理:
管理员可以添加、编辑和删除餐厅信息,包括餐厅名称、地址、联系信息等。用户可以根据餐厅名和位置等信息查询餐厅,以选择合适的餐厅进行订餐。
- 菜单管理:
餐厅管理员可以在系统中添加、编辑和删除菜单项,包括菜名、价格、描述等。用户可以浏览餐厅的菜单,并选择自己想要的菜品进行订购。
- 订单管理:
用户选择菜品后,系统会根据用户的选择生成订单。订单包括用户信息、餐厅信息、菜品信息和订单状态等。系统会实时更新订单状态,例如待付款、正在配送和已完成等状态。
- 支付与配送:
用户在系统中选择合适的支付方式完成付款,并填写配送地址和联系方式。系统将根据订单状态进行配送,并及时更新订单状态。用户可以通过系统追踪订单状态,以了解订单的配送进度。
- 评价与反馈:
用户可以对已完成的订单进行评价和反馈。系统会显示用户的评价和餐厅的评分,以帮助其他用户选择餐厅和菜品。
- 管理与维护:
系统管理员可以对系统进行管理和维护,包括用户管理、餐厅管理、订单管理等。管理员还可以分析和统计系统的运行情况,例如用户使用情况、菜品销量等,以便优化系统的性能和用户体验。
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 管理员信息表
字段名 | 列类型与长度 | 描述 | 备注 |
---|---|---|---|
num | varchar(255) | 工号 | 主键 |
name | varchar(32) | 姓名 | 非空 |
username | varchar(32) | 姓名 | 非空 |
password | varchar(64) | 密码 | 非空 |
表5.8分类信息表
字段名 | 列类型与长度 | 描述 | 备注 |
---|---|---|---|
id | bigint(20) | 编号 | 主键 |
type | int(11) | 类型 | 非空 |
name | varchar(64) | 分类名称 | 非空 |
sotr | int(11) | 顺序 | 非空 |
Create_time | datetime | 创建时间 | 非空 |
Update_time | datetime | 更新时间 | 非空 |
Create_user | bigint(20) | 创建人 | 非空 |
Update_user | bigint(20) | 修改人 | 非空 |
表5.9 菜品管理信息表
字段名 | 列类型与长度 | 描述 | 备注 |
---|---|---|---|
id | bigint(20) | 编号 | 主键 |
name | varchar(64) | 菜品名称 | 非空 |
category_id | bigint(20) | 菜品分类id | 非空 |
price | decimal(10,2) | 菜品价格 | 非空 |
code | varchar(64) | 商品码 | 非空 |
image | varchar(200) | 图片 | 非空 |
description | varchar(400) | 描述信息 | 非空 |
status | int(11) | 0 停售 1 起售 | 非空 |
sort | int(11) | 顺序 | 非空 |
Create_time | datetime | 创建时间 | 非空 |
Update_time | datetime | 更新时间 | 非空 |
Create_user | bigint(20) | 创建人 | 非空 |
Update_user | bigint(20) | 修改人 | 非空 |
is_deleted | int(11) | 是否删除 | 非空 |
表5.10 订单信息表
字段名 | 列类型与长度 | 描述 | 备注 |
---|---|---|---|
id | bigint(20) | 编号 | 主键 |
number | varchar(50) | 订单号 | 非空 |
status | int(11) | 订单状态 1待付款,2待派送,3已派送,4已完成,5已取消 | 非空 |
user_id | bigint(20) | 下单用户 | 非空 |
address_book_id | bigint(20) | 地址id | 非空 |
order_time | datetime | 下单时间 | 非空 |
checkout_time | datetime | 结账时间 | 非空 |
pay_method | int(11) | 支付方式 1微信,2支付宝 | 非空 |
amount | varchar(255) | 实收金额 | 非空 |
remark | varchar(255) | 备注 | 非空 |
phone | varchar(11) | 电话 | 非空 |
address | varchar(255) | 地址 | 非空 |
user_name | varchar(32) | 用户名 | 非空 |
consignee | varchar(50) | 收货人 | 非空 |
表5.11 订单明细表
字段名 | 列类型与长度 | 描述 | 备注 |
---|---|---|---|
id | bigint(20) | 编号 | 主键 |
name | varchar(50) | 名字 | 非空 |
image | varchar(100) | 图片 | 非空 |
order_id | bigint(20) | 订单id | 非空 |
dish_id | bigint(20) | 菜品id | 非空 |
setmeal_id | bigint(20) | 套餐id | 非空 |
dish_flavor | varchar(50) | 口味 | 非空 |
number | int(11) | 数量 | 非空 |
amount | decimal(10,2) | 金额 | 非空 |
表5.12 用户信息表
字段名 | 列类型与长度 | 描述 | 备注 |
---|---|---|---|
id | bigint(20) | 编号 | 主键 |
name | varchar(50) | 姓名 | 非空 |
phone | varchar(100) | 手机号 | 非空 |
sex | varchar(2) | 性别 | 非空 |
id_number | varchar(18) | 身份证号 | 非空 |
avatar | varchar(500) | 头像 | 非空 |
status | int(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 Integer)
If qxstra = ”0” Then
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
**名称:**系统维护
**用例属性:**管理功能
**参与者:**管理员
**描述:**管理员对系统进行测试、修复和用户管理等维护操作。
**优先级:**高
**触发条件:**系统出现问题或需要进行定期维护。
**前置条件:**管理员已登录系统。
**后置条件:**系统稳定运行,用户信息得到有效管理。
正常流程:
管理员登录系统后,进入维护管理模块。
对系统进行测试,检查系统的稳定性和性能。
发现问题时进行修复操作。
对用户进行管理,如添加、删除用户等。