基于VFP6的成績(jī)統(tǒng)計(jì)系統(tǒng)(畢業(yè)設(shè)計(jì))_第1頁
基于VFP6的成績(jī)統(tǒng)計(jì)系統(tǒng)(畢業(yè)設(shè)計(jì))_第2頁
基于VFP6的成績(jī)統(tǒng)計(jì)系統(tǒng)(畢業(yè)設(shè)計(jì))_第3頁
基于VFP6的成績(jī)統(tǒng)計(jì)系統(tǒng)(畢業(yè)設(shè)計(jì))_第4頁
基于VFP6的成績(jī)統(tǒng)計(jì)系統(tǒng)(畢業(yè)設(shè)計(jì))_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

華中師范大學(xué)網(wǎng)絡(luò)教育學(xué)院本科畢業(yè)論文〔設(shè)計(jì)〕作者:指導(dǎo)老師:所在學(xué)習(xí)中心:所學(xué)專業(yè):學(xué)號(hào):年級(jí):完成日期:2003年12月5日基于VFP6的成績(jī)統(tǒng)計(jì)摘要:本文首先指出在教學(xué)工作中需要做一些成績(jī)統(tǒng)計(jì)工作并論證了用VFP實(shí)現(xiàn)的可能性。然后就所學(xué)的知識(shí),通過一定時(shí)間的再學(xué)習(xí),完成了基于VFP的成績(jī)統(tǒng)計(jì)工作。本文主要簡(jiǎn)述了設(shè)計(jì)的過程,說明了設(shè)計(jì)的重點(diǎn)、難點(diǎn)。最后指出了本程序有待改良的的地方。關(guān)鍵詞:VFP6、數(shù)據(jù)庫、表、記錄、查詢、報(bào)表目錄TOC\o"1-3"\h\z一、選題背景1二、方案論證1三、設(shè)計(jì)過程論述2〔一〕、根本程序的建立31、數(shù)據(jù)庫的結(jié)構(gòu)32、建立分級(jí)的文件目錄結(jié)構(gòu)43、建立工程文件及主程序。54、建立主界面表單及菜單工程55、建立工具欄66、分?jǐn)?shù)輸入的表單及功能實(shí)現(xiàn)77、查看分?jǐn)?shù)的表單及其功能實(shí)現(xiàn)98、查詢表單及其功能實(shí)現(xiàn)10〔二〕、成績(jī)統(tǒng)計(jì)的功能及其實(shí)現(xiàn)111、統(tǒng)計(jì)總分112、計(jì)算排名113、成績(jī)分析13〔三〕、報(bào)表設(shè)計(jì)及打印131、報(bào)表設(shè)計(jì)132、打印設(shè)計(jì)14〔四〕、擴(kuò)展到通用程序的嘗試14四、結(jié)果分析16致謝17附錄18附錄1:主程序18附錄2:顯示工具欄的程序19附錄3:按學(xué)號(hào)輸入分?jǐn)?shù)的界面19附錄4:增加記錄的主要程序20附錄5:查看班級(jí)成績(jī)表表單及程序21附錄6:查詢表單及其程序22附錄7:計(jì)算排名的程序23附錄8:分?jǐn)?shù)分析的表單及程序25附錄9:設(shè)計(jì)中的報(bào)表27附錄10:打印控制表單27附錄11:維護(hù)班級(jí)等的界面和程序29附錄12:小知識(shí)點(diǎn)聚集30參考文獻(xiàn)31正文:一、選題背景在實(shí)際的教學(xué)工作中,常常要對(duì)學(xué)生的考試成績(jī)進(jìn)行統(tǒng)計(jì)、分析,進(jìn)而有針對(duì)性地進(jìn)行教學(xué)、輔導(dǎo)等工作。單科教學(xué)要比擬學(xué)生在各次考試中的成績(jī)變化,分析原因,找到解決方法。作為班主任,要統(tǒng)計(jì)學(xué)生各門課程考分的上下、總分排名以及在年級(jí)中的排名等;還要分析學(xué)生的成績(jī)狀況,有無偏科等現(xiàn)象。這一些成績(jī)統(tǒng)計(jì)的工作,需要有一種簡(jiǎn)單快速準(zhǔn)確的方法來處理,我們可以設(shè)計(jì)一個(gè)計(jì)算機(jī)程序來完成成績(jī)輸入、統(tǒng)計(jì)、打印的功能。VisualFoxpro6.0是微軟發(fā)行的VisualStudio編程系列的組件之一。它是一個(gè)功能強(qiáng)大、可靠的數(shù)據(jù)庫管理系統(tǒng),可以用它來開發(fā)專業(yè)級(jí)的應(yīng)用程序。VFP采用面向?qū)ο蟮挠墒录?qū)動(dòng)的應(yīng)用程序設(shè)計(jì)方法,提供了可視化設(shè)計(jì)工具,對(duì)工程及數(shù)據(jù)庫管理的功能強(qiáng)大。所以我決定用VFP6來設(shè)計(jì)制作這個(gè)成績(jī)統(tǒng)計(jì)軟件。二、方案論證現(xiàn)在制作的軟件應(yīng)該有一個(gè)比擬人性化的界面,要具有現(xiàn)在常用Windows系列軟件的界面特征:有標(biāo)題欄、工具欄、工作窗口、對(duì)話框等。要有方便的操作界面,有提示、按鈕、幫助等,使用戶有熟悉的感覺,方便用戶使用軟件。這是當(dāng)今“可視化〞軟件設(shè)計(jì)的根本功能。在VFP6中是完全可以實(shí)現(xiàn)的。成績(jī)統(tǒng)計(jì)軟件應(yīng)該具有成績(jī)輸入、成績(jī)顯示、查詢、統(tǒng)計(jì)總分、計(jì)算名次等根本功能。還要考慮為教師或領(lǐng)導(dǎo)打印不同形式的報(bào)表,或給學(xué)生打印成績(jī)單等報(bào)表及打印的功能。這一些都是數(shù)據(jù)庫處理比擬常見的功能,也是可以在VFP6中實(shí)現(xiàn)的。最后,考慮程序統(tǒng)計(jì)軟件的通用性,最好能適應(yīng)不同的班級(jí)、不同的學(xué)期、不同的考試工程甚至不同的學(xué)校。這要求在設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)時(shí)要合理,并在程序中不指定專門的表,而采用通用的變量形式調(diào)用。這些要通過自己的學(xué)習(xí)分析來實(shí)現(xiàn),可以作為本程序第二階段的設(shè)計(jì)重點(diǎn)。三、設(shè)計(jì)過程論述因?yàn)樽约簩?duì)VFP6及數(shù)據(jù)庫設(shè)計(jì)理論并不是很精通,基于簡(jiǎn)單、根本結(jié)構(gòu)的考慮。我決定先設(shè)計(jì)一個(gè)固定班級(jí)、固定科目、固定考試工程的成績(jī)統(tǒng)計(jì)程序。在其中實(shí)現(xiàn)成績(jī)輸入、顯示、刪除、更改、查詢、計(jì)算排名、打印報(bào)表等功能。并考慮程序的通用性。開發(fā)和運(yùn)行環(huán)境選擇:開發(fā)工具:中文版VisualFoxPro6.0運(yùn)行環(huán)境:Windows9x、WindowsNT、Windows2000操作系統(tǒng)。〔一〕、根本程序的建立1、數(shù)據(jù)庫的結(jié)構(gòu)從程序的通用性考慮,建立數(shù)據(jù)庫school.dbc,在其中建立如下的數(shù)據(jù)表:班級(jí)編號(hào)表:ClassNo班級(jí)編號(hào)初一〔1〕班101…………初二〔3〕班203…………初三〔9〕班309…………學(xué)期編號(hào)表:TermNo班級(jí)編號(hào)上學(xué)期1下學(xué)期2考試編號(hào)表:TestNo考試工程編號(hào)第一次月考1第二次月考2期中考試3第三次月考4第四次月考5期末考試6科目表:KeNo科目編號(hào)語文1數(shù)學(xué)2英語3物理4化學(xué)5…………根本程序局部決定以“初三〔1〕班上學(xué)期第一次月考〞即表30111.dbf為例進(jìn)行制作。成績(jī)表編號(hào)表tableNo成績(jī)表編號(hào)初一〔1〕班上學(xué)期期中考試10113初三〔1〕班上學(xué)期第一次月考30111成績(jī)表根據(jù)用戶的選擇方式由程序自動(dòng)生成,具體成績(jī)排名表如:30111學(xué)號(hào)1姓名李靜語文86…………圖12、建立分級(jí)的文件目錄結(jié)構(gòu)圖1VFP6對(duì)程序中用到的各種資源分類管理,對(duì)編程者來說,最好建立不同的文件夾分類存放程序中用到的各種資料。否那么,隨著編程的深入,文件越來越多,會(huì)造成自己管理上的混亂。我建立的程序目錄結(jié)構(gòu)如圖1:在根目錄中存放主程序main.prg,和工程文件school.prg以及配置文件config.fpw等。Bitmap目錄下存放用到的各種圖形,data目錄下存放數(shù)據(jù)庫和數(shù)據(jù)表,forms目錄下存放表單,menus下放菜單文件,其它的文件放在else中。調(diào)用各類文件時(shí)采用相對(duì)路徑,如doforms\first或usedata\30111,這樣有利于程序的移植,只要將這個(gè)分級(jí)目錄全部移動(dòng),就可以保證程序的可執(zhí)行性。3、建立工程文件及主程序。工程管理器是VisualFoxpro的控制中心,用戶可通過該管理器創(chuàng)立、添加、刪除或移去各種數(shù)據(jù)庫文件,可以訪問各類設(shè)計(jì)器及向?qū)АK岳孟驅(qū)?chuàng)立工程文件,選擇位置為okone文件夾,與主程序在同一文件夾中,工程名為shool.prj。建立一個(gè)主程序,進(jìn)行調(diào)用表單及消息循環(huán)控制。注意將它保存在根目錄中,與工程文件shool.prj在一起,這樣便于以后采用相對(duì)目錄方式調(diào)用其它文件。主程序具體內(nèi)容見HYPERLINK附錄1。4、建立主界面表單及菜單工程圖2為使程序便于操作,容易讓用戶上手,決定在程序中使用菜單。新建菜單如圖2。圖2在view—generaloptions中設(shè)置為replace和Top—LevelForm將其放置在頂層表單中。注意在菜單中但凡會(huì)彈出一個(gè)新表單的工程都加上“…〞,這是Windows系列軟件的約定。新建主界面表單,將其設(shè)為“頂層表單〞即屬性ShowWindow=2,在其_Init事件中調(diào)用菜單domain.mprwiththis,并翻開數(shù)據(jù)庫及表。為簡(jiǎn)化程序和盡量標(biāo)準(zhǔn)化,在主表單的Load事件中選擇工作表1翻開要使用的表,程序如下:OPENDATABASEdata\school.dbcselect1usedata\30111setorderto1在destory事件中增加一句closedatabase和clearevent,否那么會(huì)有VFP主界面無法退出的現(xiàn)象。5、建立工具欄為方便用戶的操作,也建立工具欄。按照參考書上所講述的方法,建立按鈕類。如圖為讓其能在主表單中正確的顯示,我查閱了大量的資料并上網(wǎng)參考相關(guān)的程序源文件,經(jīng)過反復(fù)試驗(yàn),決定采用如下方法。(1)、建立工具欄的“按鈕類〞(2)、在主表單中先建立自定義屬性“tbrtools〞(3)、再在主表單的Activate事件中用程序創(chuàng)立工具欄工具按鈕的命令可采用doforminputfen形式調(diào)用表單或dozongfen調(diào)用程序或直接在其中編寫程序;從菜單中調(diào)用工具按鈕可以這樣:。具體程序見HYPERLINK附錄2。6、分?jǐn)?shù)輸入的表單及功能實(shí)現(xiàn)分?jǐn)?shù)輸入可以按照兩種方法,即按學(xué)號(hào)一次輸入一個(gè)學(xué)生的全部科目的分?jǐn)?shù)或者按科目一次輸入一個(gè)班級(jí)的某科的分?jǐn)?shù)。本著先易后難的原那么,決定先實(shí)現(xiàn)“按學(xué)號(hào)輸入〞的功能。(1)、新建表單inputfen為使該表單顯示在主表單中,需將主表單的MDIForm設(shè)為True,而設(shè)本表單的ShowWindow=1〔在頂層表單中〕。在其中用Label顯示提示文字,用Text顯示分?jǐn)?shù),用Text的Recordsource屬性顯示數(shù)據(jù)表中字段的值。用Button控制,用一個(gè)Grid顯示全部的分?jǐn)?shù)。當(dāng)全部界面設(shè)計(jì)完成后,將其BorderStyle設(shè)為1—fixedsingle,禁止用戶調(diào)整表單的大小。同時(shí)設(shè)置其WindowType=1,可以使得當(dāng)用戶不退出本表單時(shí),菜單不可用,并去掉最大化功能。下面的其它都這樣設(shè)置。最后的表單見HYPERLINK附錄3。(2)、增加記錄的功能按鈕的caption=“增加/下一個(gè)〞。在其click事件中編程:當(dāng)姓名、學(xué)號(hào)為空或已經(jīng)有相同的記錄時(shí),給出提示并處理。用insertto命令增加記錄,并刷新grid的顯示。要注意文本框中的輸入默認(rèn)是“字符型〞數(shù)據(jù),而各分?jǐn)?shù)字段被定義為“數(shù)值型〞的,所以必須在需要的地方進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換處理。否那么會(huì)有“Functionargumentvalue,typeorcountisinvalid〞的錯(cuò)誤提示。具體程序見HYPERLINK附錄4(3)、修改功能按鈕:Caption=“修改〞Name=“cmdedit〞。在進(jìn)入修改狀態(tài)時(shí),將增加按鈕設(shè)為無效,防止兩種操作混亂。在修改的click事件中,設(shè)定各文本框的recordsource屬性為對(duì)應(yīng)的字段就可以實(shí)時(shí)修改。修改完畢,在修改完畢的click事件中在清空recordsource屬性,并復(fù)原各按鈕的狀態(tài)。具體程序略。(4)、刪除功能刪除記錄分幾步進(jìn)行,先是用delete作刪除標(biāo)記,再用pack命令完全刪除。但是為了程序操作的友好性,防止用戶誤刪除,必須在刪除前給用戶一個(gè)提示,以確認(rèn)刪除。局部程序如下:messtxt=[真要?jiǎng)h除這條記錄嗎?]+chr(13)+chr(13)+[學(xué)號(hào):]+str(學(xué)號(hào))+[]+[姓名:]+姓名+chr(13)+[語文分?jǐn)?shù):]+str(語文)+chr(13)+[數(shù)學(xué)分?jǐn)?shù):]+str(數(shù)學(xué))+chr(13)+[英語=]+str(英語)*必須進(jìn)行字符到數(shù)字或相反的格式轉(zhuǎn)換,否那么有錯(cuò)誤:Operator/Operandtypemismatchmesstype=4+32+256&&是否按鈕+問號(hào)標(biāo)志+默認(rèn)值為第二個(gè)messtitle=[早知如此,何必當(dāng)初!]&&標(biāo)題欄isdeleted=messagebox(messtxt,messtype,messtitle)ifisdeleted=6deletewaitwindow[已刪除一條記錄!]nowaitelsewaitwindow[撤消刪除記錄!]nowaitendif7、查看分?jǐn)?shù)的表單及其功能實(shí)現(xiàn)本表單是為了讓用戶查看分?jǐn)?shù)的,可以設(shè)計(jì)兩種:個(gè)人成績(jī)單和班級(jí)成績(jī)單。(1)、個(gè)人成績(jī)單viewfen在本表單中一次顯示一個(gè)學(xué)生的成績(jī)及名次,等同于發(fā)放給學(xué)生的成績(jī)單。本表單比擬簡(jiǎn)單,只要設(shè)置文本框的recordsource屬性即可。為控制方便,設(shè)計(jì)了一個(gè)按鈕類,用skip命令來實(shí)現(xiàn)記錄的瀏覽。且可以放到其它的地方通用。如“上一個(gè)〞按鈕對(duì)應(yīng)的程序:skip-1ifbof()messagebox("已是第一個(gè)記錄",48,"信息窗口")this.parentmand1.enabled=.f.this.parentmand2.enabled=.f.elsethis.parentmand1.enabled=.t.this.parentmand2.enabled=.t.endifthis.parentmand3.enabled=.t.this.parentmand4.enabled=.t.thisform.refresh(2)、設(shè)計(jì)班級(jí)成績(jī)表viewfenall顯示全部成績(jī)只采用一個(gè)Grid表格即可,為方便查看,增加一個(gè)排序選擇,可以讓操作者對(duì)數(shù)據(jù)按排序后的方式查看。難點(diǎn)在于要根據(jù)用戶的不同選擇而產(chǎn)生不同的查看方式,所以采用select語句,設(shè)置表格的RecordSourceType=4(SQL說明),經(jīng)過調(diào)試,得到了正確的語句如下:findtemp=[select*fromdata\30111intocursortempdbforderby]+sort1+[]+sort1type表單結(jié)構(gòu)及完整的程序見HYPERLINK附錄5。8、查詢表單及其功能實(shí)現(xiàn)查詢?cè)O(shè)計(jì)主要是要提供用戶選擇查詢的字段,還要提供與、或的復(fù)合查找方式。本局部的技巧與上面的排序查看分?jǐn)?shù)相同,也是組合SQL語句的問題,關(guān)鍵程序語句如下:findsentence=[select*fromdata\30111where]+findwhat1+[intocursortempdbforderby學(xué)號(hào)]表單組成及完整的程序見HYPERLINK附錄六?!捕?、成績(jī)統(tǒng)計(jì)的功能及其實(shí)現(xiàn)1、統(tǒng)計(jì)總分即對(duì)各門功課進(jìn)行求和運(yùn)算,語句為dowhile.not.eof()replace總分with語文+數(shù)學(xué)+英語+物理+化學(xué)skipenddo因?yàn)槌绦虮葦M簡(jiǎn)單,所以沒有設(shè)計(jì)專門的表單顯示,只是一段專門獨(dú)立的程序,保存在else子文件夾中。方案增加計(jì)算總分的科目,如只統(tǒng)計(jì)語數(shù)外三門課的總分,或語數(shù)外理化或所有科目全部的總分。最好允許用戶自己選擇統(tǒng)計(jì)總分的科目。2、計(jì)算排名在VFP6中沒有象excel中的排名函數(shù)rank()一樣的已有函數(shù),必須自己設(shè)計(jì)排名算法。方法:先對(duì)排名字段進(jìn)行sort排序操作,生成臨時(shí)表:sorttemp,然后按序循環(huán)該表,對(duì)名次字段按照計(jì)數(shù)變量遞增進(jìn)行更新。最后用臨時(shí)表對(duì)照更新原表〔update〕。改良:上述方法沒有考慮到分?jǐn)?shù)相等時(shí)存在并列名次及名次間隔,所以要設(shè)計(jì)新的方法來實(shí)現(xiàn)。設(shè)計(jì)的N-S流程圖如下:對(duì)應(yīng)的程序局部如下:***計(jì)算排名的方法:注意分?jǐn)?shù)相等排名相同*********MyCountNum=1&&計(jì)算名次的變量tong=1&&某個(gè)名次相同的人的個(gè)數(shù)dowhile.not.eof()replace&sort3withMyCountNum&&它在根目錄下生成的臨時(shí)表fentemp=&sort3a&&計(jì)下臨時(shí)的分?jǐn)?shù)skip&&取下一條記錄iffentemp=&sort3athen&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)相等replace&sort3withMyCountNum&&不改變名次tong=tong+1&&相同的個(gè)數(shù)增加1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等iftong<>1thenMycountNum=MycountNum+tong&&名次變量要在以前的根底上增加相同名次人的個(gè)數(shù)tong=1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等并且也沒有名次相同的人MycountNum=MycountNum+1&&那么直接將名次變量增加1即可endifendifenddo**出現(xiàn)名次相等的情況,就會(huì)有“空名次〞的現(xiàn)象*********完整的程序見HYPERLINK附錄73、成績(jī)分析在這里計(jì)算最高分、最低分、平均分,并統(tǒng)計(jì)及格率、優(yōu)秀率并對(duì)各分?jǐn)?shù)段進(jìn)行人數(shù)統(tǒng)計(jì)、畫直方圖顯示。根據(jù)用戶的選擇進(jìn)行統(tǒng)計(jì),先排序生成臨時(shí)表。最高分即gototop后字段的值,最低分即gotobottom后字段的值,在標(biāo)簽中進(jìn)行顯示即可。中選擇一次對(duì)所有科目進(jìn)行分析時(shí),為對(duì)各字段重復(fù)調(diào)用上述過程,特將上述過程放到一個(gè)看不見的按鈕中,直接調(diào)用該按鈕的click。即。局部界面及程序見HYPERLINK附錄8〔三〕、報(bào)表設(shè)計(jì)及打印1、報(bào)表設(shè)計(jì)利用VFP6的報(bào)表設(shè)計(jì)器設(shè)計(jì)兩個(gè)報(bào)表:學(xué)生個(gè)人成績(jī)單rptdan和班級(jí)成績(jī)單rptall。注意頁標(biāo)頭和細(xì)節(jié)的設(shè)置。方案應(yīng)該可以編輯報(bào)表的標(biāo)題頭部及顯示時(shí)間,總之,盡量讓用戶參與報(bào)表的設(shè)計(jì),以打印出符合用戶要求的報(bào)表。在編程階段設(shè)計(jì)的報(bào)表,設(shè)計(jì)圖見HYPERLINK附錄92、打印設(shè)計(jì)提供用戶選擇欲打印的報(bào)表列表,并可以打印到文件中,且可以打印預(yù)覽。如打印預(yù)覽程序如下:ifthisformbo1.value=〞學(xué)生個(gè)人成績(jī)單〞r(shí)ptTemp=〞else\rptdan〞elserptTemp=〞else\rptall〞endifreportform(mainpath+rpttemp)preview為豐富報(bào)表的內(nèi)容,參加了時(shí)間〔年月日〕的顯示。打印控制的表單及局部程序見HYPERLINK附錄10〔四〕、擴(kuò)展到通用程序的嘗試1、制作管理班級(jí)、科目、考試工程的界面這些界面在操作上都是一樣的,只是翻開的數(shù)據(jù)表一樣。所以方案采用一個(gè)統(tǒng)一的窗體,根據(jù)條件改變響應(yīng)的顯示。為簡(jiǎn)化程序,各數(shù)據(jù)表的字段名都一樣,是“名稱〞和“編號(hào)〞。在窗口的界面上,直接套用“按學(xué)號(hào)錄入分?jǐn)?shù)〞的界面,僅作少量的修改即可。對(duì)應(yīng)不同的菜單執(zhí)行不同的操作,可以這樣實(shí)現(xiàn):菜單對(duì)應(yīng)的是“過程〞,在其中定義變量來區(qū)分菜單再運(yùn)行表單。注意在表單的form_load中,執(zhí)行翻開數(shù)據(jù)表的操作,而不能在form_init中翻開。具體的界面及程序見HYPERLINK附錄112、建立生成表、翻開表的界面生成表:根據(jù)用戶的選擇,查詢相應(yīng)的科目代碼,再組合成成績(jī)名次表的表名〔是純數(shù)字形式〕,由此生成具體的成績(jī)表結(jié)構(gòu),待用。注意保存表名的變量。翻開表:根據(jù)用戶的選擇,翻開表作為當(dāng)前工作的成績(jī)表。對(duì)此進(jìn)行各種操作。注意當(dāng)前的工作區(qū)和表名變量。3、在程序中使用表使用表時(shí),盡量采用選取工作區(qū)的方式使之成為當(dāng)前表。如果一定要使用表名,要采用別名或使用變量方式引用。具體地方具體處理:四、結(jié)果分析通過本程序的設(shè)計(jì),解決了分?jǐn)?shù)的輸入、顯示、修改、刪除、查詢以及統(tǒng)計(jì)總分、增加排名、分析最高分等功能。還可以進(jìn)行打印。這些功能經(jīng)過驗(yàn)證,都可以很好的運(yùn)行。但本程序還需要進(jìn)行擴(kuò)展,最需要的是用戶要可以進(jìn)行班級(jí)、科目、考試工程的自定義。在此根底上,統(tǒng)計(jì)全年級(jí)的年級(jí)排名,對(duì)全年級(jí)的分?jǐn)?shù)進(jìn)行分析。使本程序可以在所有學(xué)校通用,成為一個(gè)通用的成績(jī)統(tǒng)計(jì)程序。另外,還應(yīng)該加強(qiáng)成績(jī)的分析工作。如統(tǒng)計(jì)優(yōu)秀率、對(duì)考試分?jǐn)?shù)自動(dòng)產(chǎn)生分析評(píng)語,甚至可以根據(jù)每個(gè)學(xué)生的考試成績(jī)、班級(jí)年級(jí)排名而產(chǎn)生一個(gè)成績(jī)?cè)u(píng)語。本程序的源程序中附加了詳細(xì)的語句說明,反映了我在設(shè)計(jì)中的心得和摸索的過程,可以作為學(xué)習(xí)VFP6編程的重要參考資料?,F(xiàn)在存在的疑問:1、怎樣使打印預(yù)覽時(shí)系統(tǒng)自己翻開的工具欄直接顯示在窗口的上部而與自己設(shè)計(jì)的工具欄在一行?2、怎樣在Grid中顯示特定的字段?3、完全刪除(pack)后,怎樣在Grid中顯示結(jié)果?4、怎樣用程序指定報(bào)表的recordsource?5、怎樣連續(xù)播放背景音樂?致謝通過本設(shè)計(jì),我在工作之余、在緊張的畢業(yè)論文設(shè)計(jì)時(shí)間的情況下,熟悉了VFP編程的根本步驟。練習(xí)了一些數(shù)據(jù)庫設(shè)計(jì)、程序功能設(shè)計(jì)的方法。感覺在時(shí)間的逼迫下,通過到圖書館或Internet上查找資料和向老師咨詢,是可以完成方案中的任務(wù)的。在設(shè)計(jì)時(shí),我不斷的遇到問題、解決問題,在此過程中,我體會(huì)到成功的快樂。在此即將完成設(shè)計(jì)之時(shí),對(duì)我的指導(dǎo)老師華中師范大學(xué)的****表示感謝;并將我成功的快樂與我的丈夫***分享,感謝他在設(shè)計(jì)過程中對(duì)我的幫助。附錄附錄1:主程序*thisismainprogramClassName="初三(1)班"TestName="上學(xué)期第一次月考"rptTitle=""&&顯示報(bào)表標(biāo)題myTime=""&&顯示時(shí)間,變量不在這里定義,打印報(bào)表時(shí)會(huì)出現(xiàn)“找不到變量〞!tempTime=myTime*本程序放在個(gè)根目錄下,才可以采用相對(duì)目錄調(diào)用mypath=left(sys(16),rat("\",sys(16)))setdefato(mypath)&&設(shè)置默認(rèn)路徑mainpath=strtran(mypath,'data\','')ifnot(file("data\school.dbc"))&&相對(duì)目錄這樣寫即可setsafetyon&&翻開“覆蓋確認(rèn)〞的對(duì)話框createdatabase[school.dbc]filename=[30111.dbf]createtable(filename)(學(xué)號(hào)c(3),姓名c(8),總分c(4),語文c(4),數(shù)學(xué)c(4),英語c(4),物理c(4),化學(xué)c(4),班次c(3),語次c(3),數(shù)次c(3),英次c(3),物次c(3),化次c(3))indexon學(xué)號(hào)tag學(xué)號(hào)insertinto(alltrim(dbf()))(學(xué)號(hào),姓名,語文,數(shù)學(xué),英語,物理,化學(xué))values([11],[趙亮],[78.50],[92.00],[84.50],[52.00],[80.50])endif*_screen.left=-10000*加了上面的一句后,是看不見了。但是在任務(wù)欄上還是有指示。*在根目錄下增加了一個(gè)config.fpw的后綴名為fpw〔純文本文件〕就可以了doformforms\firstnamefirstreadevent*有時(shí)候,當(dāng)VFP的編程界面沒有關(guān)閉時(shí),運(yùn)行本程序的EXE,出現(xiàn)錯(cuò)誤:fileaccessisdenied,打不開數(shù)據(jù)庫。而大多時(shí)候都可以附錄2:顯示工具欄的程序在主窗口的Activate事件中:*要使用工具條必須先在表單frmtele中自定義屬性tbrtools*先翻開表單,再從菜單中選擇“form——newproperties...〞輸入tbrtools即可。*防止重復(fù)載入工具條IFTYPE("thisform.tbrtools")="O"AND; !ISNULL(thisform.tbrtools) RETURNENDIFSETCLASSLIBTO(mainpath+"else\myclass")additive用名稱表達(dá)式代替宏可更有效率thisform.tbrtools=createobject('mytoolbar')&&創(chuàng)立工具條this.tbrtools.dock(0)&&放置在屏幕頂端this.tbrtools.Show&&顯示工具條RELEASECLASSLIB(mainpath+"else\myclass")*增加了如上代碼后,就可以顯示工具欄了。這樣顯示不需要將自己建立的類手工放到窗口中,當(dāng)然也不需要建立“窗口集合〞。而是用以上代碼顯示窗口的。附錄3:按學(xué)號(hào)輸入分?jǐn)?shù)的界面附錄4:增加記錄的主要程序dimea[7]&&定義數(shù)組a=[]&&賦初值賦值這個(gè)數(shù)組的賦值有數(shù)字又有字符,怎么辦???a[1]=alltrim(This.parent.Text1.value)a[2]=alltrim(This.parent.Text2.value)&&姓名不需要將字符轉(zhuǎn)化為數(shù)字a[3]=alltrim(This.parent.Text3.value)a[4]=alltrim(This.parent.Text4.value)a[5]=alltrim(This.parent.Text5.value)a[6]=alltrim(This.parent.Text6.value)a[7]=alltrim(This.parent.Text7.value)dataname=alltrim(dbf())&&當(dāng)前翻開的數(shù)據(jù)庫名if(empty(a[1])ORempty(a[2]))messtxt=[姓名或性別不能為空!]messtype=0+64+0&&OK按鈕messtitle=[請(qǐng)注意!]=messagebox(messtxt,messtype,messtitle)elselocatefor(學(xué)號(hào)==val(a[1]))iffound()messtxt=[已有相同學(xué)號(hào)的記錄存在!]+chr(13);+chr(13);+[不能添加!]messtype=0+64+0&&OK按鈕*messtype=4+48+256&&是否按鈕+驚嘆號(hào)標(biāo)志+默認(rèn)值為第二個(gè)messtitle=[請(qǐng)注意!]=messagebox(messtxt,messtype,messtitle) else&&沒有相同記錄存在insertinto(dataname)(學(xué)號(hào),姓名,語文,數(shù)學(xué),英語,物理,化學(xué))values(val(a[1]),a[2],val(a[3]),val(a[4]),val(a[5]),val(a[6]),val(a[7]))waitwindow[新記錄已追加!]nowaitendif&&offoundendif&&ofempty()This.parent.Text1.setfocus&&焦點(diǎn)在text1上thisform.text1.value=""thisform.text2.value=""thisform.text3.value=""附錄5:查看班級(jí)成績(jī)表表單及程序sort1type=iif(thisform.optgroup1.value=1,[desc],[asc])sort2type=iif(thisform.optgroup2.value=1,[desc],[asc])select1usedata\30111if(thisform.check1.value=1andthisformbo1.value<>thisformbo2.value)findtemp=[select*fromdata\30111intocursortempdbforderby]+sort1+[]+sort1type+[,]+sort2+[]+sort2typeelse*select*fromdata\30111orderby數(shù)學(xué)asc先試驗(yàn)這句話正確findtemp=[select*fromdata\30111intocursortempdbforderby]+sort1+[]+sort1type*要使用“通用查詢方式,組合成以上的語句endifthisform.grid1.recordsource=findtemp附錄6:查詢表單及其程序select1*復(fù)合查找方式findone1=alltrim(thisformbfind1.value)findstyle1=alltrim(thisformbdeng1.value)iffindone1="姓名"thenfindvalue1='"'+alltrim(ThisForm.txtfind1.value)+'"'&&按“姓名〞查詢時(shí)的處理else&&姓名的輸入必須用“引號(hào)〞,所以作如上處理findvalue1=alltrim(ThisForm.txtfind1.value)endiffindwhat1=findone1+findstyle1+findvalue1findwhat2=""ifThisForm.check1.value=1*復(fù)合查找方式howfind=iif(ThisForm.Optgroup.value=1,[.and.],[.or.])findstyle2=thisformbdeng2.valuefindvalue2=alltrim(ThisForm.txtfind2.value)findwhat2=findone2+findstyle2+findvalue2*查找結(jié)果放入臨時(shí)表中findsentence=[select*fromdata\30111where]+findwhat1+howfind++findwhat2+[intocursortempdbforderby姓名]else*findsentence=[select*fromdata\30111where總分>435intocursortempdbforderby學(xué)號(hào)]findsentence=[select*fromdata\30111where]+findwhat1+[intocursortempdbforderby學(xué)號(hào)]endifthisform.txtfindall.value=findwhat1+findwhat2ThisForm.grid1.recordsource=findsentenceif_tally=0&&_tally變量代表當(dāng)前select命令處理過的記錄數(shù)??chr(7)=messagebox("沒有相匹配的記錄!",64,"找不到!")endif附錄7:計(jì)算排名的程序sort1=thisformbpai.value&&sort1是要排序的字段docasecasesort1="語文"sort2="語次"&&sort2是要更新的名次字段casesort1="數(shù)學(xué)"sort2="數(shù)次"casesort1="英語"sort2="英次"casesort1="物理"sort2="物次"casesort1="化學(xué)"sort2="化次"casesort1="總分"sort2="班次"endcaseselect1&&這一句不能沒有,否那么在不關(guān)閉本窗口第二次排名時(shí)沒有表sorttosorttempon&sort1/d&&根據(jù)所選擇的字段排序生成臨時(shí)表sort3a="sorttemp."+sort1&&構(gòu)成表名.字段格式這個(gè)是分?jǐn)?shù)字段sort3="sorttemp."+sort2&&這個(gè)是名次字段select16usesorttemp*indexon學(xué)號(hào)tagxuehao&&給臨時(shí)表增加索引*這句話千萬不能放在這里,否那么,總是將各科名次都排成“索引〞的名次****計(jì)算排名的方法:注意分?jǐn)?shù)相等排名相同*********MyCountNum=1&&計(jì)算名次的變量tong=1&&某個(gè)名次相同的人的個(gè)數(shù)dowhile.not.eof()replace&sort3withMyCountNum&&它在根目錄下生成的臨時(shí)表,翻開看,已經(jīng)給語次列參加了正確的數(shù)字名次!fentemp=&sort3a&&計(jì)下臨時(shí)的分?jǐn)?shù)skip&&取下一條記錄iffentemp=&sort3athen&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)相等replace&sort3withMyCountNum&&不改變名次tong=tong+1&&相同的個(gè)數(shù)增加1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等iftong<>1thenMycountNum=MycountNum+tong&&名次變量要在以前的根底上增加相同名次人的個(gè)數(shù)tong=1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等并且也沒有名次相同的人MycountNum=MycountNum+1&&那么直接將名次變量增加1即可endifendifenddo****出現(xiàn)名次相等的情況,就會(huì)有“空名次〞的現(xiàn)象*********select16indexon學(xué)號(hào)tagxuehao&&把這句放在這里就完全正常了select2usesorttempagainordertagxuehaoaliassortasort4="sorta."+sort2select1usedata\30111.dbfagainordertagxuehao&&必須這樣使用*updateon學(xué)號(hào)fromsortareplace語次withsorta.語次&&第一次是這樣使用的,改為通用格式updateon學(xué)號(hào)fromsortareplace&sort2with&sort4&&注意變量的應(yīng)用*以上是增加排名的方法:*先對(duì)欲增加排名的表排序,生成臨時(shí)表*然后按順序循環(huán)臨時(shí)表,用逐漸增加的數(shù)字更新臨時(shí)表的名次字段*最后,用臨時(shí)表來對(duì)應(yīng)更新最初的表。成功!*下面還應(yīng)該刪除臨時(shí)表select16&&在刪除前先要關(guān)閉useselect2&&還必須關(guān)閉這個(gè)工作區(qū),因?yàn)樵摫碓谄渲幸脖环_了use&&否那么總有“該表正在使用的錯(cuò)誤〞erasesorttemp.cdxerasesorttemp.dbf&&刪除臨時(shí)表及索引表select1findtemp=[select*fromdata\30111intocursortempdbforderby]+sort1+[desc]thisform.grid1.recordsource=findtemp附錄8:分?jǐn)?shù)分析的表單及程序thisform.lblke.caption=sort1select1&&根據(jù)所選擇的字段排序生成臨時(shí)表sorttofenxitempon&sort1/dselect5&&使用這種方法,還是會(huì)在根目錄下生成臨時(shí)文件usefenxitemp&&所以必須在主窗體的destore事件中再刪除gototoptempMax=&sort1gotobottomtempMin=&sort1docasecasesort1="語文"Maxyuwen=tempmaxMinyuwen=tempminthisform.label14.caption=str(Maxyuwen)thisform.label15.caption=str(tempmin)casesort1="數(shù)學(xué)"Maxmaths=tempmaxMinmaths=tempminthisform.label17.caption=str(Maxmaths)thisform.label18.caption=str(tempmin)casesort1="英語"MaxEng=tempmaxMinEng=tempminthisform.label20.caption=str(tempMax)thisform.label21.caption=str(tempmin)casesort1="物理"thisform.label23.caption=str(tempMax)thisform.label24.caption=str(tempmin)iftempMin<60thisform.label24.forecolor=rgb(255,0,0)endifcasesort1="化學(xué)"thisform.label26.caption=str(tempMax)thisform.label27.caption=str(tempmin)iftempMin<60thisform.label27.forecolor=rgb(255,0,0)endifcasesort1="總分"thisform.label29.caption=str(tempMax)thisform.label30.caption=str(tempmin)endcaseselect5useerasefenxitemp.dbf附錄9:設(shè)計(jì)中的報(bào)表附錄10:打印控制表單“開始〞按鈕對(duì)應(yīng)的程序:sort1type=iif(thisform.optgroup1.value=1,[desc],[asc])iffile("prttemp.dbf")&&如果存在臨時(shí)表,先刪除表select9useeraseprttemp.dbfendifselect1&&根據(jù)所選擇的字段排序生成臨時(shí)表sorttoprttempon&sort1/&sort1typeselect9useprttempifthisformbo1.value="學(xué)生個(gè)人成績(jī)單"ifrpttitle=""rpttitle="初三年級(jí)九月份月考學(xué)生個(gè)人成績(jī)單"endifrptTemp="else\rptdan"elseifrpttitle=""rpttitle="初三年級(jí)九月份月考成績(jī)班級(jí)一覽表"endifrptTemp="else\rptall"endifDOCASECASEthisform.opgOutput.optPrinter.Value=1&&Toprinterreportform(mainpath+rpttemp)NOCONSOLETOPRINTERPROMPTmesstxt=[成績(jī)表打印完畢!]CASEthisform.opgOutput.optFile.Value=1&&Tofileprnfile=alltrim(ThisForm.txtfilename.value)COPYTO(prnfile)DELIMITEDmesstxt=[文本文件:]+chr(13)+prnfile+chr(13)+[打印完畢!]ENDCASEmesstype=0+64+0&&OK按鈕messtitle=[搞定啦!]&&標(biāo)題欄=messagebox(messtxt,messtype,messtitle)附錄11:維護(hù)班級(jí)等的界面和程序for

溫馨提示

  • 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)論