前言
- 此文章是本人的一份数据库实验报告,写本文章的目的是记录本次实验的开发历程,分享出来一起学习改进不足,欢迎指教。
项目名称
- 数据库系统设计综合实验
题目
假设有“教师”、“学生”、“课程”三个实体,教师的基本信息包括:工号、姓名、职 称、工资,课程的基本信息包括:课程号、课程名、学分数,学生的基本信息包括:学 号、姓名、性别、年龄。系统必须满足以下要求:
(1) 一门课程只能有一个教师任课,一个教师可以上多门课程;
(2) 一个学生可以选修多门课程,一门课程可以由多个学生来选修,记录不同学生选修不同课程的成绩;
(3) 设置一个管理员,用于维护(添加、删除和修改等基本任务)学生基本信息、教师基本信息和教师所授课程等工作,此外,管理员添加学生时,为其设置初始密码;当学生选修了某门课程,课程成绩由管理员录入;
(4) 学生可以利用学号和密码登录系统,登陆系统后,可以进行选课、修改密码和个人基本信息、查询自己的选课及总学分等操作;
(5) 能够统计不同职称的教师的数量、不同职称的教师的平均工资,可以统计每门课程的平均成绩、最高分、最低分,统计每个学生选修课程的总学分;
项目实现
开发工具
- 数据库:Oracle19.3
- 数据库管理工具:Navicat、sqlPlus、sql Developer
- 开发语言:Java(版本为1.8)
- GUI工具包:Java Swing
- 数据库连接:JDBC
- IDE: IntelliJ IDEA Ultimate Edition 2019.2
数据库设计
E-R图
UML图
关系模型
Teacher(Tno,Tname,Tposition,Tsalary,Tpwd),其中,Tno为teacher表的主码
Course(Cno,Cname,Ccredit,Tno),其中,Cno为course表的主码,Tno为外码,Tno参照Teacher(Tno)
Student(Sno,Sname,Ssex,Sage,Spwd),其中,Sno为Student表的主码
SC(Sno,Con,Grade),其中,(Sno,Cno)为SC表的主码,Sno为外码,参照Student(Sno),Cno为外码,参照Course(Cno)
创建数据库
- 创建一个用户
create user cyf identified by admin; --创建新用户
grant resource,connect,DBA to cyf; --授权
- 建表
teacher表
Create table teacher
(
Tno varchar2(10) primary key, --教师职工号
Tname varchar2(20) Not Null Unique, --姓名
Tsex varchar2(4) CHECK(Tsex IN ('男','女') ), --性别(E-R图中没有)
Tposition varchar2(20) Not NULL, --教师职称
Tsalary number Not NULL, --薪水
Tpwd varchar2(16) --登录密码
);
course表
Create table course
(
Cno varchar2(10) primary key, --课程号
Cname varchar2(20) , --课程名
Ccredit number, --学分
Tno varchar2(10), --教师职工号
FOREIGN key(Tno) references teacher(Tno) --Tno参考teacher表的Tno
);
student表
Create table student
(
Sno varchar2(10) primary key, --学号
Sname varchar2(20) Not NULL Unique, --姓名
Ssex varchar2(4) CHECK(Ssex IN