资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
课程设计说明书
题目
医院数据库管理系统
系(部)
计算机科学与技术系
专业(班级)
姓名
学号
指导教师
起止日期
.5.16- .5.27
课程设计任务书
课程名称: 数据库系统原理课程设计
设计题目: 工厂数据库管理系统、 医院数据库管理系统、 图书馆数据库管理系统( 任选一题)
已知技术参数和设计要求:
需求说明及要求
题目: 医院数据库管理系统( 难度系数1.0)
某医院病房计算机管理系统中需要如下信息:
科室: 科室名、 科室地址、 电话、 主任姓名
病房: 病房号、 床位号、 所属科室名
医生: 工作证号、 姓名、 性别、 年龄、 职称、 所属科室名
病人: 病历号、 姓名、 性别、 诊断、 主管医生、 病房号
其中, 一个科室有多个病房、 多个医生; 一个病房只能属于一个科室; 一个医生只能属于一个科室, 但可负责多个病人的诊治; 一个病人的主管医生只有一个。
各阶段具体要求:
1、 需求分析阶段
l 定义数据项的含义和取值
2、 概念结构设计阶段
l 画出实体模型E-R图
3、 逻辑结构设计阶段
l 将实体模型转化为关系模型
l 给出每个关系的主关键字和函数依赖集
l 分析你所设计的关系数据库模式是否属于3NF
4、 物理设计阶段
l 确定所有字段的名称、 类型、 宽度、 小数位数及完整性约束
l 确定数据库及表的名称及其组成
l 确定索引文件和索引关键字
5、 数据库安全及维护设计阶段
l 设计一个适合的数据库安全策略( 用户身份认证、 访问权限、 视图)
6、 实施阶段
l 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。
设计工作量:
( 1) 软件设计: 完成问题陈述中所提到的所有需求功能。
( 2) 论文: 要求撰写不少于3000个文字的文档, 详细说明各阶段具体要求。
工作计划:
安排两周时间进行课程设计, 软件开发步骤如下, 第一周完成1~4, 第二周完成5~8, 论文同步进行;
1) 分组, 定题目
2) 需求分析
3) 概念结构设计
4) 逻辑结构设计
5) 物理设计
6) 数据库安全及维护设计
7) 数据库上机实现
8) 答辩
计划时间
指导老师
学生
注意事项
n 提交文档
Ø 长沙学院课程设计任务书 ( 每学生1份)
Ø 长沙学院课程设计论文 ( 每学生1份)
Ø 长沙学院课程设计鉴定表 ( 每学生1份)
指导教师签名: 日期:
教研室主任签名: 日期:
系主任签名: 日期:
长沙学院课程设计鉴定表
姓名
学号
专业
软件工程
班级
设计题目
医院数据库管理系统
指导教师
指导教师意见:
评定等级: 教师签名: 日期:
答辩小组意见:
评定等级: 答辩小组长签名: 日期:
教研室意见:
教研室主任签名: 日期:
系( 部) 意见:
系主任签名: 日期:
说明
课程设计成绩分”优秀”、 ”良好”、 ”及格”、 ”不及格”四类;
摘 要
本题是用SQL语言的实现的图书馆管理系统, 创立一个图书馆管理系统, 实现增加, 删除, 修改等各种用途。本题设计的三张表, 所有操作都在查询分析器中用SQL语句或系统存储过程完成。
关键词: SQL语言, 医院数据库管理系统, 查询分析器
目 录
第一章 设计内容与要求 9
第二章 设计说明 10
1需求分析 10
2数据库逻辑模型设计 10
3属性的取值 10
4数据库设计 12
5关系图 15
7数据库的E-R图 21
8数据库的实体模型转化为关系模型 22
9数据库的函数依赖 22
10 流程图 23
11.总结 24
参考文献 25
实验内容
建表:
create table Office(
O_no char(10) not null,
O_name char(20) not null,
O_address char(40),
O_phone int ,
Odir_no char(10) not null,
primary key(O_no)
);
create table Ward(
W_no char(10) not null,
Bed_no char(10) not null,
O_no char(10) references Office(O_no),
primary key(W_no,Bed_no)
);
create table Doctor(
D_no char(10) not null,
D_name char(20) not null,
D_sex char(10),
D_class char(20),
D_age int,
O_no char(10) references Office(O_no),
primary key(D_no)
);
create table Patient(
R_no char(10) not null primary key,
P_age int,
P_name char(20),
P_sex char(10),
W_no char(10) not null,
Bed_no char(10)not null,
foreign key(W_no,Bed_no) references Ward(W_no,Bed_no)
);
create table Record(
R_no char(10) not null,
In_time char(20),
Out_time char(20),
diagnsis char(100),
MD_no char(10) not null,
W_no char(10) not null,
Bed_no char(10) not null,
primary key(R_no)
);
create table Cure(
D_no char(10) not null,
R_no char(10) not null,
C_time char(20),
);
insert into Office(O_no,O_name,O_address,O_phone,Odir_no)
values('01','内科','F1','3600','D001')
insert into Office(O_no,O_name,O_address,O_phone,Odir_no)
values('02','外科','F2','3601','D002')
insert into Office(O_no,O_name,O_address,O_phone,Odir_no)
values('03','精神科','F3','3602','D003')
insert into Office(O_no,O_name,O_address,O_phone,Odir_no)
values('04','眼科','F4','3603','D004')
insert into Ward(W_no,Bed_no,O_no)
values('1','001','01')
insert into Ward(W_no,Bed_no,O_no)
values('1','002','01')
insert into Ward(W_no,Bed_no,O_no)
values('2','001','02')
insert into Ward(W_no,Bed_no,O_no)
values('2','002','02')
insert into Ward(W_no,Bed_no,O_no)
values('3','001','03')
insert into Ward(W_no,Bed_no,O_no)
values('3','002','03')
insert into Ward(W_no,Bed_no,O_no)
values('4','001','04')
insert into Ward(W_no,Bed_no,O_no)
values('4','002','04')
insert into Ward(W_no,Bed_no,O_no)
values('4','003','04')
insert into Ward(W_no,Bed_no,O_no)
values('4','004','04')
insert into Patient(R_no,P_name,P_sex,P_age,W_no,Bed_no)
values('1111','张一','男','35','1','001')
insert into Patient(R_no,P_name,P_sex,P_age,W_no,Bed_no)
values('1112','张二','男','26','1','002')
insert into Patient(R_no,P_name,P_sex,P_age,W_no,Bed_no)
values('1113','张三','女','15','2','002')
insert into Patient(R_no,P_name,P_sex,P_age,W_no,Bed_no)
values('1114','张四','男','10','4','003')
insert into Patient(R_no,P_name,P_sex,P_age,W_no,Bed_no)
values('1115','张五','女','41','4','004')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D001','王一','男','53','主任医师','01')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D002','王二','男','46','主任医师','02')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D003','王三','女','50','主任医师','03')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D004','王四','女','45','主任医师','04')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D005','王五','男','23','主治医师','01')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D006','王六','男','31','主治医师','01')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D007','王七','女','29','主治医师','02')
insert into Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D008','王八','男','35','主治医师','04')
insert into Record(R_no,In_time,Out_time,diagnsis,MD_no,W_no,Bed_no)
values('1111',' .3.6',' .4.3','高血压','D006','1','001')
insert into Record(R_no,In_time,Out_time,diagnsis,MD_no,W_no,Bed_no)
values('1112',' .4.1',' .4.8','肺炎','D005','1','002')
insert into Record(R_no,In_time,Out_time,diagnsis,MD_no,W_no,Bed_no)
values('1113',' .4.1',' .4.21','心脏病','D007','2','002')
insert into Record(R_no,In_time,Out_time,diagnsis,MD_no,W_no,Bed_no)
values('1114',' .4.5',' .4.10','角膜炎','D004','4','003')
insert into Record(R_no,In_time,Out_time,diagnsis,MD_no,W_no,Bed_no)
values('1115',' .5.1',' .5.10','白内障','D008','4','004')
查询:
select P_name as '病人姓名',In_time as '住院时间',Out_time as '出院时间'
from Patient,Record
where P_name='张四'and Patient.R_no=Record.R_no
select D_name as '主治医生'
from Doctor,Record
where D_no='D006' and R_no='1111'
select P_name as '姓名',P_age as '年龄',In_time as '住院时间',Out_time as '出院时间'
from Patient,Record
where P_name='张一' and Patient.R_no=Record.R_no
select avg(P_age) as '病人平均年龄'
from Patient
select avg(D_age) as '医生平均年龄'
from Doctor
select count(Bed_no) as '床位数'
from Ward
修改信息:
select D_name
from Doctor
where D_no='D002'
update Doctor
set D_name='王九'
where D_no='D002'
select D_name
from Doctor
where D_no='D002'
select D_name
from Doctor
where D_no='D006'
update Doctor
set D_name='王十'
where D_no='D006'
select D_name
from Doctor
where D_no='D006'
删除信息:
delete
from Ward
where W_no='2' and Bed_no='002'
select *
from Ward
delete
from Doctor
where D_no='D008'
select *
from Doctor
增加信息:
insert Ward(W_no,Bed_no,O_no)
values('5','001','04')
select *
from Ward
insert Doctor(D_no,D_name,D_sex,D_age,D_class,O_no)
values('D015','小小','女','21','普通医生','03')
select *
from Doctor
创立视图:
create view V_doctor
as
select D_no,D_name,D_sex,O_no
from Doctor
select D_no,D_name,D_sex,O_no
from V_doctor
where D_no='D003'
create view V_office
as
select Office.O_no,O_name, D_name
from Office,Doctor
where Odir_no=D_no
select *
from V_office
where O_no='01'
创立触发器:
create trigger T_patient_1
on Patient
for update
as
if update(W_no)
begin
declare @newW_no char(10),@oldW_no char(10)
select @newW_no=W_no from inserted
select @oldW_no=W_no from deleted
update Record set W_no=@newW_no
where W_no=@oldW_no
end
update Patient
set W_no='3'
where R_no='1113'
创立登录信息:
use HOSPITAL
exec sp_addlogin 'doctor','1234','HOSPITAL'
exec sp_grantdbaccess 'doctor','HOSPITAL'
use HOSPITAL
grant all on Patient to HOSPITAL
use HOSPITAL
exec sp_addlogin 'patient','12345','HOSPITAL'
--exec sp_grantdbaccess 'patient','hospital_1'
use HOSPITAL
exec sp_grantdbaccess 'patient','HOSPITAL1'
use HOSPITAL
grant select on Patient to HOSPITAL1
E/R图:
科室
病房
病人
医生
性别
职称
姓名
所属科室名
工作证号
所属
科室
医生
床位号
病房号
科室地址
电话
科室名
主任姓名
年龄
病历号
病床号
诊断
性别
姓名
病房号
属于
属于
属于
属于
总结
课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异, 当今计算机应用在生活中能够说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的, 而数据库又是最常见, 功能最强大的一种高级语言, 因此做好数据库语言课程设计是十分必要的。 回顾起此次课程设计, 至今我仍感慨颇多, 的确, 自从拿到题目到完成整个编程, 从理论到实践, 在整整两周的日子里, 能够学到很多很多的东西, 同时不但能够巩固了以前所学过的知识, 而且学到了很多在书本上所没有学到过的知识。经过这次课程设计使我们懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来, 从理论中得出结论, 才能真正为社会服务, 从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题, 能够说得是困难重重, 难免同时在设计的过程中发现了自己的不足之处, 对一些前面学过的知识理解得不够深刻, 掌握得不够牢固, 比如说SQL语句, 经过这次课程设计之后, 我等于把前面所学过的知识又重新温故了一遍。
但编程过程中我也得到了很多, 不但又捡起了以前的知识, 还学到了一些新知识。学会了创立数据库, 学会了创立数据库多表之间的关系, 避免多次写下繁琐的代码。而且在每完成一个功能而且运行成功时, 那种喜悦无以言说。而且在编程的过程中, 有些问题会问道同学, 在交流的过程中增进了彼此的感情。
参考文献
Jeffrey D.ullman Jennifer Widom 《数据库系统基础教程》 机械工业出版社
展开阅读全文