【正文】
39。否則為 0 End If ql_flag = ql_flag amp。判斷 =2時的符號 flag = 1 39。否則為 0 End If ql_flag = ql_flag amp。判斷 =1時的符號 flag = 1 39。 flag 39。如果有選擇復(fù)選框的值,則 flag為 1 Else flag = 0 39。定義變量 flag值為 0、 1的字符變量 For i = 0 To 4 If Check1(i).Value = 1 Then 39。單擊確定按鈕事件 Dim ql_flag As String 39。 ( 1)“確定” 按鈕單擊事件 代碼。 程序說明:操作人員管理窗體 ; 程序模塊名稱: frmczql; 重要控件: SSTab 控件 等 ; 相關(guān)數(shù)據(jù)庫表: user_load。如果該用戶擁有某項權(quán)限,則該權(quán)限為 1;反之,則 為 0。, , _ adOpenStatic, adLockPessimistic End If End Sub 2. 操作人員授權(quán)窗體 在圖 A27 中,單擊【授權(quán)】按鈕會彈操作員授權(quán)窗體, 如圖 A28 所示 。 nodename amp。獲得該節(jié)點的用戶名的所有 資料 select * from user_load where user_name=39。是根節(jié)點 nodename = 39。如果只有一個根節(jié)點,則退出程序 Exit Sub End If Call check_condatabase 39。調(diào)用 loadtreeview過程 End Sub Private Sub tvwdb_NodeClick(ByVal Node As ) 39。記錄往后移動一條 Loop End Sub Private Sub Form_Load() 39。使其文本為 rspsw字段中的用戶名 = 1 39。用 rspsw中的記錄對 treeview進行加載 Set mnode = (1, tvwChild) 39。連接數(shù)據(jù)庫 End If Set rspsw = New 39。節(jié)點顯示 “操作員姓名 ” = 2 39。將用戶數(shù)據(jù) 庫 表中的用戶名加載到 treeview控件中 Private SubPrivate Sub loadtreeview() = True 39。設(shè)置節(jié)點的圖表為 imagelist1中的圖 1 39。添加 treeview的孩子 = (user_name) 39。設(shè)置節(jié)點的圖表為 imagelist1中的圖 2 Set rspsw = New select*from user_load,adOpenStatic,adLockPessimistic Do Until 39。設(shè)置 sorted屬性為真 Set mnode = () = 操作員姓名 39。否則進行刪除,并顯示成功刪除操作人員對話框 t = MsgBox(成功刪除操作員姓名! , vbOKOnly, 成功 ) End If 39。如果返回 1,則進行刪除操作 39。刪除操作人員的命令按鈕 39。 ? 628 ? 該窗體主要實現(xiàn)增加用戶、刪除用戶、對用戶進行授權(quán),主要是面向管理人員對操作人員的操作進行管理, 滿足 不同層次的人員對系統(tǒng)不同的需求。 程序說明:操作人員管理窗體代碼 ; 程序模塊名稱: frmsq; 重要控件: TreeView、圖像列表 Imagelist 等 ; 相關(guān)數(shù)據(jù)庫表: user_load。數(shù)據(jù)庫的名稱 (Integrated Security).Value = SSPI End Sub 1.操作人員維護模塊 操作人員維護模塊的運行界面如圖 A27 所示 。具體實現(xiàn)代碼如下: Public Sub condatabase() Set = New = sqloledb (Data Source).Value = SQLServerName 39。 操作人員管理 操作人員管理系統(tǒng)主要是用來管理對該軟件進行操作的工作人員,同時系統(tǒng)所提供的用戶權(quán)限設(shè)置能夠提高系統(tǒng)的安全性,并對不同性質(zhì)的人員 給予 不同的權(quán)限,滿足了不同人員對 該軟件的需求。 通過工具欄,用 ? 626 ? 戶可以方便 地 直接打開經(jīng)常使用的功能,工具欄的實現(xiàn)代碼示例如下: Private Sub Toolbar1_ButtonClick(ByVal Button As ) Select Case ?判斷所按下的工具欄按鈕的名稱 Case query ?如果是查詢編輯人員 t = check_qx(czry_flag, 1) ?檢查當前用戶是否擁有操作權(quán)限 If t = True Then (1).Text = 狀態(tài): 查詢編輯人員 ?顯示 frmqueryperson窗體 End If Case input ?如果是數(shù)據(jù) 輸 入 t = check_qx(czry_flag, 6) ?檢查當前用戶是否擁有操作權(quán)限 If t = True Then (1).Text = 狀態(tài): 藥費輸入 ?顯示 frmlrsj窗體 End If Case drdc ?如果是每月數(shù)據(jù)導(dǎo)出 t = check_qx(czry_flag, 17) ?檢查當前用戶是否擁有操作權(quán)限 If t = True Then (1).Text = 狀態(tài): 每月數(shù)據(jù)導(dǎo)出 vbModal ?顯示 frmimport窗體 End If Case book ?如果是查詢報表 t = check_qx(czry_flag, 13) ?檢查當前用戶是否擁有操作權(quán)限 If t = True Then (1).Text = 狀態(tài): 查詢報表 ?顯示 frmquerybook窗體 End If Case exit ?如果是退出 End ?退出系統(tǒng) End Select End Sub ( 3) 狀態(tài)欄處理代碼 。 (1).Text = 狀態(tài): 藥費輸入 End If End Sub ( 2) 工具欄處理代碼 。ql_flag字段的設(shè)置 Public Function check_qx(qx_flag As String, i As Integer) As Boolean Dim temp As Integer If qx_flag Then temp = Mid(qx_flag, i, 1) If temp = 0 Then MsgBox 您無權(quán)限使用該功能! , vbOKOnly + vbExclamation, 注 意了 :) check_qx = False Else check_qx = True End If Else MsgBox 未經(jīng)管理員授權(quán),您無權(quán)限使用所有功能! , vbOKOnly + vbExclamation, 注意了 :) check_qx = False End If End Function 檢查權(quán)限后,如果該用戶擁有該項權(quán)限的話,則進入菜單處理程序: Private Sub sjlr_Click() 39。其具體實現(xiàn)如下所示: 39。 ( 1) 菜單處理代碼 。 圖 A26 狀態(tài) 條控件設(shè)計界面 附錄 B 醫(yī)務(wù)收費系統(tǒng) ? 625 ? 4. 核心代碼分析 主窗體的代碼不是很復(fù)雜,主要是 對 各個功能的導(dǎo)航 和顯示狀態(tài) 條 導(dǎo)航信息,具體有菜單點擊處理程序、工具條快捷按鈕處理程序、狀態(tài)度顯示處理程序 。例如 , 顯示數(shù)據(jù)庫表的有關(guān)情況(記錄總數(shù) , 以及當前記錄在數(shù)據(jù)庫中的位置等),顯示關(guān)于 RichTextBox控件的文本和字體狀態(tài)的信息,顯示鍵盤的狀態(tài)(如 Caps Lock 或 Number Lock),顯示當前日期或時間等。 3. 狀態(tài)條控件設(shè)計 StatusBar 控件由若干個面板構(gòu)成,主要用來顯示應(yīng)用程序的運行狀態(tài)。 圖 A25 工具欄的 設(shè)計界面 在工具條位置 單 擊 鼠標 右鍵,在彈出 的 窗體中選擇 “ 按鈕 ” 來添加按鈕,在樣式中,選擇 “ 3tbrSeparator” 添加分隔條。 ImageList1 控件用來保存各種圖片, 使其 顯示在工具欄中(具體的程序界面,讀者朋友可以打開本書附贈光盤中的源代碼查看)。這只要在需要進行分組的命令之間插入一個特殊的命令條, 將 該命令條的 “ 標題 ”插入“ - ” ,而 “ 名 稱 ” 任意,因為程序中一般不會引用此命令的名稱。 列表中一個快捷鍵只能被分配一次,否則系統(tǒng)會拒絕接受。 圖 A24 菜單編輯器 某些菜單命令的右邊 標 有組合鍵,稱為該命令的快捷鍵,可 以不打開菜單而直接按快捷鍵來執(zhí)行此命令。 附錄 B 醫(yī)務(wù)收費系統(tǒng) ? 623 ? 圖 A23 程序運行主界面 窗體設(shè)計包括菜單欄設(shè)計、工具欄設(shè)計、狀態(tài)條設(shè)計,下面就分 別 進行簡單的說明。采用菜單、工具欄、狀態(tài)條相結(jié)合的方法,使用戶能夠在主界面上快速的進入自己想要的程序模塊,具體的程序運行 主 界面如圖 B23 所示。 在后面的具體程序?qū)崿F(xiàn)中,由于篇幅的限制,并不一定對所有的代碼都進行詳細的分析,而是針對關(guān)鍵的模塊和技術(shù)進行說 名 ,其他代碼都在本書的附贈光盤中。 讀者在閱讀下面的具體程序以前,最好弄清楚每個窗體的 大概 功能,這對了解整個程序的開發(fā)實施是非常有益的,要弄清楚一個比較完整的商業(yè)系統(tǒng)是需要花一定時間的。 全局模塊( ):主要是在數(shù)據(jù)庫的連接、報表打印時所進行的數(shù)據(jù)操作 ,以及 基本的通用函數(shù)的定義和實現(xiàn)、全局變量的定義等 。 以上介紹的是程序的重要窗體,用戶登陸窗體來進行更換用戶的操作,這樣大大減少了窗體的使用數(shù)量。 frmdataback(數(shù)據(jù)備份、還原窗體):為了提高系統(tǒng)數(shù)據(jù)的安全性, 可 將數(shù)據(jù)備份到 U盤或其他主機的硬盤上 。 同時 用戶 也 可以方便的進行報表數(shù)據(jù)的查詢。 frmdoctor(醫(yī)務(wù)人員登記窗體):用于管理校醫(yī)院各個科室下醫(yī)務(wù)人員 的 情況,可以進行錄入、修改、刪除操作; frmlrsj(數(shù)據(jù)錄入窗體):根據(jù)病人的處方進行數(shù)據(jù)輸入,該窗體是整個系統(tǒng)的核心,能夠執(zhí)行數(shù)據(jù)的修改、查詢、打印等功能。 frmsq(用戶授權(quán)、增加和刪除窗體):該窗體將用戶修改和授權(quán)集成在一起,方便管理員增加用戶后對該用戶進行授權(quán)。 mainform(程序的主窗體):程序的主窗體,方便用戶進行各種功能操作 。 為了能夠讓讀者了解本程序,首先列舉出本程序包含的所有窗體和模塊。創(chuàng)建的 ODBC 數(shù)據(jù)源名稱為 “ YAOFEI”。以上的 SQL 語 句已經(jīng)保存為文件,也可以用查詢分析器直接運行一下本例源程序目錄下 SQL 目錄里的 ,不需要在企業(yè)管理器新建數(shù)據(jù) 庫 表。單機版文件共享型數(shù)據(jù)庫 ACCESS 可以跳過此配置。 其他 數(shù)據(jù)庫 表包括:軟件用戶信息表 User_load、編號計數(shù)表 Count 等,這里就不一一列 舉 了。使用 Powerdesigner定義這 5 個表的字段,以及每個表的主鍵等如圖 A22 所示 。 ( 1) 描述收費單信息的表 。 圖 A20 病人看病 過程時序 圖 ( 2) 病人看病過程協(xié)作圖如圖 A21 所示 。 圖 A19 系統(tǒng)維護員的用例關(guān)系圖 掛號操作員 ( from Actors) 掛號服務(wù) ( from User Cases) 收費操作員 ( from Actors) 收費操作員劃價扣費配藥 ( from User Cases) 藥品管理員 ( from Actors) 進貨 ( from User Cases) 退貨 ( from User Cases) 分發(fā)藥品 ( from User Cases) 登錄驗證 ( from User Cases) 用戶注冊 ( from User Cas