表單程序設(shè)計(jì)
1.設(shè)計(jì)一個(gè)表單,界面如圖8.43,當(dāng)表單運(yùn)行時(shí),標(biāo)簽控件自動(dòng)從左向右移動(dòng)。
2.設(shè)計(jì)一個(gè)顯示中文日期的表單,并且可以實(shí)現(xiàn)日期的前翻和后翻,界面如圖8.44。
3.將文本框中輸入的金額轉(zhuǎn)換成中文大寫的形式,即將123.56轉(zhuǎn)換成壹佰貳拾叁元伍角陸分,高值為億。要求:數(shù)字金額轉(zhuǎn)換成中文大寫金額用方法來(lái)實(shí)現(xiàn),表單運(yùn)行輸入數(shù)據(jù)值金額后,調(diào)用這個(gè)方法。表單界面如圖8.45所示。
4.計(jì)算指定班級(jí)的獎(jiǎng)學(xué)金總額,表單界面如圖8.46所示。除了3個(gè)標(biāo)簽控件、3個(gè)文本框和兩個(gè)命令按鈕外,再添加3個(gè)形狀控件,將輸入值與顯示計(jì)算結(jié)果的區(qū)域、命令按鈕的區(qū)域區(qū)分開來(lái),并設(shè)置形狀控件的SpecialEffeect屬性為3維。注意:班級(jí)號(hào)不存在,通過對(duì)學(xué)號(hào)的截取來(lái)獲得,獎(jiǎng)學(xué)金總額是通過計(jì)算得到的。
5.顯示指定表文件中的全部字段名,表單界面如圖8.47所示。要求:表單運(yùn)行時(shí),在文本框中輸入表名(不包括擴(kuò)展名),在列表框中顯示指定表的全部字段名。
6.設(shè)計(jì)表單,查找指定班級(jí)學(xué)生的名單,表單界面如圖8.48所示。要求:表單剛運(yùn)行時(shí),文本框?yàn)榭瞻?,輸入班?jí)號(hào)后,按“確定”按鈕,將指定班級(jí)學(xué)生的姓名添加到組合框中,如果該班級(jí)不存在的話,用消息對(duì)話框提示班級(jí)不存在的信息。
7.設(shè)計(jì)一個(gè)計(jì)時(shí)器表單,用3個(gè)文本框分別顯示時(shí)、分、秒,界面如圖8.49所示。要求:表單剛運(yùn)行時(shí),各個(gè)文本框中顯示“00”。單擊“開始”按鈕后,從0開始計(jì)時(shí),單擊“停止”按鈕停止計(jì)時(shí),文本框中顯示當(dāng)前計(jì)時(shí)的值,單擊“退出”按鈕結(jié)束。
8.設(shè)計(jì)一個(gè)表單,查找指定學(xué)生的課程選修情況,其中Combo1的數(shù)據(jù)源為學(xué)生表的姓名,Label2的標(biāo)題根據(jù)組合框中的選擇而變化,界面如圖8.50所示。要求:表單運(yùn)行時(shí), Label2、List1是不可見的。在組合框中選擇姓名后,在List1中顯示該生選修的課程名和成績(jī)。
多表操作程序設(shè)計(jì)題
1.對(duì)學(xué)生“學(xué)籍”數(shù)據(jù)庫(kù)中的“學(xué)生”表,編寫一個(gè)輸入學(xué)生信息的程序,要求保證該表的實(shí)體完整性。用戶界面可以自行設(shè)計(jì)。
2.對(duì)學(xué)生“學(xué)籍”數(shù)據(jù)庫(kù)中的“學(xué)生”表,編寫一個(gè)按照“學(xué)號(hào)”修改某個(gè)學(xué)生信息的程序,要求保證該表的實(shí)體完整性。用戶界面可以自行設(shè)計(jì)。
3.表單的界面及控件布局情況如圖8.51和圖8.52所示,其中順序排列的控件Text1~Text6被放置在容器Container1中。該表單可實(shí)現(xiàn)查詢指定學(xué)生姓名的所修課程名及成績(jī)情況。具體要求如下:① 用戶可以在控件Combo1中輸入或選擇學(xué)生姓名;② 輸入或選擇學(xué)生姓名后,按回車或“確定”按鈕,可在表單的左部控件中以只讀方式顯示對(duì)應(yīng)的學(xué)號(hào)和學(xué)生姓名以及指定學(xué)生姓名所修各門課程的課程名和成績(jī)以及總平均金額;③ 課程名及成績(jī)顯示項(xiàng)可根據(jù)表中滿足條件的記錄個(gè)數(shù)動(dòng)態(tài)的調(diào)整,如果某學(xué)生尚無(wú)選修任何課程,則課程名及成績(jī)顯示項(xiàng)將不出現(xiàn)(包括顯示控件和顯示數(shù)據(jù)),且在總平均成績(jī)顯示項(xiàng)中顯示未選修任何課程的信息;④ 表單中命令按鈕的漢字標(biāo)題在表單執(zhí)行后會(huì)自動(dòng)顯現(xiàn)。編寫完成上述功能的事件代碼,要求寫明數(shù)據(jù)源的設(shè)置情況及各個(gè)事件的名稱及歸屬(假設(shè)銷售金額顯示項(xiàng)多不超過10項(xiàng))。
4.表單的界面及控件布局情況如圖8.53和圖8.54所示,其中順序排列的控件Command1~Command7屬于組容器Commandgroup1。該表單可實(shí)現(xiàn)學(xué)生“成績(jī)”表的編輯瀏覽操作,具體要求如下:可以隨時(shí)向成績(jī)表中添加新記錄;可以隨時(shí)刪除成績(jī)表中當(dāng)前指針?biāo)傅挠涗?可以隨時(shí)向前、后、表頭、表尾翻動(dòng)瀏覽記錄,當(dāng)指針到達(dá)表頭或表尾時(shí),自動(dòng)將相應(yīng)按鈕設(shè)為不可訪問;在添加或?yàn)g覽記錄時(shí),隨著學(xué)號(hào)的變化,相應(yīng)的姓名、課程號(hào)、課程名和成績(jī)會(huì)自動(dòng)地以只讀方式定位顯示;控件Command1~Command7的漢字標(biāo)題執(zhí)行后會(huì)自動(dòng)顯現(xiàn)。編寫完成上述功能的事件代碼,要求寫明數(shù)據(jù)源的設(shè)置情況及各個(gè)事件的名稱及歸屬。
習(xí)題答案:
表單程序設(shè)計(jì)
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="分角元拾佰仟萬(wàn)拾佰仟億"
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é)號(hào),1,4)=bjh
if found()
sum 學(xué)生.獎(jiǎng)學(xué)金 to jxj for substr(學(xué)號(hào),1,4)=bjh
thisform.text2.value=bjh
thisform.text3.value=jxj
else
thisform.text2.value=""
thisform.text3.value=""
messagebox("該班級(jí)不存在!")
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("指定的表文件不存在!請(qǐng)重新輸入!")
endif
thisform.refresh
6、
(1)command1的click事件代碼
bjh=alltrim(thisform.text1.value)
sele 學(xué)生
loca for substr(學(xué)號(hào),1,4)=bjh
thisform.combo1.clear
if found()
thisform.combo1.clear
thisform.combo1.displayvalue=學(xué)生.姓名
do while substr(學(xué)號(hào),1,4)=bjh
thisform.combo1.additem(學(xué)生.姓名)
skip
enddo
else
messagebox("沒有該班級(jí)")
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è)計(jì)題
操作步驟如下:
(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é)生”、“課程”、“成績(jī)”添加到數(shù)據(jù)環(huán)境中。
(4) 主要屬性設(shè)置:
表單 Form1 的Caption 屬性設(shè)置為 “學(xué)生成績(jī)查詢表單”
命令按紐Command1的Caption 屬性設(shè)置為 “確定”
命令按紐Command2的Caption 屬性設(shè)置為 “退出”
標(biāo)簽Label1的Caption 屬性設(shè)置為 “選擇姓名”
標(biāo)簽Label2的Caption 屬性設(shè)置為 “學(xué)號(hào)”
標(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é)號(hào)
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 成績(jī)
LOCATE FOR ALLTRIM(學(xué)號(hào))=ALLTRIM(XH)
DO WHILE ! EOF()
SELECT 課程
LOCATE FOR ALLTRIM(課程號(hào))=ALLTRIM(成績(jī).課程號(hào))
KCM=課程名
SELECT 成績(jī)
THISFORM.CONTAINER1.CONTROLS(L).VALUE=KCM+":"+STR(成績(jī),5,1)
THISFORM.CONTAINER1.CONTROLS(L).VISIBLE=.T.
S=S+成績(jī)
L=L+1
CONTINUE
ENDDO
IF L>1
THISFORM.TEXT3.VALUE="該生的總平均成績(jī)?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é)生”、“課程”、“成績(jī)”添加到數(shù)據(jù)環(huán)境中。
(3) 按題目要求在表單中加入控件:
命令按紐組Commandgroup1;
從數(shù)據(jù)環(huán)境中將“學(xué)生”表的“姓名”字段、“課程”表的“課程名”字段、“成績(jī)”表的“學(xué)號(hào)”字段、“成績(jī)”表的“課程號(hào)”字段、“成績(jī)”表的“成績(jī)”字段分別拖入表單對(duì)應(yīng)位置。
(4) 主要屬性設(shè)置:
表單 Form1 的Caption 屬性設(shè)置為 “學(xué)生成績(jī)表編輯表單”
命令按紐組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é)號(hào) TO XHI
SELECT 課程
INDEX ON 課程號(hào) TO KCI
SELECT 成績(jī)
SET RELATION TO 學(xué)號(hào) INTO 學(xué)生, 課程號(hào) INTO 課程
THISFORM.REFRESH
2. COMMANDGROUP1 CLICK 事件代碼:
SELECT 成績(jī)
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