基于Java和MySQL实现的大学生学籍管理系统(毕业设计附完整项目代码)
作者:mmseoamin日期:2023-12-25

一、设计任务

本课题下的功能要求有:

  • 实现学生信息、班级、院系、专业等的管理

    • 实现课程、学生成绩信息管理

      • 实现学生的奖惩信息管理

        • 创建规则用于限制性别项只能输入“男”或“女”

          • 创建视图查询各个学生的学号、姓名、班级、专业、院系

            • 创建存储过程查询指定学生的成绩单

              • 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级、学生人数

                • 建立数据库相关表之间的参照完整性约束

                  其中我主要负责设计存储过程,创建用于修改学生班级信息时自动修改相应班级的学生人数的触发器,选课管理模块(选课、退课及查课),成绩管理模块(增、删、改、查成绩),奖惩管理模块(增、删、改、查奖惩信息)。

                  其余模块有 ×× 负责设计表结构,设计主页面,院系管理模块(增、删、查院系信息),专业管理模块(增、删、查专业信息),班级管理模块(增、删班级信息,班级人数查询);××× 负责设计视图,检查数据库各表参照完整性,数据库 JDBC 连接,学生管理模块(增、删、改、查学生信息),课程管理模块(增、删、改、查课程信息)。

                  1.1 需求分析


                  1.2 功能需求


                  • 学生管理模块:创建学生信息表(stu_inf)可以实现对学生信息的添加、查询、修改、删除操作

                    • 课程管理模块:创建课程信息表(course)可以实现对课程信息的添加、查询、修改、删除操作

                      • 院系管理模块:创建院系信息表(department)可以实现对院系信息的添加、查询、删除操作

                        • 专业管理模块:创建专业信息表(major)可以实现对专业信息的添加、查询、删除操作

                          • 班级管理模块:创建班级信息表(class)可以实现对班级信息的添加、删除、查询班级人数操作

                            • 选课管理模块:创建选课信息表(stu_cou)可以实现对选课信息的添加、查询、删除操作

                              • 成绩管理模块:对选课信息表(stu_cou)可以实现对成绩信息的添加、查询、修改、删除操作

                                • 奖惩管理模块:创建奖惩信息表(stu_san)可以实现对奖惩信息的添加、查询、修改、删除操作

                                  1.3 性能需求


                                  • 数据的完整性,准确性:录入数据采用表格方式,限制录入数据类型及取值范围以保证数据的完整性及准确性,系统具有部分反悔功能,系统备有的修改功能均可反悔

                                    • 数据完成的时间性:如成绩的录入,仅当选课料录资入后方可录入成绩

                                      1.4 数据需求


                                      • 院系表(departname(Varchar))

                                        • 专业表(majorname(Varchar),departname(Varchar))专业信息的院系必须是院系表的院系

                                          • 班级表(majorname(Varchar),classnum(Int),classsum(Smallint))班级信息的专业必须是专业表的专业

                                            • 学生表(Sno(Varchar),Sname(Varchar),Ssex(Enum),Sbirth(Date),Snative(Varchar),Sclass(Int),Smajor(Varchar))学生信息的班级必须是班级表的班级

                                              • 课程表(Cno(Varchar),Cname(Varchar),Ccredit(Smallint),Cteacher(Varchar))

                                                • 选课表(Cno(Varchar),Sno(Varchar),GradeSmallint))选课信息的学号必须为学生表的学号,课程号必须为课程表的课程号

                                                  • 奖惩信息表(id(Int),Sno(Varchar),Sname(Varchar),Reward(Varchar),Punish(Varchar))奖惩信息的学号、姓名必须为学生表的学号、姓名

                                                    • 用户表(username(Varchar),password(Varchar))

                                                      1.5 运行需求


                                                      • 用户界面:要求简单实用,操作方便

                                                        • 软件接口:使用 JDBC 来连接 Java 和 MySQL 数据库

                                                          二、系统设计


                                                          总体功能框架

                                                          模块的详细设计

                                                          • 选课:输入已有的学号和课程号,然后执行 insert 语句添加此信息到数据库 stu_cou 表中

                                                            • 退课:输入已有的学号,先执行 select 语句查询出相应选课信息,选中想退的课的对应信息,然后执行 delete 语句在数据库 stu_cou 表中删除此信息;

                                                              • 选课信息查询:输入已有学生的学号,然后执行 select 语句查询出此学生所有课程,或输入已有课程的课程号,然后执行 select 语句查询出此课程下的所有学生

                                                                • 成绩添加及修改:输入已有课程号,先执行 select 语句查询出此课程所有学生,选中添加成绩的学生并输入此课程的成绩,然后执行 update 语句更新此信息到数据库 stu_cou 表中

                                                                  • 成绩删除:输入已有课程号,先执行 select 语句查询出此课程所有学生,选中该学生,然后执行 update 语句在数据库 stu_cou 表中删除此学生、此课程对应成绩

                                                                    • 成绩查询:

                                                                      • 按学号查询:输入已有学生的学号,然后执行 select 语句查询出此学生所有成绩,并列出该生总课程数、总学分、挂科课程数、已修学分和平均分

                                                                        • 按课程号查询:输入已有课程的课程号,然后执行 select 语句查询出此课程下已有成绩学生的成绩信息,并自动统计总人数、及格人数、不及格人数及此课程平均成绩

                                                                          • 奖惩信息添加:输入已有学生的学号和姓名,再输入奖惩信息,然后执行 insert 语句添加此信息到数据库 stu_san 表中

                                                                            • 奖惩信息删除:输入已添加过奖惩信息学生的学号,然后执行 delete 语句在数据库 stu_san 表中删除此信息

                                                                              • 奖惩信息修改:输入已添加过奖惩信息学生的学号,先执行 select 语句查询出所有奖惩信息,然后选中要修改的信息并输入修改后的奖惩信息,最后执行 update 语句在数据库 stu_san 表中修改此信息

                                                                                • 奖惩信息查询:输入已有学生的学号,然后执行 select 语句查询出所有奖惩信息

                                                                                  三、数据库设计


                                                                                  概念结构设计

                                                                                  逻辑结构设计

                                                                                  • 院系(院系名) 主键=院系名

                                                                                    • 专业(院系名,专业名) 主键=专业名 外键=院系名

                                                                                      • 班级(专业名,班级号,班级人数) 主键=专业名、班级号 外键=专业名

                                                                                        • 学生(学号,姓名,性别,出生年月,籍贯,专业名,班级号)

                                                                                          • 主键=学号 外键=专业名、班级号

                                                                                            • 课程(课程号,课程名,学分,执教教师) 主键=课程号

                                                                                              • 选课(学号,课程号,分数) 主键=学号、课程号 外键=学号、课程号

                                                                                                • 奖惩信息(id,学号,姓名,奖励信息,惩罚信息) 主键=id 外键=学号、姓名

                                                                                                  • 用户(用户名,密码) 主键=用户名

                                                                                                    物理结构设计

                                                                                                    学生信息表(stu_inf)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    Sno

                                                                                                    Varchar(6)

                                                                                                    学号

                                                                                                    Sname

                                                                                                    Varchar(10)

                                                                                                    姓名

                                                                                                    Ssex

                                                                                                    Enum

                                                                                                    性别

                                                                                                    Sbirth

                                                                                                    Date

                                                                                                    出生年月

                                                                                                    Snative

                                                                                                    Varchar(10)

                                                                                                    籍贯

                                                                                                    Sclass

                                                                                                    Int

                                                                                                    班级

                                                                                                    Smajor

                                                                                                    Varchar(10)

                                                                                                    专业

                                                                                                    外键

                                                                                                    字段

                                                                                                    被引用的模式

                                                                                                    被引用的表(父)

                                                                                                    被引用的字段

                                                                                                    删除时

                                                                                                    更新时

                                                                                                    inf-class

                                                                                                    Sclass, Smajor

                                                                                                    meimaobingle

                                                                                                    class

                                                                                                    classnum, majorname

                                                                                                    RESTRICT

                                                                                                    RESTRICT

                                                                                                    课程信息表(course)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    Cno

                                                                                                    Varchar(4)

                                                                                                    课程号

                                                                                                    Cname

                                                                                                    Varchar(40)

                                                                                                    课程名

                                                                                                    Ccredit

                                                                                                    Smallint

                                                                                                    学分

                                                                                                    Cteacher

                                                                                                    Varchar(10)

                                                                                                    执教教师

                                                                                                    院系信息表(department)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    departname

                                                                                                    Varchar(10)

                                                                                                    院系名

                                                                                                    专业信息表(major)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    majorname

                                                                                                    Varchar(10)

                                                                                                    专业名

                                                                                                    departname

                                                                                                    Varchar(10)

                                                                                                    院系名

                                                                                                    外键

                                                                                                    字段

                                                                                                    被引用的模式

                                                                                                    被引用的表(父)

                                                                                                    被引用的字段

                                                                                                    删除时

                                                                                                    更新时

                                                                                                    major-depart

                                                                                                    departname

                                                                                                    meimaobingle

                                                                                                    department

                                                                                                    departname

                                                                                                    CASCADE

                                                                                                    CASCADE

                                                                                                    班级信息表(class)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    majorname

                                                                                                    Varchar(10)

                                                                                                    专业名

                                                                                                    classnum

                                                                                                    Int

                                                                                                    班级号

                                                                                                    classsum

                                                                                                    Smallint

                                                                                                    班级人数

                                                                                                    外键

                                                                                                    字段

                                                                                                    被引用的模式

                                                                                                    被引用的表(父)

                                                                                                    被引用的字段

                                                                                                    删除时

                                                                                                    更新时

                                                                                                    class-major

                                                                                                    majorname

                                                                                                    meimaobingle

                                                                                                    major

                                                                                                    majorname

                                                                                                    CASCADE

                                                                                                    CASCADE

                                                                                                    选课信息表(stu_cou)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    Cno

                                                                                                    Varchar(4)

                                                                                                    课程号

                                                                                                    Sno

                                                                                                    Varchar(6)

                                                                                                    学号

                                                                                                    Grade

                                                                                                    Smallint

                                                                                                    成绩

                                                                                                    外键

                                                                                                    字段

                                                                                                    被引用的模式

                                                                                                    被引用的表(父)

                                                                                                    被引用的字段

                                                                                                    删除时

                                                                                                    更新时

                                                                                                    cou_course

                                                                                                    Cname, Cno

                                                                                                    meimaobingle

                                                                                                    course

                                                                                                    Cname, Cno

                                                                                                    CASCADE

                                                                                                    CASCADE

                                                                                                    cou_inf

                                                                                                    Sno

                                                                                                    meimaobingle

                                                                                                    stu_inf

                                                                                                    Sno

                                                                                                    CASCADE

                                                                                                    CASCADE

                                                                                                    奖惩信息表(stu_san)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    id

                                                                                                    int

                                                                                                    奖惩 ID

                                                                                                    Sno

                                                                                                    Varchar(6)

                                                                                                    学号

                                                                                                    Sname

                                                                                                    Varchar(10)

                                                                                                    姓名

                                                                                                    Reward

                                                                                                    Varchar(100)

                                                                                                    奖励信息

                                                                                                    Punish

                                                                                                    Varchar(100)

                                                                                                    惩罚信息

                                                                                                    外键

                                                                                                    字段

                                                                                                    被引用的模式

                                                                                                    被引用的表(父)

                                                                                                    被引用的字段

                                                                                                    删除时

                                                                                                    更新时

                                                                                                    san-inf

                                                                                                    Sno, Sname

                                                                                                    meimaobingle

                                                                                                    stu_inf

                                                                                                    Sno, Sname

                                                                                                    CASCADE

                                                                                                    CASCADE

                                                                                                    用户信息表(login)

                                                                                                    字段名

                                                                                                    字段类型

                                                                                                    小数点

                                                                                                    是否主键

                                                                                                    是否为空

                                                                                                    是否外键

                                                                                                    备注

                                                                                                    username

                                                                                                    Varchar(10)

                                                                                                    用户名

                                                                                                    password

                                                                                                    Varchar(10)

                                                                                                    密码

                                                                                                    学生信息视图

                                                                                                    CREATE ALGORITHM = UNDEFINED DEFINER = `root` @`localhost` SQL SECURITY DEFINER VIEW `studentview` AS SELECT
                                                                                                        `stu_inf`.`Sno` AS `Sno`,
                                                                                                        `stu_inf`.`Sname` AS `Sname`,
                                                                                                        `stu_inf`.`Sclass` AS `Sclass`,
                                                                                                        `stu_inf`.`Smajor` AS `Smajor`
                                                                                                    FROM `stu_inf`

                                                                                                    查询指定学生成绩单存储过程:

                                                                                                    CREATE DEFINER=`root`@`localhost` PROCEDURE `pd_select_stu_cou_by_Sno`(S_no varchar(6))
                                                                                                        BEGIN
                                                                                                            select Sno,Cno,Grade from stu_cou where Sno=S_no;
                                                                                                        END

                                                                                                    触发器:

                                                                                                    ·添加学生时班级人数自动 +1

                                                                                                    CREATE DEFINER = `root` @`localhost` TRIGGER `stu_jia` AFTER INSERT ON `stu_inf` FOR EACH ROW
                                                                                                    UPDATE class SET classsum = classsum + 1
                                                                                                    WHERE new.Smajor = majorname AND new.sclass = classnum;

                                                                                                    删除学生时班级人数自动-1

                                                                                                    CREATE DEFINER = `root` @`localhost` TRIGGER `stu_shan` BEFORE DELETE ON `stu_inf` FOR EACH ROW
                                                                                                    UPDATE class SET classsum = classsum - 1
                                                                                                    WHERE old.Smajor = majorname AND old.sclass = classnum;;

                                                                                                    修改学生班级时旧班级自动-1,新班级自动 +1

                                                                                                    CREATE DEFINER = `root` @`localhost` TRIGGER `stu_geng` AFTER UPDATE ON `stu_inf` FOR EACH ROW
                                                                                                    BEGIN
                                                                                                        UPDATE class SET classsum = classsum + 1
                                                                                                        WHERE new.Smajor = majorname AND new.sclass = classnum;
                                                                                                        UPDATE class SET classsum = classsum - 1
                                                                                                        WHERE old.Smajor = majorname AND old.sclass = classnum;
                                                                                                    END;

                                                                                                    四、运行结果和测试


                                                                                                    运行界面及其效果图

                                                                                                    对在调试中发现的问题进行说明:

                                                                                                    前期数据库设计时部分数据库用户自定义约束缺失,导致一些不符合逻辑,不正确的数据也能被写进数据库中;后来在程序中增加了相关的约束判断条件保证数据的正确性和一致性。

                                                                                                    完整代码:https://download.csdn.net/download/qq_38735017/87394449