数据库原理课程设计任务书班级:计算10-02学号:**********姓名:***成绩:电子与信息工程学院计算机科学系7.1设计题目名称高校教师信息管理系统7.2 系统概述由于Internet 的迅速普及,使Intranet成为Internet技术在企业管理信息系统中的应用和延伸,形成了集计算机,计算机网络、数据库、分布式计算等于一体的信息技术综合体,它打破了时间和地域的界限,使信息交流变得快捷、准确,为建立现代企业管理信息系统提供了充足的条件。
高校教职工管理系统在此基础上延伸、扩展,使之上下、内外全面贯通。
高教教职工管理系统是在适应市场需求的客观前提下,为了满足各高校管理自己学校所在的教职员信息而开发的。
该系统的是终目的是要将各位职员的信息放到网络上,以方便管理。
系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
该系统具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
7.3系统功能模块设计1. 实现部门、职称、职务的基本信息的管理;2. 实现教师信息的管理3. 实现教师家庭关系和教育经历的管理4. 实现教师的奖惩管理;5. 创建规则,使得教师的E-Mail 必须符合电子邮箱的格式;6. 创建触发器,实现修改教师所在部门时自动修改相应部门的教师人数;7. 创建存储过程,统计各部门各种职称的人数;8. 建立数据库相关表之间的参照完整性约束。
7.4数据库概念结构设计7.5数据库逻辑结构设计下面将E-R图转换为关系模型:员工信息(员工编号,员工姓名,年龄,性别,出生年月,婚姻状态,政治面貌,学历,部门编号,职务,联系方式,备注)主键:员工编号;外码:部门编号;部门信息(部门编号,部门名称,部门人数)主键:部门编号;奖惩信息(奖惩编号,员工编号,奖罚时间,奖罚原因,奖罚地点,备注)主键:奖惩编号,外码:员工编号;薪资信息(薪资编号,员工编号,基本工资,福利,奖金,计算方法,实发工资,发放日期),主键:薪资编号;外码:员工编号。
7.6数据库物理设计7.7程序运行环境和开发环境7.8主要模块程序流程图7.9主要功能实现的程序段1、创建高校教职工管理数据库:CREATE DATABASE 高校教职工管理ON( NAME=高校教职工管理DAT,FILENAME='D:\SQL\高校教职工管理DAT.MDF', SIZE=5,MAXSIZE=20,FILEGROWTH=2)LOG ON( NAME=高校教职工管理LOG,FILENAME='D:\SQL\高校教职工管理LOG.LDF', SIZE=5,MAXSIZE=20,FILEGROWTH=2)--------------------------------------------------------2、创建备份文件sp_addumpdevice'disk','BACKUP1','D:\SQL\高校教职工管理backup1.dat'goBACKUP DATABASE 高校教职工管理TO BACKUP1--------------------------------------------------------------------3、创建表CREATE TABLE 部门信息表(部门编号INT PRIMARY KEY,部门名称VARCHAR(20) UNIQUE NOT NULL,部门人数INT CHECK(部门人数>=0) NOT NULL,)-------------------------------------------CREATE TABLE 员工信息表(员工编号INT NOT NULL PRIMARY KEY,员工姓名VARCHAR(20) NOT NULL,年龄INT CHECK(年龄>=1) NOT NULL,性别VARCHAR(2) CHECK(性别IN ('男','女')) NOT NULL,出生年月Datetime NOT NULL,婚姻状态VARCHAR(4) CHECK(婚姻状态IN ('已婚','未婚')) NOT NULL,政治面貌VARCHAR(20) CHECK(政治面貌IN ('清白','团员','党员')) NOT NULL,学历VARCHAR(20) NOT NULL,部门编号INT NOT NULL,职务VARCHAR(20) NOT NULL,联系方式VARCHAR(11) UNIQUE NOT NULL,备注VARCHAR(500),FOREIGN KEY (部门编号) REFERENCES 部门信息表(部门编号))---------------------------------------------------------CREATE TABLE 薪资信息表(薪资编号INT PRIMARY KEY,员工编号INT NOT NULL,基本工资INT CHECK(基本工资>=0) NOT NULL,福利INT CHECK(福利>=0) NOT NULL,奖金INT CHECK(奖金>=0) NOT NULL,计算方法VARCHAR(50) NOT NULL,实发工资INT CHECK(实发工资>=0),发放日期Datetime NOT NULL,FOREIGN KEY(员工编号) REFERENCES 员工信息表(员工编号))----------------------------------------------------------CREATE TABLE 奖惩信息表(奖惩编号INT PRIMARY KEY,员工编号INT NOT NULL,奖罚时间Datetime NOT NULL,奖罚原因VARCHAR(100) NOT NULL,奖罚地点VARCHAR(20) NOT NULL,备注VARCHAR(500),FOREIGN KEY(员工编号) REFERENCES 员工信息表(员工编号))---------------------------------------------------------------4、创建视图:--视图员工基本信息:CREATE VIEW 员工基本信息(员工姓名,部门名称,职务,联系方式,薪资)AS SELECT 员工姓名,部门名称,职务,联系方式,实发工资FROM 员工信息表,部门信息表,薪资信息表WHERE 员工信息表.部门编号=部门信息表.部门编号AND 员工信息表.员工编号=薪资信息表.员工编号-------------------------------------------------------视图:各部门部长信息CREATE VIEW 部门部长信息(部门编号,部门名称,员工编号,员工名字)AS SELECT 部门信息表.部门编号,部门名称,员工编号,员工姓名FROM 员工信息表,部门信息表WHERE 员工信息表.部门编号=部门信息表.部门编号AND 员工信息表.职务='部长'--------------------------------------------------------------5、创建存储过程--存储过程LOOKWAGE:根据员工提交的员工编号和工资发放时间,查看该员工的薪资信息,-- 包括员工编号,姓名,实发薪资,和发放日期。
CREATE PROCEDURE LOOKWAGE@ID INT,@TIME DatetimeASSELECT 员工信息表.员工编号,员工姓名,实发工资,发放日期FROM 员工信息表,薪资信息表WHERE 员工信息表.员工编号=薪资信息表.员工编号AND 员工信息表.员工编号=@ID AND 发放日期=@TIME--存储过程LOOKREWARDS:根据员工提交的员工编号和奖罚时间,查看该员工的奖罚信息,-- 包括员工编号,姓名,奖罚原因,奖罚时间。
CREATE PROCEDURE LOOKREWARDS@ID INT,@TIME DatetimeASSELECT 员工信息表.员工编号,员工姓名,奖罚原因,奖罚时间FROM 员工信息表,奖罚信息表WHERE 员工信息表.员工编号=奖罚信息表.员工编号AND 员工信息表.员工编号=@ID AND 发放日期=@TIME--------------------------------------------------------------------- --存储过程Find_Minister:根据提交的部门编号,查看该部门的部长CREATE PROCEDURE Find_Minister@ID INTASSELECT 部门信息表.部门编号,部门信息表.部门名称,员工信息表.员工编号,员工姓名FROM 员工信息表,部门信息表WHERE 员工信息表.部门编号=部门信息表.部门编号AND 员工信息表.职务='部长'---------------------------------------------------------------------6、创建触发器--触发器workerid:要求员工信息表中的员工编号被修改时,薪资信息表-- 奖惩信息表中的员工编号也被修改。
CREATE TRIGGER WORKERID ON 员工信息表FOR UPDATEASBEGINIF(UPDATE(员工编号))BEGINUPDATE 薪资信息表SET 薪资信息表.员工编号=(SELECT 员工编号FROM inserted)WHERE 薪资信息表.员工编号=(SELECT 员工编号FROM deleted)UPDATE 奖惩信息表SET 奖惩信息表.员工编号=(SELECT 员工编号FROM inserted)WHERE 奖惩信息表.员工编号=(SELECT 员工编号FROM deleted)ENDEND--------------------------------------------------------------------触发器CHECK_EXIST:-- 向员工信息表插入一条记录时,检查该记录的部门信息在部门信息表-- 是否存在,若不存在则不允许插入。
CREATE TRIGGER CHECK_EXISTON 员工信息表FOR INSERTASIF EXISTS(SELECT * FROM inserted aWHERE a.部门编号NOT IN (SELECT 部门信息表.部门编号FROM 部门信息表)) BEGINRAISERROR('该部门不存在!!',16,1)ROLLBACK TRANSACTION --撤销刚才的操作,恢复到原来的状态END--------------------------------------------------------------------- --触发器COUNT_STAFF-- 向员工信息表插入一条记录时,该员工所在的部门人数加.CREATE TRIGGER COUNT_STAFFON 员工信息表AFTER INSERTASBEGINUPDATE 部门信息表SET 部门人数=部门人数+1WHERE 部门编号IN (SELECT 部门编号FROM inserted)END--------------------------------------------------------------触发器departid:要求部门信息中的部门编号被修改时,员工信息表中员工--所属部门编号也被修改。