版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
華中師范大學(xué)網(wǎng)絡(luò)教育學(xué)院本科畢業(yè)論文〔設(shè)計〕作者:指導(dǎo)老師:所在學(xué)習(xí)中心:所學(xué)專業(yè):學(xué)號:年級:完成日期:2003年12月5日基于VFP6的成績統(tǒng)計摘要:本文首先指出在教學(xué)工作中需要做一些成績統(tǒng)計工作并論證了用VFP實現(xiàn)的可能性。然后就所學(xué)的知識,通過一定時間的再學(xué)習(xí),完成了基于VFP的成績統(tǒng)計工作。本文主要簡述了設(shè)計的過程,說明了設(shè)計的重點、難點。最后指出了本程序有待改良的的地方。關(guān)鍵詞:VFP6、數(shù)據(jù)庫、表、記錄、查詢、報表目錄TOC\o"1-3"\h\z一、選題背景1二、方案論證1三、設(shè)計過程論述2〔一〕、根本程序的建立31、數(shù)據(jù)庫的結(jié)構(gòu)32、建立分級的文件目錄結(jié)構(gòu)43、建立工程文件及主程序。54、建立主界面表單及菜單工程55、建立工具欄66、分?jǐn)?shù)輸入的表單及功能實現(xiàn)77、查看分?jǐn)?shù)的表單及其功能實現(xiàn)98、查詢表單及其功能實現(xiàn)10〔二〕、成績統(tǒng)計的功能及其實現(xiàn)111、統(tǒng)計總分112、計算排名113、成績分析13〔三〕、報表設(shè)計及打印131、報表設(shè)計132、打印設(shè)計14〔四〕、擴展到通用程序的嘗試14四、結(jié)果分析16致謝17附錄18附錄1:主程序18附錄2:顯示工具欄的程序19附錄3:按學(xué)號輸入分?jǐn)?shù)的界面19附錄4:增加記錄的主要程序20附錄5:查看班級成績表表單及程序21附錄6:查詢表單及其程序22附錄7:計算排名的程序23附錄8:分?jǐn)?shù)分析的表單及程序25附錄9:設(shè)計中的報表27附錄10:打印控制表單27附錄11:維護班級等的界面和程序29附錄12:小知識點聚集30參考文獻31正文:一、選題背景在實際的教學(xué)工作中,常常要對學(xué)生的考試成績進行統(tǒng)計、分析,進而有針對性地進行教學(xué)、輔導(dǎo)等工作。單科教學(xué)要比擬學(xué)生在各次考試中的成績變化,分析原因,找到解決方法。作為班主任,要統(tǒng)計學(xué)生各門課程考分的上下、總分排名以及在年級中的排名等;還要分析學(xué)生的成績狀況,有無偏科等現(xiàn)象。這一些成績統(tǒng)計的工作,需要有一種簡單快速準(zhǔn)確的方法來處理,我們可以設(shè)計一個計算機程序來完成成績輸入、統(tǒng)計、打印的功能。VisualFoxpro6.0是微軟發(fā)行的VisualStudio編程系列的組件之一。它是一個功能強大、可靠的數(shù)據(jù)庫管理系統(tǒng),可以用它來開發(fā)專業(yè)級的應(yīng)用程序。VFP采用面向?qū)ο蟮挠墒录?qū)動的應(yīng)用程序設(shè)計方法,提供了可視化設(shè)計工具,對工程及數(shù)據(jù)庫管理的功能強大。所以我決定用VFP6來設(shè)計制作這個成績統(tǒng)計軟件。二、方案論證現(xiàn)在制作的軟件應(yīng)該有一個比擬人性化的界面,要具有現(xiàn)在常用Windows系列軟件的界面特征:有標(biāo)題欄、工具欄、工作窗口、對話框等。要有方便的操作界面,有提示、按鈕、幫助等,使用戶有熟悉的感覺,方便用戶使用軟件。這是當(dāng)今“可視化〞軟件設(shè)計的根本功能。在VFP6中是完全可以實現(xiàn)的。成績統(tǒng)計軟件應(yīng)該具有成績輸入、成績顯示、查詢、統(tǒng)計總分、計算名次等根本功能。還要考慮為教師或領(lǐng)導(dǎo)打印不同形式的報表,或給學(xué)生打印成績單等報表及打印的功能。這一些都是數(shù)據(jù)庫處理比擬常見的功能,也是可以在VFP6中實現(xiàn)的。最后,考慮程序統(tǒng)計軟件的通用性,最好能適應(yīng)不同的班級、不同的學(xué)期、不同的考試工程甚至不同的學(xué)校。這要求在設(shè)計數(shù)據(jù)庫結(jié)構(gòu)時要合理,并在程序中不指定專門的表,而采用通用的變量形式調(diào)用。這些要通過自己的學(xué)習(xí)分析來實現(xiàn),可以作為本程序第二階段的設(shè)計重點。三、設(shè)計過程論述因為自己對VFP6及數(shù)據(jù)庫設(shè)計理論并不是很精通,基于簡單、根本結(jié)構(gòu)的考慮。我決定先設(shè)計一個固定班級、固定科目、固定考試工程的成績統(tǒng)計程序。在其中實現(xiàn)成績輸入、顯示、刪除、更改、查詢、計算排名、打印報表等功能。并考慮程序的通用性。開發(fā)和運行環(huán)境選擇:開發(fā)工具:中文版VisualFoxPro6.0運行環(huán)境:Windows9x、WindowsNT、Windows2000操作系統(tǒng)?!惨弧?、根本程序的建立1、數(shù)據(jù)庫的結(jié)構(gòu)從程序的通用性考慮,建立數(shù)據(jù)庫school.dbc,在其中建立如下的數(shù)據(jù)表:班級編號表:ClassNo班級編號初一〔1〕班101…………初二〔3〕班203…………初三〔9〕班309…………學(xué)期編號表:TermNo班級編號上學(xué)期1下學(xué)期2考試編號表:TestNo考試工程編號第一次月考1第二次月考2期中考試3第三次月考4第四次月考5期末考試6科目表:KeNo科目編號語文1數(shù)學(xué)2英語3物理4化學(xué)5…………根本程序局部決定以“初三〔1〕班上學(xué)期第一次月考〞即表30111.dbf為例進行制作。成績表編號表tableNo成績表編號初一〔1〕班上學(xué)期期中考試10113初三〔1〕班上學(xué)期第一次月考30111成績表根據(jù)用戶的選擇方式由程序自動生成,具體成績排名表如:30111學(xué)號1姓名李靜語文86…………圖12、建立分級的文件目錄結(jié)構(gòu)圖1VFP6對程序中用到的各種資源分類管理,對編程者來說,最好建立不同的文件夾分類存放程序中用到的各種資料。否那么,隨著編程的深入,文件越來越多,會造成自己管理上的混亂。我建立的程序目錄結(jié)構(gòu)如圖1:在根目錄中存放主程序main.prg,和工程文件school.prg以及配置文件config.fpw等。Bitmap目錄下存放用到的各種圖形,data目錄下存放數(shù)據(jù)庫和數(shù)據(jù)表,forms目錄下存放表單,menus下放菜單文件,其它的文件放在else中。調(diào)用各類文件時采用相對路徑,如doforms\first或usedata\30111,這樣有利于程序的移植,只要將這個分級目錄全部移動,就可以保證程序的可執(zhí)行性。3、建立工程文件及主程序。工程管理器是VisualFoxpro的控制中心,用戶可通過該管理器創(chuàng)立、添加、刪除或移去各種數(shù)據(jù)庫文件,可以訪問各類設(shè)計器及向?qū)АK岳孟驅(qū)?chuàng)立工程文件,選擇位置為okone文件夾,與主程序在同一文件夾中,工程名為shool.prj。建立一個主程序,進行調(diào)用表單及消息循環(huán)控制。注意將它保存在根目錄中,與工程文件shool.prj在一起,這樣便于以后采用相對目錄方式調(diào)用其它文件。主程序具體內(nèi)容見HYPERLINK附錄1。4、建立主界面表單及菜單工程圖2為使程序便于操作,容易讓用戶上手,決定在程序中使用菜單。新建菜單如圖2。圖2在view—generaloptions中設(shè)置為replace和Top—LevelForm將其放置在頂層表單中。注意在菜單中但凡會彈出一個新表單的工程都加上“…〞,這是Windows系列軟件的約定。新建主界面表單,將其設(shè)為“頂層表單〞即屬性ShowWindow=2,在其_Init事件中調(diào)用菜單domain.mprwiththis,并翻開數(shù)據(jù)庫及表。為簡化程序和盡量標(biāo)準(zhǔn)化,在主表單的Load事件中選擇工作表1翻開要使用的表,程序如下:OPENDATABASEdata\school.dbcselect1usedata\30111setorderto1在destory事件中增加一句closedatabase和clearevent,否那么會有VFP主界面無法退出的現(xiàn)象。5、建立工具欄為方便用戶的操作,也建立工具欄。按照參考書上所講述的方法,建立按鈕類。如圖為讓其能在主表單中正確的顯示,我查閱了大量的資料并上網(wǎng)參考相關(guān)的程序源文件,經(jīng)過反復(fù)試驗,決定采用如下方法。(1)、建立工具欄的“按鈕類〞(2)、在主表單中先建立自定義屬性“tbrtools〞(3)、再在主表單的Activate事件中用程序創(chuàng)立工具欄工具按鈕的命令可采用doforminputfen形式調(diào)用表單或dozongfen調(diào)用程序或直接在其中編寫程序;從菜單中調(diào)用工具按鈕可以這樣:。具體程序見HYPERLINK附錄2。6、分?jǐn)?shù)輸入的表單及功能實現(xiàn)分?jǐn)?shù)輸入可以按照兩種方法,即按學(xué)號一次輸入一個學(xué)生的全部科目的分?jǐn)?shù)或者按科目一次輸入一個班級的某科的分?jǐn)?shù)。本著先易后難的原那么,決定先實現(xiàn)“按學(xué)號輸入〞的功能。(1)、新建表單inputfen為使該表單顯示在主表單中,需將主表單的MDIForm設(shè)為True,而設(shè)本表單的ShowWindow=1〔在頂層表單中〕。在其中用Label顯示提示文字,用Text顯示分?jǐn)?shù),用Text的Recordsource屬性顯示數(shù)據(jù)表中字段的值。用Button控制,用一個Grid顯示全部的分?jǐn)?shù)。當(dāng)全部界面設(shè)計完成后,將其BorderStyle設(shè)為1—fixedsingle,禁止用戶調(diào)整表單的大小。同時設(shè)置其WindowType=1,可以使得當(dāng)用戶不退出本表單時,菜單不可用,并去掉最大化功能。下面的其它都這樣設(shè)置。最后的表單見HYPERLINK附錄3。(2)、增加記錄的功能按鈕的caption=“增加/下一個〞。在其click事件中編程:當(dāng)姓名、學(xué)號為空或已經(jīng)有相同的記錄時,給出提示并處理。用insertto命令增加記錄,并刷新grid的顯示。要注意文本框中的輸入默認(rèn)是“字符型〞數(shù)據(jù),而各分?jǐn)?shù)字段被定義為“數(shù)值型〞的,所以必須在需要的地方進行數(shù)據(jù)類型的轉(zhuǎn)換處理。否那么會有“Functionargumentvalue,typeorcountisinvalid〞的錯誤提示。具體程序見HYPERLINK附錄4(3)、修改功能按鈕:Caption=“修改〞Name=“cmdedit〞。在進入修改狀態(tài)時,將增加按鈕設(shè)為無效,防止兩種操作混亂。在修改的click事件中,設(shè)定各文本框的recordsource屬性為對應(yīng)的字段就可以實時修改。修改完畢,在修改完畢的click事件中在清空recordsource屬性,并復(fù)原各按鈕的狀態(tài)。具體程序略。(4)、刪除功能刪除記錄分幾步進行,先是用delete作刪除標(biāo)記,再用pack命令完全刪除。但是為了程序操作的友好性,防止用戶誤刪除,必須在刪除前給用戶一個提示,以確認(rèn)刪除。局部程序如下:messtxt=[真要刪除這條記錄嗎?]+chr(13)+chr(13)+[學(xué)號:]+str(學(xué)號)+[]+[姓名:]+姓名+chr(13)+[語文分?jǐn)?shù):]+str(語文)+chr(13)+[數(shù)學(xué)分?jǐn)?shù):]+str(數(shù)學(xué))+chr(13)+[英語=]+str(英語)*必須進行字符到數(shù)字或相反的格式轉(zhuǎn)換,否那么有錯誤:Operator/Operandtypemismatchmesstype=4+32+256&&是否按鈕+問號標(biāo)志+默認(rèn)值為第二個messtitle=[早知如此,何必當(dāng)初!]&&標(biāo)題欄isdeleted=messagebox(messtxt,messtype,messtitle)ifisdeleted=6deletewaitwindow[已刪除一條記錄!]nowaitelsewaitwindow[撤消刪除記錄!]nowaitendif7、查看分?jǐn)?shù)的表單及其功能實現(xiàn)本表單是為了讓用戶查看分?jǐn)?shù)的,可以設(shè)計兩種:個人成績單和班級成績單。(1)、個人成績單viewfen在本表單中一次顯示一個學(xué)生的成績及名次,等同于發(fā)放給學(xué)生的成績單。本表單比擬簡單,只要設(shè)置文本框的recordsource屬性即可。為控制方便,設(shè)計了一個按鈕類,用skip命令來實現(xiàn)記錄的瀏覽。且可以放到其它的地方通用。如“上一個〞按鈕對應(yīng)的程序:skip-1ifbof()messagebox("已是第一個記錄",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è)計班級成績表viewfenall顯示全部成績只采用一個Grid表格即可,為方便查看,增加一個排序選擇,可以讓操作者對數(shù)據(jù)按排序后的方式查看。難點在于要根據(jù)用戶的不同選擇而產(chǎn)生不同的查看方式,所以采用select語句,設(shè)置表格的RecordSourceType=4(SQL說明),經(jīng)過調(diào)試,得到了正確的語句如下:findtemp=[select*fromdata\30111intocursortempdbforderby]+sort1+[]+sort1type表單結(jié)構(gòu)及完整的程序見HYPERLINK附錄5。8、查詢表單及其功能實現(xiàn)查詢設(shè)計主要是要提供用戶選擇查詢的字段,還要提供與、或的復(fù)合查找方式。本局部的技巧與上面的排序查看分?jǐn)?shù)相同,也是組合SQL語句的問題,關(guān)鍵程序語句如下:findsentence=[select*fromdata\30111where]+findwhat1+[intocursortempdbforderby學(xué)號]表單組成及完整的程序見HYPERLINK附錄六?!捕?、成績統(tǒng)計的功能及其實現(xiàn)1、統(tǒng)計總分即對各門功課進行求和運算,語句為dowhile.not.eof()replace總分with語文+數(shù)學(xué)+英語+物理+化學(xué)skipenddo因為程序比擬簡單,所以沒有設(shè)計專門的表單顯示,只是一段專門獨立的程序,保存在else子文件夾中。方案增加計算總分的科目,如只統(tǒng)計語數(shù)外三門課的總分,或語數(shù)外理化或所有科目全部的總分。最好允許用戶自己選擇統(tǒng)計總分的科目。2、計算排名在VFP6中沒有象excel中的排名函數(shù)rank()一樣的已有函數(shù),必須自己設(shè)計排名算法。方法:先對排名字段進行sort排序操作,生成臨時表:sorttemp,然后按序循環(huán)該表,對名次字段按照計數(shù)變量遞增進行更新。最后用臨時表對照更新原表〔update〕。改良:上述方法沒有考慮到分?jǐn)?shù)相等時存在并列名次及名次間隔,所以要設(shè)計新的方法來實現(xiàn)。設(shè)計的N-S流程圖如下:對應(yīng)的程序局部如下:***計算排名的方法:注意分?jǐn)?shù)相等排名相同*********MyCountNum=1&&計算名次的變量tong=1&&某個名次相同的人的個數(shù)dowhile.not.eof()replace&sort3withMyCountNum&&它在根目錄下生成的臨時表fentemp=&sort3a&&計下臨時的分?jǐn)?shù)skip&&取下一條記錄iffentemp=&sort3athen&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)相等replace&sort3withMyCountNum&&不改變名次tong=tong+1&&相同的個數(shù)增加1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等iftong<>1thenMycountNum=MycountNum+tong&&名次變量要在以前的根底上增加相同名次人的個數(shù)tong=1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等并且也沒有名次相同的人MycountNum=MycountNum+1&&那么直接將名次變量增加1即可endifendifenddo**出現(xiàn)名次相等的情況,就會有“空名次〞的現(xiàn)象*********完整的程序見HYPERLINK附錄73、成績分析在這里計算最高分、最低分、平均分,并統(tǒng)計及格率、優(yōu)秀率并對各分?jǐn)?shù)段進行人數(shù)統(tǒng)計、畫直方圖顯示。根據(jù)用戶的選擇進行統(tǒng)計,先排序生成臨時表。最高分即gototop后字段的值,最低分即gotobottom后字段的值,在標(biāo)簽中進行顯示即可。中選擇一次對所有科目進行分析時,為對各字段重復(fù)調(diào)用上述過程,特將上述過程放到一個看不見的按鈕中,直接調(diào)用該按鈕的click。即。局部界面及程序見HYPERLINK附錄8〔三〕、報表設(shè)計及打印1、報表設(shè)計利用VFP6的報表設(shè)計器設(shè)計兩個報表:學(xué)生個人成績單rptdan和班級成績單rptall。注意頁標(biāo)頭和細(xì)節(jié)的設(shè)置。方案應(yīng)該可以編輯報表的標(biāo)題頭部及顯示時間,總之,盡量讓用戶參與報表的設(shè)計,以打印出符合用戶要求的報表。在編程階段設(shè)計的報表,設(shè)計圖見HYPERLINK附錄92、打印設(shè)計提供用戶選擇欲打印的報表列表,并可以打印到文件中,且可以打印預(yù)覽。如打印預(yù)覽程序如下:ifthisformbo1.value=〞學(xué)生個人成績單〞rptTemp=〞else\rptdan〞elserptTemp=〞else\rptall〞endifreportform(mainpath+rpttemp)preview為豐富報表的內(nèi)容,參加了時間〔年月日〕的顯示。打印控制的表單及局部程序見HYPERLINK附錄10〔四〕、擴展到通用程序的嘗試1、制作管理班級、科目、考試工程的界面這些界面在操作上都是一樣的,只是翻開的數(shù)據(jù)表一樣。所以方案采用一個統(tǒng)一的窗體,根據(jù)條件改變響應(yīng)的顯示。為簡化程序,各數(shù)據(jù)表的字段名都一樣,是“名稱〞和“編號〞。在窗口的界面上,直接套用“按學(xué)號錄入分?jǐn)?shù)〞的界面,僅作少量的修改即可。對應(yīng)不同的菜單執(zhí)行不同的操作,可以這樣實現(xiàn):菜單對應(yīng)的是“過程〞,在其中定義變量來區(qū)分菜單再運行表單。注意在表單的form_load中,執(zhí)行翻開數(shù)據(jù)表的操作,而不能在form_init中翻開。具體的界面及程序見HYPERLINK附錄112、建立生成表、翻開表的界面生成表:根據(jù)用戶的選擇,查詢相應(yīng)的科目代碼,再組合成成績名次表的表名〔是純數(shù)字形式〕,由此生成具體的成績表結(jié)構(gòu),待用。注意保存表名的變量。翻開表:根據(jù)用戶的選擇,翻開表作為當(dāng)前工作的成績表。對此進行各種操作。注意當(dāng)前的工作區(qū)和表名變量。3、在程序中使用表使用表時,盡量采用選取工作區(qū)的方式使之成為當(dāng)前表。如果一定要使用表名,要采用別名或使用變量方式引用。具體地方具體處理:四、結(jié)果分析通過本程序的設(shè)計,解決了分?jǐn)?shù)的輸入、顯示、修改、刪除、查詢以及統(tǒng)計總分、增加排名、分析最高分等功能。還可以進行打印。這些功能經(jīng)過驗證,都可以很好的運行。但本程序還需要進行擴展,最需要的是用戶要可以進行班級、科目、考試工程的自定義。在此根底上,統(tǒng)計全年級的年級排名,對全年級的分?jǐn)?shù)進行分析。使本程序可以在所有學(xué)校通用,成為一個通用的成績統(tǒng)計程序。另外,還應(yīng)該加強成績的分析工作。如統(tǒng)計優(yōu)秀率、對考試分?jǐn)?shù)自動產(chǎn)生分析評語,甚至可以根據(jù)每個學(xué)生的考試成績、班級年級排名而產(chǎn)生一個成績評語。本程序的源程序中附加了詳細(xì)的語句說明,反映了我在設(shè)計中的心得和摸索的過程,可以作為學(xué)習(xí)VFP6編程的重要參考資料?,F(xiàn)在存在的疑問:1、怎樣使打印預(yù)覽時系統(tǒng)自己翻開的工具欄直接顯示在窗口的上部而與自己設(shè)計的工具欄在一行?2、怎樣在Grid中顯示特定的字段?3、完全刪除(pack)后,怎樣在Grid中顯示結(jié)果?4、怎樣用程序指定報表的recordsource?5、怎樣連續(xù)播放背景音樂?致謝通過本設(shè)計,我在工作之余、在緊張的畢業(yè)論文設(shè)計時間的情況下,熟悉了VFP編程的根本步驟。練習(xí)了一些數(shù)據(jù)庫設(shè)計、程序功能設(shè)計的方法。感覺在時間的逼迫下,通過到圖書館或Internet上查找資料和向老師咨詢,是可以完成方案中的任務(wù)的。在設(shè)計時,我不斷的遇到問題、解決問題,在此過程中,我體會到成功的快樂。在此即將完成設(shè)計之時,對我的指導(dǎo)老師華中師范大學(xué)的****表示感謝;并將我成功的快樂與我的丈夫***分享,感謝他在設(shè)計過程中對我的幫助。附錄附錄1:主程序*thisismainprogramClassName="初三(1)班"TestName="上學(xué)期第一次月考"rptTitle=""&&顯示報表標(biāo)題myTime=""&&顯示時間,變量不在這里定義,打印報表時會出現(xiàn)“找不到變量〞!tempTime=myTime*本程序放在個根目錄下,才可以采用相對目錄調(diào)用mypath=left(sys(16),rat("\",sys(16)))setdefato(mypath)&&設(shè)置默認(rèn)路徑mainpath=strtran(mypath,'data\','')ifnot(file("data\school.dbc"))&&相對目錄這樣寫即可setsafetyon&&翻開“覆蓋確認(rèn)〞的對話框createdatabase[school.dbc]filename=[30111.dbf]createtable(filename)(學(xué)號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é)號tag學(xué)號insertinto(alltrim(dbf()))(學(xué)號,姓名,語文,數(shù)學(xué),英語,物理,化學(xué))values([11],[趙亮],[78.50],[92.00],[84.50],[52.00],[80.50])endif*_screen.left=-10000*加了上面的一句后,是看不見了。但是在任務(wù)欄上還是有指示。*在根目錄下增加了一個config.fpw的后綴名為fpw〔純文本文件〕就可以了doformforms\firstnamefirstreadevent*有時候,當(dāng)VFP的編程界面沒有關(guān)閉時,運行本程序的EXE,出現(xiàn)錯誤:fileaccessisdenied,打不開數(shù)據(jù)庫。而大多時候都可以附錄2:顯示工具欄的程序在主窗口的Activate事件中:*要使用工具條必須先在表單frmtele中自定義屬性tbrtools*先翻開表單,再從菜單中選擇“form——newproperties...〞輸入tbrtools即可。*防止重復(fù)載入工具條IFTYPE("thisform.tbrtools")="O"AND; !ISNULL(thisform.tbrtools) RETURNENDIFSETCLASSLIBTO(mainpath+"else\myclass")additive用名稱表達式代替宏可更有效率thisform.tbrtools=createobject('mytoolbar')&&創(chuàng)立工具條this.tbrtools.dock(0)&&放置在屏幕頂端this.tbrtools.Show&&顯示工具條RELEASECLASSLIB(mainpath+"else\myclass")*增加了如上代碼后,就可以顯示工具欄了。這樣顯示不需要將自己建立的類手工放到窗口中,當(dāng)然也不需要建立“窗口集合〞。而是用以上代碼顯示窗口的。附錄3:按學(xué)號輸入分?jǐn)?shù)的界面附錄4:增加記錄的主要程序dimea[7]&&定義數(shù)組a=[]&&賦初值賦值這個數(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=[請注意!]=messagebox(messtxt,messtype,messtitle)elselocatefor(學(xué)號==val(a[1]))iffound()messtxt=[已有相同學(xué)號的記錄存在!]+chr(13);+chr(13);+[不能添加!]messtype=0+64+0&&OK按鈕*messtype=4+48+256&&是否按鈕+驚嘆號標(biāo)志+默認(rèn)值為第二個messtitle=[請注意!]=messagebox(messtxt,messtype,messtitle) else&&沒有相同記錄存在insertinto(dataname)(學(xué)號,姓名,語文,數(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&&焦點在text1上thisform.text1.value=""thisform.text2.value=""thisform.text3.value=""附錄5:查看班級成績表表單及程序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先試驗這句話正確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)+'"'&&按“姓名〞查詢時的處理else&&姓名的輸入必須用“引號〞,所以作如上處理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é)果放入臨時表中findsentence=[select*fromdata\30111where]+findwhat1+howfind++findwhat2+[intocursortempdbforderby姓名]else*findsentence=[select*fromdata\30111where總分>435intocursortempdbforderby學(xué)號]findsentence=[select*fromdata\30111where]+findwhat1+[intocursortempdbforderby學(xué)號]endifthisform.txtfindall.value=findwhat1+findwhat2ThisForm.grid1.recordsource=findsentenceif_tally=0&&_tally變量代表當(dāng)前select命令處理過的記錄數(shù)??chr(7)=messagebox("沒有相匹配的記錄!",64,"找不到!")endif附錄7:計算排名的程序sort1=thisformbpai.value&&sort1是要排序的字段docasecasesort1="語文"sort2="語次"&&sort2是要更新的名次字段casesort1="數(shù)學(xué)"sort2="數(shù)次"casesort1="英語"sort2="英次"casesort1="物理"sort2="物次"casesort1="化學(xué)"sort2="化次"casesort1="總分"sort2="班次"endcaseselect1&&這一句不能沒有,否那么在不關(guān)閉本窗口第二次排名時沒有表sorttosorttempon&sort1/d&&根據(jù)所選擇的字段排序生成臨時表sort3a="sorttemp."+sort1&&構(gòu)成表名.字段格式這個是分?jǐn)?shù)字段sort3="sorttemp."+sort2&&這個是名次字段select16usesorttemp*indexon學(xué)號tagxuehao&&給臨時表增加索引*這句話千萬不能放在這里,否那么,總是將各科名次都排成“索引〞的名次****計算排名的方法:注意分?jǐn)?shù)相等排名相同*********MyCountNum=1&&計算名次的變量tong=1&&某個名次相同的人的個數(shù)dowhile.not.eof()replace&sort3withMyCountNum&&它在根目錄下生成的臨時表,翻開看,已經(jīng)給語次列參加了正確的數(shù)字名次!fentemp=&sort3a&&計下臨時的分?jǐn)?shù)skip&&取下一條記錄iffentemp=&sort3athen&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)相等replace&sort3withMyCountNum&&不改變名次tong=tong+1&&相同的個數(shù)增加1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等iftong<>1thenMycountNum=MycountNum+tong&&名次變量要在以前的根底上增加相同名次人的個數(shù)tong=1else&&如果后面的分?jǐn)?shù)與前面的分?jǐn)?shù)不相等并且也沒有名次相同的人MycountNum=MycountNum+1&&那么直接將名次變量增加1即可endifendifenddo****出現(xiàn)名次相等的情況,就會有“空名次〞的現(xiàn)象*********select16indexon學(xué)號tagxuehao&&把這句放在這里就完全正常了select2usesorttempagainordertagxuehaoaliassortasort4="sorta."+sort2select1usedata\30111.dbfagainordertagxuehao&&必須這樣使用*updateon學(xué)號fromsortareplace語次withsorta.語次&&第一次是這樣使用的,改為通用格式updateon學(xué)號fromsortareplace&sort2with&sort4&&注意變量的應(yīng)用*以上是增加排名的方法:*先對欲增加排名的表排序,生成臨時表*然后按順序循環(huán)臨時表,用逐漸增加的數(shù)字更新臨時表的名次字段*最后,用臨時表來對應(yīng)更新最初的表。成功!*下面還應(yīng)該刪除臨時表select16&&在刪除前先要關(guān)閉useselect2&&還必須關(guān)閉這個工作區(qū),因為該表在其中也被翻開了use&&否那么總有“該表正在使用的錯誤〞erasesorttemp.cdxerasesorttemp.dbf&&刪除臨時表及索引表select1findtemp=[select*fromdata\30111intocursortempdbforderby]+sort1+[desc]thisform.grid1.recordsource=findtemp附錄8:分?jǐn)?shù)分析的表單及程序thisform.lblke.caption=sort1select1&&根據(jù)所選擇的字段排序生成臨時表sorttofenxitempon&sort1/dselect5&&使用這種方法,還是會在根目錄下生成臨時文件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è)計中的報表附錄10:打印控制表單“開始〞按鈕對應(yīng)的程序:sort1type=iif(thisform.optgroup1.value=1,[desc],[asc])iffile("prttemp.dbf")&&如果存在臨時表,先刪除表select9useeraseprttemp.dbfendifselect1&&根據(jù)所選擇的字段排序生成臨時表sorttoprttempon&sort1/&sort1typeselect9useprttempifthisformbo1.value="學(xué)生個人成績單"ifrpttitle=""rpttitle="初三年級九月份月考學(xué)生個人成績單"endifrptTemp="else\rptdan"elseifrpttitle=""rpttitle="初三年級九月份月考成績班級一覽表"endifrptTemp="else\rptall"endifDOCASECASEthisform.opgOutput.optPrinter.Value=1&&Toprinterreportform(mainpath+rpttemp)NOCONSOLETOPRINTERPROMPTmesstxt=[成績表打印完畢!]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:維護班級等的界面和程序for
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電廠課程設(shè)計報告模板
- 2024事業(yè)單位勞動合同制員工福利計劃與員工持股合同3篇
- 2024年新型集裝箱房屋購銷合同樣本版B版
- 2024年水鉆工程合同履行監(jiān)管協(xié)議
- 畫畫活動送課程設(shè)計
- 2024年汽車融資租賃合同稅務(wù)處理范本3篇
- 比賽計分器課程設(shè)計
- 消費室內(nèi)設(shè)計課程設(shè)計
- 電子商務(wù)課程設(shè)計心得
- 研學(xué)旅行指導(dǎo)課程設(shè)計
- 鄧州市龍理鄉(xiāng)第一初級中學(xué)-2025年春節(jié)寒假跨學(xué)科主題實踐作業(yè)模板【課件】
- (新疆一模)2025屆高三高考適應(yīng)性檢測分學(xué)科第一次模擬考試 生物試卷(含答案解析)
- 酒店宴會服務(wù)合同三篇
- 高一數(shù)學(xué)上學(xué)期期末模擬試卷03-【中職專用】2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期(高教版2023基礎(chǔ)模塊)(解析版)
- 2024-2025學(xué)年上學(xué)期北京初中物理九年級期末培優(yōu)試卷
- 2024衛(wèi)星遙感應(yīng)用服務(wù)平臺建設(shè)與運營合同
- 2024年社區(qū)工作者考試必考1000題【歷年真題】
- 2023-2024學(xué)年廣東省深圳市福田區(qū)八年級(上)期末歷史試卷
- 公司安全事故隱患內(nèi)部舉報、報告獎勵制度
- 2024年WPS計算機二級考試題庫350題(含答案)
- 冬季傳染病預(yù)防-(課件)-小學(xué)主題班會課件
評論
0/150
提交評論