[Java]基于JDBC的学生信息管理系统的实现

功能说明

工程代码:代码下载链接
(1) 新生入学信息增加,学生信息修改。
(2) 课程信息维护
(3) 录入学生成绩,修改学生成绩。
(4) 按系统计学生的平均成绩、最好成绩、最差成绩、优秀率、不及格人数。
(5) 按系对学生成绩进行排名,同时显示出学生、课程和成绩信息。
(6) 输入学号,显示该学生的基本信息和选课信息。

数据库系统实现

本实验基于JDBC,MySQL实现,图形界面使用Java Swing。初始化调用DriverManager类的静态函数getConnection获得数据库连接,通过连接对象的createStatement()函数获得表达式对象,进一步通过表达式对象的executeQuery()函数获得执行结果,存在ResultSet类的对象中。

0.建表过程

create table student(sno char(9) primary key,sname char(5),ssex enum(’男’,’女’,’未知’),sbirth year,sdept char(5));
create table course(cno char(3) primary key,cname varchar(20),ccredit float);
create table sc(sno char(9),cno char(3),grade smallint);

1.新生入学信息添加,学生信息修改

打开可视化图形界面,默认显示全部学生的信息

select * from student;

在这里插入图片描述
在顶部输入框输入学号,姓名,性别,出生年份,院系信息,点击插入按钮可插入学生信息,除学号外,其他信息都可以为空,数据库系统将检查学号的完整性,若不满足完整性检查,应用程序将弹出对话框提示。
如:插入一个已有的学号:

图5.2
插入的学号不满足9位数字的要求:
在这里插入图片描述
插入成功后,应用程序将弹出对话框提示,显示SQL语句,并更新表格:
在这里插入图片描述
修改学生信息时,只需双击要修改的表项,输入要修改的值即可,数据库将检查修改数据的完整性,若满足完整性要求,应用程序将弹出对话框提示修改成功并显示SQL语句,否则将弹出对话框提示相应的错误:
在这里插入图片描述
在这里插入图片描述
查询学籍信息时,只需在输入框输入需要查询的信息,点击查询按钮,数据库将进行模糊查询,并将查询结果显示:

图5.7

2.课程信息维护(增加新课程,修改课程信息,删除没有选课的课程信息)

点击顶部按钮课程管理,可进行课程信息维护,默认执行

select * from course;

在这里插入图片描述
在顶部输入框输入课程号,课程名,学分,点击插入按钮可插入课程信息,除课程号外,其他信息都可以为空,数据库将对输入的信息进行完整性检查,若满足完整性要求应用程序将弹出对话框显示对应的SQL语句并更新表格,否则将显示错误信息:
正确情况:
在这里插入图片描述
错误情况:
在这里插入图片描述
课程信息修改方式与学籍管理操作方式相同:
在这里插入图片描述在这里插入图片描述
课程信息的查询与学籍信息操作相同:
在这里插入图片描述
删除没有选课的课程信息,点击课程管理界面的删除按钮,数据库将扫描没有选课的课程,并将其删除。
在这里插入图片描述

3.录入学生成绩,修改学生成绩

点击顶部成绩管理按钮,应用程序显示所有学生所有课程的成绩,默认执行

select a.sno,a.sname,b,cno,b,cname,c.grade from student a,course b,sc c where a.sno=c.sno and b.cno=c.cno;

在这里插入图片描述
在顶部输入框中输入学号,课程号,成绩可插入学生成绩,数据库将检查数据完整性,满足完整性要求的即插入到数据库中,应用程序更新表格
在这里插入图片描述
在这里插入图片描述
修改学生成绩的方式与课程管理,学籍管理的操作相同:
在这里插入图片描述在这里插入图片描述

4. 按系统计学生的平均成绩、最好成绩、最差成绩、优秀率、不及格人数。

考虑到实际意义,用户必须输入院系名和课程名(课程名可模糊匹配 )才可计算该院系该课程的平均成绩,最好、最差成绩,优秀率和不及格人数。
应用程序首先通过数据库获得该院系选修该课程的学生人数,平均成绩,最好成绩,最差成绩。再对选出的所有成绩计数,计数优秀的人数和不及格的人数,优秀率=优秀的人数/总人数x100%,最后输出结果:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 按系对学生成绩进行排名,同时显示出学生、课程和成绩信息。

考虑到实际意义,用户必须输入院系名和课程名(课程名可模糊匹配 )才可计显示该院系该课程的排名信息。
在这里插入图片描述

核心代码部分

1.连接MySQL数据库

  1. 需先导入MySQL的JDBC依赖库,这个库可以很方便下载到,下载后导入到eclipse工程中;
  2. 定义MySQL类,作为SQL操作的工具类,构造函数定义如下
public MySql() {
		// 驱动程序名
		String driver = "com.mysql.cj.jdbc.Driver";
		// URL指向要访问的数据库名mydata
		String url = "jdbc:mysql://localhost:3306/e4?serverTimezone=UTC";//这个部分根据情况修改
		// MySQL配置时的用户名
		String user = "root";
		// MySQL配置时的密码
		String password = "123456";
		// 加载驱动程序
		try {
			Class.forName(driver);
			// 1.getConnection()方法,连接MySQL数据库!!
			con = DriverManager.getConnection(url, user, password);
			if (!con.isClosed()) {
				System.out.println("数据库连接成功!");
				statement = con.createStatement();
			}

		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			System.out.println("找不到驱动");
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
  1. 由于JDBC的查询语句和更新语句采用不同的函数,故定义查询函数和更新函数
public ResultSet select(String sql) throws SQLException {

		return statement.executeQuery(sql);

	}

	public void update(String sql) throws SQLException {

		statement.executeUpdate(sql);

	}

2.SQL查询

构造String类型的SQL语句,交由MySQL类的select函数执行,由一个ResultSet的对象保存结果,通过该对象的getString(“列名”)获得对应列的值,如

String sno = "'" + rs.getString("sno") + "'";
String sname = "'" + rs.getString("sname") + "'";
String ssex = "'" + rs.getString("ssex") + "'";
String sbirth = "'" + rs.getString("sbirth").substring(0, 4) + "'";
String sdept = "'" + rs.getString("sdept") + "'";

3.SQL更新和插入

与SQL查询类似,但更新和插入都使用MySQL类的update函数执行

String sql = "insert into student (sno,sname,ssex,sbirth,sdept) values (" + sno + "," + sname + "," + ssex + ","
				+ sbirth + "," + sdept + ")";
		try {
			mySql.update(sql);
			lblRes.setText("<html>" + lblString + sql + "</html>");
		}

总结

这是一次数据库系统原理的实验,在本次实验中,我利用JDBC连接MySQL数据库设计了一个学生-课程-成绩管理系统,在数据库系统设计中遵循的概念结构设计和逻辑结构设计。
在实验中使用了Java提供的JDBC连接MySQL数据库,出现过一些问题。比如连接数据库出现错误,无法读出数据或数据是乱码,经检查是编码方式的问题;数据库无法更新数据,是因为使用的execute函数的问题等。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值