基于Java和MySQL实现的大学生学籍管理系统(毕业设计附完整项目代码)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 基于Java和MySQL实现的大学生学籍管理系统(毕业设计附完整项目代码)

一、设计任务


本课题下的功能要求有:


  • 实现学生信息、班级、院系、专业等的管理
  • 实现课程、学生成绩信息管理
  • 实现学生的奖惩信息管理
  • 创建规则用于限制性别项只能输入“男”或“女”
  • 创建视图查询各个学生的学号、姓名、班级、专业、院系
  • 创建存储过程查询指定学生的成绩单
  • 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级、学生人数
  • 建立数据库相关表之间的参照完整性约束

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


其余模块有 ×× 负责设计表结构,设计主页面,院系管理模块(增、删、查院系信息),专业管理模块(增、删、查专业信息),班级管理模块(增、删班级信息,班级人数查询);××× 负责设计视图,检查数据库各表参照完整性,数据库 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 数据库

二、系统设计


总体功能框架


f5bbd2690b9bfb0d6d8c7968d1a521a0.png


模块的详细设计


  • 选课:输入已有的学号和课程号,然后执行 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 语句查询出所有奖惩信息


三、数据库设计


概念结构设计


6675b3869e1f1327a75eccc9115fbf2e.png

逻辑结构设计


  • 院系(院系名) 主键=院系名
  • 专业(院系名,专业名) 主键=专业名 外键=院系名
  • 班级(专业名,班级号,班级人数) 主键=专业名、班级号 外键=专业名
  • 学生(学号,姓名,性别,出生年月,籍贯,专业名,班级号)
  • 主键=学号 外键=专业名、班级号
  • 课程(课程号,课程名,学分,执教教师) 主键=课程号
  • 选课(学号,课程号,分数) 主键=学号、课程号 外键=学号、课程号
  • 奖惩信息(id,学号,姓名,奖励信息,惩罚信息) 主键=id 外键=学号、姓名
  • 用户(用户名,密码) 主键=用户名


物理结构设计

学生信息表(stu_inf)


image.png


外键


image.png


课程信息表(course)


image.png


院系信息表(department)

image.png


专业信息表(major)


image.png

外键

image.png


班级信息表(class)


image.png


外键

image.png


选课信息表(stu_cou)


image.png


外键


image.png

奖惩信息表(stu_san)

image.png


外键

image.png


用户信息表(login)


image.png


学生信息视图


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;

四、运行结果和测试


运行界面及其效果图


8108855fea04d5df4dc9152bdcbaaa25.png

9d54ebf15bb5eb0bcce32f7df8e60590.png

fd556db94df3dceb426cb33813c36384.png

2b53f30f5bd2a3d5cb0ff85eb0b7dd0a.png

95f721c7a28db2d3d8996effb0b84269.pngf11689e027bb85c0bd5ab6fae8022ffb.png

653d97669dc98c9432d532aaeccaae65.png


8ed33e71647ccccfcea28cc183e55881.png


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


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


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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
53 3
|
21天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
22 1
|
23天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
26天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
5天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
13天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
4天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
|
4天前
|
Java 开发者
Java多线程编程的艺术与实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的技术文档,本文以实战为导向,通过生动的实例和详尽的代码解析,引领读者领略多线程编程的魅力,掌握其在提升应用性能、优化资源利用方面的关键作用。无论你是Java初学者还是有一定经验的开发者,本文都将为你打开多线程编程的新视角。 ####
|
3天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
9天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
32 9
下一篇
无影云桌面