摘 要:利用PowerBuilder可以開發(fā)各種實(shí)用的管理信息系統(tǒng),用戶初次使用系統(tǒng)時(shí),通常是由系統(tǒng)設(shè)計(jì)者提供系統(tǒng)管理員的編碼及口令,進(jìn)入身份驗(yàn)證模塊,系統(tǒng)確認(rèn)合法后,進(jìn)入主控程序,主控程序顯示本管理系統(tǒng)的功能菜單。本文詳細(xì)介紹一種適合各種管理信息系統(tǒng)的通用主控程序的設(shè)計(jì)方法。
關(guān)鍵詞:PowerBuilder;管理信息系統(tǒng)[1];主控程序
中圖分類號(hào):TP311.38
PowerBuilder是一個(gè)適用于C/S結(jié)構(gòu)的數(shù)據(jù)庫(kù)前端開發(fā)工具,主控程序功能包括應(yīng)用程序、身份驗(yàn)證程序以及窗口和菜單,開發(fā)的風(fēng)格和功能實(shí)現(xiàn)也參差不齊,本文提供一個(gè)通用主控程序的設(shè)計(jì)方法,實(shí)現(xiàn)信息管理系統(tǒng)二級(jí)用戶管理,為用戶提供一個(gè)良好的運(yùn)行界面,保證系統(tǒng)數(shù)據(jù)的安全。
1 應(yīng)用分析
應(yīng)用程序?qū)ο笫潜4嬗脩魬?yīng)用程序最高層住息的非可視對(duì)象。Open事件是一個(gè)比較重要的事件,應(yīng)用程序?qū)ο髲拇碎_始執(zhí)行,必須為其編寫腳本代碼。
1.1 應(yīng)用程序?qū)ο螅?)的Open事件
應(yīng)用程序?qū)ο蟮腛pen事件代碼功能是:連接數(shù)據(jù)庫(kù),打開應(yīng)用程序的身份驗(yàn)證窗口dl(如圖1)。
1.2 定義全局變量
本系統(tǒng)設(shè)置二級(jí)用戶:管理員和普通用戶。調(diào)用每個(gè)模塊時(shí)都需要判斷登錄用戶的使用權(quán)限,因此保存登錄用戶權(quán)限的變量必須是全局變量。
string tya //字符串型變量tya保存登錄用戶的使用權(quán)限
1.3 聲明全局外部函數(shù)
在備份數(shù)據(jù)庫(kù)窗口w_backup中用到了外部函數(shù)FindWindowA()和IsWindow()。FindWindowA()的功能是根據(jù)窗口標(biāo)題查找窗口,IsWindow()的功能是用來判斷run語(yǔ)句執(zhí)行的應(yīng)用程序窗口是否結(jié)束。
Function long FindWindowA (String lpClassName , String lpWindowName ) Library \"user32.dll\"
Function boolean IsWindow (Long hwnd ) Library \"user32.dll\"
2 身份驗(yàn)證模塊
為了增強(qiáng)系統(tǒng)的保密性,一般應(yīng)用程序都應(yīng)當(dāng)設(shè)置身份驗(yàn)證程序模塊。本系統(tǒng)給用戶3次機(jī)會(huì),如果密碼輸入正確后,同時(shí)將該登錄用戶的權(quán)限送給全局變量 tya中保存。窗口如圖1所示。
圖1 身份驗(yàn)證模塊窗口dl登錄窗口
(1)定義實(shí)例變量
integer times //限制口令輸入的次數(shù)
(2)登錄窗口dl的Open事件腳本
本事件代碼的主要特點(diǎn)是使用了游標(biāo)操作。打開游標(biāo)檢索用戶表id中的全部用戶名,利用循環(huán)語(yǔ)句和Fetch語(yǔ)句配合將游標(biāo)中的數(shù)據(jù)行添加到下拉列表中。
string ls_tnam
times=1
DECLARE get_table CURSOR FOR
SELECT \"id\".\"name\" FROM \"id\" ; //聲明游標(biāo)
Open get_table; //打開游標(biāo)
Fetch get_table into :ls_tnam;
Do while sqlca.sqlcode = 0
ddlb_table.additem(ls_tnam)
Fetch get_table into :ls_tnam;
Loop
Close get_table; //關(guān)閉游標(biāo)
//關(guān)閉游標(biāo)
Close get_table;
ddlb_table.text=ddlb_table.text(1)
3 主窗口及菜單
3.1 設(shè)計(jì)主窗口w_main
(1)創(chuàng)建一個(gè)Child類型窗口w_back[2],在窗口中添加一個(gè)圖片控件p_1(暫不和圖片文件關(guān)聯(lián)),取消OriginalSize屬性的復(fù)選框,并將窗口的Enabled的屬性設(shè)為False。
(2)在窗口w_back中創(chuàng)建自定義函數(shù)[3]wf_set_background(string as_bmp) returns integer,此函數(shù)用于設(shè)置背景圖片。
(3)為窗口對(duì)象w_back的active事件編寫代碼如下:
this.bringtotop=1 //指定窗口w_back不能移到其他控件的前面。
(4)為窗口對(duì)象w_back的resize事件編寫代碼如下:
p_1.resize(this.width, this.height) //圖片與窗口大小同步。
(5)創(chuàng)建MDI主窗口w_main。設(shè)置屬性:Title屬性值為:學(xué)生信息管理系統(tǒng),Tag屬性值為:學(xué)生信息管理系統(tǒng),MenuName值為:m_main,WindowType值為:mdihelp!,WindowState值為:maximized!,并在Open事件中編寫腳本程序:
opensheet(w_back,this,0,layered!) //打開背景窗口
//設(shè)置背景圖片,F(xiàn)j056.jpg圖片文件在當(dāng)前文件夾下
w_back.wf_set_background('Fj056.jpg')
this.setmicrohelp(this.tag) //將tag屬性值設(shè)為主窗口的微幫助
//如果不是管理員,系統(tǒng)菜單下的用戶管理菜單項(xiàng)不可用
if integer(tya)<>1 then //全局變量tya保存登錄用戶的權(quán)限,值為1是管理員,值為0是普通用戶
m_main.m_4.m_41.enabled=1
end if
3.2 設(shè)計(jì)主菜單m_main
在菜單畫筆中設(shè)計(jì)應(yīng)用程序主窗口所連接的主菜單m_main。其中“系統(tǒng)”菜單項(xiàng)Name值為:m_4,其子菜單“用戶管理”Name值為:m_41,其余各菜單項(xiàng)名稱不做要求。
各個(gè)菜單中的程序腳本如下:
Opensheet(w_xnzc,w_main,1,original?。?//w_xnzc為各菜單要打開的窗口名稱
4 結(jié)束語(yǔ)
用戶初次運(yùn)行系統(tǒng)時(shí),管理員和普通用戶自行修改登錄口令。系統(tǒng)管理員具有插入、刪除、保存、查詢的權(quán)限,而普通用戶只有查詢的權(quán)限。
參考文獻(xiàn):
[1]任云峰.我國(guó)中小企業(yè)管理信息系統(tǒng)的現(xiàn)狀及思考[J].現(xiàn)代經(jīng)濟(jì)信息,2010(07).
[2]柯建勛,蔡毅,鄧格林.PowerBuilder8.0基礎(chǔ)篇[M].北京:清華大學(xué)出版社,2002.
[3]柯建勛,張濤,邵亮.PowerBuilder8.0進(jìn)階篇[M].北京:清華大學(xué)出版社,2002.
作者簡(jiǎn)介:王超(1972-),女,遼寧朝陽(yáng)人,系副主任,副教授,碩士,研究方向:軟件開發(fā)。
作者單位:遼寧建筑職業(yè)學(xué)院,遼寧遼陽(yáng) 111000