当前位置:文档之家› 广工数据库课程设计说课讲解

广工数据库课程设计说课讲解

广工数据库课程设计教师信息管理系统题目名称专业班级学号学生姓名指导教师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.用户信息3 用户组字符型 6三、概念结构设计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.创建教师信息表CREATE TABLE教师信息表(职工号INT NOT NULL PRIMARY KEY,教师姓名CHAR(10),年龄INT CHECK(年龄>=18 AND年龄<=60),性别CHAR(2)CHECK(性别IN('男','女')))2. 创建课程表CREATE TABLE课程表(课程号INT NOT NULL PRIMARY KEY,课程名CHAR(16),学分INT)3. 创建课程评价表CREATE TABLE课程评价表(职工号INT,课程号INT,等级CHAR(2)CHECK(等级IN('优','良','中','差')),PRIMARY KEY(职工号,课程号),FOREIGN KEY (职工号)REFERENCES教师信息表(职工号),FOREIGN KEY (课程号)REFERENCES课程表(课程号))4. 创建奖金表CREATE TABLE奖金表(等级CHAR(2)CHECK(等级IN('优','良','中','差'))PRIMARY KEY,奖金INT)5. 创建用户表CREATE TABLE用户表(登录名CHAR(8)NOT NULL PRIMARY KEY,密码INT,用户组CHAR(6))6.各表元组INSERT INTO教师信息表VALUES(201501,'翁嘉民',20,'男') INSERT INTO教师信息表VALUES(201502,'陈天翔',19,'男') INSERT INTO教师信息表VALUES(201503,'周诗妍',21,'女') INSERT INTO教师信息表VALUES(201504,'宋嘉莹',20,'女') INSERT INTO课程表VALUES(100,'语文',5)INSERT INTO课程表VALUES(101,'数学',5)INSERT INTO课程表VALUES(102,'英语',4)INSERT INTO课程表VALUES(103,'物理',3)INSERT INTO课程表VALUES(104,'化学',3)INSERT INTO课程表VALUES(105,'生物',3)INSERT INTO课程表VALUES(106,'地理',3)INSERT INTO课程表VALUES(107,'历史',3)INSERT INTO课程表VALUES(108,'政治',3)INSERT INTO课程评价表VALUES(201501,100,'优') INSERT INTO课程评价表VALUES(201501,107,'良') INSERT INTO课程评价表VALUES(201501,108,'优') INSERT INTO课程评价表VALUES(201502,101,'良') INSERT INTO课程评价表VALUES(201502,103,'良') INSERT INTO课程评价表VALUES(201502,106,'优') INSERT INTO课程评价表VALUES(201503,102,'中') INSERT INTO课程评价表VALUES(201503,105,'良')INSERT INTO课程评价表VALUES(201503,107,'优')INSERT INTO课程评价表VALUES(201504,104,'良')INSERT INTO课程评价表VALUES(201504,105,'优')INSERT INTO课程评价表VALUES(201504,106,'良')INSERT INTO奖金表VALUES('1','优',8000)INSERT INTO奖金表VALUES('2','良',4000)INSERT INTO奖金表VALUES('3','中',2000)INSERT INTO奖金表VALUES('4','差',0)INSERT INTO用户表VALUES('admin',123,'管理员')INSERT INTO用户表VALUES('admin2',456,'管理员')七、数据库运行和维护主要窗口截图主要代码1. 数据库的连接Connection con=null;StringJ Driver="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. 更新函数public static void 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. 增加函数public static void 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. 连接查询public static void 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. 分组求和public static void 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的课程信息。

相关主题