🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
摘 要
互联网社会的到来,让各行各业通过互联网实现了浴火重生的可能,每个行业都发现了完全可以使用互联网技术用来提高信息在内部的传递效率,提高管理水准。通过本次对婚庆系统的设计和开发,不仅能巩固已经学到的知识,还能学习更多的专业知识,提升专业素养,熟悉设计流程,掌握编程知识。不管是从程序的设计分析以及编码,都有了很多的感悟。
婚庆系统采用当前最流行的IDEA工具进行开发,使用Java语言,框架使用Spring Boot框架。系统能实现婚车租赁,婚庆策划,婚庆酒店,婚纱摄影等方面信息的管理功能。
婚庆系统不仅在操作上面符合常规操作,在信息处理环节更加的符合设计需求,符合生产需求,提高了用户粘度,节省了社会资源,能极大的提升婚庆信息管理方面的效率。
关键词:Java语言;Spring Boot框架;婚庆系统
1 绪 论
1.1研究背景
生产资料的不断扩大,还采用大量的人工方式处理相关数据,已经阻碍了社会的继续发展,当社会进入到电气时代,家家户户都可以用上了电力照明技术,随着电磁技术的发展,信息的可持续传递取得了蓬勃发展。随着地域的扩大,相关信息完全可以通过电子信号进行传递,不用人为的走动即可获取相关信息,互联网时代的到来,就是这么悄无声息而又水到渠成。国内互联网从无序发展到有序发展,从单机到网络互联,也就这么几十年的时间,而恰好是这几十年的时间,中国的发展取得了辉煌的成就,尤其是互联网的发展,走到了世界前列,从村村通电到村村通网,是一个信息社会发展的重要台阶。采用互联网思维,把现有的一些信息处理流程变成网络化处理,可以极大的提高信息处理速度。在这样的大环境下,针对婚庆信息管理,设计一个婚庆系统,不仅仅可以更上时代的潮流,还能规范信息处理的流程,提高处理效率,降低信息处理成本,可以让使用者有更多的精力和资源投入其他的方面创造效益。
1.2研究意义
信息时代的到来,与传统农耕社会的不同在于信息的更新以及传递更加的迅速,加快了人们对于信息处理的节奏,如果还是拥抱过去的信息处理技术,比如比较怀古的人还用毛笔来进行记账或者记录一下长篇大论的东西,这个可以称之为情怀,但是不能成为社会的主流。当今社会,不管是课堂还是课外,基本上人人持有可移动终端,可以随时的被动以及主动获取相关信息以及社会舆论,不管是移动终端还是电脑,都只是一个获取以及处理信息的一个窗口,关于数据的服务端处理还是需要专业的软件来进行分发。采用计算机来进行设计某些想要的需求,是可靠的。所以开发婚庆系统不仅可以实现快速的信息处理,并且不知疲倦,可靠稳定,符合当今社会的发展潮流。
婚庆系统的开发意义有以下几点:
(1)婚庆系统不仅规范了操作人员的操作流程,还提高了信息处理的效率。
(2)操作符合正常人们的审美观,并且符合正常的操作逻辑,使用方便。
(3)对比人们以前的信息处理速度,现在的速度是符合社会发展的,也是当前社会最快的信息处理方法。
(4)极大的降低了人工成本,婚庆系统可以全天候的等待,随时可以查看和处理相关数据。
1.3研究内容
本文从绪论,开发环境与技术,系统分析,设计,实现,测试等方面来描述系统。
绪论:介绍系统的开发意义与背景。
系统分析:介绍系统功能需求,可行性以及非功能需求等内容。
总体设计:介绍设计的系统功能结构,设计的数据库等内容。
系统实现:选用部分功能来介绍系统的实现情况。
系统测试:介绍测试内容和测试的部分功能。
2 系统分析
课题的确定,对本人的后续研究提供了主要方向。通过在各大专业网站上搜索相关文献,了解相关可实现的技术知识以及功能大致相同的实现,结合本课题的具体实现具体分析,才能分析出课题的具体功能。系统分析主要是对功能实现提供最主要的理论支撑,会影响到后续的所有开发环节,所以很重要。
2.1可行性分析
任何系统的开发过程都非常漫长且充满坎坷,所以一旦确定系统进入开发阶段,就不能放弃。为了避免出现中途放弃开发系统这样的现象,提高系统的开发成功率,前期的可行性分析就能够为系统是否能够达到目标提供充分的分析材料,也是为系统能否进入开发阶段提供依据。
在系统开发期间,无论是系统的开发平台,还是系统开发运用的技术目前都能通过网络成功获取,并且不需要支付费用,所以在技术方面不存在费用支出。但是本系统用于计算机代替人工处理种类繁多的数据,在一定程度上方便了管理者,在数据处理效率上也有明显的提升,同时相较于之前的人工管理,该系统也节省了人工成本,所以系统开发经济可行。
婚庆系统使用的技术有Java技术,MySQL数据库技术等,这些技术目前在网络上进行了公开,且有很多的成功项目的开发都运用了上述技术,开发出来的系统在满足功能实用的前提下,同时具有操作简便,具有很高的互动性的特点。此外,系统为了不局限使用用户,让使用者可以在任意场合和任意时间段操作系统,特意采用B/S模式设计开发,为后期系统的维护提供了方便,也让系统在经过一段时间的市场考验之后,进行系统功能扩展升级提供了可能性。因此,系统技术可行。
每个用户在使用系统过程中,可能运用的浏览器和操作系统都不一样,所以本系统在设计中,需要考虑系统兼容性,让不同用户在不同环境以及不同条件下都能正常使用系统。同时系统的界面布局合理,界面导航功能清晰,用户能够在短期培训之后可以轻松使用系统,对于那些有计算机操作基础的用户,可以免培训即可操作本系统。因此,系统操作可行。
2.2需求分析
2.2.1功能需求分析
婚庆系统将使用人员划分为两类,分别是管理员,用户。这些使用者中,管理员的操作权限最大,拥有所有功能的操作权限,其他使用者都是根据工作需要合理的安排部分功能。
(1)管理员功能分析
图3.1展示了管理员用例图。针对管理员角色,系统允许其操作所有的功能,主要包括对婚车租赁,婚庆策划,婚庆酒店,婚纱摄影等服务的预约,收藏,评价等信息的管理。
图3.1管理员用例图
(2)用户功能分析
图3.2展示了用户用例图。针对用户角色,系统允许其在线预约以及收藏婚车租赁,婚庆策划,婚庆酒店,婚纱摄影等服务。
图3.2用户用例图
本节将从接口设计要求,可靠性需求等角度来分析系统在非功能层面上的需求。
(1)性能需求
本系统投入使用之后,不可能只是单一用户操作使用,因此该系统要支持很多个用户的连接,同时也能支持许多用户同时操作本系统。另外借助网络的优势,对本系统的日常运行时间也进行规范,要求系统能够提供7×24小时不间断的服务。
(2)功能操作故障
当系统运行期间,遇到了功能操作上的故障时,系统应该不能受到任何影响,还能继续提供功能服务。
(3)接口设计要求
本系统在接口的设计上一定要规范化设计,在定义接口时要始终遵循使用方便,扩展方便以及很容易让人理解的原则进行开展。同时设计的接口一定要具备完整性特点,具备灵活性以及开放性等特点,毕竟接口在程序的二次开发中,进行系统功能扩展上是非常重要的。
(4)可靠性需求
系统的可靠性需求表现在系统可利用性以及系统维护时间上面这两方面的需求。从系统可利用性方面来讲,系统应做到7×24小时连续运行,并且,在一年365天内,该系统正常运行的时间应该达到的比率为98%。从系统计划维护服务时间的层面上来讲,当系统出现故障,需要进行维护时,需要避开人们的上班时间,维护服务工作通常在早上九点至下午六点以外的时间段进行。这样才能不影响用户使用系统,保证系统的可靠性。
2.3系统流程
任何一个流程图都是反应了对应事务的处理逻辑,通常都有开始与结束的标识,中间是事务处理的各种逻辑,包括输入的数据以及判断逻辑等信息。
(1)操作流程如图3.4所示。
图3.4 系统操作流程
婚庆系统的功能是给需要的用户进行使用,所以任何访客在使用系统的功能前,必须通过登录功能提交验证信息,符合条件的用户才可以进入功能处理的界面。
(2)登录流程如图3.5所示。
图3.5 登录流程
婚庆系统的登录功能的设置可以直接避免无关用户骚扰系统,降低对系统数据泄露的风险。其主要工作流程则是验证用户提交的账号密码,并进行相应的逻辑判断,只有通过登录功能验证机制的用户才可以收到“登录成功”的系统反馈信息。
(3)添加信息流程如图3.6所示。
图3.6 添加信息流程
用户添加数据不仅需要根据婚庆系统的界面的提示字段填写信息,还要注意已录入数据的合法性,因为系统只会成功提交合法的数据。
(4)删除信息流程如图3.7所示。
图3.7删除信息流程
婚庆系统经历了长时间使用之后,用户就需要删除无用或重复的数据。系统为了保护这些数据,也为了避免用户的误删现象,每次在删除数据前则会再三提示用户是否确定删除数据。当用户确定之后,系统才会执行数据删除功能。
2.4 本章小结
本章主要进行的是系统分析,从可行性分析方面分成三个角度进行分析,需求分析从功能需求分析和非功能需求分析,以及系统的流程如何设计。
3 总体设计
3.1总体功能设计
前面对婚庆系统的功能需求的分析只是大致的划分功能模块,接下来的工作就是对这些大致的功能进行细分。让婚庆系统的内容变得更具体,更丰富。
(1)管理员功能结构设计
图4.1展示的是管理员功能结构。系统将管理员的个人中心模块划分为个人信息管理与修改密码子模块,将基础数据管理功能划分为婚车租赁类型管理,婚庆策划类型管理,婚庆酒店类型管理,婚纱摄影类型管理子模块。将婚车租赁管理功能划分为婚车租赁管理,婚车租赁评价管理,婚车租赁收藏管理,婚车租赁预约管理子模块等。
图3.1管理员功能模块图
(2)用户功能结构设计
图4.2展示的是用户功能结构。系统将用户的个人中心模块划分为婚车租赁收藏,婚车租赁预约,婚庆策划收藏,婚庆策划预约,婚庆酒店收藏,婚庆酒店预约,婚纱摄影收藏,婚纱摄影预约子模块,将婚庆策划划分为查询,收藏,预约,查看评论,观看视频子模块等。
图3.2用户功能模块图
3.2系统配置方案设计
婚庆系统的设计在体系结构模式的选择上还是比较青睐于用户层,功能层和数据层这样的三层结构,俗称B/S结构。这种结构模式在Internet兴起之后,大部分的应用程序都会将其作为首选结构设计模式。
(1)用户层:婚庆系统的使用人员通常在用户层登录系统,使用系统,对数据的输入和输出进行处理;
(2)功能层:在用户层和数据层的中间,就分布着功能层,功能层主要就是把用户的请求以SQL语句的方式来对数据库进行检索,最终将数据检索的结果传递给用户层;
(3)数据层:数据层主要就是实现对数据库的操作,一般都是增加,修改,删除,查找数据。每当数据层接收到来自上层的数据操作请求时,就会根据该指令去操作数据库,最终反馈给上层执行结果。
3.3 本章小结
本章主要从系统总体功能进行设计,以及从系统配置方案上面进行设计。
4 详细设计
4.1主要功能模块的设计
系统主界面如图4-1所示。
4.2数据库设计
数据库的设计是对系统相关数据要求的具体设计。需要对各个对象进行数据类型具体化,比如每个表都要有自己的主键,有些关键性数据不可以直接采用删除操作,只能采用伪装删除的操作,比如专门设置一个字段就是删除标记字段,默认没删除就是0,如果已经删除则设置为1,这样如果有大量数据的删除,只需要更新相关字段的值就行,不需要大量的对磁盘进行删除操作,在性能上面有很大的提升。目前市场上主流的数据库基本上都符合设计的功能需求,但是一切要根据实际出发,首先开发使用的电脑是自己上学用的,那么首选对电脑性能要求没那么高的数据库,其次尽量使用自己曾经学习过的数据库,这样学习成本会降低,时间上就有空余的时间来安排其他事情。本系统通过数据库设计相关的分析,采用MySQL数据库。
4.2.1数据库概念设计
有一个专门用来描述数据库实体与参数之间的图叫做E-R图,E-R是英文缩写,经过多年的传播,已经变成了数据库实体之间联系的专业名字,一般都用缩写E-R图表示,不再采用英文全称。现实世界有很多相关的数据,如何应用到数据库存放就需要进行归类,实体与属性之间的关系不能混淆,一个实体可以有多个属性,一个属性可能对应多个实体,实体和属性之间的关系是需要用图的形式进行描述的,不然不直观。采用Visio画图工具来画E-R图是一种很明智的选择。Visio是专门用来画图的工具之一,内置了很多图形选项,画E-R图用Visio画是正确的,Visio画的图形可以进行保存,复制到其他地方还可以进行编辑,如果缺少某些属性可以直接用Visio打开进行修改,是非常方便的。接下来展示本系统的部分实体图以及实体关系E-R图。
(1)婚车租赁实体图如图4.4所示。
图4.4 婚车租赁实体图
(2)婚庆策划实体图如图4.5所示。
图4.5 婚庆策划实体图
(3)婚庆酒店实体图如图4.6所示。
图4.6 婚庆酒店实体图
(4)婚纱摄影实体图如图4.7所示。
图4.7 婚纱摄影实体图
(5)用户实体图如图4.8所示。
图4.8 用户实体图
(6)实体间关系E-R图如图4.9所示。
图4.9 实体间关系E-R图
4.2.2数据库物理设计
二维表是传统的用来记录相关表与属性之间关系的一种专业图表。表里面每个字段名称都是唯一的,代表当前表的某一个唯一的属性,如果有多个属性,那么就会多几个字段来进行描述。二维表的概念如下:
关键字:每个表建议有且只有一个主键,用来表达数据的专一性和唯一性。也可以通过设定的关键字与其他表进行关联。
元组:二维表显示数据有行与列的关系,行是可以增加的,列是提前设定好的,每一行数据成为元组。
属性:列的名称一般称为属性,也就是字段,比如一个正常人拥有的属性必然有姓名,性别,不管是姓名还是性别,都可以称之为属性。
关系:有列有行只是一张二维表的表达,这张二维表的名称就是行与列的关系,比如用户表,比如有用户账号的属性也就是列,用户的姓名属性也是列,用户属性都有成为元组,很多用户都在这个表里之间的关系成为用户表。
以上内容表示数据之间的关系,通过对数据进行分析和归纳,二维表用来描述和存储相关数据。婚庆系统数据表设计结果展示如下:
表4.1 用户表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
username | varchar(200) | 账户 | 允许空 |
password | varchar(200) | 密码 | 允许空 |
yonghu_name | varchar(200) | 用户姓名 | 允许空 |
yonghu_phone | varchar(200) | 用户手机号 | 允许空 |
yonghu_id_number | varchar(200) | 用户身份证号 | 允许空 |
yonghu_photo | varchar(200) | 用户头像 | 允许空 |
sex_types | int(11) | 性别 | 允许空 |
yonghu_email | varchar(200) | 电子邮箱 | 允许空 |
new_money | decimal(10,2) | 余额 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.2 婚车租赁表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunchezulin_name | varchar(200) | 车队主题 | 允许空 |
hunchezulin_uuid_number | varchar(200) | 婚车租赁编号 | 允许空 |
hunchezulin_photo | varchar(200) | 照片 | 允许空 |
lianxiren_name | varchar(200) | 联系人 | 允许空 |
lianxiren_phone | varchar(200) | 联系电话 | 允许空 |
hunchezulin_types | int(11) | 婚车租赁类型 | 允许空 |
hunchezulin_shuliang_number | int(11) | 婚车数量 | 允许空 |
hunchezulin_kucun_number | int(11) | 婚车库存数量 | 允许空 |
hunchezulin_old_money | decimal(10,2) | 婚车租赁原价 | 允许空 |
hunchezulin_new_money | decimal(10,2) | 现价/天 | 允许空 |
hunchezulin_clicknum | int(11) | 热度 | 允许空 |
hunchezulin_content | text | 婚车租赁详情 | 允许空 |
shangxia_types | int(11) | 是否上架 | 允许空 |
hunchezulin_delete | int(11) | 逻辑删除 | 允许空 |
insert_time | timestamp | 录入时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.3 婚车租赁预约表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunchezulin_order_uuid_number | varchar(200) | 预约编号 | 允许空 |
hunchezulin_id | int(11) | 婚车租赁 | 允许空 |
yonghu_id | int(11) | 用户 | 允许空 |
buy_number | int(11) | 购买天数 | 允许空 |
hunchezulin_order_true_price | decimal(10,2) | 实付价格 | 允许空 |
hunchezulin_order_types | int(11) | 订单类型 | 允许空 |
hunchezulin_order_payment_types | int(11) | 支付类型 | 允许空 |
shiyong_time | date | 使用日期 | 允许空 |
insert_time | timestamp | 订单创建时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.4 婚庆策划表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunqingcehua_name | varchar(200) | 婚庆策划名称 | 允许空 |
hunqingcehua_uuid_number | varchar(200) | 婚庆策划编号 | 允许空 |
hunqingcehua_photo | varchar(200) | 封面 | 允许空 |
lianxiren_name | varchar(200) | 联系人 | 允许空 |
lianxiren_phone | varchar(200) | 联系电话 | 允许空 |
hunqingcehua_address | varchar(200) | 地址 | 允许空 |
hunqingcehua_video | varchar(200) | 样片 | 允许空 |
hunqingcehua_types | int(11) | 婚庆策划类型 | 允许空 |
hunqingcehua_kucun_number | int(11) | 婚庆策划数量 | 允许空 |
hunqingcehua_old_money | decimal(10,2) | 婚庆策划原价 | 允许空 |
hunqingcehua_new_money | decimal(10,2) | 现价/场 | 允许空 |
hunqingcehua_clicknum | int(11) | 热度 | 允许空 |
hunqingcehua_content | text | 婚庆策划详情 | 允许空 |
shangxia_types | int(11) | 是否上架 | 允许空 |
hunqingcehua_delete | int(11) | 逻辑删除 | 允许空 |
insert_time | timestamp | 录入时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.5 婚庆策划预约表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunqingcehua_order_uuid_number | varchar(200) | 预约编号 | 允许空 |
hunqingcehua_id | int(11) | 婚庆策划 | 允许空 |
yonghu_id | int(11) | 用户 | 允许空 |
buy_number | int(11) | 购买场次 | 允许空 |
hunqingcehua_order_true_price | decimal(10,2) | 实付价格 | 允许空 |
shiyong_time | date | 使用日期 | 允许空 |
hunqingcehua_order_types | int(11) | 订单类型 | 允许空 |
hunqingcehua_order_payment_types | int(11) | 支付类型 | 允许空 |
insert_time | timestamp | 订单创建时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.6婚庆酒店表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunqingjiudian_name | varchar(200) | 婚庆酒店名称 | 允许空 |
hunqingjiudian_uuid_number | varchar(200) | 婚庆酒店编号 | 允许空 |
hunqingjiudian_photo | varchar(200) | 封面 | 允许空 |
lianxiren_name | varchar(200) | 联系人 | 允许空 |
lianxiren_phone | varchar(200) | 联系电话 | 允许空 |
hunqingjiudian_address | varchar(200) | 婚宴地点 | 允许空 |
hunqingjiudian_types | int(11) | 婚庆酒店类型 | 允许空 |
hunqingjiudian_kucun_number | int(11) | 酒店库存 | 允许空 |
hunqingjiudian_old_money | decimal(10,2) | 婚庆酒店原价 | 允许空 |
hunqingjiudian_new_money | decimal(10,2) | 现价/天 | 允许空 |
hunqingjiudian_clicknum | int(11) | 热度 | 允许空 |
hunqingjiudian_content | text | 婚庆酒店详情 | 允许空 |
shangxia_types | int(11) | 是否上架 | 允许空 |
hunqingjiudian_delete | int(11) | 逻辑删除 | 允许空 |
insert_time | timestamp | 录入时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.7婚庆酒店预约表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunqingjiudian_order_uuid_number | varchar(200) | 预约编号 | 允许空 |
hunqingjiudian_id | int(11) | 婚庆酒店 | 允许空 |
yonghu_id | int(11) | 用户 | 允许空 |
buy_number | int(11) | 购买天数 | 允许空 |
hunqingjiudian_order_true_price | decimal(10,2) | 实付价格 | 允许空 |
shiyong_time | date | 使用日期 | 允许空 |
hunqingjiudian_order_types | int(11) | 订单类型 | 允许空 |
hunqingjiudian_order_payment_types | int(11) | 支付类型 | 允许空 |
insert_time | timestamp | 订单创建时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.8婚纱摄影表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunshasheying_name | varchar(200) | 婚纱摄影名称 | 允许空 |
hunshasheying_uuid_number | varchar(200) | 婚纱摄影编号 | 允许空 |
hunshasheying_photo | varchar(200) | 封面 | 允许空 |
lianxiren_name | varchar(200) | 联系人 | 允许空 |
lianxiren_phone | varchar(200) | 联系电话 | 允许空 |
hunshasheying_address | varchar(200) | 拍摄地点 | 允许空 |
hunshasheying_types | int(11) | 婚纱摄影类型 | 允许空 |
hunshasheying_kucun_number | int(11) | 婚纱摄影数量 | 允许空 |
hunshasheying_old_money | decimal(10,2) | 婚纱摄影原价 | 允许空 |
hunshasheying_new_money | decimal(10,2) | 现价/套 | 允许空 |
hunshasheying_clicknum | int(11) | 热度 | 允许空 |
hunshasheying_content | text | 婚纱摄影详情 | 允许空 |
shangxia_types | int(11) | 是否上架 | 允许空 |
hunshasheying_delete | int(11) | 逻辑删除 | 允许空 |
insert_time | timestamp | 录入时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.9婚纱摄影预约表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
hunshasheying_order_uuid_number | varchar(200) | 预约编号 | 允许空 |
hunshasheying_id | int(11) | 婚纱摄影 | 允许空 |
yonghu_id | int(11) | 用户 | 允许空 |
buy_number | int(11) | 购买套装 | 允许空 |
hunshasheying_order_true_price | decimal(10,2) | 实付价格 | 允许空 |
shiyong_time | date | 使用日期 | 允许空 |
hunshasheying_order_types | int(11) | 订单类型 | 允许空 |
hunshasheying_order_payment_types | int(11) | 支付类型 | 允许空 |
insert_time | timestamp | 订单创建时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.10管理员表
字段 | 类型 | 说明 | 允许空 |
id (主键) | bigint(20) | 主键 | 不允许空 |
username | varchar(100) | 用户名 | 不允许空 |
password | varchar(100) | 密码 | 不允许空 |
role | varchar(100) | 角色 | 允许空 |
addtime | timestamp | 新增时间 | 不允许空 |
4.3 本章小结
本章主要设计系统的主要功能模块以及数据库概念到数据库表和字段的设计。
当需要描述系统具体实现的功能点的时候,一方面肯定是要用文字表达实现的功能,另一方面完全可以从系统的具体实现页面把可以用文字描述的操作界面以图片的形式放到文字的下方,这样的表达方式可谓之言之有物,更容易理解系统实现的功能部分。
5.1 管理员功能实现
5.1.1 婚车租赁管理
图5.1展示的是婚车租赁管理界面。
图5.1 婚车租赁管理界面
此界面展示了婚车数量,热度,婚车租赁编号等信息,在每条婚车租赁信息的右侧区域都有可供管理员选择的操作,包括修改,下架等。
5.1.2 婚车租赁评价管理
图5.2展示的是婚车租赁评价管理界面。
图5.2 婚车租赁评价管理界面
此界面展示了车队主题,评价内容,用户姓名等信息,每条用户对婚车租赁的评价信息的右侧区域都有管理员可以选择的操作,包括回复,删除等。
5.1.3 婚车租赁预约管理
图5.3展示的是婚车租赁预约管理界面。
图5.3 婚车租赁预约管理界面
此界面展示了婚车租赁类型,预约编号,实付价格等信息,每条婚车租赁预约信息的右侧区域有可供管理员进行的操作,包括允许使用,删除,详情查看等。
5.1.4 婚庆策划管理
图5.4展示的是婚庆策划管理界面。
图5.4 婚庆策划管理界面
此界面展示了婚庆策划的名称,样片,婚庆策划原价,热度等信息,每条婚庆策划信息的右侧区域都有可供管理员选择的操作,包括下架,修改,删除等。
5.1.5 婚庆策划预约管理
图5.5展示的是婚庆策划预约管理界面。
图5.5 婚庆策划预约管理界面
此界面展示了婚庆策划预约编号,实付价格,支付类型等信息,每条婚庆策划预约信息的右侧区域都有可供管理员选择的功能,包括使用,删除,详情等。
5.1.6 婚庆酒店评价管理
图5.6展示的是婚庆酒店评价管理界面。
图5.6 婚庆酒店评价管理界面
此界面展示了婚庆酒店名称,用户姓名,评价内容等信息,每条婚庆酒店评价信息的右侧区域都有可供管理员选择的操作,包括回复,详情,删除等。
5.1.7 婚庆酒店预约管理
图5.7展示的是婚庆酒店预约管理界面。
图5.7 婚庆酒店预约管理界面
此界面展示了婚庆酒店预约编号,婚庆酒店类型,婚庆酒店名称等信息,每条婚庆酒店预约信息右侧区域都有可供管理员选择的操作,包括使用,删除等。
5.1.8 婚纱摄影管理
图5.8展示的是婚纱摄影管理界面。
图5.8 婚纱摄影管理界面
此界面展示了婚纱摄影名称,婚纱摄影拍摄地点,联系人,热度,婚纱摄影原价等信息,每条婚纱摄影信息的右侧区域都有可供管理员选择的操作,包括修改,下架,删除等。
5.1.9 婚纱摄影预约管理
图5.9展示的是婚纱摄影预约管理界面。
图5.9 婚纱摄影预约管理界面
此界面展示了婚纱摄影名称,婚纱摄影预约编号,订单类型等信息,每条婚纱摄影预约信息的右侧区域都有可供管理员选择的操作,包括使用,删除等。
5.2 用户功能实现
5.2.1 婚车租赁
图5.10展示的是婚车租赁界面。
图5.10 婚车租赁界面
此界面主要展示了婚车租赁的详细介绍信息,用户可以在本界面实现对婚车租赁的收藏,查看婚车租赁的评论信息,或者是选择使用的天数和时间来预约婚车租赁。
5.2.2 婚庆策划
图5.11展示的是婚庆策划界面。
图5.11 婚庆策划界面
此界面展示了婚庆策划的详细介绍信息,用户在本界面可以观看婚庆策划的视频,也能查看婚庆策划的评论内容,如果用户有对婚庆策划有相关需求,可以直接预约。
5.2.3 婚庆酒店
图5.12展示的是婚庆酒店界面。
图5.12 婚庆酒店界面
此界面展示了婚庆酒店的详细介绍信息,用户在本界面可以查看婚庆酒店的评论内容,可以查看婚庆酒店的照片和地点等信息,如果用户对婚庆酒店有相关需求,也能预约婚庆酒店。
5.2.4 婚纱摄影
图5.13展示的是婚纱摄影界面。
图5.13 婚纱摄影界面
此界面展示了婚纱摄影详细介绍内容,用户在本界面可以查看婚纱摄影联系人,电话,拍摄地点等信息,也能查看其相关评论,用户有对婚纱摄影方面的需求,可以直接预约。
5.2.5 婚纱摄影预约
图5.14展示的是婚纱摄影预约界面。
图5.14 婚纱摄影预约界面
此界面展示了用户预约的婚纱摄影信息,用户可以查看预约婚纱摄影的详细订单,包括状态以及用户可以进行的操作,如果用户已经支付了婚纱摄影预约订单,但是还没有进行婚纱摄影拍摄前,用户可以申请退款。
5.3 本章小结
本章主要是系统实现,从管理员模块和用户模块,分别采用文字加图片的形式具体描述系统功能的实现和操作。
6 系统测试与运行
6.1功能测试
系统的功能不仅需要在使用者使用中发挥其价值,并且对一些使用者的错误操作,系统也会及时提醒。如此系统才可以获取使用者的信任。
(1)登录功能测试
表6.1为管理员登录功能测试表。检测此功能主要有两项重要内容,一个是账号,另一个是密码。账号和密码一定要相互匹配才能操作成功。
表6.1 管理员登录功能测试表
账号 | 密码 | 预期结果 | 实际结果 |
管理员登记的账号内容为gly,此账号是管理员自己的登录账号 | 管理员登记的密码内容为gly,此密码是管理员自己的登录密码 | 操作成功 | 成功登录 |
管理员登记的账号内容为adm,此账号不属于管理员 | 管理员登记的密码内容为gly,此密码是管理员自己的登录密码 | 操作失败 | 系统提示账号错误 |
管理员登记的账号内容为gly,此账号是管理员自己的登录账号 | 管理员登记的密码内容为adm,此密码不属于管理员 | 操作失败 | 系统提示密码错误 |
管理员登记的账号内容为%&*,此账号格式有非法字符 | 管理员登记的密码内容保持空白 | 操作失败 | 系统提示账号格式有误,密码不能为空 |
(2)修改密码功能测试
表6.2为修改密码功能测试表。成功修改密码的前提条件就是对旧密码一定要正确输入,否则,使用者将操作失败。
表6.2 修改密码功能测试表
旧密码 | 新密码 | 预期结果 | 实际结果 |
管理员登记的旧密码内容为gly,此密码是管理员的正确登录密码 | 管理员登记的新密码内容为adm,此密码是管理员新设置的密码 | 修改成功 | 密码修改成功 |
管理员登记的旧密码内容为hsf,此密码不是管理员的登录密码 | 管理员登记的新密码内容为adm,此密码是管理员新设置的密码 | 修改失败 | 系统提示旧密码错误,密码修改失败 |
管理员不登记旧密码的内容 | 管理员登记的新密码内容为adm,此密码是管理员新设置的密码 | 修改失败 | 系统提示请输入旧密码,密码修改失败 |
6.2系统测试结果
经过科学的系统测试环节,婚庆系统各项指标符合设计预期,同时在操作性和容易维护方面做的也不错,可以投入生产。
6.3 本章小结
本章主要是系统功能测试部分,对需要测试的一些功能进行测试的描述以及具体测试操作和结果。
7 结束语
我选择的毕业课题是研究和实现一个婚庆系统,为了完成婚庆系统的开发任务,我进行了一系列和课题相关的开发工作。在最初,通过资料查找和分析,大体了解了开发婚庆系统的流程,先确定系统的开发技术,即运用成熟,安全,高效的面向对象的编程语言Java进行功能上的代码编写,同时采用可以保存上千条数据,支持快速查询数据,管理数据,优化数据的MySQL数据库管理工具来保存婚庆系统的数据。紧接着把大量精力都用在系统的功能划分,设计系统方案,实现系统功能的工作上。婚庆系统的开发主要是为了方便使用者管理数据,运用数据,因此其实现的功能主要有婚车租赁,婚庆策划,婚庆酒店,婚纱摄影等方面信息的管理。待系统开发并通过检测阶段之后,就可以真正交付用户使用。
通过本次课题,我对开发工具的使用能力提升了很多,比如学会了如何使用IDEA工具,如何使用MySQL设计数据表,如何部署服务器等知识。同时因为应用的编程语言是Java,让我加深了对该语言的认识和理解,发现了很多我之前没有发现的Java语言的特点。总之,这个课题的完成,让我对开发一个项目的经验还是有所积累,对毕业课题与商业项目的认识以及它们之间的区别还是有所提升。相信这些宝贵的知识点会让我受益终身。
时代在不断变化,信息也在不断整合,人们的需求也在变化,因此,开发的婚庆系统只是符合当前使用者的需求,但是该系统也需要跟随时间的变化去迎合使用者更多的变化的需求。所以,系统开发期间已经预留了一些可供功能扩展的接口,可以通过这些接口和相应的代码注释去升级系统。尽管婚庆系统已经结束了开发工作,但还是存在数据库数据重复存储,后台代码重复编写以及界面图片太繁琐等缺点。这些问题还是需要在未来的时间里面去改进,先针对性的学习一些新知识,然后针对性的去完善婚庆系统才是正确的选择。
参考文献
[1]姚明. 基于Java Web的婚庆主题门户网站设计与实现[J]. 电脑知识与技术,2015,11(25):204-206.
[2]任华新. 婚庆系统的设计与实现[J]. 福建电脑,2011,27(09):149-150.
[3]焦宇,李民,王欢,余开朝.基于MySQL性能调优的推荐系统优化设计[J].软件导刊,2022,21(09):108-112.
[4]郑戟明,董云朝,柳青.MySQL数据库数据导入导出方法的探讨[J].电脑知识与技术,2022,18(22):24-25.
[5]欧阳桂秀.基于Java和MySQL的数据库管理系统的设计与实现[J].信息记录材料,2022,23(09):240-242.
[6]郑歆.Java程序设计课程的教学实践[J].集成电路应用,2022,39(11):94-95.
[7]李乐.Java语言应用研究[J].智慧中国,2022,(09):80-81.
[8]仓业金.基于Java的软件保护技术研究[J].电脑知识与技术,2022,18(23):29-30+52.
[9]宋旸.使用Java语言开发Web应用软件的知识探讨[J].中国设备工程,2022,(14):121-123.
[10]唐小玲. Spring Boot代码自动生成系统设计[J]. 信息技术与信息化,2023,(01):77-80.
[11]王悦. 基于Spring Boot技术的SOA接口研究[J]. 信息技术,2019,43(06):140-143+148.
[12]江雁. 浅谈Spring Boot框架下如何快速进行后台开发[J]. 海峡科技与产业,2019,(02):131-132.
[13]谢志坚.计算机应用软件开发技术支撑思考[J].电子世界,2020(15):53-54.
[14]姬晓鹏.计算机软件开发技术与设计探究[J].电子测试,2020(16):133-134.
[15]Raffi Khatchadourian.Automated refactoring of legacy Java software to enumerated types[J].Automated Software Engineering,2017,24(4).
[16]Ben White.Marx and Chayanov at the margins:understanding agrarian change in Java[J].The Journal of Peasant Studies,2018,45(5-6).
核心代码展示
/**
* 公告通知
* 后端接口
* @author
* @email
* @date 2021-03-09 11:33:59
*/
@RestController
@RequestMapping("/news")
public class NewsController {
@Autowired
private NewsService newsService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NewsEntity news){
EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
NewsView newsView = newsService.selectView(ew);
return R.ok("查询公告通知成功").put("data", newsView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
newsService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = newsService.selectCount(wrapper);
return R.ok().put("count", count);
}
}