目 录
本文介绍了外卖点餐软件APP的设计与实现的开发全过程。通过分析外卖点餐软件APP的设计与实现过程,创建了一个外卖点餐软件APP的设计与实现的方案。文章介绍了外卖点餐软件APP的设计与实现的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。
本外卖点餐软件APP的设计与实现有管理员,卖家,普通用户共三个角色。管理员功能有个人中心,用户管理,订单状态管理,销售统计管理,系统管理,网站管理,商城管理等。普通用户都可以在APP上面进行注册和登录操作。卖家角色可以在APP上面进行菜品的添加,修改,删除,查询操作,可以对用户的订单进行审核操作,查看订单状态和销售统计,可以查看订单信息等。用户角色可以在APP上面进行菜品的查看和查询,对自己下的订单进行支付操作,查看订单和对订单评价,收藏菜品等操作。因而具有一定的实用性。
本站后台采用uni-app的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,软件用到了uni-app开发工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得外卖点餐软件APP的设计与实现管理工作系统化、规范化。
关键词:SSM;MYSQL;外卖点餐软件APP
Abstract
This article introduces the entire process of designing and implementing a takeout ordering software app. By analyzing the design and implementation process of the takeout ordering software APP, a plan for the design and implementation of the takeout ordering software APP was created. The article introduces the system analysis part of the design and implementation of the takeout ordering software APP, including feasibility analysis, etc. The system design part mainly introduces the system function design and database design.
The design and implementation of this takeout ordering software app consists of three roles: administrator, seller, and regular user. The administrator functions include personal center, user management, order status management, sales statistics management, system management, website management, mall management, etc. Ordinary users can register and log in on the app. The seller role can add, modify, delete, and query dishes on the app, review user orders, view order status and sales statistics, and view order information. User roles can view and query dishes on the app, perform payment operations on their orders, view and evaluate orders, and collect dishes. Therefore, it has certain practicality.
This website adopts uni-app's SSM framework for backend management and development. Users can log in to the browser to manage backend data. MySQL serves as a local database and the software uses uni app development tools to fully ensure system stability. The system has the characteristics of clear interface, simple operation, and complete functions, making the design and implementation of the takeout ordering software APP systematic and standardized in management work.
Keywords: SSM; MYSQL; Delivery ordering software app
1 绪论
1.1 研究背景
当前高速发展的经济模式下,人们工作和生活都处于高压下,没时间做饭,在哪做饭成了人们的难题,传统下班回家做饭的生活习俗渐渐地变得难以实现。在社会驱动下,我国在餐饮方面的收入额,逐年成上升趋势。餐饮方面带来的收入拉高了社会消费品的零售总额。不得不说,餐饮行业的转型已经开始慢慢地有了成效,整个餐饮市场正处于不断复苏的状态中。即使人们在外就餐很方便,但有时候难免会遇到一些意外的情况,有时候到餐馆就餐会遇到排长队或是就餐位置拥挤的现象;有一些“蜗居”族不愿出家门嫌麻烦不动手做饭又想享受到美味的食物。
因此伴随而来的很多新式的订餐服务和订餐方式也逐渐产生,在以前人们都是单一的通过订餐电话来进行订餐,但随着近些年来的发展,订餐电话已经不能够满足越来越多的订餐人群的需要,越来越多的缺陷明显出现。基于以上种种原因,本软件设计的目标就是将传统的通过电话和面对面的餐点销售方式,转换到基于APP这样一个更方便快捷的外卖网络订餐方式。通过外卖订餐软件APP的建设,商家能在APP上更为系统地处理众多客户的订单,甚至还能在APP上管理自己店铺的经营情况和员工情况等。另外在APP上,用户可以通过图文并茂的美食和搜索功能可以更快捷方便地预定购买自己想要吃的餐点,而且这并没有时间和餐点种类的限制,这更好地解决了有些用户想在同一时间享用多家店铺食品的情况。每一分每一秒对于商家来说都是利益,节约时间就能够节约大量的成本,在某些角度上来说这就是在盈利。对用户来说,足不出户就可以购买到自己想要吃的东西,就是一种理想的购买模式。外卖订餐软件APP最主要的目的和意义就在于为商家和客户节约更多的时间和精力,使其能更为方便快捷地满足各自的需求。
1.2研究目的
随着互联网技术的快速发展,网络时代的到来,网络信息也将会改变当今社会。各行各业在日常企业经营等方面也在慢慢的向规范化和网络化趋势汇合。外卖点餐软件APP的设计与实现的信息化程度体现在将互联网与信息技术应用于经营上,以现代化工具代替传统手工更加迎合现今的消费者。
1.3论文结构与章节安排
本外卖点餐软件APP一共分为六个章节进行介绍,章节内容安排如下:
第一章:引言。第一章主要介绍了外卖点餐软件APP课题研究的背景,外卖点餐软件APP的目的和本文的研究内容与主要工作。
第二章:系统需求分析。第二章主要从系统的用户功能等方面进行需求分析。
第三章:系统设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试
第六章:总结。
2 外卖点餐软件APP系统分析
2.1 可行性分析
从开发工具来看,由于外卖点餐软件APP是基于uni-app技术的,因此当前市面上的开发工具都可以来开发,这些功能强大的开发工具可以给我来设计毕设带来非常大的方便。
从外卖点餐软件APP的本身技术来说,对于我来开发一个外卖点餐软件APP这个毕设是不费事的。外卖点餐软件APP的开发可以简单的分为前台模块、后台模块开发以及数据库开发。其中的大部分技术难点在我上学时已经使用过了,同时网络上很多技术点可以让我来借鉴。Web后台管理使用VUE、SSM等技术,数据库使用mysql,因此为我在开发外卖点餐软件APP这个毕设上省去了很多多余代码,这给我的毕设项目编写带来了极大的便利。
要开发的外卖点餐软件APP,在技术的选择方面,经过对目前主流技术的对比,以及个人技术的掌握情况,选用了功能很是强大的IDEA开发工具,基于uni-app技术,采用SSM框架,简单而又安全,能够加快开发进度;对于程序数据的存储方面,则选择采用MySQL这一安全、开源的数据库,来存储数据。这些技术都很是成熟,而且也已经熟练掌握,所以,利用它们来完成外卖点餐软件APP的开发,不在话下,可行。
2.1.2 经济可行性分析
从外卖点餐软件APP的开发成本来看,外卖点餐软件APP的设计和开发都是我自己完成的,没有其他成本上的开销。
从外卖点餐软件APP的维护成本来看,外卖点餐软件APP的开发遵循一套完整的代码编写规范,并且外卖点餐软件APP的结构设计非常灵活,遵循高内聚低耦合的原则,因此易于维护和迭代开发。
在外卖点餐软件APP上线之后,上线前期我会根据真实需求来调查,对使用我开发的外卖点餐软件APP来制定一套符合的使用费。系统运行稳定后我会将推广范围到其他行业的中,他们可以自己来注册使用我的外卖点餐软件APP,只需要缴纳一点点的定金,我会给他们引入广告投资和自营业务。
综合以上的分析,外卖点餐软件APP所带来的经济效益将会带来极大的收益。并且随着我的推广,来使用我开发的外卖点餐软件APP的市场将越来越大,外卖点餐软件APP带来的利润也就越来越多。因此,从经济层面来看开发外卖点餐软件APP的是可行的。
本次开发的外卖点餐软件APP是比较简单的,只要会使用APP的用户就可以使用,进入系统以后,可以根据提示进行对应的操作,不管是系统的操作设计黑石系统的逻辑设计都相对简单,比如说用户想要购买某一个菜品的时候,首先是要了解菜品的各种参数,在了解的过程中,我们在这个页面中设置了醒目的购买菜单,方便用户购买,所以说在用户使用方面看来是比较容易操作的;再来看管理者管理部分,我们对系统价格的设置,各种参数的设置都是固定的,操作者只要进入后就能够实现增删改查,非常方便,综合来说,系统在操作上是可行的。
2.2.1 数据流程
外卖点餐软件APP主要的目的就是实现对菜品的在线选购,图2-1就是系统的数据流图。
![](https://i-blog.csdnimg.cn/direct/47647bee013e4572b07c85defe987de8.png)
图2-1菜品购买操作展开图
3.3.2 业务流程
分析完系统的数据流,接下来我们来看系统的业务流程,图2-2就是业务流程图:
图2-2业务流程图
按照外卖点餐软件APP的角色,我划分为了普通用户管理模块、卖家管理模块和管理员管理模块这三大部分。
用户管理模块:
(1)用户注册登录:用户注册为会员并登录外卖点餐软件APP;用户对个人信息的增删改查,比如个人资料,密码修改。
(2)用户查看菜品:用户进行菜品信息的阅览,通过发现喜欢的菜品后可以加购+购买+评论+收藏。
(3)网站公告:用户进行网站公告的阅览,查看管理者发布的行网站公告信息。
(4)购物车:用户对喜欢的菜品可以加购,在购物车里面,可以查看到所有加购的菜品,支持对菜品数量的更改、删除菜品,可以进行选择购买。
(6)我的订单:用户在提交订单后,可以对提交的订单进行管理。
(7)收货地址:点击“我的”中“我的地址”按钮的时候就会显示出自己的收货地址信息,支持对收货地址的增删改查操作。
(8)我的收藏:点击“我的”中“我的收藏”按钮的时候就会显示出自己收藏的各种信息了,支持对收藏信息的搜索查询,如果你想不再收藏某一信息,点击删除就可以了。
卖家管理模块:
(1)商城:点击“商城”可以查看到自己的所有的菜品,如果想要添加新的菜品,点击“添加”按钮,根据提示输入上菜品信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果菜品信息有误,可以对菜品更新维护,也可以直接删除某一菜品。
(2)订单列表:点击“订单列表”可以查看到用户购买的我的菜品订单,对提交的订单进行管理。
(3)订单状态:点击“订单状态”可以查看到自己的添加的所有的订单状态信息,如果想要添加新的订单状态,点击“添加”按钮,根据提示输入上订单状态信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果订单状态信息有误,可以对订单状态更新维护,也可以直接删除某一订单状态。
管理员管理模块:
(1)系统管理:管理员点击“轮播图”菜单可以对首页展示的轮播图进行增删改查。
(2)用户管理:管理员可以对外卖点餐软件APP中所有的用户进行管控,包括了管理员,卖家,注册用户。
(3)网站公告:管理员点击“网站公告”菜单可以查看到系统中的所有网站公告信息,对已经存在的网站公告,管理员可以修改,也可以添加新的网站公告或者删除网站公告。
(4)商城管理:综合管理所属外卖点餐软件APP中的所有的菜品、菜品中心以及用户提交的订单信息。
(5)订单状态管理:管理员点击“订单状态管理”菜单能够对其下子菜单订单状态进行增删改查。
外卖点餐软件APP的非功能性需求比如外卖点餐软件APP的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1外卖点餐软件APP非功能需求表
安全性 | 主要指外卖点餐软件APP数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指外卖点餐软件APP能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响外卖点餐软件APP占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着外卖点餐软件APP的页面展示内容进行操作,就可以了。 |
可维护性 | 外卖点餐软件APP开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.4 系统用例分析
通过2.3功能的分析,得出了本外卖点餐软件APP的用例图:
用户角色用例如图2-3所示。
图2-3 外卖点餐软件APP用户角色用例图
卖家角色用例如图2-4所示。
图2-4 外卖点餐软件APP卖家角色用例图
web后台管理上的管理员是维护整个外卖点餐软件APP中所有数据信息的。管理员角色用例如图2-5所示。
本章主要通过对外卖点餐软件APP的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个外卖点餐软件APP要实现的功能。同时也为外卖点餐软件APP的代码实现和测试提供了标准。
本章主要讨论的内容包括外卖点餐软件APP的功能模块设计、数据库系统设计。
3.1 系统功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本外卖点餐软件APP中的用例。那么接下来就要开始对本外卖点餐软件APP的架构、主要功能和数据库开始进行设计。外卖点餐软件APP根据前面章节的需求分析得出,其总体设计模块图如图3-1所示。
![](https://i-blog.csdnimg.cn/direct/47cf7f30a84c462a864e31dc4638dda9.png)
图3-1 外卖点餐软件APP功能模块图
3.1.2用户模块设计
后台管理者能够实现对前台注册的用户增删改查操作,用户模块结构图如下图:
图3-2会员用户模块结构图
3.1.3 评论管理模块设计
外卖点餐软件APP是一个交流性质的公开平台,会员用户可以在平台上交流,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的言论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:
![](https://i-blog.csdnimg.cn/direct/0a38e11edd844e9bac073a39f32dcdea.png)
图3-3评论模块结构图
3.1.4商城管理模块设计
外卖点餐软件APP是中需要存储不少菜品信息,其模块功能结构,具体的结构图如下:
![](https://i-blog.csdnimg.cn/direct/5e5dce000800464db810b28b6eec659f.png)
图3-4商城模块结构图
3.1.5订单管理模块设计
外卖点餐软件APP最重要的一个功能就是购买,其模块功能结构,具体的结构图如下:
![](https://i-blog.csdnimg.cn/direct/2463b1d3219040a881eb21f1cbb7acd7.png)
图3-5订单模块结构图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.2.1 数据库概念结构设计
下面是整个外卖点餐软件APP中主要的数据库表总E-R实体关系图。
![](https://i-blog.csdnimg.cn/direct/e67080b6e2a04c498b74211373393150.png)
图3-6 外卖点餐软件APP总E-R关系图
通过上一小节中外卖点餐软件APP中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
(1)ordinary_users表如表3-1所示包含了普通用户id+用户姓名+用户性别+用户ID+审核状态等,主要用在前台用户来登录注册外卖点餐软件APP时进行使用。
表3-1 ordinary_users普通用户信息表
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | ordinary_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
(2)order_status表如表3-2所示包含了订单状态信息的主键+店铺账号+店铺名称+用户账号+订单编号+下单日期+订单状态等。
表3-2 order_status订单状态信息表
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | order_status_id | int | 10 | 0 | N | Y | 订单状态ID | |
2 | store_account | int | 10 | 0 | Y | N | 0 | 店铺账号 |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | user_account | int | 10 | 0 | Y | N | 0 | 用户账号 |
5 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
6 | order_date | date | 10 | 0 | Y | N | 下单日期 | |
7 | order_status | varchar | 64 | 0 | Y | N | 订单状态 | |
8 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
(3)dish_center表如表3-3所示,主要在卖家中可以更好的调动菜品的价格以及推荐的菜品更换,在前端(买家)可以有效的查找菜品、直观的看到菜品外观和菜品的属性等等。
表3-3 dish_center菜品中心信息表
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | dish_center_id | int | 10 | 0 | N | Y | 菜品中心ID | |
2 | dish_specifications | varchar | 64 | 0 | Y | N | 菜品规格 | |
3 | store_account | int | 10 | 0 | Y | N | 0 | 店铺账号 |
4 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
5 | store_address | text | 65535 | 0 | Y | N | 店铺地址 | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
7 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
8 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
9 | cart_title | varchar | 125 | 0 | Y | N | 标题:[0,125]用于产品html的标签中 | |
10 | cart_img | text | 65535 | 0 | Y | N | 封面图:用于显示于产品列表页 | |
11 | cart_description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
12 | cart_price_ago | double | 8 | 2 | N | N | 0.00 | 原价:[1] |
13 | cart_price | double | 8 | 2 | N | N | 0.00 | 卖价:[1] |
14 | cart_inventory | int | 10 | 0 | N | N | 0 | 商品库存 |
15 | cart_type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
16 | cart_content | longtext | 2147483647 | 0 | Y | N | 正文:产品的主体内容 | |
17 | cart_img_1 | text | 65535 | 0 | Y | N | 主图1: | |
18 | cart_img_2 | text | 65535 | 0 | Y | N | 主图2: | |
19 | cart_img_3 | text | 65535 | 0 | Y | N | 主图3: | |
20 | cart_img_4 | text | 65535 | 0 | Y | N | 主图4: | |
21 | cart_img_5 | text | 65535 | 0 | Y | N | 主图5: | |
22 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
23 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
(4)order表如表3-4所示,主要订单信息由前端(买家)发出订单卖家和管理员执行管理而形成的,买家、卖家、管理员都可以在看到订单所有的信息。
表3-4 order订单信息表
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | order_id | int | 10 | 0 | N | Y | 订单ID: | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单号: | |
3 | goods_id | mediumint | 8 | 0 | N | N | 商品id:[0,8388607] | |
4 | title | varchar | 32 | 0 | Y | N | 商品标题: | |
5 | img | varchar | 255 | 0 | Y | N | 商品图片: | |
6 | price | double | 10 | 2 | N | N | 0.00 | 价格: |
7 | price_ago | double | 10 | 2 | N | N | 0.00 | 原价: |
8 | num | int | 10 | 0 | N | N | 1 | 数量: |
9 | price_count | double | 8 | 2 | N | N | 0.00 | 总价: |
10 | norms | varchar | 255 | 0 | Y | N | 规格: | |
11 | type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
12 | contact_name | varchar | 32 | 0 | Y | N | 联系人姓名: | |
13 | contact_email | varchar | 125 | 0 | Y | N | 联系人邮箱: | |
14 | contact_phone | varchar | 11 | 0 | Y | N | 联系人手机: | |
15 | contact_address | varchar | 255 | 0 | Y | N | 收件地址: | |
16 | postal_code | varchar | 9 | 0 | Y | N | 邮政编码: | |
17 | user_id | int | 10 | 0 | N | N | 0 | 买家ID: |
18 | merchant_id | mediumint | 8 | 0 | N | N | 0 | 商家ID: |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
21 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
22 | state | varchar | 16 | 0 | N | N | 待付款 | 订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成 |
(5)address表如表3-5所示,主包含了收货地址id+姓名+手机+邮编+地址,主要用在用户对提交订单选择地址的时候进行使用。
表3-5 address收货地址信息表
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | address_id | int | 10 | 0 | N | Y | 收货地址: | |
2 | name | varchar | 32 | 0 | Y | N | 姓名: | |
3 | phone | varchar | 13 | 0 | Y | N | 手机: | |
4 | postcode | varchar | 8 | 0 | Y | N | 邮编: | |
5 | address | varchar | 255 | 0 | N | N | 地址: | |
6 | user_id | mediumint | 8 | 0 | N | N | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | default | bit | 1 | 0 | N | N | 0 | 默认判断 |
(6)sales_statistics表如表3-6所示包含了销售统计信息的销售统计ID+店铺账号+店铺名称+订单编号+下单日期+销售月份+销售金额等。
表3-6 sales_statistics销售统计信息表
名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 | |
1 | sales_statistics_id | int | 10 | 0 | N | Y | 销售统计ID | |
2 | store_account | int | 10 | 0 | Y | N | 0 | 店铺账号 |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
5 | order_date | date | 10 | 0 | Y | N | 下单日期 | |
6 | sales_month | varchar | 64 | 0 | Y | N | 销售月份 | |
7 | sales_amount | int | 10 | 0 | Y | N | 0 | 销售金额 |
8 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
(7)cart表如表3-7所示,主要用于用户在前台把自己喜欢的菜品加入到购物车中,对购物车中的菜品进行管理。
表3-7 cart购物车信息表
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | cart_id | int | 10 | 0 | N | Y | 购物车ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | img | varchar | 255 | 0 | N | N | 0 | 图片: |
4 | user_id | int | 10 | 0 | N | N | 0 | 用户ID: |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | state | int | 10 | 0 | N | N | 0 | 状态:使用中,已失效 |
8 | price | double | 9 | 2 | N | N | 0.00 | 单价: |
9 | price_ago | double | 9 | 2 | N | N | 0.00 | 原价: |
10 | price_count | double | 11 | 2 | N | N | 0.00 | 总价: |
11 | num | int | 10 | 0 | N | N | 1 | 数量: |
12 | goods_id | mediumint | 8 | 0 | N | N | 商品id:[0,8388607] | |
13 | type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
14 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 |
(8)seller表如表3-1所示包含了卖家id+店铺编号+店铺名称+店铺地址+审核状态等,主要用在卖家来登录外卖点餐软件APP时进行使用。
表3-8 seller卖家信息表
名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 | |
1 | seller_id | int | 10 | 0 | N | Y | 卖家ID | |
2 | store_number | varchar | 64 | 0 | Y | N | 店铺编号 | |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | store_address | text | 65535 | 0 | Y | N | 店铺地址 | |
5 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
6 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
3.4本章小结
整个外卖点餐软件APP的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 外卖点餐软件APP详细设计与实现
外卖点餐软件APP的详细设计与实现主要是根据前面的外卖点餐软件APP的需求分析和外卖点餐软件APP的总体设计来设计页面并实现业务逻辑。主要从外卖点餐软件APP界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入外卖点餐软件APP的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 注册界面
普通的用户只支持对网站信的浏览,想要购买就必须登录到系统,如果你没有本外卖点餐软件APP的账号的话,添加“注册”根据提示输入好用户信息后,点击“注册”按钮后,系统会对输入的信息进行验证,验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用注册界面展示如下图4-2所示。
图4-2 前台注册界面图
注册关键代码如下所示。
/**
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
4.1.3 登录界面
外卖点餐软件APP中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到外卖点餐软件APP的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3登录界面图
登录关键代码如下所示。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.1.4网站公告界面
用户点击“网站公告”菜单显示管理员在后台发布的所有的网站公告信息,可以查看网站公告详情。界面如下图4-4所示。
图4-4网站公告界面图
4.1.5 收货地址界面
当用户点击“收货地址”右后,就回去显示出目前现有的地址,也可以添加新的地址,界面如下图4-5所示。
图4-5收货地址界面图
4.1.6 商品详情界面
当访客点击了任意商品后将会进入该款商品的详情界面,可以了解到该商品的图片信息、商品信息、价钱信息等,同时可以对该商品进行加购+立即购买+收藏+点赞+评论,商品详情展示页面如图4-6所示。
图4-6 商品详情界面图
4.1.7 我的订单界面
当用户点击“我的订单”链接后就进入自己购买的订单的界面展示,界面如下图4-7所示。
图4-7 我的订单界面图
点击“商城”可以查看到自己的所有的菜品,如果想要添加新的菜品,点击“添加”按钮,根据提示输入上菜品信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果菜品信息有误,可以对菜品更新维护,也可以直接删除某一菜品。界面如下图4-8所示。
图4-8 商城界面图
卖家进入后台后点击“订单列表”,能够看到用户购买自己菜品的时候提交的订单。界面如下图4-9所示。
![](https://i-blog.csdnimg.cn/direct/fe9b90dd833a4e1a8cdc6886a5b6478c.png)
图4-9 订单列表界面图
点击“订单状态”可以查看到自己的添加的所有的订单状态信息,如果想要添加新的订单状态,点击“添加”按钮,根据提示输入上订单状态信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果订单状态信息有误,可以对订单状态更新维护,也可以直接删除某一订单状态。界面如下图4-10所示。
![](https://i-blog.csdnimg.cn/direct/35a5f7b0cd2d4d948dad21b78823d638.png)
图4-10 订单状态界面图
4.3管理员功能模块
4.3.1 系统用户管理界面
管理员可以对外卖点餐软件APP中所有的用户进行管控,包括了管理员,卖家,普通用户。界面如下图4-11所示。
![](https://i-blog.csdnimg.cn/direct/683d9c9b7bd04add8b6d742cc22ef50e.png)
图4-11 用户管理界面图
系统用户管理管理关键代码如下所示。
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.3.2 订单状态管理界面
点击“订单状态管理”按钮会显示所有的订单状态信息,如果想要添加新的订单状态,点击“添加”按钮根据提示输入订单状态信息,点击“提交”后在订单状态管理界面就可以显示了,如果信息有错,点击“编辑”按钮可以对订单状态信息进行更新维护,也可以直接删除某一订单状态,还可以管理销售统计信息,界面如下图4-12所示。
![](https://i-blog.csdnimg.cn/direct/9c51ccc6ddd245debb6b3c1202d211c4.png)
图4-12订单状态管理界面图
4.3.3系统管理界面
管理员点击“系统管理”菜单可以查看到系统中的所有轮播图信息,对已经存在的轮播图,管理员可以修改,也可以添加新的轮播图或者删除轮播图。界面如下图4-13所示。
![](https://i-blog.csdnimg.cn/direct/5b2436016df044238b8ff59a0f7e8951.png)
图4-13系统管理界面图
5系统测试
系统的前台、后台、数据库完成以后,这个系统才算是完成了一半,我们在这之后要对系统进行最后的一个阶段,那就是测试了,测试对一个系统来说是非常重要的,有的时候开发完一个系统,如果测试不合格的话,这个系统是没有办法进行投入使用的,所有我们要用测试对系统的功能进行检验,把不完善的功能尽量完善,把出现的bug解决掉,然后给用户呈现出一个完美的系统。通过对系统最后一步的测试,使得开发人员对自己的系统更加有信心,更加积极的为后期的系统版本的更新提供支持。
系统测试包括:用户登录功能测试、菜品展示功能测试、菜品添加、菜品搜索、密码修改功能测试,菜品功能测试,如表5-1、5-2、5-3、5-4、5-5、5-6所示:
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
菜品查看功能测试:
表5-2 菜品查看功能测试表
用例名称 | 菜品查看 |
目的 | 测试菜品查看功能 |
前提 | 无 |
测试流程 | 点击菜品 |
预期结果 | 可以查看到所有菜品信息 |
实际结果 | 实际结果与预期结果一致 |
管理员添加菜品信息界面测试:
表5-3 管理员添加菜品信息界面测试表
用例名称 | 添加菜品信息测试用例 |
目的 | 测试菜品信息添加功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员点击菜品信息,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的菜品信息 |
实际结果 | 实际结果与预期结果一致 |
菜品搜索功能测试:
表5-4菜品搜索功能测试表
用例名称 | 菜品搜索测试 |
目的 | 测试菜品搜索功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 | 页面显示包含有搜索关键字的菜品 |
实际结果 | 实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
菜品功能测试:
表5-6菜品功能测试表
用例名称 | 菜品测试用例 |
目的 | 测试用户菜品功能 |
前提 | 用户正常登录情况下 |
测试流程 | 1)搜索查看菜品信息,点击菜品。 2)填写菜品信息,点击进行提交。 |
预期结果 | 菜品成功 |
实际结果 | 实际结果与预期结果一致 |
5.3 系统测试结果
通过编写外卖点餐软件APP的测试用例,已经检测完毕用户登录模块、菜品查看模块、菜品添加模块、菜品搜索模块、密码修改功能测试,菜品模块功能测试,通过这六大模块为外卖点餐软件APP的后期推广运营提供了强力的技术支撑。
至此论文结束,感谢您的阅读。在此我要感谢我的导师,虽然我在实习期间很忙,论文撰写总是停停改改,但是导师依然十分负责,时不时的询问我的任务进展情况,跟进我的论文进度。虽然我在实习期间很忙,以至于很晚才开始进行论文撰写和编写程序的工作,但是在指导老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识,和经验,这些知识和经验令我受益匪浅。也从导师身上看到了自己的不足,不论是在即使层面上还是在对待工作的态度上,倒数如同明镜一般照出了我的缺点我的不足。此外,我还要感谢在我实习期间在论文和程序上帮助过我的同学和社会人士,此前我对于SSM开发方面的一些知识还不了解,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测。没有他们我是不能顺利完成本次毕业设计的。至此,我的毕业设计就花上了一个圆满的句号了。
[1]文臻铭,吴钧皓.基于SSM框架的电力电缆附件电子商城系统设计与实现[J].工业控制计算机,2023,36(08):145-146+153.
[2]王侠,汪进敏,师瑜等.“快吃”点餐小程序的设计与运营构想[J].中国质量万里行,2023(02):62-65.
[3]杨一帆.服务于MySQL数据库的在线监测系统设计[J].自动化技术与应用,2022,41(10):179-182.
[4]谢霜.基于uni-app技术的网络管理体系结构的应用[J].网络安全技术与应用,2022(10):14-15.
[5]苏婉怡,揣小龙,赵国松等.基于uni-app技术的考试系统关键点研究[J].无线互联科技,2022,19(18):58-60.
[6]杨玉莲.基于SSM框架的智能煤质化验室综合管理系统[J].煤矿现代化,2022,31(05):100-104+109.
[7]唐小玲.基于SSM框架的资质管理系统开发解析[J].科学技术创新,2022(26):80-83.
[8]林佳一.混合式教学在高职MySQL数据库课程的实践研究[J].电脑知识与技术,2022,18(26):133-135.
[9]刘爱玲.外卖点餐联合提示来了[J].大众健康,2022(08):82-83.
[10]种倩倩,孙丽英,陈滨等.基于微信小程序的点餐系统的设计与开发[J].电脑知识与技术,2022,18(19):66-69+73.
[11]王苏,王晓成,程景民.山西省大学生外卖点餐相关因素及与超重肥胖的关系[J].中国学校卫生,2021,42(12):1829-1832.
[12]陈帅.微信点餐系统小程序的设计与实现[J].电子技术与软件工程,2021(24):30-31.
[13]曾勇. 用于手机的智慧餐厅点餐小程序操作界面[P]. 四川省:CN306638039S,2021-06-25.
[14]. Information Technology - Data Management; Data on Data Management Reported by Researchers at Port Said University (Performance Evaluation of Iot Data Management Using Mongodb Versus Mysql Databases In Different Cloud Environments)[J]. Computer Technology Journal,2020.
[15]邓燕灵, WDU高校食堂点餐小程序V1.0. 湖北省,武汉东湖学院,2020-07-01.
[16]孙婷婷,吴超.俩小伙外卖点餐吃完就“生病”?发财之道被警方识破[J].广西质量监督导报,2019(08):3.
[17]俞健.外卖点餐优惠多[J].数学小灵通(1-2年级版),2019(04):28-29.
[18]Margaretha Ohyver,Jurike V. Moniaga,Iwa Sungkawa,Bonifasius Edwin Subagyo,Ian Argus Chandra. The Comparison Firebase Realtime Database and MySQL Database Performance using Wilcoxon Signed-Rank Test[J]. Procedia Computer Science,2019,157(C).
逝者如斯夫,不舍昼夜。转眼间,大学生活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?
感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。
少年,追风赶月莫停留,平荒尽处是春山。