[摘 要]本文以會計科目的輸入設計與實施為例,以Microsoft Visual FoxPro 6.0為關系數據庫管理系統,分析與闡述了管理信息系統數據輸入模塊的實施原理與方法,探討了會計科目輸入的程序流程,并提供了相應的程序代碼。
[關鍵詞]管理信息系統;會計科目;信息輸入;VFP程序設計
[中圖分類號]F232 [文獻標識碼]A [文章編號]1673-0194(2006)11-0019-04
數據輸入模塊是管理信息系統的一個關鍵性的處理模塊,輸入數據的正確性與可靠性是管理信息系統發揮其功能的重要保證,輸入模塊設計的好壞將會直接影響到管理信息系統的正常使用。輸入模塊設計與實現的基本原理是:首先設計與建立簡便易用的用戶輸入界面及相關的數據表文件,然后選擇合適的程序設計語言,并根據信息輸入的程序流程設計相應的程序代碼;程序運行時,用戶通過用戶輸入界面從鍵盤錄入所要求的原始數據,所錄入的數據符合要求時將被存儲在指定的數據表文件中,不滿足要求時則不能保存到相應的數據表文件,而且應當有相應的提示信息。現以Microsoft Visual FoxPro 6.0(以下簡稱VFP)數據庫管理系統為系統開發環境,以會計科目的輸入設計與實施為例,說明信息輸入模塊的設計與實現方法。
1 會計科目輸入模塊的實施原理
1.1會計科目輸入模塊的功能目標
會計科目信息包括科目編號、科目名稱、借貸方向和期初余額等,這些信息的輸入通過會計科目輸入的表單界面進行,其表單界面如圖1所示。將會計科目信息通過鍵盤分別輸入至表單中對應的Textl、Text2、Text3、Text4文本框中,然后單擊“確定”按鈕;這時,若從鍵盤輸入至表單的信息符合要求,則將這些信息保存至會計科目表kjkm.dbf中,否則需做進一步判斷與處理,只有符合要求的會計科目信息才能保存在kjkm.dbf數據表中。kjkm.dbf數據表的結構如表1所示。
從鍵盤輸入至表單的信息是否符合要求,主要由程序自動判斷與處理,用戶不必關心。信息是否符合要求主要看表單上科目編號對應的Textl文本框中的數據是否符合要求,以下情況均不符合要求:①Textl文本框中為空白數據(空字串或空格);②TextI中的數據位數不符合要求;③Textl中的科目編號對應的上級科目在kjkm.dbf數據表中沒有匹配的記錄;④Textl中的科目編號在kjkm.dbf數據表中已有匹配的記錄。單擊“確定”按鈕時,只要出現上述情況之一,都會彈出信息提示對話框并要求進一步操作與處理,直到Textl中的數據滿足要求時,才能通過單擊“確定”按鈕將表單上的數據存儲在kjkm.dbf中。

在信息輸入的過程中,若單擊表單上的“取消”按鈕,便取消了本次輸入并將焦點定位于Textl文本框,等待重新輸入;若單擊“退出”按鈕,將彈出提示信息“真的想退出嗎?”的對話框,再單擊對話框上的“是”按鈕將退出輸入模塊,但單擊對話框上的“否”按鈕并不退出。
1.2會計科日表kjkm.dbf的結構
建立會計科目數據表,其結構如表l所示,相應的數據表文件kjkm.dbf保存在默認目錄(或指定目錄)下。
其中,科目編號kmbh字段的值可以是一級科目,也可以是二、三、四級科目。這里假定一級科目的科目編號用3位代碼表示,非一級科目的科目編號用它的上級科目編號后面加2位代碼表示。例如,一級科目“銀行存款”的科目編號是102,二級科目“銀行存款一工行”的科目編號可用10201表示,三、四級科目的編號可用1020101、102010101等來表示。當然,kmbh字段的寬度也可根據實際需要設計為5位、7位、ll位等,對后面提到的程序不會有任何影響。這樣設計時,要求科目編號的位數不能低于3位,而且必須是奇數。另外,科目編號kmbh在數據表kjkm.dbf中是主碼,不允許為空值,也不能有重復的值出現,而且,通過表單界面輸入非一級科目的科目編號時,必須保證kjkm.dbf中已保存了與之對應的上級科目編號。通過表單界面輸入信息時,程序應能夠自動判斷出是否滿足所有這些要求,并進行相應處理。
科目名稱kmmc、借貸方向jdfx、期初余額qcye的寬度也應根據實際需要設計成其他值,這里給出的只是參考值。
1.3會計科目輸入的表單界面
新建用于會計科目信息輸入的表單,其界面如圖1所示,相應的表單文件保存在默認目錄(或指定目錄)下。如果要改變表單界面上文字的字體、字號、顏色,需要在各標簽控件和命令按鈕控件的屬性對話框中設置FontName、FontSize、ForeColor屬性;如果改變直線的顏色,可通過設置其BorderColor屬性進行,也可以通過操作調色板實現。
由于期初余額qcye在會計科目表kjkm.dbf中為數值型數據,寬度為12,小數位為2位,這就需對Text4文本框做如下處理:用鼠標右鍵單擊Text4文本框,在彈出的快捷菜單中選擇“生成器”,出現“文本框生成器”對話框,在“格式”選項卡將“數值類型”設置為“數值型”,并將“輸入編碼”設置為“999999999.99”。
由于科目編號、科目名稱、借貸方向為字符型數據,它們對應的Textl、Text2、Text3文本框不必再作處理。
2 會計科目輸入的程序流程
會計科目信息輸入時,程序應能夠自動判斷出從鍵盤輸入的數據是否符合會計科目表kjkm.dbf存儲信息的要求,并做出相應的處理,其程序流程如圖2所示。
3 會計科目輸入的VFP程序代碼及相關說明
3.1會計科目輸入的VFP程序代碼

會計科目的輸入是通過會計科目輸入的表單界面進行的,而要將從鍵盤輸入至表單界面對應文本框中的數據保存至會計科目表kjkm.dbf中,則需要單擊表單上的“確定”按鈕。因此,“確定”按鈕的Click事件的程序代碼應當與圖2所示的“會計科目輸入程序流程”相對應。“確定”按鈕的Click事件的VFP程序代碼對應如下。
set exact on
b=O
use kjkm
kmbhl=allt(、thisform.textl.value)
lengthl=len(allt(thisform.textl.value))
if lengthl<3
b=messagebox(“請輸入不低于三位的科目編號!”,48)
thisform.textl.setfocuselse
loca for alh(kmbh)=kmbh 1
if found0
b=messagebox(“科目編號不能重復!”,48)
thisform.text1.setfocus
endif
if lengthl>3
if mod(1en(allt(kmbhl)),2)=1
go top
loca for allt(kmbh)=left(allt(kmbhl),lengthl-2)
if.not.found0
b=messagebox(\"無上級科目,請輸入上級科目!\",48)
thisform.textl.value=left(allt(kmbhl),lengthl-2)
thisform.text2.value=space(1)
thisform.text3.value=space(1)
thisform.text4.value=0.00
thisform.text2.setfocus
endif
else
b=messageboxf(“科目編號位數不對,請重新輸入!”,48)
thisform.textl.setfocus
endif
endif
endif
if b=0
appe blan
repl kmbh with kmbhl
repl kmmc with thisform.text2.value
repl jdfx with thisform.text3.value
repl qcye with thisform.text4.value
thisform.textl.value=space(1)
thisform.text2.value=space(1)
thisform.text3.value=space(1)
thisform.text4.value=0.00
thisform.refresh
thisform.text 1.setfocus
endif
use
set exact off
3.2相關說明
kmbhl、lengthl是中間變量,分別表示輸入至Textl文本框中的科目編號(去掉前后空格)及其長度。當lengthl<3時,表單中已輸入的科目編號一定不符合會計科目表kjkm.dbf對信息的要求;當lengthl≥3時,要看kjkm.dbf表中是否已存在相應的科目編號,特別是當lengthl>3時,還要看Textl文本框中科目編號的位數是否符合要求,以及kjkm.dbf表中是否已經有相應的上級科目編號存在。
b是中間變量,只有當b=0時,才可以將輸入至表單文本框中的信息保存在kjkm.dbf表中。也就是說,輸入的信息存盤時,要檢查b的值是否等于0。在程序中,一旦Textl文本框中接收的輸入信息不滿足kjkm.dbf數據表對信息的要求,就為b賦以非0值。
賦值語句b=messagebox(“請輸入不低于三位的科目編號!”,48)表示彈出包含“確定”按鈕的提示信息對話框,提示信息為“請輸入不低于三位的科目編號!”,單擊對話框中的“確定”按鈕時,返回值為1,即b=l,表示表單文本框中的信息不符合kjkm.dbf數據表對信息的要求,這些信息不能保存在kkkm.dbf數據表中。其余幾個類似的為b賦值的語句同理。
mod(1en(allt(kmbhl)),2)=1是一個判斷條件,該條件滿足時,表示輸入表單的科目編號(去掉前后空格)的位數是奇數;否則輸入的科目編號(去掉前后空格)的位數是偶數,這時科目編號需要重新輸入。
loca for alt(kmbh)=left(alltfkmbhl),lengthl-2)的作用是在kjkm.dbf表中查找與Textl文本框中已輸入的科目編號相對應的上級科目編號。
thisform.textl.value=left(alltfkmbhl),lengthl-2)的作用是將Textl文本框中的內容自動變為與所輸入科目編號相對應的上級科目編號。
當b=0時。將在kjkm.dbf數據表中添加一條新記錄,新記錄中各字段的值與表單上對應文本框中的數據相對應,實現的方法是先用append blank語句為數據表追加一條空白記錄,再用replace…with…語句將各字段的值替換成表單中對應的數據。
4 信息輸入輔助功能的實現
4.1單擊清空文本框
除科目編號對應的Textl文本框外,在單擊科目名稱、借貸方向、期初余額對應的Text2、Text3、Text4文本框時,希望能夠清空其中已有的數據,以便重新輸入。為實現此功能,可在接收字符型數據的Text2、Text3文本框的Click事件代碼中將其Value屬性值設置為一個空格,在接收數值型數據的Text4文本框的Click事件代碼中將其Value屬性值設置為0。
Text2、Text3文本框的Click事件對應的VFP程序代碼為:this.value=space(l)
Text4文本框的Click事件對應的VFP程序代碼為:this.value=0.00
4.2取消本次輸入
在信息輸入過程中,有時希望取消本次輸入操作,即在單擊“確定”按鈕前將輸入至表單文本框中的數據清除,而不保存這些數據到會計科目表kjkm.dbf中。這時,可通過單擊表單中的“取消”按鈕來完成。“取消”按鈕的Click事件對應的程序流程是:依次將表單中Textl、Text2、Text3文本框的Value屬性值設置為一個空格,將Text4數值型文本框的Value屬性值賦以數值0,然后刷新表單,使Textl文本框獲得焦點。其中,刷新表單用thisform.refresh實現,Textl文本框獲得焦點用thisform.textl.setfocus實現。“取消”按鈕的Click事件對應的VFP程序代碼如下。
thisform.textl.value=space(1)
thisform.text2.value=space(1)
thisform.text3.value=space(1)
thisform.text4.value=O.00
thisform.refresh
thisform.text1.setfocus
4.3退出輸入模塊
信息輸入完畢,應退出輸入模塊,可通過單擊表單上的“退出”按鈕完成此操作。“退出”按鈕的Click事件對應的程序流程是:彈出與提示信息“真的想退出嗎?”相對應的對話框,該對話框上有“是”與“否”兩個按鈕,單擊“是”按鈕時釋放表單,單擊“否”按鈕時不釋放表單。彈出包含“是”與“否”按鈕的對話框的功能可用函數messagebox(“真的想退出嗎?”4+48)來實現,單擊“是”按鈕時返回值為6,單擊“否”按鈕時返回值為7。刷新表單可用thisform.release實現。“退出”按鈕的Click事件對應的VFP程序代碼如下。
if messagebox(“真的想退出嗎?”,4+48)=6
thisform.release
endif
[收稿日期]2006-07-25