張華貴 邱丹
摘要:隨著信息技術(shù)的不斷發(fā)展,計算機網(wǎng)絡(luò)知識飛速更新,同時計算機操作及管理也越來越簡單化。為了適應(yīng)現(xiàn)代社會發(fā)展的需要,我國的各行各業(yè)都不斷開發(fā)出各種管理信息系統(tǒng),用來提高工作及生產(chǎn)效率,而在醫(yī)療單位,大部分部門都開發(fā)了相關(guān)的藥庫管理系統(tǒng)來提高管理水平,減少藥品出錯概率。
關(guān)鍵詞:藥庫管理;C#技術(shù);SQL Server數(shù)據(jù)庫
中圖分類號:R197.324 ? ? ?文獻標(biāo)識碼:A
文章編號:1009-3044(2020)17-095-03
1 背景
在一般的醫(yī)療單位如醫(yī)院、療養(yǎng)院、衛(wèi)生所等單位,都需要使用藥品庫來存儲大量的藥品及消耗材料,而且藥品的種類也繁多。在藥庫管理系統(tǒng)中,藥品及消耗材料的入庫、出庫、盤點以及庫存查詢和藥品使用數(shù)據(jù)統(tǒng)計是最常見的工作。由于這些業(yè)務(wù)的流程復(fù)雜,以前的手工記錄需要制作許多表格由人工來填寫,所以常常顯得十分煩瑣,而且經(jīng)常出錯,效率也十分低。在這種情況下,相關(guān)醫(yī)療行業(yè)都用上了先進的信息技術(shù)來管理這一問題,解決了這道難題。因此,藥庫管理系統(tǒng)的開發(fā)和應(yīng)用在成了醫(yī)療行業(yè)單位的研發(fā)課題。
2 需求分析
我單位是一個康復(fù)療養(yǎng)中心,藥劑科管理整個藥品庫以及各個科室正常發(fā)藥的功能,通過與科里管理人員的有效溝通及功能需要,此藥庫管理系統(tǒng)最終要設(shè)計完成的目標(biāo)為:能夠靈活方便快捷錄入藥品信息,新增、修改等等功能完成,使藥品信息管理更快捷;人機交互界面友好,藥品信息查詢方便,數(shù)據(jù)保存安全可靠;提供多種數(shù)據(jù)字典,使錄入的信息能從字典直接取出,如藥品字典、供應(yīng)商字典、廠商字典、科室字典等;藥品管理功能,包括出入庫管理、科室使用管理、報損管理和藥品盤點管理等等;有相對完善的數(shù)據(jù)備份和恢復(fù)功能;能夠根據(jù)人員的操作權(quán)限確定其操作功能;系統(tǒng)應(yīng)該具有良好的安裝性、維護性和操作性,由于藥庫管理系統(tǒng)主要是藥庫人員使用,所以采用了C#語言WinForm窗口程序來開發(fā),數(shù)據(jù)庫采用了SQL Server 2012進行設(shè)計。
3 系統(tǒng)設(shè)計
3.1 系統(tǒng)功能結(jié)構(gòu)
經(jīng)過需求分析后,根據(jù)科室的需要,我們設(shè)計的藥庫管理系統(tǒng)的基本功能如圖1所示。
3.2 系統(tǒng)運行預(yù)覽
藥庫管理系統(tǒng)功能模塊由30多個窗口程序組成,根據(jù)不同的功能封裝到不同的WinForm程序中,主程序的運行界面如圖2所示。
主窗口主要實現(xiàn)快速打開其他系統(tǒng)的所有功能,該窗體提供兩種方式打開子窗體的菜單,分別通過最上面的常規(guī)菜單打開系統(tǒng)中的所有子窗體;也可以利用窗體中間的導(dǎo)航圖標(biāo)點擊來打開系統(tǒng)中的所有子窗體。系統(tǒng)采用了MDI窗口來制作,其中父窗口就是當(dāng)前運行的窗口,其他系統(tǒng)的窗口都是子窗口,點擊功能按鈕打開后都顯示在主窗口的TAB界面中展示。
4 數(shù)據(jù)庫設(shè)計
在用SQL Server 2012作為后臺數(shù)據(jù)庫中,一共設(shè)計了十多張表來支撐程序的運行所需。為了使表看起來一目了然,所有表都以Med開頭。這里只介紹主要的幾張數(shù)據(jù)表的內(nèi)容:
Med_UserInfo 用戶信息表,字段分別有用戶編號、姓名、建立日期和用戶權(quán)限等,用于保存登錄用戶信息及用戶具有的操作權(quán)限,不同登錄用戶權(quán)限不同,如入庫人員只能進行入庫操作,出庫員只能進行發(fā)藥操作。
Med_Provider 供應(yīng)商和廠商信息字典表,這兩個字典使用同一個表,其中一個Flag字段取值為0和1分別標(biāo)識是供應(yīng)商或者是廠商,這個表的字段分別有編號、編碼、名稱、標(biāo)識和拼音碼等字段。
Med_Dept 科室字典,用于保存藥品出庫的科室。這個表的字段分別有編號、科室編碼、科室名稱、中西藥標(biāo)志、拼音碼等字段。
Med_ItemInfo 藥品基本信息字典表,這個表的字段分別有藥品編號、名稱、劑型、拼音碼、國際編碼、零售價、批發(fā)價、購入價、毒麻標(biāo)志、上下限標(biāo)志、生產(chǎn)廠商、供應(yīng)商、建立日期、預(yù)留字段、操作員等字典,可以在字典管理菜單中進行維護操作。
Med_InStorage 藥品入庫信息表,這個表的字段分別有入庫單編號、藥品編碼、規(guī)格、名稱、批發(fā)價、購入價、零售價、生產(chǎn)商和供應(yīng)商、藥品單位、入庫數(shù)量、入庫日期、采購人員、操作人員、預(yù)留字段等,用來保存入庫操作員錄入新采購的藥品。
Med_OutStorage 藥品出庫信息表,這個表的字段分別有出庫單編號、出庫科室編碼、藥品編碼、出庫數(shù)量、申請人、出庫標(biāo)識、審核人、審核日期、出庫日期、簽收人、操作員等字段,用來保存藥品出庫的基本信息。
Med_Storage 藥品庫存信息表,這個表的字段分別有編號、出庫單編號、入庫單編號、藥品編碼、科室編碼、數(shù)量等字段,用來進行藥品盤點統(tǒng)計。
Med_Damage 藥品報損信息表,這個表的字段分別有報損單編號、報損科室編碼、藥品編碼、藥品數(shù)量、報損日期、報損人員、報損原因、處理方式、操作員等,主要用來保存藥品因各種原因而進行的報損登記。
5 程序功能模塊設(shè)計
本系統(tǒng)采用C# 2015進行開發(fā),使用C/S模式制作前臺與用戶之間的交互。在程序的開發(fā)過程中,為了使整個程序統(tǒng)一和規(guī)范,我們采用了模塊化設(shè)計方式。按我們的初始需要,我們設(shè)計了字典管理模塊、人員管理模塊、藥品入庫管理模塊、出庫管理模塊、綜合查詢模塊,除了查詢外,每個相應(yīng)的模塊中的各種不同子功能基本都具有增、刪、改、查等方法。下面我們具體來看其中比較重要的功能及實現(xiàn)的方法。
5.1 公共類庫程序設(shè)計
在公共類庫中,我們把基本的使用功能都做了一個封裝,每個模塊的增、刪、改、查等方法都可以通過公共類庫封裝的方法傳值并調(diào)用,就可以完成相應(yīng)的功能,解決了頻繁寫相同的代碼,容易出錯、不好調(diào)試代碼等缺點。公共類庫的名稱為OperDataManager.cs,在它的命名空間需要引用using System.Data.SqlClient命名空間。在它的類中包含了如下方法:
GetConnection()方法:這個方法主要是用來返回一個數(shù)據(jù)庫的連接字符串,這個連接字符串即可以通過配置文件App.config獲取,也可以直接寫到程序里,這里我們讀取配置文件:
public SqlConnection GetConnection()
{ ?string strConn= ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString;
SqlConnection sqlConn=new SqlConnection(strConn);
return sqlConn;}
RunSql()方法:這個方法用來執(zhí)行一條SQL語句,如刪除和修改,不用返回數(shù)據(jù),由于數(shù)據(jù)庫連后打開的方法我們初始化的時候就執(zhí)行了,所以這里的方法也不再重復(fù)寫打開數(shù)據(jù)庫的語句:
public int RunSql (string strSql, SqlParameter[] prams)
{ ? ? ?SqlCommand cmd = CreateCommand(strSql, prams);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value; }//執(zhí)行成功返回值
GetDataSet()方法:這個方法用來返回一個DataSet類型的數(shù)據(jù)集,
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; }//執(zhí)行成功返回值
還有其他多個方法如:初始化數(shù)據(jù)庫連接InitDate()、打開數(shù)據(jù)庫OpenData()、關(guān)閉數(shù)據(jù)庫CloseData()等都比較簡單,就不一一列出來了,另外還有一些讀取數(shù)據(jù)庫的方法都是在上面方法擴展起來的、如GetTable()返回一個數(shù)據(jù)表、GetReader()讀取一條記錄等。
5.2 字典功能模塊
字典功能模塊程序也做了一個很好的封裝,設(shè)計思想是單擊某一個字典功能后,獲取該字典的名稱,根據(jù)該名稱通過SQl語句查詢該名稱的數(shù)據(jù)表,然后讀出表中的字段內(nèi)容,根據(jù)字段內(nèi)容動態(tài)生成每個字段的標(biāo)簽及文本框。這個模塊的窗口Formt程序中,上部分為生成的每個字段文本框,下部分為一個DataGridView控件,用來展示數(shù)據(jù),窗體運行后程序初始化并執(zhí)行查詢字典表方法GetDataSet(),返回的數(shù)據(jù)在DataGridView控件中展示出來。上部分的字段相應(yīng)的文本框為空值。當(dāng)單擊DataGridView控件中的某行時,所選行的數(shù)據(jù)在上部的文本框中顯示出來。在文本框的下一行有新增、修改、刪除和保存按鈕,當(dāng)選擇的數(shù)據(jù)修改后,單擊修改按鈕并執(zhí)行,則修改的數(shù)據(jù)將會保存到數(shù)據(jù)庫。其他的按鈕執(zhí)行相應(yīng)的功能。要注意的是上部分的文本框中,所有字典生成的ID序號為自增的主鍵,不能修改,文本框的屬性也設(shè)置成了ReadOnly=True只讀。此外,我們在窗體程序中增加了一個ErrorProvider控件,用于對窗體中字段所對應(yīng)的文本框做驗證,如果的Int型的,就不能輸入字符串,避免新增和更新時出現(xiàn)錯誤。
5.3 藥品管理功能模塊
藥品管理功能分為藥品入庫與藥品出庫。藥品出入庫管理是藥庫管理系統(tǒng)中的一個重要功能,它主要實現(xiàn)藥品的出入庫登記功能。在藥品出入庫時,不僅需要記錄藥品名稱、數(shù)量、進貨價格和類別等信息,還需要修改藥品原有庫存表中藥品的庫存數(shù)量。出入庫管理的窗體Form程序同樣采用了界面中的上下版本結(jié)構(gòu),上部分顯示需要入庫藥品的基本字段信息文本框,下部分顯示DataGridView控件綁定數(shù)據(jù)庫中已有的藥品及數(shù)量,窗體頂部采用了MenuStrip菜單欄設(shè)計,菜單欄包含了藥品入庫、藥品出庫、藥品報損、藥品刪除和退出功能。其中出庫和報損都會新增一個RichBox控件,用來說明原因,這些功能都有批準(zhǔn)人和執(zhí)行人文本框,分清執(zhí)行權(quán)限。其中藥品的供應(yīng)商和廠商以及其他帶下拉列表框的控件,都采用了直接綁定數(shù)據(jù)源的方式去調(diào)用數(shù)據(jù)字典,而藥品的出入庫信息則是通過調(diào)用SQL Server的存儲過程來實現(xiàn),這里也用了SQL Server的觸發(fā)器,當(dāng)執(zhí)行入庫或出庫功能按鈕后,提取藥品文本框的數(shù)據(jù)并調(diào)用存儲過程,當(dāng)存儲過程執(zhí)行成功后,觸發(fā)器被觸發(fā),對藥品庫存數(shù)量進行相應(yīng)的增減,報損和刪除也是同樣的工作原理。
5.4 統(tǒng)計查詢管理功能模塊
統(tǒng)計查詢的模塊包括了藥品入庫查詢、藥品出庫查詢、藥品盤點、藥品出入庫的月統(tǒng)計和年統(tǒng)計等功能。統(tǒng)計查詢的功能比較簡單,是在正常的SQL查詢語句中根據(jù)不同的查詢條件利用where語句過濾需要提取的數(shù)據(jù)。查詢的WinForm窗體分為左右部分,同樣頂部為主菜單,分別是入庫查詢、出庫查詢、盤點、月統(tǒng)計、導(dǎo)出數(shù)據(jù)等按鈕功能。左部為DataGridView控件,綁定查詢到的數(shù)據(jù)結(jié)果并顯示,右部為柱狀分析圖,分析統(tǒng)計結(jié)果。其中右部分的圖形采用的Devexpress套件中的chartControl數(shù)據(jù)圖表控件,通過綁定數(shù)據(jù)庫中的查詢即可顯示,簡單直觀。這也避免了使用系統(tǒng)自身圖形控件產(chǎn)生圖表帶來的諸如刷新不及時等問題。
5.5 系統(tǒng)維護功能模塊
這個模塊的功能比較簡單,維護一些常用信息,如設(shè)置公共變量,記錄操作員登錄操作信息、對數(shù)據(jù)庫的備份與恢復(fù)等。這些功能都比較簡單,在這里就不一一說明了。
科室人員管理和字典管理的程序差不多,這里也不做進一步的說明。至此,藥庫管理系統(tǒng)的功能及模塊設(shè)計就完成了。有需要的朋友可以給我回郵件:Zhg_w@163.com。
6 結(jié)束語
通過藥品庫存管理系統(tǒng)的開發(fā),實現(xiàn)了藥品庫存管理的信息化,它利用先進的計算機信息技術(shù)來代替了傳統(tǒng)的手工管理與統(tǒng)計,極大地提高了工作效率并減少意外失誤。藥庫管理系統(tǒng)是醫(yī)療單位使用中不可缺少的一個重要部分,包括了常見的入庫、出庫、報損、統(tǒng)計等功能,通過這個程序,我們對于類似的管理會有深入的了解,能夠更好地為其他類似的管理軟件的開發(fā)打下堅實的基礎(chǔ),也歡迎廣大朋友與我聯(lián)系,共同學(xué)習(xí)進步。
參與文獻:
[1] 顧旭棟. 中藥材庫存管理研究——以SH門診部為例[D]. 上海: 華東理工大學(xué), 2015.
[2] 冷淑霞, 徐濤. 基于C/S模式的物資管理系統(tǒng)設(shè)計與實現(xiàn)[J]. 山東工程學(xué)院學(xué)報, 2001, 15(4): 38-40.
[3] 張葳. .NET通過ADO.NET構(gòu)建類庫的形式訪問數(shù)據(jù)庫[J]. 黑龍江科技信息, 2012(1): 102.
[4] 張虹. 計算機系統(tǒng)在我院藥庫管理中的應(yīng)用[J]. 中國醫(yī)藥導(dǎo)報, 2007, 4(27): 142.
【通聯(lián)編輯:謝媛媛】