葉文勝
(黃岡職業(yè)技術(shù)學(xué)院人事處,湖北黃岡438002)
VFP中的菜單既可以直接編寫程序代碼實(shí)現(xiàn),又可以利用菜單設(shè)計(jì)器實(shí)現(xiàn)。利用菜單設(shè)計(jì)器設(shè)計(jì)菜單的步驟如圖1所示:
圖1 菜單設(shè)計(jì)步驟
菜單設(shè)計(jì)器編寫的菜單文件(.mnx)經(jīng)過生成后形成菜單程序文件,程序文件運(yùn)行后執(zhí)行菜單的功能。
在設(shè)計(jì)菜單中,在菜單的“選項(xiàng)”中設(shè)計(jì)“跳過”的條件。
圖2 菜單的選項(xiàng)設(shè)置
跳過條件的設(shè)計(jì)方法:設(shè)計(jì)一個(gè)全局變量,當(dāng)不同的用戶登錄時(shí)控制此變量的值,然后將此變量設(shè)置為菜單的“跳過”條件:當(dāng)條件值為.t.時(shí)菜單跳過,即該菜單功能不可用,反之該菜單功能可用。
下面用一個(gè)完整案例說明如何實(shí)現(xiàn)用戶使用菜單權(quán)限的設(shè)計(jì)。
1.案例描述
(1)設(shè)計(jì)菜單mymenu,其中有四個(gè)菜單項(xiàng):查詢(按姓名查詢,按學(xué)號(hào)查詢)、打印(打印課表,打印成績單)、修改(修改基本信息,修改密碼)、幫助(使用幫助、軟件升級(jí));(2)設(shè)計(jì)一頂層表單myform,將菜單加載在表單上;(3)設(shè)計(jì)一個(gè)登錄表單userlogin,用于用戶輸入登錄賬號(hào)和密碼;(4)菜單使用權(quán)限控制:登錄時(shí),當(dāng)賬號(hào)為admin,密碼為admin,進(jìn)入myform表單,并且所有菜單功能可用;當(dāng)賬號(hào)為111,密碼為111,進(jìn)入myform表單,其中菜單“修改”功能不可用,其余菜單功能可用;輸入其余的賬號(hào)和密碼顯示“賬號(hào)和密碼錯(cuò)誤”提示信息。
2 案例實(shí)現(xiàn)
(1)打開菜單設(shè)計(jì)器,設(shè)計(jì)好各菜單項(xiàng)及其子菜單,如圖3所示:
圖3 菜單項(xiàng)的設(shè)計(jì)
(2)編輯“修改”菜單的選項(xiàng),在“跳過”框中設(shè)置“userflag< >1”,如圖4所示:
圖4 設(shè)置“修改”菜單的跳過條件
(3)保存菜單并生成菜單程序。
(4)設(shè)計(jì)頂層表單,并加載菜單,運(yùn)行界面如圖5所示:
圖5 表單加載菜單效果圖
表單Init事件代碼如下:
domymenu.mpr with this,.t.
(5)設(shè)計(jì)登錄表單,運(yùn)行效果如圖6所示:
圖6 登錄表單的效果圖
“登錄”按鈕的Click事件參考代碼如下:
useraccount=allt(thisform.text1.value)
userpass=allt(thisform.text2.value)
if useraccount=="admin"and userpass=="admin"
userflag=1
do form myform
thisform.release
else
if useraccount=="111"and userpass=="111"
do form myform
thisform.release
else
messagebox("用戶名或密碼錯(cuò)誤!")
endif
endif
表單的Init事件代碼:
public userflag//定義全局變量
userflag=0//設(shè)置默認(rèn)用戶為普通用戶
(6)測試
分別輸入用戶名、密碼為“111”及“admin”的結(jié)果如下:
圖7 用戶名、密碼為“111”的進(jìn)入界面
圖8 用戶名、密碼為“admin”的進(jìn)入界面
輸入其他的用戶名或密碼運(yùn)行界面如下:
圖9 輸入錯(cuò)誤的用戶名和密碼運(yùn)行結(jié)果
VFP數(shù)據(jù)庫應(yīng)用系統(tǒng)中用戶使用菜單權(quán)限的設(shè)計(jì)方法有很多種,本文中主要利用了菜單設(shè)計(jì)中菜單項(xiàng)的“跳過”條件設(shè)置來控制。不同的用戶設(shè)置不同的“身份”值,“身份”值不同使得菜單的“跳過”條件結(jié)果不一樣,從而達(dá)到控制菜單項(xiàng)的目的。
[1]熊發(fā)涯.Visual FoxPro程序設(shè)計(jì)[M].北京:中國鐵道出版社,2003-03.