VF課程設(shè)計點名系統(tǒng)-VF課程設(shè)計-VisualFoxPro課程設(shè)計-VFP課程設(shè)計
《VF課程設(shè)計點名系統(tǒng)-VF課程設(shè)計-VisualFoxPro課程設(shè)計-VFP課程設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《VF課程設(shè)計點名系統(tǒng)-VF課程設(shè)計-VisualFoxPro課程設(shè)計-VFP課程設(shè)計(22頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 VF課程設(shè)計-點名系統(tǒng) NO. 22 點名系統(tǒng)方案設(shè)計 1、課程設(shè)計的目的 數(shù)據(jù)庫基礎(chǔ)及應用是一門實用性很強的學科,是進行軟件開發(fā)的主要基礎(chǔ)。只有進行實際操作,才能將理論知識和實際應用有機地結(jié)合起來,鍛煉學生分析解決問題得能力,提高學生實際運用的技能,為日后工作中的軟件開發(fā)打下良好的基礎(chǔ)。 VFP是微軟公司推出的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它是一種地形的第四代計算機語言,VFP全面支持可視化編程和面向?qū)ο蟮木幊?,是最為使用的?shù)據(jù)庫管理系統(tǒng)和中小型數(shù)據(jù)庫應用系統(tǒng)的軟件開發(fā)之一,它為數(shù)據(jù)庫結(jié)構(gòu)和應用軟件開發(fā)而設(shè)計,是功能強大的面向?qū)ο蟮?/p>
2、軟件。本課程設(shè)計結(jié)合數(shù)據(jù)庫內(nèi)容,運用VFP設(shè)計,使學生掌握數(shù)據(jù)庫基礎(chǔ)內(nèi)容。 2、需求分析 2.1需求 在大學課堂中,課堂提問是上課環(huán)節(jié)中不可缺少的部分,也是教師與學生課堂互動,交流,最直接的方式。但在大學的課堂中缺存在一些問題。 對于學生來說,現(xiàn)在在大學生心理普遍的思想是:“千萬別點我!”,一旦被老師點到則:“哎呀媽呀!今天點子真背!那么多人,怎么就點到我了呢?!"。還有一種情況就是,有些同學每節(jié)課都被提問,有些同學整個學期都得不到一次提問機會。 對于教師來說,同樣存在一些提問上的問題。老師每次提問之前都會拿著點名表看了又看:“點誰好呢?”面對幾百人的課堂想在其中“公平的”選
3、出回答問題的同學,這是令我們教師非常頭疼的事情。 針對上述問題,提出程序設(shè)計需求如下: (1)此程序可以公平的選出提問的同學 (2)此程序可以排除掉已經(jīng)被提問過的同學 (3)此程序可以從提問次數(shù)少的同學中選一同學 (4)此程序可以為多個班級的同學提供點名服務(wù) (5)此程序最后可以打印出一個學期整體提問次數(shù)和分數(shù) (6)此程序可以提供最多的點名次數(shù)不少于15次 2.2分析 首先,內(nèi)部程序需要班級名次表作為點名表;對于公平的提問這一需求,可以使用VF自帶的隨機數(shù)函數(shù),隨機數(shù)函數(shù)可以返回一個隨機值,將這個隨機值作為學號來進行提問。每個班級每節(jié)課都配置一張?zhí)釂柋恚@樣
4、就可以為多個班級多個課程提供點名服務(wù)。 其次,對于“排除提問過的同學”這一需求可以這樣滿足:將點名表增加一個特殊的字段,把提問過的同學對應的字段做標記,用判斷語句判斷如果特殊字段已經(jīng)做了標記則下次不在提問。對于“從提問次數(shù)少的同學中選一個”需求可以這樣滿足:在點名表中增加一個次數(shù)字段,每次點名到時,將次數(shù)字段增加1次,點名時先中表中找到次數(shù)字段最少的同學提問,在使用隨機函數(shù)隨機選出一名同學。 最后,在程序中增加報表功能,報表中包括次次數(shù)、總分等滿足需求,對于“次數(shù)不少于15次”的需求,可以將表增加序列次數(shù)字段,每次提問都將獲得的分數(shù)存放到相應的次數(shù)中。 3、設(shè)計方案論證 3.1系統(tǒng)
5、結(jié)構(gòu) 3.2核心算法 3.2.1隨機數(shù)算法 在本程序中多次用到了隨機函數(shù),在VF中的rand()函數(shù)只能返回(0,1)之間的隨機數(shù),并不能返回我們需要的“學號”,因此我們必須對rand()函數(shù)做適當?shù)牟僮?,使其返回我們需要的“學號”。分析,假如一個班級有40名同學,那么隨機數(shù)算法給我們返回的數(shù)的范圍一定是在0~40之間。假如一個班級有100名同學,那么隨機數(shù)算法給我們返回的數(shù)的范圍一定是在0~100之間。因此根據(jù)數(shù)學算法,將rand()進行變形。 X=int(10000*rand()%(max-mix)+mix) 其中,max為序列的最大值,mix為序列的最小值,X為返回的隨機數(shù)
6、。 如,一個班級有40人,則max的值就為40,mix的值就為1。則X返回的隨機數(shù)一定在0~40之間。 3.2.2隨機查找算法 在隨機輸出“學號”時,有一種情況是我們沒有考慮到的:當2個或者很多個同學回答的都沒被提問過。換句話說,有n個同學的次數(shù)字段相同!那么我們就需要從這些回答次數(shù)相同的同學中隨機的選擇一個!具體算法程序如下,其中X為查找的次數(shù)字段。 located for cishu==X if found() skip int(10000*rand()%(mixx-1)+1) cont endif if found() 顯示此名同學的信息,
7、定位指針 else go top located for cishu==0 if found() 顯示此名同學的信息,定位指針 endif endif 下面的流程圖會幫助理解隨機查找算法 圖1:隨機查找算法流程圖 3.2.3中介表思想 在需求中教師不只是教一個班級,還有很多個班級,很多課要教,對點名模塊的設(shè)計絕對不能只對一個表操作,一定要有很多張表,且可以隨意切換,用戶選擇哪張表,就點哪張表內(nèi)的同學。首先,將用戶選擇的表所對應的表名存進一張“中介表”中;點名時在從“中介表”中“拿”出對應的表名,再在點名模塊中打開這張表進行操作
8、,思想體現(xiàn)如下: biao=thisform.text1.value use mediatable replace c with biao 其中,biao中存放的是用戶想點名的表的名字;mediatable為“中介表”;將biao中的內(nèi)容存放在mediatable的C字段中,每次在使用點名模塊點名的時候,都必須打開所有對應的表。 use mediatable biao=c close mediatable use &biao 點名主程序 3.2.4臨時表和數(shù)據(jù)環(huán)境問題 在生成報表設(shè)計時,通過用戶輸入想生成報表的點名表的表名生成報表。但點名表都是用戶自
9、行創(chuàng)建的,此表當然也不在數(shù)據(jù)環(huán)境中,報表操作時,表必須在當前的數(shù)據(jù)環(huán)境中,為了解決這一問題,可以將“臨時表”、“中介表”思想聯(lián)合到一起,首先新建一個名為“baobiao“的報表和一個叫“baobiao”的臨時表,將表“baobiao“加入當前數(shù)據(jù)環(huán)境中,生成報表時運行如下代碼: set talk off set safety off biao=thisform.text1.value use baobiao dele all &&邏輯刪除所有記錄 zap
10、 &&物理刪除所有記錄 append from &biao fields xh,xm,cishu,zongfen &&追加表項 report form baobiao to print preview &&瀏覽報表 thisform.release use &biao 首先將表“baobiao“的內(nèi)容刪除,然后將用戶選擇的表中相關(guān)字段的內(nèi)容加載到報 表“baobiao“中,并瀏覽報表“baobiao“中的內(nèi)容。 3.3表結(jié)構(gòu)設(shè)計 3.3.1 Student 表1:student表結(jié)構(gòu) 字段名 類型 寬度 備注
11、xh Xm cishu First Secondd fourth zongfen 數(shù)值型 字符型 數(shù)值型 數(shù)值型 數(shù)值型 數(shù)值型 數(shù)值型 8 10 3 2 2 2 3 用于存放學生的學號 用于存放學生的姓名 用于存放回答次數(shù) 用于存放回答次數(shù) 用于存放回答次數(shù) 用于存放回答次數(shù) 用于存放總分 3.3.2 Login 表2:login表的結(jié)構(gòu) 字段名 類型 長度 備注 name password 字符 字符 10 10 用于存放用于的登錄名 用于存放登錄的密碼 3.3.2mediatable 表3:mediat
12、able的結(jié)構(gòu) 字段名 類型 長度 備注 A B C D 字符 字符 字符 字符 10 10 10 10 用于存放中介變量的臨時字段 用于存放中介變量的臨時字段 用于存放中介變量的臨時字段 用于存放中介變量的臨時字段 3.4表單設(shè)計 3.4.1登錄框 圖2:登錄框的表單設(shè)計 其中的控件信息如下表所示: 表4:登錄框模塊中的控件 控件名 屬性名 屬性值 備注 Label1 Label2 Text1 caption Caption 用戶名 密碼 提示輸入用戶名 提示輸入密碼 Value 接收用戶名 續(xù)表4
13、: Test2 Command1 Command2 Command2 value Caption Caption 登錄 清除 接收用戶密碼 登錄按鈕 清除按鈕 Caption 退出 退出按鈕 以下是登錄框各個按鈕的click事件: 表5:登錄框代碼表 登錄 清除 退出 name=alltrim(thisform.text1.value) password=alltrim(thisform.text2.value) use login &&在login表里查找 locate for login.name==name and login.passw
14、ord==password if found() thisform.release do form 主頁面 &&打開主頁面 else messagebox("用戶名或密碼不正確","提示") thisform.text2.value="" thisform.text1.value="" thisform.text1.setfocus Endif thisform.text1.value="" thisform.text2.value="" Thisform.release 3.4.2普通點名 圖5:普通點名的表單設(shè)計 單擊“下一個”按鈕,可以顯示隨機函數(shù)返
15、回的隨機數(shù)。 “下一個”按鈕的click事件代碼為: use mediatable go top a0=val(mediatable.a) &&將從中介表接收的值存進當前變量 b0=val(mediatable.b) thisform.label1.caption=alltr(str(10000*rand()%(b0-a0)+a0)) &&隨機數(shù)算法 3.4.2普通設(shè)置 圖6:普通設(shè)計的表單設(shè)計 此表單可以將起始值,終止值存如程序中,單擊“確定”按鈕,完成設(shè)置。 “確定”按鈕的click事件的代碼為: aa=thisform.text1.v
16、alue bb=thisform.text2.value replace a with aa &&將獲得的初始值存進表中 replace b with bb messagebox("設(shè)置成功","提示") thisform.release 3.4.3高級點名 圖7:高級點名的表單設(shè)計 單擊“隨便選一個”按鈕可以隨機挑選一名同學。 “隨便選一個”按鈕的click事件代碼為: use mediatable biao=c thisform.label6.caption="正在使用"+allt(mediatable.c
17、)+"表" &&顯示當前使用的表 use mediatable xh=0 publ X use &biao &&利用宏替換打開表 mixx=recc() &&將表中的記錄數(shù)賦給變量mixx x=int(10000*rand()%(mixx-1)+1) &&隨機產(chǎn)生隨機數(shù) locate for xh==x if found() thisform.label1.caption="請"+allt(st
18、r(xh))+"號"+allt(xm)+"同學回答問題" replace cishu with cishu+1 &&將表中的cishu字段+1 thisform.label2.caption="請為"+allt(str(xh))+"號同學打分" thisform.label5.caption="未打分" endif pingjun=(first+secondd+third+fourth+fifth+sixth+seventh+………… +thirtieth)/30 int(pingjun)
19、&&計算平均分 thisform.label3.caption="這名同學已經(jīng)獲得"+allt(str(cishu))+"次提問的機會,平均分為"+allt(str(pingjun))+"分" 單擊“從沒點到的同學選一個”按鈕可以隨機挑選出一個同學。 “從沒點到的同學選一個”按鈕的click事件代碼為: use mediatable biao=mediatable.c thisform.label6.caption="正在使用"+allt(mediatable.c)+"表" use mediatable xh=0 use &biao
20、 &&利用宏替換打開表 go top mixx=recc() &&將表中的記錄數(shù)賦給變量mixx str(10000*rand()%(mixx-1)+1) &&隨機產(chǎn)生隨機數(shù) loca for cishu==0 if found() skip int(10000*rand()%(mixx-1)+1) &&向下條隨機數(shù)個記錄 cont endif if found() thisform.label1.caption="請"
21、+allt(str(xh))+"號"+allt(xm)+"同學回答問題" replace cishu with cishu+1 thisform.label2.caption="請為"+allt(str(xh))+"號同學打分" thisform.label5.caption="未打分" else endif pingjun=(first+secondd+third+fourth+fifth+sixth+seventh+eighth………… +thirtieth)/30 int(pingjun) thisform.label3.caption="
22、這名同學已經(jīng)獲得"+allt(str(cishu))+"次提問的機會,平均分為"+allt(str(pingjun))+"分" if eof()==.T. &&如果指針定位到表尾,說明沒有查找到 thisform.label3.caption="同學們至少被提問了一次,請選擇左側(cè)………提問一個次數(shù)少的同學" thisform.label1.caption="" endif 單擊“從次數(shù)少的同學中選一個”按鈕可以將隨機挑選一個回答次數(shù)少的同學。 “從次數(shù)少的同學中選一個”按鈕的click事件代碼為: use mediatable biao=me
23、diatable.c thisform.label6.caption="正在使用"+allt(mediatable.c)+"表" use mediatable use &biao &&利用宏替換打開表 go top mixx=recc() &&將表中的記錄數(shù)賦給變量mixx mix=cishu skip do while .not.eof() &&利用while循環(huán)找到cishu字段最少的值 if cish
24、u 25、 thisform.label2.caption="請為"+allt(str(xh))+"號同學打分"
thisform.label5.caption="未打分"
else
go top
loca for cishu==mix
if found()
thisform.label1.caption="請"+allt(str(xh))+"號"+allt(xm)+"同學回答問題"
replace cishu with cishu+1
thisform.label2.caption="請為"+allt(str 26、(xh))+"號同學打分"
thisform.label5.caption="未打分"
endif
endif
pingjun=(first+secondd+third+fourth+fifth+sixth+seventh+eight……twentynint+thirtieth)/30
int(pingjun)
thisform.label3.caption="這名同學已經(jīng)獲得"+allt(str(cishu))+"次提問的機會,平均分為"+allt(str(pingjun))+"分"
“打分條”按鈕組可以設(shè)置同學獲得的分數(shù)。
“打分條”的cl 27、ick事件代碼為:
do case
case this.value==1
thisform.label5.caption="該同學將獲得1分" &&每次點擊時,在label5上顯示狀態(tài)
case this.value==2
thisform.label5.caption="該同學將獲得2分"
case this.value==3
thisform.label5.caption="該同學將獲得3分"
case this.value==4
t 28、hisform.label5.caption="該同學將獲得4分"
case this.value==5
thisform.label5.caption="該同學將獲得5分"
endcase
“打分”按鈕的click事件代碼為:
n=thisform.optiongroup1.value &&將選項按鈕組的返回值賦給n
do case
case cishu==1 &&將次數(shù)對應的字段值賦予對應的分數(shù)
replace first with n
case 29、 cishu==2
replace secondd with n
(省略)
case cishu==30
replace thirtieth with n
endcase
thisform.label5.caption="打分成功"
3.4.4選擇表
圖8:選擇表的表單設(shè)計
單擊“使用”按鈕可以將想要點名的“表”輸入進程序。
“使用”按鈕的click事件代碼為:
biao=thisform.text1.value
use mediatable
replace c with biao 30、 &&將用戶的表名傳遞給中介表
wait "選擇成功" windows at 30,120 timeout 1
thisform.release
close tables
3.4.5選擇同學
圖9:打分的表單設(shè)計
點擊“打分”按鈕給同學打分。
“打分”按鈕的click事件代碼為:
xx=val(thisform.text1.value)
locate for xh==xx
if found ()
replace cishu with cishu+1 &&將當前cishu字段+1
e 31、lse
messagebox("未找到","提示")
endif
n=thisform.optiongroup1.value
do case
case cishu==1
replace first with n
case cishu==2
replace secondd with n
case cishu==3
replace third with n
case cishu==4
replace fourth with n
case cishu==5
replace fifth with n
(省略) 32、
case cishu==30
replace thirtieth with n
endcase
wait "打分成功" windows at 30,120 timeout 1
close tables
thisform.release
3.4.6查詢表
圖10:查詢的表單設(shè)計
“查詢”按鈕的click事件代碼為:
thisform.grid1.recordsource=thisform.text1.value
3.4.7生成報表
圖11:生成報表的表單設(shè)計
“生成”按鈕的click事件代碼為:
set talk off 33、 &&關(guān)閉安全提示
set safety off &&關(guān)閉安全提示
biao=thisform.text1.value
use baobiao
dele all &&邏輯刪除所有記錄
zap &&物理刪除所有記錄
append from &biao fields xh,xm,cishu,zongfen &&將用戶所輸入表中的內(nèi)容追加到中介表中
report form baobiao to print 34、preview &&閱覽中介表(報表)
thisform.release
use &biao
3.4.8修改表
圖11:編輯的表單設(shè)計
各個按鈕的click事件如下:
代碼表3.4.8
確定
添加
修改
刪除
publ biao
biao=alltrim(thisform.text1.value)
thisform.grid1.recordsource=biao
go bottom
append blank
edit
thisform.refresh
edit
thisform.refresh
temps 35、tr=messagebox("確定要刪除這個同學嗎?",4+32+256,"刪除記錄")
if tempstr=6
delete
pack
thisform.grid1.recordsource='學生'
thisform.refresh
endif
3.5菜單設(shè)計
表2:主菜單
一級菜單
二級菜單
過程代碼
文件
退出
Quit
點名
普通點名
高級點名
添加表
修改表
查詢
生成報表
Do form 普通點名
Do form 高級點名
Do form添加表
Do form修改表
Do form查詢
Do form生成報表
編輯 36、
3.6表設(shè)計
3.6.1中介表
表3:mediatable
A
B
C
D
3.6.2登錄表
表4:login
Name
password
王詩洋
123
admin
123
123
admin
3.6.3點名表
表5:student
Xh
Xm
cishu
First
Secondd
Thirth
Fourth
zongfen
1
李蕾
2
湯勤書
3
李純漪
4
鞠振東
5
趙曉宇
37、
6
趙海年
4、運行結(jié)果與反饋
4.1運行結(jié)果
4.1.1登錄模塊
輸入用戶名和密碼點擊“登錄”按鈕,如圖12所示。
圖12:登錄模塊運行結(jié)果
4.1.2普通點名模塊
打開菜單-點名-普通點名,點擊“設(shè)置”如圖13所示,并且設(shè)置隨機數(shù)范圍,點擊“確定”觀察到設(shè)置成功,回到普通點名模塊,點擊“下一個”觀察到有在范圍內(nèi)生成的隨機數(shù)如圖14所示:
圖13:設(shè)置隨機數(shù)范圍
圖14:產(chǎn)生的在范圍內(nèi)的隨機數(shù)
4.1.3高級點名模塊
選擇“高級點名”,高級點名主窗體打開,程序提示先選擇表,根據(jù)提示選擇想要點名的表,如圖15所示:
分 38、別點擊“隨便選一個”,“從沒點到的同學中選一個”,“從次數(shù)少的同學中選擇一個”按鈕,并且測試打分項目,如圖16,17.18所示:
圖16:隨便選一名同學
圖17:從沒點到的同學中選一個
圖18:成功為同學打分
點擊“給主要回答問題的同學打分”如圖19所示:
圖19:成功給主動回答問題的同學打分
4.1.4生成報表模塊
點擊編輯“報表”按鈕,在文本框中輸入想要生成報表的表名,點擊“確定”按鈕,如圖20所示:
圖20:生成報表模塊
4.2反饋
通過設(shè)計,現(xiàn)在所呈現(xiàn)的效果已基本達到預期效果,用VF制作的點名系統(tǒng)系統(tǒng)提供了點名功能,但是仍還有許多不足 39、之處,例如沒有考慮到用戶權(quán)限問題。我認為完善數(shù)據(jù)庫功能,讓內(nèi)部信息直接和網(wǎng)絡(luò)上的數(shù)據(jù)庫服務(wù)器上傳下載數(shù)據(jù),實時同步消息,期末匯總成分數(shù)表,這些問題在以后的學習中我會更多注意。
5、設(shè)計體會
通過這次的課程設(shè)計,我收獲了很多。在設(shè)計的過程中,我對課本的內(nèi)容有了進一步的了解,編程及調(diào)試程序的能力都得到了較大的提高。在寫第一個模塊還是比較輕松的,但我覺得第二個模塊對我的能力的提高更有幫助,每個模塊都調(diào)試了n多次,經(jīng)常報錯,當時真的很想砸電腦,不過當我寫完了之后又非常地高興很有成就感,從而促使我繼續(xù)下去。
整體感覺可以,但在表的創(chuàng)建和查看方面還應該加強。整個系統(tǒng)花了大概3個星期的時間,其中遇到問 40、題能夠耐下心來解決真的很不容易,VF是一個非常適合開發(fā)數(shù)據(jù)庫的軟件,其中自身自帶的數(shù)據(jù)庫語言也方便了我對學生表的查找。
之后我會繼續(xù)對點名系統(tǒng)完善,將這個系統(tǒng)的功能更加的完善,如,增加后端數(shù)據(jù)庫服務(wù)器,在WEB端使用,水平移植到android系統(tǒng)上,等等。
6、參考文獻
[1] 范立南,張 宇. Visual FoxPro程序設(shè)計與應用教程(第二版)[M]. 北京: 科學出版社, 2014.1
[2] 薩師煊 王 珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2000年2月第三版
[3] 劉 志, 杜小慧. 21天學會Visual FoxPro[M]. 北京: 北京大學出版社, 2010.1:123-130
沈 陽 大 學
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當頭廉字入心爭當公安隊伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅守廉潔底線
- 2025做擔當時代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會圍繞六個干字提要求
- XX地區(qū)中小學期末考試經(jīng)驗總結(jié)(認真復習輕松應考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展營造風清氣正的環(huán)境
- 冬季消防安全知識培訓冬季用電防火安全
- 2025加強政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓直播技巧與方法
- 2025六廉六進持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學期末考試經(jīng)驗總結(jié)(認真復習輕松應考)
- 幼兒園期末家長會長長的路慢慢地走