该课程设计是对学生学习过“Java EE框架应用开发技术”课程后的一次综合性开发训练。项目实践的宗旨是使学生加深对Spring、Spring MVC、MyBatis三大框架开发技术的理解与运用,提高学生的后端开发能力。学生也可以此为基础自学例如Spring Boot,Spring Data,Hibernate等,将自学的框架应用于该课程设计可以获得更高分。
3.1 需求说明及功能分析 3.1.1背景以及意义 随着时代的不断发展,数据的不断进步,传统的人工线下管理游泳馆已经逐渐淘汰,班级以及客户管理是一项十分重要的工作,使用人工式管理不仅效率低下,而且容易出错,安全性很差。并且在实际操作中,数据的查询和维护都不容易实现,容易发生差错,导致管理费用的增加,服务质量难以得到保证,从而影响企业的竞争力。为了减少时间,经济成本,游泳馆从线下扩展到线上已成为一种必然的趋势。系统设计的游泳馆网站可以对各个类别的用户,以及不同种类的班级,活动进行管理,并且通过连接MYSQL数据库将数据进行存储,通过设计多个独立存在的表,将数据独立开来,并设计了表与表之间的关系,更好的提高了数据的可维护性和安全性,从而提高工作效率。 3.1.2解决方案的设计 设计美观且大方的网页,增加用户的体验感,网页的首页要有游泳馆介绍,近期活动列表(点击跳转至活动详情页面),会员和学员可参加活动教练图片列表(点击跳转至教练详细介绍页面)。登录之后的用户,可以在对应的专区中查询到自己所报名的班或者活动,使得系统更加人性化。游客(即未登录的用户)可查看首页、教练详细介绍页面、活动详情,不能参加活动,成功报名游泳班即成为学员。游客在报名游泳班时需按报名要求填写必要的个人信息(如姓名、电话、邮箱等),教练将通过微信或邮件发送报名成功提醒,同时告知学员的账号初始信息;学员在首次登录系统时,应提示其修改密码。教练可以通过导入Excel表格进行学员的批量导入,管理员可以通过导入Excel表格进行教练的批量导入,管理也可也上传图片进行教练的头像添加。会员分多个等级,游泳班分儿童/成人蛙泳、自由泳、仰泳、蝶泳等多种类型。
1、硬件环境:
台式机或笔记本电脑,运行时所需内存:1G及以上
2、软件环境:
操作系统:windows 10及以上版本
开发平台:VS Code , IntelliJ IDEA 2021.1.3 x64
JDK环境:JDK1.8
数据存储:MYSQL数据库存储,Redis数据存储
####功能需求
游泳馆管理网站分为游客,学员,会员,管理员,教练这5个角色,主要功能与参与者角色如下:
报名课程:游客
报名活动:会员,学员
管理学员消息:教练
管理游客报名消息:教练
管理个人消息:教练,会员
管理教练,学员,会员信息:管理员
管理活动信息:管理员
管理报名和课程信息:管理员
本后端系统采用的是SpringBoot框架,前端页面采用VUE3.0框架,实现前后端分离,并且采用Redis作为缓存数据库,主数据库为MYSQL,后台检测监控整合Druid模块进行监管,根据框架特点可以设计各个层所执行的操作。 (1)实体层(Pojo): 该层主要是定义实体类进行封装数据,方便各层去调用。每个用户都定义一个实体类,活动班级也定义相应的实体类。 (2)持久层(Dao): 主要是做数据持久层的工作,负责和数据库进行联络的一些任务在此封装,Dao层的设计首先是Dao的接口,然后就是数据库映射文件mapper的设计,接着在spring相关配置文件中去配置相应的mysql配置。 (3)业务层(Service): 主要负责业务模块的逻辑应用设计;业务逻辑实现具体要调用已定义的Dao层的接口。Service层建立在Dao层之上,建立Dao层之后才可以建立service层,而service层又在controller层之下,因而service层应该既要调用Dao层的接口,又要提供接口给controller层的类来调用,它正好处在一个中间的位置,每个模型都有一个service接口,每个接口分别封装各自的业务处理的方法。所以每个用户都定一个一个service接口,封装他们权限的业务处理方法。 (4)控制层(Controller) 主要负责具体业务模块的控制,在此层主要是调用Service层的方法返回数据给前端。 (5)配置类层(Config) 主要是对系统整合相关模块进行配置,例如整合redis,开启缓存的配置,以及缓存管理的配置。还有的配置解决前后端分离的跨域问题 (6)工具类层(Utils) 主要是配置前后端数据交互的类 3.2.2功能实现顺序图 用户登录,用户登录是用户操作游泳网站的必要操作,只有登录成功的用户,才有对应的权限去管理。图6为它的顺序图
图 6 用户登录顺序图 游客报名:游客报名是游客可以进入游泳馆学习的重要一步,图7为它的顺序图
图 7 报名流程图 用户信息管理:用户信息管理是管理员管理游泳网站的重要操作,图8为它的顺序图
图 8 用户信息管理
活动发布:是管理员管理活动的必要操作,图9为它的顺序图
图 9 活动发布顺序图 班级修改:班级修改是管理员管理班级的必要操作,图10为它的顺序图
图 10 班级修改顺序图
会员表:会员的相关信息(会员id,名字,电话,等级,密码,活动id) 表 1 会员表 字段名 类型 约束 备注 Id Int Primary key 自增主键 Name Varchar Not null 名字 Phone Varchar Not null 电话 Grade Varchar Not null 等级 Password varchar Not null 密码 Aid Int 活动id
学员表:学员相关信息(学员id,名字,年龄,电话,邮箱,课程id,活动id,密码,判断是否为第一次登录)保存为学员信息 表 2 学员表 字段名 类型 约束 备注 Id Int Primary key 主键自增 Name Varchar Not null 名字 Age Varchar Not null 年龄 Phone Varchar Not null 电话 e_mail Varchar Not null 邮箱 Cid Int Not null 课程id Aid Int 活动id Password Varchar Not null 密码 First Int Not null 判断是否第一次登录 教练表:教练相关信息(教练id,名字,年龄,电话,介绍,能力,图片链接,密码)保存为教练信息 表 3 教练表 字段名 类型 约束 备注 Id Int Primary key 主键自增 Name Varchar Not null 名字 Age Varchar Not null 年龄 Phone Varchar Not null 电话 Introduce text Not null 介绍 Skill Varchar Not null 能力 Image Varchar Not null 图片链接 Password Varchar Not null 密码
课程表:课程表的相关信息(课程id,名字,课程介绍,适合人群的年龄,游泳种类,上下课时间,学期时间,班级种类,人数),保存为课程信息 表 4 课程表 字段名 类型 约束 备注 Cid int Primary key 主键自增 name varchar Not null 名字 description text Not null 介绍 age varchar Not null 适合人群年龄 kind varchar Not null 游泳种类 begin time Not null 上课时间 last time Not null 下课时间 start date Not null 开课时间 end date Not null 结课时间 type varchar Not null 班别种类 num int Not null 人数 coach_id int Not null 教练id 报名表:游客报名的相关信息(报名id,名字,邮箱,年龄,电话,课程id) 表 5 报名表 字段名 类型 约束 备注 id int Primary key 主键 name varchar Not null 名字 e_mail varchar Not null 邮箱 age int Not null 年龄 phone varchar Not null 电话 cid int Not null 课程id 管理员表:管理员登录相关信息(用户名,密码) 表 6 管理员表 字段名 类型 约束 备注 User Varchar Primary key 用户名 Password Varchar Not null 密码
接口定义
登录 功能描述:使用会员的登录流程。 Service层 FindVIP(String userName,String passWord):实现登录操作 Dao层 findVIP(VIP vip);根据会员实体类VIP对象进行查询操作
报名 功能描述:使用游客的报名流程。 Service层 insert(Apply apply) 根据报名表实体类对象进行报名 updateNum(int cid) 更新报名人数 Dao层 insert(Apply apply) 将实体类对象数据插入报名表 updateNum(int cid) 更新报名人数
教练查找学员信息: 功能描述:教练根据自己的id查看所教不同班级学生的信息。 Service层: findCoach_id(Coach coach):根据教练的实体类对象查找相应的所教班级 find(int cid):根据班级id查找学员信息。 Dao层 findCoach_id(Coach coach):根据教练的实体类对象查找相应的所教班级对象集合 find(int cid):根据班级id查找学员对象集合
功能描述:使用管理员对学员进行增加,删除和修改操作。 Service层: insert(Student student) 根据学员实体类封装对象进行学员的增加 Del(Integer id)根据学员的id进行删除 Update(Student stu)根据学员的实体类封装对象进行修改 Dao层: insertStudent(Student student) 根据学员实体类封装对象进行学员的增加 DelStudent(Integer id)根据学员的id进行删除 UpdateStudent(Student stu)根据学员的实体类封装对象进行修改
功能描述:管理员通过上传Excel表格对教练信息批量导入 Service层: importExcel(MutipartFile file) 根据MutipartFile进行Excel表格的解析 Dao层: insertCoach(Coach coach)将解析出来的数据通过Coach实体类封装添加进数据库
功能描述:防止用户还未登录就可以访问其他界面。学员,会员未登录时,是处于游客模。这里两种方式去实现拦截器,第一种是采用Springboot框架的后端拦截器,第二种是采用Vuex进行拦截。 由于该项目采用的是前后端拦截,采用第一种要进行Token的处理,资源消耗大,浏览器负担重,所以我才用了第二种方式进行拦截器的定义。对js文件进行Vuex的相关配置,作用是将登录的用户信息从后端拿出来处理之后存入Session里面去,然后保存在内置方法state里面去。在项目打开的时候会判断本地存储中是否有 user 这个对象存在,如果存在就取出来并获得 username 的值,否则则把 username 设置为空。这样我们只要不清除缓存,登录的状态就会一直保存。
接着在index.js文件中配置路由申请前操作,对需要拦截的路径进行拦截判断,然后通过调用state里面的值可以知道用户信息,从而去实现他的特权
文件上传 功能描述:管理员通过上传教练头像文件进行教练的添加。 在pom.xml导入相对应的文件上传包。
使用了Element-plus的插件,:action 绑定处理上传的路径方法,accet:” .jpg”表明只能上传jpg类型图片文件。
####上传Excel表格以及下载 功能描述:管理通过上传Excel表格进行教练的批量导入。 同文件上传一样,先要上传对应的Excel表格,这里和上面同理不做说明。 接着在Service层中定义InputStream输入流得到文件的输入流,通过配置不同workbook对象进行不同的Excel表格文件类型的实例化。
获得第一页的Sheet对象,然后通过iterator方法解析Sheet,获得多行数据存入到Row中。
接着通过遍历迭代器,通过定义好的Excel工具类将每一行的数据提取出来,并存入到Coach对象中,将Coach传递到Dao层进行数据库的插入。这样就实现了Excel文件的解析并导入。
Redis缓存配置 先在application.yml中对Redis的端口,服务器地址,数据库等进行配置。
接着在Service层进行Redis注解的使用,@Cacheable(value=”allAC”),这个注释的意思是,当调用这个方法的时候,会从一个名叫 allAC 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。@CachePut 更新缓存@CacheEvict 作用和配置方法:根据一定的条件对缓存进行清空,cacheNames:存储注解方法调用结果的缓存名称。allEntries:是否清空所有缓存内容。
在做这个程序的时候我遇到了许许多多数不清的问题,就比如在是实现上传图片的导入的时候,因为不知道需要规定返回的形式花了好多时间去寻找答案,但还好通过网上的不断寻求终于解决。还有的是在实现教练页面的时候,因为一个教练可以教多个班,而多个班又有多个学生,虽然我及时想到了Mybatis的resultMap的使用,但是由于对于它的不理解,导致了很多问题的产生。在做大作业的过程中,我深刻理解了Seesion和Model的区别,也就是理解了这个区别以及用法使得我在后面的编码变得更加快速,两者都是通过key-value的方式存储值。我觉得两者的区别大部分在于有效范围大小,session创建后,可以一直存在,只要不调用session.invalidate()方法清除session,它就会一直存储在服务器端的一段内存中,只有当会话结束之后才会消失,通常session用来判断用户登录的状态,在ssm中通过拦截器以及session来控制用户登录后的访问权限。model的数据,只会在下一页面中使用,比如在开发ssm中,你在控制器中通过model存储了数据,控制器返回的视图就可以通过el表达式调用model中存储的数据。还有重定向与转发,如果是重定向,由于是重新请求,model的数据会消失,转发则不会,而对于Session来说,无论是重定向与转发,session的值都不会发生改变。 这个项目一开始我使用的仅采用传统的Spring框架进行编程,并且实现了所有功能,后面结合自学的Redis,Springboot,Vue3.0,Vuex,Druid,Mybatis-Plus进行项目的开发,不仅减少了许多代码量,逻辑也更为清晰,还为后期的维护开发做出了重要贡献。
[1]沙之洲.Java编程语言在计算机软件开发中的应用[J].电子世界,2021(24):125-127.DOI:10.19353/j.cnki.dzsj.2021.24.052. [2]李雅琴.Java编程语言的优势及其应用实践研究[J].互联网周刊,2021(24):60-62. [3]涂华燕.基于MySQL宿舍管理系统数据库设计[J].电脑编程技巧与维护,2021(12):104-106.DOI:10.16184/j.cnki.comprg.2021.12.038. [4]冯冬艳.MySQL集群主从复制的原理、实现与常见故障排除[J].山西电子技术,2021(06):47-48+57. [5]闫继正,张雷,张海涛.基于MySQL的空管设备集中监控系统数据库设计[J].微处理机,2021,42(06):47-51. [6]宋文彬.探讨Java平台及应用Redis技术的安全问题研究[J].数字通信世界,2021(12):51-52+60. [7]张文,方巍,贾雪磊.基于SSM框架的合租系统设计与实现[J].计算机技术与发展,2021,31(11):159-164. [11]王江霖,黄彩霞,樊旭龙.基于SSM框架的网络资源共享平台的研究与实现[J].电脑知识与技术,2021,17(28):76-78.DOI:10.14004/j.cnki.ckt.2021.2999. [12]蒙笑阳.基于SSM框架的室内定位导航系统[J].铁路通信信号工程技术,2021,18(09):38-42. [13]方生.基于“MVVM”模式的“Web”前端的设计与实现[J].电脑知识与技术,2021,17(20):147-149.DOI:10.14004/j.cnki.ckt.2021.2004.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。