您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页数据库课程设计报告(医院管理系统)

数据库课程设计报告(医院管理系统)

来源:爱问旅游网
数据库课程设计 医院管理系统实验报告

题目: 医院管理系统 姓名: 班级: 学号: 指导教师:

2014年 6 月 7日

医院信息管理系统

一、 系统需求分析

通过一个医院管理系统,使医院的管理工作系统化、规范化、自动化,从而达到提高医院管理效率的目的。 1. 系统功能分析

医院管理系统需要完成的主要功能有:

 员工各种信息的输入,包括员工基本信息、职称、岗位等.  员工各种信息的查询、修改,包括员工基本信息、职称、岗位、工资等。

 员工的人事调动管理.  病人信息的管理。  医院病床的管理。  药剂资源管理.  仪器资源管理.

 系统用户管理、权限管理。 2. 系统功能模块设计

根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面。设计者可只实现住院部、员工管理两个模块的相关功能,其中门诊部、药品和仪器两个模块可根据时间选做。

二、 数据库设计

1. 数据库的逻辑结构设计

PERSONNEL 员工基本情况表

字段名称 EMP_NO EMP_NAME EMP_DEPT_ID EMP_DUTY EMP_XL EMP_GENDER EMP_BIRTHDAY EMP_HOMETOWN EMP_COUNTYR EMP_NATION EMP_ID EMP_MARRIAGE EMP_HEALTY EMP_STARTWORK EMP_STATE EMP_HOMEADDRESS EMP_TELENO EMP_EMAIL EMP_JOB_ID 字段含义 员工号 员工姓名 所在部门号 职务 学历 性别 生日 籍贯 国籍 民族 身份证号 婚姻状况 健康状况 参加工作时间 员工状态 家庭住址 联系电话 联系EMAIL地址 工作岗位代号 数据类型 char(10) char(5) char(5) char(6) char(6) char(5) char(10) char(20) char(30) char(5) char(20) char(10) char(10) char(10) char(6) char(30) char(15) char(10) char(8) 是否为主键 Y JOB工作岗位情况表

字段名称 JOB_ID JOB_NAME 字段含义 工作岗位代号 工作岗位名称 数据类型 char(8) char(10) 是否为主键 Y SALARY工资信息表

字段名称 EMP_NO EMP_SALARY 字段含义 员工号 员工工资 数据类型 char(10) char(10) 是否为主键 Y PATIENT病人信息表

字段名称 PNAME PGENDRE PDATESTART PDEPT PSTATE PDOC PROOM PBED 字段含义 病人姓名 病人性别 入院时间 病人所属科室 病人状况 主治医生 病人房间号 病人病床号 数据类型 char(10) char(5) char(5) char(6) char(8) char(10) char(6) char(8) 是否为主键 Y Y Y ROOM房间信息表

字段名称 PROOM PBED PROOMSTATE 字段含义 房间号 病床号 房间状态 数据类型 char(6) char(8) char(5) 是否为主键 Y BED病床信息表

字段名称 PROOM PBED PBEDSTATE 字段含义 房间号 病床号 病床状态 数据类型 char(6) char(8) char(5) 是否为主键 Y POTION药剂信息表

字段名称 POTION_ID POTION_NAME POTION_PRICE POTION_QUANTITY POTION_REM 字段含义 药剂代号 药剂名称 药剂价格 药剂库存数量 备注 数据类型 char(8) char(15) char(8) char(8) char(30) 是否为主键 Y APPARATUR医疗信息表

字段名称 APPARTUS_ID APPARTUS_NAME APPARTUS_PRICE APPARTUS_QUANTITY APPARTUS_REM 字段含义 药剂代号 药剂名称 药剂价格 药剂库存数量 备注 数据类型 char(8) char(15) char(8) char(8) char(30) 是否为主键 Y 2. 全局ER图

员工号 姓名 学历 病床号 病人姓名 房间号 所属科室 。。。。。 性别 职务 工作岗位名称 工作岗位代号 N 医生 主治 N 病人 M 1 N 入住 工作 N 工作岗位 1 1 病房 病房状态 入院时间 病人性别 病房号 病床号 3. 数据库的建立 CREATE TABLE JOB( JOB_ID CHAR(5), JOB_NAME CHAR(20), PRIMARY KEY(JOB_ID)); CREATE TABLE BASE(

EMP_NO CHAR(10) , EMP_NAME CHAR(8), EMP_DEPT_ID CHAR(5), EMP_DUTY CHAR(8), EMP_XL CHAR(5), EMP_GENDER CHAR(2), EMP_BIRTHDAY CHAR(9), EMP_HOMETOWN CHAR(20), EMP_COUNTRY CHAR(5), EMP_NATION CHAR(8), EMP_ID CHAR(19),

EMP_MARRIAGE CHAR(5), EMP_HEALTH CHAR(5),

EMP_STARTWORK CHAR(9), EMP_STATE CHAR(5),

EMP_HOMEADDRESS CHAR(30), EMP_TELENO CHAR(12), EMP_EMAIL CHAR(20), EMP_JOB_ID CHAR(5), PRIMARY KEY(EMP_NO),

FOREIGN KEY(EMP_JOB_ID) REFERENCES JOB(JOB_ID)); CREATE TABLE DEPT( DEPT_ID CHAR(4), DEPT_NAME CHAR(8), DEPT_MANAGER CHAR(10), DEPT_VICEMANAER CHAR(10) PRIMARY KEY(DEPT_ID)); create table salary (EMP_NO CHAR(10) , emp_salary char(10), primary key(EMP_NO),

foreign key(EMP_NO) references base(EMP_NO)); create table room(

room char(4) not null, proomstate char(6), primary key(proom)) create table bed(

proom char(4) not null, pbed char(4) not null, pbedstate char(5) primary key(pbed),

foreign key(proom) references room(proom)); create table patient

(pname char(8) not null, pgender char(8), pdata_state char(9), pdept char(8), pstate char(8), pdoc char(10), proom char(4), pbed char(4),

primary key(pname),

foreign key(pbed) references bed(pbed), foreign key(proom) references room(proom), foreign key(pdoc) references base(EMP_no) ); create table potion(

iid char(10) not null,

iname char(20), price char(10), shuliang char(10), rem char(50) );

create table appratus(

iid char(10) not null, iname char(20), price char(10), shuliang char(10), rem char(50) );

三、 各个模板功能实现

1. 入院登记 功能实现:

病人进行姓名,性别等基本情况登记,登记时可查看病房病床信息。 代码实现:

UpdateData(TRUE);

_ConnectionPtr m_pConnection;

_RecordsetPtr pRst(__uuidof(Recordset)); ::CoInitialize(NULL); Try{

m_pConnection.CreateInstance(\"ADODB。Connection”);

_bstr_tstrConn=\"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=hospitalMSQL;Data Source=431—18\"; m_pConnection-〉Open(strConn,\"\",”\",adModeUnknown); }

catch(_com_error e){

::CoUninitialize();

AfxMessageBox(e。ErrorMessage());

return;}//连接数据库,在后面将不再重复展示 _variant_t ra;

_bstr_t strAdd=”INSERT INTO patient VALUES(’\";

strAdd = strAdd+m_name+”’,'\";strAdd = strAdd+m_sex+\"’,’”; strAdd = strAdd+m_date+\"','\";strAdd = strAdd+m_dept+”’,’\"; strAdd = strAdd+m_state+”’,'”;strAdd = strAdd+m_doc+”',’”; strAdd = strAdd+m_room+\"’,'”;trAdd = strAdd+m_bed+”')”; _bstr_t strAdd2=”UPDATE bed SET pbedstate='\";

strAdd2 = strAdd2+\"非空\"+”'\";strAdd2 = strAdd2+\" WHERE pbed=\"+m_bed;

m_pConnection-〉Execute(strAdd,&ra,adCmdText); m_pConnection—>Execute(strAdd2,&ra,adCmdText); m_pConnection-〉Close();// AfxMessageBox(”成功更新数据!”); m_adodc2。SetRecordSource(”SELECT * FROM bed”); m_adodc2.Refresh();UpdateData(FALSE);

AfxMessageBox(\"登记成功,您将进入住院信息页面,您可以在此查看相关信息!\");

m_adodc1.SetRecordSource(”SELECT * FROM BASE”); m_adodc1。Refresh();

m_name=\"”;m_sex=”\";m_date=”\";m_dept=\"\";m_state=\"\"; m_doc=”\";m_room=””;m_bed=\"\";//登记完后清楚输入框 UpdateData(FALSE);zhuyuan b;b.DoModal();

2. 入院信息 功能实现

可查看正在住院人的信息以及病床信息 代码实现

if(SYes==1)//通过SYes来控制是根据什么查找的

{CString str=\"select pname,pgender,pdata_state,pdept,pstate,proom,pbed,emp_name from base,patient where base.emp_no=patient。pdoc and pname=’”+m_neirong+\"'\";

m_adodc1.SetRecordSource(str); m_adodc1.Refresh(); UpdateData(FALSE);}

else if(SYes==2){CString str=\"select pname,pgender,pdata_state,pdept,pstate,proom,pbed,emp_name from base,patient where base。emp_no=patient.pdoc and emp_name=’\"+m_neirong+\"’\"; m_adodc1。SetRecordSource(str);m_adodc1.Refresh(); UpdateData(FALSE);}

else if(SYes==3){CString str=”select pname,pgender,pdata_state,pdept,pstate,proom,pbed,emp_name from base,patient where base。emp_no=patient.pdoc and pdept=’”+m_neirong+\"’\"; m_adodc1。SetRecordSource(str);m_adodc1.Refresh(); UpdateData(FALSE);

3. 病人出院 功能实现 实现病人的删除 代码实现

CColumn col;VARIANT v_ColNum,v_Value; cols=m_datagrid1.GetColumns();

v_ColNum。vt=VT_I2;v_ColNum。iVal=7;col=cols.GetItem(v_ColNum); v_Value=col。GetValue(); CString tmp=v_Value.bstrVal;

CString tmp2=”确认要删除编号为\"+tmp+\"的记录吗?\";

if(MessageBox(tmp2,_T(”数据删除提示”),MB_YESNO|MB_ICONSTOP)!=IDYES)return; UpdateData(TRUE); ConnectionPtr pConn; ::CoInitialize(NULL); try{

pConn.CreateInstance(”ADODB.Connection\");

_bstr_t strConn=”Provider=SQLOLEDB。1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=hospitalMSQL;Data Source=431—18”; pConn-〉Open(strConn,\"\adModeUnknown);

// if(pConn—〉State==adStateOpen) MessageBox(”成功连接数据库”);} catch(_com_error e){ ::CoUninitialize();

AfxMessageBox(e。ErrorMessage()); return;} _variant_t ra;

_bstr_t strAdd2=\"UPDATE bed SET pbedstate=’\"; strAdd2 = strAdd2+”空”+\"’\";

strAdd2 = strAdd2+\" WHERE pbed=”+tmp;

_bstr_t strAdd=\"DELETE FROM patient WHERE pbed=”; strAdd=strAdd+\"’”+tmp+\"'”;

pConn->Execute(strAdd2,&ra,adCmdText); pConn-〉Execute(strAdd,&ra,adCmdText);

pConn-〉Close();AfxMessageBox(\"成功更新数据!\");

m_adodc1。SetRecordSource(”SELECT * FROM patient”); m_adodc1.Refresh();

m_adodc2。SetRecordSource(\"SELECT * FROM bed\"); m_adodc2.Refresh(); UpdateData(FALSE);

4. 新人注册 功能实现

对新的员工进行员工号等基本信息录入 代码实现

_variant_t ra;

_bstr_t strAdd=\"INSERT INTO base VALUES('”;

strAdd = strAdd+m_id+\"',’”;strAdd = strAdd+m_name+”’,’”; strAdd = strAdd+m_dept+\"’,’\";strAdd = strAdd+m_duty+”’,'”; strAdd = strAdd+m_xl+”’,’”;strAdd = strAdd+m_sex+\"’,'”; strAdd = strAdd+m_bir+\"','”;strAdd = strAdd+m_hm+”','\";

strAdd = strAdd+m_cry+\"’,'”;strAdd = strAdd+m_nation+”','”; strAdd = strAdd+m_idcard+\"','”;strAdd = strAdd+m_mar+\"’,'”; strAdd = strAdd+m_hea+\"',’\";strAdd = strAdd+m_setime+\"','\"; strAdd = strAdd+m_state+\"','\"; strAdd = strAdd+m_homedas+\"',’\"; strAdd = strAdd+m_teleno+\"','\"; strAdd = strAdd+m_email+”',’\"; strAdd = strAdd+m_jobid+”')”;

_bstr_t strAdd2=\"INSERT INTO job VALUES(’\"; strAdd2 = strAdd2+m_jobid+\"’,'\"; strAdd2 = strAdd2+m_gangwei+”’)”;

_bstr_t strAdd3=”INSERT INTO salary VALUES('\"; strAdd3 = strAdd3+m_id+”’,’”; strAdd3 = strAdd3+m_gongzi+\"’)”;

m_pConnection-〉Execute(strAdd2,&ra,adCmdText); m_pConnection—〉Execute(strAdd,&ra,adCmdText); m_pConnection—>Execute(strAdd3,&ra,adCmdText); m_pConnection—>Close();AfxMessageBox(”注册成功!”); m_adodc1.SetRecordSource(\"SELECT * FROM BASE\"); m_adodc1。Refresh();

m_id=\"\";m_name=\"”;m_dept=\"\";m_duty=”\";m_xl=\"\";m_sex=””; m_bir=\"”;m_hm=””;m_cry=\"”;m_nation=”\";m_idcard=\"”;

m_mar=””;m_hea=””;m_setime=””;m_state=\"\";m_homedas=\"\"; m_teleno=\"”;m_email=\"”;m_jobid=\"”;m_gongzi=\"\"; m_gangwei=\"”;UpdateData(FALSE);

5. 在职员工 功能实现

实现对员工及其工资的查询,工资查询需要进行权限检查 代码实现

if(m_SelectYes==1){

CString str=\"select * from base where 员工姓名=’”+m_name+\"'”; m_adodc1.SetRecordSource(str); m_adodc1。Refresh();

m_name=\"”;UpdateData(FALSE);}

else if(m_SelectYes==2){

CString str=”select * from base where 员工号='\"+m_id+\"'”; m_adodc1。SetRecordSource(str);m_adodc1.Refresh();m_id=\"”; UpdateData(FALSE);}

else if(m_SelectYes==3){

CString str=\"select * from base where 工作岗位代号=’\"+m_dept+\"’\";m_adodc1.SetRecordSource(str);m_dept=”\"; m_adodc1。Refresh();UpdateData(FALSE);}

6. 人事调动 功能实现

完成对员工的删除与对员工信息的修改 代码实现 员工信息修改

_variant_t ra;

_bstr_t strAdd=”UPDATE base SET EMP_DEPT_ID=’”; strAdd = strAdd+m_dept+\"',EMP_DUTY=’\"; strAdd = strAdd+m_duty+”',EMP_EMAIL='”;

strAdd = strAdd+m_email+\"’,EMP_HOMEADDRESS='\"; strAdd = strAdd+m_hds+”',EMP_JOB_ID=’\"; strAdd = strAdd+m_jobid+”',EMP_TELENO=’\"; strAdd = strAdd+m_tele+\"',EMP_XL='”; strAdd = strAdd+m_xueli+”'\";

strAdd = strAdd+\" WHERE EMP_NO=”+m_id;

_bstr_t strAdd2=\"UPDATE salary SET emp_salary='\"; strAdd2 = strAdd2+m_gongzi+\"’”;

strAdd2 = strAdd2+” WHERE EMP_NO=\"+m_id; _bstr_t strAdd3=”UPDATE job SET job_id='”; strAdd3 = strAdd3+m_jobid+”',job_name='\"; strAdd3 = strAdd3+m_gangwei+\"'\";

strAdd3 = strAdd3+” WHERE EMP_NO=”+m_id;

m_pConnection->Execute(strAdd,&ra,adCmdText); m_pConnection—〉Close(); AfxMessageBox(\"成功更新数据!”); m_dept=””;m_duty=”\";m_email=””;m_hds=””;m_jobid=”\";m_tele=”\";m_xueli=”\";m_gangwei=\"\";m_id=\"”;m_gongzi=\"\"; m_adodc1。SetRecordSource(”SELECT * FROM BASE”); m_adodc1.Refresh();UpdateData(FALSE);

员工删除

_variant_t ra;

_bstr_t strAdd=\"DELETE FROM base WHERE emp_no=”; strAdd=strAdd+”'”+tmp+”'\";

_bstr_t strAdd2=\"DELETE FROM salary WHERE emp_no=\"; strAdd2=strAdd2+”'”+tmp+\"'”;

_bstr_t strAdd3=\"DELETE FROM job WHERE job_id=”; strAdd3=strAdd3+\"’”+tmp1+”'\";

pConn—〉Execute(strAdd,&ra,adCmdText); pConn—〉Execute(strAdd2,&ra,adCmdText);

pConn—>Execute(strAdd3,&ra,adCmdText);pConn—〉Close(); m_adodc1。SetRecordSource(”SELECT * FROM base”); m_adodc1。Refresh();UpdateData(FALSE);}

7. 药品仪器信息 功能实现

实现对药品以及仪器的查询 代码实现

UpdateData(TRUE);if(SSyes==1||SSyes==0)

{CString str=\"select * FROM potion WHERE \"+m_shuru+”=\"; str+=”’\"+m_neirong+”'”; m_adodc1.SetRecordSource(str);

m_adodc1.Refresh();UpdateData(FALSE);} else if(SSyes==2){

CString str=\"select * FROM apparatus WHERE ”+m_shuru+\"=\"; str+=\"’”+m_neirong+”’\";m_adodc1.SetRecordSource(str); m_adodc1.Refresh();UpdateData(FALSE);

8. 权限检查

CString a,b;m_yonghu.GetWindowText(a); m_mima。GetWindowText(b);

if (strcmp(a,\"admin\")==0&&strcmp(b,”admin\")==0){ AfxMessageBox(\"登陆成功!”);salary a;a。DoModal();} else AfxMessageBox(\"该用户没有权限”);

四、 心得体会

这次实验,我主要遇到了以下几个问题:

对于数据库怎么插入数据存在疑问,觉得如果要自己一条一条数据用INSERT语句插入很麻烦,但后来通过与同学,还有向其他人请教,

才明白,在我们自己设计的时候这些数据只是用来测试自己系统功能的。

在实现插入,更新,删除等功能时,对于有外键约束的表插入时会有RUNTIME ERROR错误,比如员工基本信息表BASE与工作岗位表JOB存在工作岗位代号,在JOB表中是主键,在BASE中是外键,在插入数据时如果JOB表中没有相关的工作岗位代号插入数据时就会有错误。在老师指导后,我也发现了找出这种错误的方法,就是在SQL查询分析器里先实现自己插入,更新的语句,一般在那里面能实现,基本在程序里也能实现。

在整个系统完成后,感觉自己的系统还是很幼稚,比如打开一个窗口没法对当前窗口进行比较好的处置,还有就是权限检查,每次进入都要重复检查,十分的麻烦,希望自己能通过以后的自主学习,有更好的改进。

当然这次实验过后自己还是有很多收获的,感觉自己在熟悉这些操作后当前的系统应该花一两天时间就能够做出来,可见时间主要都花在学习与熟悉的过程,这要让我知道了自己平常接触的东西是多么狭隘,希望自己能抓紧时间多学点东西。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务