




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
管理信息系統(tǒng)
實驗指導(dǎo)書
湖南工學(xué)院經(jīng)濟(jì)與管理系
目錄
實驗一項目文件的建立、系統(tǒng)主程序設(shè)計、系統(tǒng)菜單設(shè)計和數(shù)據(jù)庫與表的設(shè)計………………1
實驗二數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)和地區(qū)代碼管理表單的設(shè)計……….34
實驗三產(chǎn)品代碼管理、客戶代碼及基本信息管理和用戶身份密碼管理表單的設(shè)計………….58
實驗四銷售信息編輯、查詢和查詢結(jié)果表單的設(shè)計…………….80
實驗五往來賬款信息編輯、查詢和查詢結(jié)果表單的設(shè)計………109
實驗六收賬政策信息編輯、查詢和查詢結(jié)果表單的設(shè)計………144
實驗七銷售信息統(tǒng)計和統(tǒng)計結(jié)果表單的設(shè)計…………………..163
實驗八報表的設(shè)計、應(yīng)用程序的連編和安裝程序的制作………179
1
實驗一項目文件的建立、系統(tǒng)主程序設(shè)計、系統(tǒng)菜單設(shè)計和數(shù)據(jù)庫與表的設(shè)計
【實驗?zāi)康暮鸵蟆?/p>
通過本次實驗,學(xué)習(xí)通過項目管理器來管理系統(tǒng)開發(fā)過程中所設(shè)計和創(chuàng)建的各種文件,了解系統(tǒng)主程序及封面設(shè)計的常用方法,學(xué)習(xí)系統(tǒng)菜單設(shè)計的基本過程和方法,通過數(shù)據(jù)庫及表的設(shè)計學(xué)習(xí)系統(tǒng)開發(fā)中對數(shù)據(jù)庫及表的規(guī)劃和設(shè)計。
【建議實驗學(xué)時】
4學(xué)時。
【實驗管理信息系統(tǒng)的文件目錄結(jié)構(gòu)圖
⑵啟動VFP6,Windows系統(tǒng)顯示VFP6主窗口。
⑶單擊“文件”功能菜單項,VFP6顯示“文件”下拉菜單。
⑷單擊“新建”選項,打開如圖1.2所示的“新建”對話框。
1
圖1.2“新建”對話框
⑸單擊“項目”單選按鈕,表示將要新建一個項目。
⑹單擊“新建”按鈕,VFP6顯示如圖1.3所示的“創(chuàng)建”對話框。在“項目文件”框中輸入新建項目文件名mis(實驗中也可選用其它名稱),保存在已創(chuàng)建好的c:\mis目錄中。
圖1.3“創(chuàng)建”對話框
2
[說明]通過“新建”按鈕創(chuàng)建的新項目,只能生成兩個項目文件,即一個mis.pjt文件,一個mis.pjx文件,不能生成項目的完整框架,但系統(tǒng)目錄及文件系統(tǒng)較簡單清楚,只要在開發(fā)過程中用戶能合理設(shè)計及創(chuàng)建文件,也完全能夠?qū)崿F(xiàn)應(yīng)用程序的開發(fā)。通過“向?qū)А眲?chuàng)建的項目,能生成項目的完整框架,較有利于項目的管理,但系統(tǒng)自動創(chuàng)建的文件較多,目錄結(jié)構(gòu)相對復(fù)雜,不便于初學(xué)者對文件的管理。為簡單起見,在本實驗中以通過“新建”建立項目文件為例進(jìn)行介紹。
7.單擊“保存”按鈕,將出現(xiàn)新的對話框“項目管理器-mis”。如圖1.4所示。
圖1.4“項目管理器-mis”對話框
至此,新的項目文件mis就已創(chuàng)建完成,用戶就可以通過項目管理器窗口向該項目中添加或新建應(yīng)用程序所需要的各種文件,用戶也可隨時瀏覽和查閱系統(tǒng)已創(chuàng)建的各種文件,這些文件將由該項目進(jìn)行統(tǒng)一管理。在生成最終應(yīng)用程序時,項目管理器會自動將各種所需文件進(jìn)行集成,編譯成可執(zhí)行文件。
㈡項目管理
項目一旦建立,以后就可通過項目的管理,把開發(fā)應(yīng)用程序所建立的所有文件進(jìn)行系統(tǒng)地集中分類管理,方便程序開發(fā)和最終應(yīng)用程序的生成。項目管理包括:
⑴分類、分層次顯示、瀏覽和選擇組件。
⑵使用“新建”選項啟動新建一個任何組件類型的過程。
⑶使用“添加”選項從外部文件添加組件。
⑷使用“移去”選項移去所屬的任意組件。
⑸使用“修改”選項修改任一個組件的過程。
⑹使用“瀏覽”或“運行”選項啟動瀏覽數(shù)據(jù)或執(zhí)行選定的表單、查詢或程序。
⑺使用“連編”選項生成應(yīng)用程序。
二、主程序的創(chuàng)建及密碼驗證設(shè)計
主程序就是在系統(tǒng)啟動時,首先執(zhí)行的程序。在VFP6中,可以將一個應(yīng)用程序系統(tǒng)的主程序設(shè)置為菜單、表單、PRG程序等。本例中將以一個PRG程序為主程序為例進(jìn)行介紹。
㈠創(chuàng)建主程序
步驟如下:
⑴打開mis項目文件,在“項目管理器-mis”窗口中,單擊“代碼”選項卡,選中“程序”項3
(也可單擊“全部”選項卡,再在列表區(qū)中選中“代碼”中的“程序”項),如圖1.5所示。
圖1.5選中代碼選項卡中的“程序”項
⑵單擊項目管理器窗口右邊的“新建”按鈕(如主程序已經(jīng)創(chuàng)建,則應(yīng)單擊“添加”按鈕),就可在新彈出的程序代碼編輯窗口中輸入程序的代碼內(nèi)容,如圖1.6所示。
圖1.6程序代碼編輯窗口
[說明]本例中主程序的代碼內(nèi)容如下:
4
publicdepa
depa=substr(alltrim(sys(5)+curdir()),1,len(alltrim(sys(5)+curdir()))-1)
setdefaultto&depa
setpathtoforms;progs;reports;menus;data;graphics;graphics\pic;graphics\icosetexacton
setconfirmoff
setescapeon
setsafetyon
setstatusoff
setscoreboardoff
setdecimalsto3
settalkoff
setsysformatson
setcenturyon
setdatetoansi
zoomwindowscreenmax
closeall
releasewindow常用
setsysmenuto
_screen.caption="歡迎使用XXX公司市場營銷管理信息系統(tǒng)"
_screen.icon="face05.ico"
_screen.picture="p02.jpg"
_screen.minbutton=.f.
_screen.maxbutton=.f.
_screen.controlbox=.f.
doformfm.scx
readeven
⑶保存文件。程序代碼編輯完成后,關(guān)閉編輯窗口,在彈出的詢問是否要保存程序文件的窗口中單擊“是”按鈕,則又彈出“另存為”對話框,如圖1.7所示,輸入程序文件名,選擇程序文件保存的位置:C:\mis\PROGS,單擊“保存”按鈕,關(guān)閉“另存為”對話框,完成新建程序文件的工作。
5
圖1.7“另存為”對話框
⑷設(shè)置主程序。在項目管理器窗口中,展開“代碼”選項卡中“程序”項,就可看到剛建立的程序文件mainprg.prg,選中該文件,執(zhí)行VFP6系統(tǒng)“項目”菜單中的“設(shè)置主文件”菜單項,則會看到在項目管理器窗口中,mainprg.prg文件名變?yōu)榇趾隗w顯示,這表示該文件已被設(shè)置成系統(tǒng)的主文件。
[說明]在本例中,系統(tǒng)的設(shè)計思路是,主程序先設(shè)置系統(tǒng)運行的環(huán)境參數(shù),再運行指定表單,進(jìn)行用戶身份確認(rèn)。當(dāng)用戶身份驗證通過后,再執(zhí)行系統(tǒng)主菜單,進(jìn)入系統(tǒng)。除了這種方法以外,還可用其他多種方法來設(shè)計系統(tǒng)入口。如先設(shè)計一個頂層表單,作為系統(tǒng)主程序,在表單的INIT事件中設(shè)置系統(tǒng)運行環(huán)境,再執(zhí)行系統(tǒng)主菜單。裝入系統(tǒng)菜單后,再進(jìn)行用戶身份驗證。如用戶身份驗證不能通過,則結(jié)束系統(tǒng)運行。
㈡密碼驗證表單的設(shè)計
在系統(tǒng)主程序mainprg.prg中,調(diào)用執(zhí)行了一個表單fm.scx,這是一個對使用系統(tǒng)的用戶進(jìn)行身份驗證的表單,其運行結(jié)果如圖1.8所示。
6
圖1.8表單fm.scx的運行結(jié)果
表單的總體構(gòu)成有“歡迎使用”、“營銷管理信息系統(tǒng)”、“用戶名稱”、“用戶密碼”、“開發(fā)設(shè)計:******Ver1.02003年08月”五個標(biāo)簽,兩個命令按鈕和分別用于輸入用戶名和密碼的兩個文本框。在表單運行時,“歡迎使用”標(biāo)簽從表單左邊向右邊連續(xù)移動并不停變換顏色,“開發(fā)設(shè)計:******Ver1.02003年08月”標(biāo)簽則從表單右邊向左邊連續(xù)移動。標(biāo)簽的連續(xù)移動是通過在表單中加入計時器控件實現(xiàn)的。
下面簡單介紹fm.scx表單的設(shè)計,基本步驟如下:
⑴在項目管理器窗口中,選中“文檔”選項卡中的“表單”項,單擊窗口右邊的“新建”按鈕,VFP6系統(tǒng)打開“新建表單”對話框,如圖1.9所示。選擇“新建表單”按鈕,系統(tǒng)打開“表單設(shè)計器”窗口,在窗口中顯示一默認(rèn)標(biāo)題為“form1”的空白表單,如圖1.10所示。
圖1.9“新建表單”對話框圖1.10“表單設(shè)計器”窗口
⑵打開設(shè)計表單的相關(guān)工具窗口。要對空白表單進(jìn)行設(shè)計,需要使用VFP6系統(tǒng)提供的一些工具,主要是“表單控件工具欄”、“布局工具欄”以及“屬性”窗口。當(dāng)打開表單設(shè)計器時,如VFP6系統(tǒng)窗口中沒有這些工具,可通過分別執(zhí)行VFP6系統(tǒng)“顯示”菜單下的“表單控件工具欄”、“布局工具欄”、“屬性”菜單項來打開相應(yīng)窗口。這些設(shè)計工具窗口分別如圖1.11所示。
7
圖1.11設(shè)計表單的工具窗口
⑶設(shè)置表單屬性值。
①更改表單標(biāo)題。單擊空白表單,在其“屬性”窗口中將Caption屬性的值改為“歡迎使用營銷管理信息系統(tǒng)”,如圖1.12所示。
圖1.12設(shè)置表單標(biāo)題
②設(shè)置表單圖標(biāo)。單擊空白表單,在其“屬性”窗口中將Icon屬性的值設(shè)置為合適的圖標(biāo)。在單擊“Icon”屬性后,可單擊圖標(biāo)文件名輸入框旁邊的
圖標(biāo)文件。如圖1.13所示。按鈕,打開“打開”對話框,確定合適的
8
圖1.13設(shè)置表單圖標(biāo)
③設(shè)置表單填充圖片。在表單的“屬性”窗口中將Picture屬性的值設(shè)置為合適的圖片。在單擊“Picture”屬性后,可單擊圖片文件名輸入框旁邊的
片文件。如圖1.14所示。
按鈕,打開“打開”對話框,確定合適的圖
圖1.14設(shè)置表單填充圖片
④表單其他重要屬性設(shè)置。參照上述方法,分別設(shè)置表單的如下屬性:
AlwaysOntop=.T.
AutoCenter=.T.
BorderStyle=2-固定對話框
Closable=.T.
ControlBox=.T.
Desktop=.T.
Enabled=.T.
9
Height=300MaxButton=.F.MinButton=.F.Movable=.T.Visible=.T.Width=500WindowStat=0-普通
⑷添加表單控件。
①添加標(biāo)簽控件。單擊“表單控件工具欄”中的
按鈕,然后鼠標(biāo)在表單中合適位置按下左
鍵拖動到合適位置,松開鼠標(biāo),就在表單中出現(xiàn)處于被選中狀態(tài)的標(biāo)簽。用此方法分別在表單中添加五個標(biāo)簽。系統(tǒng)默認(rèn)用label1~label5分別命名這五個標(biāo)簽。
②設(shè)置標(biāo)簽的屬性。
標(biāo)簽的常用屬性有Caption、AutoSize、BackStyle、FontBold、FontName、FontSize、ForeColor、Top等。各標(biāo)簽的屬性設(shè)置如表1.1所示。
[說明]標(biāo)簽的字體(FontName)、字號(FontSize)、字體顏色(ForeColor)及字體是否加粗(FontBold)等屬性,可完全根據(jù)個人喜好進(jìn)行選擇設(shè)置,標(biāo)簽的BackStyle屬性,一般設(shè)成0-透明。③添加文本框控件。單擊“表單控件工具欄”中的按鈕,然后鼠標(biāo)在表單中合適位置按下左鍵拖動到合適位置,松開鼠標(biāo),就在表單中出現(xiàn)處于被選中狀態(tài)的文本框。用此方法分別在表單中添加兩個文本框。系統(tǒng)默認(rèn)用Text1、Text2分別命名這兩個文本框。
④設(shè)置文本框的屬性。兩個文本框分別用來輸入用戶名和用戶密碼,其屬性設(shè)置如表1.2所示。
[說明]Text2文本框是用來輸入用戶密碼的,用戶輸入的密碼字符一般不能直接顯示在文本框中,所以將其輸入的字符用星號“*”代替,當(dāng)然也可選用其他符號。⑤添加命令按鈕。單擊“表單控件工具欄”中的按鈕,然后鼠標(biāo)在表單中合適位置按下左鍵拖動到合適位置,松開鼠標(biāo),就在表單中出現(xiàn)處于被選中狀態(tài)的命令按鈕。用此方法分別在表單
10
中添加兩個命令按鈕,系統(tǒng)默認(rèn)用Command1、Command2分別命名這兩個命令按鈕。
⑥設(shè)置命令按鈕的屬性。表單中兩命令按鈕分別用來確認(rèn)用戶輸入和取消用戶輸入的,其屬性設(shè)置如表1.3所示。
[說明]在表單運行時,如果用戶按下回車鍵,一般認(rèn)為用戶是進(jìn)行確認(rèn)操作,因此把Command1的Default屬性設(shè)置為.T.。另外,命令按鈕中字體的顏色(ForeColor)以及FontName、FontSize、Height、Left、Top、Width等屬性的值設(shè)計者也都可根據(jù)需要和自己喜好進(jìn)行自由選擇設(shè)置。
⑦為命令按鈕編寫程序代碼。在表單運行時,當(dāng)用戶單擊命令按鈕時,系統(tǒng)執(zhí)行相應(yīng)的操作,這些操作就是通過系統(tǒng)執(zhí)行相應(yīng)的命令代碼來完成的。因此,不僅要為命令按鈕設(shè)置好屬性,還要為命令按鈕編寫好相應(yīng)的命令代碼。常用方法是鼠標(biāo)右擊添加在表單中的命令按鈕,在彈出的快捷菜單中選擇“代碼”菜單項,如圖1.15所示。
圖1.15快捷菜單
接著就進(jìn)入程序代碼編輯窗口,如圖1.16所示。在編輯窗口中編輯代碼時,應(yīng)注意在“過程”下拉列表框中,選擇對應(yīng)的事件。本例中對對象Command1命令按鈕,應(yīng)選擇“Click”事件。編輯完代碼后,關(guān)閉編輯窗口即可。
圖1.16代碼編輯窗口
在本例中,Command1即“確定”按鈕的“Click”事件代碼如下:
publicyhkl,yhname&&定義全局變量,記錄登錄用戶的名稱和密碼,以便系統(tǒng)分配用戶權(quán)限yhkl=alltrim(thisform.text2.value)&&保存用戶輸入的名稱和密碼yhname=alltrim(thisform.text1.value)
usepass&&打開保存已注冊用戶的用戶名和密碼的表文件
11
*以下代碼是檢驗用戶名稱和密碼
locaallforlower(alltrim(yhm))=lower(alltrim(yhname))
ifeof()
*不是合法注冊用戶,給出警告
=messagebox(‘你不是合法注冊用戶!’,0,’真遺憾’)
return
thisform.text1.setfocus
else
*用戶名正確,再檢驗用戶密碼
lsyhlx=alltrim(yhlx)
iflower(alltrim(yhmm))=lower(alltrim(yhkl))
use
thisform.release
setdeleon
setnotifyoff
setcenton
setdatetoansi
closeall
RELEASEWINDOW常用
MODIFYWINDOWSCREENTITLE"×××公司市場營銷管理信息系統(tǒng)ver;
1.0軟件編制者:×××登錄;
用戶:"+yhname+"("+lsyhlx+")"+"今天是:"+dtoc(date())
_SCREEN.ICON="face05.ico"
_SCREEN.picture="pc1.jpg"
ZOOMWINDOWSCREENMAX
_SCREEN.controlbox=.f.
domainmenu.mpr&&當(dāng)用戶名和密碼都正確時,關(guān)閉當(dāng)前表單,運行主菜單進(jìn)行系統(tǒng)else
*不是合法注冊用戶,給出警告
=messagebox(‘密碼不正確,請你再好好想想!’,0,’真遺憾’)
return
thisform.text2.setfocus
endif
endif
Command2即“取消”按鈕的“Click”事件代碼如下:
thisform.release
cleareven
quit
[說明]對用戶身份進(jìn)行驗證的方法有多種多樣,本例中是先把用戶名、用戶密碼及用戶類型儲存在表pass.dbf中,驗證用戶身份時,把用戶輸入的用戶名和相應(yīng)的密碼與儲存在表中的進(jìn)行比較,以判斷用戶是否合法。當(dāng)驗證通過時,關(guān)閉當(dāng)前表單,記錄下用戶名,作為在系統(tǒng)運行時,分配用戶使用權(quán)限的依據(jù),同時清理系統(tǒng)界面,設(shè)置系統(tǒng)主窗口屬性,調(diào)用系統(tǒng)主菜單進(jìn)入系統(tǒng)進(jìn)行工作。12
⑧添加計時器控件并設(shè)置其屬性。單擊“表單控件工具欄”中的
控件,如圖1.17所示。系統(tǒng)默認(rèn)用Timer1命名此控件。
按鈕,然后在表單中任意位置單擊左鍵(計時器控件放在表單中任意位置都可以),就在表單中出現(xiàn)處于被選中狀態(tài)的計時器
圖1.17在表單中添加計時器控件
計時器控件用來在程序運行中在指定的時間間隔計時器代碼編輯窗口
本例中計時器的“Timer”事件的過程代碼為:
13
ifca<255
ca=ca+1
else
ca=90
endif
ifcb<255
cb=cb+1
else
cb=180
endif
ifcc<255
cc=cc+1
else
cc=1
endif
IfThisform.Label2.left>thisform.width
thisform.label2.forecolor=rgb(ca,cb,cc)
Thisform.Label2.left=-199
thisform.label2.left=Thisform.Label2.left+10
Else
thisform.label2.forecolor=rgb(ca,cb,cc)
Thisform.Label2.left=Thisform.Label2.left+10
EndIf
IfThisform.Label5.Left<=-394
Thisform.Label5.Left=thisform.width
Thisform.Label5.Left=Thisform.Label5.Left-10
Else
Thisform.Label5.Left=Thisform.Label5.Left-10
EndIf
thisform.refresh
⑸為表單添加代碼。在表單運行時及關(guān)閉表單前,需要做一些環(huán)境準(zhǔn)備及清理工作,這也是通過為表單添加一些程序代碼來實現(xiàn)的。方法是在表單設(shè)計器窗口中,在表單中單擊鼠標(biāo)右鍵,在打開的快捷菜單中選擇“代碼”菜單項,進(jìn)入代碼編輯窗口,如圖1.19所示。
圖1.19表單代碼編輯窗口
①在編輯窗口的“過程”下拉列表框中選擇“Load”事件,為其添加如下代碼:
publicca,cb,cc&&設(shè)置全局變量,記錄RGB()函數(shù)的自變量的值
14
ca=0
cb=0
cc=0
②在“過程”下拉列表框中選擇“Unload”事件,為其添加如下代碼:
releaseca,cb,cc&&釋放全局變量
[說明]至此,系統(tǒng)主程序及用戶身份驗證的設(shè)計就全部完成。需要說明的是,實驗中設(shè)計的主程序和表單中,使用的表pass.dbf及菜單mainmenu還尚未創(chuàng)建。如要試運行主程序及fm.scx表單,須先創(chuàng)建此兩個文件。另外,要試運行,須在Windows的“我的電腦”或“資源管理器”中,雙擊C:\mis下的mis項目文件,自動進(jìn)入VFP6打開項目管理器后,再在項目管理器中選擇“代碼”選項卡中“程序”項下的mainprg.prg主文件,再單擊項目管理器窗口右邊的“運行”按鈕。
三、菜單系統(tǒng)設(shè)計
幾乎在所有的應(yīng)用程序中,都要為用戶提供一個菜單系統(tǒng),菜單系統(tǒng)是用戶界面的重要組成部分。菜單反映了程序的基本功能,而掩蓋了程序“新建菜單”對話框
⑵單擊“新建菜單”對話框中的“菜單”按鈕,則進(jìn)入“菜單設(shè)計器”,如圖1.21所示,用來15
設(shè)計一個如同VFP6系統(tǒng)主菜單的下拉式菜單系統(tǒng)(如單擊“快捷菜單”則進(jìn)入“快捷菜單設(shè)計器”,用來設(shè)計一個單擊鼠標(biāo)右鍵即可激活的快捷菜單??旖莶藛蔚牟藛芜x項與被右擊的對象有關(guān)。從外觀看,兩種菜單設(shè)計器并沒有什么不同,操作方法也基本一致,所以以下只重點介紹用菜單設(shè)計器設(shè)計應(yīng)用程序主菜單)。
啟動菜單設(shè)計器后,VFP6的系統(tǒng)菜單將增加一個“菜單”菜單名,并在“顯示”系統(tǒng)菜單中增加了“常規(guī)選項”和“菜單選項”兩個選項。
㈡菜單設(shè)計器的使用
1.輸入菜單名稱
菜單名稱是指顯現(xiàn)于菜單橫向菜單欄上的菜單標(biāo)題或者出現(xiàn)于下拉菜單中的選項名稱。在“菜單設(shè)計器”窗口中的“菜單名稱”列中依次輸入菜單標(biāo)題:系統(tǒng)管理、合同管理、銷售管理、客戶信息管理、市場信息管理、銷售人員管理、廣告管理、售后服務(wù)管理、退出系統(tǒng),如圖1.21所示。
圖1.21菜單設(shè)計器窗口
2.指定菜單功能
在菜單設(shè)計器窗口中的“結(jié)果”列中,可選擇指定菜單名稱的類型,共有4種類型可供選擇,本例中主要用到3種,在此略作介紹。
⑴子菜單:這是默認(rèn)類型,該類型使得能夠在當(dāng)前菜單名稱下建立下級菜單。本例中除了標(biāo)題為“退出系統(tǒng)”的菜單外,其他幾個菜單都選擇設(shè)置為“子菜單”。
⑵過程:過程是以procedure開頭的程序段,可以把多個過程集中寫在一個源程序文件中。如果菜單選項設(shè)置為“過程”類型,那么該菜單選項將執(zhí)行一個過程代碼,過程代碼將成為菜單源文件的一部分。這里把菜單標(biāo)題為“退出系統(tǒng)”的菜單類型設(shè)置為“過程”。
⑶命令:如果菜單類型設(shè)置為“命令”,則當(dāng)前菜單項的功能將只是執(zhí)行一條VFP6命令。如BROWSE命令,或DO<子程序文件名>等,而后者可以執(zhí)行任意復(fù)雜的操作。
本系統(tǒng)的各菜單名稱的功能類型設(shè)置如圖1.21所示。
3.定義菜單標(biāo)題的鍵盤訪問鍵
在菜單標(biāo)題名稱的左側(cè)、右側(cè)或在菜單設(shè)計器中,為菜單標(biāo)題設(shè)置鍵盤訪問鍵的方法是:在菜單名稱左側(cè)、右側(cè)或內(nèi)部輸入“\<字母”即可,該字母就是鍵盤訪問鍵。本例中,各菜單名稱的鍵盤訪問鍵的設(shè)置如圖1.21所示,設(shè)計者也可根據(jù)自己的設(shè)計思路自由選擇。
16
4.創(chuàng)建和修改子菜單并為菜單項指定功能代碼
在菜單設(shè)計器窗口中,各菜單名稱的“結(jié)果”列設(shè)置為“子菜單”的菜單,右邊有一個“創(chuàng)建”按鈕。單擊該按鈕,就出現(xiàn)與剛才進(jìn)入菜單設(shè)計器相同的畫面,只是在“菜單級”選擇框中的原來顯示的“菜單欄”變成菜單標(biāo)題的名稱。這說明進(jìn)入了菜單標(biāo)題名稱下的子菜單的設(shè)計過程。
本例主要以系統(tǒng)管理和銷售管理兩個子模塊為例,介紹營銷管理信息系統(tǒng)的開發(fā),因此以后的設(shè)計操作過程,主要介紹這兩個菜單及其功能的實現(xiàn),其他菜單及其功能設(shè)計,就不再介紹,可根據(jù)教材內(nèi)容并參考系統(tǒng)管理、銷售管理兩個模塊的設(shè)計進(jìn)行開發(fā)。
在如圖1.21所示的菜單設(shè)計器窗口中,將“系統(tǒng)管理”菜單名稱的結(jié)果類型設(shè)置為“子菜單”,單擊右邊的“新建”按鈕,就進(jìn)入“系統(tǒng)管理”菜單標(biāo)題的下級菜單的設(shè)計窗口,如圖1.22所示。
圖1.22菜單設(shè)計器窗口
在圖1.22所示的菜單設(shè)計器窗口中,在“菜單級”選擇框中顯示為“系統(tǒng)管理S”,這表明在此窗口中設(shè)計的菜單是菜單欄中“系統(tǒng)管理”菜單名稱的下級子菜單。在“菜單名稱”欄中分別輸入“數(shù)據(jù)備份(\<B)”、“數(shù)據(jù)恢復(fù)(\<R)”、“\-”、“代碼管理(\<C)”、“\-”、“密碼管理(\<P)”、“\-”、“退出系統(tǒng)(\<X)”菜單項名稱(菜單名稱前的“
”符號不用輸入,該符號只是本手冊編寫者用來標(biāo)注在整個系統(tǒng)菜單中,已設(shè)計好范例的菜單部分。菜單項名稱如是“\-”,則當(dāng)菜單運行時,會在相應(yīng)的菜單項位置,顯示一條將相鄰兩菜單項隔開的分隔橫線。在一般的菜單設(shè)計中,其作用往往是按功能相近的原則把菜單選項進(jìn)行分組顯示),并在其對應(yīng)的“結(jié)果”欄中分別選擇“命令”、“命令”、“子菜單”、“子菜單”、“子菜單”、“過程”、“子菜單”、“過程”,在“數(shù)據(jù)備份”和“數(shù)據(jù)恢復(fù)”菜單項的“結(jié)果”欄右邊的輸入框中分別輸入命令“doformdatabak”和“doformdatarstore”(此兩條命令就是讓系統(tǒng)在當(dāng)用戶分別選擇該菜單項時,分別調(diào)用名為“databak”和“datarstore”的表單來完成對應(yīng)的功能)。
選中“代碼管理”菜單項,單擊“結(jié)果”欄右邊的“創(chuàng)建”按鈕,就進(jìn)入“代碼管理”的下級子菜單設(shè)計窗口,如圖1.23所示。
17
圖1.23菜單設(shè)計器窗口
在圖1.23所示的窗口中,在“菜單名稱”欄中分別輸入“地區(qū)代碼管理”、“產(chǎn)品代碼管理”、“客戶代碼管理”,將其“結(jié)果”都設(shè)置為“過程”。單擊“過程”右邊的“創(chuàng)建”按鈕(如過程已經(jīng)創(chuàng)建,則是“編輯”按鈕)就會彈出過程代碼編輯窗口,如圖1.24所示。
圖1.24過程編輯窗口
用戶可在窗口中輸入菜單項對應(yīng)的過程代碼以完成與該菜單項相應(yīng)的任務(wù)。代碼編輯完成后,關(guān)閉窗口即可。雖然這里輸入的程序代碼是菜單文件中的一個過程,但不必書寫procedure,因為系統(tǒng)會自動添加。
“地區(qū)代碼管理”菜單項的過程代碼為:
usediqudaima&&打開地區(qū)代碼表
pack
use
doformdqdm&&執(zhí)行表單文件
“產(chǎn)品代碼管理”菜單項的過程代碼為:
usechpdaima&&打開產(chǎn)品代碼表
pack
use
doformcpdm&&執(zhí)行表單文件
“客戶代碼管理”菜單項的過程代碼為:
usekehu&&打開客戶信息表
pack
use
doformkehugl&&執(zhí)行表單文件
18
在“代碼管理”的子菜單設(shè)計完成后,在圖1.23所示的窗口的“菜單級”選擇框中選擇“系統(tǒng)管理”項,則又返回圖1.22所示的“系統(tǒng)管理”菜單的子菜單設(shè)計窗口。再按同樣方法分別為“密碼管理”和“退出系統(tǒng)”菜單項編寫過程代碼。
“密碼管理”菜單項的過程代碼為:
setdeleon
usepass
deleallforlen(alltrim(yhm))=0
pack
locaallforalltrim(yhm)=alltrim(yhname)
ifalltrim(yhlx)="系統(tǒng)管理員"
use
doformmmgl.scx
else
nAnswer=messagebox(‘很抱歉!您不是系統(tǒng)管理員無權(quán)查閱和更改用戶名;
和密碼!’,0,’警告!’)
use
return
endif
“退出系統(tǒng)”菜單項的過程代碼為:
ans=messagebox("確信要退出系統(tǒng)嗎?",4,"確認(rèn)信息")
ifans=6
closeall
clearevent
quit
else
return
endif
當(dāng)“系統(tǒng)管理”菜單的子菜單設(shè)計完成后,在“菜單級”選擇框中選擇“菜單欄”項,則又返回如圖1.21所示的菜單設(shè)計器窗口。
在圖1.21所示的菜單設(shè)計器窗口中,選中“銷售管理”菜單名稱,單擊其“結(jié)果”欄右邊的“創(chuàng)建”按鈕,則進(jìn)入如圖1.25所示的其下級子菜單的設(shè)計窗口。
19
圖1.25菜單設(shè)計器窗口
“銷售管理”的子菜單設(shè)計如圖1.25所示。再按前述方法分別設(shè)計各菜單項的下級子菜單,并為相應(yīng)的菜單項添加命令代碼或過程代碼。
“銷售信息”、“往來賬款”、“收賬政策”菜單項的子菜單設(shè)計分別如圖1.26、1.27和1.28所示。
圖1.26“銷售信息”菜單項的子菜單設(shè)計
20
圖1.27“往來賬款”菜單項的子菜單設(shè)計
圖1.28“收賬政策”菜單項的子菜單設(shè)計
“銷售統(tǒng)計”菜單項的命令代碼為:
doformxshtj&&執(zhí)行名為xshtj的表單“銷售信息編輯”子菜單項的過程代碼為:usexiaoshou
pack
use
doformxiaoshlr
“銷售信息查詢打印”子菜單項的命令代碼為:doformxshcx
“往來賬款編輯”子菜單項的過程代碼為:usezhangk
pack
use
21
doformzhangklr
“往來賬款查詢打印”子菜單項的命令代碼為:
doformzhangkcx
“收賬政策編輯”子菜單項的過程代碼為:
useshouzh
pack
use
doformshouzhlr
“收賬政策查詢打印”子菜單項的命令代碼為:
doformshouzhcx
本例系統(tǒng)中其他菜單的設(shè)計,可參考上述方法進(jìn)行。
5.為菜單選項定義快捷鍵
在系統(tǒng)菜單中,往往可以看到有的菜單選項右側(cè)有Ctrl+<字母>或Alt+<字母>的字樣,例如“文件”菜單中的“新建…Ctrl+N”等,這就是菜單的快捷鍵。不必層層激活菜單,只要按下快捷鍵,就能執(zhí)行快捷鍵所對應(yīng)的菜單選項命令。
在此以圖1.25所示的菜單設(shè)計器窗口中的“銷售統(tǒng)計”菜單項為例加以說明。單擊選中“銷售統(tǒng)計”菜單項,單擊其對應(yīng)的“選項”欄下方的按鈕,將出現(xiàn)如圖1.29所示的“提示選項”對話框。
圖1.29“提示選項”對話框
鼠標(biāo)單擊“鍵標(biāo)簽”文本框(這是必須的),再通過鍵盤輸入組合鍵Alt+<字符>(字母、數(shù)字、符號),或組合鍵Ctrl+<字母>、Alt+F1~F12、Ctrl+F1~F12,或直接通過鍵盤敲擊F1~F12功能鍵,則在“鍵標(biāo)簽”框中自動記錄并顯示鍵盤輸入的快捷鍵。如圖1.30所示(此例中按下的Ctrl+S鍵)。22
圖1.30“提示選項”對話框
最后單擊“確定”按鈕,就設(shè)置好了“銷售統(tǒng)計”菜單項的快捷鍵(注意:所有快捷鍵是不能重名的)。其他菜單項的快捷鍵的設(shè)置,請參照此方法自己完成。
6.進(jìn)一步完善菜單程序
⑴常規(guī)選項的主要操作。在菜單設(shè)計器窗口打開的情況下,選擇系統(tǒng)“顯示”菜單中的“常規(guī)選項”,會出現(xiàn)如圖1.31所示的”常規(guī)選項”對話框。
圖1.31“常規(guī)選項”對話框
①為菜單欄中不曾編寫程序代碼或子菜單項的菜單名稱編寫統(tǒng)一的代碼。其方法是:在“常規(guī)
23
選項”對話框的“過程”編輯框中輸入需要執(zhí)行的程序代碼,或者是單擊“編輯”按鈕,再單擊“常規(guī)選項”對話框的“確定”按鈕,激活“編輯”窗口,在“編輯”窗口中輸入需要執(zhí)行的過程代碼。這個過程是對整個菜單系統(tǒng)都有效的全局代碼。如果菜單欄中有若干個菜單名稱不曾添加子菜單或編寫程序代碼,而在運行菜單時又被選中了,那么就會執(zhí)行在這里編寫的過程代碼。這往往用于調(diào)試菜單系統(tǒng)。
本例中該過程代碼如下:
=messagebox("對不起,該選項還未完工,暫時還不能使用!",0,"系統(tǒng)提示")
return
②設(shè)置主菜單的顯示位置。設(shè)計的主菜單在運行時顯示的位置可以在“常規(guī)選項”對話框中指定。
在圖1.31所示的“常規(guī)選項”對話框的“位置”框中,設(shè)計者可通過單選框的選擇來設(shè)置主菜單的顯示位置?,F(xiàn)說明如下:
“替換”:程序運行時將用設(shè)計的主菜單取代VFP6系統(tǒng)菜單。
“追加”:程序運行時將把所設(shè)計的主菜單追加到VFP6系統(tǒng)菜單的后面。
“在?之前”:程序運行時將把所設(shè)計的主菜單插入到指定的VFP6系統(tǒng)菜單標(biāo)題的前面?!霸?之后”:程序運行時將把所設(shè)計的主菜單插入到指定的VFP6系統(tǒng)菜單標(biāo)題的后面。上面后3種位置都將使得VFP6菜單成為應(yīng)用程序菜單的一部分。在本例中選擇“替換”。③“頂層表單”檢查框的設(shè)置。如果不選擇“頂層表單”檢查框,只允許設(shè)計的菜單在VFP6頁框中使用;如果選擇,則允許菜單在頂層表單中使用,從而成為一個SDI菜單。本例中不選擇“頂層表單”檢查框。
⑵菜單選項操作。在菜單設(shè)計器窗口打開的情況下,在“菜單級”選擇框中選擇“菜單欄”,再選擇系統(tǒng)“顯示”菜單中的“菜單選項”,會出現(xiàn)如圖1.32所示的“菜單選項”對話框。
圖1.32“菜單選項”對話框
在圖1.32所示的“菜單選項”對話框的“過程”編輯框中可以輸入任何程序代碼。本程序代碼的用途是作為對話框中“名稱”文本框所指定菜單級的各選項的公用執(zhí)行代碼,也就是當(dāng)運行菜單時如果選擇了不曾為之編寫代碼的該級菜單的菜單項,則執(zhí)行本過程代碼。這些代碼只是局部于本級菜單的過程,只在調(diào)用本級菜單時才起作用。
本例中為該過程指定的菜單級是菜單欄,則意味著當(dāng)主菜單在運行時,只要用戶選擇了任一菜單名稱下的任一不曾編寫代碼的菜單項,都會執(zhí)行該代碼,這為調(diào)試菜單程序提供了很大的方便。該過程代碼內(nèi)容為:
=messagebox("對不起,工程還未完工,暫時還不能使用!",0,"系統(tǒng)提示")
return
24
當(dāng)然,如果在選擇執(zhí)行“菜單選項”之前,先在菜單設(shè)計器窗口中的“菜單級”選擇框中選擇其他子菜單,則在“菜單選項”對話框中的“名稱”文本框中相應(yīng)顯示出所選擇的菜單級的名稱,在其“過程”編輯框中編輯的過程代碼只對該級菜單有效。
當(dāng)上述操作都完成后,執(zhí)行存盤操作或關(guān)閉菜單設(shè)計器,系統(tǒng)都會出現(xiàn)對話框詢問是否保存,如選擇“是”,則會出現(xiàn)“另存為”對話框,如圖1.33所示。
圖1.33“另存為”對話框
在該對話框中,選擇保存路徑為C:\mis\MENUS,文件名取名為mainmenu,單擊“保存”按鈕即可。
㈢生成菜單程序
用菜單設(shè)計器生成的菜單文件擴(kuò)展名是.mnx,這種文件是不能直接執(zhí)行的,設(shè)計者必須把它轉(zhuǎn)換成擴(kuò)展名為.mpr的菜單程序文件。
可用下面的方法生成菜單程序文件:
⑴首先在項目管理器中選擇上述設(shè)計好的的菜單名稱mainmenu,然后單擊項目管理器的“修改”按鈕,進(jìn)入菜單設(shè)計器,選取VFP6系統(tǒng)菜單“菜單”下的“生成”選項,彈出如圖1.34所示的“生成菜單”對話框。
在“生成菜單”對話框中指定輸出的菜單程序文件名為mainmenu.mpr,存放路徑為C:\mis\MENUS,再單擊“生成”按鈕就行了。
圖1.34“生成菜單”對話框
⑵在項目管理器中選擇上述設(shè)計好的的菜單名稱mainmenu,然后單擊項目管理器的“運行”按鈕,也將自動生成一個.mpr文件。
25
在生成菜單程序文件過程中,如果發(fā)現(xiàn)錯誤,將會出現(xiàn)警告選擇框,設(shè)計者可根據(jù)錯誤情況自由處理。
[說明]如果設(shè)計者想把程序編譯成.exe文件,脫離VFP6環(huán)境成為獨立運行的應(yīng)用程序,而且菜單是主文件,則必須注意兩個問題:必須在菜單的“清理”過程代碼中加入命令行readevents,而在退出菜單系統(tǒng)的菜單選項的過程或程序代碼中必須包括命令行clearevents,否則菜單在屏幕上一晃即逝而不能應(yīng)用。
四、數(shù)據(jù)庫及表的設(shè)計
在營銷管理信息系統(tǒng)中,系統(tǒng)管理和銷售管理兩個子系統(tǒng)的功能結(jié)構(gòu)已經(jīng)體現(xiàn)在設(shè)計好的主菜單中。在本實驗中要設(shè)計兩個子系統(tǒng)使用的數(shù)據(jù)庫和表,作為各菜單功能實現(xiàn)的設(shè)計基礎(chǔ)。㈠兩個子系統(tǒng)使用的表單、數(shù)據(jù)庫及表
1.系統(tǒng)管理子系統(tǒng)使用的表單、數(shù)據(jù)庫和表在系統(tǒng)管理子系統(tǒng)中,又包含了“數(shù)據(jù)備份”、“數(shù)據(jù)恢復(fù)”、“代碼管理”、“密碼管理”和“退出系統(tǒng)”子模塊。該子系統(tǒng)使用的表單、數(shù)據(jù)庫及表的關(guān)系如表1.4所示。
表1.4系統(tǒng)管理子系統(tǒng)各子模塊使用的表單、數(shù)據(jù)庫和表
從表1.4可以看出,系統(tǒng)管理子系統(tǒng)共調(diào)用了6個表單,使用了4張表,其中diqudaima.dbf(地區(qū)代碼)、chpdaima.dbf(產(chǎn)品代碼)和pass.dbf(用戶密碼表)屬于daima(代碼)數(shù)據(jù)庫,kehu.dbf(客戶基本信息表)屬于xshgl(銷售管理)數(shù)據(jù)庫。
2.銷售管理子系統(tǒng)使用的表單、數(shù)據(jù)庫和表
銷售管理子系統(tǒng)的功能結(jié)構(gòu)參見主菜單的各功能選項。該子系統(tǒng)使用的表單、數(shù)據(jù)庫及表的關(guān)系如表1.5所示。
26
從表1.5可以看出,銷售管理子系統(tǒng)直接或間接共調(diào)用了11個表單,使用了12張表,其中chpdaima.dbf(產(chǎn)品代碼)、jsfs.dbf(結(jié)算方式)、kxxz.dbf(款項性質(zhì))、jzbb.dbf(記賬幣別)屬于daima(代碼)數(shù)據(jù)庫,kehu.dbf(客戶基本信息表)和xiaoshou.dbf(銷售基本信息表)屬于
xshgl(銷售管理)數(shù)據(jù)庫,Zhangk.dbf(往來賬款信息)和shouzh.dbf(收賬政策信息)表屬于Zhkwl數(shù)據(jù)庫,Xiaoshoucx.dbf(銷售查詢結(jié)果表)、Zhankcx.dbf(往來賬款查詢結(jié)果表)、Shouzhcx.dbf(收賬政策查詢結(jié)果表)和Xiaoshoutj.dbf(銷售統(tǒng)計結(jié)果表)是自由表。上述4個自由表是程序在運行期間自動創(chuàng)建的,并作為信息輸出的依據(jù),是不需要設(shè)計者創(chuàng)建的。其余各表均需在設(shè)計表單及程序代碼之前先行創(chuàng)建好,以備使用。
綜合起來,系統(tǒng)管理和銷售管理兩個子系統(tǒng)設(shè)計中,需要創(chuàng)建3個數(shù)據(jù)庫共10個表。
㈡兩個子系統(tǒng)使用的表的結(jié)構(gòu)
兩個子系統(tǒng)使用的表的結(jié)構(gòu)及字段說明分別見表1.6~1.15。
表1.8jsfs(結(jié)算方式)表的字段說明
表1.10kxxz(款項性質(zhì))表的字段說明
27
表1.14shouzh(收賬政策信息)表的字段說明
表1.15zhangk(往來賬款信息)表的字段說明
28
1.創(chuàng)建數(shù)據(jù)庫
數(shù)據(jù)庫文件的創(chuàng)建既可用命令方式,也可用VFP6系統(tǒng)“文件”菜單中的“新建…”選項。本實驗中為了方便對系統(tǒng)文件的管理,以利用項目管理器創(chuàng)建方式加以介紹。下面以創(chuàng)建daima數(shù)據(jù)庫為例介紹數(shù)據(jù)庫創(chuàng)建的一般步驟:⑴在項目管理器中打開MIS項目文件。
⑵新建數(shù)據(jù)庫并打開數(shù)據(jù)庫設(shè)計器窗口。在彈出的項目管理器窗口中,選中“數(shù)據(jù)”選項卡中“數(shù)據(jù)庫”項,再單擊“新建”按鈕,出現(xiàn)“新建數(shù)據(jù)庫”對話框,如圖1.35所示,再單擊“新建數(shù)據(jù)庫”按鈕,接著在出現(xiàn)的“創(chuàng)建”對話框(如圖1.36所示)中,將新建數(shù)據(jù)庫取名為daima,存放位置確定為C:\mis\DATA,再單擊“保存”按鈕,則會打開“數(shù)據(jù)庫設(shè)計器-Daima”窗口,如圖1.37所示。
圖1.35“新建數(shù)據(jù)庫”對話框
29
圖1.36“創(chuàng)建”對話框
圖1.37“數(shù)據(jù)庫設(shè)計器–Daima”窗口
⑶在數(shù)據(jù)庫設(shè)計器中添加或新建表。如果有已經(jīng)創(chuàng)建好的表要加入到數(shù)據(jù)庫中,則可選擇系統(tǒng)菜單中“數(shù)據(jù)庫”菜單下的“添加表?”選項,或在數(shù)據(jù)庫設(shè)計器窗口中單擊鼠標(biāo)右鍵,在彈出的
快捷菜單中選擇“添加表?”選項,或單擊“數(shù)據(jù)庫設(shè)計器”工具欄中的按鈕(添加表按鈕),再選擇需要添加的表即可。
本實驗中主要介紹向數(shù)據(jù)庫中新建表。其基本步驟如下:
①選擇系統(tǒng)菜單中“數(shù)據(jù)庫”菜單下的”新建表?”選項,或在數(shù)據(jù)庫設(shè)計器窗口中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“新建表?”選項,或單擊“數(shù)據(jù)庫設(shè)計器”工具欄中的按鈕(新建表按鈕),出現(xiàn)如圖1.38所示的“新建表”對話框。
30
圖1.38“新建表”對話框
②在“新建表”對話框中單擊“新建表”按鈕,在出現(xiàn)的“創(chuàng)建”對話框(如圖1.36所示)中將新建的表取名為chpdaima.dbf,存放位置為C:\mis\DATA,再單擊“保存”按鈕,接著就出現(xiàn)如圖
1.39所示的“表設(shè)計器-chpdaima.dbf”窗口。
圖1.39“表設(shè)計器-chpdaima.dbf”窗口
③在表設(shè)計器窗口中輸入表chpdaima.dbf的字段名、字段類型和字段寬度。在圖1.39所示的表設(shè)計器中,分別把表1.6中所列出的chpdaima.dbf表的字段名、字段類型和字段寬度輸入。
④選擇表的索引關(guān)鍵字段。在“產(chǎn)品代碼”行中“索引”列的下拉列表框中,選擇“升序”,就設(shè)置好了表的索引關(guān)鍵字。再單擊表設(shè)計器中的“索引”選項卡,則可對該索引進(jìn)行具體設(shè)置,包括設(shè)置索引類型、索引篩選條件等,本例中將該索引設(shè)置為“普通索引”,如圖1.40所示。
圖1.40表的索引的設(shè)置
⑤單擊“確定”按鈕,結(jié)束新建表的設(shè)計。此時系統(tǒng)會彈出一個對話框,詢問是否立即向新建
31
的表中輸入記錄。如要立即輸入記錄,單擊“是”按鈕,就進(jìn)入記錄輸入窗口;否則單擊“否”按鈕退出表的設(shè)計,返回“數(shù)據(jù)庫設(shè)計器-Daima”窗口,這時就可看到在窗口中出現(xiàn)了新建的表chpdaima.dbf,如圖1.41所示。
圖1.41新建的表顯示在數(shù)據(jù)庫設(shè)計器窗口中
⑥按同樣方法,把diqudaima(地區(qū)代碼)表、jsfs(結(jié)算方式)表、jzbb(記賬幣別)表、kxxz(款項性質(zhì))表和pass(用戶密碼)表新建到daima數(shù)據(jù)庫中,結(jié)果如圖1.42所示。
圖1.42創(chuàng)建好的daima數(shù)據(jù)庫
⑷設(shè)置數(shù)據(jù)庫中各表的關(guān)系。因本例中各數(shù)據(jù)表之間的數(shù)據(jù)關(guān)系比較簡單,所以各表之間的關(guān)系設(shè)置就不作介紹。一般來說,當(dāng)數(shù)據(jù)庫中的各數(shù)據(jù)表之間的關(guān)系復(fù)雜時,利用各表的索引關(guān)鍵字將各表聯(lián)系起來,可以將復(fù)雜的問題簡化,同時也方便數(shù)據(jù)檢索。
參照上述daima數(shù)據(jù)庫的創(chuàng)建方法,將xshgl和zhkwl數(shù)據(jù)庫及其包含的各表創(chuàng)建好。分別如圖
1.43和1.44所示。
32
圖1.43創(chuàng)建好的xshgl數(shù)據(jù)庫圖1.44創(chuàng)建好的zhkwl數(shù)據(jù)庫
2.表的創(chuàng)建
包含在數(shù)據(jù)庫中的表的創(chuàng)建,除了上述介紹的在創(chuàng)建數(shù)據(jù)庫時利用數(shù)據(jù)庫設(shè)計器創(chuàng)建外,也可在數(shù)據(jù)庫創(chuàng)建好后,在項目管理器中向選定的數(shù)據(jù)庫中新建表,其操作過程基本相同,都是通過“表設(shè)計器”進(jìn)行表設(shè)計,在此就不再重復(fù)介紹。
3.向表中錄入初始數(shù)據(jù)
上述過程創(chuàng)建的表,都沒有添加記錄。有些表的記錄是在程序運行過程中,由用戶錄入的,但對jsfs表、pass.dbf表、kxxz表和jzbb表的內(nèi)容,需要先行確定下來,因為程序中有些地方需要直接使用這些表的內(nèi)容。
對jsfs表,錄入結(jié)算方式為“現(xiàn)金”、“支票”、“匯票”的三條記錄(僅以此為例);對pass表,登記初始用戶名、用戶密碼和用戶類型(本系統(tǒng)初始用戶名有“zlq”、“zcb”、“l(fā)yh”,用戶密碼分別為“1234”、“abcd”、“123”,用戶類型分別為“系統(tǒng)管理員”、“普通用戶”、“普通用戶”);對jzbb表,可錄入“人民幣”、“美元”、“日元”等常用的記賬貨幣名稱;對kxxz表,錄入“應(yīng)收款”、“應(yīng)付款”、“定金”、“預(yù)付款”等記錄。
至此,系統(tǒng)管理和銷售管理兩個子系統(tǒng)設(shè)計中用到的數(shù)據(jù)庫和數(shù)據(jù)表就都創(chuàng)建完成了,后續(xù)的程序設(shè)計就可以進(jìn)行了。
33
實驗二數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)和地區(qū)代碼管理表單的設(shè)計
【實驗?zāi)康暮鸵蟆?/p>
通過本次實驗,了解系統(tǒng)管理子系統(tǒng)中通過表單實現(xiàn)數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)及代碼管理的設(shè)計思路,學(xué)會表單設(shè)計制作的基本方法,掌握系統(tǒng)開發(fā)中對基礎(chǔ)數(shù)據(jù)管理、保護(hù)數(shù)據(jù)安全的常見設(shè)計方法。
【建議實驗學(xué)時】
4學(xué)時。
【實驗內(nèi)容和步驟】
在系統(tǒng)管理和銷售管理兩個子系統(tǒng)使用的數(shù)據(jù)庫和表都創(chuàng)建完成后,就可以使用已創(chuàng)建的表和數(shù)據(jù)庫進(jìn)行表單設(shè)計。在本實驗中主要是介紹系統(tǒng)管理子系統(tǒng)使用的databak.scx、datarstore.scx、dqdm.scx三個表單的設(shè)計,另外cpdm.scx、kehugl.scx和mmgl.scx三個表單的設(shè)計,放在下一次實驗中介紹。
表單的設(shè)計首先應(yīng)創(chuàng)建新表單。新表單的創(chuàng)建,可以通過選擇VFP6系統(tǒng)菜單“文件”下的“新建…”菜單項,也可以利用項目管理器,向項目中新建表單。為方便系統(tǒng)開發(fā)中設(shè)計者對各種文件的管理,以后關(guān)于表單設(shè)計的實驗主要介紹通過項目管理器來新建表單的方法和過程。但不管用哪種方式新建表單,都是利用系統(tǒng)提供的“表單設(shè)計器”來進(jìn)行的,其基本操作過程也大致相同。
一、數(shù)據(jù)備份表單databak.scx的設(shè)計
表單databak.scx的運行結(jié)果如圖2.1所示。
圖2.1表單databak.scx的運行結(jié)果
㈠新建表單
基本步驟如下:
⑴打開mis項目管理器窗口。
⑵打開“表單設(shè)計器”窗口。在項目管理器中選擇“文檔”選項卡中的“表單”項,再單擊項目管理器窗口中的“新建”按鈕,將出現(xiàn)如圖2.2所示的“新建表單”對話框,再單擊該對話框中的“新建表單”按鈕,就出現(xiàn)如圖2.3所示的“表單設(shè)計器”窗口。
34
圖2.2“新建表單”對話框
圖2.3“表單設(shè)計器”窗口
⑶向空白表單中添加控件。在圖2.3所示的“表單設(shè)計器”窗口中,標(biāo)題為“Form1”的窗口區(qū),就是新建的空白表單,設(shè)計者就可利用VFP6系統(tǒng)提供的“表單控件工具”和“布局工具”等工具在該空白表單中添加和設(shè)計所需要的控件。
從表單databak.scx的運行結(jié)果分析,該表單包含2個標(biāo)簽、3個命令按鈕、1個文本框和一個選項按鈕組。文本框用于讓用戶輸入所要備份的文件目錄,選項按鈕組讓用戶選擇備份的結(jié)果文件存放的驅(qū)動器。由于不同用戶的計算機可用的驅(qū)動器是不同的,這樣選項按鈕組的各選項按鈕的標(biāo)題和選項按鈕的數(shù)量在設(shè)計表單時就不能固定,因此該表單中的選項按鈕組在設(shè)計表單時不用設(shè)計,而是在表單運行時用程序代碼進(jìn)行動態(tài)設(shè)計,但在設(shè)計表單時,應(yīng)預(yù)留選項按鈕組的顯示位置。所以,該表單在設(shè)計時,只需添加2個標(biāo)簽、3個命令按鈕、1個文本框。
如在“表單設(shè)計器”打開時看不到“表單控件工具”和“布局工具”,可打開系統(tǒng)菜單的“顯示”菜單,分別選取“表單控件工具欄”和“布局工具欄”菜單項就可以打開相應(yīng)的設(shè)計工具欄了,然后按照圖2.1所示的內(nèi)容向表單中添加控件。
添加控件的基本方法是用鼠標(biāo)單擊“表單控件工具欄”中對應(yīng)的按鈕,然后鼠標(biāo)指針指向表單中合適的位置按下左鍵拖動到合適的位置,再松開左鍵,就在表單中添加了相應(yīng)的控件。具體細(xì)節(jié)請參閱有關(guān)VFP6的書籍,在此不再細(xì)述。
㈡設(shè)置表單屬性
設(shè)置表單屬性的常用方法是在表單空白位置單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“屬性”菜單項,就可打開“屬性”窗口,然后在“屬性”窗口中設(shè)置表單的各屬性。表單databak.scx的幾個重要屬性設(shè)置如下:
35
AutoCenter=.t.
BorderStyle=“2-固定對話框”
Caption=“數(shù)據(jù)備份”
Height=243
Icon=“c:\mis\graphics\ico\green.ico”
MaxButton=.f.
MinButton=.f.
Width=281
WindowState=0-普通
另外,設(shè)計者還可根據(jù)自己的喜好,通過Picture屬性設(shè)置用作表單背景的圖片。
其余的屬性值采用系統(tǒng)默認(rèn)的值即可。
㈢編寫表單代碼
在表單空白區(qū)域單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“代碼”菜單項,就可打開代碼編輯窗口,如圖2.4所示。
圖2.4表單的過程代碼編輯窗口
在代碼編輯窗口中,在“過程”下拉列表框中選擇“Init”,再在編輯區(qū)輸入如下代碼:thisform.text1.setfocus(如圖2.4所示),就是讓該表單運行時,讓文本框獲得焦點。再在“過程”下拉列表框中選擇“Load”,相應(yīng)地在編輯區(qū)中輸入表單“Load”事件的程序代碼,如圖2.5所示。36
圖2.5表單的“Load”過程代碼編輯窗口
表單的“Load”事件的程序代碼如下:
DeclareintegerGetLogicalDrivesinkernel32.dllASIs_Driver_Readysettalkoff
nReslut=Is_Driver_Ready()
nMask=1
dimeused_id(26)
n=1
FORi=1TO26
IFBITAND(nReslut,nMask)!=0
Used_ID(n)=CHR(64+i)+":"
n=n+1
ENDIF
nMask=BITLSHIFT(nMask,1)
next
thisform.addobject("av_dr","optiongroup")
thisform.av_dr.enabled=.t.
thisform.av_dr.visible=.t.
thisform.av_dr.autosize=.t.
thisform.av_dr.backstyle=0
37
thisform.av_dr.buttoncount=n-1
thisform.av_dr.top=98
thisform.av_dr.left=60
thisform.av_dr.width=30
thisform.av_dr.value=2
fork=1ton-1
lsop="option"+alltrim(str(k))
thisform.av_dr.&lsop..caption="&used_id(k)"
next
該程序代碼的功能是在表單運行時,就測試用戶計算機可用的驅(qū)動器標(biāo)志,再在表單中創(chuàng)建按鈕選項組,并把可用的驅(qū)動器標(biāo)志作為按鈕選項組各選項按鈕的標(biāo)題。
㈣設(shè)置各控件的屬性
要設(shè)置各控件的屬性,也是先在表單中選中相應(yīng)的控件,再在其“屬性”窗口中設(shè)置其各屬性的值。
1.標(biāo)簽的屬性設(shè)置:
該表單中兩個標(biāo)簽的Caption(標(biāo)題)屬性分別設(shè)置為“要備份的數(shù)據(jù)所在的位置:”和“將數(shù)據(jù)備份到:”;Top屬性值分別為15和78;其他各主要屬性相同,分別是:
AutoSize=.t.
BackStyle=.t.
FontBold=.t.
FontSize=12
FontName=“宋體”
ForeColor=“0,0,255”
Left=18
其余屬性用系統(tǒng)默認(rèn)值。
2.文本框的屬性
Height=25
Left=15
Top=39
Width=219
其余屬性用系統(tǒng)默認(rèn)值。
3.命令按鈕的屬性設(shè)置
3個命令按鈕的Caption(標(biāo)題)屬性分別設(shè)置為“?”、“確定”和“退出”;Top屬性分別為39、129和177(這些屬性值都是可以自由設(shè)置的,只要使其顯示位置合適就行);Left屬性分別為237、180和180;其他各主要屬性相同,分別是:
AutoSize=.f.
FontSize=11
FontName=“宋體”
ForeColor=“0,0,0”
Height=25
其余屬性用系統(tǒng)默認(rèn)值。
㈤編寫命令按鈕的代碼(操作方法參見表單的代碼編寫)
⑴標(biāo)題為“?”的命令按鈕的“Click”事件代碼為:
38
bak_dr=getdir()
iflen(alltrim(bak_dr))=0
return
thisform.text1.setfocus
endif
thisform.text1.value=substr(bak_dr,1,len(bak_dr)-1)
thisform.text1.refresh
thisform.text1.setfocus
⑵“確定”命令按鈕的“Click”事件代碼為:
bf_path=alltrim(thisform.text1.value)
if.not.directory(bf_path)&&檢測輸入的文件目錄是否存在
ans=messagebox("您輸入的文件目錄不存在,請再仔細(xì)檢查一下!",0,"數(shù)據(jù)備份")return
thisform.text1.setfocus
endif
xz=alltrim(str(thisform.av_dr.value))&&xz保存選項組中選擇的值
dr_id=lower(thisform.av_dr.option&xz..caption)&&dr_id保存對應(yīng)的驅(qū)動器符號ifxz="1".and.(dr_id="a:".or.dr_id="b:")&&測試選擇的是不是軟驅(qū)
ans=messagebox("請插入軟盤并打開寫保護(hù)!",1,"數(shù)據(jù)備份")
ifans<>1
return
endif
disk_check=diskspace("&dr_id")&&返回軟盤的剩余空間值并賦給disk_checkifdisk_check<0
ans=messagebox("軟驅(qū)中沒有磁盤!不能備份!",0,"數(shù)據(jù)備份")return
thisform.refresh
endif
num_bf=adir(afile,bf_path+"\*.*")
nsize=0
forncount=1tonum_bf
lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=nsize+fseek(crtfile,0,2)
=fclose(crtfile)
endif
endfor
ifdisk_check<nsize
ans=messagebox("磁盤空間太?。〔荒軅浞?!",0,"數(shù)據(jù)備份")
39
return
endif
wait"正在備份數(shù)據(jù),請稍候??"windowat200,200nowait
setdatetojapan
setcenton
outname=dr_id+"\b_"+alltrim(dtoc(date()))+".aaa"
outname=strtran(outname,"/","_")
outfile=fcreate(outname)
forncount=1tonum_bf
lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=fseek(crtfile,0,2)
kw=fputs(outfile,afile(ncount,1))
kb=fputs(outfile,str(nsize))
kk=fseek(crtfile,0,0)
cstring=fread(crtfile,nsize)
=fclose(crtfile)
kc=fwrite(outfile,cstring)
endif
endfor
=fclose(outfile)
=messagebox("你選定目錄下的文件已備份在"+outname+"文件中!",0,"數(shù)據(jù)備份")else&&如果用戶選擇的不是軟驅(qū)
activatescreen
clear
disk_check=diskspace("&dr_id")&&返回所選磁盤的剩余空間值并賦給disk_checknum_bf=adir(afile,bf_path+"\*.*")&&將文件信息存入數(shù)組,并將文件數(shù)目保存nsize=0&&設(shè)定文件字節(jié)大小的計數(shù)器初始值
forncount=1tonum_bf&&此循環(huán)計算所選目錄中除bak文件外所有文件的字節(jié)之和lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=nsize+fseek(crtfile,0,2)
=fclose(crtfile)
endif
endfor
40
ifdisk_check<nsize
ans=messagebox("磁盤空間太??!不能備份!",0,"數(shù)據(jù)備份")
return
endif
wait"正在備份數(shù)據(jù),請稍候??"windowat200,200nowait
bf_dir=dr_id+"\"+"databackup"
if.not.directory("&bf_dir")
md("&bf_dir")
endif
setdatetojapan
setcenton
outname=bf_dir+"\b_"+alltrim(dtoc(date()))+".aaa"
outname=strtran(outname,"/","_")
outfile=fcreate(outname)
forncount=1tonum_bf
lsfile=alltrim(afile(ncount,1))
dress=at(".",lsfile)
lsfile=substr(lsfile,dress+1,3)
iflower(lsfile)<>"bak"
bfile=bf_path+"\"+afile(ncount,1)
crtfile=fopen("&bfile")
nsize=fseek(crtfile,0,2)
kw=fputs(outfile,afile(ncount,1))
kb=fputs(outfile,str(nsize))
kk=fseek(crtfile,0,0)
cstring=fread(crtfile,nsize)
=fclose(crtfile)
kc=fwrite(outfile,cstring)
endif
endfor
=fclose(outfile)
=messagebox("你選定目錄下的文件已備份在"+outname+"文件中!",0,"數(shù)據(jù)備份")endif
waitclear
return
⑶“退出”命令按鈕的“Click”事件代碼為:
thisform.release
該表單沒有使用表,故不用設(shè)置表單的“數(shù)據(jù)環(huán)境”。
這樣表單databak.scx就設(shè)計好了,如圖2.6所示。
41
圖2.6databak.scx表單的設(shè)計結(jié)果
⑷保存表單。如果設(shè)計工作全部都完成,關(guān)閉“表單設(shè)計器窗口”或執(zhí)行“保存”菜單選項或單擊系統(tǒng)常用工具欄中的保存按鈕,在出現(xiàn)的對話框中將表單命名為databak.scx,存放位置是C:\mis\forms。
另外在設(shè)計過程中可隨時試運行表單看看,如果存在問題,再返回到“表單設(shè)計器”窗口進(jìn)行修改。試運行表單的常用方法:鼠標(biāo)右擊表單中空白區(qū)域,在彈出的快捷菜單中選擇執(zhí)行“執(zhí)行表單”菜單項,或者選擇VFP6系統(tǒng)菜單中“表單”菜單下的“執(zhí)行表單”選項。在試運行表單時,系統(tǒng)首先會出現(xiàn)對話框詢問是否保存設(shè)計的表單,選擇“是”,再在出現(xiàn)的“另存為”對話框中指定表單文件的名稱為“databak.scx”,存放位置是“C:\mis\forms”,這樣也可以保存表單。
這樣表單databak.scx就設(shè)計完成了。
二、數(shù)據(jù)恢復(fù)表單datarstore.scx的設(shè)計
表單datarstore.scx的運行結(jié)果如圖2.7所示。
圖2.7表單datarstore.scx的運行結(jié)果
從表單datarstore.scx的運行結(jié)果分析,該表單包含5個標(biāo)簽、4個命令按鈕、2個文本框、1個列表框和幾個線條。一個文本框用于讓用戶輸入備份文件所在的文件目錄,另一個文本框用于讓用
42
戶輸入從備份文件恢復(fù)的文件要存放的目錄,列表框用于顯示在用戶指定的存放備份文件的目錄中可用的備份文件,以供用戶選擇。兩個文本框右邊的命令按鈕,主要用于彈出對話框讓用戶選擇文件目錄。
表單datarstore.scx的設(shè)計結(jié)果如圖2.8所示。
圖2.8表單datarstore.scx的設(shè)計結(jié)果
表單的創(chuàng)建及表單中控件的添加過程和方法,與databak.scx表單的創(chuàng)建基本相同,在此不再詳述。關(guān)于各標(biāo)簽的屬性,參閱databak表單的設(shè)計,可根據(jù)個人喜好靈活設(shè)置,不一定要與上述運行結(jié)果完全一樣,這里就不作介紹。下面主要介紹表單的屬性、代碼以及關(guān)鍵控件的屬性和代碼。
㈠表單的屬性:
AutoCenter=.T.
BorderStyle=“2-固定對話框”
Caption=“數(shù)據(jù)恢復(fù)”
Height=250
Icon=“c:\mis\graphics\ico\ff10.ico”
MaxButton=.F.
MinButton=.F.
Width=442
WindowState=0-普通
其余的屬性值采用系統(tǒng)默認(rèn)的值即可。
㈡表單的“Init”事件的代碼
mand1.setfocus
㈢Text1文本框的屬性和代碼
1.Text1文本框的屬性
FontName=“宋體”
FontSize=11
Height=25
Left=153
Top=51
Width=237
43
2.Text1文本框的代碼
⑴“Init”事件代碼:
this.value="c:\"
⑵“LostFocus”事件代碼:
thisform.list1.clear
bak_dr=alltrim(thisform.text1.value)
ifdirectory(bak_dr)
nmb=adir(farray,bak_dr+"\*.aaa")
ifnmb=0
thisform.list1.additem("該目錄下沒有要恢復(fù)的備份文件!")
thisform.text2.enabled=.f.
mand2.enabled=.f.
mand3.enabled=.f.
thisform.refresh
thisform.text1.gotfocus
return
else
thisform.text2.enabled=.t.
mand2.enabled=.t.
mand3.enabled=.t.
thisform.list1.enabled=.t.
thisform.refresh
thisform.list1.gotfocus
forncount=1tonmb
lsfile=farray(ncount,1)
lsfile=substr(lsfile,1,len(lsfile)-4)
thisform.list1.additem(lsfile)
endfor
thisform.list1.selected(1)=.t.
endif
endif
thisform.list1.refresh
thisform.text2.gotfocus
⑶“Valid”過程代碼:
bak_dr=alltrim(thisform.text1.value)
iflen(bak_dr)=0
return
thisform.text1.gotfocus
endif
if.not.directory(bak_dr)
=messagebox("您確定的文件目錄不存在,請您再仔細(xì)檢查一下!",0,"出錯信息提示")thisform.text2.enabled=.f.
mand2.enabled=.f.
44
mand3.enabled=.f.thisform.list1.enabled=.f.
thisform.refresh
return
thisform.text1.gotfocusendif
㈣Text2文本框的屬性和代碼
1.Text2文本框的屬性
FontName=“宋體”
FontSize=11
Height=25
Left=153
Top=171
Width=240
2.Text2文本框的代碼
“Init”事
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年配氣機構(gòu):進(jìn)排氣門項目建議書
- 醫(yī)院職工食堂建設(shè)合同范本
- 勞動合同法附合同范本
- 藥店銷售協(xié)議合同范本
- 個人 融資傭金合同范本
- 博物館合同范例
- 勞務(wù)合同范本小時工
- 土地土地租賃合同范本
- 租憑吊車合同范本
- 冷凝機組采購合同范本
- 2025年海域使用權(quán)租賃合同
- 四年級希望杯歷年數(shù)學(xué)競賽試題與答案1-13屆+奧數(shù)分類專項練習(xí)集等
- 《走近世界民間美術(shù)》 課件 2024-2025學(xué)年人美版(2024)初中美術(shù)七年級下冊
- (2025春)人教版三年級數(shù)學(xué)下冊全冊教案
- 河南2025年02月鄭州市公安機關(guān)公開招考1200名警務(wù)輔助人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年江蘇省高職單招《職測》高頻必練考試題庫400題(含答案)
- 2025云南紅河州個舊市大紅屯糧食購銷限公司招聘及人員高頻重點模擬試卷提升(共500題附帶答案詳解)
- X證書失智老年人照護(hù)講解
- 2024-2025學(xué)年人教版數(shù)學(xué)八年級下冊期中檢測卷(含答案)
- 2024年山東服裝職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 河北單招考試三類職業(yè)適應(yīng)性測試考試題與答案
評論
0/150
提交評論