教师信息管理系统
题目名称 专业班级 学 号 学生姓名 指导教师
2016 年 3 月 26 日
一、实验环境
硬件环境:
处理器:Intel(R) Core(TM) i5-3230M CPU @ 2.60FHz 2.60GHz 已安装的内存(RMA): 4.00GB 软件环境
操作系统: Windows 10 数据库管理系统: SQL Server 2008 开发工具: Eclipse
二、需求分析
信息需求
教师信息(职工号,教师姓名,年龄,性别) 课程信息(课程号,课程名,学分) 课程评价信息(职工号,课程号,等级) 奖金信息(序号,等级,奖金) 用户信息(登录名,密码,用户组) 功能需求 1. 教师用户:
(1)对教师信息、课程信息、课程评价、奖金信息的查询。 2. 管理员
(1)对教师信息、课程信息、课程评价的查询,修改,增加,删除; (2)对教师的奖金等信息的查询,修改。 安全性与完整性需求
1. 不同的身份有不同的功能权限。
2. 实体完整性:通过设置主键都已实现。 数据字典
该软件的数据库由下述信息组成: 1.
2.
3. 课程评价信息
4.
5.
三、概念结构设计
1. 教师信息实体
2. 课程实体
3. 课程评价实体
4. 奖金实体
5. 用户实体
概念模型:E-R图
四、逻辑结构设计
关系模型
教师信息表(职工号,教师姓名,年龄,性别),其主码为职工号。 课程表(课程号,课程名,学分),其主码为课程号。 课程评价表(职工号,课程号,等级),其主码为职工号与课程号。 奖金表(序号,等级,奖金),其主码为序号。 用户表(登录名,密码,用户组),其主码为登录名。 用户子模式
应用程序功能模块图
安全性
该系统的用户只有两种,一种是管理员,另一种是教师,管理员具有对数据库操作的所有权限,教师只有对教师的信息、课程信息、课程评价、奖金信息的查询权限。 完整性
实体完整性:通过设置主键都已实现。 参照完整性:课程评价表中的职工号和课程号分别参照教师信息表中的职工号和课程表中的课程号。
用户自定义完整性:教师信息表中的年龄必须在18到60之间,性别必须为男、女,课程评价表和奖金表中的等级必须为优、良、中、差。
五、数据库物理设计
数据的存放位置说明
D:\Program Files \Microsoft SQL Server\ MSSQL10_50.SQLEXPRESS\MSSQL\DATA 系统配置说明
使用登录名:sa 登陆密码:123 登陆SQL Server 2008 模块设计(模块IPO 图)
六、数据库实施
1. 创建教师信息表
CREATETABLE 教师信息表
(职工号INT NOTNULL PRIMARYKEY , 教师姓名CHAR (10),
年龄INTCHECK (年龄>=18 AND 年龄
2. 创建课程表
CREATETABLE 课程表
(课程号INT NOTNULL PRIMARYKEY , 课程名CHAR (16), 学分INT )
3. 创建课程评价表
CREATETABLE 课程评价表 (职工号INT , 课程号INT ,
等级CHAR (2) CHECK (等级IN(' 优' , ' 良' , ' 中' , ' 差' )), PRIMARYKEY (职工号, 课程号),
FOREIGNKEY (职工号) REFERENCES 教师信息表(职工号), FOREIGNKEY (课程号) REFERENCES 课程表(课程号) )
4. 创建奖金表
CREATETABLE 奖金表
(等级CHAR (2) CHECK (等级IN(' 优' , ' 良' , ' 中' , ' 差' )) PRIMARYKEY , 奖金INT )
5. 创建用户表
CREATETABLE 用户表
(登录名CHAR (8)NOTNULL PRIMARYKEY , 密码INT ,
用户组CHAR (6) )
6. 各表元组
INSERTINTO 教师信息表V ALUES (201501, ' 翁嘉民' , 20, ' 男' ) INSERTINTO 教师信息表V ALUES (201502, ' 陈天翔' , 19, ' 男' ) INSERTINTO 教师信息表V ALUES (201503, ' 周诗妍' , 21, ' 女' ) INSERTINTO 教师信息表V ALUES (201504, ' 宋嘉莹' , 20, ' 女' )
INSERTINTO 课程表V ALUES (100, ' 语文' , 5) INSERTINTO 课程表V ALUES (101, ' 数学' , 5) INSERTINTO 课程表V ALUES (102, ' 英语' , 4) INSERTINTO 课程表V ALUES (103, ' 物理' , 3) INSERTINTO 课程表V ALUES (104, ' 化学' , 3)
INSERTINTO 课程表V ALUES (105, ' 生物' , 3) INSERTINTO 课程表V ALUES (106, ' 地理' , 3) INSERTINTO 课程表V ALUES (107, ' 历史' , 3) INSERTINTO 课程表V ALUES (108, ' 政治' , 3)
INSERTINTO 课程评价表V ALUES (201501, 100, ' 优' ) INSERTINTO 课程评价表V ALUES (201501, 107, ' 良' ) INSERTINTO 课程评价表V ALUES (201501, 108, ' 优' ) INSERTINTO 课程评价表V ALUES (201502, 101, ' 良' ) INSERTINTO 课程评价表V ALUES (201502, 103, ' 良' ) INSERTINTO 课程评价表V ALUES (201502, 106, ' 优' ) INSERTINTO 课程评价表V ALUES (201503, 102, ' 中' ) INSERTINTO 课程评价表V ALUES (201503, 105, ' 良' ) INSERTINTO 课程评价表V ALUES (201503, 107, ' 优' ) INSERTINTO 课程评价表V ALUES (201504, 104, ' 良' ) INSERTINTO 课程评价表V ALUES (201504, 105, ' 优' ) INSERTINTO 课程评价表V ALUES (201504, 106, ' 良' )
INSERTINTO 奖金表V ALUES ('1' , ' 优' , 8000) INSERTINTO 奖金表V ALUES ('2' , ' 良' , 4000) INSERTINTO 奖金表V ALUES ('3' , ' 中' , 2000) INSERTINTO 奖金表V ALUES ('4' , ' 差' , 0)
INSERTINTO 用户表V ALUES ('admin' , 123, ' 管理员' ) INSERTINTO 用户表V ALUES ('admin2' , 456, ' 管理员' )
七、数据库运行和维护
主要窗口截图
主要代码
1. 数据库的连接 Connection con=null ; StringJDriver
="com.microsoft.sqlserver.jdbc.SQLServerDriver" ; //SQL数据库引擎 String connectDB
="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Teacher"; //数据源注意IP
地址和
端口号,数据库名字 Teacher 为数据库名 try {
Class. forName (JDriver);//加载数据库引擎,返回给定字符串名的类 }catch (ClassNotFoundException e) {
//e.printStackTrace();
System. out .println(" 加载数据库引擎失败" ); System. exit (0);} try {
String user="sa" ; //你自己创建的用户名字和密码 String password="fuxiao456" ;
con=DriverManager.getConnection (connectDB,user,password);//连接数据库对象 Statement stmt=con.createStatement();//创建SQL 命令对象 //关闭连接
stmt.close();//关闭命令对象连接 con.close();//关闭数据库连接 }
catch (SQLException e) {
e.printStackTrace();
//System.out.println("数据库连接错误"); System. exit (0); }
2. 更新函数
publicstaticvoid function10(String id17,String id18,String id19,Connection con) {
int a = 0; try { String sql = "update 课程评价表 set 等级=? where 职工号=? and 课程号=?"; PreparedStatement stmta = con.prepareStatement(sql); //执行SQL 语句 stmta.setString(1, id19); //用id27的字符串代替SQL 语句中的第一个? stmta.setString(2, id17); //用id27的字符串代替SQL 语句中的第二个? stmta.setString(3, id18); //用id27的字符串代替SQL 语句中的第三个? a=stmta.executeUpdate(); //将受影响的行数赋值给a
}
catch (Exception e) {
}
if (a==1) System.out .println(" 修改成功" ); //通过受影响的行数来判断SQL 语句是否执行成功
if (a==0) System.out .println(" 修改失败" );
}
3. 增加函数
publicstaticvoid function11(String id20,String id21,String id22,Connection con) {
int a = 0;
try {
String sql = "insert into 课程评价表 values(?,?,?)";
PreparedStatement stmta = con.prepareStatement(sql);//执行SQL 语句 stmta.setString(1, id20);//用id20的字符串代替SQL 语句中的第一个?
stmta.setString(2, id21);//用id21的字符串代替SQL 语句中的第一个?
stmta.setString(3, id22);//用id22的字符串代替SQL 语句中的第一个?
a=stmta.executeUpdate();//将受影响的行数赋值给a
}
catch (Exception e) {
}
if (a==1) System.out .println(" 插入成功" );//通过受影响的行数来判断SQL 语句是否执行成功
if (a==0) System.out .println(" 插入失败" );
}
4. 连接查询
publicstaticvoid function15(String id27,Connection con) {
try {
String sql = "select 教师信息表. 职工号, 教师信息表. 教师姓名, 课程名, 学分, 奖金表. 等级, 奖金 from 教师信息表, 课程表, 课程评价表, 奖金表 where 教师信息表. 职工号=课程评价表. 职工号 and 课程表. 课程号=课程评价表. 课程号 and 课程评价表. 等级=奖金表. 等级 and 教师信息表. 职工号=?";
PreparedStatement stmta = con.prepareStatement(sql); //执行SQL 语句 stmta.setString(1, id27); //用id27的字符串代替SQL 语句中的第一个? ResultSet rs = stmta.executeQuery();
System. out .println(" 职工号" +"\t"+" 教师姓名" +"\t"+" 课程名" +"\t"+" 学分" +"\t"+" 等级" +"\t"+" 奖金" );
while (rs.next()) { //输出选择结果
System. out .println(rs.getString(" 职工号" )+"\t"+rs.getString(" 教师姓名" )+"\t"+rs.getString(" 课程名" )+rs.getString(" 学分" )+"\t"+rs.getString(" 等级" )+"\t"+rs.getString(" 奖金" ));
}
}
catch (Exception e) {
}
}
5. 分组求和
publicstaticvoid function19(Connection con) {
try {
String sql = "select 教师信息表. 职工号, 教师信息表. 教师姓名,sum(奖金) as 总奖金 from 教师信息表, 课程评价表, 奖金表 where 教师信息表. 职工号=课程评价表. 职工号 and 课程评价表. 等级=奖金表. 等级 group by 教师信息表. 教师姓名, 教师信息表. 职工号" ;
PreparedStatement stmta = con.prepareStatement(sql);
ResultSet rs = stmta.executeQuery();
System. out .println(" 职工号" +"\t"+" 教师姓名" +"\t"+" 总奖金" ); while (rs.next()) {
System. out .println(rs.getString(" 职工号" )+"\t"+rs.getString(" 教师姓名" )+"\t"+rs.getString(" 总奖金" ));
}
}
catch (Exception e) {
}
}
系统测试方案
1. 查询职工号为201502的教师信息;
2. 修改课程号为102的学分为3;
3. 在课程评价表中增加职工号为201503,课程号为103,等级为优的元组;
4. 在课程评价表中删除职工号为201502,课程号为101的元组;
5. 查询职工号为201501的课程信息。
6. 查询每个老师获得的总奖金
测试截图
1.
3.
4.
5.
八、系统安装说明
1. 在SQL Server数据库新建Teacher 数据库;
2. 在SQL Server Teacher数据库中建立查询,执行SQL 语句;
3. 在Eclipse 运行教师信息管理系统代码。
九、收获和体会
通过本次课程设计,熟悉掌握了表的创建,数据的录入,元组的增删改查以及数据库的完整性、安全性,了解了如何使用Eclipse 连接SQL Server 2008。课设系统能实现对表的增删改查,但不能实现在线注册用户。
教师信息管理系统
题目名称 专业班级 学 号 学生姓名 指导教师
2016 年 3 月 26 日
一、实验环境
硬件环境:
处理器:Intel(R) Core(TM) i5-3230M CPU @ 2.60FHz 2.60GHz 已安装的内存(RMA): 4.00GB 软件环境
操作系统: Windows 10 数据库管理系统: SQL Server 2008 开发工具: Eclipse
二、需求分析
信息需求
教师信息(职工号,教师姓名,年龄,性别) 课程信息(课程号,课程名,学分) 课程评价信息(职工号,课程号,等级) 奖金信息(序号,等级,奖金) 用户信息(登录名,密码,用户组) 功能需求 1. 教师用户:
(1)对教师信息、课程信息、课程评价、奖金信息的查询。 2. 管理员
(1)对教师信息、课程信息、课程评价的查询,修改,增加,删除; (2)对教师的奖金等信息的查询,修改。 安全性与完整性需求
1. 不同的身份有不同的功能权限。
2. 实体完整性:通过设置主键都已实现。 数据字典
该软件的数据库由下述信息组成: 1.
2.
3. 课程评价信息
4.
5.
三、概念结构设计
1. 教师信息实体
2. 课程实体
3. 课程评价实体
4. 奖金实体
5. 用户实体
概念模型:E-R图
四、逻辑结构设计
关系模型
教师信息表(职工号,教师姓名,年龄,性别),其主码为职工号。 课程表(课程号,课程名,学分),其主码为课程号。 课程评价表(职工号,课程号,等级),其主码为职工号与课程号。 奖金表(序号,等级,奖金),其主码为序号。 用户表(登录名,密码,用户组),其主码为登录名。 用户子模式
应用程序功能模块图
安全性
该系统的用户只有两种,一种是管理员,另一种是教师,管理员具有对数据库操作的所有权限,教师只有对教师的信息、课程信息、课程评价、奖金信息的查询权限。 完整性
实体完整性:通过设置主键都已实现。 参照完整性:课程评价表中的职工号和课程号分别参照教师信息表中的职工号和课程表中的课程号。
用户自定义完整性:教师信息表中的年龄必须在18到60之间,性别必须为男、女,课程评价表和奖金表中的等级必须为优、良、中、差。
五、数据库物理设计
数据的存放位置说明
D:\Program Files \Microsoft SQL Server\ MSSQL10_50.SQLEXPRESS\MSSQL\DATA 系统配置说明
使用登录名:sa 登陆密码:123 登陆SQL Server 2008 模块设计(模块IPO 图)
六、数据库实施
1. 创建教师信息表
CREATETABLE 教师信息表
(职工号INT NOTNULL PRIMARYKEY , 教师姓名CHAR (10),
年龄INTCHECK (年龄>=18 AND 年龄
2. 创建课程表
CREATETABLE 课程表
(课程号INT NOTNULL PRIMARYKEY , 课程名CHAR (16), 学分INT )
3. 创建课程评价表
CREATETABLE 课程评价表 (职工号INT , 课程号INT ,
等级CHAR (2) CHECK (等级IN(' 优' , ' 良' , ' 中' , ' 差' )), PRIMARYKEY (职工号, 课程号),
FOREIGNKEY (职工号) REFERENCES 教师信息表(职工号), FOREIGNKEY (课程号) REFERENCES 课程表(课程号) )
4. 创建奖金表
CREATETABLE 奖金表
(等级CHAR (2) CHECK (等级IN(' 优' , ' 良' , ' 中' , ' 差' )) PRIMARYKEY , 奖金INT )
5. 创建用户表
CREATETABLE 用户表
(登录名CHAR (8)NOTNULL PRIMARYKEY , 密码INT ,
用户组CHAR (6) )
6. 各表元组
INSERTINTO 教师信息表V ALUES (201501, ' 翁嘉民' , 20, ' 男' ) INSERTINTO 教师信息表V ALUES (201502, ' 陈天翔' , 19, ' 男' ) INSERTINTO 教师信息表V ALUES (201503, ' 周诗妍' , 21, ' 女' ) INSERTINTO 教师信息表V ALUES (201504, ' 宋嘉莹' , 20, ' 女' )
INSERTINTO 课程表V ALUES (100, ' 语文' , 5) INSERTINTO 课程表V ALUES (101, ' 数学' , 5) INSERTINTO 课程表V ALUES (102, ' 英语' , 4) INSERTINTO 课程表V ALUES (103, ' 物理' , 3) INSERTINTO 课程表V ALUES (104, ' 化学' , 3)
INSERTINTO 课程表V ALUES (105, ' 生物' , 3) INSERTINTO 课程表V ALUES (106, ' 地理' , 3) INSERTINTO 课程表V ALUES (107, ' 历史' , 3) INSERTINTO 课程表V ALUES (108, ' 政治' , 3)
INSERTINTO 课程评价表V ALUES (201501, 100, ' 优' ) INSERTINTO 课程评价表V ALUES (201501, 107, ' 良' ) INSERTINTO 课程评价表V ALUES (201501, 108, ' 优' ) INSERTINTO 课程评价表V ALUES (201502, 101, ' 良' ) INSERTINTO 课程评价表V ALUES (201502, 103, ' 良' ) INSERTINTO 课程评价表V ALUES (201502, 106, ' 优' ) INSERTINTO 课程评价表V ALUES (201503, 102, ' 中' ) INSERTINTO 课程评价表V ALUES (201503, 105, ' 良' ) INSERTINTO 课程评价表V ALUES (201503, 107, ' 优' ) INSERTINTO 课程评价表V ALUES (201504, 104, ' 良' ) INSERTINTO 课程评价表V ALUES (201504, 105, ' 优' ) INSERTINTO 课程评价表V ALUES (201504, 106, ' 良' )
INSERTINTO 奖金表V ALUES ('1' , ' 优' , 8000) INSERTINTO 奖金表V ALUES ('2' , ' 良' , 4000) INSERTINTO 奖金表V ALUES ('3' , ' 中' , 2000) INSERTINTO 奖金表V ALUES ('4' , ' 差' , 0)
INSERTINTO 用户表V ALUES ('admin' , 123, ' 管理员' ) INSERTINTO 用户表V ALUES ('admin2' , 456, ' 管理员' )
七、数据库运行和维护
主要窗口截图
主要代码
1. 数据库的连接 Connection con=null ; StringJDriver
="com.microsoft.sqlserver.jdbc.SQLServerDriver" ; //SQL数据库引擎 String connectDB
="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Teacher"; //数据源注意IP
地址和
端口号,数据库名字 Teacher 为数据库名 try {
Class. forName (JDriver);//加载数据库引擎,返回给定字符串名的类 }catch (ClassNotFoundException e) {
//e.printStackTrace();
System. out .println(" 加载数据库引擎失败" ); System. exit (0);} try {
String user="sa" ; //你自己创建的用户名字和密码 String password="fuxiao456" ;
con=DriverManager.getConnection (connectDB,user,password);//连接数据库对象 Statement stmt=con.createStatement();//创建SQL 命令对象 //关闭连接
stmt.close();//关闭命令对象连接 con.close();//关闭数据库连接 }
catch (SQLException e) {
e.printStackTrace();
//System.out.println("数据库连接错误"); System. exit (0); }
2. 更新函数
publicstaticvoid function10(String id17,String id18,String id19,Connection con) {
int a = 0; try { String sql = "update 课程评价表 set 等级=? where 职工号=? and 课程号=?"; PreparedStatement stmta = con.prepareStatement(sql); //执行SQL 语句 stmta.setString(1, id19); //用id27的字符串代替SQL 语句中的第一个? stmta.setString(2, id17); //用id27的字符串代替SQL 语句中的第二个? stmta.setString(3, id18); //用id27的字符串代替SQL 语句中的第三个? a=stmta.executeUpdate(); //将受影响的行数赋值给a
}
catch (Exception e) {
}
if (a==1) System.out .println(" 修改成功" ); //通过受影响的行数来判断SQL 语句是否执行成功
if (a==0) System.out .println(" 修改失败" );
}
3. 增加函数
publicstaticvoid function11(String id20,String id21,String id22,Connection con) {
int a = 0;
try {
String sql = "insert into 课程评价表 values(?,?,?)";
PreparedStatement stmta = con.prepareStatement(sql);//执行SQL 语句 stmta.setString(1, id20);//用id20的字符串代替SQL 语句中的第一个?
stmta.setString(2, id21);//用id21的字符串代替SQL 语句中的第一个?
stmta.setString(3, id22);//用id22的字符串代替SQL 语句中的第一个?
a=stmta.executeUpdate();//将受影响的行数赋值给a
}
catch (Exception e) {
}
if (a==1) System.out .println(" 插入成功" );//通过受影响的行数来判断SQL 语句是否执行成功
if (a==0) System.out .println(" 插入失败" );
}
4. 连接查询
publicstaticvoid function15(String id27,Connection con) {
try {
String sql = "select 教师信息表. 职工号, 教师信息表. 教师姓名, 课程名, 学分, 奖金表. 等级, 奖金 from 教师信息表, 课程表, 课程评价表, 奖金表 where 教师信息表. 职工号=课程评价表. 职工号 and 课程表. 课程号=课程评价表. 课程号 and 课程评价表. 等级=奖金表. 等级 and 教师信息表. 职工号=?";
PreparedStatement stmta = con.prepareStatement(sql); //执行SQL 语句 stmta.setString(1, id27); //用id27的字符串代替SQL 语句中的第一个? ResultSet rs = stmta.executeQuery();
System. out .println(" 职工号" +"\t"+" 教师姓名" +"\t"+" 课程名" +"\t"+" 学分" +"\t"+" 等级" +"\t"+" 奖金" );
while (rs.next()) { //输出选择结果
System. out .println(rs.getString(" 职工号" )+"\t"+rs.getString(" 教师姓名" )+"\t"+rs.getString(" 课程名" )+rs.getString(" 学分" )+"\t"+rs.getString(" 等级" )+"\t"+rs.getString(" 奖金" ));
}
}
catch (Exception e) {
}
}
5. 分组求和
publicstaticvoid function19(Connection con) {
try {
String sql = "select 教师信息表. 职工号, 教师信息表. 教师姓名,sum(奖金) as 总奖金 from 教师信息表, 课程评价表, 奖金表 where 教师信息表. 职工号=课程评价表. 职工号 and 课程评价表. 等级=奖金表. 等级 group by 教师信息表. 教师姓名, 教师信息表. 职工号" ;
PreparedStatement stmta = con.prepareStatement(sql);
ResultSet rs = stmta.executeQuery();
System. out .println(" 职工号" +"\t"+" 教师姓名" +"\t"+" 总奖金" ); while (rs.next()) {
System. out .println(rs.getString(" 职工号" )+"\t"+rs.getString(" 教师姓名" )+"\t"+rs.getString(" 总奖金" ));
}
}
catch (Exception e) {
}
}
系统测试方案
1. 查询职工号为201502的教师信息;
2. 修改课程号为102的学分为3;
3. 在课程评价表中增加职工号为201503,课程号为103,等级为优的元组;
4. 在课程评价表中删除职工号为201502,课程号为101的元组;
5. 查询职工号为201501的课程信息。
6. 查询每个老师获得的总奖金
测试截图
1.
3.
4.
5.
八、系统安装说明
1. 在SQL Server数据库新建Teacher 数据库;
2. 在SQL Server Teacher数据库中建立查询,执行SQL 语句;
3. 在Eclipse 运行教师信息管理系统代码。
九、收获和体会
通过本次课程设计,熟悉掌握了表的创建,数据的录入,元组的增删改查以及数据库的完整性、安全性,了解了如何使用Eclipse 连接SQL Server 2008。课设系统能实现对表的增删改查,但不能实现在线注册用户。