医院信息管理是一项琐碎、复杂而又十分细致的工作,这关系到医院体系能否运行起来这一关乎国民健康水平的重大问题。我们只有利用好了医院中每个医生、护士的各项资源,才能使得医院系统能够有序而条理的进行,更好的安排有限的医生和护士资源,安排患者就诊。同时,在设计医院信息管理系统的同时也兼顾了药品的管理,使得我们在安排各项工作的时候能够更加的清晰明了,其可以与药房管理系统和挂号管理系统相连接,更好的实现医院的管理功能
2.数据输入功能
2>医生实体。包括医生编号,医生姓名,职务,性别,年龄…
3>病房实体。包括房间号,房间地址…
4>患者实体,包括患者编号,患者名,性别,年龄…
5>护士实体。包括护士编号,护士姓名,性别,年龄…
6>药品实体。包括药品编号,药品名,供应商,库存,价格…
7>病房从属科室关系。
8>科室下属医生关系。
9>患者的主治医生关系。包括疾病…
12>患者使用药品关系。包括数量…
根据需求分析结构,构建E-R图,如图2-1所示。
3逻辑结构设计
1.医生(医生编号,姓名,性别,年龄,职务,科室编号)
3.病房(病房编号,病房地址,所属部门号)
5.护士(护士编号,姓名,性别,年龄)
6.药品(药品编号,药品名称,药品厂家,药品库存,药品售价)
8.用药记录表(患者编号,药品编号,用药数量)
1.医生表的创建:
createtabledoctor(dnochar(3)primarykey,dnamechar(20),dutychar(20),dsexbit(1),dageintcheck(page>=0andpage<=150),dpnochar(1),foreignkey(dpno)referencesdepartment(dpno));
插入数据:
insertintodoctorvalues("101","李小明","中级医师",1,18,"1");
2.部门表的创建:
createtabledepartment(dpnamechar(10)notnullunique,dpnochar(1)primarykey,dpadrchar(20),dptelchar(20));
insertintodepartmentvalues("内科","1","一号楼514","04512340987");
3.病房表的创建:
createtableroom(rnochar(10)primarykey,radrchar(20)unique,dpnochar(5),foreignkey(dpno)referencesdepartment(dpno));
insertintoroomvalues("1101","一号楼101","1"),;
4.患者表的创建:
createtablepatient(pnochar(20)primarykey,pnamechar(20)notnull,psexbit(1),pageintcheck(page>=0andpage<=150),dnochar(3),rnochar(10),illnesschar(20),startdatedate,predictenddatedate,foreignkey(dno)referencesdoctor(dno),foreignkey(rno)referencesroom(rno));
insertintopatientvalues
("0001","赵一",1,20,"101","1101","左脚踝粉碎性骨折","2018-12-20","2019-01-28");
5.护士表的创建:
createtablenurse(nnochar(2)primarykey,nnamechar(10)unique,nsexbit(1),nageint);
insertintonursevalues("01","黎晓蓓",0,21);
6.药品表的创建:
createtabledrug(dgnochar(4)primarykey,dgnamechar(20),dgprochar(20),dgnumintcheck(dgnum>=0),dgpriceintcheck(dgprice>=0));
insertintodrugvalues("0001","注射用苄星青霉素","哈尔滨制药厂",123,24);
7.护理记录表的创建:
createtablePN(pnochar(20),nnochar(2),contentchar(20),timedatetime,foreignkey(pno)referencespatient(pno),foreignkey(nno)referencesnurse(nno));
insertintoPNvalues("0001","01","康复治疗1","2018-12-2213:12:11");
8.用药记录表的创建:
createtablePD(dgnochar(4),pnochar(4),numintcheck(num>=0),foreignkey(dgno)referencesdrug(dgno),foreignkey(pno)referencespatient(pno),primarykey(dgno,pno));
insertintoPDvalues("0001","0001",1);
数据控制部分采用Python连接MySQL数据库来操纵数据,其主要步骤为:
1.增:
1>增加科室
sql="INSERTINTOdepartment(dpname,dpno,dpadr,dptel)VALUES('%s','%s','%s','%s')"
2>增加医生
sql="INSERTINTOdoctor(dno,dname,duty,dsex,dage,dpno)VALUES('%s','%s','%s',%d,%d,'%s')"
输入医生的编号,姓名,性别,职务,年龄和所属部门编号进行匹配SQL语句。
3>增加病房
sql="INSERTINTOroom(rno,radr,dpno)VALUES('%s','%s','%s')"
输入病房的编号,病房地址和所属部门编号进行匹配SQL语句。
4>增加患者
sql="INSERTINTOpatient(pno,pname,psex,page,dno,rno,illness,startdate,predictenddate)VALUES('%s','%s',%d,%d,'%s','%s','%s','%s','%s')"
5>增加护士
sql="INSERTINTOnurse(nno,nname,nsex,nage)VALUES('%s','%s',%d,%d)"
输入护士的编号,姓名,性别和年龄进行匹配SQL语句。
6>增加药品
sql="INSERTINTOdrug(dgno,dgname,dgpro,dgnum,dgprice)VALUES('%s','%s','%s',%d,%d)"
输入药品的编号,名称,产地,库存和价格进行匹配SQL语句。
7>增加用药记录
sql="INSERTINTOPD(dgno,pno,num)VALUES('%s','%s',%d)"
输入药品的编号,患者的编号和用药数目进行匹配SQL语句。
8>增加护理记录
sql="INSERTINTOPN(pno,nno,content,time)VALUES('%s','%s','%s','%s')"
2.删:因为部门,医生及病房的删除过程比较复杂,故不予考虑。
1>删除患者
输入患者编号,删除其护理记录,用药记录和患者记录。
sql="DELETEFROMPNWHEREpno='%s'"
删除护理记录
sql="DELETEFROMPDWHEREpno='%s'"
删除用药记录
sql="DELETEFROMpatientWHEREpno='%s'"
删除患者记录
2>删除护士
输入护士编号,删除其护理记录,和护士记录。
sql="DELETEFROMPNWHEREnno='%s'"
sql="DELETEFROMnurseWHEREnno='%s'"
删除护士记录
3>删除药品
输入药品编号,删除其用药记录和药品记录。
sql="DELETEFROMPDWHEREdgno='%s'"
sql="DELETEFROMdrugWHEREdgno='%s'"
删除药品记录
4>删除护理记录
输入护士编号和患者编号,删除护理记录。
sql="DELETEFROMPNWHEREpno='%s'andnno='%s'"
5>删除用药记录
输入药品编号和患者编号,删除用药记录。
sql="DELETEFROMPDWHEREpno='%s'anddgno='%s'"
3.改:
1>修改药品库存
输入药品编号来修改药品库存。
sql="UPDATEdrugSETdgnum=%dWHEREdgno='%s'"
输入药品编号来修改药品售价。
sql="UPDATEdrugSETdgprice=%dWHEREdgno='%s'"
输入药品编号和患者编号来修改患者使用药品数量。
sql="UPDATEPDSETnum=%dWHEREdgno='%s'andpno='%s'"
sql="UPDATEpatientSETpredictenddate='%s'WHEREpno='%s'"
输入患者编号来修改患者房间号码。
sql="UPDATEpatientSETrno='%s'WHEREpno='%s'"
4.查:这里的查询都是用的存储过程写的,故在这里直接写存储过程及在MySQL环境下的call调用过程。
1>查询医生姓名及部门createproceduresl_department(inddnochar(4))beginselectdname医生姓名,dpname科室名fromdepartment,doctorwheredepartment.dpno=doctor.dpnoanddoctor.dno=ddno;end;callsl_department("302");
2>查询科室的每个患者及其主治医师createproceduresl_department_patientname(inddpnochar(1))beginselectpname患者名,patient.pno患者编号,dname主治医师姓名,doctor.dno主治医师编号frompatient,doctor,departmentwherepatient.dno=doctor.dnoanddepartment.dpno=doctor.dpnoandddpno=department.dpno;end;callsl_department_patientname("1");
3>查询科室就诊人数createproceduresl_department_patientnum(inddpnochar(1))beginselectcount(*)科室患者数frompatient,doctor,departmentwherepatient.dno=doctor.dnoanddepartment.dpno=doctor.dpnoandddpno=department.dpno;end;callsl_department_patientnum("2");
4>查询患者的主治医生及其职务科室
createproceduresl_doctor(inppnochar(4))beginselectdoctor.dname医生姓名,doctor.duty职务,dpname科室名fromdoctor,departmentwheredepartment.dpno=doctor.dpnoanddnoin(selectdnofrompatientwhereppno=pno);end;callsl_doctor("0001");
5>查询医生主治的患者数量createproceduresl_doctor_patientnum(inddnochar(4))beginselectcount(*)医生主治的患者数量frompatientwherepatient.dno=ddno;end;callsl_doctor_patientnum("102");
6>查询患者用药情况createproceduresl_drug_patient(inppnochar(4))beginselectpname患者姓名,illness病症,dgname药物名,num数量frompatient,drug,PDwherepatient.pno=pd.pnoanddrug.dgno=pd.dgnoandpd.pno=ppno;end;callsl_drug_patient("0001");
7>查询患者应缴金额createproceduresl_money(inppnochar(4))beginselectsum(num*dgprice)应缴金额frompd,patient,drugwherepd.pno=patient.pnoanddrug.dgno=pd.dgnoandpatient.pno=ppno;end;callsl_money("0023");
8>查询科室的病房createproceduresl_room(inddpnochar(1))beginselectdpname科室名,rno病房编号,radr病房地址fromroom,departmentwhereddpno=room.dpnoandroom.dpno=department.dpno;end;callsl_room("1");
9>根据护士编号查询护士姓名createproceduresl_nurse(innnnochar(2))beginselectnno护士编号,nname护士姓名fromnursewherenno=nnno;end;callsl_nurse("05");
11>以患者编号查询室友createproceduresl_patient_one_room(inppnochar(4))beginselectA.pname,A.pnofrompatientAwherernoin(selectB.rnofrompatientBwhereB.pno=ppno);end;callsl_patient_one_room("0002");
12>查询同一病房的患者createproceduresl_room_patient(inrrnochar(4))beginselectpno,pnamefrompatientwhererno=rrno;end;callsl_room_patient("1407");
1.增
向医生表中加入一个工号为104,姓名为李来文的医生,再查询是否增加了该条记录。
图4.13:增加界面
2.改
先查询1号患者所要支付的钱,再将药品价格上调后,查询1号患者所需支付的钱,不同则为修改了。
图4.14:修改界面
如上图:修改前为1883,修改后为1889,说明数据发生了修改。
3.删
先查询8号护士是否存在,看到存在后将其删了,再次查询看8号护士是否存在。