六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用VB動態生成不同使用權限的菜單

[摘要]馬廣焜,陳世東,黃有群 在筆者開發的一個多用戶協同工作的軟件中,多個用戶需共用一窗體及其上的菜單,但不同級別的用戶對菜單的使用權限是不同的,而用戶的組成與身份都是動態的,為此,筆者開發了一個程序,...
馬廣焜,陳世東,黃有群  

在筆者開發的一個多用戶協同工作的軟件中,多個用戶需共用一窗體及其上的菜單,但不同級別的用戶對菜單的使用權限是不同的,而用戶的組成與身份都是動態的,為此,筆者開發了一個程序,讓管理員以可視化的方式在用戶初次登錄時分配該用戶可用的菜單項,來控制用戶的使用權限,所以用戶可以根據登錄時分配的權限使用菜單不同的選項。本文以產品結構管理系統為例,介紹一下具體的工作。
一.數據庫的設計及介紹
該程序需要三個數據庫表的支持。用戶的注冊信息在t_register表中存放,表t_privilege用來存儲用戶的別名和它可用菜單項的名稱和代號,而把窗口上的所有菜單項放在一個叫t_menu的表中。三個表的結構和說明如下:
  
name字段表示用戶的真實名字,password字段表示用戶的密碼,nickname字段表示用戶的別名,別名的使用是為了防止用戶的重名,別名應該是唯一的。
  
nickname字段表示用戶的別名,usemenuname表示菜單項的名稱 ,usemenu表示菜單項的標題,id字段表示此菜單項在表t_menu中的id號。
  
id字段表示菜單項的記錄號,mcaption字段表示菜單項的標題 ,mname字段表示菜單項的名稱。舉例來說,在筆者開發的軟件中,應用界面的菜單有5項,標題分別為文件、編輯、系統維護、窗口、幫助,名稱為mnumain,索引值為0,1,2,3,4。數組n(0),n(1),n(2),n(3),n(4)分別代表這5項應用界面菜單各包含的子菜單數。它們的子菜單名稱分別為mnufile,mnuedit,mnuwh,mnuwindow,mnuhelp,不同的子菜單各設置不相干擾的的索引值。例如:在“文件”菜單項下的”打開”子菜單項,名稱為mnufile,索引值為0,”退出”子菜單項,名稱為mnufile,索引值為2,在“編輯”菜單項下的”產品結構展開”子菜單項名稱為mnuedit,索引值為0。
二.工作流程
用戶第一次注冊后,管理員設置用戶可用的菜單項,設置的界面如圖1。左邊組合框1列出t_register表中已注冊的所有用戶別名,列表框2列出表t_menu中name字段的內容,即應用界面菜單中所有的菜單項。管理員可以在組合框1中選擇用戶,然后在列表框2中選擇該用戶可用的菜單項,選中的菜單項被移到列表框3中。如果選擇了不需要的菜單項,則雙擊列表框3中的已選項使其還原到列表框2中。按完成按鈕后,用戶別名和該用戶可用的菜單項的名稱、標題和其在t_menu表中的id號分別被存入表t_privilege中的nickname、usemenu、usemenuname和id字段。
用戶設置完成之后,已注冊的用戶可以登錄了。用戶輸入別名和密碼后,用表t_register進行驗證,通過后,從表t_privilege中找出與此用戶別名相同的所有記錄中usemenuname字段中的值記錄的值,即找到可用的菜單項。再把這些可用項在應用界面的菜單中的的Enable屬性設置為True(缺省為False)。
  
對已分配菜單使用權限的用戶,登錄后,系統處理給該用戶的菜單功能的分配。這里,定義了一個記錄集myrs,myrs為t_privilege表中nickname字段的值等于輸入用戶別名的所有記錄。筆者先在模塊中定義一個Init函數,它根據菜單各菜單項的數量設置的數組個數,而數組的值是每一個菜單項的子菜單項個數,這樣子菜單中的項可以任意的添加,只需改動數組的值。在本文的例子里,設置如下:
Public Function init()
……
c=5 ‘c為應用界面菜單中的菜單項個數
n(0) = 3
n(1) = 4
n(2) = 3
n(3) = 4
n(4) = 2
m(0) = n(0) ‘數組m(i)是第i子菜單項與第0,1,i-1子菜單項的個數和
For i = 1 To c – 1  
m(i) = m(i - 1) + n(i)
Next
End Function

然后,處理菜單的具體程序如下:
……  
Set myrs = New ADODB.Recordset
……
‘菜單處理
myrs.Open "select * from t_privilege where nickname='" & nickname & "'", cnn2, adOpenDynamic, adLockBatchOptimistic ‘用只讀方式打開t_privilege表中的 nickname字段中等于輸入別名的所有記錄  
‘用只讀方式打開t_menu表
k = myrs.RecordCount ‘k為打開的記錄數目
Init ‘Init 為初始化數組的函數
For i = 1 To k
t = myrs ("id") ‘t為匹配記錄的記錄號
‘下面為t所在記錄的菜單項索引值,找到所它所連接的菜單項后,把其enable屬性設為True,即此菜單項為可用
If t > m(4) Then
MsgBox "出現錯誤 !"
ElseIf t > m(3) Then
j = t - m(3)
Form1.mnuhelp.Item(j - 1).Enabled = True
ElseIf t > m(2) Then
j = t - m(2)
Form1.mnuwindow.Item(j - 1).Enabled = True
ElseIf t > m(1) Then
j = t - m(1)
Form1.mnuwh.Item(j - 1).Enabled = True
ElseIf t > m(0) Then
j = t - m(0)
Form1.mnuedit.Item(j - 1).Enabled = True
Else: j = t
Form1.mnufile.Item(j - 1).Enabled = True

End If
myrs.MoveNext
Next
……

三.效果圖
在應用界面的菜單中,選定的菜單項為可見,其余沒有選定的菜單項為不可見。用戶“湘湖”登錄以后,其中“打開”、“重新登錄”、“退出”、“XML文檔結構展開”、“XML文檔編輯”子菜單項在圖1中已經選定,在“系統維護”菜單下,“XML文檔結構展開”、“XML文檔編輯”子菜單項為可用,而“產品結構展開”、“產品結構錄入”子菜單項為不可用.
  

本文所提的方案在WINDOWS 98環境下,通過VB 6.0 和ACCESS 97 調試成功。


主站蜘蛛池模板: 日韩精品 欧美 | 天天干天天操天天爱 | 日本三级韩国三级欧美三级 | 最近韩国中文字幕更新 | 欧美无遮挡一区二区三区 | 色黄网址 | 日本在线免费 | 日本高清视频在线 | 日日夜夜综合 | 四虎影视在线永久免费观看 | 四虎影院美女 | 日韩无人区码卡二卡3卡4卡介绍 | 亚洲免费三级 | 日本三级网站在线线观看 | 亚洲最新永久观看在线 | 日韩 亚洲 翔田千里 在线 | 日韩在线视频中文字幕 | 亚洲国产精久久久久久久 | 天天干天天爽天天射 | 网站在线观看免费 | 天天干天天弄 | 天天操天天干天天玩 | 日本美女高清在线观看免费 | 欧洲美女a视频一级毛片 | 日韩一区二区三区不卡 | 日本三级成人午夜视频网 | 日本高清在线观看视频你懂的 | 星辰影院在线 | 婷婷激情五月网 | 青草久| 青春草在线视频免费 | 日欧毛片 | 日本一区二区在线 | 日本视频免费看 | 亚洲视频重口味 | 色福利网 | 夜夜爽天天狠狠九月婷婷 | 日韩高清影院 | 日韩一区二区三区不卡视频 | 五月婷婷丁香综合网 | 呦呦国产 |