高校学生成绩管理系统的
设计与实现
摘 要
学生成绩管理系统不仅是学校管理的重要组成部分,也直接关系到学生学习成绩的记录、管理和反馈。目前传统的学生成绩管理方式存在着诸多问题,如信息不及时、管理不规范、数据不准确等,严重影响了学校管理的效率和质量。因此,如何设计一套高效、便捷、准确的学生成绩管理系统,成为了当前教育管理领域的重要研究课题。基于此,本文开发了一套基于VUE+SpringBoot的Java学生成绩管理系统,设计了一套有效的解决方案,希望可以为学校管理实践提供参考和借鉴。
关键词:学生成绩管理系统:SpringBoot;Vue;MYSQL
一、绪 论
1.1 研究背景
在当今高等教育日益普及的背景下,高校学生成绩管理系统变得至关重要。随着大学规模的不断扩大和学生数量的增加,传统的手工管理方法已经无法满足学校管理的需要。学生成绩是评价学生学习成绩的重要指标,同时也是学生和家长关注的焦点之一。因此,设计和实现一套高效、可靠的学生成绩管理系统对于提高教学管理水平和满足学生需求具有重要意义。
随着信息技术的不断发展,基于计算机网络和数据库技术的学生成绩管理系统得到了广泛应用。这种系统可以实现学生信息的快速录入、存储和查询,教师可以通过系统对学生成绩进行统计分析和管理,学生和家长也可以通过系统实时查看学生成绩和学习情况。因此,设计和实现一套基于Java的学生成绩管理系统,对于提高学校教学管理水平、提升学生学习体验具有积极的促进作用,并且在国内,随着高校信息化建设的不断推进,越来越多的学校开始使用计算机网络和数据库技术进行学生成绩管理。国外也有许多优秀的学生成绩管理系统案例,这些系统在提高教学效率、促进学生发展等方面取得了显著成效。综合国内外的研究现状和实践经验,可以为我们设计和实现一套高效、可靠的学生成绩管理系统提供借鉴和参考。基于此,因此本课题基于Java语言,采用Vue+SpringBoot前后端分离的框架来设计并实现该学生成绩管理系统。
1.2 研究意义
从理论层面来看,高校学生成绩管理系统作为教育信息化的重要组成部分,对于提高教学管理水平、促进学校教育信息化建设具有重要的理论意义。首先,学生成绩管理系统的设计与实现涉及到计算机科学、信息技术等领域的理论和方法,对于推动这些领域的发展具有积极的推动作用。其次,学生成绩管理系统是教育信息化发展的重要标志之一,研究学生成绩管理系统的设计与实现,有助于深入理解教育信息化的内涵和发展趋势,为教育信息化理论研究提供新的思路和方法。
从实践层面来看,学生成绩管理系统的设计与实现对于提高学校教学管理水平、提升教学效率、改善学生学习体验具有重要的实践意义。首先,学生成绩管理系统可以实现学生信息的快速录入、存储和查询,为学校教学管理工作提供了便利条件,有助于提高教学管理效率。其次,学生成绩管理系统可以实现学生成绩的统计分析和管理,为学校领导、教师和家长提供了及时的学生成绩信息,有助于科学决策和精细管理。最后,学生成绩管理系统可以实现学生和家长对学生成绩的实时查看和了解,为学生学习提供了方便,有助于提升学生学习动力和学习效果。因此,设计和实现一套高效、可靠的学生成绩管理系统对于推进学校教育信息化建设、提高教学管理水平具有重要的实践意义。
1.3 研究现状
1.3.1 研究现状
卢生玉(2022)在《山西电子技术》期刊中研究基于Java的大学生综合测评管理系统的设计与实现操作简便、功能完善的结论。该研究为高校综合测评管理提供了一种可行的解决方案[1]。陈立(2022)在《电子制作》期刊中研究了校园运动会管理系统的设计与实现。实现了对运动员信息、赛事安排等内容的管理和统计。通过对系统功能和性能进行测试,研究得出了系统操作简便、功能实用的结论。该研究为学校运动会管理提供了一种有效的解决方案[2]。欧阳桂秀(2020)研究得出了JDBC技术在高校学生成绩管理系统中应用灵活、效率高的结论。该研究为学生成绩管理系统的数据库操作提供了一种有效的技术支持[3]。
杜博、吴敏宁(2018)在《微型电脑应用》期刊中研究了基于Java的在线考试系统的设计与实现。该研究采用Java语言和SpringBoot框架开发了一套在线考试系统,实现了对考试试题、考生信息等内容的管理和统计。通过对系统功能和性能进行测试,研究得出了系统操作简便、安全性高的结论。该研究为学校在线考试管理提供了一种有效的解决方案[4]。韩辰慧(2018)在《信息通信》期刊中研究了基于JSP的在线成绩管理系统的设计与实现。该研究采用JSP(JavaServer Pages)技术开发了一套在线成绩管理系统,实现了对学生成绩信息的录入、查询和统计分析。通过对系统功能和性能进行测试,研究得出了系统界面友好、操作简便的结论。该研究为学校成绩管理工作提供了一种有效的解决方案[5]。
1.3.2 研究综述
国内学者们在Java技术应用于教育管理领域的研究中取得了显著进展。他们设计并实现了基于Java的教育管理系统,为高校提供了一种有效的解决方案。同时,国外的研究报告突显了Java生态系统的蓬勃发展,尤其是Java 17的采用率显著增长。这些研究成果和国际趋势共同展示了Java技术在教育管理中的重要作用和发展前景。
1.4 研究内容与主要工作
通过对用户需求的调研和分析,明确系统需要实现的功能和性能要求。在这一阶段,需要对学生信息管理、课程信息管理、成绩管理等方面的需求进行详细分析,确立系统的功能模块和界面设计。在系统架构设计方面,需要考虑系统的整体结构、模块划分和数据流程,确定采用SpringBoot框架进行系统设计。在数据库设计方面,需要设计学生信息表、课程信息表、成绩信息表等数据库表结构,确保数据存储的有效性和安全性。
系统实现阶段是将系统设计方案转化为具体的代码实现的过程。在这一阶段,需要利用Java语言和SpringBoot框架实现系统的后端功能,并结合VUE和Node.js等前端技术实现系统的前端界面。同时,还需要利用Mysql和Redis等数据库技术实现数据存储和缓存功能,确保系统的稳定性和高效性。
最后对系统进行测试,要涵盖功能测试、性能测试等多个方面。在功能测试方面,需要编写测试用例对系统的各项功能进行验证;在性能测试方面,需要模拟大量并发访问和数据处理场景,评估系统的性能表现。通过系统测试,可以及时发现和解决系统存在的问题,确保系统的稳定运行和用户体验。
二、相关技术
2.1 B/S架构
B/S架构,即Browser/Server架构,是一种常见的网络应用架构模式,也被称为Web架构。在B/S架构中,用户通过浏览器与服务器进行交互,所有的应用逻辑和数据都存储在服务器端,而客户端浏览器负责展示和交互。这种架构模式已成为现代Web应用开发的主流选择,广泛应用于各行各业的网站和Web应用中。
B/S架构所有的应用逻辑和数据都集中存储在服务器端,使得对应用的更新和维护更加简便和集中。开发者可以在服务器端进行修改和更新,而无需对客户端进行任何改动,避免了频繁的客户端更新和维护。同时,B/S架构还支持服务器集群和负载均衡等技术,能够实现应用的水平扩展,满足大规模应用的需求。由于所有的应用逻辑和数据都存储在服务器端,用户无法直接访问和修改,因此能够有效保护应用的安全性和数据的完整性。同时,通过HTTPS等加密通信协议和安全认证机制,可以保障数据在传输过程中的安全性,防止数据被窃取或篡改。
2.2 Java语言
2.2.1 Java语言介绍
Java是一种强大而多用途的编程语言,由Sun Microsystems于1995年首次发布。它的设计目标是提供一种跨平台的解决方案,使开发人员能够只编写一次代码,然后在不同操作系统上运行,而无需进行大规模修改。Java的成功不仅体现在其广泛的应用领域,还在于其卓越的性能、可靠性和安全性,使其成为企业级应用开发的首选语言之一。
Java语言的历史可以追溯到20世纪90年代初。当时,Sun Microsystems认识到传统的编程语言存在跨平台兼容性的问题,开发人员需要为不同的操作系统和硬件编写不同的代码。为了解决这个问题,他们开始着手开发一种新的编程语言,最终诞生了Java。Java最初被称为“Oak”,后来更名为Java,以反映其与咖啡有关的特性。Java的首次公开发布是在1995年,随后迅速赢得了开发人员的青睐。这是因为Java的一个重要特点是其跨平台能力。Java程序通过将源代码编译成一种中间字节码,然后在Java虚拟机(JVM)上运行,从而使其能够在不同操作系统上执行,而无需重新编写或修改代码。这一特性对于企业级应用非常重要,因为它可以降低开发和维护成本,同时确保应用程序在不同环境中的一致性。
Java还具有丰富的标准库和第三方库,可用于解决各种不同的编程任务,这些库提供了各种功能,从文件处理到网络通信,从图形用户界面到数据存储,应有尽有。这使得开发人员能够更快地构建应用程序,而无需从头开始编写所有代码。
在过去的几十年里,Java已经成为企业级应用开发的首选语言,许多大型公司和组织因为它提供了可靠性、性能和可维护性从而选择Java作为其主要的开发语言,例如,许多大型金融机构使用Java来构建其交易系统,因为它能够处理高并发和低延迟要求,许多云计算平台也支持Java应用程序的部署,使其成为云原生开发的理想选择。
Java的应用领域不仅限于企业级开发,它还在移动应用开发、嵌入式系统、大数据处理等领域发挥着重要作用,我们上文中提到的Android操作系统就是基于Java开发的。Java的最新版本不断推出,引入了新的功能和性能改进,,Java生态系统中也在不断涌现出新的开源项目和库,为开发人员提供更多的选择和工具。
2.2.2 Java语言特点
1 跨平台性:Java最引人瞩目的特点之一是其卓越的跨平台性,Java程序可以在不同的操作系统上运行,而无需对源代码进行修改。这一特性的实现依赖于Java虚拟机(JVM),它负责将Java源代码编译成中间字节码,然后在不同平台上执行。这使得开发人员可以编写一次代码,然后在Windows、Linux、macOS等多种操作系统上运行,大大减少了开发和维护的复杂性,Android操作系统使用Java作为其主要开发语言,这意味着数十亿的移动设备上运行着使用Java编写的应用程序,Java还广泛用于服务器端开发,因为它可以在不同的服务器操作系统上运行,满足了企业级应用的需求。
2 自动内存管理:Java引入了垃圾回收机制,开发人员不需要手动管理内存。这一特性有助于防止内存泄漏和减少程序崩溃的风险。垃圾回收器定期检查不再被引用的对象,并释放其占用的内存空间。这使得Java程序更加稳定,减轻了开发人员的负担,同时降低了开发成本。
3 多线程支持:Java内置了多线程支持,允许程序同时执行多个任务。多线程使得程序能够更有效地利用多核处理器和多个CPU,提高了性能和响应能力。这对于需要并发处理的应用程序尤其重要,如Web服务器、数据库系统和游戏引擎。Java的多线程支持通过Thread类和相关API实现,使线程的创建和管理变得相对容易。
4 丰富的库类:Java拥有庞大且丰富的标准库和第三方库,涵盖了各种领域的功能需求。这些库提供了各种工具和框架,从文件操作到网络通信,从图形用户界面到数据存储,从数据分析到机器学习,应有尽有,开发人员可以借助这些库来加快应用程序的开发速度,同时降低开发的复杂性。
2.2.3 Java语言面向对象编程
在Java中,封装是一种将数据和方法隐藏在类的内部,只允许通过公共接口访问的机制,这有助于保护数据的完整性和安全性,同时隐藏了对象的内部细节。抽象则是将复杂的现实世界问题简化为程序中的模型的过程,可以通过抽象类和接口来实现。构造函数用于初始化对象的状态,而在Java中,不需要显式定义析构函数,因为Java具有垃圾回收机制,负责释放不再使用的对象。
方法重载是一种允许在同一个类中定义多个具有相同名称但不同参数列表的方法的机制,提高了代码的可读性和灵活性。Java的OOP特性为开发人员提供了强大的工具,用于组织和管理复杂的代码,提高了代码的可维护性和可重用性。这些特性使Java成为一种适用于各种应用领域的编程语言,从桌面应用程序到服务器端开发,再到移动应用开发和大数据处理,Java都发挥了重要作用。
2.3 SpringBoot框架
Spring Boot是一个用于构建Java应用程序的开源框架Spring Boot具有以下特点和优势:
简化配置:Spring Boot通过提供默认配置和自动化设置,减少了开发人员在配置文件和XML文件中的繁琐配置。它可以根据应用程序的依赖自动配置许多常见的设置,从而使得开发者能够更专注于业务逻辑的开发。
快速开发:Spring Boot提供了一套强大的开发工具和开箱即用的特性,使得开发人员可以更快地搭建和开发Java应用程序。它提供了开发和测试应用程序所需的各种组件和功能,如内嵌的HTTP服务器、自动化的依赖管理、自动化的测试环境等。这些特性大大加速了应用程序的开发过程。
2.4 其他相关技术
2.4.1 Vue
Vue是一款流行的开源JavaScript框架,用于构建用户界面和单页应用。由尤雨溪于2014年首次发布,Vue以其简洁、灵活和高效的特点,迅速成为前端开发中备受欢迎的选择之一。Vue的出现填补了当时前端框架的一些空白,为开发者提供了一种更加直观、便捷的方式来构建交互性强、性能高效的Web应用程序。
Vue的核心设计理念之一是响应式数据绑定。通过Vue的数据绑定机制,当数据发生变化时,页面会自动更新,使开发者不再需要手动操作DOM,大大简化了前端开发的复杂性。Vue还提供了诸如组件化、虚拟DOM、路由、状态管理等丰富的功能,使开发者能够轻松构建复杂的单页应用。
2.4.1 Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于构建高性能、可扩展的网络应用程序。它采用了事件驱动、非阻塞I/O模型,使得它非常适合于处理大量并发连接、I/O密集型的应用场景。Node.js 的出现彻底改变了传统的服务器开发方式,为前端和后端的整合提供了全新的可能性,成为了现代网络应用开发中不可或缺的技术之一。Node.js 的事件驱动和非阻塞I/O模型是其最突出的特点之一。在传统的同步I/O模型中,每个I/O操作都会阻塞整个线程,导致服务器无法同时处理多个连接,性能受限。而在Node.js中,所有的I/O操作都是异步的,通过事件驱动的方式来处理,当一个I/O操作完成时,会触发相应的事件,从而使得服务器能够高效地处理大量并发连接,提高了应用程序的性能和吞吐量。
2.4.2 MySQL
MySQL数据库是一种开源的关系型数据库管理系统(RDBMS),在数据库领域拥有广泛的应用和影响力。它的开源性使得开发人员可以免费获取并使用,而且遵循GNU通用公共许可证(GPL)的使用规定。这种特性对于小型企业和个人开发者来说,降低了数据库相关的成本,使MySQL成为了一个经济实惠的选择。
MySQL和Java一样,它也可以在多种操作系统上运行,包括Windows、Linux、macOS等,这种灵活性使得MySQL适用于各种不同的开发环境和部署场景。它通过采用多种优化技术来确保高速数据访问和处理能力。查询缓存、索引优化、多线程处理等功能都有助于提高数据库的性能,使其能够有效地处理大量的数据和高负载的请求。MySQL还支持水平和垂直扩展,可以通过添加更多的服务器来水平扩展,也可以通过增加硬件资源来垂直扩展。这使得MySQL能够满足不断增长的数据需求,保持应用程序的可伸缩性。ACID兼容性是数据库领域的重要属性之一,MySQL在这方面表现出色。它支持ACID(原子性、一致性、隔离性和持久性)事务属性,确保了数据的完整性和可靠性。
MySQL拥有丰富的数据类型,包括整数、浮点数、日期时间、字符串、二进制数据等,适用于各种类型的数据存储需求。它还提供了多种安全性特性,如访问控制、SSL支持、数据加密等,以保护数据免受未经授权的访问和攻击。
2.4.3 Redis
Redis(Remote Dictionary Server)是一个开源的内存数据库系统,被广泛用于缓存、数据存储和消息队列等多种用途。它具有出色的性能、灵活的数据结构支持和丰富的功能,成为了许多应用程序的核心组件。它是一个内存数据库,将数据存储在内存中以实现卓越的读写性能。Redis支持多种数据结构,如字符串、列表、哈希、集合、有序集合等,这为不同类型的数据和用例提供了广泛的支持,其内存存储和单线程执行模型使其具有低延迟和高吞吐量。Redis的非阻塞I/O、查询缓存和其他优化技术确保了它在数据访问和处理方面的卓越表现。这使得Redis成为处理大量请求和实时数据的理想选择。
Redis的字符串用于存储简单的键值对数据,列表支持队列和栈操作,哈希用于结构化数据,集合和有序集合用于存储唯一值和排序数据。此外,Redis还支持地理空间索引、位图等特殊数据结构,为更多的用例提供了解决方案,它常用作缓存层,加速数据访问并减轻后端数据库负载。会话管理是另一个常见的用例,Redis用于存储和管理用户的会话信息,确保用户的状态持久性和可伸缩性。计数器和排行榜功能利用了Redis的有序集合,用于统计和排名。而实时数据分析则利用Redis来存储和处理实时事件数据,满足日志分析和用户行为跟踪等需求。
2.4.3 LOMBOK
Lombok通过@ToString注解,Lombok会自动生成toString()方法;通过@EqualsAndHashCode注解,Lombok会自动生成equals()和hashCode()方法。此外,Lombok还提供了其他一些常用的注解,如@NoArgsConstructor、@AllArgsConstructor和@Data等,用于自动生成无参构造方法、全参构造方法和常用的方法(Getter、Setter、equals、hashCode和toString)。
三、需求分析
3.1 需求概述
该学生成绩管理系统的主要用户包括学生和管理员两类。学生作为系统的主要使用者之一,需要能够方便地查看自己的课程信息、选课记录、学生成绩,并且能够修改个人信息。而管理员则需要具备对课程信息、选课记录、学生成绩、学生信息进行增删改查的权限,以便对学校教学管理工作进行有效地管理。
对于学生而言,他们希望能够在系统中方便地查看到自己的课程信息,包括课程名称、授课教师、上课时间等内容,以便及时了解自己的课程安排。同时,学生还需要能够查看到自己的选课记录,包括已选课程和已修课程的相关信息,以便进行学业规划和学习进度的管理。此外,学生还需要能够方便地查看自己的学生成绩,包括考试成绩和平时成绩等内容,以便及时了解自己的学习情况。最后,学生还需要能够修改个人信息,包括姓名、学号、联系方式等内容,以便及时更新个人信息。
管理员必须具有在系统中管理课程信息的权限。这包括添加新课程、更改现有课程信息、删除不必要的课程以及其他任务。同时,管理员还必须能够管理课程选择记录,包括查看课程选择状态、添加课程选择信息、更改课程选择记录、删除课程选择记录等操作。此外,管理员必须能够管理学生成绩,包括输入学生成绩、更改学生成绩、删除学生成绩和其他操作。最后,管理员还必须获得管理学生信息的授权,包括添加新的学生信息、修改学生信息、删除学生信息以及其他及时更新和更新学生信息的操作
3.2 可行性分析
3.2.1 技术可行性
系统的技术可行性涉及到系统所采用的技术方案是否能够满足系统设计和功能需求,以及是否能够在实际应用中稳定运行和维护。因此,需要对系统所涉及的各项技术进行深入分析和评估。针对系统的整体架构和开发平台,需要评估B/S架构的技术可行性。B/S架构是一种常见的网络应用架构模式,具有诸多优点,如应用更新维护方便、安全性高等。通过浏览器与服务器进行交互的方式,使得用户可以方便地使用系统,而开发者也能够更轻松地进行系统维护和更新。因此,B/S架构在学生成绩管理系统中是一种较为合适的架构选择,能够满足系统的需求。对于系统所采用的编程语言和开发框架,需要评估Java技术的可行性。Java作为一种广泛应用于软件开发的编程语言,具有简单易学、跨平台等特点,在学生成绩管理系统的开发中具有重要作用。Java语言的稳定性和成熟性使其成为系统开发的首选语言之一,同时,结合Spring框架等技术,能够实现系统的业务逻辑处理、数据管理等功能。因此,Java技术在学生成绩管理系统中具有较高的技术可行性。
在前端开发方面,Vue.js作为一款流行的开源JavaScript框架,能够帮助开发人员构建用户界面和单页应用,具有响应式数据绑定等特点。通过Vue.js,可以实现系统界面的动态展示和交互,提升用户体验。因此,Vue.js在学生成绩管理系统的前端开发中具有较高的技术可行性。Node.js作为后端技术也需要进行技术可行性评估。Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,具有事件驱动、非阻塞I/O模型等特点,适合处理大量并发连接、I/O密集型的应用场景。在学生成绩管理系统中,Node.js可以作为后端技术来处理业务逻辑和数据管理,实现系统的高性能和可扩展性。因此,Node.js在学生成绩管理系统的后端开发中具有较高的技术可行性。对于数据库管理方面,MySQL作为一款流行的开源关系型数据库管理系统,具有索引、缓存、查询优化等技术,能够提供高性能的数据库服务。在学生成绩管理系统中,MySQL可以用于存储和管理用户信息、票务信息等数据,实现系统的数据管理和查询功能。因此,MySQL在学生成绩管理系统的数据库管理中具有较高的技术可行性。
3.2.2 市场可行性
本文希望通过信息化手段提高教学管理的效率和水平。因此,市场上存在着对学生成绩管理系统的需求,系统的开发和推广具有一定的市场基础,并且学生成绩管理系统的市场规模较大,涵盖了全国范围内的各级各类学校,包括小学、中学、高中以及大学等不同类型的学校。随着教育信息化的深入推进,学生成绩管理系统的市场需求将持续增长,市场规模也将不断扩大。
四、系统概要设计
4.1 系统开发环境及工具
在本项目中,系统的开发环境及工具包括Windows 11操作系统、IntelliJ IDEA 2023集成开发环境、Java 8编程语言、MySQL 8.0.29数据库管理系统,在NaviCat中进行对数据库的管理,NaviCat版本为18。
4.2 系统架构设计
本项目采用了前后端分离的架构,将前端和后端完全分离开来,通过API接口进行通信。这种架构能够提高系统的灵活性和可扩展性,使得前后端开发团队可以独立开发、测试和部署各自的模块,降低了耦合度,提高了开发效率。
4.2.1 后端架构设计
后端采用了SpringBoot框架,它提供了一套简化的配置方式和快速开发的能力,能够快速搭建起项目的基础架构。后端系统主要包括以下几个模块:
控制器(Controller)层:负责接收前端请求,调用服务层处理业务逻辑,并返回结果给前端。服务(Service)层:负责处理业务逻辑,调用DAO层进行数据访问和处理。数据访问层(DAO):负责与数据库进行交互,执行数据的增删改查操作。后端结构图如图4-1所示:
图4-1 后端架构图
4.2.2 前端架构设计
前端采用了VUE框架,它是一款轻量级、灵活的JavaScript框架,能够快速构建交互性强、性能优异的Web应用。前端系统主要包括以下几个模块:
页面组件(Component):包括头部导航、侧边栏、内容展示区等组件,负责展示页面的结构和内容。
路由(Router):负责管理页面之间的导航和跳转,实现单页应用的路由功能。
状态管理(State Management):采用Vuex进行状态管理,统一管理前端应用的状态数据,实现数据的共享和同步更新。
HTTP请求:通过Axios等HTTP请求库与后端进行数据交互,发送请求并处理响应数据,前端架构图如图4-2所示:
图4-2 前端架构图
4.3 系统结构设计
组织架构图如下图4-1所示,学生可以查看当前可供选修的课程信息,包括课程名称、课程编号、授课教师等;学生可以查看自己已经选修的课程记录,包括已选课程名称、成绩等;学生可以查看自己的成绩单,包括各门课程的成绩和总成绩;学生可以修改自己的个人信息,如姓名、联系方式等。
管理员可以添加、删除、修改和查询课程信息,以维护系统中的课程库。管理员可以添加、删除、修改和查询选课记录,以确保其准确性和完整性;管理员可以输入、删除、修改和查询学生成绩,并创建成绩报告。管理员可以添加、删除、修改和查询学生信息,以维护学生数据库的完整性。
图4-3 组织架构图
4.4 数据库设计
4.4.1 数据库逻辑结构设计
数据库逻辑结构如图4-4所示,每个学生(student)可以有多个选课记录(student_course),同时每个选课记录对应一个学生;每门课程(course)可以被多个学生选修(student_course),同时每个选课记录对应一门课程;每个学生(student)可以有多个成绩(grade),同时每个成绩对应一个学生;每门课程(course)可以有多个成绩(grade),同时每个成绩对应一门课程;管理员(admin)可以管理多门课程。
图4-4 数据库E-R图
4.4.2 数据库表单设计
表4-1 admin管理员表
字段名称 |
字段类型 |
字段长度 |
约束 |
字段含义 |
id |
int(11) |
|
主键 |
ID |
username |
varchar(255) |
255 |
非空 |
账号 |
password |
varchar(255) |
255 |
非空 |
密码 |
name |
varchar(255) |
255 |
非空 |
名称 |
role |
varchar(255) |
255 |
非空 |
角色 |
管理员表存储管理员的账号、密码、姓名以及角色信息。管理员通过这个表进行登录和管理课程、学生成绩等操作。管理员的角色决定了其在系统中的权限范围,例如普通管理员可能只能对课程信息进行增删改查,而超级管理员则具有更高级的权限。
表4-2 course 课程表
字段名称 |
字段类型 |
字段长度 |
约束 |
字段含义 |
id |
int(11) |
|
主键 |
ID |
name |
varchar(255) |
255 |
非空 |
课程名称 |
no |
varchar(255) |
255 |
非空 |
课程编号 |
descr |
varchar(255) |
255 |
非空 |
课程描述 |
times |
varchar(255) |
255 |
非空 |
课时 |
teacher |
varchar(255) |
255 |
非空 |
任课老师 |
课程表存储了所有课程的信息,包括课程的名称、编号、描述、上课时间以及任课老师等。这些信息对于学生选课和成绩管理至关重要。学生通过课程表选择感兴趣的课程,并了解课程的基本信息,同时老师也可以通过课程表了解自己负责的课程信息。
表4-3 grade 学生成绩表
字段名称 |
字段类型 |
字段长度 |
约束 |
字段含义 |
id |
int(11) |
|
主键 |
ID |
course_id |
int(11) |
|
非空 |
课程ID |
student_id |
int(11) |
|
非空 |
学生ID |
score |
double(10,1) |
|
非空 |
分数 |
comment |
varchar(255) |
255 |
非空 |
评语 |
feedback |
varchar(255) |
255 |
非空 |
学生反馈 |
学生成绩表记录了学生的成绩信息,包括学生的课程ID、学生ID、分数、评语以及学生的反馈等。这个表用于记录学生在每门课程中的表现,老师可以根据学生成绩对学生进行评价和反馈,学生也可以查看自己的成绩和老师的评语,以及提供对课程的反馈意见。
表4-4 student学生表
字段名称 |
字段类型 |
字段长度 |
约束 |
字段含义 |
id |
int(11) |
|
主键 |
ID |
username |
varchar(255) |
255 |
非空 |
学号 |
password |
varchar(255) |
255 |
非空 |
密码 |
name |
varchar(255) |
255 |
非空 |
名称 |
phone |
varchar(255) |
255 |
非空 |
手机号 |
email |
varchar(255) |
255 |
非空 |
邮箱 |
sex |
varchar(255) |
255 |
非空 |
性别 |
birth |
varchar(255) |
255 |
非空 |
生日 |
avatar |
varchar(255) |
255 |
非空 |
头像 |
role |
varchar(255) |
255 |
非空 |
角色 |
学生表存储了所有学生的个人信息,包括学号、密码、姓名、手机号、邮箱、性别、生日、头像以及角色等。这些信息对于学生管理和身份识别至关重要,学生通过学生表登录系统并查看自己的个人信息,同时管理员也可以通过学生表对学生信息进行管理。
表4-5 student_course 选课记录表
字段名称 |
字段类型 |
字段长度 |
约束 |
字段含义 |
id |
int(11) |
|
主键 |
ID |
name |
varchar(255) |
255 |
非空 |
课程名称 |
no |
varchar(255) |
255 |
非空 |
课程编号 |
student_id |
int(11) |
|
非空 |
学生ID |
course_id |
int(11) |
|
非空 |
课程ID |
选课记录表记录了学生的选课情况,包括学生的ID、课程的ID、课程名称以及课程编号等。这个表用于记录学生选择的课程信息,确保学生选修的课程与实际情况一致,同时也方便管理员对选课情况进行管理和统计。
五、系统实现
5.1 课程信息模块
图5-1 课程信息模块
课程信息模块是学生成绩管理系统中的一个重要组成部分,它负责管理和维护所有课程的信息。在系统中,课程信息的准确性和完整性对于学生的选课和成绩管理至关重要。因此,课程信息模块的设计和实现需要考虑到系统的实际需求和用户操作习惯,以确保系统的稳定性和可用性。
课程信息模块的核心代码,即CourserController类。该类使用了Spring框架提供的@RestController注解,将该类标识为一个Restful风格的控制器,并通过@RequestMapping注解将该类映射到“/course”路径下。这样设计的目的是为了使课程信息模块的接口具有统一的命名规范和路径,便于前端调用和管理。
在CourserController类中定义了几个关键的接口方法,包括分页条件查询课程、新增课程、更新课程和删除课程。这些接口方法对应了系统中对课程信息的常见操作,涵盖了课程信息的查询、添加、修改和删除功能,可以满足用户在不同场景下的需求。
selectPage方法接收了pageNum、pageSize和course三个参数,其中pageNum和pageSize用于指定查询的页码和每页记录数,而course则是用于接收查询条件的实体对象。在方法内部,我们调用了courseService的selectPage方法,并将pageNum、pageSize和course作为参数传递给该方法。最后,将查询结果封装成PageInfo对象,并通过Result.success方法返回给前端。
新增课程的接口方法add接收了一个Course类型的参数course,用于接收前端传递过来的新增课程信息。在方法内部,我们调用了courseService的add方法,将course对象传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。
更新课程的接口方法update与新增课程的接口方法类似,也接收了一个Course类型的参数course,用于接收前端传递过来的更新后的课程信息。在方法内部,我们调用了courseService的updateById方法,将course对象传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。
删除课程的接口方法delete接收了一个Integer类型的参数id,用于指定要删除的课程的ID。在方法内部,我们调用了courseService的deleteById方法,将id作为参数传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。
public class CourserController {
@Resource
private CourseService courseService;
@GetMapping("/selectPage")
public Result selectPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
Course course) { // ?name=xx&no=xx
PageInfo<Course> pageInfo = courseService.selectPage(pageNum, pageSize, course);
return Result.success(pageInfo);
}
@PostMapping("/add")
public Result add(@RequestBody Course course) {
courseService.add(course);
return Result.success();
}
@PutMapping("/update")
public Result update(@RequestBody Course course) {
courseService.updateById(course);
return Result.success();
}
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id) {
courseService.deleteById(id);
return Result.success();
}
}
5.2 选课记录模块
图5-2 选课记录模块
选课记录模块是学生成绩管理系统中的重要组成部分之一,它承载了学生选课的功能,记录了学生选择的课程信息。
StudentCourseController类同样使用了Spring框架提供的@RestController注解,将该类标识为一个Restful风格的控制器,并通过@RequestMapping注解将该类映射到“/studentCourse”路径下。这样设计的目的是为了使选课记录模块的接口具有统一的命名规范和路径,便于前端调用和管理。
在StudentCourseController类中定义了学生选课、删除选课和分页条件查询课程。这些接口方法对应了系统中对选课记录的常见操作.
学生选课的接口方法add接收了一个StudentCourse类型的参数studentCourse,用于接收前端传递过来的选课信息。在方法内部,我们调用了studentCourseService的add方法,将studentCourse对象传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。
删除选课的接口方法delete接收了一个Integer类型的参数id,用于指定要删除的选课记录的ID。在方法内部,我们调用了studentCourseService的deleteById方法,将id作为参数传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。
分页条件查询课程的接口方法selectPage与课程信息模块中的类似,接收了pageNum、pageSize和studentCourse三个参数,其中pageNum和pageSize用于指定查询的页码和每页记录数,而studentCourse则是用于接收查询条件的实体对象。在方法内部,我们调用了studentCourseService的selectPage方法,并将pageNum、pageSize和studentCourse作为参数传递给该方法。最后,将查询结果封装成PageInfo对象,并通过Result.success方法返回给前端。
public class StudentCourseController {
@Resource
StudentCourseService studentCourseService;
@PostMapping("/add")
public Result add(@RequestBody StudentCourse studentCourse) {
studentCourseService.add(studentCourse);
return Result.success();
}
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id) {
studentCourseService.deleteById(id);
return Result.success();
}
@GetMapping("/selectPage")
public Result selectPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
StudentCourse studentCourse) { // ?name=xx&no=xx
PageInfo<StudentCourse> pageInfo = studentCourseService.selectPage(pageNum, pageSize, studentCourse);
return Result.success(pageInfo);
}
}
5.3 学生成绩模块
图5-3 学生成绩模块
学生成绩模块在高校学生成绩管理系统中扮演着至关重要的角色,它记录了学生在每门课程中的表现和成绩情况,是评价学生学习成果的重要指标之一。
GradeController是学生成绩模块的核心控制器类,通过@RestController注解将该类标识为一个Restful风格的控制器,并通过@RequestMapping注解将该类映射到“/grade”路径下,以实现统一的接口管理和调用。
GradeController中定义了几个重要的接口方法,包括添加成绩、更新成绩、删除成绩和分页条件查询成绩。添加成绩的接口方法add。接收了一个Grade类型的参数grade,用于接收前端传递过来的成绩信息。在方法内部,我们调用了gradeService的add方法,将grade对象传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。更新成绩的接口方法update同样接收了一个Grade类型的参数grade,并将其传递给gradeService的update方法进行处理。处理完成后,同样通过Result.success方法返回给前端。删除成绩的接口方法delete方法接收了一个Integer类型的参数id,用于指定要删除的成绩记录的ID。在方法内部,我们调用了gradeService的deleteById方法,将id作为参数传递给该方法进行处理。处理完成后,同样通过Result.success方法返回给前端。
分页条件查询成绩的接口方法selectPage接收了pageNum、pageSize和grade三个参数,其中pageNum和pageSize用于指定查询的页码和每页记录数,而grade则是用于接收查询条件的实体对象。在方法内部,我们调用了gradeService的selectPage方法,并将pageNum、pageSize和grade作为参数传递给该方法。最后,将查询结果封装成PageInfo对象,并通过Result.success方法返回给前端。
@RestController
@RequestMapping("/grade")
public class GradeController {
@Resource
GradeService gradeService;
@PostMapping("/add")
public Result add(@RequestBody Grade grade) {
gradeService.add(grade);
return Result.success();
}
@PutMapping("/update")
public Result update(@RequestBody Grade grade) {
gradeService.update(grade);
return Result.success();
}
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id) {
gradeService.deleteById(id);
return Result.success();
}
@GetMapping("/selectPage")
public Result selectPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
Grade grade) { // ?name=xx&no=xx
PageInfo<Grade> pageInfo = gradeService.selectPage(pageNum, pageSize, grade);
return Result.success(pageInfo);
}
}
5.4 学生信息管理
图5-4 管理学生信息模块
StudentController是高校学生信息管理模块的核心控制器类,通过@RestController注解将该类标识为一个Restful风格的控制器,并通过@RequestMapping注解将该类映射到“/student”路径下,以实现统一的接口管理和调用。
添加学生信息的接口方法add接收了一个Student类型的参数student,用于接收前端传递过来的学生信息。在方法内部,我们调用了studentService的add方法,将student对象传递给该方法进行处理。处理完成后,通过Result.success方法返回给前端。
更新学生信息的接口方法update接收了一个Student类型的参数student,并将其传递给studentService的updateById方法进行处理。处理完成后,同样通过Result.success方法返回给前端。
删除学生信息的接口方法delete接收了一个Integer类型的参数id,用于指定要删除的学生信息记录的ID。在方法内部,我们调用了studentService的deleteById方法,将id作为参数传递给该方法进行处理。处理完成后,同样通过Result.success方法返回给前端。
分页查询学生信息的接口方法selectPage。该方法与前面的接口方法类似,同样接收了pageNum、pageSize和student三个参数,其中pageNum和pageSize用于指定查询的页码和每页记录数,而student则是用于接收查询条件的实体对象。在方法内部,我们调用了studentService的selectPage方法,并将pageNum、pageSize和student作为参数传递给该方法。最后,将查询结果封装成PageInfo对象,并通过Result.success方法返回给前端。
public class StudentController {
@Resource
StudentService studentService;
@PostMapping("/add")
public Result add(@RequestBody Student student) {
studentService.add(student);
return Result.success();
}
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id) {
studentService.deleteById(id);
return Result.success();
}
@PutMapping("/update")
public Result update(@RequestBody Student student) {
studentService.updateById(student);
return Result.success();
}
@GetMapping("/selectPage")
public Result selectPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
Student student) {
PageInfo<Student> pageInfo = studentService.selectPage(pageNum, pageSize, student);
return Result.success(pageInfo);
}
}
六、系统测试
6.1 系统测试环境
系统进行使用测试,主要测试功能能否解决用户诉求。在设置系统的服务器时,需要将Tomcat服务器和非关系型数据库连接成一个部分。测试环境如表5.6所示。
表6-1 测试设备信息表
|
系统的客户端:Win11专业版64位;运行内存16GB |
硬件环境 |
系统的服务器端:AMD R5-5600G 3.9Ghz 内存16G SSD 500GB |
6.2 测试用例
表6-2 注册测试用例
测试模块 |
用户注册模块测试 |
测试目的 |
测试当注册信息输入不符合要求时,系统是否能进行相应处理并给出提示。 |
测试方法 |
黑盒测试 |
测试数据 |
1不输入用户名和密码,直接点击注册。 2输入未注册过的用户名。例如:caixukun123 3输入正确用户名,两次密码不一样。例如:用户名admin、密码admin,确认密码kunkun123 |
预期结果 |
1 界面不跳转,弹出对话框,提示用户输入必填项。 2界面跳转,弹出对话框,提示用户注册成功。 3界面不跳转,弹出对话框,提示两次密码不一致。 |
实际结果 |
与预想一致。 |
结论 |
注册模块实现了基本的异常输入应对。 |
表6-3 登录测试用例
测试模块 |
用户登录模块测试 |
测试目的 |
测试当登陆信息输入不符合要求时,系统是否能进行相应处理并给出提示。 |
测试方法 |
黑盒测试 |
测试数据 |
1不输入用户名和密码,直接点击登陆。 2输入未注册过的用户名。例如:caixunkun123 3输入正确用户名,错误密码。例如:用户名admin、密码 kunkun123 4输入正确用户名,正确匹配密码。例如:用户名admin、密码 admin |
预期结果 |
1 界面不跳转,弹出对话框,提示用户输入必填项。 2界面不跳转,弹出对话框,提示用户当前用户名尚未注册。 3界面不跳转,弹出对话框,提示用户密码错误。 4界面实现跳转,登陆功能正常进行。 |
实际结果 |
与预想一致。 |
结论 |
登陆模块实现了基本的异常输入应对。 |
6.3 性能测试
表6-4 性能测试
意图 |
检查点 |
期望的结果 |
测试的最终结果 |
1个用户在同一时间进入系统, |
响应速度 |
使用者使用正常,系统一切正常,最短系统反应时间0.5秒,最长系统反应时间1秒 |
符合预期 |
50个用户在同一时间进入系统 |
并发性 |
最长2秒内进入系统 |
符合预期 |
50个用户在同一时间选课,检查系统是否出现异常 |
并发性 |
选课申请在10秒内发到后台,并反馈到用户 |
符合预期 |
600用户,每30秒登录10个用户,为期半个小时,每10秒返回50个用户请求 |
最大负载 |
所有经测试的用户请求都能及时并准确返回。 |
符合预期 |
6.4 测试结论
系统经过了基本的功能测试和性能测试,从用户的角度来看,系统的各项功能能够正常运行,不仅满足了用户的需求,而且在性能方面表现出色,这为系统的后续部署和应用提供了坚实的基础。
功能测试是验证系统是否按照预期进行工作的关键步骤。本设计测试了用户注册和登录功能,这是用户与系统进行交互的起点,也是系统的核心功能之一。通过注册测试用例,本设计验证了系统对于异常输入的处理能力,包括未填写必填项、用户名未注册和密码不匹配等情况。而在登录测试用例中,本设计测试了系统对于不同情况下的登录请求的响应,包括未填写必填项、用户名未注册和密码错误等情况。通过与预期结果的对比,本设计确认系统能够正确地处理各种异常情况,并向用户给出相应的提示,从而保证了用户体验的完整性和稳定性。
性能测试是评估系统在不同负载下的表现和响应能力的关键指标。本设计测试了系统在不同用户数量和请求频率下的性能表现,包括单用户响应速度、并发用户进入系统的响应速度、并发用户提交订单的响应速度以及系统的最大负载能力。通过这些测试,本设计确认系统在各项性能指标下都表现出色,响应速度快,负载能力强,能够满足大部分用户需求,并保持系统的稳定性和可靠性。
整体来了,系统经过了功能测试和性能测试的双重验证,各项指标表现良好,没有出现严重的缺陷或性能瓶颈。这意味着系统已经具备了进入下一阶段的条件,即部署和应用阶段。在这个阶段,本设计将系统部署到实际的生产环境中,并向用户提供服务,同时继续监控和优化系统的性能,以确保系统始终保持高效稳定的运行状态,为用户提供优质的服务体验。
结论
系统开发经过了设计、实现和测试阶段,最终取得了令人满意的成果。在设计阶段确立了系统的基本功能和架构,采用了前后端分离,为后续的开发奠定了良好的基础。在实现阶段,各个模块的功能得以顺利实现,课程信息模块、选课记录模块、学生成绩管理模块、学生信息管理等模块的设计思路和功能实现都得到了充分的论述。在测试阶段对系统进行了全面的测试,包括功能测试、性能测试和用户体验测试,结果表明系统在各个方面表现良好,能够满足用户的需求,并具备了进一步部署和应用的条件。系统的开发不仅仅是一个过程,更是一个持续改进和迭代的循环。我们将继续关注用户的反馈和需求,不断优化系统的功能和性能,保持系统的竞争力和创新性。
随着用户需求的不断变化和技术的不断更新,未来可以继续优化系统的功能和性能,不断提升用户体验。同时也要关注行业的发展趋势,及时调整和更新系统的功能和模块,以保持系统的竞争优势和市场地位。
参考文献
[1]卢生玉. 基于Java的大学生综合测评管理系统的设计与实现 [J]. 山西电子技术, 2022, (05): 69-71+81.
[2]陈立. 校园运动会管理系统的设计与实现 [J]. 电子制作, 2022, 30 (13): 45-48. DOI:10.16589/j.cnki.cn11-3571/tn.2022.13.009.
[3]欧阳桂秀. JDBC技术在学生成绩管理系统中的应用 [J]. 科技传播, 2020, 12 (22): 99-102. DOI:10.16607/j.cnki.1674-6708.2020.22.034.
[4]杜博,吴敏宁. 基于Java的在线考试系统的设计与实现 [J]. 微型电脑应用, 2018, 34 (09): 90-93.
[5]韩辰慧. 基于JSP的在线成绩管理系统的设计与实现 [J]. 信息通信, 2018, (04): 180-181.
[6]胡强. 学生成绩管理应用开发的研究 [J]. 安徽警官职业学院学报, 2017, 16 (03): 123-128.
[7]王语园. 基于java网上考试管理系统设计 [J]. 电子质量, 2017, (01): 44-48.
[8]杨宝林. 基于Java Web的学生成绩信息管理系统[D]. 吉林大学, 2015.
[9]张年华. 学生成绩管理系统的设计与实现[D]. 吉林大学, 2014.
[10]丁红艳. 高职院学生成绩管理系统的设计与实现[D]. 厦门大学, 2013.
[11]潘利平. 学生选课及成绩管理系统的设计与实现[D]. 华北电力大学(河北), 2009.