数据库课程设计报告.doc_第1页
数据库课程设计报告.doc_第2页
数据库课程设计报告.doc_第3页
数据库课程设计报告.doc_第4页
数据库课程设计报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南科技大学计算机科学与工程学院数据库系统课程设计题 目:专 业:年 级:班 级:学 号:姓 名:指导老师:完成时间: 目录目录1一、背景2二、系统需求分析22.1系统功能分析22.2系统物理模块设计22.3数据流程图2三、 数据库设计33.1数据库需求分析33.2概念模型设计33.3逻辑结构设计5四、数据库程序设计84.1用户登录模块84.2 用户管理模块104.3 主菜单模块124.4住院部模块124.5员工管理模块134.6药品仪器管理模块16五、心得体会16一、背景现代化的医院也应该有现代化的管理系统。在科技日益发达的今天,人们的身体健康也在不断受到重视。因此,医院进行现代化管理就变得尤为重要。二、系统需求分析2.1系统功能分析 通过一个医院管理系统,使医院的管理工作系统化、规范化、自动化,从而达到提高医院管理效率的目的。经过调研及分析,医院管理系统系统主要完成以下功能:(1) 员工各种信息的输入,包括员工基本信息、职称、岗位等。(2) 员工各种信息的查询、修改,包括员工基本信息、职称、岗位、工资等。(3) 员工的人事调动管理。(4) 病人信息的管理。(5) 医院病床的管理。(6) 药剂资源管理。(7) 仪器资源管理。(8) 系统用户管理、权限管理。2.2系统物理模块设计根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面,如图1所示。设计者可只实现住院部、员工管理两个模块的相关功能,其中门诊部、药品和仪器两个模块可根据时间选做。图1、医院管理系统功能模块图2.3数据流程图医院管理系统的数据流程如图所示:三、数据库设计3.1数据库需求分析通过对医院管理的内容和数据关系分析,我们设计的数据项和数据结构如下:(1) 员工基本状况包括的数据项有员工号、员工姓名、性别、所在部门、身份证号、生日、籍贯、国籍、民族、婚姻状况、健康状况、参加工作时间、员工状态、家庭住址、联系电话等。(2) 员工工资状况包括的数据项有员工号、工资项别、工资金额等。(3) 医院工作岗位信息包括的数据库项有工作岗位代号、工作岗位名称等。(4) 医院部门信息包括的数据项有部门代号、部门名称、部门负责人等。(5) 病人信息包括的数据项有病人姓名、病人性别、入院时间、病人所属科室、病人状况、病人主治医生、房问号、病床号等。(6) 药剂资源管理信息包括的数据项有药剂代号、药剂名称、药剂价格、药剂库存数量、备注等。(7) 医疗仪器管理包括的数据项有仪器代号、仪器名称、仪器价格、仪器数量、备注等。有了上面的数据结构、数据项和数据关系,我们就能进行下面的数据库设计。3.2概念模型设计本系统根据上面的设计规划出的实体有员工实体、部门实体、岗位实体、病人实体、药剂实体、仪器实体。部分实体E-R图模型如图所示。 3.3逻辑结构设计 在上面的实体以及实体之间关系的基础上,我们就可以形成数据库中的表格以及各个表格之间的关系。医院管理系统数据库中各个表格的设计结果如表1到表7所示。表1 PERSONNEL员工基本状况表列名数据类型是否可空说明EMP_NOvarchar(8)NOT NULL员工号(主键)EMP_NAMEvarchar(8)NOT NULL员工姓名EMP_DEPT_IDvarchar(8)NOT NULL所在的部门号EMP_DUTYvarchar(8)NOT NULL职务EMP_XLvarchar(8)NOT NULL学历EMP_GENDERvarchar(4)NOT NULL性别EMP_BIRTHDAYvarchar(20)NULL生日EMP_HOMETOWNvarchar(20)NOT NULL籍贯EMP_COUNTRYvarchar(20)NOT NULL国籍EMP_NATIONvarchar(10)NULL民族EMP_IDvarchar(20)NOT NULL身份证号EMP_MARRIAGEvarchar(4)NULL婚姻状况EMP_HEALTHvarchar(4)NOT NULL健康状况EMP_STARTWORKvarchar(20)NOT NULL参加工作时间EMP_STATEvarchar(10)NOT NULL员工状态EMP_HOMEADDRESSvarchar(20)NOT NULL家庭住址EMP_TELENOvarchar(20)NOT NULL联系电话EMP_EMAILvarchar(20)NOT NULL联系Email地址EMP_JOB_IDvarchar(8)NOT NULL工作岗位代号表2 JOB工作岗位情况表列名数据类型是否可空说明JOB_IDvarchar(8)NOT NULL工作岗位代号(主键)JOB_NAMEvarchar(10)NOT NULL工作岗位名称表3 DEPT部门信息表列名数据类型是否可空说明DEPT_IDvarchar(8)NOT NULL部门代号(主键)DEPT_NAMEvarchar(20)NOT NULL部门名称DEPT_MANAGERvarchar(10)NOT NULL部门主任代号DEPT_VICEMANAERvarchar(10)NOT NULL部门副主任代号表4 病人信息表PATIENT列名数据类型是否可空说明PATIENT_NAMEvarchar(8)NOT NULL病人姓名PATIENT_GENDERvarchar(4)NOT NULL病人性别PATIENT_DATE_STARTvarchar(20)NOT NULL入院时间PATIENT_DEPTvarchar(10)NOT NULL病人所属科室PATIENT_STATEvarchar(8)NOT NULL病人状况PATIENT_DOCvarchar(8)NOT NULL病人主治医生PATIENT_ROOMvarchar(4)NOT NULL病人房间号PATIENT_BEDvarchar(4)NOT NULL病人病床号表5 药剂信息表POTION列名数据类型是否可空说明POTION_IDvarchar(8)NOT NULL药剂代号(主键)POTION_NAMEvarchar(8)NOT NULL药剂名称POTION_PRICEint(4)NOT NULL药剂价格POTION_QUANTITYInt(8)NOT NULL药剂库存数量POTION_REMvarchar(20)NULL备注表6 医疗仪器信息表APPARATUS列名数据类型是否可空说明APPARTUS_IDvarchar(8)NOT NULL仪器代号,主键APPARTUS_NAMEvarchar(8)NOT NULL仪器名称APPARTUS_PRICEint(8)NOT NULL仪器价格APPARTUS_QUANTITYInt(4)NOT NULL仪器数量APPARTUS_REMvarchar(20)NULL备注表7 管理TMS系统的用户口令表TMS字段名数据类型是否可空说明TMS_USERvarchar(10)NOT NULL用户名(主键)TMS_PSWDvarchar(20)NULL口令四、数据库程序设计4.1用户登录模块4.1.1界面概述登录模块的详细设计主要是用户登录的一个界面,判断登录的用户是否是该医院系统的用户进入后将面对的是主界面,从而进行相关的操作。登录的界面主要由用户名和密码的信息,还有一些标题设置,注册、登录和取消的按钮组成。用户名可以下拉选择几个初始的用户,没有用户名可以先进行注册,注册的算法实现就是通过sql语句向数据库TMS用户表中插入数据,若用户名已存在则需重新输入返回登录界面便可登录,注册默认的身份是普通用户,普通用户登录跳转到主菜单,而管理员则先跳转至用户管理界面,登录按钮函数里面是根据查询数据库中有没有匹配的用户名和密码,判断是否跳转至下一界面。由此,登录界面的设计完成。窗体如下:4.1.2算法说明1注册按钮,主要利用了窗口自带的跳转函数,部分代码如下,点击则跳转,后面很多按钮都会用到这段代码,其中CREGISTER 是下一窗口类名,dlg为实例对象,dlg.DoModal()为跳转函数。ShowWindow(SW_HIDE)隐藏当前窗口,SW_SHOW则显示当前窗口。this-ShowWindow(SW_HIDE);CREGISTER dlg;dlg.DoModal();this-ShowWindow(SW_SHOW);跳转到注册界面注册的时候,注册的算法是,先用指导书的代码连接数据库,然后再执行sql语句sql.Format(select * from TMS where TMS_USER = %s,m_USER);(m_USER为用户名编辑框的控件名),判断用户名是否已存在。不存在则执行sql.Format(INSERT INTO TMSVALUES(%s,%s,%s),m_USER,m_PSWD,普通用户);(默认权限是普通用户。)向用户表中插入用户数据。2.登录按钮,同样是先连接数据库,再执行sql.Format(select * from TMS where TMS_USER = %s and TMS_PSWD = %s,m_logid,m_pwd);查询数据库中有没有匹配的用户名和密码。如果有则进行界面跳转。部分代码如下:/如果找到if(!m_pRecordset-adoEOF) /获取当前用户权限,赋值给全局变量RecordsAffected=m_pRecordset-GetCollect(TMS_AUTHORITY);theApp.AUTHORITY=(LPCSTR)_bstr_t(RecordsAffected);/int i=(int)RecordsAffected.iVal;if(theApp.AUTHORITY=管理员)this-ShowWindow(SW_HIDE);CROOT dlg;dlg.DoModal();this-ShowWindow(SW_SHOW);else this-ShowWindow(SW_HIDE);CMYHOSDlg dlg;dlg.DoModal();this-ShowWindow(SW_SHOW);else MessageBox(用户名或密码有误);其中theApp.AUTHORITY是用于存放权限的全局变量,theApp是主窗口的全局类对象,只需在在theApp的成员变量中定义AUTHORITY,然后再窗口cpp开头声明一下extern CMYHOSApp theApp;就可以在所有窗口使用,后面判断用户操作权限的时候要用到。4.2 用户管理模块4.2.1界面概述用户管理界面主要由一个用户信息表和一些功能按钮以及一些文本编辑框组成。功能有浏览用户信息,查询,插入,删除某个用户。右下角按钮可以返回和跳转主菜单。4.2.2算法说明1.窗口中的信息表是有datagrid控件和Adodc控件实现的,根据指导书中的方法,用Adodc连接数据库,记录源设置为select*from TMS然后将表控件和连接控件联系起来就可以显示用户表信息。2.查询按钮,查询的思想就是将ADO控件的记录源改为select*from TMS where TMS_USER = m_VALUE;实现代码如下:CString tmpStr, strSQL = SELECT * FROM TMS WHERE ; m_TMS.GetWindowText(tmpStr); strSQL += tmpStr+ = ;strSQL += +m_VALUE+; m_Adodc1.SetRecordSource(strSQL); m_Adodc1.Refresh();3.插入按钮,相对与查询而言,插入就必须要用代码连接数据库,再对数据库进行操作,而这部分算法和前面的注册是一样的,只不过这里可以添加管理员权限而已,同样插入用户名不能相同。4.删除按钮,同样是首先连接数据库,再执行_bstr_t strAdd = DELETE FROM TMS WHERE TMS_USER = +tmp+;删除数据。tmp是获取表中的当前行用户名,tmp1是用户权限值,如果是管理员则不能进行删除。部分代码如下:CColumns cols; /要包含头文件Columns.h CColumn col; /要包含头文件Column.h VARIANT v_ColNum,v_Value; cols = m_datagrid1.GetColumns();/调用GetColumns返回CDataGrid对应的CColumns对象 v_ColNum.vt = VT_I2; /读取学号 v_ColNum.iVal = 0; /设置列编号 col = cols.GetItem(v_ColNum); /根据列编号返回CColumn对象 v_Value = col.GetValue(); /读取列值 CString tmp = v_Value.bstrVal;/读取权限 v_ColNum.iVal = 2; /设置列编号 col = cols.GetItem(v_ColNum); /根据列编号返回CColumn对象 v_Value = col.GetValue(); /读取列值 CString tmp1 = v_Value.bstrVal;if(tmp1=管理员) MessageBox(当前用户不可操作);else / int curRow=atoi(tmp);CString tmp2 = 确认要删除用户名为 +tmp+ 的记录吗?;if(MessageBox(tmp2, _T(数据删除提示), MB_YESNO|MB_ICONSTOP)!=IDYES) return;4.3 主菜单模块主菜单设计的界面是用由几个跳转按钮组成,有住院部、门诊部、员工管理、药品仪器4个选项,还有一个退出菜单。主窗体是进行功能选择的主界面。算法比较简单,都是一些跳转算法,这里不再赘述,窗体如下:4.4住院部模块4.4.1界面概述在这个模块中,包含2个子模块,首先转到的是住院部的功能选择界面,里面有病床管理和病人管理两个选项。两个模块的功能类似,这里只对病人管理界面进详细描述。病人管理界面实现了对病人的增删查改一体化操作,其中还有权限判断的功能,普通用户只能进行查询操作,右边那一块都无权进行操作。病床部门岗位4.4.2算法说明 查询插入删除操作的算法和前面的基本一致,这里先说明一下权限管理,其实就是判断全局变量AUTHORITY是否为管理员。然后就是更新,双击表中的某一行,表中数据会显示到下面文本编辑框里面,在文本框里面修改数据再更新入数据表中。首先双击操作的实现需要为表控件添加一个OnDbclickDatagrid()的成员函数,里面添加代码用于读取当前行的值并把值一一赋给edit控件,这样就实现了双击显示数据。更新操作也是先连接数据库,再执行更新的sql语句,部分代码如下:_variant_t ra; _bstr_t strAdd = UPDATE PATIENT SET PATIENT_NAME = ;strAdd = strAdd + m_NAME + ,PATIENT_GENDER = ;strAdd = strAdd + m_GENDER + ,PATIENT_DATE_START = ;strAdd = strAdd + m_DATE_START + , PATIENT_DEPT = ;strAdd = strAdd + m_DEPT + , PATIENT_STATE = ;strAdd = strAdd + m_STATE + , PATIENT_DOC = ;strAdd = strAdd + m_DOC + , PATIENT_ROOM = ;strAdd = strAdd + m_ROOM + , PATIENT_BED = ;strAdd = strAdd + m_BED +;strAdd = strAdd + WHERE PATIENT_NAME = + m_NAME;全部删除则不需要读取当前行,直接连接数据库之后,执行删除语句DELETE FROM patient就行了,不过这项操作需要谨慎,所以删除前都会有一个确认删除的提示。4.5员工管理模块4.5.1界面概述在这个版块中,主要是设计员工信息的基本内容,还有员工信息的管理,分为3个子模块。普通用户只能进入员工一览模块,输入自己的编号、姓名等查找自己想要的信息。管理员可以进入人事管理和工资报表模块对员工信息进行管理,包括查找、插入、更新、删除、打印这几个方面的管理4.5.2算法说明 1.员工信息管理先从主菜单跳转到子菜单,子菜单有一个权限判断,算法和前面是一样的,再跳转前对全局变量AUTHORITY进行判断。2. 查找、插入、更新、删除这几个操作的算法和病人管理的类似,前面已经说明过了,这里也不再赘述,现在主要说明一下打印工资报表的算法,打印有两种方式,一是将datagrid控件里的数据导出到一个excel文件中,二是直接将数据库里的工资表导出。我采取了前者,首先打开类向导,新建一个类,并选择从Type Library添加,添加Office安装路径下的Excel.exe,在弹出的Confirm Classes里选择_Application,Workbooks,_Workbook,Worksheets ,_Worksheet,Range ,Font 这几个类,并确定新生成的CPP和H文件的名称,这里我定为Excel.cpp,Excel.h。然后确定,你会发现类视图里已经有了刚才添加的这些新类。由于我需要将datagrid里已经显示出来的Sql数据导出到Excel中,因此建立一个按钮,并设单击响应函数Output(),首先建立excel表,然后读取datagrid控件里的数据,写入excel表中。我的datagrid控件变量名为m_datagrid,部分代码如下:首先头文件里#include Excel.h接下来Output函数:void CSALARY:OnOutput() /导出按钮 / TODO: Add your control notification handler code here_Application app; /程序对象Workbooks books; /工作簿集合_Workbook book; /工作簿Worksheets sheets; /工作表集合_Worksheet sheet; /工作表Range range; /单元格范围Font font; /字体Range cols;COleVariant covOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR);if( !app.CreateDispatch(Excel.Application) )this-MessageBox(无法创建Excel应用!);return;books=app.GetWorkbooks();book=books.Add(covOptional); /新建工作簿sheets=book.GetSheets();sheet=sheets.GetItem(COleVariant(short)1); if(m_table=SALARY) /工资表导出 range=sheet.GetRange(COleVariant(A1),COleVariant(a1); /字段名设置 range.SetValue2(COleVariant(员工号);cols=range.GetEntireColumn();cols.SetColumnWidth(_variant_t(long)8); /设置Excel列宽 range=sheet.GetRange(COleVariant(b1),COleVariant(b1); range.SetValue2(COleVariant(工资);cols=range.GetEntireColumn();cols.AutoFit(); range=sheet.GetRange(COleVariant(c1),COleVariant(c1);int ss,nn; /双循环将m_datagrid中的数据全部导出到Excel dou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论