学生信息管理系统是一种用于管理学生信息的软件系统,旨在提高学校管理效率和服务质量。本课程设计报告旨在介绍设计和实现学生信息管理系统的过程。报告首先分析了系统的需求,包括学生基本信息管理、成绩管理等功能。接着介绍了系统的设计方案,包括系统架构、数据库设计和界面设计等内容。在实现部分,报告详细描述了系统的开发过程和关键技术,如数据库连接等。最后,报告总结了系统的特点和优势,并提出了进一步改进和发展的建议。通过本课程设计,我们深入理解了学生信息管理系统的设计与实现,提高了软件开发能力和团队合作能力。
1 引言
随着信息技术的飞速发展,学校管理也逐渐转向数字化和信息化方向。学生信息管理系统作为学校管理的重要组成部分,承担着学生信息录入、查询、统计等功能,为学校管理者提供了便捷高效的工具。本课程设计旨在通过设计和实现一个全功能的学生信息管理系统,深入理解数据库设计、编程开发等相关知识,提升学生的信息管理能力和实践能力。本课程设计将采用intelij idea、Navicat作为开发平台,以信息录入与管理、信息查询为设计目标,结合学生信息管理的实际需求,设计并实现一个易用可靠的学生信息管理系统。通过本课程设计,学生将深入了解数据库设计与管理、编程开发等相关技术,提升自身信息管理和系统开发能力。本报告将围绕学生信息管理系统的设计与实现展开,首先介绍系统的需求分析,然后详细阐述系统的设计思路和功能模块,最后给出系统的实现和测试情况,并总结本次课程设计的收获和不足之处。通过本报告的撰写,旨在全面展示学生信息管理系统课程设计的全过程和成果,为今后的学习和实践积累经验,提供参考和借鉴。
1.1 研究背景和意义
1.1.1研究背景
信息化教育发展: 随着信息技术的迅速发展,教育管理也逐步向数字化、信息化转变。学生信息管理系统作为教育信息化建设的重要组成部分,受到了广泛关注和重视。
教育管理需求: 高效、准确地管理学生信息对于教育管理工作至关重要。学校管理者和教师需要一个功能完备、易用可靠的学生信息管理系统来支持学校的日常教学和管理工作。
技术发展趋势: 数据库技术、网络技术、软件工程等方面的不断发展,为学生信息管理系统的设计与实现提供了技术保障和支持。
1.1.2研究意义
提高管理效率: 学生信息管理系统的建立可以使学校管理者和教师更加便捷地进行学生信息的录入、查询和统计,提高管理效率和工作质量。
信息共享与交流: 学生信息管理系统可以促进学校内部各部门之间的信息共享和交流,提升教育教学工作的整体协调性和效率。
1. 2 国内外现状发展及趋势
国内:中国的学生信息管理系统在不断提升数据管理和教务管理的效率,越来越多的学校采用数字化、网络化的管理方式,以满足日益增长的学生数量和复杂的管理需求。国外:国外学生信息管理系统也经历了类似的发展过程,许多国家的学校和教育机构都使用自己定制的系统或者商用系统,以支持学生信息管理、教学计划和成绩跟踪等功能。
趋势:智能化和个性化:未来学生信息管理系统将更加智能化,利用人工智能和大数据技术为学生提供个性化的学习支持和建议。云端化和移动化:越来越多的学校将信息管理系统迁移到云端,以提高系统的可访问性和可扩展性,并且系统将更加注重移动端的用户体验,支持学生、教师和家长随时随地访问和管理信息。数据安全和隐私保护:随着数据泄露和隐私问题的日益突出,学生信息管理系统将更加注重数据安全和隐私保护,采取更加严格的措施保护学生和教育机构的数据安全。
2 系统需求分析
2.1系统总体需求目标
信息记录与管理:系统能够有效地记录和管理学生的基本信息,如姓名、性别、年龄、联系方式、成绩等。
用户权限管理:对用户登录设置权限。
查询:提供查询学生信息的功能。
易用性与界面友好:界面简洁直观,操作方便。
性能优化:系统能够稳定运行,响应速度快。
2.2系统业务流程分析
学生信息录入:管理员通过系统录入新生或转入学生的基本信息。
成绩录入与管理:管理员将学生的成绩录入系统。系统会根据录入的学生的成绩进行评测。
信息查询:管理员可以通过系统查询学生信息、成绩信息等。
2.3系统功能需求分析
2.3.1学生管理功能:
学生信息录入与修改:添加学生信息,修改、删除、更新学生信息。
学生信息查询:根据姓名、学号等条件查询学生信息。
学生信息统计:统计学生人数、男女比例、年龄分布等信息。
2.3.2 成绩管理功能:
成绩录入与修改:教师录入学生的考试成绩或作业成绩。
成绩查询:学生查询自己的成绩,教师查询所教授课程学生成绩。
成绩统计:统计班级或课程的平均成绩、及格率等信息。
2.4系统性能分析
响应时间:系统对用户请求的响应时间,包括页面加载、查询、修改等操作的耗时情况,以确保用户体验良好。
并发处理能力:系统在高并发情况下的稳定性和性能表现,确保能够同时处理多个用户的请求而不降低性能。
数据库性能:数据库的读写速度、索引效率、连接池管理等方面的性能表现,对系统整体性能有重要影响。
系统资源利用率:监控系统的 CPU、内存、磁盘等资源利用率,避免资源瓶颈影响系统性能。
3 系统总体设计
3.1系统功能结构设计
学生信息管理系统:由登陆子系统、查询子系统、管理子系统。功能结构图如图3-1。
(1)登录子系统分为超级管理员登录、管理员登录以及学生端登录。它主要提供用户登录功能,并按各用户的权限使用本系统。
(2)查询子系统包含根据相应的条件进行模糊查询查询到其想要的学生信息。
(3)管理子系统包括学生信息的增加、删除等管理学生信息。
图3-1
3.2数据库设计
3.2.1 概念结构设计
(1)学生管理子系统:
在进入页面之前需要进行登录,在学生在学号和密码正确的情况下进入系统。学生可以修改个人的密码,查询选修课程、学习成绩,还可以查询、选择课程。各实体之间的关系:学生和课程:多对多,学生和老师:多对多,学生和专业:多对一。
- 管理员管理子系统:
老师在工号和密码对应的情况下进入系统。
老师可以查询老师的个人信息和修改个人密码,可以查询授课课程信息,可以查询选修课程的学生,可以对学生的成绩进行录入、修改和查询。修改个人的密码
查询授课课程,查询选修课程的学生信息,对学生的成绩进行录入、修改和查询。各实体之间的关系:老师和课程:多对多,老师和专业:多对一。
E-R图:
图3-2
3.2.2 逻辑结构设计
关系模型
班级(编号,班级名称,备注)
学生(编号,姓名,学号,性别,所在院系,班级id,成绩等级)
用户(编号,用户名,密码)
学院(编号,学院名称)
关系模式
t_school_class(id,className,classDesc)
t_student(id,name,sn,sex,dept,classld,score)
t_user(id,userName,password)
dept(id,dept)
基础数据处理
1. t_school_class班级
2. t_student学生表
3. t_user用户表
4.dept学院表
3.2.3 物理结构设计
数据库存储:在数据库服务器上,可以创建多个数据库实例来存储不同类型的数据,如学生信息、课程信息、成绩信息等。每个数据库实例包含多个表,每个表包含相应的字段来存储具体的数据。
3.2.4 数据库建设
1.建立数据库
2.使用数据库
3.创建表
DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (`id` int(11) NOT NULL COMMENT '编号',`dept` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学院',PRIMARY KEY (`id`) USING BTREE,INDEX `dept`(`dept` ASC) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `t_school_class`;CREATE TABLE `t_school_class` (`id` int(11) NOT NULL AUTO_INCREMENT,`className` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`classDesc` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`sn` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`sex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`dept` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`classId` int(11) NULL DEFAULT NULL,`score` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `classId`(`classId` ASC) USING BTREE,INDEX `t_student_ibfk_2`(`dept` ASC) USING BTREE,CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`classId`) REFERENCES `t_school_class` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
3.3 系统安全性设计
在系统功能的安全性需求上,应该从保密性、完整性、身份可认性、可用性以及可控性等多个角度进行分析。具体有!
(1)保密性。对于系统中涉及的信息对没有授权的实体,不可进行对信息的查看与修改。
(2)完整性。信息在存储和上传过程中不会发生改变。
(3)身份可认性。在使用系统时应对用户信息进行确认,避免信息混乱,导致信息泄露
(4)可用性。保证授权的用户在使用时不会发生不能使用的情况。
3.4 本章小结
系统总体设计主要由系统功能结构设计,数据库设计和系统安全性设计组成,以此来满足用户在使用时的体验感,提高系统使用时的稳定性。
4 系统实现
4.1 系统架构实现
本系统主要包括三种业务流程:登陆业务流程、学生个人信息业务流程、班级业务流程。该系统采用多层架构,视图类用作表示层。除了向客户提供信息之外,它还获得管理员或教师或学生输入的信息。用户输入的简单控制。表单获得用户输入信息后,提交给视图,在这里首先转换获得的数据,然后将相应的数据封装为数据传输对象。视图将封装的数据提交给模型,并使用提交给视图的数据对象来执行复杂的业务逻辑操作。对数据库的访问是在DAO级别。DAO层实现特定的数据库操作方法,服务层调用DAO层方法来实现数据库操作。通过应用这种多层体系结构,提高了系统的可维护性、可扩展性和可移植性。
登陆业务流程概述:输入用户名、密码,登录到系统,对相关信息进行增、删、改、查以及导入和导出。进行完操作之后,点击安全退出,退出系统。管理员业务流程图如图3-2所示。
图4.1.1业务流程图
从功能模块上可以分为如下几大模块:学生信息的导入、导出模块、删除学生信息模块、修改学生信息模块、查询学生信息模块、添加学生信息模块。主要功能模块如图4.1.2所示。
图4.1.2 学生个人信息模块图
班级信息模块类似有删除班级信息模块、修改班级信息模块、查询班级信息模块、添加班级信息模块。主要功能模块如图4.1.3所示。
图4.1.3 班级信息模块图
4.2 系统功能实现
4.2.1登录界面实现
首先新建用户登录所对应的实体user类,一个user对象代表一个用户,此外,用户表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。
用户实体类:
public class User {private int id; // 编号private String userName; // 用户名private String password; // 密码public User() {super();// TODO Auto-generated constructor stub}public User(String userName, String password) {super();this.userName = userName;this.password = password;}
(set和get方法以及同toString方法省略)
第二步就是对登录的逻辑处理,首先是登陆名以及密码的非空校验,两者有一个为空就不继续访问数据库,直接返回给用户错误的信息,提醒用户更正登录信息。
图4.2.1.1登录界面图
当用户名或者密码为空的时候点击登录就会出现提示信息,如图4.2.1.2
图4.2.1.2登录界面提示信息图
代码部分的实现是使用了awt框架中的事件处理函数
private void loginActionPerformed(ActionEvent evt) {String userName=this.userNameTxt.getText();String password=new String(this.passwordTxt.getPassword());if(StringUtil.isEmpty(userName)){JOptionPane.showMessageDialog(null, "用户名不能为空!");return;}if(StringUtil.isEmpty(password)){JOptionPane.showMessageDialog(null, "密码不能为空!");return;}User user=new User(userName,password);Connection con=null;try {con=dbUtil.getCon();User currentUser=userDao.login(con, user);if(currentUser!=null){dispose();new MainFrm().setVisible(true);}else{JOptionPane.showMessageDialog(null, "用户名或者密码错误!");}} catch (Exception e) {e.printStackTrace();}finally{try {dbUtil.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}
4.2.2 班级信息模块设计
首先新建班级所对应的实体studentClass类,一个studentClass对象代表一个班级,此外,班级表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。
班级实体类:
public class SchoolClass {private int id; // 编号private String className; // 班级名称private String calssDesc; // 备注public SchoolClass() {super();}public SchoolClass(String className, String calssDesc) {super();this.className = className;this.calssDesc = calssDesc;}public SchoolClass(int id, String className, String calssDesc) {super();this.id = id;this.className = className;this.calssDesc = calssDesc;}
(set和get方法以及同toString方法省略)
第二步就是对班级信息逻辑部分的实现了,包括增加删除修改查询,其中添加是单独放在了一个界面,而查询、修改以及删除放在了同一个界面,这样便于维护,如图所示
图4.2.2.1班级信息界面图
点击添加则会调用添加部分的界面函数,弹出信息添加的界面如图所示,可以输入班级的名称,以及对班级的详细描述进行添加,在输入错误的情况下也可以点击重置,就会清空所有填写的信息,这样便于操作。
图4.2.2.2班级信息界面图
点击维护则会调用维护部分的界面函数,弹出信息维护的界面如图所示,可以修改班级的名称,以及对班级的详细描述进行修改。
图4.2.2.2班级信息界面图
实现班级信息维护的代码如下,其中也是使用了awt中的事件处理函数,以及swing中的函数实现界面的显示跳转弹框等交互的操作。
private void bookTypeAddActionPerformed(ActionEvent evt) {String className=this.classNameTxt.getText();String classDesc=this.classDescTxt.getText();if(StringUtil.isEmpty(className)){JOptionPane.showMessageDialog(null, "班级信息名称不能为空!");return;}SchoolClass schoolClass=new SchoolClass(className,classDesc);Connection con=null;try{con=dbUtil.getCon();int n=schoolClassDao.add(con, schoolClass);if(n==1){JOptionPane.showMessageDialog(null, "班级信息添加成功!");resetValue();}else{JOptionPane.showMessageDialog(null, "班级信息添加失败!");}}catch(Exception e){e.printStackTrace();JOptionPane.showMessageDialog(null, "班级信息添加失败!");}finally{try {dbUtil.closeCon(con);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
4.2.3 学生信息模块设计
首先新建学生所对应的实体student类,一个student对象代表一个用户,此外,用户表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。
用户实体类:
public class Student {private int id; // 编号private String name; // 姓名private String sn; // 学号private String sex; // 性别private String dept; // 所在院系private Integer classId; // 班级Idprivate String className; // 班级名称private String score; // 成绩等级public Student() {super();}public Student(String name, String sn, String sex, String dept, Integer calssId, String address) {super();this.name = name;this.sn = sn;this.sex = sex;this.dept = dept;this.classId = calssId;this.score = score;}
(set和get方法以及同toString方法省略)
第二步就是对学生个人信息逻辑部分的实现了,包括增加删除修改查询,其中添加是单独放在了一个界面,而查询、修改以及删除放在了同一个界面,这样便于维护,如图所示
图4.2.3.1学生信息界面图
其中手工填写学生的姓名学号、所在院系和成绩等级,性别通过单选框选择,班级通过下拉菜单进行选择。
图4.2.3.2学生信息添加界面图
在学生信息维护的界面可以对学生信息进行检索,可以通过学生的姓名、学生的编号、学生所在的班级进行筛选,点击选择某位学生的信息,就可以对该学生的信息进行操作了,可以修改其名字、性别、所在的学院、学生的学号、所属的班级以及家庭住址。也可以点击删除、删除该学生的信息。
图4.2.3.3学生信息修改/删除界面图
实现个人信息维护的代码如下,其中也是使用了awt中的事件处理函数,以及swing中的函数实现界面的显示跳转弹框等交互的操作,学生信息的字段信息比较多需要注意要对应字段赋值。
private void studentUpdateActionPerformed(ActionEvent evt) {String id=this.idTxt.getText();if(StringUtil.isEmpty(id)){JOptionPane.showMessageDialog(null, "请选择要修改的记录");return;}String sname=this.nameTxt.getText();String sn=this.snTxt.getText();String dept=this.deptTxt.getText();String address=this.addressTxt.getText();if(StringUtil.isEmpty(sname)){JOptionPane.showMessageDialog(null, "学生信息名称不能为空!");return;}if(StringUtil.isEmpty(sn)){JOptionPane.showMessageDialog(null, "学生学号不能为空!");return;}if(StringUtil.isEmpty(dept)){JOptionPane.showMessageDialog(null, "学生学院不能为空!");return;}String sex="";if(manJrb.isSelected()){sex="男";}else if(femaleJrb.isSelected()){sex="女";}SchoolClass schoolClassTmp=(SchoolClass) schoolClassJcb.getSelectedItem();int scId=schoolClassTmp.getId();Student book=new Student(Integer.parseInt(id), sname, sn, sex, dept, scId, address);Connection con=null;try{con=dbUtil.getCon();int addNum=studentDao.update(con, book);if(addNum==1){JOptionPane.showMessageDialog(null, "学生信息修改成功!");resetValue();this.fillTable(new Student());}else{JOptionPane.showMessageDialog(null, "学生信息修改失败!");}}catch(Exception e){e.printStackTrace();JOptionPane.showMessageDialog(null, "学生信息修改失败!");}finally{try {dbUtil.closeCon(con);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
学生的编号是信息维护逻辑操作的关键所在,首先需要通过学生的编号id查出该学生的各类信息反显在前台界面,然后根据前台更新后的信息,先映射到学生的实体类然后通过数据库dao层同步更新数据库的信息,最后达到学生信息的维护。
5 测试
5.1.1数据一致性测试
本次测试主要检测添加和修改班级信息的功能部分是否符合预期,通过输入不同的班级信息确认表的建立
表5.1.1 添加和修改班级信息
班级名称 | 班级信息 | 是否成功 |
计科1班 | 某个班级 | 是 |
计科2班 | 老师带的最好班级 | 是 |
null | 某个班级 | 否 |
本次测试主演检测添加班级功能部分是否符合预期,通过输入班级名称为空的情况,如表5.1.2所示,若班级名称为空都能添加成功,所以这个系统的数据库在后期的维护中要进行修改,不符合实际情况,实际情况就是,在学校内,班级名称是必不可少的。当然,本小组成员在后期维护中会不定期检查系统,完善系统。
表5.1.2 添加和修改班级测试表
班级名称 | 班级信息 | 是否通过 |
计科1班 | 某个班级 | 是 |
计科2班 | 最好的班级 | 是 |
null | 某个班级 | 是 |
本次测试主要检测学生信息添加部分是否符合预期,通过输入不同的名字和学号,包括两者为空的情况,如表5.1.3所示,当学号、名字、学院有一者为空时,均无法实现信息的添加,符合实际情况,而当输入的成绩为空时,这段信息符合部分考生因缺考等原因无成绩,符合预期。
表5.1.3 输入学生成绩信息测试表
名字 | 学号 | 学生学院 | 成绩等级 | 是否通过 |
小鸣 | 20209054 | 信工院 | A | 是 |
null | 12345678 | 传艺院 | B | 否 |
陈哥 | null | 信工院 | A | 否 |
张三 | 23145678 | null | A | 否 |
李四 | 45678912 | 经管院 | null | 是 |
本次测试主要检测学生信息的查询功能部分是否符合预期,通过输入不同的姓名、学号、班级包括为空的情况,测试它的实体完整性。如表5.1.4所示,当输入学生姓名,学号,班级为空时,可以出现该学生的相关信息;输入学生学号。而姓名班级为空时,同样可以出现该学生信息,而姓名学号为空时,输入如班级,则显示为2班全班信息,当姓名、学号、班级全为空时,则显示所有数据。符合预期。
表5.1.4 学生信息查询测试
姓名 | 学号 | 班级 | 学院 | 是否通过 |
陈璆鸣 | null | null | null | 是 |
null | 12345678 | null | null | 是 |
null | null | 计科2班 | null | 是 |
null | null | null | 信工院 | 是 |
null | null | null | null | 是 |
本次测试主要检测管理员操作修改学生信息功能部分是否符合预期,在选择相应的信息后,在相关内容里进行修改,测试实体完整性。如表5.1.7所示,若没有选择相应的信息则无法进行修改。所以,只有当数据库内有相应的信息,并且选择了相应信息并进行输入才能判断正确,通过测试。
表5.1.7 修改学生成绩信息测试表
选择 | 姓名 | 性别 | 学院 | 学号 | 班级 | 成绩 | 是否通过 |
是 | 陈璆鸣 | 男 | 信工 | 12345678 | 计科1班 | A+ | 是 |
否 | null | null | null | null | null | null | 否(未选择内容) |
5.1.2数据库的性能测试
应用软件除了功能外,很重要的一部分就是软件的性能,而对于数据库系统,数据库性能的好坏会直接影响应用软件的性能,这部分的测试,一般手工测试就显得无能为力了,这时就要借助自动化的测试软件,例如:DataFactory,DataFactory 是一种强大的数据产生器,它允许开发人员和测试人员很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle、Sybase、SQL Server 数据库。这样,就可以模拟出应用软件长期使用后,海量数据存储的数据库的性能状况。从而尽早发现问题,进行数据库性能的优化。(未来的设想和维护)