摘 要
基于微信小程序的电影院购票系统的研究旨在设计和开发一个方便、实用的平台,以促进用户方便购买电影票。该平台通过利用微信小程序的功能和特点,提供用户搜索、收藏和评论等功能,为用户提供丰富多样的电影信息和资讯。基于微信小程序的电影院购票系统利用基于MVVM模式进行开发,采用B/S模式,后端部分基于node.js框架进行开发,在功能上分为前台和后台管理两个部分。前台主要为用户提供电影资讯浏览、影院信息、电影信息、消息通知。后台主要是为管理员提供系统用户、资源管理、影院信息管理、电影类型管理、电影信息管理、电影购票管理、取消购票管理、评价反馈管理、系统管理、消息通知管理等功能。
关键词:微信小程序;node.js框架;电影院购票
Abstract
The research on a cinema ticket purchasing system based on WeChat mini programs aims to design and develop a convenient and practical platform to facilitate users in purchasing movie tickets. This platform provides users with rich and diverse movie information and information by utilizing the functions and characteristics of WeChat mini programs, such as searching, bookmarking, and commenting. The cinema ticket purchasing system based on WeChat mini program is developed using MVVM mode, adopting B/S mode. The backend part is developed based on the node.js framework, and is divided into two parts in terms of functionality: front-end and back-end management. The front desk mainly provides users with movie information browsing, cinema information, movie information, and website announcements. The backend mainly provides system users, resource management, cinema information management, movie type management, movie information management, movie ticket management, cancellation ticket management, evaluation feedback management, system management, message notification management, and other functions for administrators.
Keywords: WeChat mini program; Node.js framework; Cinema ticket purchase
目 录
随着智能手机的普及和微信小程序的兴起,用户对于便捷、高效的购票体验需求日益增长,电影院作为人们休闲娱乐的重要场所之一,其购票系统的便捷性和用户体验直接影响到观众的观影体验。。传统的电影院购票方式往往需要人们前往电影院现场购票,或者通过电脑等设备进行网络购票。然而,这种方式存在诸多不便,如排队等待、操作繁琐等,而微信小程序以其无需下载、即用即走的特性,用户只需在微信中搜索或扫描二维码即可打开使用,这种便捷的体验方式使得微信小程序受到越来越多的用户的青睐。对于企业而言,随着微信小程序的不断发展和普及,越来越多的企业和个人开始加入到微信小程序开发的行列中。通过开发基于微信小程序的电影院购票系统,不仅可以为电影院带来更多的客流量和收益,还可以为开发者带来可观的商业利益,提高品牌知名度和用户粘性,为电影院购票系统提供了全新的解决方案。因此,设计并实现一个基于微信小程序的电影院购票系统,不仅有助于提升用户体验,还能为电影院带来更大的客流量和商业价值。
从用户体验角度来看,该系统能够为用户提供更加便捷、高效的购票方式。用户只需通过微信小程序即可随时随地完成购票操作,无需前往电影院现场或依赖其他购票平台,大大节省了时间和精力。同时,微信小程序还具有消息推送功能,能够及时向用户发送电影排片、优惠活动等信息,进一步提升用户体验。对于电影院而言,该系统的实施能够提升服务质量和效率。通过微信小程序,电影院可以更好地管理座位、放映时间等资源,实现资源的优化配置。同时,系统还可以收集并分析用户购票数据,为电影院的市场营销和运营决策提供有力支持通过结合微信小程序的特点和电影院购票的实际需求,可以探索出更加符合现代用户习惯和市场趋势的购票模式。这不仅有助于推动电影院行业的数字化转型,还可以为其他行业的类似系统提供有益的参考和借鉴。
国内:近年来,随着微信小程序的普及和电影院行业的快速发展,基于微信小程序的电影院购票系统在国内得到了广泛关注和应用。众多研究机构和开发者都致力于探索和优化这一系统,以满足消费者日益增长的便捷购票需求。这些系统不仅实现了在线选座、购票、支付等基本功能,还融入了优惠券、会员积分等营销手段,以及实时放映信息、座位图等可视化展示,提升了用户体验。
国外:在国外,虽然电影院的购票系统已经相对成熟,但基于特定社交平台(如类似微信的社交平台)的小程序购票系统仍是一个新兴领域。一些国家已经开始尝试将电影院购票与社交平台的便捷性相结合,探索更加智能化的购票体验。不过,由于文化差异和技术发展水平的不同,国外在这一领域的研究和应用还处于不断探索和完善阶段。
发展趋势:随着移动互联网的深入发展和智能设备的普及,基于微信小程序的电影院购票系统将继续保持强劲的发展势头。未来,这一系统可能会更加注重个性化和智能化服务,例如通过大数据分析用户观影习惯,为用户推荐合适的影片和场次;通过人工智能技术实现智能选座、智能推荐等功能,进一步提升用户体验。同时,随着5G、物联网等新技术的发展,电影院购票系统可能会与其他娱乐、餐饮等业态进行深度融合,形成更加多元化的服务生态。
第一章是绪论,本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。
第二章研究了基于微信小程序的电影院购票系统的所采用的开发技术和开发工具。
第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
第四章是系统设计部分,本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
最后对系统进行了认真的总结,以此对未来有一个新的展望。
(一)Node.js主要功能
V8引擎本身使用了一些最新的编译技术。这使得用Javascript这类脚本语言编写出来的代码运行速度获得了极大提升,又节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务器。Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。
Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。
虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制了我们选择编程语言的自由。任何服务器与日益复杂的浏览器客户端应用程序间共享代码的愿望只能通过Javascript来实现。虽然还存在其他一些支持Javascript在服务器端 运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。
在Node启动的很短时间内,社区就已经贡献了大量的扩展库(模块)。其中很多是连接数据库或是其他软件的驱动,但还有很多是凭他们的实力制作出来的非常有用的软件。
最后,不得不提到的是Node社区。虽然Node项目还非常年轻,但很少看到对一个项目如此狂热的社区。不管是新手,还是专家,大家都围绕着项目,使用并贡献自己的能力,致力于打造一个探索、支持、分享、听取建议的乐土。
(二)小程序框架以及目录结构介绍
整个小程序框架系统分为两部分:逻辑层和视图层。小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 小程序 体验的服务。小程序在视图层与逻辑层间提供了数据传输和事件系统,提供了自己的视图层以及逻辑层框架,让开发者能够专注于数据与逻辑。框架的核心是一个响应的数据绑定系统,可以让数据与视图非常简单地保持同步。在逻辑层做数据修改,在视图层就会做相应的更新。框架提供了一套基础的组件,这些组件自带微信风格的样式以及特殊的逻辑,开发者可以通过组合基础组件,创建出强大的微信小程序。
(三)MySQL数据库
Mysql的语言是非结构化的,用户可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。
Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。
数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。
JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
1.1是一种解释性脚本语言(代码不进行预编译)。
1.2主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
1.3可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。
1.4跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。
1.5 JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。JavaScript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
本系统将在经济、技术、操作这三个角度上进行可行性分析。
整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。
技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于Node.js框架,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。
基于微信小程序的电影院购票系统的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Java技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。
前台用户需求:
(1)我的:主要包括用户的注册和登陆、用户个人信息管理等功能,也包括电影购票、取消购票、评价反馈等信息。
(2)电影资讯模块:主要包括电影资讯信息浏览、电影资讯展示等功能,用户可以点赞、收藏和评论操作。
(3)电影信息模块:用户可以浏览电影信息详情,可以点赞、收藏和评论,也可以进行购票。
(4)影院信息模块:用户可以浏览影院信息详情,可以点赞、收藏和评论。
后台管理员需求:
- 系统用户:管理员可以对系统用户(普通用户、管理员)信息进行增删改查。
- 影院信息管理:管理员可以查看、删除、重置影院信息列表,也可以通过填写影院地址、图片、名称等信息添加影院信息。
- 电影分类管理:管理员可以查看、删除、重置电影分类列表,也可以添加电影分类。
- 电影信息管理:管理员可以查看、删除、重置电影信息列表,也可以通过填写电影名称、海报、场次等信息添加电影信息。
- 电影购票管理:管理员可以查看、删除、重置电影购票列表。
- 取消购票管理:管理员可以查看、删除、重置取消购票列表,审核状态并回复。
- 评价反馈管理:管理员可以查看、删除、重置评价反馈列表。
- 系统管理:管理员可以对系统轮播图进行增删查操作
- 资源管理:管理员可以查看资讯列表和资讯分类。
- 消息通知管理:管理员可以对通知公告进行增删查操作。
用户用例图如下所示。
图1 用户用例图
管理员用例图如下所示。
图2 管理员用例图
影院信息添加用例描述如下表所示。
表1影院信息添加用例描述
用例名称 | 添加新影院信息 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行添加新影院信息操作 | |
前置条件 | 管理员添加新影院信息前必须登录系统 | |
后置条件 | 系统中添加一个新影院信息 | |
基本事件流 | 参与者动作 | 系统响应 |
4、管理员填写新影院信息信息,点击“添加”按钮。 | 2、系统打开添加影院信息界面。 3、系统检查管理员输入的影院信息信息是正确有效的。 5、系统将影院信息添加到数据库中。 6、系统提示“操作成功”。 7、系统跳转到影院信息管理界面。 | |
其他事件流 | 1、系统验证管理员输入的标签名为空,则提示“*请填写完善!” |
消息通知添加用例描述如下表所示。
表2消息通知添加用例描述
用例名称 | 添加消息通知 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行添加消息通知操作 | |
前置条件 | 管理员添加消息通知前必须登录系统 | |
后置条件 | 系统中添加一个消息通知 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“消息通知管理”。 4、管理员选择一个消息通知,点击“添加”按钮。 6、管理员点击“确定”按钮。 | 2、系统从数据库中获取消息通知信息列表 3、系统打开消息通知列表界面。 5、系统提示“你确定要添加吗?”。 7、系统将消息通知从数据库中添加。 8、系统提示“添加成功”。 9、系统跳转到消息通知管理界面。 | |
其他事件流 | 无 |
用户编辑用例描述如下表所示。
表3用户编辑用例描述
用例名称 | 修改用户 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行修改用户信息操作 | |
前置条件 | 管理员已经登录系统 | |
后置条件 | 系统中更新一条用户记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“用户管理”。 4、管理员在用户列表中选择一个用户,点击“编辑”按钮。 6、管理员填写用户信息,点击“保存修改”按钮。 | 2、系统从数据库中获取用户信息。 3、系统打开用户列表界面。 5、系统打开修改用户信息界面。 7、系统将更改后的添加到数据库中。 8、系统提示“操作成功”。 9、系统跳转到用户管理界面。 | |
其他事件流 | 无 |
电影购票用例描述如下表所示。
表4电影购票用例描述
用例名称 | 电影购票 | |
参与者 | 用户 | |
用例概述 | 本用例用于用户进行对电影购票操作 | |
前置条件 | 用户已经登录系统 | |
后置条件 | 系统中增加一条用户分享记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、用户在前台首页选择任意一个电影。 4、管理员在用户列表中选择一个电影。 7、用户点击电影列表。 | 2、系统从数据库中获取电影列表信息。 3、系统打开电影列表界面。 5、系统从数据库中获取电影信息。 6、系统打开电影信息及分享界面。 8、系统检查用户输入的信息是正确有效的。 9、系统将分享记录添加到数据库中。 | |
其他事件流 | 1、系统验证用户输入的字段为空,则提示“分享信息不能为空!”。 |
随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。
系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
图4系统功能结构图
概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。
系统E-R图如下所示。

图5系统E-R图
数据库表是设计和实现系统的一个重要基础。以下列出了基于微信小程序的电影院购票系统几个重要的数据库表。
表access_token (登陆访问时长)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表cancel_ticket_purchase (取消购票)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | cancel_ticket_purchase_id | int | 10 | 0 | N | Y | 取消购票ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用户账号 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | user_phone_number | varchar | 16 | 0 | Y | N | 用户电话 | |
5 | cinema_name | varchar | 64 | 0 | Y | N | 影院名称 | |
6 | movie_title | varchar | 64 | 0 | Y | N | 电影名称 | |
7 | movie_id | varchar | 64 | 0 | Y | N | 电影编号 | |
8 | movie_sessions | varchar | 64 | 0 | Y | N | 电影场次 | |
9 | movie_ticket_prices | int | 10 | 0 | Y | N | 0 | 电影票价 |
10 | purchase_time | datetime | 19 | 0 | Y | N | 购买时间 | |
11 | number_of_tickets_purchased | int | 10 | 0 | Y | N | 0 | 购票数量 |
12 | ticket_purchase_amount | varchar | 64 | 0 | Y | N | 购票金额 | |
13 | ticket_number | varchar | 64 | 0 | Y | N | 购票单号 | |
14 | cancel_time | datetime | 19 | 0 | Y | N | 取消时间 | |
15 | reason_for_cancellation | text | 65535 | 0 | Y | N | 取消原因 | |
16 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
17 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
18 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
19 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | cinema_information_id | int | 10 | 0 | N | Y | 影院信息ID | |
2 | region_name | varchar | 64 | 0 | Y | N | 地区名称 | |
3 | cinema_name | varchar | 64 | 0 | Y | N | 影院名称 | |
4 | cinema_pictures | varchar | 255 | 0 | Y | N | 影院图片 | |
5 | cinema_address | varchar | 64 | 0 | Y | N | 影院地址 | |
6 | cinema_phone | varchar | 64 | 0 | Y | N | 影院电话 | |
7 | screening_facilities | text | 65535 | 0 | Y | N | 放映设施 | |
8 | cinema_details | text | 65535 | 0 | Y | N | 影院详情 | |
9 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
10 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
11 | location_address | varchar | 64 | 0 | Y | N | 当前位置 | |
12 | location_lng | varchar | 64 | 0 | Y | N | 当前位置经度 | |
13 | location_lat | varchar | 64 | 0 | Y | N | 当前位置纬度 | |
14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | evaluation_feedback_id | int | 10 | 0 | N | Y | 评价反馈ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用户账号 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | user_phone_number | varchar | 16 | 0 | Y | N | 用户电话 | |
5 | cinema_name | varchar | 64 | 0 | Y | N | 影院名称 | |
6 | movie_title | varchar | 64 | 0 | Y | N | 电影名称 | |
7 | feedback_time | date | 10 | 0 | Y | N | 反馈时间 | |
8 | feedback_details | text | 65535 | 0 | Y | N | 反馈详情 | |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | film_classification_id | int | 10 | 0 | N | Y | 电影分类ID | |
2 | film_classification | varchar | 64 | 0 | Y | N | 电影分类 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | movie_information_id | int | 10 | 0 | N | Y | 电影信息ID | |
2 | cinema_name | varchar | 64 | 0 | Y | N | 影院名称 | |
3 | movie_title | varchar | 64 | 0 | Y | N | 电影名称 | |
4 | movie_id | varchar | 64 | 0 | N | N | 电影编号 | |
5 | movie_poster | varchar | 255 | 0 | Y | N | 电影海报 | |
6 | release_date | varchar | 64 | 0 | Y | N | 上映日期 | |
7 | movie_sessions | varchar | 64 | 0 | Y | N | 电影场次 | |
8 | countryregion | varchar | 64 | 0 | Y | N | 国家地区 | |
9 | film_classification | varchar | 64 | 0 | Y | N | 电影分类 | |
10 | actor_list | varchar | 64 | 0 | Y | N | 演员表 | |
11 | movie_ratings | int | 10 | 0 | Y | N | 0 | 电影评分 |
12 | movie_ticket_prices | int | 10 | 0 | Y | N | 0 | 电影票价 |
13 | movie_introduction | text | 65535 | 0 | Y | N | 电影简介 | |
14 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
15 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | movie_ticket_purchase_id | int | 10 | 0 | N | Y | 电影购票ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用户账号 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | user_phone_number | varchar | 16 | 0 | Y | N | 用户电话 | |
5 | cinema_name | varchar | 64 | 0 | Y | N | 影院名称 | |
6 | movie_title | varchar | 64 | 0 | Y | N | 电影名称 | |
7 | movie_id | varchar | 64 | 0 | Y | N | 电影编号 | |
8 | movie_sessions | varchar | 64 | 0 | Y | N | 电影场次 | |
9 | movie_ticket_prices | int | 10 | 0 | Y | N | 0 | 电影票价 |
10 | purchase_time | datetime | 19 | 0 | Y | N | 购买时间 | |
11 | number_of_tickets_purchased | int | 10 | 0 | Y | N | 0 | 购票数量 |
12 | ticket_purchase_amount | varchar | 64 | 0 | Y | N | 购票金额 | |
13 | ticket_number | varchar | 64 | 0 | Y | N | 购票单号 | |
14 | pay_state | varchar | 16 | 0 | N | N | 未支付 | 支付状态 |
15 | pay_type | varchar | 16 | 0 | Y | N | 支付类型: 微信、支付宝、网银 | |
16 | seat | varchar | 64 | 0 | N | N | 座位号 | |
17 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_phone_number | varchar | 16 | 0 | Y | N | 用户电话 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。
登录界面如下图所示。

图5-1登录界面
用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览电影信息、影院信息,查看电影资讯,且要易于修改和维护,同时还要保证用户合法和系统安全。
首页界面如下图所示。

图5-2首页界面
用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码,页面进行表单验证,验证输入的用户名是否合法,表单验证通过后,点击“立即注册”按钮,检测数据库中是否已经存在该用户名,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。
用户注册页面,如下图所示。

图5-3用户注册页面
- 电影资讯的实现
电影资讯模块:主要包括电影资讯信息浏览、电影资讯展示等功能,用户可以点赞、收藏和评论操作。电影资讯界面如下图所示。

图5-4电影资讯界面
电影信息模块:用户可以浏览电影信息详情,可以点赞、收藏和评论,也可以进行购票。电影信息界面如下图所示。

图5-5电影信息界面
- 系统用户的实现
管理员对系统用户的管理,在管理员管理实现管理员用户的管理,包括录入、删除、修改,修改密码通过,然后输入新密码,使用sql命令更新密码。

图5-6系统用户界面
- 消息通知管理的实现
管理员可以获取系统中所有消息通知的列表并对其进行编辑。管理员在添加消息通知时,需要输入网站标题、内容等。添加消息通知完成,数据库消息通知表添加一条信息。管理员可以搜索消息通知,同时可以对已经添加的消息通知进行编辑。消息通知管理界面如下图所示。

图5-7消息通知管理界面
- 影院信息管理的实现
影院信息管理:管理员可以查看、删除、重置影院信息列表,也可以通过填写影院地址、图片、名称等信息添加影院信息。影院信息管理界面如下图所示。

图5-8影院信息管理界面
电影分类管理:管理员可以查看、删除、重置电影分类列表,也可以添加电影分类。电影分类管理界面如下图所示。

图5-9电影分类管理界面
电影信息管理:管理员可以查看、删除、重置电影信息列表,也可以通过填写电影名称、海报、场次等信息添加电影信息。电影信息管理界面如下图所示。

图5-10电影信息管理界面
取消购票管理:管理员可以查看、删除、重置取消购票列表,审核状态并回复。取消购票管理界面如下图所示。

图5-11取消购票管理界面
以进入系统首页的访问速度为例展示系统的性能测试;系统的主要用户群体是购物理念较为先进的消费者,系统要在3秒钟内响应;需要完成页面的菜单栏、首页轮播图片、类目及海鲜产品列表、海鲜电影以及各功能模块入口等元素的显示。
功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。
系统功能性测试表如下表所示。
表11系统功能性测试表
编号 | 测试功能 | 测试内容 | 测试结果 |
1 | 用户登录 | 1.验证用户名与密码的正确性。 2.验证密码是否可见。 | 通过 |
2 | 首页展示 | 1.首页数据是否成功加载。 2.验证搜索功能的准确性。 3.验证是否可以异步加载。 4.验证导航栏按钮。 | 通过 |
3 | 个人信息修改 | 1.验证登录名是否可以正常更改。 2.验证联系方式是否可以更改。 3.验证收货地址可以正常修改。 4.验证密码是否可以修改。 | 通过 |
4 | 影院信息管理 | 1.验证标签新增是否可以成功。 2.验证标签删除是否可以成功。 | 通过 |
5 | 添加电影信息 | 1.上传电影信息是否添加验证。 2.电影是否成功上传。 3.验证表单是否提交成功。 | 通过 |
6 | 用户管理 | 1.验证用户录入功能。 2.验证用户违规清理功能。 | 通过 |
集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。
在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。
本文针对电影购票系统的特点和用户需求,利用Node.js相关技术、Node.js框架和微信小程序等技术,通过详细的需求分析、页面设计和功能设计,实现了包括用户模块、影院信息模块、电影购票模块、系统管理模块和微信小程序端的包括用户注册、用户登录、电影资讯、消息通知、电影购票。另外,系统还进行了数据安全设计,并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的基于微信小程序的电影院购票系统。
由于时间限制和本人能力条件有限,还存在一些不足,今后也会出现许多新的开发技术,未来还可以对程序做出如下改进:
(1)优化程序页面,使页面更加美观且方便操作;
(2)优化电影搜索功能,提供多条件选择查询搜索;
(3)优化推荐功能,提高电影推荐的精准度;
(4)进一步提高使用程序的安全性,使其更加健壮;
(5)优化数据和代码,提升软件效率,方便维护和扩展。
参考文献
[1]赵率宏. 基于Node.js的ORM框架研究与实现[D].西南科技大学,2023.
[2] 杨晟,罗奇. 基于Spring Boot的在线影院售票系统的设计 [J].网络安全技术与应用, 2022, (08): 38-39.
[3] 张晓新.基于Dubbo的在线票务系统设计与实现[D].华中科技大学, 2022.
[4] 刘艳秋,卜永波,王冬青,等. 基于微信小程序的电影票购票系统设计与实现 [J].电脑编程技巧与维护, 2021, (12): 68-70.
[5] 周雨贝. 基于Node.js框架的企业级软件包管理系统的设计与实现[D]. 华中科技大学, 2022.
[6] 马艳彬. 基于Node.js和Vue框架的竞赛类答题平台管理系统的设计[C]// 中国新闻技术工作者联合会. 中国新闻技术工作者联合会2021年学术年会论文集. 新华社技术局;, 2021:6.
[7] 崔少康.情感化设计在电影票务APP会员体验中的应用研究[D]. 北京印刷学院, 2021.
[8] 唐榜. 基于Node.js的Web服务端框架研究与实现[D]. 西南科技大学, 2021.
[9] 简攀藤. 文化菱形视角下的“低评分高票房”电影与趣味消费[D]. 上海大学, 2021.
[10] 黄雨琢. 电影网络口碑传播效果的影响因素研究[D]. 电子科技大学, 2021.
[11] 陈梅,张文冲,钱育蓉,等. 基于新型区块的售票系统的设计与实现[J]. 信息技术, 2020, 44 (08): 28-33+38.
[12]邹一点.在线电影票务平台退改签法律效力探究[J]. 新西部, 2020, (17): 91-93.
[13] 徐珂瑾.网络口碑对电影消费者采纳意愿的影响[D]. 重庆大学, 2020.
[14]肖泉彬,何敏. 基于JSP的电影购票系统设计与开发 [J].电脑知识与技术, 2020, 16 (07): 67-68+92. DOI:10.14004/j.cnki.ckt.2020.0763.
[15]祝月芳.基于协同过滤的电影票务系统设计与实现[D]. 北京交通大学, 2019.
[16]高萍.具有反爬虫机制的影评系统的设计与实现[D]. 北京交通大学, 2019.
[17]陈菁钰. 中小成本电影的网络口碑对票房影响研究[D]. 中南财经政法大学, 2019.
[18] 徐浪.基于Node.js的Web应用框架研究与实现[D]. 安徽工业大学, 2019..
[19] 朱爱华,付曹政,曹钟,等. 基于Node.js框架和MongoDB数据库的物流信息服务系统设计 [J].北京建筑大学学报, 2018, 34 (04): 41-46. DOI:10.19740/j.1004-6011.2018.04.07.
[20] 李草. 基于Node.js+Express框架的智能燃气监管系统应用研究[D]. 中国石油大学(北京), 2018. DOI:10.27643/d.cnki.gsybu.2018.001168.
致谢
时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~