一、概述
1.背景
随着信息技术的快速发展和互联网应用的普及,现代社会对高等教育的需求不断提高,高校教育管理逐渐走向数字化和智能化。传统的高校课程管理方式主要依赖于人工操作,处理海量信息的效率低下,容易出现错误,且难以满足高校教学和管理的实际需求。因此,设计并实现一个高校课程管理系统的网页成为了提高高校课程管理效率和质量的迫切需求。
高校课程管理涉及课程安排、教师分配、学生选课、成绩录入等多个环节,这些环节之间相互关联,共同影响着教学质量和学生满意度。为了实现高校课程管理的现代化、智能化,需要构建一个集成化、一体化的课程管理平台,实现教学资源的优化配置和高效利用。通过研究和实现这一课程管理系统网页,可以为高校提供一个便捷、高效的课程管理工具,有助于提高教育质量、提升学生满意度,推动高校教育管理的现代化进程。
2.研究目的与意义
(1)提高课程管理效率:
传统的高校课程管理方式依赖于人工操作,效率低下且容易出错。通过实现一个高校课程管理系统网页,可以实现课程安排、教师分配、学生选课等环节的自动化与智能化,显著提高课程管理的效率。
(2)优化教学资源配置:
高校课程管理系统可以帮助教务管理人员更加合理地分配教师资源,合理规划课程时间与教室资源,实现教学资源的优化配置与高效利用。
(3)提高教育质量:
通过构建一个集成化、一体化的课程管理平台,教务管理人员可以更加精确地掌握教学资源状况,及时调整教学策略,从而提高教育质量。
(4)提升学生满意度:
高校课程管理系统提供了一个直观、友好的用户界面,方便学生进行选课、查询课程信息等操作,提高学生使用体验,进而提升学生满意度。
(5)推动教育管理现代化:
通过实现高校课程管理系统网页,有助于推动高校教育管理从传统的人工管理向数字化、智能化转变,实现教育管理的现代化。
综上所述,设计与实现一个高校课程管理系统的系统具有重要的实践意义,有助于提高高校课程管理效率与质量,推动高校教育管理的现代化进程。
3.研究内容
调查研究:通过互联网、图书馆等途径查阅、搜集与课题相关的参考资料。
需求分析:先对相关的参考资料进行分类整理,提前设定系统相关需求和功能,并研究所需要用到的开发工具、开发技术和相应的数据库等。
概要设计:规划功能模块、流程、数据库结构以及表、字段之间的关联。
系统实施:采用文字、截图的方式对用户进行操作指导。
系统测试:阐述测试的优点和意义,介绍相关测试的操作步骤,并分析需求与测试结果的一致
二、相关技术
SSM、JSP、MySQL、B/S架构、Java技术
三、系统功能需求分析
1.学生用例图
2.管理员用例图
3.教师用例图
四、系统概要设计
1.系统总体结构图
2.流程设计图
(1)登录流程图
(2)添加新用户流程图
3.数据库设计E-R图
4.实体图
(1)教师实体图
(2)学生实体图
(3)撤销记录实体图
(4)选课记录实体图
(5)课程信息实体图
(6)公告实体图
(7) 收藏实体图
(8)管理员实体图
5.数据库表结构设计
(1)教师信息表
列名 | 数据类型 | 长度 | 主键 | |
id | bigint | 20 | Y | |
addtime | timestamp | 50 | ||
jiaoshigonghao | varchar | 200 | ||
mima | varchar | 200 | ||
jiaoshixingming | varchar | 200 | ||
xingbie | varchar | 200 | ||
nianling | varchar | 200 | ||
youxiang | varchar | 200 | ||
shoujihao | varchar | 200 | ||
Shenfenzheng | varchar | 200 | ||
Touxiang | longtext | 500 |
(2)学生信息表
列名 | 数据类型 | 长度 | 主键 |
id | bigint | 20 | Y |
addtime | timestamp | 50 | |
xuehao | varchar | 200 | |
mima | varchar | 200 | |
xingming | varchar | 200 | |
xingbie | varchar | 200 | |
touxiang | varchar | 200 | |
shouji | varchar | 200 | |
banji | varchar | 200 |
(3)撤销记录信息表
列名 | 数据类型 | 长度 | 主键 | |
id | bigint | 20 | Y | |
addtime | timestamp | 50 | ||
kechengmingcheng | varchar | 200 | ||
kechengtupian | varchar | 200 | ||
xuankeshijian | varchar | 200 | ||
tuikeshijian | datetime | 8 | ||
jiaoshigonghao | varchar | 200 | ||
tuikeyuanyin | longtext | 50 | ||
xuehao | varchar | 200 | ||
banji | varchar | 200 | ||
crossuserid | bigint | 20 | ||
crossrefid | bigint | 20 | ||
sfsh | varchar | 200 | ||
shhf | longtext | 500 |
(4)选课记录信息表
列名 | 数据类型 | 长度 | 主键 |
id | bigint | 20 | Y |
Addtime | timestamp | 50 | |
kechengmingcheng | varchar | 200 | |
kechengtupian | varchar | 200 | |
xuankeshijian | varchar | 200 | |
tuikeshijian | datetime | 8 | |
jiaoshigonghao | varchar | 200 | |
jiaoshixingming | varchar | 200 | |
xuankeshijian | datetime | 8 | |
xuankebeizhu | varchar | 200 | |
xueshengxingming | varchar | 200 | |
xuehao | varchar | 200 | |
banji | varchar | 200 | |
crossuserid | bigint | 20 | |
crossrefid | bigint | 20 | |
sfsh | varchar | 200 | |
shhf | longtext | 500 |
(5)课程信息表
列名 | 数据类型 | 长度 | 主键 | |
id | bigint | 20 | Y | |
addtime | timestamp | 50 | ||
kechengmingcheng | varchar | 200 | ||
kemumingcheng | varchar | 200 | ||
kechengtupian | varchar | 200 | ||
shangkeshijian | datetime | 8 | ||
shangkedidian | varchar | 200 | ||
kechengjieshao | longtext | 500 | ||
jiaoshigonghao | varchar | 200 | ||
jiaoshixingming | varchar | 200 |
(6)公告信息表
列名 | 数据类型 | 长度 | 主键 |
id | Bigint | 20 | Y |
addtime | timestamp | 50 | |
title | varchar | 200 | |
introduction | longtext | 500 | |
picture | varchar | 200 | |
content | longtext | 500 |
(7)收藏信息表
列名 | 数据类型 | 长度 | 主键 |
id | Bigint | 20 | Y |
addtime | timestamp | 50 | |
userid | Bigint | 50 | |
refid | Bigint | 50 | |
tablename | varchar | 200 | |
name | varchar | 200 | |
picture | varchar | 200 | |
type | varchar | 200 | |
inteltype | varchar | 200 |
(8)管理员信息表
列名 | 数据类型 | 长度 | 主键 |
id | bigint | 20 | Y |
yonghuming | varchar | 200 | |
mima | varchar | 200 | |
addtime | timestamp | 50 |
五、系统功能的实现与相关代码
5.1登录
在管理员有意对系统进行管理和操作之前,他们必须先访问登录界面,在该界面上填写正确的账号和密码信息。接着,从可用的角色列表中选择“管理员”身份,以确保具备相应的权限。在核实所输入信息无误后,管理员需点击登录按钮来进入系统。一旦成功登录,管理员便可以访问系统内的各种功能模块,并进行相应的管理操作。
关键代码:
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
XueshengEntity u = xueshengService.selectOne(new EntityWrapper<XueshengEntity>().eq("xuehao", username));
if(u==null || !u.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(u.getId(), username,"xuesheng", "学生" );
return R.ok().put("token", token);
5.2学生管理
当管理员需要对学生信息进行管理时,首先要进入学生信息管理界面。在这个界面上,有各种按钮可以实现不同的功能。若管理员想要添加多个不同的学生信息,只需点击“添加”按钮并在相应的输入框中输入有效的信息。在添加过程中,需要确保所输入的学生信息与数据库中现有的记录不发生冲突。
若管理员希望将学生信息从数据库中删除,可以通过点击“删除”按钮来实现。在执行删除操作时,需要检查待删除的记录是否受到数据库约束的影响。如果存在约束,将无法直接删除该记录。
/**
* 学生
*
* @author
* @email
* @date 2023-03-28 15:20:47
*/
public interface XueshengService extends IService<XueshengEntity> {
PageUtils queryPage(Map<String, Object> params);
List<XueshengVO> selectListVO(Wrapper<XueshengEntity> wrapper);
XueshengVO selectVO(@Param("ew") Wrapper<XueshengEntity> wrapper);
List<XueshengView> selectListView(Wrapper<XueshengEntity> wrapper);
XueshengView selectView(@Param("ew") Wrapper<XueshengEntity> wrapper);
PageUtils queryPage(Map<String, Object> params,Wrapper<XueshengEntity> wrapper);
5.3课程管理信息
当管理员输入正确的用户名和密码后,可以登录后端管理系统查看和管理相关信息。系统中的数据显示通常以表单的形式进行。如果数据量很大,则应使用后端逻辑接口进行分页,以避免前端显示时出现过多。由于后端逻辑接口使用数据库SQL语句从数据库中提取数据,因此该数据信息可以显示在前端。在提取过程中,后端通过对象R将数据从数据库传输到前端接口。
在后台管理界面中,管理员可以搜索课程相关信息。当输入课程名称进行搜索时,后端会对照数据库记录检查输入的课程名称是否与已有信息匹配。若存在匹配的课程信息,则将结果传递到前端界面以供显示。如果搜索结果为空,系统应向管理员提供相应提示。此外,管理员还可以通过选择课程分类和输入必要的课程信息来添加新课程,从而实现课程信息的更新和上传。
/**
* 课程信息
*
* @author
* @email
* @date 2023-03-30 15:20:47
*/
public interface KechengxinxiService extends IService<KechengxinxiEntity> {
PageUtils queryPage(Map<String, Object> params);
List<KechengxinxiVO> selectListVO(Wrapper<KechengxinxiEntity> wrapper);
KechengxinxiVO selectVO(@Param("ew") Wrapper<KechengxinxiEntity> wrapper);
List<KechengxinxiView> selectListView(Wrapper<KechengxinxiEntity> wrapper);
KechengxinxiView selectView(@Param("ew") Wrapper<KechengxinxiEntity> wrapper);
PageUtils queryPage(Map<String, Object> params,Wrapper<KechengxinxiEntity> wrapper);
5.4选课记录管理
在管理选课记录的界面上,我们会使用Bootstrap框架来确保界面风格的一致性和美观性。为了让用户能够添加选课记录,我们通过input标签创建一个输入框,使用户能够填写相关信息。这些信息将被存储在选课记录实体中。通过input标签,用户输入的数据会被传递给选课记录实体并予以保存。当用户点击“提交”按钮后,数据将通过form表单指定的通道发送给后台逻辑处理程序进行处理。此外,我们还会在前端页面上设置检测机制,以验证用户输入的数据的准确性。若发现用户输入的数据为空或不符合规范,我们将使用Layer弹出层组件向用户发送提醒。
代码如下:
/**
* 选课记录
*
* @author
* @email
* @date 2023-04-14 15:20:47
*/
public interface XuankejiluService extends IService<XuankejiluEntity> {
PageUtils queryPage(Map<String, Object> params);
List<XuankejiluVO> selectListVO(Wrapper<XuankejiluEntity> wrapper);
XuankejiluVO selectVO(@Param("ew") Wrapper<XuankejiluEntity> wrapper);
List<XuankejiluView> selectListView(Wrapper<XuankejiluEntity> wrapper);
XuankejiluView selectView(@Param("ew") Wrapper<XuankejiluEntity> wrapper);
PageUtils queryPage(Map<String, Object> params,Wrapper<XuankejiluEntity> wrapper);
5.5撤销记录管理
在用户界面中,我们需要将样式与script标签结合使用以实现页面的功能调用。展示用户信息时,我们依赖form标签来展示用户数据。同时,为了确保表单在界面上的正确呈现,我们需要在form标签上应用相应的CSS样式。
当需要添加按钮时,我们应使用button标签。在添加按钮时,要为其设置点击事件,并为其指定相应的操作,以便在前端页面上实现撤销记录数据的处理。撤销记录的详细信息页面应当设置为一个详细信息展示页面,并通过CSS样式来呈现用户信息。此外,后端将从数据库中获取相关记录,并将这些信息展示在前端页面上。
当管理员需要查找撤销记录信息时,他们需要在业务逻辑模块中输入相应的撤销记录账号。接着,系统将根据相应的SQL语句进行查询,并将查询结果传递到前端页面以供用户查看和操作。
/**
* 撤销记录
*
* @author
* @email
* @date 2023-04-19 15:20:47
*/
public interface ChexiaojiluService extends IService<ChexiaojiluEntity> {
PageUtils queryPage(Map<String, Object> params);
List<ChexiaojiluVO> selectListVO(Wrapper<ChexiaojiluEntity> wrapper);
ChexiaojiluVO selectVO(@Param("ew") Wrapper<ChexiaojiluEntity> wrapper);
List<ChexiaojiluView> selectListView(Wrapper<ChexiaojiluEntity> wrapper);
ChexiaojiluView selectView(@Param("ew") Wrapper<ChexiaojiluEntity> wrapper);
PageUtils queryPage(Map<String, Object> params,Wrapper<ChexiaojiluEntity> wrapper);
5.6课程信息展示
在用户登录系统之后的第一个操作是查看某个课程的详细信息。在此页面中,用户可通过填写表单来获取与所选课程相关的信息。随着操作的进行,系统会自动跳转至所选课程的专门页面。在整个过程中,相关步骤会自动发送到指定页面,而在该页面中,页面内容将自动生成一个新页面,以便更为清晰地展示课程相关信息。
/**
* 列表
*/
@RequestMapping("/lists")
public R list( KechengxinxiEntity kechengxinxi){
EntityWrapper<KechengxinxiEntity> ew = new EntityWrapper<KechengxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( kechengxinxi, "kechengxinxi"));
return R.ok().put("data", kechengxinxiService.selectListView(ew));
}
5.7选课详情信息
在选课详细信息页面上,用户可以查阅关于选课的各种详细信息。为了实现这一功能并确保选课详情能够顺利显示,首先需要客户端向服务器发送一个携带课程编号的请求。随后,服务器会将这个课程编号传送至数据库服务器以查询相关信息,之后将查询到的数据返回至客户端,以便用户查看和浏览
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
KechengxinxiEntity kechengxinxi = kechengxinxiService.selectById(id);
return R.ok().put("data", kechengxinxi);
}
5.8公告展示
公告:由用户分享一些自己对课程的见解,通过填写标题、类型、内容,进行发布帖子,与其他用户可以在下方发表评论,可依关键字搜索帖子。
代码如下:
/**
* 列表
*/
@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));
六、系统测试
1.测试过
(1)单元测试:
也被称为模块测试,是对软件程序代码进行测试的一种方式。它用于测试软件中最小的可测试单元,即代码的各个模块。单元测试可以分为手动测试和自动化测试。为了确保程序算法的正确性,静态检测可以通过规范化程序的逻辑和语法,以及确保代码符合标准来进行。这一步骤有助于检测尽可能多的错误。而动态检测则是通过将实际结果与预期结果进行比较,以检测潜在错误。这样可以确保程序在各种情况下的正确性[14]。
(2)集成测试:
集成测试是一种基于单元测试的测试方式,它用于测试软件系统的各个功能模块。在任何软件设计中,都存在一个集成阶段,因此集成测试在软件测试过程中是必不可少的。在集成测试过程中,测试是在模块之间进行的,因此可能会发现在单元测试阶段未能检测出的问题。同时,需要注意模块连接过程中是否存在数据丢失等问题。此外,即使单个模块的错误可能很小并且没有影响,但拼接可能会对系统产生巨大影响,因此在集成测试过程中需要特别关注这些问题。
(3)系统测试:
系统测试通常在集成测试之后进行,它将通过集成测试的部分视为整个系统的组成部分,并将所有相关的软硬件一起在模拟的实际环境中进行实际操作,以检测系统中是否存在错误。在系统测试过程中,需要将实际情况与预期的理想情况进行对比,找出差异并进行分析,以便调整系统中的错误。然而,在软件实际运行过程中,可能会出现许多意外错误,这些错误可能无法立即被测试人员解决。因此,为了达到更好的测试效果,系统测试应尽可能在实际运行环境中进行。
(4)验收测试:
在设计完成和发布前,验收测试是对系统进行的最后一层测试。系统测试需要深入了解用户和合作伙伴的需求,与他们密切合作,共同完成测试。根据他们的反馈和需求,需要对系统进行有针对性的修改,以便开发出更好地满足各方需求的软件。在这个过程中,需要不断地与用户和合作伙伴进行沟通和反馈,以便及时调整和改进系统。
2.测试用例
(1)登录
用例编号 | 目的 | 手段 | 预期输出结果 |
1 | 用户是否能够正常登录 | 用户输入正确的用户名和密码 | 用户成功登录 |
2 | 用户是否能够正常登录 | 用户输入正确的用户名和错误的密码 | 用户不能够登录 |
3 | 用户是否能够正常登录 | 用户输入错误的用户名和密码 | 用户不能够登录 |
(2)学生管理
用例编号 | 目的 | 预期输出结果 |
1 | 管理员是否能够正常管理学生的信息 | 管理员在进入了学生界面之后,就可以在上面键入自己想要的学生信息,点击“添加”按钮,如果添加的信息重复了,则不能够添加 |
2 | 管理员是否能够正常管理学生的信息 | 管理员在进入了学生界面之后,就可以在上面键入自己想要的学生信息,点击“添加”按钮,如果添加的信息没有重复,则能够添加 |
3 | 管理员是否能够正常管理学生的信息 | 管理员在修改学生界面的过程中,可以选择学生的身份进行更改,如果输入的信息不合法则不能更改 |
4 | 管理员是否能够正常管理学生的信息 | 管理员在修改学生界面的过程中,可以选择学生的身份进行更改,如果输入的信息合法则可以成功更改 |
5 | 管理员是否能够正常管理学生的信息 | 当管理员在进行删除操作时,可以点击“删除”按钮来删除所选的学生信息,如果没有对该学生的记录进行了限制,则能被删除 |
6 | 管理员是否能够正常管理学生的信息 | 当管理员在进行删除操作时,点击“删除”按钮来删除所选的学生信息,如果对该学生的记录进行了限制则无法被删除 |
7 | 管理员是否能够正常管理学生的信息 | 当系统管理员打开了搜索界面之后,就可以在这个页面上键入一个学生的名字来进行查询,如果查找的学生名称跟数据库不匹配,则不能够查找得到 |
8 | 管理员是否能够正常管理学生的信息 | 当系统管理员打开了搜索界面之后,就可以在这个页面上键入一个学生的名字来进行查询,如果查找的学生名称跟数据库匹配,则能够查找得到 |
(3)课程信息管理
用例编号 | 目的 | 手段 | 预期输出结果 |
1 | 管理员是否能够正常管理课程信息的信息 | 管理员需要添加课程信息的信息,需要进入添加课程信息的界面当中 | 管理员在进入了课程信息界面之后,就可以在上面键入自己想要的课程信息,点击“添加”按钮,如果添加的信息重复了,则不能够添加 |
2 | 管理员是否能够正常管理课程信息的信息 | 管理员需要添加课程信息的信息,需要进入添加课程信息的界面当中 | 管理员在进入了课程信息界面之后,就可以在上面键入自己想要的课程信息,点击“添加”按钮,如果添加的信息没有重复,则能够添加 |
3 | 管理员是否能够正常管理课程信息的信息 | 系统管理员要更改课程信息的资料,必须要到更改课程信息的界面才行 | 管理员在修改课程信息界面的过程中,可以选择课程信息的身份进行更改,如果输入的信息不合法则不能更改 |
4 | 管理员是否能够正常管理课程信息的信息 | 系统管理员要更改课程信息的资料,必须要到更改课程信息的界面才行 | 管理员在修改课程信息界面的过程中,可以选择课程信息的身份进行更改,如果输入的信息合法则可以成功更改 |
5 | 管理员是否能够正常管理课程信息的信息 | 管理员要把课程信息的资料删除,必须要去删除课程信息的界面 | 当管理员在进行删除操作时,可以点击“删除”按钮来删除所选的课程信息,如果没有对该课程信息的记录进行了限制,则能被删除 |
6 | 管理员是否能够正常管理课程信息的信息 | 管理员要把课程信息的资料删除,必须要去删除课程信息的界面 | 当管理员在进行删除操作时,点击“删除”按钮来删除所选的课程,如果对该课程信息的记录进行限制,则无法被删除 |
7 | 管理员是否能够正常管理课程信息的信息 | 管理者必须添加一个课程信息名,然后才能找到一个课程信息 | 当系统管理员打开了搜索界面之后,就可以在这个页面上键入一个课程信息的名字来进行查询,如果查找的课程信息名称跟数据库不匹配,则不能够查找得到 |
8 | 管理员是否能够正常管理课程信息的信息 | 管理者必须添加一个课程信息名,然后才能找到一个课程信息 | 当系统管理员打开了搜索界面之后,就可以在这个页面上键入一个课程信息的名字来进行查询,如果查找的课程信息名称跟数据库匹配,则能够查找得到 |
3.测试结果
主要从基本的测试方法和基本的相关功能测试两个方面进行阐述,在此基础上,既要关注前端网页的错误,又要考虑后端的逻辑处理等相关重点问题。在测试的时候,系统的功能要注意程序的使用,首先要按照正常的逻辑来进行测试等步骤,然后再尝试输入一个错误的数据,看看这个系统有没有能力检测到这些数据的错误内容。在检测的过程中,要尽量将一些特定的条件都考虑进去,这样才能得到更好的效果和起到更好的作用。
六、总结
一开始从高校课程管理系统的整体架构入手,最后开发实现了高校课程管理系统并对它进行了测试。为了更好地完成本次毕业设计和论文,我自学了很多软件开发流程和编码的规范。
本高校课程管理系统的优点包括:
(1)本高校课程管理系统的开发是离不开SSM开源框架的,SSM开源框架的核心思想是分层,将整个项目分成了不同的层次,分层思想有两个优点:一是业务逻辑代码降低耦合率,二是使得项目具有更好的移植性。
(2)很多的公共模块都是由高校课程管理系统定义的,而且整个项目的功能包含了公共模块,但是所有代码中都需要公共模块的话就会让程序显得代码冗余,所以可以将公共模块设置成单独分离。
(3)之前设计实现系统的时候,一般都是通过分页来实现数据多页的展示。
在该系统的设计、实现和测试过程中,每个环节都经历了学习和探索的过程,但最终都被顺利地完成。然而,在配置系统的开发工具时,遇到的问题也都通过别人的帮助,所有问题都得到了顺利的解决。这表明在软件开发过程中,需要不断学习和探索,并在遇到问题时寻求他人的帮助和支持,以便尽快解决问题并顺利完成项目。本系统有诸多功能都不够完善,希望日后技术和经验都更丰富的情况下,能完善系统的不足之处。