🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示(需要演示视频可以私信我)
摘 要
网络的快速发展从根本上改变了人们的生活方式,进入二十一世纪以后,人们的生活发生了巨大的变化,融入了信息化的模式中。
随着我国经济发展水平的飞速提高,人们步入小康生活,生活水平不断的提高,娱乐项目也越来越多,其中喜爱观看相声节目的用户也在增加,但人们在相声订票方面缺乏快速有效的方法。在信息化时代的今天,互联网技术的迅速发展,网络支付体系的完善,使得人们越来越青睐于网络订票,基于这一现状,结合计算机技术,特开发了本基于SSM框架的德云社票务系统,为用户提供一个便捷的订票平台,同时提高德云社票务管理效率,促进德云社发展。
本德云社票务系统采用Java技术、MYSQL数据库,基于SSM框架开发,系统功能齐全,运行稳定,是一款值得推广的德云社票务平台。
关键词:SSM框架;MYSQL数据库;德云社票务;Java技术
第1章 绪论
1.1 课题背景
在中国经济的快速发展下,各行各业都随之发展,快速进步,从而提升了人们的生活质量,带来了消费市场的活跃。除了必要的生活需求外,人们开始重视生活品质,包含了身体健康和精神文化的需求。现代生活水平的提高,人们的生活不仅仅只追求物质生活,更高的倾向于精神的享受。近年来,德云社的蓬勃发展,相声受到了人们的喜欢,人们对德云社订票的需求在不断的增大,让传统的德云社订票模式已经无法满足用户的需求,费事费力。在这样的情况下,我们开发了德云社票务系统,为人们提供大量的票务信息,让用户很好的掌握相声票务信息,尤其解决了排队购票的现状,让人们享受不需排队购票的服务,通过网络简单快捷订票,足不出户就可以网上订票,查询相声票务信息,进行购买操作。本系统的开发更有利于德云社更快更好的发展。
本课题德云社票务系统有着无法比拟的优点,其具有利用率高的特点,同时使得用户更快的订票,受到了人们的广泛使用;同时德云社票务系统利用计算机平台,对信息进行管理,储存空间大,成本低,查找方便等。德云社票务系统,采用MYSQL数据库,充分保证数据的安全性、稳定性,管理员可以快捷准确的管理票务相关信息。
1.2 设计原则
在开始开发项目之前,必须要先考虑项目的实用性、科学性,以及该项目是否能够真正让用户受益并尽可能的发挥项目的作用。因此,在开发前,通过以下几条原则对项目进行判断:
(1)可行性原则。项目需要保证经济可行性和技术可行性,这包括了项目在浏览端、服务端等方面上的经济和技术上是可以达成的。
(2)适应性原则。项目要保证可维护性和可扩展性,这是每个非短期项目都需要考虑的,并且不论是维护还是扩展,都必须要建立在适应用户的正常需求的基础上。
(3)安全性及保密性原则。要充分保证用户信息的安全性和保密性,不能因为开发上的疏忽,导致用户的信息泄露。
(4)系统工程原则。为了确保项目的整体性,在项目调查、项目分析、项目设计、项目开发的过程中,都需遵从项目工程的方法和步骤逐步进行。
(5)统一规划、分期实施、逐步完善原则。项目开发的过程中,要按照规划、分期实施,特别是要注意在项目开发过程中要有条理,从点到面,一步步完善,不要贪图进度,要循环渐进的对项目进行开发。
1.3 论文组织结构
第一章主要是简单的介绍下设计本网站的研究背景和设计原则,在这一章里主要是让大家了解下我的设计的前因后果,为接下来我的其它章节做铺垫。
第二章主要是介绍在设计过程中所涉及到的技术。
第三章主要是介绍下设计这个网站所需要的需求以及我们的功能需求分析,因为只有更好的分析清楚我们的功能需求才能更好的完成我们的设计。
第四章网站系统设计,主要介绍了网站结构的设计以及展示了数据库E-R图设计,这一章主要是为了能让大家更好的了解网站的一些基本设计信息。
第五章系统的实现,介绍了系统每个模块的设计与实现,让大家能清晰的了解系统的主要功能。
第六章系统的测试,这章主要是测试下各个部分每个功能是否能用,看下是否有错误。
第七章系统总结,进行系统最后的总结工作。
第2章 关键技术简介
2.1 Java技术
Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任何地方都可以运行。除此之外,它还拥有简单的语法和实用的类库,让编程人员可以尽可能将精力集中在问题的求解上,并且许多开源项目和科研成果都是采用它实现的。
在1995年这一年的5月份,著名的Sun Microsystems公司在程序开发设计上面郑重推出一种面向对象开发的程序设计语言——Java,最开始的时候Java是由詹姆斯.高斯林这位伟大的JAVA之父来进行主导,但是在后来由于各种原因,让甲骨文公司这个针对商业程序创建了oracle大型数据库的公司收购了Java。Java的平台总共算下来有3个,分别为javaME和javaSE以及javaEE这3个java平台。下面将对其进行分别介绍。
(1)在电脑桌面程序的开发上面需要选择JavaME,这个用得也比较多。
(2)企业也会根据工作以及业务需要开发各种软件,那么就会选用JavcEE这个支持企业版软件的开发的Java平台,JavcEE主攻运用在企业领域上面的web应用,JavcEE也在javaSE的基础上获得了比如jsp技术 ,Servlet技术等程序开发技术的支持。
(3)现在生活中手机的普及化,也使得手机端这样的移动设备的软件的兴起,JavaME这个迷你版java平台就能运用于移动端的软件开发操作。
2.2 B/S结构
此次设计的网络结构模式B/S结构(Browser/Server)。B/S架构也称为B/S模式,是一种服务器以及浏览器架构模式。B/S的工作模式都是先由浏览器请求,服务器再响应。B/S体系结构解决了异构系统中的连接难题,大大改善了系统的开放性,让系统的扩展和维护更加简单;同时,B/S体系结构操作也比较容易,界面全都为浏览器模式,容易分发数据的捕获程序。只要安装通用的浏览器(如WWW浏览器)就能通过Web服务器与数据库进行数据交互。此结构的好处之一在于由于它使用的统一的浏览器,使其可以在不同的地方且不需要用专门的软件进行操作,实现了不论你使用怎样的接入网的方式都可以对公共的数据进行调用和浏览。
相对于C/S模式,B/S模式是对C/S模式应用的扩展,B/S模式不用对不同的计算机安装不同应用程序,还有安全性的要求及对模式上手难度都比前者更好。B/S模式可以让客户机的压力大大减轻,工作的负荷被合理的分配了。
B/S三层框架结构图如图2-1所示:
图2-1 B/S三层框架结构图
2.3 MYSQL数据库
MySQL 是关系型数据库管理系统的代表, 因为MySQL是其免费开源的,而且MySQL的功能已经足够用对于学习和中小型企业来讲,所以开发中小型网站都会选择MySQL作为网站的数据库。[13]
MySQL具有开放性,它是一种关系型数据库管理系统,并且它的源代码可以被大众所熟知[3]。由于MySQL是开放源代码的,因此,只要经过授权就可以在自己需求的基础上对其进行修改。MySQL因为其固有的特点而备受关注,它具有很强的适应性,并且十分可靠,查询速度快。MySQL安装起来非常方便,且数据存储量大,不需要事务化处理。Sql语言拥有很多的方法,在项目中编写sql语句时使用起来是非常方便的,不会像其他语言那样需要编写更多的语句。正因为MySQL使用sql语言进行数据库管理,所以它收到了大多数程序员的热爱。
2.4 SSM框架
本德云社票务系统基于Spring、SpringMVC、Mybatis框架进行开发设计。
Spring 框架是在2004年首次发布,之后出现了多次的重大修订。Spring框架是由七个不同的模块组成,分别是SpringCore、Spring AOP、Spring ORM、Spring DAO、Spring Web Flow、Spring Context和Spring Web MVC[2]。这些模块提供不同的平台来开发不同的企业应用程序 ,本课题使用Spring Web MVC模块开发基于MVC的应用程序。
Spring Web MVC是基于Servlet API的原始Web框架,从一开始就包含在Spring 框架中。“Spring Web MVC”是该框架的正式名称,但通常被简称为“Spring MVC” [3]。Spring MVC框架提供了模型模块-视图模块-控制器的架构和可用于直接开发的Web应用程序的现成组件。Spring MVC模式将应用程序的不同方面分开,使元素之间形成松散耦合。
MyBatis原名叫做iBatis属于持久层框架,消除了大部分JDBC代码和参数的设置以及结果集的检索。这个框架不仅支持普通SQL查询和存储过程,还支持高级的映射[4]。MyBatis使用.xml和注解来做原始映射和配置,将接口和Java对象映射成数据库记录。
第3章 系统分析
3.1 可行性分析
在系统开发之初要进行系统可行分析,这样做的目的就是使用最小成本解决最大问题,一旦程序开发满足用户需要,带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。
3.1.1 技术可行性
3.1.2 经济可行性
3.1.3 操作可行性
本人自己就是学生,程序开发经验不足,在界面设计上面不会设计太复杂,要讲究简单好看,操作上要方便,不能让用户觉得不流畅。用户一旦进入操作界面,界面上就会有相应提示,跟着操作提示就可以找到对应的功能操作模块,对于用户来说免培训就能使用。本德云社票务系统本身具有操作可行性,其界面设计清晰、功能权限分配合理,操作简单,不同用户登录后可对进行相应功能模块的操作,具有极高的操作可行性。
3.1.4 时间可行性
从时间上看,在三个月的时间里学习相关知识,开发本德云社票务系统,时间上是有点紧,但是不是不可能实现,在做毕业设计的这几个月里,我通过努力使得功能应该基本可以实现。
综上所述,我们进行了四个方面的可行性研究,可以看出,该基于SSM框架的德云社票务系统的开发是没有问题的。
3.2 系统功能分析
本基于SSM框架的德云社票务系统主要满足两种用户的需求,这两种用户分别为管理员和用户,用户间的静态结构图如图3-1所示。
图3-1 用户间静态结构图
(1)管理员:管理员登录后可对系统进行全面的管理,主要功能模块包括个人中心、会员管理、票务信息管理、常见问题管理、管理员管理、系统管理(轮播图管理、公告信息、问题反馈)以及订单管理。管理员用例图如图3-2所示。
图3-2 管理员用例图图
(2)用户:用户进入本系统可查看票务信息、常见问题、公告信息等,注册登陆后主要功能模块包括票务预订、问题反馈、个人中心、我的订单、我的地址、我的收藏等。用户用例图如图3-3所示。
图3-3 用户用例图
3.3 系统性能分析
(1)系统的存储性:因为是德云社票务系统,所以就会在数据库要求上比较严格,信息录入的比较多,而且丰富复杂, 这就需要一个强大的数据库来存放更多的数据和保证数据的时时性。
(2)系统的易学性:系统设计的应该简单易学的,设计的各种功能应该简单操作,不需要努力学习培训,缩短用户熟悉系统的进程。
(3)系统的数据要求:数据应该录入准确,需要更新时,数据应该可以及时的修改,数据还应该有独立保存,不能删除数据的时候会连带着把还需要的数据都删除掉。
(4)系统稳定性:开发的德云社票务系统要求运行稳定,运行过程中无界面不清楚、字体模糊等现象。
(5)系统可靠性:系统不可以有病毒类代码,必须有拦截器,验证方法,对里面信息的保护措施,这样才让人用的放心。
3.4 系统流程分析
3.4.1注册流程
未有账号的用户可进行注册操作,在注册时系统会判断用户名是否已存在,已存在的话,提示返回重新填写用户名,用户名不存在,填写其他注册信息,系统判断注册信息是否正确,正确则在数据库中添加用户信息,注册成功。用户注册流程图如图3-4所示。
图3-4注册流程图
3.4.2登录流程
为了保证系统的安全性,要对本德云社票务系统进行管理,必须进行管理员登录,否则无权进行系统管理,同时用户要想实现在线选座订票等操作,也必须登录系统。用户登录流程图如图3-5所示
图3-5登录流程图
第4章 系统设计
4.1 系统结构设计
系统结构设计是一个将一个庞大的任务细分为多个小的任务的过程,这些小的任务分段完成后,组合在一起形成一个完整的任务。在整个设计过程,以确定可能的具体方案达成每一个小的最终目标,对于每一个小的目标而言,我们必须先了解一些相关的需求分析的信息。然后对系统进行初步的设计,并对其逐渐进行优化,设计出一个具体可实现的系统结构。
本基于SSM框架的德云社票务系统主要包括用户模块和管理员模块,根据第三章中系统功能需求分析,可画出本德云社票务系统的结构图如图4-1所示:
4.2系统顺序图
4.2.1登录模块顺序图
用户和管理员均可进行登录操作,登录模块的顺序图如图 4-2 所示。
图4-2用户登录顺序图
4.2.2添加信息模块顺序图
管理员和用户登录后均可进行添加信息操作,添加信息顺序图如图4-3所示
图4-3添加信息顺序图
4.3 数据库设计
一个好的数据库可以关系到程序开发的优劣,数据库设计离不开表结构的设计,还有表与表之间的联系,以及系统开发需要设计的数据表内容等信息。在进行数据库设计期间,还是需要多花时间进行考虑,最终设计出配套程序的数据库出来。
4.3.1 数据库E-R图设计
本德云社票务系统采用的是MYSQL数据库,数据存储快,因为德云社票务系统,主要的就是对信息的管理,信息内容比较多,这就需要好好的设计一个好的数据库,分类要清楚,不能添加信息的时候,造成信息太过混乱,设计好的数据库首先就需要先把各个实体之间的关系表达明确,下面我们用E-R图来具体表示。
E-R图是一种描述显示数据类型间的关系的数据描述方法,E-R图可以完整地映射出现实模型的关系。E-R图中的三个最为重要的元素就是实体、属性、关系。E-R图即由这三点组成。本德云社票务系统的E-R图如下所示:
4.3.2数据库表设计
本德云社票务系统采用了MYSQL数据库进行系统数据的储存,主要的数据库表的具体设置如下:
表4-1 chat问题反馈信息表
列名 | 说明 | 类型 ( 长度 ) | 备注 |
id | 编号 | bigint(20) | 不允许空,主键 |
addtime | 添加时间 | timestamp | 允许空 |
userid | 用户编号 | bigint(20) | 允许空 |
adminid | 管理员编号 | bigint(20) | 允许空 |
ask | 提问 | longtext | 允许空 |
reply | 回复 | longtext | 允许空 |
isreply | 是否回复 | int(11) | 允许空 |
表4-2 piaowuxinxi票务信息表
列名 | 说明 | 类型 ( 长度 ) | 备注 |
id | 编号 | bigint(20) | 不允许空,主键 |
addtime | 添加时间 | timestamp | 允许空 |
piaowumingcheng | 票务名称 | varchar(200) | 允许空 |
piaowutupian | 票务图片 | varchar(200) | 允许空 |
yanchuchengshi | 演出城市 | varchar(200) | 允许空 |
yanchudidian | 演出地点 | varchar(200) | 允许空 |
yanchushijian | 演出时间 | datetime | 允许空 |
jieshushijian | 结束时间 | datetime | 允许空 |
yanchumingdan | 演出名单 | varchar(200) | 允许空 |
zuoweileixing | 座位类型 | varchar(200) | 允许空 |
piaowubeizhu | 票务备注 | varchar(200) | 允许空 |
xuanchuanshipin` | 宣传视频 | varchar(200) | 允许空 |
yanchuxiangqing | 演出详情 | longtext | 允许空 |
clicktime | 最近点击时间 | datetime | 允许空 |
clicknum` | 点击次数 | int(11) | 允许空 |
price` | 价格 | float | 允许空 |
number | 座位总数 | int(11) | 允许空 |
selected` | 已选座位 | longtext | 允许空 |
表4-3 orders订单信息表
列名 | 说明 | 类型 ( 长度 ) | 备注 |
id | 编号 | bigint(20) | 不允许空,主键 |
addtime | 下单时间 | timestamp | 允许空 |
orderid` | 订单编号 | varchar(200) | 允许空 |
tablename | 商品表名 | varchar(200) | 允许空 |
userid | 用户编号 | bigint(20) | 允许空 |
goodid | 商品编号 | bigint(20) | 允许空 |
goodname | 商品名称 | varchar(200) | 允许空 |
picture | 商品图片 | varchar(200) | 允许空 |
buynumber | 购买数量 | int(11) | 允许空 |
price | 价格 | float | 允许空 |
discountprice | 折扣价格 | float | 允许空 |
total | 总价格 | float | 允许空 |
discounttotal | 折扣总价格 | float | 允许空 |
type | 支付类型 | int(11) | 允许空 |
status | 状态 | varchar(200) | 允许空 |
address | 地址 | varchar(200) | 允许空 |
表4-4 users管理员信息表
列名 | 说明 | 类型 ( 长度 ) | 备注 |
id | 编号 | bigint(20) | 不允许空,主键 |
username | 用户名 | varchar(100) | 允许空 |
password | 密码 | varchar(100) | 允许空 |
role | 角色 | varchar(100) | 允许空 |
addtime | 添加时间 | timestamp | 允许空 |
表4-5 huiyuan会员信息表
列名 | 说明 | 类型 ( 长度 ) | 备注 |
id | 编号 | bigint(20) | 不允许空,主键 |
addtime | 添加时间 | timestamp | 允许空 |
yonghuming | 用户名 | varchar(200) | 允许空 |
mima | 密码 | varchar(200) | 允许空 |
xingming | 姓名 | varchar(200) | 允许空 |
touxiang | 头像 | varchar(200) | 允许空 |
xingbie | 性别 | varchar(200) | 允许空 |
shouji | 手机 | varchar(200) | 允许空 |
shenfenzheng | 身份证 | varchar(200) | 允许空 |
money | 余额 | float | 允许空 |
第5章 系统的实现
5.1 用户功能模块的实现
用户进入本德云社票务系统可查看票务信息以及公告信息等,系统主界面的运行效果如图5-1所示.
图5-1系统主界面
5.1.1用户登录界面
用户要想实现票务预定操作,必须进行登录操作,在登录界面输入正确的用户名和密码,点击登录按钮进行登录,用户登录界面如图5-2所示。
图5-2用户登录界面
5.1.2用户注册界面
没有账号的用户可进行注册操作,用户注册界面的运行效果如图5-3所示.
图5-3用户注册界面
5.1.3票务详情界面
用户可选择票务查看票务详情信息,登录后可进行收藏以及预定操作,票务详情界面如图5-4所示。
图5-4 票务详情界面
5.1.4票务信息界面
用户在票务信息界面可查看所有票务信息,并可选择查看详情,票务信息界面展示如图5-5所示。
图5-5 票务信息界面
5.1.5我的订单界面
用户可进入我的订单界面查看个人订单信息,我的订单界面如图5-6所示。
图5-6 我的订单界面
5.1.6我的收藏界面
用户在我的收藏界面可查看个人已有收藏信息,我的收藏界面如图5-7所示。
图5-7 我的收藏界面
5.2 管理员功能模块的实现
5.2.1管理员登录界面
管理员要想进入系统后台对系统进行管理,首要进入登录界面,需通过正确的账号、密码进行登录操作,管理员登录界面如图5-8所示 。
5.2.2会员管理界面
管理员在会员管理界面可查看已有会员信息,对已有会员信息管理员可进行修改和删除操作,同时管理员也可进行添加会员信息,会员管理界面展示如图5-9所示 。
图5-9 会员管理界面
5.2.3常见问题管理界面
管理员可添加、修改和删除常见问题信息,常见问题管理界面展示如图5-10所示 。
图5-10 常见问题管理界面
5.2.4票务信息管理界面
管理员可添加、修改和删除票务信息,票务信息管理界面展示如图5-11所示 。添加票务信息界面展示如图5-12所示。
图5-11票务信息管理界面
图5-12添加票务信息界面
5.2.5订单管理界面
管理员可管理订单信息,包括未支付订单、已支付订单、已完成订单、已取消订单、已退款订单以及已发货订单,其中已支付订单界面如图5-13所示。
图5-13 已支付订单界面
第6章 系统测试
6.1 程序测试
在设计系统的过程中难免会出现一些不可避免的错误,而这些错误或缺陷则可能造成用户的厌恶和厌烦,所以这时候我们需要对此系统进行测试。在系统测试中我们基于两个不同的立场对系统进行测试,从用户的立场出发,普遍希望在测试运行中能够直接显示出系统的错误,而从系统开发者的立场中,更希望软件测试中不存在任何问题,这样体现出一个软件系统的稳定性。
一功能测试:从功能测试中我们首先要检测软件系统的功能是否能够满足用户的需求,如满足功能要求,我们则对系统进行完善,如不满足,则继续按照需求增添功能。
二性能测试:从性能测试中我们主要对系统的稳定性能进行测试,在系统运行过程中我们一定要保证系统运行的稳定性,使系统能够正常运行。
三安全测试:在安全测试中我们要保证账号登录安全性,所以要求系统能够保证对个人登录用户信息和用户操作等方面的安全要求,同时要保证系统减少安全漏洞,提高系统的安全性能。
6.2 测试方案计划
构造测试是白盒测试的另一个名字,了解与分析程序的结构以及性能功用的,从而我们可以得到最终想要的结果并且观察出是不是每一条程序都能得到。
性能测试是黑盒测试别称,程序本身的运作通过程序的进程来观察,主要是看一下程序是不是能够像我们预期的目标那样发展,看一看我们的程序最终能不能完整的得到我们最后想要的功能和储存想得到的数据,到最后看一下我们的这个程序完整性能不能达到要求。
单元测试就是模块测试,顾名思义就是测试每个模块所承担的功能是否能够实现,这个测试就是为了找出代码在实际的设计运转中某一些小的程序所出现的偏差,很好地改正这些错误,就说明我们模块测试进行很成功过。
集成测试就是对系统的测试以及对他子系统的一些性能测试,他检查的事系统的包装程序信息。找出其中的问题。他的优势主要有以下这几点:
软件耗费较少。
可以提前发现端口的错误。
更好的地位系统中错误的位置。
从底部往上面进行的方案针对于偏下层的结构,而中间的结构就采用折中的方法。
终于到了结尾性的工作了。就是为了给用户看一下我们的系统功能是否达到了预期的效果。我采用了性能测试也就是黑盒测试对系统进行测试。
其结果是分别是:
有一定的差异在用户的需求。
再者就是结果与之差不了多少。
到了最后了,我们发现的问题都是与用户的需求存在一定的关联。
6.3 测试方法
本测试主要是系统是否能够进行服务器进行处理信息的能力,不同的用户发出不同的服务请求,系统必须能够准确的进行数据的传达,在这种情况下进行测试响应的时间、内存使用的情况和CPU占用大小等指标,系统完成设计必须保证信息的正确性,信息紊乱带来的后果是非常可怕的,所有必须要进行压力测试,通过本测试进行系统相应速度、稳定性能和处理能力进行优化。
运用黑盒子测试的测试办法,把各个不同功能的软件模板进行区分、管理。对于不同的模块独立的分装起来,在传统测试的时候要进行数据的统一测试,完成对系统的概要设计详细解读资料、需要解决的问题,及操作的详细应用说明等内容来视作测试的突破口,对测试的对象进行逐一对照检查,并针对单个的程序检测延伸至这个研发过程中单个及整个集成单元的检测中,要有规律有顺序的进行,不但可以缩短我们的工作时效,避免返工的操作,也可以对可用性负责,提高了可操作性和软件研发的实用性。通过对系统概要设计验证测试,测试系统的统一管理方式,对系统的各个功能模块以及系统的性能进行测试,验证系统的功能以及系统的性能。
6.4 测试分析
经测试本基于SSM框架的德云社票务系统界面友好、功能齐全,系统运行后很稳定,可靠,也具有数据加密的功能,满足安全性。总体说来,软件通过测试。
第7章 总结
毕业设计是最能体现出我们所学知识的应用情况,是对我们大学期间所学知识的应用巩固和提高的时刻。通过这次的毕业设计让我对软件的开发有了很深的认识了解,我的编程能力也得到了很大的提升。
本次开发的德云社票务系统已经接近尾声阶段了,在这次独立完成毕业设计的期间,我自己体会到了很多的东西,另外我很想说的就是独立开发软件真的很能让人在开发期间得到锻炼,不管是需求分析,还是系统的设计以及系统功能详细实现还有最后的测试工作,每一步都要小心翼翼的完成,一步一步来,不然任何环节出现了差错,返工起来也很麻烦,开发系统过程中,遇到了很多的难题,比如德云社票务系统需要具有什么样的功能,这个我还是思考了很久,后来同学给我提示了一下,参考别人做好的系统,看看人家设计了什么功能,自己就多多参考下,后来这个问题就很好解决了,最难的就是系统编码了,我这个人本来就比较粗心,编码出现很多不该出现的错误,不该打空格也不小心键盘空格键多敲了两下,整得自己老是程序运行出错,找了好久都没有解决,后来无奈找到室友帮忙看看,慢慢检查终于找到问题了,编码过程真的很心塞。还好东拼西凑总算完成了功能要求了。系统整体界面虽然不是很好看,但起码不花哨,用户使用起来整体感觉就是简洁,功能体验虽然有点啰嗦,但是需要的功能都已经具备了。
自己的身份目前还是学生,开发程序肯定是不会考虑周全,程序完成开发后也经过了一系列测试,整体来说还是没有发现明显的操作逻辑错误,自己在毕设制作过程中不仅知识有所增加,独立学习的能力也有所提高了,更重要的就是遇到问题向周边同学寻求帮助,这个是很有必要的。总的来说毕业设计的圆满完成,我真的觉得很自豪。
参考文献
[1] 王波编著.Java架构师指南[M].人民邮电出版社,2018:22-113.
[2] 郝佳编著.Spring源码深度解析[M].人民邮电出版社,2019:5-98.
[3] [美]Paul Deck著.林仪明译.Spring MVC学习指南[M].人民邮电出版社,2017:14-113.
[4] 李艳鹏[等]编著.互联网轻量级SSM框架解密[M].电子工业出版社,2019:19-98.
[5]杨浩著.JavaScript入门与提高[M].北京:清华大学出版社,2004.
[6]梁景红著.网站设计与网页设计配色[M].北京:人民邮电出版社,2005.
[7]贺平.《软件测试教程》.电子工业出版社.2004
[8] 张孝祥,徐明华.软件开发课堂.清华大学出版社,2009:55
[9]张立科.java信息系统管理开发[M].北京:人民邮电出版社.
[10] 张海潘.软件工程导论.清华大学出版社,2008:86
[11] 王珊,萨师煊.数据库系统概论.高等教育出版社, 2006:16
[12]孙卫琴. 基于MVC的JavaWeb设计与开发. 北京: 电子工业出版社 2004.
[13]王雨竹.MYSQL入门经典. 北京:机械工业出版社 2013
[14]陈Maydene Fisher,Jon Ellis,Jonathan Bruce著. JDBC API Tutorial and Reference, Third Edition. 11 June,2003
[15] 雷文华, 薛小文. MATLAB和Servlet在网络数据处理中的应用[J]. 电子测试, 2010,(11):81-86.
[16]李娜.教学资源管理系统的设计与实现[D].电子科技大学,2012.
[17]伍海波,匡静,朱承学,谢景杨. 基于MVC的教学资源管理系统的设计与实现[J]. 计算机技术与发展,2014,07:214-217+222.
[18]王薪潭. 面向课程群的教学资源管理系统研究[D].辽宁师范大学,2014.
致 谢
首先要对我本次论文的指导老师表示深深的敬意,她对于我的学习和生活给予了最多的关怀和最悉心的指导。同时,我还要感谢大学期间我所有的带课老师,他们对我的生活、学习等各方面都付出了许多关怀,没有他们的带领,我不会成为一名合格的毕业生没有他们在课堂上认真详细教课、辅导,我无法顺利完成毕业设计,我想向他们表达最真诚的感谢!感谢我们学院的所有领导,为我提供所需要的设备和资料!还要感谢我身边的同学和朋友们,感谢他们对我的关心和帮助!
我还要感谢我最亲近的家人,是因为有了他们在学业上对我的全力支持以及在生活上的关怀才能支撑着我走到现在!
祝愿学校的领导教师以及和我一起奋斗的同学们工作顺利,事业有成,也要祝愿学校的前景更加辉煌。
最后,我要向牺牲了休息时间来对本文进行审阅,评议和参与论文答辩的各位老师表示深深的感谢。在此,衷心的谢谢您们!
核心代码展示
/**
* 公告通知
* 后端接口
* @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);
}
}