高校教师信息数据库需求分析
数据需求分析
目前国家的教育体制正处在不断改革、创新的阶段,我国教育部门充分吸取国外优秀的教学模式,结合国内多年的办学经验,逐步探索出适合中国特色的教学形式,国家教育部面向各级各类学校开展了全面学分制改革。教育部为了实现党的十五大所确定的目标与任务,落实科教兴国战略,特制定了《面向21世纪教育振兴行动计划》,其中讲到“开发高质量教育软件,重点建设全国远程教育资源库和若干个教育软件开发生产基地”。
因此,各院校迫切需要对自己的现有教务管理系统进行改进和提高,根据国内大学的现在管理模式,结合国际新的思想观念,在校园网络环境下建设先进的、与国际水平接轨的信息化管理平台。提高学校管理工作的现代化水平,推广现代教育技术在教学实践中的运用,促进教育整体质量和办学效益的提高。使之成为学校公共信息服务体系的重要组成部分。在这样的大环境下,开发和完善高校教务信息管理系统是目前各高校的迫切需求。
处理需求分析
1、教师基本信息的录入与增加
录入要方便用户把各种数据资料录入到系统将要新建的文本文件中,还要求能进行修改和浏览。这些数据包含教师的工号,姓名,性别,身份证号,婚姻状况,联系方式,家庭住址,政治面貌,所在系id。
2、教师信息的修改
能修改存储在文件中的教师的工号,姓名,性别,身份证号,婚姻状况,联系方式,家庭住址,政治面貌,所在系id。
3、教师信息的查询
能查询存储在文件中的教师的工号,姓名,性别,身份证号,婚姻状况,联系方式,家庭住址,政治面貌,所在系id。
4、教师信息的删除
能存储在文件中的教师的工号,姓名,性别,身份证号,婚姻状况,联系方式,家庭住址,政治面貌,所在系id。
5、院、系号的录入
院、系信息管理包括院、系信息数据的录入,修改与删除等功能。
6、院、系名的查询
能查询在储存在文件中的所在院、系号,院、系名并且查询各个系的老师信息。
7、课程表的录入
输入课程号,课程名,学时,学分,上课教室,所在学期。
8、学生信息表的录入
9、教师所授课程的查询
输入教师id查询该教师所有教授课程以及上课的学生。
数据库与对应scala类的设计
设计局部E-R模型
确定局部结构范围
教师基本信息:工号,姓名,性别,身份证号,婚姻状况,联系方式,家庭住址,政治面貌,所在系id
学院信息:学院id,学院名
系信息:系id,系名,所属学院id
课程信息:课程号,课程名,学时,学分,教室,学期
学生信息:学号,姓名,所属系id,上课号
图 2.1实体关系图
一名教师可以授多门课,一门课程可由多名教师上;一名学生可以选择多门课程,一门课程可由多名学生选择;一名教师属于一个系,一个系可以有多个教师;一名学生属于一个系,一个系可有多名学生;一个学院有多个系,一个系只能属于一个学院。
定义实体和属性
表 2.1实体与属性图
实体 | 属性 |
教师 | 工号,姓名,性别,身份证号,婚姻状况,联系方式,家庭住址,政治面貌,所在系id |
院 | 学院id,学院名 |
系 | 系id,系名,所属学院id |
课程 | 课程号,课程名,学时,学分,学期,教室 |
学生 | 学号,姓名,所属系id,上课号 |
设计与实体相对应的类
表 2.2实体与类对应关系图
实体 | 类名 |
教师 | teacher |
院 | institute |
系 | department |
课程 | course |
学生 | student |
局部E-R模型的合并
图 2.2教师E-R图
图 2.3课程E-R图
图 2.4院E-R图
图 2.5系E-R图
图 2.6学生E-R图
设计全局E-R模型
图 2.7全局E-R图
类图设计
图 2.8类图
数据库逻辑结构设计与scala类中的属性分析
全局E-R模型转换成关系数据模型
教师(工号,联系方式,姓名,性别,家庭住址,政治面貌,婚姻状况,身份证号,所在系id)主键:工号,外键:所在系id
院(学院id,学院名)主键:学院id
系(系id,系名,学院id)主键:系id,外键:学院id
课程(课程号,学时,学分,课程名,教室,学期)主键:课程号
学生(学号,姓名,所属系id,课程号)主键:学号,外键:所属系id,课程号
关系数据模型的优化
消除冲突
1.属性冲突
系实体中的学院id号与院的学院id号属性冲突。
·解决方法:引用外键
2.结构冲突:无
3.命名冲突
学生实体中的课程号与课程实体中课程号命名冲突。
·解决方法:改为课程号和上课号。
关系数据模式优化
教师(工号,联系方式,姓名,性别,家庭住址,政治面貌,婚姻状况,身份证号,所在系id)主键:工号
院(学院id,学院名)主键:学院id
系(系id,系名,所属院id)主键:系id,外键:所属院id
课程(课程号,学时,学分,课程名,教室,学期)主键:课程号
学生(学号,姓名,所属系id,上课号)主键:学号,外键:所属系id,上课号
设计各数据表中数据所对应scala设计类中的属性
people类:
图 3.1people类属性
teacher类:
图 3.2teacher类属性
student类:
图 3.3student类属性
institute类:
图 3.4institute类属性
departments类:
图 3.5departments类属性
course类:
图 3.6course类属性
数据库物理结构设计与scala驱动数据库的代码说明
确定记录的存储格式及设计完整性和安全性
表 4.1教师表
teacher | ||
列名 | 类型 | 备注 |
id(工号) | int | primary key |
name(姓名) | varchar | not null |
sex(性别) | varchar | check 约束‘男’‘女’ |
id_card(身份证号) | varchar | not null and unique |
location(家庭住址) | varchar | not null |
tele(联系方式) | varchar | not null |
politics(政治面貌) | varchar | not null and check |
marriage(婚姻状况) | varchar | check 约束‘是’‘否’ |
id_SuozaiXi(所在系id) | int | not null |
表 4.2院信息表
institute | ||
列名 | 类型 | 备注 |
id_Xueyua(学院id) | int | primary key |
name_Xueyua(学院名) | varchar | not null |
表 4.3系信息表
departments | ||
列名 | 类型 | 备注 |
id_Xi(系id) | int | primary key |
name_Xi(系名) | varchar | not null |
id_SuoShuXueyuan(所属学院id) | int | not null |
表 4.4必修课课程表
b_course | ||
列名 | 类型 | 备注 |
id_b_class(课程号) | int | primary key |
name_b_class(课程名) | varchar | not null |
b_xueshi(学时) | int | not null |
b_score(学分) | int | not null |
b_classroom(教室) | varchar | not null |
b_term(学期) | varchar | check 约束 ‘1’‘2’ |
表 4.5选修课课程表
x_course | ||
列名 | 类型 | 备注 |
id_x_class(课程号) | int | primary key |
name_x_class(课程名) | varchar | not null |
x_xueshi(学时) | int | not null |
x_score(学分) | int | not null |
x_classroom(教室) | varchar | not null |
x_term(学期) | varchar | check 约束 ‘1’‘2’ |
表 4.6学生信息表
学生信息表 | ||
列名 | 类型 | 备注 |
学号 | int | primary key |
姓名 | varchar | not null |
所属系id | int | not null |
上课号 | int | not null |
scala驱动数据库的代码
连接数据库
class OperationData {
private val driver="com.mysql.cj.jdbc.Driver" //驱动
private val url="jdbc:mysql://localhost:3306/quotes" //自己的ip地址:端口号/库名
private val username="root" //用户名
private val password="1234" //密码
private var connection:Connection=null
//加载驱动
def getConnection():Unit={
Class.forName(driver)
connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/quotes?user=root&password=1234&serverTimezone=UTC")
println("数据库连接成功")
}
增删改查方法实现
class OperationData {
val teacher = new teacher
val departments = new departments
val institute = new institute
val student = new student
var b_course = new b_course
var x_course = new x_course
getConnection()
// 增:
// 添加基本信息
def insert(yuJu: String):Int={
try{
val insertSqlString=yuJu
val statement: PreparedStatement = connection.prepareStatement(insertSqlString)
val i:Int=connection.createStatement().executeUpdate(insertSqlString)
println("插入成功")
i
}
finally{
connection.close()
}
}
//查:
//查询“LiSi”所在院系名
def select(yuJu:String):Unit={
val selectStrSql=yuJu
try{
val rs:ResultSet=connection.createStatement().executeQuery(selectStrSql)
while (rs.next()){
teacher.id=rs.getInt("id")
teacher.name=rs.getString("name")
teacher.sex=rs.getString("sex")
teacher.id_card = rs.getString("id_card")
teacher.location = rs.getString("location")
teacher.tele = rs.getString("tele")
teacher.politics = rs.getString("politics")
teacher.marriage = rs.getString("marriage")
teacher.id_SuozaiXi = rs.getInt("id_SuozaiXi")
departments.id_Xi=rs.getInt("id_Xi")
departments.name_Xi=rs.getString("name_Xi")
departments.id_SuoShuXueyuan = rs.getInt("id_SuoShuXueyuan")
institute.name_Xueyuan = rs.getString("name_Xueyuan")
institute.id_Xueyuan = rs.getInt("id_Xueyuan")
b_course.id_class = rs.getInt("id_b_class")
b_course.name_class = rs.getString("name_b_class")
x_course.id_class = rs.getInt("id_x_class")
x_course.name_class = rs.getString("name_x_class")
println("查询到"+teacher.name+"信息如下:")
teacher.outPutInfo()
departments.outPutInfo()
institute.outPutInfo()
b_course.outPutInfo()
x_course.outPutInfo()
}
}
finally{
connection.close()
}
}
//改
// 因学校安排,“张三”调到“logistics management”系(30003)。
def updata(yuJu:String):Unit= {
val updataString =yuJu
try{
val rs3 = connection.createStatement().executeUpdate(updataString)
println("更新成功")
}
finally{
connection.close()
}
}
//删
//“杨铭”因工作调动,不在本学校,将其基本信息删除。
def deleteDb(name:String):Unit= {
val sql = "delete from teacher where name= ?"
try{
val pstm = connection.prepareStatement(sql)
pstm.setString(1,name)
println("删除成功")
}
finally{
connection.close()
}
}}
数据库实施、运行及维护
数据库实施
图 5.1教师数据库表
图 5.2学院信息数据库表
图 5.3系信息数据库表
图 5.4必修课课程表
图 5.5必修课授课数据库表:
图 5.6选修课程数据库表
图 5.7选修课授课数据库表
图 5.8学生信息数据库表
数据库运行及维护
(1)向“教师表”中增添:工号为:10000010,姓名为:杨铭,性别:女,身份证号:411527198903025011,家庭住址:新5,联系方式:13782939067,政治面貌:党员,婚姻状况:否,所在系id:30001
驱动代码:
val Opdata = new OperationData
// 增:向“教师表”中增添 工号为:10000010,姓名为:杨铭,性别:女,身份证号:411527198903025011,家庭住址:新5,
// 联系方式:13782939067,政治面貌:党员,婚姻状况:否,所在系id:30001
Opdata.insert(
"""insert into teacher
|values('1000010','YangMing','female','411527198903025011','new department5',13782939067,'member of Communist Party of China','no','30001');
|""".stripMargin)
(2)查询“李四”个人全部信息
驱动代码:
// 查询:查询李四所有个人信息
Opdata.select(yuJu =
"""select *
|from teacher,departments,institute,b_course,b_shouke,x_course,x_shouke
|where teacher.name='LiSi' and
|teacher.id_SuozaiXi = departments.id_Xi and
|departments.id_SuoShuXueyuan = institute.id_Xueyuan and
|b_shouke.b_id = teacher.id and
|b_shouke.b_id_class = b_course.id_b_class and
|x_shouke.x_id = teacher.id and
|x_shouke.x_id_class = x_course.id_x_class;
|""".stripMargin)
(3)“杨铭”因工作调动,不在本学校,将其基本信息删除。
驱动代码:
Opdata.deleteDb("YangMing")
(4)因学校安排,“张三”调到“logistics management”系(30003)
驱动代码:
// 改:因学校安排,“张三”调到“logistics management”系(30003)。
Opdata.updata(yuJu="""update teacher set id_SuozaiXi=30003
|where name = "ZhangSan";
|""".stripMargin)