《数据库-校医门诊管理系统(共27页).docx》由会员分享,可在线阅读,更多相关《数据库-校医门诊管理系统(共27页).docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 广西科技大学 校医院门诊管理系统 课程设计说明书课程名称:广西科技大学校医院门诊管理系统班 级:姓 名:学 号:指导老师:原庆能 2016年1月14日一 实训目的1.掌握数据库基本原理,理解关系数据库的设计方法、设计思路。初步掌握一种关系数据库语言,例如SQL Server。2. 通过设计数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能 力,提高分析问题和解决问题的能力;3. 学习数据库应用系统开发方法。培养学生初步的软件设计能力,形成良好的编程风格二实训内容一 需求分析广西科技大学校医院门诊管理系统所要处理的数据有:就诊卡号、姓名、性别、年龄、联
2、系电话、所在部门、就诊科室、就诊大夫、就诊日期、病情描述、处方编号、药品编码、药品名称、类别、库存余量、规格、保质期、用量、数量、金额、医务人员的职工号、姓名、性别、年龄、职称、所在科室、专长、诊病时间,科室名称、科室位置、可容纳医生数等。完整性要求:就诊日期在药品的保质期前;使用的药品数量小于库存余量,在同一时间段、同一科室诊病的医生数小于或等于科室可容纳医生数。安全性要求:学生和教师持就诊卡就诊,可查阅医生的相关信息;医生可填写病例、开处方;药房护士可进行药品的出库、入库进行管理。二 概念设计1. 根据需求分析,可抽象出科室、医生、病人、处方和药品5个实体,其中:科室有:科室名称、科室位置
3、、可容纳医生数属性,科室名称为实体标识符。医生有:职工号、姓名、性别、年龄、所在部门、职称、专长、诊病时间属性,职工为实体标识符。病人有:就诊卡号、姓名、性别、年龄、联系电话属性,就诊卡号为实体标识符处方有:处方编号、病情描述、诊断日期属性,处方编号为实体标识符。药品有:药品编码、药品名称、类别、库存余量、规格、保质期、数量、金额属性,药品编码为实体标识符。实体之间的关系说明:1)一个科室可以容纳多个医生2)一个医生可以填写多个处方3)一个病人可以查看多个处方4)一个处方可以使用多个药品,一种药品可以用于不同是处方5)药房护士可以对药品进行出入库管理。2. E-R图如下容纳科室医生病人1nm1
4、1填写查看管理nnn处方使用药品mn三、 逻辑设计将上述ER图转化为关系模式集1) 将5个实体转化为关系模式病人:就诊卡号、姓名、性别、年龄、联系电话医生:职工号、姓名、性别、年龄、所在部门、职称、专长、诊病时间科室:科室名称、科室位置、可容纳医生数药品:药品编码、药品名称、类别、库存余量、规格、保质期、数量、金额处方:处方编号、病情描述、诊断日期2) 对1:n关系“容纳”,“填写”,“查看”转化为关系模式医生:职工号、姓名、性别、年龄、所在部门、职称、专长、诊病时间、科室名称处方:处方编号、病情描述、诊断日期、职工号、就诊卡号3) 对m:n关系“填写”,“使用”生成新的关系模式使用:处方编号
5、、药品编码、用量、用法管理:职工号、药品编码、药品原数量、操作时间、数量、出入关系4) 所有关系如下病人:就诊卡号、姓名、性别、年龄、联系电话科室:科室名称、科室位置、可容纳医生数药品:药品编码、药品名称、类别、库存余量、规格、保质期、数量、金额医生:职工号、姓名、性别、年龄、所在部门、职称、专长、诊病时间、科室名称处方:处方编号、病情描述、诊断日期、职工号、就诊卡号使用:处方编号、药品编码、用量、用法管理:职工号、药品编码、操作时间、数量、出入关系四、 物理设计医生表doctor:属性数据类型长度或取值范围主键外键空值职工号varchar20是否姓名varchar10否性别varchar10
6、年龄int所在部门varchar10职称varchar10专长varchar25诊病时间varchar20科室名称varchar10是病人表patient:属性数据类型长度或取值范围主键外键空值就诊卡号varchar20是否姓名varchar10否性别varchar5年龄varchar10联系电话varchar20科室表room:属性数据类型长度或取值范围主键外键空值科室名称varchar10是否科室位置varchar10否可容纳医生数Int否药品表drug:属性数据类型长度或取值范围主键外键空值药品编码varchar20是否药品名称varchar20否类别varchar10否库存余量varc
7、har20否规格varchar否保质期datetime否数量smallmoney否金额int否处方表prescription:属性数据类型长度或取值范围主键外键空值处方编号varchar20是否病情描述datetime诊断日期varchar50职工号varchar20是否就诊卡号varchar20是否使用表userdrug:属性数据类型长度或取值范围主键外键空值处方编号varchar20是是否药品编码varchar20是是否用量int用法varchar20管理表inout:属性数据类型长度或取值范围主键外键空值职工号varchar20是是否药品编码varchar20是是否药品原数量int否操作
8、时间datetime否数量int否出入关系varchar4否创建药品用量触发器tr_insert_user_drug/tr_update_user_drugUSE displayGOIF EXISTS (SELECT name FROM sysobjectsWHERE type=TR AND name=tr_insert_user_drug)DROP TRIGGER tr_insert_user_drugGOCREATE TRIGGER tr_insert_user_drug ON userdrugFOR INSERTAS DECLARE userDg intselect userDg=用量
9、from Insertedif(select 库存余量 from drugwhere 药品编码=(select 药品编码 from Inserted)userDgBEGIN PRINT药品余量不足 ROLLBACK TRANSACTIONENDUSE displayGOIF EXISTS (SELECT name FROM sysobjectsWHERE type=TR AND name=tr_update_user_drug)DROP TRIGGER tr_update_user_drugGOCREATE TRIGGER tr_update_user_drug ON userdrugFOR
10、UPDATEAS IF UPDATE(用量)DECLARE userDg int, drugno char(20)select userDg=用量 from insertedselect drugno=药品编码 from insertedif(select 库存余量 from drugwhere 药品编码=drugno)userDgBEGIN PRINT药品余量不足 ROLLBACK TRANSACTIONEND创建药品日期触发器tr_insert_datetime_drug/tr_update_datetime_drugUSE displayGOIF EXISTS (SELECT name
11、FROM sysobjectsWHERE type=TR AND name=tr_insert_datetime_drug)DROP TRIGGER tr_insert_datetime_drugGOCREATE TRIGGER tr_insert_datetime_drug ON userdrugFOR INSERTAS DECLARE drugno char(20),presno char(20),date1 datetime,drugname char(20)select presno=处方编号 from Insertedselect drugno=药品编码 from Inserteds
12、elect drugname=药品名称 from drug where 药品编码=drugnoselect date1=诊断日期 from prescription where 处方编号=presnoif(select 保质期 from drug where 药品编码=drugno and 药品编码 in(select 药品编码 from userdrug where 处方编号 in(select 处方编号 from prescription)date1BEGIN PRINT药品:+drugname+超过使用日期 ROLLBACK TRANSACTIONENDUSE displayGOIF E
13、XISTS (SELECT name FROM sysobjectsWHERE type=TR AND name=tr_update_datetime_drug)DROP TRIGGER tr_update_datetime_drugGOCREATE TRIGGER tr_update_datetime_drug ON userdrugFOR UPDATEAS IF UPDATE(药品编码)DECLARE drugno char(20),presno char(20),date1 datetime,drugname char(20)select presno=处方编号 from Inserte
14、dselect drugno=药品编码 from Insertedselect drugname=药品名称 from drug where 药品编码=drugnoselect date1=诊断日期 from prescription where 处方编号=presnoif(select 保质期 from drug where 药品编码=drugno and 药品编码 in(select 药品编码 from userdrug where 处方编号 in(select 处方编号 from prescription)roomnoBEGIN PRINT科室医生已满 ROLLBACK TRANSACTI
15、ONENDUSE displayGOIF EXISTS (SELECT name FROM sysobjectsWHERE type=TR AND name=tr_update_room_doc)DROP TRIGGER tr_update_room_docGOCREATE TRIGGER tr_update_room_doc ON doctorFOR UPDATEAS IF UPDATE(科室名称)DECLARE roomno int,roomname char(10)select roomname=科室名称 from insertedselect roomno=可容纳医生数 from ro
16、om where 科室名称=roomnameif(select count(*)from doctor where 科室名称=roomname)roomnoBEGIN PRINT科室医生已满 ROLLBACK TRANSACTIONEND创建出入库触发器tr_inout_drugUSE displayGOIF EXISTS (SELECT name FROM sysobjectsWHERE type=TR AND name=tr_inout_drug)DROP TRIGGER tr_inout_drugGOCREATE TRIGGER tr_inout_drug ON inoutFOR INS
17、ERTAS DECLARE userDg int,guanxi char(4),drugno char(20)select drugno=药品编码 from insertedselect userDg=数量 from Insertedselect guanxi=出入关系 from insertedif(guanxi=出库)update drug set 库存余量=库存余量-userDg where 药品编码=drugnoif(guanxi=入库)update drug set 库存余量=库存余量+userDg where 药品编码=drugnoGO创建查看医生信息的存储过程select_doc
18、torUSE displayGOCREATE PROCEDURE select_doctor职工号 char(20)ASSELECT *FROM dbo.doctorwhere 职工号=职工号GO创建查看处方信息的存储过程select_patient_pre_chu/select_patient_pre_kahaoUSE display /*通过处方编号查看*/GOCREATE PROCEDURE select_patient_pre_chu处方号 char(20)ASselect 处方编号,病情描述,诊断日期,doctor.姓名 as 诊断医生,patient.姓名 as 就诊人from d
19、bo.prescription,dbo.doctor,dbo.patientwhere prescription.处方编号=处方号 and prescription.职工号=doctor.职工号 and prescription.就诊卡号=patient.就诊卡号select 处方编号,药品名称,用量,用法from dbo.userdrug,dbo.drugwhere 处方编号=处方号 and userdrug.药品编码=drug.药品编码GOUSE display /*通过就诊卡号查看*/GOCREATE PROCEDURE select_patient_pre_kahao就诊卡号 char
20、(20)ASselect dbo.prescription.就诊卡号,patient.姓名 as 就诊人,病情描述,诊断日期,doctor.姓名 as 诊断医生from dbo.prescription,dbo.doctor,dbo.patientwhere prescription.就诊卡号=就诊卡号 and patient.就诊卡号=就诊卡号 and prescription.职工号=doctor.职工号select userdrug.处方编号,药品名称,用量,用法,doctor.姓名 as 诊断医生from dbo.userdrug,dbo.drug,dbo.prescription,d
21、bo.doctorwhere prescription.就诊卡号=就诊卡号 and userdrug.处方编号=prescription.处方编号 and userdrug.药品编码=drug.药品编码 and prescription.职工号=doctor.职工号GO创建插入处方的存储过程insert_prescriptionUSE displayGOCREATE PROCEDURE insert_prescription处方号 char(20),日期 datetime,病情描述 char(50),职工号 char(20),就诊号 char(20)ASinsert prescriptionv
22、alues(处方号,日期,病情描述,职工号,就诊号)select * from prescription where 处方编号=处方号GO创建插入用药信息的存储过程insert_userdrugUSE displayGOCREATE PROCEDURE insert_userdrug处方号 char(20),药品编号 char(20),用量 int,用法 char(20)ASinsert userdrugvalues(处方号,药品编号,用量,用法)select * from userdrug where 处方编号=处方号GO创建插入药品出入库信息的存储过程insert_inoutUSE dis
23、playGOCREATE PROCEDURE insert_inout职工号 char(20),药品编码 char(20),药品原数量 int,操作时间 datetime,数量 int,出入库 char(4)ASinsert inoutvalues(职工号,药品编码,药品原数量,操作时间,数量,出入库)GO创建修改处方的存储过程update_prescription/update_userdrugUSE display /*通过处方号修改病情描述*/GOCREATE PROCEDURE update_prescription处方号 char(20),病情描叙 char(50) ASif(sel
24、ect 处方编号 from prescription where 处方编号=处方号)=处方号)beginupdate prescriptionset 病情描述=病情描叙where 处方编号=处方号select * from prescription where 处方编号=处方号endelsebeginprint此处方不存在endGOUSE display /*通过处方号修改药品使用信息*/GOCREATE PROCEDURE update_userdrug处方号 char(20),药品编码 char(20),用量 int,用法 char(20) ASif(select 处方编号 from us
25、erdrug where 处方编号=处方号 and 药品编码=药品编码)=处方号)beginupdate userdrugset 用量=用量,用法=用法where 处方编号=处方号 and 药品编码=药品编码endelsebeginprint处方或药品编码错误endGO创建删除处方的存储过程delete_prescriptionUSE displayGOCREATE PROCEDURE delete_prescription处方号 char(20)ASdelete from prescriptionwhere 处方编号=处方号GO创建删除用药信息的存储过程delete_userdrugUSE
26、displayGOCREATE PROCEDURE delete_userdrug处方号 char(20),药品编码 char(20)ASdelete from userdrugwhere 处方编号=处方号 and 药品编码=药品编码GO创建统计科室医生数的存储过程count_room_docUSE displayGOCREATE PROCEDURE count_room_doc科室名 char(20)ASSELECT *FROM dbo.doctor where 科室名称=科室名select dbo.doctor.科室名称,科室位置,可容纳医生数,COUNT(*) as 现有医生from d
27、bo.doctor,dbo.roomwhere doctor.科室名称=科室名 and doctor.科室名称=room.科室名称group by doctor.科室名称,科室位置,可容纳医生数GO五、 测试1. 测试触发器1) .在userdrug中插入或修改,使药品用量大于库存余量2) .测试药品是否超过使用日期在userdrug中修改处方编号为“0045”的信息3) .测试出入库触发器执行存储过程insert_inout 将药品“001”出库55操作前:操作后:2. 测试存储过程1) .查询职工号为“”的医生信息2) .插入一条处方信息,处方编号为“”,就诊卡号为“”3) .插入处方编号为“”的用药信息4) .查询处方编号为“”的信息5) .查询就诊卡号为“”的信息6) .修改处方编号为“”的信息7).删除处方编号为“”的信息8) .查询在科室2中的医生人数专心-专注-专业