VFP課程設(shè)計(jì)指導(dǎo)手冊(cè)_第1頁
VFP課程設(shè)計(jì)指導(dǎo)手冊(cè)_第2頁
VFP課程設(shè)計(jì)指導(dǎo)手冊(cè)_第3頁
VFP課程設(shè)計(jì)指導(dǎo)手冊(cè)_第4頁
VFP課程設(shè)計(jì)指導(dǎo)手冊(cè)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、前言對(duì)非計(jì)算機(jī)專業(yè)的學(xué)生而言, VFP 的系統(tǒng)開發(fā)是比較難理解和掌握的。因?yàn)槠渲猩婕暗搅嗣嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)方法, 軟件工程的系統(tǒng)開發(fā)方法, 這是計(jì)算機(jī)專業(yè)的學(xué)生也要花很多功夫, 學(xué)習(xí)很多專業(yè)基礎(chǔ)課程才能理解、 掌握的內(nèi)容。 為了幫助非計(jì)算機(jī)專業(yè)的學(xué)生快速地理解系統(tǒng)開發(fā)的方法, 理解掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)方法, 本手冊(cè)詳細(xì)剖析了兩個(gè)應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的過程和步驟, 力求學(xué)生快速獲取系統(tǒng)開發(fā)的感性認(rèn)識(shí)。 在此基礎(chǔ)上, 使學(xué)生能獨(dú)立自主地進(jìn)行信息管理系統(tǒng)的需求分析, 數(shù)據(jù)庫設(shè)計(jì),系統(tǒng)設(shè)計(jì), 系統(tǒng)實(shí)現(xiàn), 應(yīng)用程序發(fā)布。這是編寫這本冊(cè)子的目的。編者2007年 5月第一章 VFP 數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)的一般

2、步驟數(shù)據(jù)庫應(yīng)用系統(tǒng)按以數(shù)據(jù)為中心和以處理為中心可以分為兩類:前者以提供數(shù)據(jù)為目的,重點(diǎn)在數(shù)據(jù)采集、建庫及數(shù)據(jù)庫維護(hù)等工作;后者雖然發(fā)包含這些內(nèi)容,但重點(diǎn)是使用數(shù)據(jù),即進(jìn)行查詢、統(tǒng)計(jì)、生成打印報(bào)表等工作,其數(shù)據(jù)量比前者小得多。以處理為中心的數(shù)據(jù)庫應(yīng)用系統(tǒng)適用于一般企事業(yè)單位。圖 1.1 所示。需求分析數(shù)據(jù)分析功能分析數(shù)據(jù)庫設(shè)計(jì)應(yīng)用程序設(shè)計(jì)系統(tǒng)試運(yùn)行(調(diào)試,連編)滿意否? NY系統(tǒng)運(yùn)行與維護(hù)圖 1.1以處理為中心的數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)過程本章主要介紹這類系統(tǒng)的開發(fā)方法。其開發(fā)過程如一、需求分析由圖 1.1 可知,整個(gè)開發(fā)活動(dòng)從對(duì)活動(dòng)的需求分析開始。 需求分析包括對(duì)數(shù)據(jù)的需求分析和對(duì)應(yīng)用功能的需求分析

3、兩方面內(nèi)容。 前者稱為數(shù)據(jù)分析,后者稱為功能分析。數(shù)據(jù)分析的結(jié)果是歸納出系統(tǒng)應(yīng)該包括的數(shù)據(jù), 以便進(jìn)行數(shù)據(jù)庫設(shè)計(jì); 功能分析的目的是為應(yīng)用程序設(shè)計(jì)提供依據(jù)。進(jìn)行需求分析時(shí)應(yīng)該注意以下問題:1) 確定需求必須建立在調(diào)查研究的基礎(chǔ)上,包括訪問用戶,了解人工系統(tǒng)模型,采集和分析有關(guān)資料等工作。在開發(fā)之初所做的設(shè)計(jì)方案往往會(huì)對(duì)最終結(jié)果產(chǎn)生很大的影響。 認(rèn)真細(xì)致地規(guī)劃將能節(jié)省時(shí)間、精力和資金。( 2)需求分析階段應(yīng)該讓最終用戶更多的參與, 即使作了仔細(xì)分析,在系統(tǒng)實(shí)施過程中也會(huì)需要不斷修改設(shè)計(jì),為此必須隨時(shí)接受最終用戶的反饋。二、數(shù)據(jù)庫設(shè)計(jì)在設(shè)計(jì)應(yīng)用程序之前,應(yīng)先組織數(shù)據(jù)。 VFP 通過設(shè)置數(shù)據(jù)庫來統(tǒng)一

4、管理數(shù)據(jù),既能增強(qiáng)數(shù)據(jù)的可靠性,也便于進(jìn)行系統(tǒng)開發(fā)。創(chuàng)建數(shù)據(jù)庫的優(yōu)點(diǎn)1)創(chuàng)建數(shù)據(jù)庫是實(shí)現(xiàn)數(shù)據(jù)集成的有效手段。數(shù)據(jù)庫按一定的結(jié)構(gòu)集中了應(yīng)用系統(tǒng)中的數(shù)據(jù),使之便于統(tǒng)一管理。2)可以定義數(shù)據(jù)詞典,其內(nèi)容包括表的屬性、字段屬性、記錄規(guī)則、表間關(guān)系以及參照完整性。3)允許在數(shù)據(jù)庫中建立永久關(guān)系,使其具有以下功能:a)永久關(guān)系在查詢和視圖中能自動(dòng)成為聯(lián)接條件。b)能用作表單和報(bào)表的默認(rèn)關(guān)系。若在數(shù)據(jù)環(huán)境設(shè)計(jì)器中添加有關(guān)的若干表,相應(yīng)的關(guān)系(連線)會(huì)自動(dòng)地顯示出來。c)允許建立參照完整性,確保在更新、插入或刪除記錄時(shí)永久關(guān)系數(shù)據(jù)的完整性。數(shù)據(jù)庫的邏輯設(shè)計(jì)和物理設(shè)計(jì)這兩項(xiàng)是需要開發(fā)人員完成的工作。其中數(shù)據(jù)庫邏

5、輯設(shè)計(jì)的任務(wù)大致如下:1)按一定的原則將數(shù)據(jù)組織成一個(gè)或多個(gè)數(shù)據(jù)庫,指明數(shù)據(jù)庫中包含了幾個(gè)表,并指出每個(gè)表包含的字段。2)安排表之間的關(guān)聯(lián)數(shù)據(jù)庫的物理設(shè)計(jì)就是用指定的軟件來創(chuàng)建數(shù)據(jù)庫,定義數(shù)據(jù)庫,以及表之間的關(guān)聯(lián)。在 VFP 中,可以用以下工具來實(shí)現(xiàn)物理設(shè)計(jì):1)利用數(shù)據(jù)庫設(shè)計(jì)器可以創(chuàng)建數(shù)據(jù)庫并添加數(shù)據(jù)庫表,還可以建立永久關(guān)系;2)利用表設(shè)計(jì)器可以創(chuàng)建數(shù)據(jù)庫表或自由表;3)利用表單、表單集或報(bào)表的數(shù)據(jù)環(huán)境設(shè)計(jì)器可添加表,并可建立表之間的關(guān)聯(lián);4)利用數(shù)據(jù)工作期窗口能保存表單、表單集或報(bào)表所使用的工作環(huán)境,它所包含的數(shù)據(jù)環(huán)境與數(shù)據(jù)環(huán)境設(shè)計(jì)器一樣有效。 .VUE 文件還可以為各種表單、表單集和報(bào)表

6、一次性設(shè)置數(shù)據(jù)環(huán)境。代碼設(shè)計(jì)代碼設(shè)計(jì)的概念不同于編碼(編程序)。為維持?jǐn)?shù)據(jù)的一致性和提供操作的方便性,應(yīng)用系統(tǒng)中常需為某類數(shù)據(jù)設(shè)置一套代碼。例如在 SB 表(設(shè)備表)中為工廠的部門設(shè)置了代碼。三、應(yīng)用程序設(shè)計(jì)以處理為中心的應(yīng)用系統(tǒng)中,應(yīng)用程序設(shè)計(jì)和數(shù)據(jù)庫設(shè)計(jì)兩方面的需求是相互制約的。也就是說, 應(yīng)用程序設(shè)計(jì)時(shí)將受到數(shù)據(jù)庫當(dāng)前結(jié)構(gòu)的約束; 而在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候, 也必須考慮為實(shí)現(xiàn)應(yīng)用程序數(shù)據(jù)處理功能的需要。面向?qū)ο蟮某绦蛟O(shè)計(jì):面向?qū)ο蟪绦蛟O(shè)計(jì)以對(duì)象設(shè)計(jì)為重點(diǎn),它與結(jié)構(gòu)化程序設(shè)計(jì)的不同之處見表1.1。表 1.1結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)主要步驟的比較結(jié)構(gòu)化程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)設(shè)計(jì)算法設(shè)計(jì)

7、與簡單用戶界面設(shè)計(jì)圖形用戶界面及對(duì)象設(shè)計(jì)編碼程序編碼對(duì)象屬性定義與事件過程編碼測試與調(diào)試下面簡要說明VFP 應(yīng)用程序的設(shè)計(jì)步驟:創(chuàng)建子類使用 VFP 的基類就可以創(chuàng)建出可靠的面向?qū)ο蟮某绦?,但是若要?jiǎng)?chuàng)建具有用戶統(tǒng)一特色的界面(例如:凡是創(chuàng)建的表單,其標(biāo)題欄中都能顯示“廠” ),還需要由用戶來定義表單或控件的子類,并將這些子類添加到表單控件工具欄中備用。用戶界面設(shè)計(jì)與編碼VFP 的用戶界面主要包括表單集、表單、菜單和工具欄,它們所包含的控件與菜單命令應(yīng)能實(shí)現(xiàn)應(yīng)用程序的功能。也就是說用戶界面應(yīng)直接表現(xiàn)應(yīng)用系統(tǒng)的功能。事實(shí)上, 無論應(yīng)用程序的代碼如何簡潔,算法如何巧妙, 對(duì)用戶而言都是看不見的,他們

8、所能見到并進(jìn)行操作的僅僅是應(yīng)用系統(tǒng)提供的用戶界面。因此,用戶對(duì)所開發(fā)的應(yīng)用系統(tǒng)是否滿意,很大程度上取決于界面是否完善。面向?qū)ο蟮某绦蛟O(shè)計(jì)也是一種以用戶界面為核心來展開應(yīng)用程序設(shè)計(jì)的方法。VFP 豐富的設(shè)計(jì)工具, 能支持用戶創(chuàng)建各種界面美觀、功能完善的應(yīng)用程序,其界面設(shè)計(jì)與編碼可以包括以下內(nèi)容:1)用戶定義類2)創(chuàng)建對(duì)象,包括表單、表單集、菜單、工具欄及各種控件3)定義對(duì)象屬性4)編寫對(duì)象的事件過程代碼5)為方法程序添加代碼6)用戶定義屬性7)用戶定義方法程序數(shù)據(jù)輸出設(shè)計(jì)數(shù)據(jù)輸出可包括查詢、報(bào)表、標(biāo)簽和通過Active X 控件來共享其它應(yīng)用程序的信息。查詢?cè)O(shè)計(jì)包括瀏覽查詢、 組合查詢等形式。

9、組合查詢?cè)试S輸入含有多個(gè)條件的邏輯表達(dá)式,使用戶擁有更強(qiáng)的控制數(shù)據(jù)的能力。報(bào)表可設(shè)計(jì)為允許用戶選擇預(yù)覽或打印,還可選擇全部打印、部分打印或概要打印。數(shù)據(jù)庫維護(hù)功能數(shù)據(jù)庫應(yīng)用系統(tǒng)的功能中應(yīng)該包括數(shù)據(jù)庫維護(hù), 即能對(duì)數(shù)據(jù)庫表及自由表的數(shù)據(jù)進(jìn)行添加、刪除、修改等。此外,數(shù)據(jù)庫的安全性也需予以考慮。如登錄密碼設(shè)置,數(shù)據(jù)備份等。5 編寫 VFP 應(yīng)用程序VFP 將 .app 擴(kuò)展名的文件稱為應(yīng)用程序(Application )。通常所說的應(yīng)用程序是一種統(tǒng)稱,例如 .exe 擴(kuò)展名的文件也是一種應(yīng)用程序,叫可執(zhí)行程序(executable program)。VFP 應(yīng)用程序的運(yùn)行環(huán)境有兩種。一種是VFP

10、開發(fā)環(huán)境,需要啟動(dòng)VFP 后,用 DO令運(yùn)行。各種程序都可以在VFP 開發(fā)環(huán)境中運(yùn)行。例如:命DO exDO ex.mprDO FORM ex& 運(yùn)行擴(kuò)展名為 & 運(yùn)行菜單程序 & 運(yùn)行擴(kuò)展名為.prg 的命令文件.scx 的表單DO ex.appDO ex.exe& 運(yùn)行應(yīng)用程序& 運(yùn)行可執(zhí)行程序離另一種環(huán)境是VFP 獨(dú)立運(yùn)行。Windows中除VFP之外的環(huán)境,在上述各種程序中,只有.exe 程序能脫下面介紹 VFP 應(yīng)用程序的總體組成。( 1)應(yīng)用程序的主文件主文件就是主控程序,可以是.prg文件,.mpr菜單程序或.scx表單文件。其作用有4個(gè):對(duì)應(yīng)用程序的環(huán)境進(jìn)行初始化。作為應(yīng)用程序

11、執(zhí)行的起始點(diǎn), 由此啟動(dòng)程序的逐級(jí)調(diào)用; 在項(xiàng)目管理器中, 主文件也可以作為應(yīng)用程序“連編”的起始點(diǎn)??刂剖录h(huán)恢復(fù)原來的環(huán)境2)初始化環(huán)境應(yīng)用程序環(huán)境初始化可以包括以下方面的內(nèi)容。設(shè)置狀態(tài)狀態(tài)包括 SET 命令狀態(tài)、窗口狀態(tài)等。設(shè)置 SET 命令狀態(tài)通常只要直接將它置 ON或 OFF。比較規(guī)范的做法是,先保存某命令的狀態(tài),然后進(jìn)行狀態(tài)設(shè)置,在應(yīng)用程序退出時(shí),再恢復(fù)先前保存的狀態(tài)。例如,要將 SET TALK命令置為 OFF,啟動(dòng)程序中可以包含如下代碼: IF SET (” TALK”) =” ON”SETcTALK=” ON”SET TALK OFF& 保存 &SET TALKSET TA

12、LK的狀態(tài)置 OFF,使VFP不自動(dòng)顯示命令結(jié)果ELSECtalk=” OFF”&保存SET TALK的狀態(tài)ENDIF用來保存SET狀態(tài)的變量可以設(shè)為公共變量,使之在要恢復(fù)SET狀態(tài)時(shí)仍可用。 若要恢復(fù)保存的SET狀態(tài),可以在命令中使用宏替換,例如:SET TALK &cTalk 。初始化變量。例如定義公共變量。建立應(yīng)用程序的一條默認(rèn)路徑。建立應(yīng)用程序的默認(rèn)路徑后,一般所有的程序都放在這個(gè)路徑下,當(dāng)需要運(yùn)行程序時(shí)都自動(dòng)地到這個(gè)路徑下去搜索,可以避免找不到程序文件的情況。打開需要的數(shù)據(jù)庫、表及索引。( 3)顯示初始的用戶界面初始用戶界面可以是菜單或表單。 在初始用戶界面之前還可以顯示應(yīng)用系統(tǒng)封面

13、或登錄/ 注冊(cè)對(duì)話框。若 .PRG 文件為主文件,可在其中使用 DO 命令運(yùn)行一個(gè)菜單程序,或者使用 DO FORM 命令運(yùn)行一個(gè)表單來顯示初始用戶界面。4)控制事件循環(huán)命令格式:READ EVENTS功能:開始事件循環(huán),等待用戶操作。說明:.exe 應(yīng)用程序才需要建立事件循環(huán),在 VFP 開發(fā)環(huán)境中運(yùn)行的應(yīng)用程序則不必使用該命令。READ EVENTS命令通常用在主文件中,例如:DO EX.MPR&調(diào)用主菜單READEVENTS&顯示 ex.mpr 菜單, VFP開始處理單擊鼠標(biāo),按鍵盤鍵等用戶事件或者:DO FORM exREAD EVENTS&調(diào)用主菜單顯示 ex.scx表單,VFP開始

14、處理用戶事件若不設(shè)置此命令, 菜單程序在開發(fā)環(huán)境中能正確運(yùn)行,但在 Windows 環(huán)境中獨(dú)立運(yùn)行時(shí),程序剛啟動(dòng)就會(huì)終止; 運(yùn)行 Window Type 屬性為 0( 無模式 ) 的表單時(shí)也會(huì)出現(xiàn)類似情況,除非將該屬性設(shè)置為 1(模式)。必須在應(yīng)用程序中用CLEAR EVENTS命令來結(jié)束事件循環(huán),使VFP 能執(zhí)行READWVENTS的后繼命令。CLEAR EVENTS命令可用作某菜單項(xiàng)的單條命令代碼,或設(shè)置在表單的“退出”按鈕中。( 5)恢復(fù)先前的環(huán)境退出應(yīng)用程序時(shí),應(yīng)該恢復(fù)初始環(huán)境以前的環(huán)境。綜上所述,一個(gè)簡單的主文件可以寫成如下所示:DO setup&setup.prg用于設(shè)置環(huán)境DO

15、mainmenu.mpr&將菜單作為初始顯示的用戶界面READ EVENTS&顯示 mainmenu.mpr 菜單, VFP 開始處理單擊鼠標(biāo)等用戶事件DO cleanup&退出之前,用cleanup.prg恢復(fù)先前的環(huán)境四、軟件測試應(yīng)用程序設(shè)計(jì)的過程中,常需對(duì)菜單、表單、報(bào)表等程序模塊進(jìn)行測試和調(diào)試。通過測試來找出錯(cuò)誤, 再通過調(diào)試來糾正錯(cuò)誤,以使程序最終達(dá)到預(yù)定的功能。測試一般可分成模塊測試和綜合測試二個(gè)階段。VFP 提供的調(diào)試工具能方便應(yīng)用程序的調(diào)試。數(shù)據(jù)庫設(shè)計(jì)和應(yīng)用程序設(shè)計(jì)這兩項(xiàng)工作完成后,系統(tǒng)應(yīng)投入試運(yùn)行,即把數(shù)據(jù)庫連同有關(guān)的應(yīng)用程序一起裝入計(jì)算機(jī), 從而考察它們?cè)诟鞣N應(yīng)用中能否達(dá)到

16、預(yù)定的功能和性能需求。若不能滿足要求,還需返回前面的步驟再次進(jìn)行需求分析或修改設(shè)計(jì)。試運(yùn)行階段一般只裝入少量數(shù)據(jù),等確認(rèn)沒有辭不達(dá)意問題后再正式裝入大批數(shù)據(jù),以免導(dǎo)致較大的返工。五、應(yīng)用程序發(fā)布應(yīng)用程序最好能加密,并且能在Windows 環(huán)境中獨(dú)立運(yùn)行,這就需要將應(yīng)用程序“連編”為 .exe 程序,并進(jìn)行應(yīng)用程序發(fā)布。六、系統(tǒng)運(yùn)行與維護(hù)試運(yùn)行的結(jié)束標(biāo)志著系統(tǒng)開發(fā)的基本完成。 但是只要系統(tǒng)還在使用, 就可能常駐機(jī)構(gòu)需要調(diào)整和修改也即還須做好系統(tǒng)的“維護(hù)”工作,這項(xiàng)工作包括糾錯(cuò)誤和系統(tǒng)改進(jìn)等。第二章一個(gè)實(shí)例:“汽車修理管理系統(tǒng)”的開發(fā)本章用系統(tǒng)開發(fā)的一般流程和方法簡明地描述開發(fā)一個(gè)“汽車修理管理系

17、統(tǒng)”的全過程。一、需求分析某汽車修理廠根據(jù)業(yè)務(wù)發(fā)展的需要,決定建立一個(gè)“汽車修理管理系統(tǒng)” ,以取代人工管理。開發(fā)目的如下:1)能對(duì)汽車修理有關(guān)的各類數(shù)據(jù)進(jìn)行輸入、修改與查詢2)編制季度零件訂貨計(jì)劃3)打印汽車修理發(fā)票和工資月報(bào)表用戶提出開發(fā)應(yīng)用系統(tǒng)的要求后, 軟件開發(fā)者應(yīng)通過調(diào)查研究歸納出目標(biāo)系統(tǒng)的數(shù)據(jù)需求和功能需求。數(shù)據(jù)需求在調(diào)研的過程中,用戶提供了該系統(tǒng)所需的輸入、輸出單據(jù),如表 2.12.7 。輸入單據(jù)包括修車登記單、 汽車修理單、 零件入庫單和零件出庫單等 4 種;輸出單據(jù)包括季度零件訂貨計(jì)劃、 汽車修理發(fā)票和工資月報(bào)表等 3 種。不少單據(jù)都填寫過數(shù)據(jù), 正好為數(shù)據(jù)庫設(shè)計(jì)提供了數(shù)據(jù)樣

18、例。表 2.1 修車登記單編號(hào): 5001日期: 07/01/12修理項(xiàng)目點(diǎn)火線圈汽車牌號(hào)車主名A2020203張四型號(hào)地址S130中南路15 號(hào)生產(chǎn)廠天津一汽電話8787877表 2.2 汽車修理單登記單編號(hào): 5005汽車牌號(hào): A2312318修理項(xiàng)目大修送修日期2007/02/23零件號(hào)100001100004100005數(shù)量253修理小時(shí)98.0表 2.3 零件入庫單日期:零件號(hào)零件名成本數(shù)量價(jià)格最低庫存訂貨量表 2.4 零件出庫單編號(hào):日期:零件號(hào)數(shù)量表 2.5 零件訂貨計(jì)劃第季度零件訂貨計(jì)劃零件號(hào)零件名庫存量最低庫存訂貨量表 2.6 汽車修理發(fā)票日期: 2007/02/13顧客姓

19、名施志秋地址東方一路1005 號(hào)汽車牌號(hào)A23212318修理項(xiàng)目大修送修日期2007-5-29備零件費(fèi)894.00注修理費(fèi)2352總金額3246 00表 2.7 工資月報(bào)表工號(hào)姓名修理小時(shí)小時(shí)工資月工資0001李平16.01001600000005林一揚(yáng)30.0501500.00功能需求功能分析的任務(wù),是弄清用戶對(duì)目標(biāo)系統(tǒng)數(shù)據(jù)處理功能所提出的需求。數(shù)據(jù)需求并與用戶充分討論后,本例的功能需求可歸納為以下5 個(gè)方面。1,數(shù)據(jù)登記根據(jù)系統(tǒng)目標(biāo)和登記功能用于把各種手填單據(jù)中的數(shù)據(jù)及時(shí)登記到系統(tǒng)將要定義的表中,修改。這些單據(jù)包括修車登記單、汽車修理單、零件入庫單和零件出庫單。還要求能進(jìn)行2,查詢能查詢

20、登記單、修理單、汽車、車主、修理工、零件庫存的有關(guān)數(shù)據(jù)。3,編制并顯示季度零件訂貨計(jì)劃編制零件訂貨計(jì)劃需要找出訂貨的零件,訂貨條件為:零件庫存量訂貨量可由用戶輸入或修改。4,打印發(fā)票最低庫存量。發(fā)票除包含顧客、汽車及修理項(xiàng)目等數(shù)據(jù)外,還要計(jì)算出修車費(fèi),修車費(fèi)包括修理費(fèi)和零件費(fèi),按下列各式計(jì)算:零件費(fèi) =(零件價(jià)格耗用數(shù)量)修理費(fèi) =小時(shí)工資修理工時(shí)3總計(jì) =零件費(fèi) +修理費(fèi)不難看出, 發(fā)票包含的信息來自修車登記單、汽車修理單和零件出庫單等各種單據(jù),這是一項(xiàng)涉及表比較多的功能。5,打印修理工工資月報(bào)表某修理工的月工資=修理小時(shí)小時(shí)工資二、數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì)的任務(wù)是確定系統(tǒng)所需的數(shù)據(jù)庫。數(shù)據(jù)庫是

21、表的集合。通常一個(gè)系統(tǒng)只需一個(gè)數(shù)據(jù)庫。 如前所述, 數(shù)據(jù)庫設(shè)計(jì)可以分為邏輯設(shè)計(jì)和物理設(shè)計(jì)兩個(gè)步驟。第一步確定數(shù)據(jù)庫所包含的表及其字段。第二步確定表的具體結(jié)構(gòu),即確定字段的名稱、類型及寬度;此外還要確定索引,為建立表的關(guān)聯(lián)準(zhǔn)備條件。邏輯設(shè)計(jì)設(shè)計(jì)從分析輸入數(shù)據(jù)著手, 輸入數(shù)據(jù)中的某類相關(guān)數(shù)據(jù)可以歸納為一個(gè)表。 對(duì)需要同時(shí)調(diào)用的若干表, 應(yīng)使它們符合關(guān)聯(lián)要求。 數(shù)據(jù)庫設(shè)計(jì)好后, 可以通過分析輸出數(shù)據(jù)來驗(yàn)證其可用性,若發(fā)現(xiàn)有的輸出數(shù)據(jù)不能從輸入數(shù)據(jù)導(dǎo)出,須繼續(xù)向用戶征集數(shù)據(jù)。本例根據(jù)季度零件訂貨計(jì)劃、汽車處理發(fā)票和工資月報(bào)表等輸出單據(jù)的數(shù)據(jù)需求,從修車登記單、汽車修理單、 零件入庫單和零件出庫單等輸入

22、單據(jù)中歸納出包含6 個(gè)表的數(shù)據(jù)庫。現(xiàn)將這些表列出如下:1)修理單: XLD (編號(hào),牌號(hào),工號(hào),修理項(xiàng)目,修理小時(shí),送修日期,完工日期)2)汽車: QC(牌號(hào),型號(hào),生產(chǎn)廠,車主名)3)車主: CZ(車主名,地址,電話)4)修理工: XLG (工號(hào),姓名,地址,電話,出生日期,進(jìn)廠日期,小時(shí)工資)5)零件用量: LJYL (編號(hào),零件號(hào),數(shù)量)6)零件庫存: LJKC (零件號(hào),零件名,成本,價(jià)格,庫存量,最低庫存,訂貨量)以上大寫字母表示的是表名,括號(hào)內(nèi)為字段名表,有下劃線的字段為關(guān)聯(lián)字段。根據(jù)系統(tǒng)數(shù)據(jù)處理的需要,這些表的關(guān)聯(lián)情況如圖 2.1 所示。圖中用矩形框表示表,需要關(guān)聯(lián)的兩個(gè)表用線相

23、連,連線的一端標(biāo)出了關(guān)聯(lián)關(guān)鍵字,表示必須在這一端的表中建立索引。汽車牌號(hào)工號(hào)修理單修理工編號(hào)零件用量車主名零件號(hào)修理單修理單圖 2.1表間關(guān)聯(lián)的設(shè)計(jì)下面對(duì)上述設(shè)計(jì)說明兩點(diǎn):1,為同時(shí)調(diào)用不同表中的數(shù)據(jù),需要將他們關(guān)聯(lián),因此有時(shí)要在表中補(bǔ)充字段。例如僅從修理的角度而言,QC.DBF 包含牌號(hào)、型號(hào)和生產(chǎn)廠3 個(gè)字段已經(jīng)很完整,但是打印發(fā)票是要用到車主名與地址,為了使QC.DBF 與 CZ.DBF 能以車主名關(guān)聯(lián),在QC.DBF 中需要增加車主名字段。2,數(shù)據(jù)庫設(shè)計(jì)必須注意合理性。若將不同類型的數(shù)據(jù)放進(jìn)同一個(gè)表中,可能會(huì)產(chǎn)生數(shù)據(jù)冗余。例如,若將 QC.DBF 與 CZ.DBF 的字段合并為一個(gè)表,

24、由于一個(gè)車住可擁有多輛汽車,在登記這些汽車的牌號(hào)、型號(hào)和生產(chǎn)廠的同時(shí)也要登記車主的車主名、地址和電話,那么這些記錄中的車主信息將重復(fù)記載。 數(shù)據(jù)冗余會(huì)多占存儲(chǔ)空間, 更糟糕的是還可能破壞數(shù)據(jù)的一致性。 如果車主易名, 只要有一處記錄數(shù)據(jù)忘記修改, 將來查詢或打印時(shí)可能會(huì)輸出不一樣的數(shù)據(jù)。表的分拆往往能減少數(shù)據(jù)冗余,但表個(gè)數(shù)的增多又會(huì)增加程序的復(fù)雜性。因?yàn)橐诓煌墓ぷ鲄^(qū)打開這些表,而且為了實(shí)現(xiàn)數(shù)據(jù)聯(lián)用,還要對(duì)這些表進(jìn)行關(guān)聯(lián)。三、物理設(shè)計(jì)下面列出汽車修理管理系統(tǒng)所有表的結(jié)構(gòu)與必須的索引。為便于理解, 順便也列出表的部分記錄。1,修理單( XLD.DBF )結(jié)構(gòu):編號(hào) c(4) ,牌號(hào) c(8)

25、,修理項(xiàng)目 c(12) ,送修日期 d,完工日期d,工號(hào) c(4)普通索引,修理小時(shí) n(4,1)記錄:記錄號(hào)編號(hào)牌號(hào)修理項(xiàng)目送修日期完工日期工號(hào)修理小時(shí)15001A2020203點(diǎn)火線圈01/12/199901/15/199900032.025002R1212123剎車02/05/199902/10/199900053.235003H210-100噴漆02/06/199902/13/199900016.045004K333-667換轉(zhuǎn)動(dòng)軸05/08/199905/15/1999000318.055005A2312318大修06/28/199907/27/1999000198.02,汽車( Q

26、C.DBF )結(jié)構(gòu):牌號(hào) c(8)普通索引,型號(hào)c(6),生產(chǎn)廠c(20) ,車主名 c(8)記錄:記錄號(hào)牌號(hào)型號(hào)生產(chǎn)廠車主名1A2020203S130南方汽車廠李四2R1212123760東風(fēng)汽車馬一3H210-100C12-5神龍富康孔力4K333-667FG323上海別克賈丁5A2312318NA122天津一汽石一明3,車主( CZ.DBF )結(jié)構(gòu):車主名 c(8) 普通索引,地址c(16),電話 c(12)記錄:記錄號(hào)車主名地址電話1李四航空路15 號(hào)133657483332馬一魯磨路5 號(hào)132394844443孔力南京路24 號(hào)130228765434賈丁中北路3 號(hào)1352263

27、74855石一明江漢路 34 號(hào)138736353524,修理工( XLG .DBF )結(jié)構(gòu):工號(hào) c(4)普通索引,姓名 c(8),地址 c(16) ,電話 c(7),出生日期 d,進(jìn)廠日期 d,小時(shí)工資 n(5,2)記錄:記錄號(hào) 工號(hào)姓名地址電話出生日期進(jìn)廠日期小時(shí)工資10002趙兵香港路333 號(hào) 1342627848806/05/198002/04/20057.5020003王二越秀路123 號(hào) 1354054985805/06/197709/08/200010.5030004李平中南路76 09/07/1975 03/03/2001 9.0040005張四廈

28、門路543 號(hào) 1324784849906/05/197008/05/20046.0050001林林廣八路87 號(hào)1348984589708/09/197602/04/20009.005,零件用量 (LJYL.DBF)結(jié)構(gòu):編號(hào) c(4)普通索引,零件號(hào)c(6) ,數(shù)量 n(2)記錄:記錄號(hào)編號(hào)零件號(hào)數(shù)量15002100003152500510000123500510000454500510000526,零件庫存量(LJKC.DBF)結(jié)構(gòu):零件號(hào) c(6)普通索引,零件名 c(10),成本 n(8,2) ,價(jià)格 n(8,2),庫存量 n(3),最低庫存 n(3),訂貨量 n(3)記錄:記錄號(hào)零

29、件號(hào)零件名成本價(jià)格庫存量最低庫存訂貨量1100001前燈35.0040.004220122100002方向盤77.0080.0015523100003離合器598.00650.003424100004活塞環(huán)143.00156.00602545100005反光鏡15.0017.001003014除上述 6 個(gè)表外,零件入庫、出庫時(shí)還需要有暫存表。零件入庫表為LJRK.DBF ,其結(jié)構(gòu)與 LJKC.DBF 相同。零件出庫表的結(jié)構(gòu)為:LJCK( 零件號(hào) c(6) ,數(shù)量 n(2)。四、應(yīng)用程序設(shè)計(jì)總體設(shè)計(jì)按功能分類是總體設(shè)計(jì)中常用的方法。系統(tǒng)的總體結(jié)構(gòu)圖可以用層次圖(簡稱HC 圖)來表示(圖2.2)

30、。這種圖由上而下進(jìn)行分層:第一層為系統(tǒng)層,通常對(duì)應(yīng)主程序;第二層為子系統(tǒng)層, 一般起分類控制作用,但是當(dāng)該層沒有下一層次時(shí),也可以直接用來表示功能(如圖 2.2 中的查詢功能) ;第三層為功能層;第四層為操作層。圖 2.2 所示的汽車修理管理系統(tǒng)有3 個(gè)層次,系統(tǒng)功能分類如下:修車登記單、汽車修理單和修理工數(shù)據(jù)管理等數(shù)據(jù)的輸入與修改歸入登記一類;零件訂貨計(jì)劃、 零件入庫和零件出哭庫歸入零件管理一類; 查詢與打印各成一類。 圖中未畫出操作層, 該層次的程序模塊將在模塊設(shè)計(jì)時(shí)列出。汽車修理管理系統(tǒng)登記零件管理查詢打印修車登記汽車修理修理工管理零件訂貨計(jì)劃零件入庫零件出庫發(fā)票工資月報(bào)表圖 2.2總體

31、結(jié)構(gòu)圖初始用戶界面設(shè)計(jì)從總體結(jié)構(gòu)很容易列出應(yīng)用程序的菜單, 由總體結(jié)構(gòu)圖轉(zhuǎn)換到菜單時(shí), 其對(duì)應(yīng)情況如下:系統(tǒng)層對(duì)應(yīng)菜單文件,子系統(tǒng)層對(duì)應(yīng)菜單標(biāo)題,功能層則對(duì)應(yīng)子菜單項(xiàng)。登記零件管理查詢打印退出(命令)修車登記xcdj.scx )汽車修理qcxl.scx )修理工管理零件訂貨計(jì)劃ljdh.scx )零件入庫管理零件出庫管理發(fā)票dyfp.scx )修理工工資月報(bào)表圖 2.3汽車修理管理系統(tǒng)的菜單圖 2.3 是汽車修理管理系統(tǒng)下拉式菜單的示意圖,說明如下:1)本例使用菜單作為初始界面,并設(shè)置一個(gè)主文件來調(diào)用菜單程序。2)若改用表單作為初始界面,可以在表單上設(shè)置若干按鈕來表示各子系統(tǒng)的功能。3)括號(hào)中

32、的 .scx 表示執(zhí)行該子菜單項(xiàng)要調(diào)用的表單文件名。本例中只對(duì)修車登記( xcdj.scx )、汽車修理( qcxl.scx )、零件訂貨計(jì)劃( ljdh.scx )和打印發(fā)票( dyfp.scx )等幾個(gè)表單的設(shè)計(jì)實(shí)現(xiàn)進(jìn)行了說明,未完成的其他子菜單項(xiàng)的表單設(shè)計(jì)與實(shí)現(xiàn)請(qǐng)自行完成。模塊設(shè)計(jì)與編碼本節(jié)對(duì)汽車修理管理系統(tǒng)的主要模塊的設(shè)計(jì)與編寫作簡要說明。1,主文件( QCXL.PRG )菜單文件名定為QCXLCD (汽車修理菜單) ,并設(shè)置一個(gè)主文件來調(diào)用它。主文件代碼:SET DEFAULT TOD:QCXL& 為該系統(tǒng)設(shè)置一個(gè)默認(rèn)路徑,本系統(tǒng)所有文件都應(yīng)該裝在該目錄中CLOSE ALLSET V

33、IEW TO sjhj.vue& 統(tǒng)一設(shè)置數(shù)據(jù)環(huán)境,自動(dòng)關(guān)閉所有的工作區(qū)后打開視圖文件PUBLIC xldh,zljf&xldh用于保存輸入的修理單號(hào),zljf用于保存總零件費(fèi)用, 打印發(fā)票時(shí)用xldh=SPACE(4)DO FORM fm& 顯示封面。封面表單參照課程示例自行設(shè)計(jì)KEYB CTRL+F4& 關(guān)閉 command 窗口CLEADO QCXLCD.MPR& 運(yùn)行主菜單READ EVENT& 建立事件循環(huán)QUIT& 退出 vfp程序中用到的 SJHJ(數(shù)據(jù)環(huán)境) .vue 文件,必須事先打開數(shù)據(jù)工作期來建立。該視圖文件為應(yīng)用程序設(shè)置了如圖 2.4 所示的數(shù)據(jù)環(huán)境。它滿足圖 2.2

34、中的表間關(guān)聯(lián)的要求,另外還打圖 2.4 汽車修理管理系統(tǒng)的數(shù)據(jù)環(huán)境開了 LJRK 表和 LJCK 表。另外說明,為簡單起見,本例中所用的表都是自由表。2,菜單程序 (QCXLCD.mpr)在菜單設(shè)計(jì)窗口中,按圖2.3 來建立菜單。( 1)“退出”菜單項(xiàng)的命令CLEAREVENTS& 停止事件循環(huán),轉(zhuǎn)去執(zhí)行CLEAREVENTS 后面的任務(wù)( 2)按圖 2.3 設(shè)置調(diào)用各表單的命令,例如對(duì)“修車登記” 菜單項(xiàng)可鍵入命令DO FORMxcdj3)從菜單文件 QXCLCD.mnx 生成菜單程序 QCXLCD.mpr 。3,“修車登記”表單(XCDJ.scx )修車登記表單用于輸入、修改或添加修車登記

35、單,參閱圖2.5。圖 2.5 “汽車登記”表單窗口其主要操作步驟如下:( 1)創(chuàng)建表單在命令窗口中鍵入MODIFY FORM xcdj,出現(xiàn)表單設(shè)計(jì)器窗口。2) Form1 的屬性設(shè)置將 Form1 的 Caption 屬性設(shè)置為“修車登記” ;AutoCenter 屬性設(shè)置為 .T.。3)參閱圖 2.5 在表單上創(chuàng)建各種標(biāo)簽和文本框在數(shù)據(jù)環(huán)境中添加XLD , QC 和 CZ 等 3 個(gè)表。然后將下列9 個(gè)字段分別拖到表單窗口中規(guī)定的位置,產(chǎn)生各相應(yīng)的標(biāo)簽和文本框:XLD表的編號(hào)、送修日期、修理項(xiàng)目和牌號(hào)字段; QC 表的型號(hào)、生產(chǎn)廠和車主字段;CZ 表的地址和電話字段。從數(shù)據(jù)環(huán)境來產(chǎn)生標(biāo)簽和

36、文本框,不僅速度快,而且標(biāo)簽的Caption 和 Name 屬性,文本框的 Name 屬性,都會(huì)自動(dòng)設(shè)置為與源字段有關(guān)的名字。文本框也會(huì)自動(dòng)與源表中的源字段綁定。例如:圖中顯示txt 牌號(hào) 的文本框系拖動(dòng)XLD表的牌號(hào)字段產(chǎn)生,其Name 屬性為 txt 牌號(hào),并且ControlSource 屬性值為xld.牌號(hào) 。上述控件中,只有牌號(hào)和車主名兩個(gè)文本框需要設(shè)置事件代碼。txt 牌號(hào)文本框(已與xld.牌號(hào)綁定)的Valid 事件代碼如下:若在該文本框中輸入新牌號(hào), QC 表中就會(huì)自動(dòng)增加該牌號(hào)SELE QCLOCATE FOR牌號(hào) =XLD. 牌號(hào)IF NOT FOUND()INSERT I

37、NTO QC( 牌號(hào) ) VALUES(XLD.牌號(hào) )& 如果是新牌號(hào), 在 QC 表的末尾添加一個(gè)記錄ENDIFtxt 車主名文本框(已經(jīng)與QC. 車主名綁定)的Valid 事件代碼如下:若在該文本框中輸入新車主名,CZ 表中會(huì)自動(dòng)添加該車主名SELE CZLOCA FOR車主名 =XLD. 車主名IF NOT FOUND()INSERT INTO CZ( 車主名 ) VALUES(QC. 車主名 )ENDIF4)添加表格線。利用表單控件工具欄的線條控件畫出表格的所有橫線和豎線。5)創(chuàng)建命令按鈕組。 在表單底部居中創(chuàng)建一個(gè)包含 10 個(gè)命令按鈕的命令按鈕組, 其對(duì)象名為 Commandgr

38、oup1 。下面是為它編寫的事件代碼。Commandgroup1的Click事件代碼:SELE xldDO CASECASE this.value=1& 下頁IFRECN()1SKIP -1ENDIFCASE this.value=3& 首頁GO TOPCASE this.value=4& 末頁GO BOTTOMCASE this.value=5& 尋頁DO FORM srxldh& 調(diào)用表單srxldh以輸入修理單號(hào); 返回后尋頁鈕獲得焦點(diǎn)CASE this.value=6& 增頁zy=MESSAGEBOX( 是要增頁嗎?,1+48+256, 確認(rèn)增加修理單)& 對(duì)話框含確定和取消按鈕,驚嘆

39、號(hào)圖標(biāo);第2 個(gè)按鈕(既取消按鈕)是默認(rèn)按鈕IF zy=1GO BOTTOMINSERT INTO xld( 編號(hào) ) VALUES(STR(V AL( 編號(hào) )+1,4)& 在 XLD 表的末尾添加一個(gè)記錄,并將編號(hào)加1 后的值存入新記錄的編號(hào)字段。ENDIFCASE this.value=7& 刪頁sy=MESSAGEBOX( 是要?jiǎng)h頁嗎?,1+48+256,確認(rèn)刪除修理單)IF sy=1DELETEPACKENDIFCASE this.value=8& 汽車修改SELE qcBROW TITLE 汽車修改 +SPACE(20)+ 單擊行首可刪除標(biāo)記,退出時(shí)可刪去記錄PACKCASE th

40、is.value=9& 車主修改SELE czBROW TITLE 車主修改 +SPACE(20)+ 單擊行首可刪除標(biāo)記,退出時(shí)可刪去記錄PACKCASE this.value=10& 確定,退出表單thisform.releaseENDCASEthisform.refresh執(zhí)行“修車登記” 表單( XCDJ.SCX )時(shí),只要單擊尋頁按鈕,本系統(tǒng)就會(huì)執(zhí)行一個(gè)DOFORMsrxldh命令來打開一個(gè)供輸入修理單號(hào)的表單(參見圖2.6)。當(dāng)輸入結(jié)束關(guān)閉SRXLDH 表單后,再執(zhí)行本段的GotFocus 事件代碼。4,“輸入修理單號(hào)”表單(SRXLDH.SCX )1)創(chuàng)建表單。參考圖 2.6 創(chuàng)建

41、表單各控件。2)屬性設(shè)置。 Form1 的 Caption 屬性設(shè)置為“輸入”; Label1 的 Caption 屬性設(shè)置為“請(qǐng)輸入修理單號(hào):”;Command1 的 Caption 屬性設(shè)置為“確定”。3)事件代碼設(shè)定。Text1 文本框的LostFocus 事件代碼:Command1 命令按鈕的Click 事件代碼:圖 2.6“輸入修理單號(hào)”表單thisform.release5,“汽車修理”表單(QCXL.SCX)汽車修理表單的功能是輸入或修改修理小時(shí),完工日期和修理工工號(hào),并且能同時(shí)顯示修車登記單的主要信息及零件用量。本例假定修車耗用的零件已經(jīng)在零件出庫時(shí)登記,故這里僅要求顯示零件用

42、量,而不是登記。( 1)創(chuàng)建表單。參考圖2.7。圖 2.7 “汽車修理 .修理情況”表單2) Form1 的屬性設(shè)置為 “汽車修理 .修理情況”。( 3)在數(shù)據(jù)環(huán)境中添加XLD ,XLG 和 LJYL 三個(gè)表(不必關(guān)聯(lián)) ,然后分別將XLD 表的編號(hào),送修日期,修理項(xiàng)目, 牌號(hào),修理小時(shí)和完工日期等6 個(gè)字段拖到表單窗口中規(guī)定的位置,從而產(chǎn)生相應(yīng)的標(biāo)簽和文本框。創(chuàng)建 Text1Text8 等 8 個(gè)文本框,其中Text1Text4 分別用于存儲(chǔ)LJYL 表的零件號(hào),Text5Text8 分別用于存儲(chǔ)這些記錄的數(shù)量。將關(guān)于XLD表的修理小時(shí)和完工日期字段之外的所有文本框的ReadOnly屬性設(shè)置

43、為.T.。即,只有修理小時(shí)和完工日期允許編輯數(shù)據(jù),其他的文本框都是只讀的。4)在 XLG 表上選取修理工的工號(hào), 并存入 xld. 工號(hào)。在表單上創(chuàng)建 Combo1 組合框,并設(shè)置以下的屬性:RowSourceType:6RowSoure:XLG. 工號(hào),姓名ColumnCount:2ControlSource:XLD. 工號(hào)BoundColumn:15)為 Form1 的 Refresh 事件編寫如下代碼:SELE ljylLOCATE FOR編號(hào) =xld. 編號(hào)IF FOUND()零件號(hào)數(shù)量& 零件用量表的編號(hào)與修理單的編號(hào)是否相同&ljyl表當(dāng)前記錄的零件號(hào)字段值賦給TEXT1& lj

44、yl表當(dāng)前記錄的數(shù)量字段值賦給TEXT5ENDIFCONTINUEIF NOT EOF()零件號(hào)數(shù)量ENDIFCONTINUEIF NOT EOF()零件號(hào)數(shù)量ENDIFCONTINUEIF NOT EOF()零件號(hào)數(shù)量ENDIF6)為命令按鈕組 Commandgroup1 的 Click 事件編寫如下代碼:SELExldDO CASECASE this.value=1IF RECN()1SKIP -1ENDIFCASE this.value=3GO TOPCASE this.value=4GO BOTTOMCASE this.value=5DO FORM srxldhCASE this.va

45、lue=6thisform.releaseENDCASE6,“零件訂貨計(jì)劃”表單(LJDH.SCX )在表單上創(chuàng)建一個(gè)列表框供選定季度 ,確定季度后能顯示 LJKC 表中庫存量小于最低庫存的零件信息及其訂貨量。訂貨量也可以編輯修改。確定的季度并不作為篩選記錄的條件,僅用于在表單窗口標(biāo)題欄上顯示。( 1)創(chuàng)建表單。創(chuàng)建Label1 標(biāo)簽和 List1 列表框。參見圖2.8。圖 2.8 “零件訂貨計(jì)劃”表單窗口2)創(chuàng)建變量屬性 jd( 表示“季度” ):用表單菜單的新建屬性命令創(chuàng)建一個(gè)變量屬性jd,然后在屬性窗口將該變量屬性的初值設(shè)置為”1”。( 3)屬性設(shè)置:對(duì)象名屬性名屬性值說明Form1Ca

46、ption季度訂貨計(jì)劃Label1Caption請(qǐng)選擇季度(雙擊有效)List1ControlSourcejd數(shù)據(jù)綁定到變量 jd4) List1 的 Init 事件代碼如下:在列表框中增入季度號(hào)選項(xiàng)This.Additem( “1”)This.Additem( “2”)This.Additem( “3”)This.Additem( “4”)(5) List1 的 DbClick 事件代碼如下:SELE ljkcCOUNT FOR庫存量 最低庫存to jlsIfjls=0Messagebox(“庫存量都不小于最低庫存,第”+jd+ ”季度不需要訂貨!”)ElseSET FILT TO庫存量 最

47、低庫存BROW FIELDS零件號(hào) :R,零件名 :R, 庫存量 :R, 最低庫存 :R, 訂貨量;TITLE “第”+jd+ ”季度零件訂貨計(jì)劃”& 只有訂貨量可修改,其他字段只讀SET FILT TOENDIF7,“打印發(fā)票”表單(DYFP.SCX)1)創(chuàng)建表單。2)參照?qǐng)D 2.9 在表單上創(chuàng)建 Label1 標(biāo)簽,Text1 文本框, Command1 命令按鈕各一個(gè)。圖 2.9 “打印發(fā)票”表單窗口3)屬性設(shè)置:將 Form1 的 Caption 屬性設(shè)置為“打印發(fā)票” ;將 Command1 命令按鈕的 Caption 設(shè)置為“確定” 。4) Text1 的 LostFocus 事件

48、代碼:ALUE5) Command1 的 Click 事件代碼:SELExldLOCATE FOR編號(hào) =TRIM(xldh)IF NOT FOUNT ()WAIT WINDOW“無此編號(hào)! ”ELSESELE ljylSUM數(shù)量 *ljkc. 價(jià)格FOR 編號(hào) =TRIM(xldh) AND零件號(hào)=ljkc. 零件號(hào)TO zljf*ljyl表與ljkc表已經(jīng)用零件號(hào)關(guān)聯(lián);zljf為總零件費(fèi)REPORT FORM fp PREV& 調(diào)用報(bào)表文件變量 ljffp.frx來預(yù)覽發(fā)票,zljf將賦值給報(bào)表THISFORM.ReleaseENDIF8,“發(fā)票”報(bào)表(FP.FRX)“打印發(fā)票 ”表單 (

49、DYFP.SCX) 需要調(diào)用報(bào)表文件FP.FRX ,其設(shè)計(jì)步驟簡述如下:( 1)創(chuàng)建報(bào)表:在命令窗口鍵入命令MODIFY REPORT fp ,即可進(jìn)入報(bào)表設(shè)計(jì)器。( 2)創(chuàng)建報(bào)表變量ljf (零件費(fèi))和xlf( 修理費(fèi) ):選定報(bào)表菜單的變量選項(xiàng)在報(bào)表變量對(duì)話框的變量列表中鍵入ljf在“要存儲(chǔ)的值”與“初始值”文本框中均鍵入zljf ??捎妙愃频姆椒▉韯?chuàng)建xlf 報(bào)表變量,但在“要存儲(chǔ)的值”與“初始值”文本框中均鍵入: xld. 修理小時(shí) *xlg. 小時(shí)工資 *3 (參見前述功能需求分析中關(guān)于發(fā)票的計(jì)算公式).( 3)在報(bào)表設(shè)計(jì)器窗口中創(chuàng)建表達(dá)式控件:用報(bào)表控件工具欄中的域控件按鈕創(chuàng)建牌號(hào)

50、, xld. 修理項(xiàng)目, xld. 送修日期, ljf , xlf 和 ljf+xlf 。 ljf 和 ljf+xlf兩個(gè)表達(dá)式控件創(chuàng)建時(shí),在報(bào)表表達(dá)式對(duì)話框中的格式文本框均設(shè)置為9999.99。( 4)創(chuàng)建標(biāo)簽,畫表格線等,步驟同前,不再敘述。圖 2.10 “發(fā)票”報(bào)表設(shè)計(jì)器五、運(yùn)行設(shè)計(jì)1,輸入數(shù)據(jù)在應(yīng)用系統(tǒng)投入使用運(yùn)行之前,通常先要往數(shù)據(jù)庫中裝入必要的或已有的成批數(shù)據(jù)。在本例中, 已經(jīng)為本系統(tǒng)列出一批數(shù)據(jù)。 本系統(tǒng)也可在運(yùn)行時(shí)輸入某些數(shù)據(jù), 例如通過登記功能來輸入, 本例中的修理工管理和零件入庫程序尚未編寫, 原始數(shù)據(jù)只能通過打開相應(yīng)的表來輸入。2,系統(tǒng)運(yùn)行在命令窗口中鍵入命令 DO QC

51、XL ( QCXL.prg 是主程序名) ,就可以運(yùn)行本系統(tǒng),進(jìn)入主菜單后,選擇相應(yīng)的子菜單項(xiàng),就能調(diào)用相應(yīng)的子程序或表單。本例中只給出了“修車登記” ,“汽車修理” ,“零件訂貨計(jì)劃”和“發(fā)票”四個(gè)子菜單項(xiàng)的對(duì)應(yīng)表單的設(shè)計(jì)。其余子菜單項(xiàng)的相應(yīng)表單設(shè)計(jì)請(qǐng)自行完成。第三章應(yīng)用程序的管理與發(fā)布用 VFP 開發(fā)的應(yīng)用系統(tǒng)常包含許多文件,如:.prg 程序文件, .mnx 菜單文件, .scx 表單文件, .frx 報(bào)表文件, .vue 視圖文件等。 修改某個(gè)文件時(shí), 除了必須確切了解文件的名字,還要記住這種文件的打開方法, 比較麻煩。項(xiàng)目管理器提供了一個(gè)管理應(yīng)用系統(tǒng)的集成環(huán)境,它不但是一個(gè)維護(hù)工具,

52、 也給系統(tǒng)開發(fā)提供了方便。 下面介紹利用項(xiàng)目管理器進(jìn)行應(yīng)用程序的管理與發(fā)布的方法。一、應(yīng)用程序管理項(xiàng)目管理器是 VFP 提供的一種有效的管理工具。 在應(yīng)用程序的開發(fā)過程中, 無論程序、表單、菜單、報(bào)表以及數(shù)據(jù)庫與數(shù)據(jù)庫表,都可以在項(xiàng)目管理器中新建、添加、修改、運(yùn)行和移去。1,項(xiàng)目的建立為使建立的項(xiàng)目文件能與“汽車修理管理系統(tǒng)”的程序和數(shù)據(jù)放在一起,可先執(zhí)行一條SET DEFAULT TOQCXL 命令,設(shè)置文件默認(rèn)路徑。MODIFYPROJECT命令用于打開項(xiàng)目管理器。在命令窗口中鍵入MODIFYPROJECTqcxlgl ,就可以建立一個(gè)名為qcxlgl 的項(xiàng)目文件,其默認(rèn)擴(kuò)展名為.pjx

53、。項(xiàng)目文件還有一個(gè)備注文件,其文件名與項(xiàng)目文件名相同,擴(kuò)展名為.pjt 。2,項(xiàng)目管理器中的主文件若項(xiàng)目中包含程序、 菜單或表單, 則其中必有一個(gè)是主文件。 項(xiàng)目管理器中的主文件具有如下特點(diǎn):( 1)主文件以粗體顯示。( 2)主文件一旦確定,項(xiàng)目連編時(shí)會(huì)自動(dòng)將各級(jí)被調(diào)用文件增入項(xiàng)目管理器窗口,但數(shù)據(jù)庫、表、視圖文件等數(shù)據(jù)文件不會(huì)自動(dòng)加入。需要用項(xiàng)目管理器中的“添加”按鈕手工加入。( 3)VFP 默認(rèn)添加到項(xiàng)目管理器中的第一個(gè)程序、菜單或表單為主文件,通常將應(yīng)用程序中最上層的文件設(shè)置為主文件。更改主文件的方法很簡單:在項(xiàng)目管理器中選定一個(gè)程序 (或菜單, 或表單)作為主文件,然后選定項(xiàng)目菜單的“

54、設(shè)置主文件”命令,該文件就變成以粗體顯示。參見圖 3.1。3,連編當(dāng)一個(gè)項(xiàng)目建立好各個(gè)模塊文件后,在項(xiàng)目運(yùn)行前還須對(duì)它們“連編”。在項(xiàng)目管理器中選定連編按鈕,就將顯示一個(gè)連編選項(xiàng)對(duì)話框,圖 3.1Qcxlgl 項(xiàng)目管理器窗口參見圖 3.2。該對(duì)話框允許創(chuàng)建一個(gè)自定義應(yīng)用程序或刷新現(xiàn)有項(xiàng)目。操作區(qū)中的選項(xiàng)說明:重新連編項(xiàng)目:用于編譯項(xiàng)目中所文件,并生成.PJX 文件和 .PJT 文件。連編應(yīng)用程序:用于連編項(xiàng)目,并生成以.APP 為擴(kuò)展名的應(yīng)用程序。.APP 文件只能在VFP 環(huán)境中運(yùn)行,如DO qcxlgl.app ;連編可執(zhí)行文件:用于連編項(xiàng)目并生成以.EXE 為擴(kuò)展名的應(yīng)用程序。 .EXE

55、 文件可以在VFP 開發(fā)環(huán)境中運(yùn)行,也可以脫離 VFP ,在 WINDOWS環(huán)境中獨(dú)立運(yùn)行。若要從主文件qcxl.prg 生成 qcxl.exe 程序,步驟如下:在qcxlgl.pjx 項(xiàng)目管理器窗口中選定連編按鈕在連編選項(xiàng)對(duì)話框中選定“連編可執(zhí)行文件”選項(xiàng)按鈕選定“確定”按鈕在“另存為 ”對(duì)話框的“應(yīng)用程序名”文本框中輸入qcxl選定保存按鈕。圖 3.2 連編選項(xiàng)對(duì)話框4,文件的包含與排除項(xiàng)目管理器中的文件可分為包含和排除兩種類型,左側(cè)有標(biāo)記的文件屬于排除類型,無標(biāo)記的文件則屬于包含類型。文件的包含與排除代表該文件的使用方式為只讀或可寫。當(dāng)項(xiàng)目連編時(shí),VFP 將項(xiàng)目包含的所有文件組合為一個(gè)單

56、一的應(yīng)用程序文件,并使這些文件都變?yōu)橹蛔x。也就是說,包含文件都以只讀方式被編譯進(jìn).app 文件或 .exe 文件中。對(duì)于設(shè)定為排除的文件,編譯時(shí)將被排除在外,用戶就能更新它們。通常將可以執(zhí)行的文件(如表單、報(bào)表、查詢、菜單和程序)設(shè)置為“包含”,而數(shù)據(jù)文件則根據(jù)是否允許寫入來決定是否設(shè)置為“排除”。但是,如果應(yīng)用程序允許用戶動(dòng)態(tài)更改一個(gè)報(bào)表,那么也應(yīng)該將該報(bào)表設(shè)為“排除”。總之,不需要用戶更新的文件設(shè)置為“包含”類型,而希望在運(yùn)行時(shí)可以寫的文件,應(yīng)該設(shè)置為“排除”類型。當(dāng)在項(xiàng)目管理器中選取一個(gè)文件后,利用項(xiàng)目菜單或快捷菜單的包含(或排除)命令就可以改變?cè)撐募念愋?,即將“包含”變?yōu)椤芭懦保?/p>

57、將“排除”變?yōu)椤鞍?。二、?yīng)用程序發(fā)布所謂發(fā)布應(yīng)用程序,是指為所開發(fā)的應(yīng)用程序制作一個(gè)應(yīng)用程序安裝盤,使之能方便地安裝至其它電腦上使用。下面介紹.exe 應(yīng)用程序發(fā)布的方法與步驟。1, 發(fā)布準(zhǔn)備a.應(yīng)用程序開發(fā)完成之后,首先在項(xiàng)目管理器中生成一個(gè).exe 可執(zhí)行程序。b.創(chuàng)建發(fā)布樹 (即目錄),用來存放用戶運(yùn)行應(yīng)用程序所需的全部文件。最好在 VFP目錄外另建一個(gè)專用目錄,并僅將必需的文件放進(jìn)去。這些文件應(yīng)包括:.exe 程序連編時(shí)未自動(dòng)加入項(xiàng)目管理器中的文件設(shè)置為“排除”類型的文件支持庫 vfp6r.dll 、特定地區(qū)資源文件 vfp6rchs.dll 或 vfp6renu.dll 。這些文

58、件都放在 windows 的 system 目錄中。例如:要為汽車修理管理系統(tǒng)建立一個(gè)專用目錄C:QCXLGL ,然后將上述文件復(fù)制到該目錄中。2,創(chuàng)建發(fā)布磁盤VFP 提供的“安裝向?qū)А笨捎脕韯?chuàng)建發(fā)布磁盤并預(yù)置磁盤的安裝路徑。安裝向?qū)б笥脩糁付òl(fā)布樹, 指定在硬盤上建立磁盤映象的目錄, 以及指定應(yīng)用程序安裝時(shí)使用的默認(rèn)目標(biāo)目錄。磁盤映象由安裝向?qū)稍谟脖P的磁盤映象目錄中, 它含有二級(jí)目錄及發(fā)布文件。 第一級(jí)目錄包含若干子目錄, VFP 將發(fā)布樹中所有文件以壓縮格式分別存儲(chǔ)在這些子目錄中,每個(gè)子目錄中的文件可供復(fù)制一張發(fā)布時(shí)使用的軟盤。 應(yīng)用程序安裝時(shí), 這些文件通過解壓縮裝入用戶機(jī)器的默認(rèn)

59、目標(biāo)目錄,或由用戶另外指定的目錄中。下面說明安裝向?qū)У氖褂貌襟E。選定工具菜單的向?qū)нx項(xiàng)的安裝命令,屏幕即顯示安裝向?qū)?duì)話框(首次安裝時(shí)),要求用戶指定安裝向?qū)ё杂玫哪夸?。此時(shí)若選定 “創(chuàng)建目錄” 按鈕,安裝向?qū)Ь蜁?huì)自動(dòng)在VFP系統(tǒng)目錄中建立一個(gè)DISTRIB 子目錄,并顯示安裝向?qū)Вǘㄎ晃募?duì)話框,供用戶逐步操作。步驟1 (定位文件對(duì)話框):利用發(fā)布樹目錄文本框的對(duì)話按鈕選定發(fā)布樹目錄后,選取“下一步”按鈕,出現(xiàn)“指定組件”對(duì)話框。步驟2 (指定組件對(duì)話框) :該步驟要求用戶指定必須包含的系統(tǒng)文件。此時(shí)可選定“Visual FoxPro 運(yùn)行時(shí)刻組件”和“ Microsoft Graph 8

60、.0運(yùn)行時(shí)刻”兩個(gè)復(fù)選框,然后再選定“下一步”按鈕。步驟3 (磁盤映象對(duì)話框) :該步驟要求指定磁盤映象目錄和安裝磁盤類型。此時(shí)可利用“對(duì)話”按鈕來選定磁盤映象目錄C: QCXLGL ,并使“ 1.44MB3.5 英寸”復(fù)選框?yàn)檫x定狀態(tài),然后選定“下一步”按鈕。步驟4(安裝選項(xiàng)對(duì)話框) :該步驟要求指定安裝時(shí)所顯示對(duì)話框的標(biāo)題,以及版權(quán)聲明等內(nèi)容??稍凇鞍惭b對(duì)話框標(biāo)題”文本框中鍵入“汽車修理管理系統(tǒng)”,并在“版權(quán)信息”文本框中鍵入自己選定的特定信息,如“大洲”。步驟5(默認(rèn)對(duì)話框) :該步驟要求指定默認(rèn)的文件安裝目的地(目錄)和開始菜單中程序管理器組名。此時(shí)保持“默認(rèn)目標(biāo)目錄”文本框的“QCX

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論