标题 | 基于C#和WinForm技术设计的药库管理系统 |
范文 | 张华贵 邱丹 摘要:随着信息技术的不断发展,计算机网络知识飞速更新,同时计算机操作及管理也越来越简单化。为了适应现代社会发展的需要,我国的各行各业都不断开发出各种管理信息系统,用來提高工作及生产效率,而在医疗单位,大部分部门都开发了相关的药库管理系统来提高管理水平,减少药品出错概率。 关键词:药库管理;C#技术;SQL Server数据库 中图分类号:R197.324 ? ? ?文献标识码:A 文章编号:1009-3044(2020)17-095-03 1 背景 在一般的医疗单位如医院、疗养院、卫生所等单位,都需要使用药品库来存储大量的药品及消耗材料,而且药品的种类也繁多。在药库管理系统中,药品及消耗材料的入库、出库、盘点以及库存查询和药品使用数据统计是最常见的工作。由于这些业务的流程复杂,以前的手工记录需要制作许多表格由人工来填写,所以常常显得十分烦琐,而且经常出错,效率也十分低。在这种情况下,相关医疗行业都用上了先进的信息技术来管理这一问题,解决了这道难题。因此,药库管理系统的开发和应用在成了医疗行业单位的研发课题。 2 需求分析 我单位是一个康复疗养中心,药剂科管理整个药品库以及各个科室正常发药的功能,通过与科里管理人员的有效沟通及功能需要,此药库管理系统最终要设计完成的目标为:能够灵活方便快捷录入药品信息,新增、修改等等功能完成,使药品信息管理更快捷;人机交互界面友好,药品信息查询方便,数据保存安全可靠;提供多种数据字典,使录入的信息能从字典直接取出,如药品字典、供应商字典、厂商字典、科室字典等;药品管理功能,包括出入库管理、科室使用管理、报损管理和药品盘点管理等等;有相对完善的数据备份和恢复功能;能够根据人员的操作权限确定其操作功能;系统应该具有良好的安装性、维护性和操作性,由于药库管理系统主要是药库人员使用,所以采用了C#语言WinForm窗口程序来开发,数据库采用了SQL Server 2012进行设计。 3 系统设计 3.1 系统功能结构 经过需求分析后,根据科室的需要,我们设计的药库管理系统的基本功能如图1所示。 3.2 系统运行预览 药库管理系统功能模块由30多个窗口程序组成,根据不同的功能封装到不同的WinForm程序中,主程序的运行界面如图2所示。 主窗口主要实现快速打开其他系统的所有功能,该窗体提供两种方式打开子窗体的菜单,分别通过最上面的常规菜单打开系统中的所有子窗体;也可以利用窗体中间的导航图标点击来打开系统中的所有子窗体。系统采用了MDI窗口来制作,其中父窗口就是当前运行的窗口,其他系统的窗口都是子窗口,点击功能按钮打开后都显示在主窗口的TAB界面中展示。 4 数据库设计 在用SQL Server 2012作为后台数据库中,一共设计了十多张表来支撑程序的运行所需。为了使表看起来一目了然,所有表都以Med开头。这里只介绍主要的几张数据表的内容: Med_UserInfo 用户信息表,字段分别有用户编号、姓名、建立日期和用户权限等,用于保存登录用户信息及用户具有的操作权限,不同登录用户权限不同,如入库人员只能进行入库操作,出库员只能进行发药操作。 Med_Provider 供应商和厂商信息字典表,这两个字典使用同一个表,其中一个Flag字段取值为0和1分别标识是供应商或者是厂商,这个表的字段分别有编号、编码、名称、标识和拼音码等字段。 Med_Dept 科室字典,用于保存药品出库的科室。这个表的字段分别有编号、科室编码、科室名称、中西药标志、拼音码等字段。 Med_ItemInfo 药品基本信息字典表,这个表的字段分别有药品编号、名称、剂型、拼音码、国际编码、零售价、批发价、购入价、毒麻标志、上下限标志、生产厂商、供应商、建立日期、预留字段、操作员等字典,可以在字典管理菜单中进行维护操作。 Med_InStorage 药品入库信息表,这个表的字段分别有入库单编号、药品编码、规格、名称、批发价、购入价、零售价、生产商和供应商、药品单位、入库数量、入库日期、采购人员、操作人员、预留字段等,用来保存入库操作员录入新采购的药品。 Med_OutStorage 药品出库信息表,这个表的字段分别有出库单编号、出库科室编码、药品编码、出库数量、申请人、出库标识、审核人、审核日期、出库日期、签收人、操作员等字段,用来保存药品出库的基本信息。 Med_Storage 药品库存信息表,这个表的字段分别有编号、出库单编号、入库单编号、药品编码、科室编码、数量等字段,用来进行药品盘点统计。 Med_Damage 药品报损信息表,这个表的字段分别有报损单编号、报损科室编码、药品编码、药品数量、报损日期、报损人员、报损原因、处理方式、操作员等,主要用来保存药品因各种原因而进行的报损登记。 5 程序功能模块设计 本系统采用C# 2015进行开发,使用C/S模式制作前台与用户之间的交互。在程序的开发过程中,为了使整个程序统一和规范,我们采用了模块化设计方式。按我们的初始需要,我们设计了字典管理模块、人员管理模块、药品入库管理模块、出库管理模块、综合查询模块,除了查询外,每个相应的模块中的各种不同子功能基本都具有增、删、改、查等方法。下面我们具体来看其中比较重要的功能及实现的方法。 5.1 公共类库程序设计 在公共类库中,我们把基本的使用功能都做了一个封装,每个模块的增、删、改、查等方法都可以通过公共类库封装的方法传值并调用,就可以完成相应的功能,解决了频繁写相同的代码,容易出错、不好调试代码等缺点。公共类库的名称为OperDataManager.cs,在它的命名空间需要引用using System.Data.SqlClient命名空间。在它的类中包含了如下方法: GetConnection()方法:这个方法主要是用来返回一个数据库的连接字符串,这个连接字符串即可以通过配置文件App.config获取,也可以直接写到程序里,这里我们读取配置文件: public SqlConnection GetConnection() { ?string strConn= ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString; SqlConnection sqlConn=new SqlConnection(strConn); return sqlConn;} RunSql()方法:這个方法用来执行一条SQL语句,如删除和修改,不用返回数据,由于数据库连后打开的方法我们初始化的时候就执行了,所以这里的方法也不再重复写打开数据库的语句: public int RunSql (string strSql, SqlParameter[] prams) { ? ? ?SqlCommand cmd = CreateCommand(strSql, prams); cmd.ExecuteNonQuery(); this.Close(); return (int)cmd.Parameters["ReturnValue"].Value; }//执行成功返回值 GetDataSet()方法:这个方法用来返回一个DataSet类型的数据集, public DataSet GetDataSet(string strSql, SqlParameter[] prams, string tableName) { ? ? ?SqlDataAdapter SqlSda = CreateDataAdaper(strSql, prams); DataSet ds = new DataSet(); SqlSda.Fill(ds, tableName); this.Close(); return ds; }//执行成功返回值 还有其他多个方法如:初始化数据库连接InitDate()、打开数据库OpenData()、关闭数据库CloseData()等都比较简单,就不一一列出来了,另外还有一些读取数据库的方法都是在上面方法扩展起来的、如GetTable()返回一个数据表、GetReader()读取一条记录等。 5.2 字典功能模块 字典功能模块程序也做了一个很好的封装,设计思想是单击某一个字典功能后,获取该字典的名称,根据该名称通过SQl语句查询该名称的数据表,然后读出表中的字段内容,根据字段内容动态生成每个字段的标签及文本框。这个模块的窗口Formt程序中,上部分为生成的每个字段文本框,下部分为一个DataGridView控件,用来展示数据,窗体运行后程序初始化并执行查询字典表方法GetDataSet(),返回的数据在DataGridView控件中展示出来。上部分的字段相应的文本框为空值。当单击DataGridView控件中的某行时,所选行的数据在上部的文本框中显示出来。在文本框的下一行有新增、修改、删除和保存按钮,当选择的数据修改后,单击修改按钮并执行,则修改的数据将会保存到数据库。其他的按钮执行相应的功能。要注意的是上部分的文本框中,所有字典生成的ID序号为自增的主键,不能修改,文本框的属性也设置成了ReadOnly=True只读。此外,我们在窗体程序中增加了一个ErrorProvider控件,用于对窗体中字段所对应的文本框做验证,如果的Int型的,就不能输入字符串,避免新增和更新时出现错误。 5.3 药品管理功能模块 药品管理功能分为药品入库与药品出库。药品出入库管理是药库管理系统中的一个重要功能,它主要实现药品的出入库登记功能。在药品出入库时,不仅需要记录药品名称、数量、进货价格和类别等信息,还需要修改药品原有库存表中药品的库存数量。出入库管理的窗体Form程序同样采用了界面中的上下版本结构,上部分显示需要入库药品的基本字段信息文本框,下部分显示DataGridView控件绑定数据库中已有的药品及数量,窗体顶部采用了MenuStrip菜单栏设计,菜单栏包含了药品入库、药品出库、药品报损、药品删除和退出功能。其中出库和报损都会新增一个RichBox控件,用来说明原因,这些功能都有批准人和执行人文本框,分清执行权限。其中药品的供应商和厂商以及其他带下拉列表框的控件,都采用了直接绑定数据源的方式去调用数据字典,而药品的出入库信息则是通过调用SQL Server的存储过程来实现,这里也用了SQL Server的触发器,当执行入库或出库功能按钮后,提取药品文本框的数据并调用存储过程,当存储过程执行成功后,触发器被触发,对药品库存数量进行相应的增减,报损和删除也是同样的工作原理。 5.4 统计查询管理功能模块 统计查询的模块包括了药品入库查询、药品出库查询、药品盘点、药品出入库的月统计和年统计等功能。统计查询的功能比较简单,是在正常的SQL查询语句中根据不同的查询条件利用where语句过滤需要提取的数据。查询的WinForm窗体分为左右部分,同样顶部为主菜单,分别是入库查询、出库查询、盘点、月统计、导出数据等按钮功能。左部为DataGridView控件,绑定查询到的数据结果并显示,右部为柱状分析图,分析统计结果。其中右部分的图形采用的Devexpress套件中的chartControl数据图表控件,通过绑定数据库中的查询即可显示,简单直观。这也避免了使用系统自身图形控件产生图表带来的诸如刷新不及时等问题。 5.5 系统维护功能模块 这个模块的功能比较简单,维护一些常用信息,如设置公共变量,记录操作员登录操作信息、对数据库的备份与恢复等。这些功能都比较简单,在这里就不一一说明了。 科室人员管理和字典管理的程序差不多,这里也不做进一步的说明。至此,药库管理系统的功能及模块设计就完成了。有需要的朋友可以给我回邮件:Zhg_w@163.com。 6 结束语 通过药品库存管理系统的开发,实现了药品库存管理的信息化,它利用先进的计算机信息技术来代替了传统的手工管理与统计,极大地提高了工作效率并减少意外失误。药库管理系统是医疗单位使用中不可缺少的一个重要部分,包括了常见的入库、出库、报损、统计等功能,通过这个程序,我们对于类似的管理会有深入的了解,能够更好地为其他类似的管理软件的开发打下坚实的基础,也欢迎广大朋友与我联系,共同学习进步。 参与文献: [1] 顾旭栋. 中药材库存管理研究——以SH门诊部为例[D]. 上海: 华东理工大学, 2015. [2] 冷淑霞, 徐涛. 基于C/S模式的物资管理系统设计与实现[J]. 山东工程学院学报, 2001, 15(4): 38-40. [3] 张葳. .NET通过ADO.NET构建类库的形式访问数据库[J]. 黑龙江科技信息, 2012(1): 102. [4] 张虹. 计算机系统在我院药库管理中的应用[J]. 中国医药导报, 2007, 4(27): 142. 【通联编辑:谢媛媛】 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。