前言
这次实验用到了很久没写的javaswing,其中各种组件的使用可谓是花了一番工夫复习;其中遇到最大的问题是如何将java和oracle进行连接,这个问题搞了我一个晚上,一开始用的是eclipse,代码是没问题的,死活连不上,第二天把代码搬到IDEA那边后再鼓捣鼓捣终于可以了。这次实验可谓是费了一番功夫,如有错误,欢迎指出;如果本文对你有帮助,请点个赞吧👍。
实验概述
1.系统概述
本数据库系统为教务管理系统,用于管理学生、教师基本信息,以及管理教学楼栋和课程的信息。
可以对相关信息进行数据库的增删查改操作,提供可视化界面,并具备错误提示功能,在管理员账户密码不正确,或者进行数据库的增删改时不符合数据库完整性约束或不符合范式时会弹出错误提示。
本系统一共有四个实体,分别为学生、教师、上课地点以及课程。一共生成有四个关系模式,分别为学生Student、教师Teacher、上课地点Place以及课程Course。
2.关系模式
学生(学号,姓名,性别,年龄,班级)
教师(教师号,教师名,性别,年龄,工龄)
上课地点(地点编号,楼栋,教室号)
课表(教师号,学号,课程名,地点编号,上课时间,节次)
3.关系模式属性
学生关系模式属性有:
学号VARCHAR(10)、姓名 VARCHAR(8)、性别VARCHAR(2)、年龄SMALLINT、班级VARCHAR(10)。
教师关系模式属性有:
教师号VARCHAR(10)、教师名VARCHAR(8)、性别VARCHAR(2),年龄 NUMBER,工龄NUMBER。
上课地点关系模式属性有:
地点编号VARCHAR(10)、楼栋VARCHAR(12)、教室号 VARCHAR(4)。
课表关系模式属性有:
教师号VARCHAR(10)、学号VARCHAR(10)、课程名VARCHAR(16)、地点编号VARCHAR(10)、上课时间(星期)VARCHAR(6)、节次 VARCHAR(10)。
4.实体间的联系
学生实体和教师实体之间是多对多的关系;
学生实体和上课地点实体之间是多对多的关系;
教师实体和上课地点实体之间是多对多的关系;
学生实体和课程实体之间是多对多的关系;
教师实体和课程实体之间是多对多的关系;
5.完整性条件:
1.学生关系模式
主码为学号PRIMARY KEY,姓名不能为空NOT NULL,性别只允许取‘男’或‘女’CHECK IN(SEX IN (‘男’,’女’))。
2.教师关系模式
主码为教师号PRIMARY KEY,教师名不能为空NOT NULL,性别只允许取‘男’或‘女’CHECK IN(SEX IN (‘男’,’女’))。
3.上课地点关系模式
主码为地点编号PRIMARY KEY,楼栋和教室号不能为空NOT NULL。
4.课表关系模式
主码为教师号和学号PRIMARY KEY,地点编号参照引用Place的主码地点编号 FOREIGN KEY(地点编号) REFERENCES Place(地点编号),上课时间在星期一到星期五之间 CHECK上课时间 IN(“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,)
6.相关描述
一个学生只能归属于某个班级,不能同时归属于多个班级,学生的姓名允许重复,学生的唯一标识为学号。
学生的某一门课程仅由一位教师教学,一个班里的学生的某门课程对应一位老师。上课时间在星期一到星期五之间。
每个楼栋有多间教室。不同楼栋的不同教室地点编号不同。
每个教师有一个唯一的教师号标识,允许教师名重复。每个教师每个星期给多个班级上课,每个教师可以教多门课程,但对于同一班级只教一门课程。
创建相对应的触发器处理相应的数据变动。
7.规范化
1.学生关系模式:
学号为主码,学号–>姓名,学号–>性别,学号–>年龄,学号–>班级。每一个非主属性不存在部分函数依赖和传递依赖,所有的决定因素都包含码,因此学生关系模式属于BCNF。
2.教师关系模式:
教师号为主码,教师号–>教师名,教师号–>性别。每一个非主属性不存在部分函数依赖和传递依赖,所有的决定因素都包含码,因此教师关系模式属于BCNF。
3.上课地点关系模式:
地点编号为主码,地点编号–>楼栋,地点编号–>教室号。每一个非主属性不存在部分函数依赖和传递依赖,所有的决定因素都包含码,因此上课地点关系模式属于BCNF。
4. 课表关系模式:
教师号+学号为主码,教师号+学号–>课程名,教师号+学号–>地点编号,教师号+学号–>上课时间,教师号+学号–>节次,每一个非主属性不存在部分函数依赖和传递依赖,所有的决定因素都包含码,因此课表关系模式属于BCNF。
二.实验构思及数据库对应的图
1.业务流程图
2.数据流图
3.用例图
4.E-R图
三.实验流程
(1).构建数据库并创建初始数据
1.创建用户manager并授权
create user manager identified by 123456;
grant connect,resource,dba to manager;
2.使用用户manager登录数据库
3.创建学生表STUDENT
CREATE TABLE STUDENT(
学号 VARCHAR(10) PRIMARY KEY,
姓名 VARCHAR(10) NOT NULL,
性别 VARCHAR(3) CHECK (性别 IN('男','女')),
年龄 SMALLINT,
班级 VARCHAR(10)
);
4.创建教师表TEACHER
CREATE TABLE TEACHER(
教师号 VARCHAR(10) PRIMARY KEY,
教师名 VARCHAR(10) NOT NULL,
性别 VARCHAR(3) CHECK (性别 IN('男','女')),
年龄 NUMBER,
工龄 NUMBER,
);
5.创建课室表PLACE
CREATE TABLE PLACE(
地点编号 VARCHAR(10) PRIMARY KEY,
楼栋 VARCHAR(12) NOT NULL,
教室号 VARCHAR(4) NOT NULL
)
6.创建课程表COURSE
CREATE TABLE COURSE(
教师号 VARCHAR(10) ,
学号 VARCHAR(10) ,
课程名 VARCHAR(16),
地点编号 VARCHAR(10),
上课时间 VARCHAR(10) CHECK (上课时间 IN('星期一','星期二','星期三','星期四','星期五')),
节次 VARCHAR(10),
FOREIGN KEY(教师号) REFERENCES TEACHER(教师号),
FOREIGN KEY(学号) REFERENCES STUDENT(学号),
FOREIGN KEY(地点编号) REFERENCES Place(地点编号),
PRIMARY KEY (教师号,学号)
);
7.向学生表STUDENT插入数据
INSERT INTO STUDENT(学号,姓名,性别,年龄,班级) VALUES('1906300087','张三','男',19,'软件192');
INSERT INTO STUDENT(学号,姓名,性别,年龄,班级) VALUES('1906300001','周南','男',20,'网络194');
INSERT INTO STUDENT(学号,姓名,性别,年龄,班级) VALUES('1906300002','何洛','女',19,'计科191');
INSERT INTO STUDENT(学号,姓名,性别,年龄,班级) VALUES('1906300028','焉栩','女',18,'软件191');
INSERT INTO STUDENT(学号,姓名,性别,年龄,班级) VALUES('1906300034','夏光','男',20,'计科192');
INSERT INTO STUDENT(学号,姓名,性别,年龄,班级) VALUES('1906300015','姚琛','男',21,'软件191');
INSERT INTO STUDENT(学号,姓名