Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Vue项目在这(打开即可) @ dca3199
Loading...
README
MulanPSL-2.0

课程设计(大作业)目的

该课程设计是对学生学习过“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表格的批量导入教练信息

功能描述:管理员通过上传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.

木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

About

项目采用Vue 和Springboot,Redis,Mysql进行开发 expand collapse
Java and 3 more languages
MulanPSL-2.0
Cancel

Releases

No release

Contributors

All

Activities

can not load any more
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化