• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

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

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網 馬廣焜,陳世東,黃有群  

    在筆者開發的一個多用戶協同工作的軟件中,多個用戶需共用一窗體及其上的菜單,但不同級別的用戶對菜單的使用權限是不同的,而用戶的組成與身份都是動態的,為此,筆者開發了一個程序,讓管理員以可視化的方式在用戶初次登錄時分配該用戶可用的菜單項,來控制用戶的使用權限,所以用戶可以根據登錄時分配的權限使用菜單不同的選項。本文以產品結構管理系統為例,介紹一下具體的工作。
    一.數據庫的設計及介紹
    該程序需要三個數據庫表的支持。用戶的注冊信息在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 調試成功。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>