工程代码:代码下载链接
(1) 新生入学信息增加,学生信息修改。
(2) 课程信息维护
(3) 录入学生成绩,修改学生成绩。
(4) 按系统计学生的平均成绩、最好成绩、最差成绩、优秀率、不及格人数。
(5) 按系对学生成绩进行排名,同时显示出学生、课程和成绩信息。
(6) 输入学号,显示该学生的基本信息和选课信息。
本实验基于JDBC,MySQL实现,图形界面使用Java Swing。初始化调用DriverManager类的静态函数getConnection获得数据库连接,通过连接对象的createStatement()函数获得表达式对象,进一步通过表达式对象的executeQuery()函数获得执行结果,存在ResultSet类的对象中。
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);
打开可视化图形界面,默认显示全部学生的信息
select * from student;
在顶部输入框输入学号,姓名,性别,出生年份,院系信息,点击插入按钮可插入学生信息,除学号外,其他信息都可以为空,数据库系统将检查学号的完整性,若不满足完整性检查,应用程序将弹出对话框提示。
如:插入一个已有的学号:
插入的学号不满足9位数字的要求:
插入成功后,应用程序将弹出对话框提示,显示SQL语句,并更新表格:
修改学生信息时,只需双击要修改的表项,输入要修改的值即可,数据库将检查修改数据的完整性,若满足完整性要求,应用程序将弹出对话框提示修改成功并显示SQL语句,否则将弹出对话框提示相应的错误:
查询学籍信息时,只需在输入框输入需要查询的信息,点击查询按钮,数据库将进行模糊查询,并将查询结果显示:
点击顶部按钮课程管理,可进行课程信息维护,默认执行
select * from course;
在顶部输入框输入课程号,课程名,学分,点击插入按钮可插入课程信息,除课程号外,其他信息都可以为空,数据库将对输入的信息进行完整性检查,若满足完整性要求应用程序将弹出对话框显示对应的SQL语句并更新表格,否则将显示错误信息:
正确情况:
错误情况:
课程信息修改方式与学籍管理操作方式相同:
课程信息的查询与学籍信息操作相同:
删除没有选课的课程信息,点击课程管理界面的删除按钮,数据库将扫描没有选课的课程,并将其删除。
点击顶部成绩管理按钮,应用程序显示所有学生所有课程的成绩,默认执行
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;
在顶部输入框中输入学号,课程号,成绩可插入学生成绩,数据库将检查数据完整性,满足完整性要求的即插入到数据库中,应用程序更新表格
修改学生成绩的方式与课程管理,学籍管理的操作相同:
考虑到实际意义,用户必须输入院系名和课程名(课程名可模糊匹配 )才可计算该院系该课程的平均成绩,最好、最差成绩,优秀率和不及格人数。
应用程序首先通过数据库获得该院系选修该课程的学生人数,平均成绩,最好成绩,最差成绩。再对选出的所有成绩计数,计数优秀的人数和不及格的人数,优秀率=优秀的人数/总人数x100%,最后输出结果:
考虑到实际意义,用户必须输入院系名和课程名(课程名可模糊匹配 )才可计显示该院系该课程的排名信息。
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();
}
}
public ResultSet select(String sql) throws SQLException {
return statement.executeQuery(sql);
}
public void update(String sql) throws SQLException {
statement.executeUpdate(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") + "'";
与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("" + lblString + sql + "");
}
这是一次数据库系统原理的实验,在本次实验中,我利用JDBC连接MySQL数据库设计了一个学生-课程-成绩管理系统,在数据库系统设计中遵循的概念结构设计和逻辑结构设计。
在实验中使用了Java提供的JDBC连接MySQL数据库,出现过一些问题。比如连接数据库出现错误,无法读出数据或数据是乱码,经检查是编码方式的问题;数据库无法更新数据,是因为使用的execute函数的问题等。