11、题目:某医院信息管理系统(药品库存、收费、医生病人等)实现药品类型及药品信息的管理;实现药品的入库、出库管理;实现科室、医生、病人的管理;实现处方的登记管理;实现收费管理;创建触发器,当药品入库、出库时自动修改库存;创建存储过程统计某段时间内,各科室的就诊人数和输入情况;创建视图查询各种药品的库存总数;建立数据库相关表之间的参照完整性约束。2、需求分析2.1需求分析(1)信息要求:医院信息管理系统涉及医生信息、病人信息、药品信息、收费表信息、科室管理等多种数据信息。(2)功能要求:医院信息管理系统用户管理只有管理员,负责日常医院管理工作,比如药品的入库信息录入,修改医生信息,删除,添加等操作。医院信息管理系统具有以下功能:医生信息管理:包括医生信息的录入、修改、删除等功能。病人信息管理:包括病人信息的录入、查询等功能。科室信息管理:包括科室信息的录入、修改、删除等功能。药品信息管理:包括药品信息的录入、修改、删除等功能。药品库存管理:包括药品库存信息的录入、修改、查询等功能。处方表管理:包括医生开的处方表的录入、查询等功能。配药单管理:包括病人药品信息的录入、查询等功能。收费员信息管理:包括收费员信息的录入、修改、删除等功能。药品类型管理:包括药品类型信息的录入、修改、删除等功能。药品种类管理:包括药品种类的录入、修改、删除等功能。2.2系统功能结构根据题目的要求可以将医院信息管理系统分为以下功能:医院信息管理系统医生信息管理病人信息管理科室信息管理收费员信息管理药品信息管理处方信息管理药品库存管理配药单管理药品种类管理药品类型管理《数据库系统原理》课程设计任务书22.3数据流程图2.3.1医生信息流程图2.3.2病人信息流程图2.3.3科室信息流程图2.3.4药品信息流程图系统管理人员科室信息查询科室信息删除科室信息修改科室信息录入科室信息表查询信息修改信息录入信息删除信息系统管理人员病人信息查询病人信息更新病人信息录入病人信息表查询信息更新信息录入信息系统管理人员医生信息查询医生信息删除医生信息修改医生信息录入医生信息表查询信息修改信息录入信息删除信息32.3.5药品库存流程图2.3.6处方表流程图2.3.7配药单流程图2.3.8收费员信息流程图系统管理人员配药单查询药品信息录入配药单查询信息录入信息系统管理人员处方查询处方表查询信息系统管理人员药品库存查询药品库存删除药品库存修改药品库存录入药品库存表查询信息修改信息录入信息删除信息系统管理人员药品信息查询药品信息删除药品信息修改药品信息录入药品信息表查询信息修改信息录入信息删除信息42.3.9药品类型流程图2.3.10药品种类流程图3、概念结构设计3.1局部E-R图3.1.1医生信息管理局部E-R图医生电话年龄性别姓名科室编号医生编号系统管理人员药品种类查询药品种类删除药品种类修改药品类型录入药品种类表信息查询信息修改信息录入信药品种类息删除信息系统管理人员药品类型查询药品类型删除药品类型修改药品类型录入药品类型表信息查询信息修改信息录入信息删除信息系统管理人员收费员查询收费员信息录入收费员信息表查询信息录入信息收费员信息删除查询删除信息53.1.2病人信息管理局部E-R图3.1.3科室信息管理局部E-R图3.1.4药品信息管理局部E-R图3.1.5药品库存管理局部E-R图病人姓名科室编号电话年龄医治时间病人编号性别身份证号码缴费时间科室科室位置科室名称科室编号药品备注有效期生产地点治疗功效药品编号生产日期库存数量63.1.6处方表管理局部E-R图3.1.7配药单管理局部E-R图3.1.8收费员信息管理局部E-R图处方表病人编号处方时间收费员编号医生编号药品数量处方编号配药单病人编号收费金额药品编号收费员编号收费时间配药编号药品库存入库单价库存数量名称出库单价药品编号72.3.9药品类型局部E-R图2.3.10药品种类局部E-R图3.2全局的E-R图药品类型库存位置类型编号类型名药品种类配药数量药品编号名称收费员姓名收费员编号83.4数据字典3.4.1医生信息表共有6段:医生编号、姓名、性别、年龄、电话科室编号,如下表:医生信息表字段名数据类型是否可以为空主键外键医生电话年龄性别姓名科室编号医生编号属于科室科室名称科室位置科室编号1m病人姓名科室编号电话年龄医治时间病人编号性别身份证号码缴费时间处方表病人编号处方时间收费员编号医生编号药品数量配药单病人编号收费金额药品编号收费员编号收费时间领取处方m1开处方医治1m11领取配药单11收费员姓名收费员编号药品库存入库单价库存数量名称出库单价药品编号药品信息备注有效期生产地点治疗功效药品编号生产日期库存数量药品类型药品编号类型名纳费包括1m11m查看1m查看库存m1配药11属于m1药品种类配药数量药品编号名称1包括21配药编号处方编号库存位置9医生编号char(5)不可为空是姓名varchar(5)性别char(2)年龄varchar(3)电话char(11)科室编号char(10)性别只能是‘男’或‘女’电话只能是11位数字,且第一个数字为13.4.2病人信息表共有10字段:病人编号、病人姓名、病人性别、病人年龄、病人电话、科室编号、身份证号码、科室编号、医治时间、备注、纳费时间。如下表:病人信息表字段名数据类型是否可以为空主键外键病人编号char(10)不可为空是病人姓名varchar(6)病人性别variable(2)病人年龄varchar(10)病人电话char(11)身份证号码char(18)科室编号char(10)是医治时间atetime备注varchar(20)纳费时间datetime3.4.3科室信息表共有3字段:科室编号、科室名称、科室位置。如下表:科室信息表字段名数据类型是否可以为空主键外键科室编号char(10)不可为空是科室名称varchar(10)科室位置varchar(20)3.4.4药品信息表共有8字段:药品编号、收费员编号、生产地点、生产日期、有效期、治疗功效、库存数量、备注。如下表:药品信息表字段名数据类型是否可以为空主键外键药品编号char(20)不可为空是收费员编号char(10)是生产地点varchar(20)生产日期datetime有效期datetime治疗功效varchar(20)库存数量varchar(10)10备注varchar(20)3.4.5药品库存表共有6字段:药品编号、收费员编号、名称、库存数量、入库单价、出库单价。如下表:药品库存表字段名数据类型是否可以为空主键外键药品编号char(20)不可为空是收费员编号char(10)是名称varchar(10)库存数量varchar(10)入库单价varchar(12)出库单价varchar(12)3.4.6处方表共5字段:医生编号、病人编号、药品数量、药品编号、处方时间。如下表:处方表字段名数据类型是否可以为空主键外键医生编号char(5)不可为空是病人编号char(10)不可为空是药品数量varchar(10)药品编号char(20)是处方时间varchar(10)3.4.7配药单表共5字段:收费员编号、病人编号、药品编号、收费金额、收费时间。如下表:配药单表字段名数据类型是否可以为空主键外键收费员编号char(10)不可为空是病人编号char(10)不可为空是药品编号char(20)是收费金额money收费时间datetime3.4.8收费员信息表共有2字段:收费员编号、收费员姓名。如下表:收费员信息表字段名数据类型是否可以为空主键外键收费员编号char(10)不可为空是收费员姓名varchar(10)3.4.9药品种类表共有3字段:药品编号、名称、配药数量。如下表:药品种类表字段名数据类型是否可以为空主键外键11药品编号char(20)不可为空是名称varchar(10)配药数量varchar(10)3.4.10药品种类表共有3字段:药品编号、名称、配药数量。如下表:收费员信息表字段名数据类型是否可以为空主键外键药品编号char(10)不可为空是类型名varchar(10)库存位置varchar(20)4、逻辑结构设计在这个阶段里,该系统的目标就是把基本的E-R图转换成关系数据模型。通过转换,得到的所需的数据表如下,1.医生信息表(医生编号、科室编号、姓名、性别、年龄、电话)2.病人信息表(病人编号、收费员编号、医生编号、配药单编号、科室编号、病人姓名、病人性别、病人年龄、病人电话、身份证号码、医治时间、备注、纳费时间)3.科室信息表(科室编号、科室名称、科室位置)4.药品信息表(药品编号、类型编号、名称、生产地点、生产日期、有效期、治疗功效、库存数量、备注)5.药品库存表(药品编号、名称、库存数量、入库单价、出库单价)6.处方表(处方编号、医生编号、病人编号、药品数量、药品编号、处方时间)7.配药单表(配药单、收费员编号、病人编号、药品编号、收费金额、收费时间)8.收费员信息(收费员编号、收费员姓名)9.药品类型:(药品编号、类型名、库存位置)10.药品种类:(药品编号、配药单编号、处方编号、名称、配药数量)5、物理结构这个阶段的任务就是根据逻辑结构设计选取一个最合适应用要求的物理结构的过程,就是数据库的物理结构设计:5.1创建触发器,当药品入库、出库时自动修改库存createtriggerexport_medicineon药品种类表forinsertasbegindeclare@tint,@numint,@num1intset@t=(selectinserted.药品编号frominserted)select@num=药品名称表.配药数量from药品名称表select@num1=药品库存表.库存数量12from药品库存表if(@num1=@num)beginselect@num1=@num1-@numfrom药品名称表,药品库存表where药品名称表.药品编号=药品库存表.药品编号and药品名称表.药品编号=@tendelsebeginprint'配药数量已超过库存数量!'rollbacktransactionendupdate药品库存set库存数量=@num1where药品编号=@t;end5.2创建存储过程统计某段时间内,各科室的就诊人数和输入情况createprocedurenum_count@time1datetime,@time2datetimeasbeginselect科室信息表.科室编号,科室信息表.科室名称,count(病人信息表.病人编号)as病人人数,@time1开始时间,@time2结束时间from科室,病人where科室信息表.科室编号=病人信息表.科室编号and医治时间=@time1and医治时间=@time2groupby科室信息表.科室编号,科室信息表.科室名称end5.3创建视图查询各种药品的库存总数createview药品库存总数asselect库存数量from药品库存表5.4建立完整性约束altertable病人信息表addconstraintcheck_病人性别check(病人性别in('男','女')),13constraintcheck_病人电话check(病人电话like('1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),constraintcheck_身份证号码check(身份证号码like('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))goaltertable医生信息表addconstraintcheck_性别check(性别in('男','女')),constraintcheck_电话check(电话like('1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))