SSM高职院校学生选课系统
摘 要
本课题的研究对象是高职院校学生选课系统,该系统实现了课程分类、课程信息、在线选课等功能。本系统在设计上,考虑到系统内容以及系统的受众群体,在系统的美工方面采用了比较正规的设计,同时也提供了友好的页面以及简单的操作,系统采用SSM、Mysql,这样的组合不但利用上了在大学中所学到的知识,并且能够使系统真正的发布到互联网上,而不是一个单纯的演示系统。本系统经过测试,运行效果稳定,操作方便、快捷。在具体的应用过程中,有可能会出现一些问题,今后还会对本系统不断地进行完善、更新,使其功能更强大,应用更广泛。
关键词:Springboot框架;学生选课;SSM框架
Abstract
The research object of this project is the course selection system for vocational college students, which realizes functions such as course classification, course information, and online course selection. In the design of this system, considering the system content and the audience of the system, we have adopted a more formal design in the system art, and also provided friendly pages and simple operations. The system uses SSM and MySQL. This combination not only makes use of the knowledge learned in college, but also enables the system to be truly published on the Internet, rather than a simple demonstration system. This system has been tested and runs stably, with convenient and fast operation. In the specific application process, there may be some problems that may arise. In the future, this system will be continuously improved and updated to make its functions more powerful and its applications more extensive.
Key Words:Springboot framework; Student course selection; SSM Framework
目 录
2.1 MySQL数据库 3
2.2 B/S结构 3
2.3 SSM框架介绍 3
2.4 Vue.js主要功能 4
第3章 系统分析 4
3.1可行性分析 5
3.2需求分析 6
第1章 绪论
1.1研究背景与目的
最初在采用计算机自动选课以前,高职院校只能采用人工选课的方式。人工选课只能依靠教务处的工作人员手动的安排整个学校教育教学工作。这种手工人力的选课方式有非常多的缺点。首先最显著的缺点就是选课效率过于低下,其次课表排好以后很难修改,不便于调整。对于实际使用过程中出现的特殊情况如临时调课等状况不能很好的应对。因此,当学生人数越来越多,达到数万甚至更多,教师人数达到数百数千,要为这成百上千的学生和教师安排出科学合理的课程表,几乎是不可能的任务。就算能够完成,但也往往需要花费很大的人力物力,工作量巨大。并且即使排出课程表也不够灵活,很难进行调整。
随着高等教育的不断发展,不管是高职院校的在校学生人数还是教职工人数都在不断地增加,课程安排复杂度也不断提高。着这种情况下,人工选课的缺点与不足就显得更加突出,手动选课的方式已经无法在满足当前选课问题的需求。同时,随着计算机技术的快速发展,计算机技术在各个领域的应用也越累越广泛。人们很自然地就将计算机技术应用到这一领域中。显而易见,使用计算机技术进行选课,可以选课缩短选课时间、节省人力资源、并且有比较高的选课质量,可以迅速地得出满足各种约束要求的可行选课结果。
1.2国内外研究现状
国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,美国就建成了NSFNET(国家科学基金网),其课题的申报及课题的进展情况汇报都在网上进行。其网上学生在线选课系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作用,为世界各国培养出大批人才。所有这些都表明,基于Internet的校园网的应用已深入到校园内的各个方面。
我国不少高校都实行了学分制,它的核心是允许学生自由选课,即把学习的自主权交给学生。在这里,学生选课时的制约因素比较复杂,工作量也很大,而且往往需要在较短的时间内完成。运用计算机辅助选课,即能实时地对大量选课数据进行检验和统计,十分方便地输出选课结果,同时也避免了人工处理时容易产生的错误。
1.3论文结构
第一章是论文的绪论部分,主要介绍了课题的研究背景以及研究目的和意义。
第二章研究了高职院校学生选课系统的所采用的开发技术和开发工具。
第三章研究了高职院校学生选课系统的需求分析,根据系统的特点,分析系统采用的体系结构及开发方法,以及该系统的运行环境,并分析了业务流程,绘制了业务流程以及数据流程。
第四章是对系统的详细设计进行说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
最后对系统进行了认真的总结,以此对未来有一个新的展望。
第2章 主要技术和工具介绍
2.1 MySQL数据库
科技的进步,给日常带来许多便利:教室的投影器用到了虚拟成像技术,数码相机用到了光电检测技术,比如超市货物进出库的记录需要一个信息仓库。这个信息仓库就是数据库,而这次的智能物流仓库管理平台系统也需要这项技术的支持。
用MySQL这个软件,是因为它能接受多个使用者访问,而且里面存在Archive等。它会先把数据进行分类,然后分别保存在表里,这样的特别操作就会提高数据管理系统自身的速度,让数据库能被灵活运用。MySQL的代码是公开的,而且允许别人二次编译升级。这个特点能够降低使用者的成本,再搭配合适的软件后形成一个良好的网站系统。虽然它有缺点,但是综合各方面来说,它是使用者的主流运用的对象。
2.2 B/S结构
B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。
2.3 SSM框架介绍
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
1.1 Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。
1.2 SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
1.3 mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
2.4 Vue.js 主要功能
Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
第3章 系统分析
3.1可行性分析
分析用户需求和数据需求,得到一个方案,然后设定系统的开发方案,为每个功能模块设计出物理设计方案,开发本系统的是否可行?本文从技术上、操作上和经济上对本系统的开发进行可行性分析。
3.1.1经济可行性
高职院校学生选课系统属于一个工具型的系统,它可以节省工作人员大量数据收集、方便快捷,能够极大地提高工作效率,最大限度的降低管理员的工作量,使管理尽量简便,同时促进学生选课管理的信息化、现代化。因为整个系统采用Mysql+SSM组合,这几个软件都是免费开源的,系统开发所需的费用是比较低的,由于系统并不复杂,其运行与培训费用也不会占用很多资金,可以预见系统完成后可以带来较大的经济效益。
3.1.2技术可行性
本系统采用windows 7作为操作平台。数据库开发平台选用Mysql,该数据库管理系统在windows7和windows 8/10上都能运行,并提供数据库之间的数据复制功能,可代替现有系统单据数据的手工传递工作。
3.1.3操作可行性
本系统使用的是现流行的开发语言,即SSM技术。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统。系统布局较简单,功能操作不复杂,完全符合现代市场需求。
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开发环境
- 软件体系结构方案:采用B/S模式,B/S代表的是服务器端由web服务器发放,客户端由浏览器接收的系统,它的前台是JavaScript框架Vue.js,由浏览器解释。B/S结构可以由web服务器能够解释的脚本语言如Java。
- 操作系统方案:Windows 7(旗舰版)操作系统,该系统可以兼容需要的软件,并且具有良好的运行速度,界面良好。
- 后台数据库:选用Mysql。Mysql旨在通过数据库加密、更加安全的默认设置、加强的密码政策和细化许可控制、及加强的安全模型等特性,为企业数据提供最高级别的安全性。
- 开发语言:Java语言。
4.2系统结构设计
本系统使用的角色主要有系统管理员、学生,本系统分为学生端和管理员端,首先学生用账号密码登录系统用户端,进行课程查询、在线选课,学生可以通过标题和类别进行信息的搜索。
管理员端主要以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用学生管理、选课管理、课程管理、课程分类管理等功能操作。
图4-1系统功能结构图
4.3主要功能模块设计
该模块包括普通用户管理和系统用户管理,系统用户主要是普通管理员,对用户信息进行管理,只有普通用户才可在该系统上进行相应的操作。用户对个人信息可进行修改;管理员可对自己的个人信息进行维护,同时可对用户的密码信息进行修改,也可删除系统中的用户
- 登录模块
根据用户输入的Id和密码到数据库中查找该用户,如果未能找到该用户则做出 提醒“用户名或密码错误”,如果找到该用户,则要判断用户的类别然后根据用户类别进入相应的页面。
(1)课程添加:必须填写课程编号、课程名称、课程负责人必须是唯一的,提交后判断某一项是否为填写,如果是则做出提醒,填写符合规则后方可添加到数据库。
(2)课程规查询:可以根据课程编号等信息对课程进行查询,查询结果可能有多个。
(3)课程修改:除了课程编号外,其他信息均可以修改。
(4)课程删除:首先找到要删除的课程(一个或多个),然后删除即可。
- 选课模块
用户查询课程规划信息,选择课程规划进入该课程规划的详细页面,点击选课按钮,填写选课表单,添加选课记录。
用户选课课程规划模块主要实现的是对课程规划的选课功能,同时可查看自己的选课记录,并对选课可进行取消选课操作。管理员登录系统后,可查看用户的选课信息,也可搜索选课信息,同时可对选课信息进行确认或删除的操作。
4.4界面设计
系统首页是整个系统功能的一个缩影,对首页的布局不仅仅关系到用户的使用性,还关系到其他页面的设计以及功能管理设计。所以使用Photoshop先对首页背景和页面布局进行设计。
登录页设计图,如下图所示。
图4-2登录页设计图
首页设计图,如下图所示。
图4-3首页设计图
4.5数据库设计
4.5.1数据库设计概述
为了实现系统的功能设计,就要有相应的数据库表设计。根据系统的功能设计要求为各个数据库表设计字段、数据类型、是否为空等的相关信息。在实际调研和需求分析的基础上,对该系统设计数据库。再有系统的需求分析可以看出,本系统有两个角色:学生和管理员,他们分别在系统的运行和使用中起着不同的作用。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。数据库中表的设计主要考虑两个方面:一是整个管理系统的所有表中的数据要共享性高、冗余度小、占用最可能小的存储空间。
4.5.2概念设计
概念设计是整个数据库设计的关键,在概念设计阶段,由需求分析得到了E-R模型。E-R图是识别功能模型与数据模型间关联关系的,在主题数据库的抽取和规范化的过程中,采用的是简化的E-R图表示方法,从而避免过繁过细的E-R图表示影响规划的直观和可用性。是对现实世界的抽象和概括,是数据库设计人员进行数据可设计的有力工具,能够方便直接地表达应用中的各种语义知识,令一方面它简单、清晰、易于用户理解。
图4-4系统总体ER图
4.5.3表设计
概念模型是独立于任何一种数据模型的信息结构。将概念模型转换成逻辑模型,转换的一般原则如下:
(1)一个实体性转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
(2)一个1:1联系可以转化为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
(3)一个1:n联系可以转化为一个独立的关系模式,也可以与n端对应的关系模式合并。
(4)一个m:n联系转化为一个关系模式。
本系统设计如下多个表,包括学生表、教师表、选课表、成绩表、课堂签到表、作业信息表、作业提交表、排课信息表、课程信息表等。
表student_users (学生用户)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | student_users_id | int | 10 | 0 | N | Y | 学生用户ID | |
| 2 | student_id | varchar | 64 | 0 | N | N | 学生学号 | |
| 3 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
| 4 | student_gender | varchar | 64 | 0 | Y | N | 学生性别 | |
| 5 | user_age | varchar | 64 | 0 | Y | N | 学生年龄 | |
| 6 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
| 8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表course_classification (课程分类)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | course_classification_id | int | 10 | 0 | N | Y | 课程分类ID | |
| 2 | course_classification | varchar | 64 | 0 | Y | N | 课程分类 | |
| 3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表course_information (课程信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | course_information_id | int | 10 | 0 | N | Y | 课程信息ID | |
| 2 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
| 3 | course_classification | varchar | 64 | 0 | Y | N | 课程分类 | |
| 4 | course_start_date | date | 10 | 0 | Y | N | 开课日期 | |
| 5 | course_duration | varchar | 64 | 0 | Y | N | 课程时间 | |
| 6 | course_location | varchar | 64 | 0 | Y | N | 课程地点 | |
| 7 | course_selection | text | 65535 | 0 | Y | N | 选课须知 | |
| 8 | course_cover | varchar | 255 | 0 | Y | N | 课程封面 | |
| 9 | course_introduction | longtext | 2147483647 | 0 | Y | N | 课程简介 | |
| 10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表course_selection_information (选课信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | course_selection_information_id | int | 10 | 0 | N | Y | 选课信息ID | |
| 2 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
| 3 | course_classification | varchar | 64 | 0 | Y | N | 课程分类 | |
| 4 | course_start_date | date | 10 | 0 | Y | N | 开课日期 | |
| 5 | course_duration | varchar | 64 | 0 | Y | N | 课程时间 | |
| 6 | course_location | varchar | 64 | 0 | Y | N | 课程地点 | |
| 7 | student_users | int | 10 | 0 | Y | N | 0 | 学生用户 |
| 8 | student_id | varchar | 64 | 0 | Y | N | 学生学号 | |
| 9 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
| 10 | course_selection_time | datetime | 19 | 0 | Y | N | 选课时间 | |
| 11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表notice (公告)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
| 2 | title | varchar | 125 | 0 | N | N | 标题: | |
| 3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
| 4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
第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;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
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, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
5.2系统模块的实现
5.2.1课程信息模块的实现
学生点击某个课程点进入课程信息详细页,点击搜索按钮进入课程信息页,提交搜索信息,成功搜索。管理员可以对课程信息进行增删改查,比如新增某个课程,输入课程名称、课程分类、开课日期、课程时间等进行提交。
课程信息流程图如下所示。

图5-3课程信息流程图
课程信息界面如图所示。
图5-4课程信息
课程添加界面如图所示。
图5-5课程添加
课程添加关键代码为:
<mapper namespace="com.project.demo.dao.base.BaseMapper">
<select id="selectBaseList" resultType="java.util.LinkedHashMap">
${select}
</select>
<select id="selectBaseCount" resultType="Integer">
${count}
</select>
<select id="selectBaseOne" resultType="Object">
${select}
</select>
<update id="updateBaseSql">
${sql}
</update>
<delete id="deleteBaseSql">
${sql}
</delete>
</mapper>
5.2.2选课模块的实现
学生点击某个课程规划点进入课程规划详细页,点击选课按钮进入选课页,提交选课信息,后台管理员对学生的选课信息进行审核管理。
学生选课流程图如下所示。
图5-6学生选课流程图
学生选课界面如图所示。
图5-7学生选课
选课管理界面如图所示。
图5-8选课管理
选课管理关键代码为:
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
5.2.3密码修改模块的实现
密码修改是对当前登录用户的密码进行修改,在用户登录后右上方也能进行密码修改。
密码修改流程图如下所示。

图5-9密码修改流程图
密码修改界面如图示。
图5-10密码修改
第6章 系统测试
6.1软件测试
在设计系统的过程中,存在一些错误是不可避免的。For语句语法错误,运行的提示,并要求立即纠正,因此,容易发现和纠正错误等。但另一种类型的错误是程序执行时由于不正确的操作或对某些数据计算公式的逻辑错误导致错误的结果。这种错误的隐蔽性强,有时会出现,有时不出现,因此,这种误差动态屏幕耗时。
6.2功能测试
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项检测,检查产品是否达到用户要求的功能。下面列出的测试用例是基于需求分析阶段的用例描述而进行的设计。
下面将通过表格的形式介绍针对本系统每个功能模块所进行的功能测试。
1.登录模块功能测试,如下表所示。
表6-1登录测试
| 测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
| 登录系统 | 用户打开登录界面 | 输入正确的用户名,密码为空 | 无法登录 | 提示密码不得为空,无法登录 | 正常 |
|
| 登录系统 | 用户打开登录界面 | 输入正确的用户名,输入错误密码 | 无法登录 | 提示密码不正确,无法登录 | 正常 |
|
| 登录系统 | 用户打开登录界面 | 输入正确的密码,用户名为空 | 无法登录 | 提示用户名不得为空,无法登录 | 正常 |
|
| 登录系统 | 用户打开登录界面 | 输入正确的密码,错误的用户名 | 无法登陆 | 提示用户名不正确,无法登录 | 正常 |
|
| 登录系统 | 用户打开登录界面 | 用户名及密码都为空 | 无法登录 | 提示用户名和密码不得为空,无法登录 | 正常 |
|
| 登录系统 | 用户打开登录界面 | 用户名及密码都输入错误 | 无法登录 | 提示用户名和密码正确,无法登录 | 正常 |
|
| 登录系统 | 用户打开登录界面 | 输入正确的用户名和密码 | 正常登录 | 进入主界面 | 正常 |
2.修改密码模块功能测试,如下表所示。
表6-2修改密码测试
| 测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
| 修改密码 | 用户打开修改密码界面 | 输入正确初始密码和2次相同的新密码 | 密码修改成功 | 密码修改成功 | 正常 |
|
| 修改密码 | 用户打开修改密码界面 | 输入错误的原始密码 | 密码修改失败 | 密码修改失败 | 正常 |
|
| 修改密码 | 用户打开修改密码界面 | 输入正确初始密码和2次不相同的新密码 | 密码修改失败 | 密码修改失败 | 正常 |
3.课程管理功能测试,如下表所示。
表6-7课程管理测试
| 测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
| 课程信息添加 | 用户已登录,打开课程添加界面 | 输入课程名称、课程负责账号、课程负责人、课时等信息 | 课程添加成功 | 课程添加成功,新课程成功显示 | 正常 |
|
| 课程信息添加 | 用户已登录,打开课程规加界面 | 用户未输入课程名称、课程负责账号、课程负责人、课时 | 课程添加失败 | 课程添加失败 | 正常 |
4.选课功能测试,如下表所示。
表6-8选课测试
| 测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
| 选课 | 用户已登录,打开选课界面 | 输入申请类型、申请账号、申请学生等信息 | 选课成功 | 选课成功 | 正常 |
|
| 选课 | 用户已登录,打开选课界面 | 用户未输入申请类型、申请账号、申请学生 | 选课失败 | 选课失败 | 正常 |
6.3测试结果
通过对高职院校学生选课系统整个流程管理的测试,发现了许多无法实现的功能并及时得到改正和实现,为高职院校学生选课系统的发布奠定了基础。此系统中各模块的功能都基本实现,不过还存在着许多不足,在以后的学习中通过测试还需加强和完善。
第7章 总结
本次设计中,我还学会了很多,例如良好的编程思想和完善的规划思想。在着手编程之前需要罗列出程序框架的大概,脑海中构建出程序的主题框架。做好这一步我们才能胸有成竹的经行开发项目。当设计框架了熟于心之后,需要思考本次编程所需的主要知识点和技术点,并充分学习。如此一来项目的开发才能循序渐进、如丝般顺滑,长久以往就能养成良好的开发习惯。一个程序好不好还要看出的bug多不多,如果在项目完成前做好bug的查验与预防可能发生的事故才能保证程序的稳定长久性运行。
在本次项目中我也暴露了诸多问题。对于Java的编程知识有所欠缺,环境配置和算法上出现诸多问题,时常导致项目运行出错,或者目标的实现有问题。或者实现想法时算法未优化,使得代码冗长,程序运行不顺畅。
致 谢
至此论文结束,感谢您的阅读。在此我要感谢我的导师,虽然我在实习期间很忙,论文撰写总是停停改改,但是导师依然十分负责,时不时的询问我的任务进展情况,跟进我的论文进度。虽然我在实习期间很忙,以至于很晚才开始进行论文撰写和编写程序的工作,但是在指导老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识,和经验,这些知识和经验令我受益匪浅。也从导师身上看到了自己的不足,不论是在即使层面上还是在对待工作的态度上,倒数如同明镜一般照出了我的缺点我的不足。此外,我还要感谢在我实习期间在论文和程序上帮助过我的同学和社会人士,此前我对于框架及JQuery和BootSatrp方面的一些知识还不了解,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测。没有他们我是不能顺利完成本次毕业设计的。至此,我的毕业设计就花上了一个圆满的句号了!
参考文献:
[1]姜晓琴.网上选课系统的数据库设计与实现[J].数码世界,2021(01):165.
[2]李蕾.基于WampServer的学生网上选课系统设计与实现[J].计算机时代,2021(07):93-97.
[3]王慧敏.高校网上选课系统的设计与实现[J].内蒙古科技与经济,2021(19):56-57.
[4]陆磊. 二工大学分制网上选课系统设计与实现[D].大连理工大学,2021.
[5]李江.基于WEB的高校网上选课系统的总体设计与实现[J].山东工业技术,2021(03):236.
[6]王彤. 浅谈高校网上选课系统的设计与实现[C]//《同行》2015年9月(上).,2021:146.
[7]赵坤灿,周绍景,王俊英.基于Web Service开发技术的网上选课系统的设计与实现[J].昆明冶金高等专科学校学报,2021,31(03):40-50.
[8]马乾乾. 高校网上选课系统的设计与实现[D].河北科技大学,2021.
[9]李金霞. 琼州学院网上选课系统的设计与实现[D].大连海事大学,2021.
[10]罗志明. 高校公选课网上选课系统的设计与实现[D].华南理工大学,2020.
[11]常庆英. 天津商业大学宝德学院网上选课系统的设计与实现[D].电子科技大学,2020.
[12]韩诗琳. 学生网上选课系统的设计与实现[D].吉林大学,2020.
[13]李佳虹. 四川职业技术学院体育教学网上选课系统的设计与实现[D].电子科技大学,2020.
[14]赵丽娜,周吉顺.基于WEB的高校网上选课系统的设计与实现[J].电脑知识与技术,2020,7(18):4270-4271.
[15]王昌刚.高校网上选课系统的设计与实现[J].电脑知识与技术,2020,5(36):10148-10150.
[16]王昌刚.高校网上选课系统的设计与实现[J].办公自动化,2020(24):55-57+60.
[17]任云晖.网上选课系统的设计与实现[J].电脑学习,2020(05):63-65.
请关注点赞+私信博主,免费领取项目源码
3万+

被折叠的 条评论
为什么被折叠?



