当前位置: 首页 > news >正文

Springboot学生选课系统的设计与实现毕业设计源码

Springboot学生选课系统的设计与实现

摘 要

随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的学生选课系统来管理学生选课信息,会使管理工作系统化、规范化,提高管理效率。

本课题的研究对象是学生选课系统,该系统实现了系统用户管理、学生管理、教师管理、课程信息管理、选课管理、成绩管理、学院信息管理、教室信息管理等功能。本系统在设计上,考虑到系统内容以及系统的受众群体,在系统的美工方面采用了比较正规的设计,同时也提供了友好的页面以及简单的操作,系统采用Springboot、Mysql,这样的组合不但利用上了在大学中所学到的知识,并且能够使系统真正的发布到互联网上,而不是一个单纯的演示系统。

本系统经过测试,运行效果稳定,操作方便、快捷。在具体的应用过程中,有可能会出现一些问题,今后还会对本系统不断地进行完善、更新,使其功能更强大,应用更广泛。

关键词:B/S结构;学生选课;Springboot框架;

Design and implementation of springboot student course selection system

Abstract

With the continuous progress of mankind towards the information society, the surging information age is setting off a new revolution. At the same time, with the rapid development of computer network technology, the application of network management has become more and more widely. Therefore, establishing a student course selection system with B / S structure to manage the student course selection information will systematize and standardize the management work and improve the management efficiency.

The research object of this subject is the student course selection system, which realizes the functions of system user management, student management, teacher management, course information management, course selection management, score management, college information management, classroom information management and so on. In the design of the system, considering the system content and the audience of the system, the system adopts a more formal design in the art of the system, and also provides friendly pages and simple operation. The system adopts springboot and mysql. This combination not only makes use of the knowledge learned in the University, but also enables the system to be truly released to the Internet, rather than a simple demonstration system.

After testing, the system has stable operation effect and convenient and fast operation. In the specific application process, there may be some problems. In the future, the system will be continuously improved and updated to make it more powerful and widely used.

Key Words: B / S structure; Students choose courses; Springboot framework;

目  录

 

Abstract

  

1 绪论

1.1研究背景

1.2开发意义

1.3开发现状

1.4论文结构

2 主要技术和工具介绍

2.1 J2EE技术

2.2 MVVM模式

2.3 B/S结构

2.4 Springboot框架

2.5 Mysql数据库

3 系统分析

3.1可行性分析

3.1.1经济可行性

3.1.2技术可行性

3.1.3操作可行性

3.2需求分析

3.3业务流程分析

3.4数据流程分析

4 系统设计

4.1开发环境

4.2系统结构设计

4.3主要功能模块设计

4.4界面设计

4.5数据库设计

4.5.1数据库设计概述

4.5.2概念设计

4.5.3表设计

5  系统实现

5.1登录模块的实现

5.2学生子系统模块的实现

5.2.1课程信息模块的实现

5.2.2选课模块的实现

5.2.3成绩信息模块的实现

5.3管理员子系统模块的实现

5.3.1用户管理模块的实现

5.3.2密码修改模块的实现

5.3.3学院信息模块的实现

5.3.4课程信息管理模块的实现

5.3.5选课管理模块的实现

6  系统测试

6.1软件测试

6.2功能测试

6.3测试结果

7  总结

  

参考文献

第1章 绪论

1.1研究背景

随着现代计算机科学的迅速发展,信息和通讯技术的应用与推广,各校教学管理模式正在发生着巨大的变革。学校教学管理工作信息化、数字化的教育与实践也越来越受到重视。学生的选课工作与学生的学业和老师的教学工作息息相关,也是高校信息管理的重要组成部分。全校性选修课的目的在于扩大学生知识面,加强学生素质教育,培养复合型高级人才,具有不可替代的重要性。

当今社会对教育水平和教学管理软硬件的要求日益提高,这对一个学校能够具有一整套完善的教学管理软件提出了更多的要求。而要实现这一功能,就要求学校管理者配备一套高效的学生选课系统,以便在学校内实施良好的一整套完善的管理且以最快地速度响应教师和学生的需求,及时为他们提供服务,为他们提供一个高效、便捷的环境。高校学生选课系统是校园网络中一个重要的应用系统,它大大改善了学校教学、科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平。

1.2开发意义

从学生的角度来说,由于学校教学制度的改革,现在大部分高等院校开始实行的是学生的自主选课模式。传统的教学模式(学生按照学校安排好的课程上课)已经不能适应新型的教学模式,如果仍然通过纸上的方式选课,一方面浪费了大量的人力、物力资源,另一方面浪费时间以及会在人为的统计汇总过程中出现可避免的差错等情况。随着高校人数的增多,上述弊端会越来越多的暴露出来。如果利用网络进行选课,学生只要在计算机前输入自己的个人选课信息即可完成教务部门原来几倍的作业量。从教师的角度来说,教师提出代课申请完成课程发布的工作更加容易,得到教学的信息更加快捷,因此通过选课系统可以大幅度的减少教师的工作量,方便了教学工作。

1.3开发现状

国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,美国就建成了NSFNET(国家科学基金网),其课题的申报及课题的进展情况汇报都在网上进行。其网上学生在线选课系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作用,为世界各国培养出大批人才。所有这些都表明,基于Internet的校园网的应用已深入到校园内的各个方面。     

我国不少高校都实行了学分制,它的核心是允许学生自由选课,即把学习的自主权交给学生。在这里,学生选课时的制约因素比较复杂,工作量也很大,而且往往需要在较短的时间内完成。运用计算机辅助选课,即能实时地对大量选课数据进行检验和统计,十分方便地输出选课结果,同时也避免了人工处理时容易产生的错误。

1.4论文结构

第一章是论文的绪论部分,主要介绍了课题的研究背景以及研究目的和意义。

第二章研究了学生选课系统的所采用的开发技术和开发工具。

第三章研究了学生选课系统的需求分析,根据系统的特点,分析系统采用的体系结构及开发方法,以及该系统的运行环境,并分析了业务流程,绘制了业务流程以及数据流程。

第四章是对系统的详细设计进行说明。

第五章是系统的具体实现,介绍系统的各个模块的具体实现。

第六章在前几章的基础上对系统进行测试和运行。

最后对系统进行了认真的总结,以此对未来有一个新的展望。

第2章 主要技术和工具介绍

2.1 J2EE技术

人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便。

2.2MVVM模式

MVVM模式是常用的开发模式,主要是在代码实现上将其分为M层、V层和C层。

视图(View)代表用户交互界面,一个 Web 应用就可能有很多的界面,在 MVVM 模式中,视图仅仅处理的只有数据采集、处理,还有用户的请求, 并不包括业务流程的处理,业务流程由模型(Model)来处理。

模型(Model)就是业务流程/状态的处理及业务规则的制定。模型处理业务流程的过程其它层是无法看见了的,它就像黑箱子,在接受视图请求的数据之后,然后返回最终的处理结果。MVVM 最主要的核心就是业务模型的设计,一个典型的应用例子就是目前流行的 EJB 模型,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但是它不能作为应用设计模型的框架。

控制器(Controller)可以理解为接收用户的请求,然后视图和模型匹配在一起,一起再完成用户请求。它有非常明显的作用在划分控制层上,可以很清晰地告诉你,它就是一个分发器,选择什么样的模型、视图,可以完成用户的什么样的请求。控制层不做所有的数据处理,比如说:用户点击一个连接,控制层接受到请求之后,并不处理业务信息,它只是向模型传递用户的信息,同时告诉模型做什么,然后选择符合需求的视图返回给用户。

2.3B/S结构

B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。

2.4Spring boot框架

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。

2.5Mysql数据库

Mysql 经过多次的更新,功能层面已经非常的丰富和完善了,从Mysql4版本到5版本进行了比较大的更新,在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩,同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新,数据库自身的镜像功能也得到了很大的增强,运行的流畅度和易用性方面有了不小的进步,驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化,能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心,同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新,增加了两个非常使用的显示区,一个是信息区,对表格和文字进行了分类处理,界面的显示更加清爽和具体。第二是仪表的信息控件,能在仪表信息区进行信息的显示,同时还能进行多个信息的比对,为用户的实际使用带来了很大的便捷。

针对本文中设计的学生选课系统在实际的实现过程中,最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作,而且数据的安全性要求也是非常的高。综合这些因素,最终选择安全性系数比较高的Mysql来对学生选课系统后台数据进行存储操作。

第3章 系统分析

3.1可行性分析

分析用户需求和数据需求,得到一个方案,然后设定系统的开发方案,为每个功能模块设计出物理设计方案,开发本系统的是否可行?本文从技术上、操作上和经济上对本系统的开发进行可行性分析。

3.1.1经济可行性

学生选课系统属于一个工具型的系统,它可以节省工作人员大量数据收集、方便快捷,能够极大地提高工作效率,最大限度的降低管理员的工作量,使管理尽量简便,同时促进课程管理的信息化、现代化,及时提供必要的信息统计。因为整个系统采用Mysql+Springboot组合,这几个软件都是免费开源的,系统开发所需的费用是比较低的,由于系统并不复杂,其运行与培训费用也不会占用很多资金,可以预见系统完成后可以带来较大的经济效益。

3.1.2技术可行性

本系统采用windows 7作为操作平台。数据库开发平台选用Mysql,该数据库管理系统在windows7和windows 8/10上都能运行,并提供数据库之间的数据复制功能,可代替现有系统单据数据的手工传递工作

3.1.3操作可行性

本系统使用的是现流行的开发语言,即Springboot技术。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统。系统布局较简单,功能操作不复杂,完全符合现代市场需求。

3.2需求分析

针对现存的问题和需要,通过功能需求的分析,特建立了数字化、信息化的学生选课系统。

本系统主要包含了系统用户管理、学生管理、教师管理、选课管理、成绩管理、系统管理等多个功能模块。下面分别简单阐述一下这几个功能模块需求。

表3-1功能需求表

编号

功能名称

功能描述

用户登录

保证用户通过身份验证进入系统进行操作

数据备份

超级管理员对系统的数据进行备份

批量删除

超级管理员选择系统某个数据表进行数据清空

修改个人信息

用户可以根据自己当前的情况修改个人的信息

后台登录

仅管理员能够登录后台

添加选课记录

学生添加选课记录

编辑选课记录

学生修改选课记录信息

删除选课记录

学生删除选课记录

选课审核

教师给学生添加的选课进行审核

成绩审核

教师给学生的成绩进行审核

添加选课成绩信息

教师添加选课成绩信息

编辑选课成绩信息

教师修改选课成绩信息

删除选课成绩信息

教师删除选课成绩信息

3.3业务流程分析

经过对系统功能的分析,调查,研究,总结出学生选课系统主要实现的是对选课管理、成绩管理、用户信息等管理功能。这样,可以对该系统绘制业务流程图。

如下为业务流程图图例。

 

3-1业务流程图图例

系统的业务流程如下图所示。

 

图3-2系统业务流程图

3.4数据流程分析

根据上文所述的业务流程特点,首先对各个方面总的数据处理环节和外部实体进行了描述, 根据自顶向下原则,逐层分解功能,这个过程产生DFD图。

以下是本文当中使用的数据流图图例,见下图所示。

 

 

图3-3系统数据流图(0层)

零层数据流程是流程中最抽象的一层,它包括了与登录管理、用户功能管理和检索维护管理等功能模块,在登录模块使用到的数据存储有用户账户信息文档、用户信息文档,用户功能管理模块需要的存储是学生动态信息文档、选课信息文档、成绩信息文档,检索维护是通过以上这些文档信息通过关键词进行搜索。

系统的0层数据流图如下图所示。

 

 

图3-4系统数据流图(0层)

一层数据流程图是对零层数据流程图的细化,将登录与细分为填制登录信息和完善信息,用户功能管理细分为用户基本功能管理和用户特色功能管理。

系统的1层数据流图如下图所示。

 

 

图3-5系统数据流图(1层)

二层数据流程是对一层数据流层图中填写登录信息、学生基本功能和教师功能的细化。即:填写登录信息细化为填制信息、后台审核,用户基本功能细化为学生资料修改、课程查询、在线选课、成绩查询,教师功能细化为教师资料修改、选课审核、选课成绩录入。

系统的2层数据流图如下图所示。

 

 

图3-6系统数据流图(2层)

第4章 系统设计

4.1开发环境

  1. 软件体系结构方案:采用B/S模式,B/S代表的是服务器端由web服务器发放,客户端由浏览器接收的系统,它的前台是JavaScript框架Vue.js,由浏览器解释。B/S结构可以由web服务器能够解释的脚本语言如Java。
  2. 操作系统方案:Windows 7(旗舰版)操作系统,该系统可以兼容需要的软件,并且具有良好的运行速度,界面良好。
  3. 后台数据库:选用Mysql。Mysql旨在通过数据库加密、更加安全的默认设置、加强的密码政策和细化许可控制、及加强的安全模型等特性,为企业数据提供最高级别的安全性。
  4. 开发语言:Java语言。

4.2系统结构设计

本系统使用的角色主要有系统管理员、学生、教师,本系统分为学生端、教师端和管理员端,首先学生用账号密码登录系统用户端,进行课程查询、在线选课、成绩查询,学生可以通过标题和类别进行信息的搜索。

管理员端主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用系统用户管理、学生管理、教师管理、选课管理、成绩管理、课程信息管理、系统管理等功能操作。同时管理员可以通过关键字搜索可以搜索相应的信息,打印各种详细信息,导出各类信息列表至excel中。

系统的功能结构图如下图所示。

 

 

图4-1系统功能结构图

4.3主要功能模块设计

  1. 用户管理模块

该模块包括普通用户管理和系统用户管理,系统用户主要是普通管理员,对用户信息进行管理,只有普通用户才可在该系统上进行相应的操作。用户对个人信息可进行修改;管理员可对自己的个人信息进行维护,同时可对用户的密码信息进行修改,也可删除系统中的用户

  1. 登录模块

根据用户输入的 Id 和密码到数据库中查找该用户,如果未能找到该用户则做出 提醒“用户名或密码错误”,如果找到该用户,则要判断用户的类别然后根据用户类别进入相应的页面。

  1. 课程信息管理模块

(1)课程添加:必须填写课程编号、课程名称、课程负责账号、课程负责人必须是唯一的, 提交后判断某一项是否为填写, 如果是则做出提醒, 填写符合规则后方可添加到数据库。

(2)课程规查询:可以根据课程编号等信息对课程进行查询,查询结果可能有多个。

(3)课程修改:除了课程编号外,其他信息均可以修改。

(4)课程删除:首先找到要删除的课程(一个或多个),然后删除即可。

  1. 课程成绩管理模块

教师选中某个选课,点击添加成绩,填写成绩数据,点击添加按钮,完成选课成绩操作,每次成绩录入,列表将生成新的成绩信息,供管理员管理。

  1. 选课模块

用户查询课程规划信息,选择课程规划进入该课程规划的详细页面,点击选课按钮,填写选课表单,添加选课记录。

  1. 选课管理模块

用户选课课程规划模块主要实现的是对课程规划的选课功能,同时可查看自己的选课记录,并对选课可进行取消选课操作。管理员登录系统后,可查看用户的选课信息,也可搜索选课信息,同时可对选课信息进行确认或删除的操作。

4.4界面设计

系统首页是整个系统功能的一个缩影,对首页的布局不仅仅关系到用户的使用性,还关系到其他页面的设计以及功能管理设计。所以使用Photoshop先对首页背景和页面布局进行设计。

登录页设计图,如下图所示。

 

 

图4-3登录页设计图

首页设计图,如下图所示。

 

图4-4首页设计图

4.5数据库设计

4.5.1数据库设计概述

为了实现系统的功能设计,就要有相应的数据库表设计。根据系统的功能设计要求为各个数据库表设计字段、数据类型、是否为空等的相关信息。在实际调研和需求分析的基础上,对该系统设计数据库。再有系统的需求分析可以看出,本系统有两个角色:普通用户和管理员,他们分别在系统的运行和使用中起着不同的作用。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。数据库中表的设计主要考虑两个方面:一是整个管理系统的所有表中的数据要共享性高、冗余度小、占用最可能小的存储空间。

4.5.2概念设计

概念设计是整个数据库设计的关键,在概念设计阶段,由需求分析得到了E-R模型。E-R图是识别功能模型与数据模型间关联关系的,在主题数据库的抽取和规范化的过程中,采用的是简化的E-R图表示方法,从而避免过繁过细的E-R图表示影响规划的直观和可用性。是对现实世界的抽象和概括,是数据库设计人员进行数据可设计的有力工具,能够方便直接地表达应用中的各种语义知识,令一方面它简单、清晰、易于用户理解。

系统总体ER图如下图所示。

 

图4-10系统总体ER图

4.5.3表设计

概念模型是独立于任何一种数据模型的信息结构。将概念模型转换成逻辑模型,转换的一般原则如下:

(1)一个实体性转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。

(2)一个1:1联系可以转化为一个独立的关系模式,也可以与任意一端对应的关系模式合并。

(3)一个1:n联系可以转化为一个独立的关系模式,也可以与n端对应的关系模式合并。

(4)一个m:n联系转化为一个关系模式。

本系统设计如下多个表,包括学生表、教师表、选课表、成绩表、课程信息表等。

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

chengjibianhao

150

255

3

kechengbianhao

150

255

4

kechengmingcheng

150

255

5

tianxiezhanghao

150

255

6

tianxielaoshi

150

255

7

chengji

150

255

8

xuehao

150

255

9

xueshengxingming

150

255

10

beizhu

1073741823

255

11

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

gonghao

150

255

3

mima

150

255

4

xingming

150

255

5

xingbie

150

255

6

shenfenzheng

150

255

7

dianhua

150

255

8

zhicheng

150

255

9

zhujiaokecheng

150

255

10

jiguan

150

255

11

zhaopian

150

255

12

beizhu

1073741823

255

13

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

jingsaibianhao

150

255

3

jingsaimingcheng

150

255

4

jingsaineirong

1073741823

255

5

jingsaizhuangtai

150

255

6

fuzezhanghao

150

255

7

xiangmufuzeren

150

255

8

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

jihuabianhao

150

255

3

xuehao

150

255

4

xueshengxingming

150

255

5

jihuamingcheng

150

255

6

jihuaneirong

1073741823

255

7

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

kechengbianhao

150

255

3

kechengmingcheng

150

255

4

kechengfuzezhanghao

150

255

5

kechengfuzeren

150

255

6

keshiguihua

150

255

7

kechengkaishedeyiyi

1073741823

255

8

kechengmubiao

1073741823

255

9

kechengneironggaishu

1073741823

255

10

kechengjihua

1073741823

255

11

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

shenbaobianhao

150

255

3

xiangmubianhao

150

255

4

fuzezhanghao

150

255

5

shenbaozhuangtai

150

255

6

shenbaozhanghao

150

255

7

shenbaoren

150

255

8

xiangmuchengji

150

255

9

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

shenqingbianhao

150

255

3

kechengbianhao

150

255

4

kechengmingcheng

150

255

5

kechengfuzezhanghao

150

255

6

kechengfuzeren

150

255

7

shenqingleixing

150

255

8

shenqingzhanghao

150

255

9

shenqingxuesheng

150

255

10

beizhu

1073741823

255

11

issh

30

255

12

shhf

1073741823

255

13

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

shixibianhao

150

255

3

shiximingcheng

150

255

4

shixineirong

1073741823

255

5

xuehao

150

255

6

xueshengxingming

150

255

7

shixichengji

150

255

8

kaohejieguo

150

255

9

issh

30

255

10

shhf

1073741823

255

11

addtime

DateTime

8

19

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4

10

2

xuehao

150

255

3

mima

150

255

4

xingming

150

255

5

xingbie

150

255

6

shenfenzheng

150

255

7

dianhua

150

255

8

yuanxi

150

255

9

banji

150

255

10

jiguan

150

255

11

zhaopian

150

255

12

beizhu

1073741823

255

13

addtime

DateTime

8

19

第5章  系统实现

5.1登录模块的实现

学生选课系统的系统入口就是用户登录功能,在浏览器输系统地址跳转至系统前台首页,系统前台的登录窗口在首页左面,包括用户名、密码、权限、验证码,除了权限框使用下拉列表,其他使用文本框,验证码下方为登录和重置两个按钮,用户点击登录按钮,则进行登录验证。

登录流程图如下所示。

 

图5-1登录流程图

系统登录界面如下所示。

 

图5-2系统登录

用户登录的逻辑代码如下:

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

5.2学生子系统模块的实现

5.2.1课程信息模块的实现

学生点击某个课程点进入课程信息详细页,点击搜索按钮进入课程信息页,提交搜索信息,成功搜索。

课程信息流程图如下所示。

 

图5-3课程信息流程图

课程信息界面如图所示。

 

图5-4课程信息

课程管理界面如图所示。

 

图5-5课程管理

课程添加关键代码为:

@PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

5.2.2选课模块的实现

学生点击某个课程规划点进入课程规划详细页,点击选课按钮进入选课页,提交选课信息,成功选课后,教师管理学生的选课信息,审核选课信息。

学生选课流程图如下所示。

 

图5-6学生选课流程图

课程选课界面如图所示。

 

图5-7课程选课

选课管理界面如图所示。

 

图5-8选课管理

选课添加关键代码为:

@RequestMapping(value = {"/avg_group", "/avg"})

public Map<String, Object> avg(HttpServletRequest request) {

        Query count = service.avg(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

5.2.3成绩信息模块的实现

根据学生的选课对应所属的教师,该教师可对选择该门课程的学生录入课程成绩,学生查看个人课程成绩。

成绩录入流程图如下所示。

 

图5-9成绩录入流程图

成绩信息界面如图所示。

 

图5-10成绩信息

成绩管理界面如图所示。

 

图5-11成绩管理

成绩添加关键代码为:

 @RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

}

5.2.45.3管理员子系统模块的实现

5.3.1用户管理模块的实现

系统用户管理主要是对新用户的添加和旧用户的删除。新用户的添加主要是指添加用户名称并确定其密码;旧用户的删除也是从下拉菜单中找到对应的用户名称将其删除。不论是新用户添加还是旧用户的删除,这个权限只有管理员具有。

系统用户管理界面如下图所示。

 

图5-12系统用户管理

系统用户管理关键代码为:

  @RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

5.3.2密码修改模块的实现

密码修改是对当前登录用户的密码进行修改,在用户登录后右上方也能进行密码修改。

密码修改流程图如下所示。

 

图5-13密码修改流程图

5.3.3学院信息模块的实现

学院信息功能主要指对其学院名称、学院简介、学院地址、学院图片等一些基本信息的添加、删除和修改。

学院信息流程图如下所示。

 

图5-14学院信息流程图

学院信息添加如下图所示:

 

图5-15学院信息添加

学院信息管理如下图所示:

 

图5-16学院信息管理

学院信息添加关键代码为:

public class FindConfig {

    public static String PAGE = "page";

    public static String SIZE = "size";

    public static String LIKE = "like";

    public static String ORDER_BY = "orderby";

    public static String FIELD = "field";

    public static String GROUP_BY = "groupby";

    public static String MIN_ = "_min";

    public static String MAX_ = "_max";

}

5.3.4课程信息管理模块的实现

管理员发布新的课程信息,系统前台显示课程信息,课程信息添加功能主要指对其课程编号、课程名称、授课老师等一些基本信息的添加、删除和修改。课程信息查询能根据课程信息id、竞赛名称等多种条件对课程信息进行查询。

课程信息管理流程图如下所示。

 

图5-17课程信息管理流程图

课程信息添加如下图所示:

 

图5-18课程信息添加

课程信息管理如下图所示:

 

图5-19课程信息管理

课程信息管理关键代码为:

@SpringBootApplication

@EnableJpaRepositories

public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class,args);

    }

}

5.3.5选课管理模块的实现

学生选择课程添加课程选课记录,教师审核课程选课信息,教师所以学生的课程选课记录。

课程选课查管理流程图如下所示。

 

图5-20选课管理流程图

选课审核如下图所示。

 

图5-21选课审核

选课审核关键代码为:

@RequestMapping(value = {"/sum_group", "/sum"})

    public Map<String, Object> sum(HttpServletRequest request) {

        Query count = service.sum(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

第6章  系统测试

6.1软件测试

在设计系统的过程中,存在一些错误是不可避免的。For语句语法错误,运行的提示,并要求立即纠正,因此,容易发现和纠正错误等。但另一种类型的错误是程序执行时由于不正确的操作或对某些数据计算公式的逻辑错误导致错误的结果。这种错误的隐蔽性强,有时会出现,有时不出现,因此,这种误差动态屏幕耗时。

6.2功能测试

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项检测,检查产品是否达到用户要求的功能。下面列出的测试用例是基于需求分析阶段的用例描述而进行的设计。

下面将通过表格的形式介绍针对本系统每个功能模块所进行的功能测试。

1.登录模块功能测试,如下表所示。

表6-1登录测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

登录系统

用户打开登录界面

输入正确的用户名,密码为空

无法登录

提示密码不得为空,无法登录

正常

登录系统

用户打开登录界面

输入正确的用户名,输入错误密码

无法登录

提示密码不正确,无法登录

正常

登录系统

用户打开登录界面

输入正确的密码,用户名为空

无法登录

提示用户名不得为空,无法登录

正常

登录系统

用户打开登录界面

输入正确的密码,错误的用户名

无法登陆

提示用户名不正确,无法登录

正常

登录系统

用户打开登录界面

用户名及密码都为空

无法登录

提示用户名和密码不得为空,无法登录

正常

登录系统

用户打开登录界面

用户名及密码都输入错误

无法登录

提示用户名和密码正确,无法登录

正常

登录系统

用户打开登录界面

输入正确的用户名和密码

正常登录

进入主界面

正常

2.修改密码模块功能测试,如下表所示。

表6-2修改密码测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

修改密码

用户打开修改密码界面

输入正确初始密码和2次相同的新密码

密码修改成功

密码修改成功

正常

修改密码

用户打开修改密码界面

输入错误的原始密码

密码修改失败

密码修改失败

正常

修改密码

用户打开修改密码界面

输入正确初始密码和2次不相同的新密码

密码修改失败

密码修改失败

正常

3.课程管理功能测试,如下表所示。

表6-7课程管理测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

课程信息添加

用户已登录,打开课程添加界面

输入课程名称、课程负责账号、课程负责人、课时等信息

课程添加成功

课程添加成功,新课程成功显示

正常

课程信息添加

用户已登录,打开课程规加界面

用户未输入课程名称、课程负责账号、课程负责人、课时

课程添加失败

课程添加失败

正常

4.选课功能测试,如下表所示。

表6-8选课测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

选课

用户已登录,打开选课界面

输入申请类型、申请账号、申请学生等信息

选课成功

选课成功

正常

选课

用户已登录,打开选课界面

用户未输入申请类型、申请账号、申请学生

选课失败

选课失败

正常

6.3测试结果

通过对学生选课系统整个流程管理的测试,发现了许多无法实现的功能并及时得到改正和实现,为学生选课系统的发布奠定了基础。此系统中各模块的功能都基本实现,不过还存在着许多不足,在以后的学习中通过测试还需加强和完善。

第7章  总结

本文主要研究了学生选课系统的设计与实现。本次论文主要研究的内容主要包括:

(1)分析研究了本课题的开发背景和课题的研究意义。

(2)对此次毕业设计进行了详尽的需求分析,并根据实际需求,分析了其数据字典。

(3)概要设计了系统的功能模块,详细设计了系统所使用的数据库表,并研究了该系统的ER图。

(4)详细介绍了该平台要实现的功能,构建了此系统。

从技术上来说,前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。在摸索中前进。对Mysql数据库的使用,如何设计后台表结构,使得系统更加合理,健壮,是面临的又一个难题,通过查找相关资料,以及在充分的需求分析基础上,解决了以上问题。若条件允许,系统的功能模块能够更丰富,某些模块的功能也能更完善,用户之间权限的处理逻辑性也能更强。今后在改善客观条件的情况下,本系统还需要进一步进行研究开发。

致  谢

经历了几个月的毕业设计之旅,遭遇了无数难题与挑战,几经波折后,近乎要摧毁我当初选择这个题目的信心。好在我的导师一直坚持对我悉心支持,并对此套系统提出了诸多改善意见,解决了我所遇到的众多难题,学生选课系统也得以在这样的境况下圆满完成。老师给予了我正确的指导和极大的帮助,这不仅仅使我获得了足够多的开发经验,更使我在系统设计过程中少走了许多的弯路,巩固了以前所学的知识,提高了应用能力,这使我对以后的工作也信心满满。

敬业的工作态度都给予了我极大的鼓励与帮助。对于提出的问题和遇到的困难都给予细心的解答和真诚的帮助,再次表示衷心的感谢。我还要对学院及系里的各位领导、老师们表示谢意,在这次毕业论文期间给我们提供了良好的学习和生活环境,并给予软硬件的支持,使得我的系统设计工作及论文撰写工作更加顺畅、便利。最后我还要感谢所有为我的毕业设计提出指导意见的各位老师、同学。

参考文献

[1]刘志媛,王飞,张艺璇.基于协同过滤算法的学生选课偏好研究——以河北北方学院为例[J].河北北方学院学报(自然科学版),2021,37(11):57-64.

[2]陈钢,常笑,胡枫.基于隐语义模型的学生选课推荐算法[J].计算技术与自动化,2021,40(03):88-93.

[3]王兴波.云南省普通高校大学体育选项课学生选课问题调查研究[J].当代体育科技,2021,11(13):82-84.

[4]李沁颖,易豪.基于深度学习的学生画像选课系统研究[J].电脑知识与技术,2021,17(10):184-186.

[5]杨博森,严张凌.微服务架构下学生选课系统的设计与实现[J].信息与电脑(理论版),2020,32(20):84-86.

[6]王峥嵘,李勇,凌宏伟,石国涛,吴秋月.关于选课系统课程时间冲突的研究[J].现代信息科技,2020,4(16):183-186.

[7]郑少雄.基于JSP和SQL Server的学生选课管理系统[J].信息与电脑(理论版),2020,32(15):114-116.

[8]王雨歆,戎晓英,杨雨曦,程佳.校园互联网视域下学生选课筛选系统改进以及开发的可行性报告——以上海某高校为例[J].科教文汇(上旬刊),2020(06):13-14+18.

[9]王岩,孟亚坤,张斌,朱世敏,张重阳.面向CDIO的项目驱动Access数据库课程教改研究[J].软件,2020,41(05):75-77+142.

[10]杨荣.学生选课行为的分析与研究[J].当代教育实践与教学研究,2020(05):239-240+244.

[11]王峥嵘.高职院校选课信息系统的设计和实现[J].现代信息科技,2020,4(03):59-64.

[12]余涛.计算机软件开发中Java编程语言的应用研究[J].信息记录材料,2020,21(01):113-115.

[13]张湖森.基于Android学生选课系统设计与实现[J].科技创新与应用,2019(35):33-34.

[14]杨云海,章芬芬.基于.NET架构和C#语言实现的学生选课管理系统[J].现代信息科技,2019,3(20):8-11.

[15]方尚旭,刘庆国,乔晓午,申江涛.新高考模式下影响学生选课的关键因素探析[J].中小学心理健康教育,2019(26):65-67.

[16]蒋舟,杨健叶,张红伟.高校学生选课系统的设计与实现[J].电脑知识与技术,2019,15(12):60-61.

免费领取本源代码,请关注点赞+私信

相关文章:

  • 直播回顾|应用上容器的最佳实践技术沙龙
  • 【论文阅读】ART-SLAM: Accurate Real-Time 6DoF LiDAR SLAM
  • redis使用zset实现数据库多字段排序的一种方式
  • Elasticsearch ES数据迁移方法及注意事项
  • OPENSQL 2022.9.1
  • Redis集群研究和实践(基于redis 3.2.5)(一)
  • 初等数论总结
  • React(9)-组件引用传递(高级应用)
  • Flink在Window上的开发环境搭建
  • elasticsearch ES新增字段并赋初始值
  • DOM--预加载和懒加载
  • HCIA网络课程第七周作业
  • Nacos2.1.1 github下载zip太慢解决方法及资源分享
  • 集群外Prometheus 集群 k8s
  • 《Python编程:从入门到实战》学习笔记 第4章 操作列表
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Docker入门(二) - Dockerfile
  • ERLANG 网工修炼笔记 ---- UDP
  • jquery cookie
  • linux学习笔记
  • node和express搭建代理服务器(源码)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Sass 快速入门教程
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 入门到放弃node系列之Hello Word篇
  • 协程
  • 学习Vue.js的五个小例子
  • 关于Android全面屏虚拟导航栏的适配总结
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​520就是要宠粉,你的心头书我买单
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 数据结构
  • ()、[]、{}、(())、[[]]命令替换
  • (2.2w字)前端单元测试之Jest详解篇
  • (8)STL算法之替换
  • (C++)八皇后问题
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ros//EnvironmentVariables)ros环境变量
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)Knockout 创建自定义绑定
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转载)Google Chrome调试JS
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net 验证控件和javaScript的冲突问题
  • .net和php怎么连接,php和apache之间如何连接
  • .net连接oracle数据库
  • .net下简单快捷的数值高低位切换
  • @RestControllerAdvice异常统一处理类失效原因
  • [C#] 我的log4net使用手册