計算機(jī)等級考試二級VFP上機(jī)試題及解題思路(8)

字號:

計算機(jī)等級考試二級VFP上機(jī)試題及解題思路(8)

    表單程序設(shè)計
    1.設(shè)計一個表單,界面如圖8.43,當(dāng)表單運(yùn)行時,標(biāo)簽控件自動從左向右移動。
    2.設(shè)計一個顯示中文日期的表單,并且可以實現(xiàn)日期的前翻和后翻,界面如圖8.44。
    3.將文本框中輸入的金額轉(zhuǎn)換成中文大寫的形式,即將123.56轉(zhuǎn)換成壹佰貳拾叁元伍角陸分,高值為億。要求:數(shù)字金額轉(zhuǎn)換成中文大寫金額用方法來實現(xiàn),表單運(yùn)行輸入數(shù)據(jù)值金額后,調(diào)用這個方法。表單界面如圖8.45所示。
    4.計算指定班級的獎學(xué)金總額,表單界面如圖8.46所示。除了3個標(biāo)簽控件、3個文本框和兩個命令按鈕外,再添加3個形狀控件,將輸入值與顯示計算結(jié)果的區(qū)域、命令按鈕的區(qū)域區(qū)分開來,并設(shè)置形狀控件的SpecialEffeect屬性為3維。注意:班級號不存在,通過對學(xué)號的截取來獲得,獎學(xué)金總額是通過計算得到的。
    5.顯示指定表文件中的全部字段名,表單界面如圖8.47所示。要求:表單運(yùn)行時,在文本框中輸入表名(不包括擴(kuò)展名),在列表框中顯示指定表的全部字段名。
    6.設(shè)計表單,查找指定班級學(xué)生的名單,表單界面如圖8.48所示。要求:表單剛運(yùn)行時,文本框為空白,輸入班級號后,按“確定”按鈕,將指定班級學(xué)生的姓名添加到組合框中,如果該班級不存在的話,用消息對話框提示班級不存在的信息。
    7.設(shè)計一個計時器表單,用3個文本框分別顯示時、分、秒,界面如圖8.49所示。要求:表單剛運(yùn)行時,各個文本框中顯示“00”。單擊“開始”按鈕后,從0開始計時,單擊“停止”按鈕停止計時,文本框中顯示當(dāng)前計時的值,單擊“退出”按鈕結(jié)束。
    8.設(shè)計一個表單,查找指定學(xué)生的課程選修情況,其中Combo1的數(shù)據(jù)源為學(xué)生表的姓名,Label2的標(biāo)題根據(jù)組合框中的選擇而變化,界面如圖8.50所示。要求:表單運(yùn)行時, Label2、List1是不可見的。在組合框中選擇姓名后,在List1中顯示該生選修的課程名和成績。
    多表操作程序設(shè)計題
    1.對學(xué)生“學(xué)籍”數(shù)據(jù)庫中的“學(xué)生”表,編寫一個輸入學(xué)生信息的程序,要求保證該表的實體完整性。用戶界面可以自行設(shè)計。
    2.對學(xué)生“學(xué)籍”數(shù)據(jù)庫中的“學(xué)生”表,編寫一個按照“學(xué)號”修改某個學(xué)生信息的程序,要求保證該表的實體完整性。用戶界面可以自行設(shè)計。
    3.表單的界面及控件布局情況如圖8.51和圖8.52所示,其中順序排列的控件Text1~Text6被放置在容器Container1中。該表單可實現(xiàn)查詢指定學(xué)生姓名的所修課程名及成績情況。具體要求如下:① 用戶可以在控件Combo1中輸入或選擇學(xué)生姓名;② 輸入或選擇學(xué)生姓名后,按回車或“確定”按鈕,可在表單的左部控件中以只讀方式顯示對應(yīng)的學(xué)號和學(xué)生姓名以及指定學(xué)生姓名所修各門課程的課程名和成績以及總平均金額;③ 課程名及成績顯示項可根據(jù)表中滿足條件的記錄個數(shù)動態(tài)的調(diào)整,如果某學(xué)生尚無選修任何課程,則課程名及成績顯示項將不出現(xiàn)(包括顯示控件和顯示數(shù)據(jù)),且在總平均成績顯示項中顯示未選修任何課程的信息;④ 表單中命令按鈕的漢字標(biāo)題在表單執(zhí)行后會自動顯現(xiàn)。編寫完成上述功能的事件代碼,要求寫明數(shù)據(jù)源的設(shè)置情況及各個事件的名稱及歸屬(假設(shè)銷售金額顯示項多不超過10項)。
    4.表單的界面及控件布局情況如圖8.53和圖8.54所示,其中順序排列的控件Command1~Command7屬于組容器Commandgroup1。該表單可實現(xiàn)學(xué)生“成績”表的編輯瀏覽操作,具體要求如下:可以隨時向成績表中添加新記錄;可以隨時刪除成績表中當(dāng)前指針?biāo)傅挠涗?可以隨時向前、后、表頭、表尾翻動瀏覽記錄,當(dāng)指針到達(dá)表頭或表尾時,自動將相應(yīng)按鈕設(shè)為不可訪問;在添加或瀏覽記錄時,隨著學(xué)號的變化,相應(yīng)的姓名、課程號、課程名和成績會自動地以只讀方式定位顯示;控件Command1~Command7的漢字標(biāo)題執(zhí)行后會自動顯現(xiàn)。編寫完成上述功能的事件代碼,要求寫明數(shù)據(jù)源的設(shè)置情況及各個事件的名稱及歸屬。
    習(xí)題答案:
    表單程序設(shè)計
    1、
    timer1的timer事件代碼:
    thisform.label1.left=thisform.label1.left+4
    thisform.refresh
    2、
    1.spinner1的upclick事件代碼:
    thisform.text1.value=thisform.text1.value-1
    thisform.refresh
    2.spinner1的downclick事件代碼:
    thisform.text1.value=thisform.text1.value-1
    thisform.refresh
    3、
    (1)新建方法jezh的代碼:
    parameter x
    c1="零壹貳叁肆伍陸柒捌玖"
    c2="分角元拾佰仟萬拾佰仟億"
    m=round(x,2)
    m=m*100
    i=0
    c=""
    do while .t.
    n=mod(m,10)
    p1=substr(c1,2*n+1,2)
    p2=substr(c2,2*i+1,2)
    c=p1+p2+c
    i=i+1
    m=int(m/10)
    if m=0
    exit
    endif
    enddo
    return c
    (2)Text1的valid事件代碼:
    je=thisform.jezh(val(thisform.text1.value))
    thisform.text2.value=je
    thisform.refresh
    4、
    (1)command1的click事件代碼
    set talk off
    sele 學(xué)生
    bjh=alltrim(thisform.text1.value)
    loca for substr(學(xué)號,1,4)=bjh
    if found()
    sum 學(xué)生.獎學(xué)金 to jxj for substr(學(xué)號,1,4)=bjh
    thisform.text2.value=bjh
    thisform.text3.value=jxj
    else
    thisform.text2.value=""
    thisform.text3.value=""
    messagebox("該班級不存在!")
    endif
    thisform.refresh
    (2)Command2的click事件代碼
    thisform.release
    5、
    text1的valid事件代碼:
    tbn=alltrim(thisform.text1.value)
    if file("&tbn..dbf")
    use (tbn)
    thisform.list1.clear
    for i=1 to fcount()
    thisform.list1.additem(field(i))
    endfor
    use
    else
    message("指定的表文件不存在!請重新輸入!")
    endif
    thisform.refresh
    6、
    (1)command1的click事件代碼
    bjh=alltrim(thisform.text1.value)
    sele 學(xué)生
    loca for substr(學(xué)號,1,4)=bjh
    thisform.combo1.clear
    if found()
    thisform.combo1.clear
    thisform.combo1.displayvalue=學(xué)生.姓名
    do while substr(學(xué)號,1,4)=bjh
    thisform.combo1.additem(學(xué)生.姓名)
    skip
    enddo
    else
    messagebox("沒有該班級")
    thisform.text1.value=""
    thisform.text1.setfocus
    endif
    (2)Command2的click事件代碼
    thisform.release
    7、
    (1)Form1的init事件代碼:
    public h,m,s
    store 0 to h,m,s
    thisform.timer1.enabled=.f.
    thisform.text1.value='00'
    thisform.text2.value='00'
    thisform.text3.value='00'
    (2)Timer1的timer事件代碼:
    s=s+1
    if s>59
    s=0
    m=m+1
    endif
    if m>59
    m=0
    h=h+1
    endif
    if h>24
    h=0
    endif
    s1=iif(s<10,'0'+str(s,1),str(s,2))
    m1=iif(m<10,'0'+str(m,1),str(m,2))
    h1=iif(h<10,'0'+str(h,1),str(h,2))
    thisform.text1.value=h1
    thisform.text2.value=m1
    thisform.text3.value=s1
    (3)Command1的click事件代碼
    thisform.timer1.enabled=.t.
    thisform.text1.value='00'
    thisform.text2.value='00'
    thisform.text3.value='00'
    store 0 to s,m,h
    (4)Command2的click事件代碼
    thisform.timer1.enabled=.f.
    (5)Command3的click事件代碼
    thisform.release
    多表操作程序設(shè)計題
    操作步驟如下:
    (1) 新建表單
    (2) 按題目要求在表單中加入控件:
    命令按紐Command1、Command2;
    標(biāo)簽 Label1、Label2、Label3;
    組合框 Combo1;
    文本框 Text1、Text2、Text3;
    容器 Container1, 并在容器 Container1 中加入文本框 Text1、Text2、Text3、Text4、Text5、Text6、Text7、 Text8、Text9、Text10。
    (3) 數(shù)據(jù)環(huán)境設(shè)置:
    將表文件“學(xué)生”、“課程”、“成績”添加到數(shù)據(jù)環(huán)境中。
    (4) 主要屬性設(shè)置:
    表單 Form1 的Caption 屬性設(shè)置為 “學(xué)生成績查詢表單”
    命令按紐Command1的Caption 屬性設(shè)置為 “確定”
    命令按紐Command2的Caption 屬性設(shè)置為 “退出”
    標(biāo)簽Label1的Caption 屬性設(shè)置為 “選擇姓名”
    標(biāo)簽Label2的Caption 屬性設(shè)置為 “學(xué)號”
    標(biāo)簽Label3的Caption 屬性設(shè)置為 “姓名”
    組合框 Combo1的RowSourceType屬性設(shè)置為 “6-字段”
    組合框 Combo1的RowSource屬性設(shè)置為 “學(xué)生.姓名”
    (5) 主要事件代碼
    1. FORM1 INIT 事件代碼:
    THISFORM.SETALL("Readonly",.T.,"Textbox")
    FOR N=1 TO THISFORM.CONTAINER1.CONTROLCOUNT
    THISFORM.CONTAINER1.CONTROLS(N).VISIBLE=.F.
    ENDFOR
    2. COMMAND1 CLICK 事件代碼:
    SELECT 學(xué)生
    XH=學(xué)號
    XM=姓名
    THISFORM.TEXT1.VALUE=XH
    THISFORM.TEXT2.VALUE=XM
    FOR N=1 TO THISFORM.CONTAINER1.CONTROLCOUNT
    THISFORM.CONTAINER1.CONTROLS(N).VALUE=""
    THISFORM.CONTAINER1.CONTROLS(N).VISIBLE=.F.
    ENDFOR
    S=0
    L=1
    SELECT 成績
    LOCATE FOR ALLTRIM(學(xué)號)=ALLTRIM(XH)
    DO WHILE ! EOF()
    SELECT 課程
    LOCATE FOR ALLTRIM(課程號)=ALLTRIM(成績.課程號)
    KCM=課程名
    SELECT 成績
    THISFORM.CONTAINER1.CONTROLS(L).VALUE=KCM+":"+STR(成績,5,1)
    THISFORM.CONTAINER1.CONTROLS(L).VISIBLE=.T.
    S=S+成績
    L=L+1
    CONTINUE
    ENDDO
    IF L>1
    THISFORM.TEXT3.VALUE="該生的總平均成績?yōu)?"+STR(S/(L-1),5,1)
    ELSE
    THISFORM.TEXT3.VALUE="該生沒有選修課程!"
    ENDIF
    SELECT 學(xué)生
    THISFORM.REFRESH
    3. COMMAND2 CLICK 事件代碼:
    THISFORM.RELEASE
    操作步驟如下:
    (1) 新建表單
    (2) 數(shù)據(jù)環(huán)境設(shè)置:
    將表文件“學(xué)生”、“課程”、“成績”添加到數(shù)據(jù)環(huán)境中。
    (3) 按題目要求在表單中加入控件:
    命令按紐組Commandgroup1;
    從數(shù)據(jù)環(huán)境中將“學(xué)生”表的“姓名”字段、“課程”表的“課程名”字段、“成績”表的“學(xué)號”字段、“成績”表的“課程號”字段、“成績”表的“成績”字段分別拖入表單對應(yīng)位置。
    (4) 主要屬性設(shè)置:
    表單 Form1 的Caption 屬性設(shè)置為 “學(xué)生成績表編輯表單”
    命令按紐組Commandgroup1的ButtonCount 屬性設(shè)置為 “7”
    (5) 主要事件代碼:
    1. FORM1 INIT 事件代碼:
    SET SAFETY OFF
    THISFORM.COMMANDGROUP1.COMMAND4.ENABLED=.F.
    THISFORM.COMMANDGROUP1.COMMAND5.ENABLED=.F.
    C="添加刪除退出表頭前翻表尾后翻"
    FOR N=1 TO THISFORM.COMMANDGROUP1.BUTTONCOUNT
    THISFORM.COMMANDGROUP1.BUTTONS(N).CAPTION=SUBSTR(C,4*(N-1)+1,4)
    ENDFOR
    SELECT 學(xué)生
    INDEX ON 學(xué)號 TO XHI
    SELECT 課程
    INDEX ON 課程號 TO KCI
    SELECT 成績
    SET RELATION TO 學(xué)號 INTO 學(xué)生, 課程號 INTO 課程
    THISFORM.REFRESH
    2. COMMANDGROUP1 CLICK 事件代碼:
    SELECT 成績
    DO CASE
    CASE THIS.VALUE=1
    APPEND BLANK
    CASE THIS.VALUE=2
    DELETE
    CASE THIS.VALUE=3
    THISFORM.RELEASE
    CASE THIS.VALUE=4
    GO
    THIS.COMMAND4.ENABLED=.F.
    THIS.COMMAND5.ENABLED=.F.
    THIS.COMMAND6.ENABLED=.T.
    THIS.COMMAND7.ENABLED=.T.
    CASE THIS.VALUE=5
    SKIP -1
    IF BOF()
    THIS.COMMAND4.ENABLED=.F.
    THIS.COMMAND5.ENABLED=.F.
    ENDIF
    THIS.COMMAND6.ENABLED=.T.
    THIS.COMMAND7.ENABLED=.T.
    CASE THIS.VALUE=6
    GO BOTTOM
    THIS.COMMAND4.ENABLED=.T.
    THIS.COMMAND5.ENABLED=.T.
    THIS.COMMAND6.ENABLED=.F.
    THIS.COMMAND7.ENABLED=.F.
    CASE THIS.VALUE=7
    SKIP
    IF EOF()
    THIS.COMMAND6.ENABLED=.F.
    THIS.COMMAND7.ENABLED=.F.
    ENDIF
    THIS.COMMAND4.ENABLED=.T.
    THIS.COMMAND5.ENABLED=.T.
    ENDCASE
    THISFORM.REFRESH