用c語言解決學(xué)生成績管理問題_第1頁
用c語言解決學(xué)生成績管理問題_第2頁
用c語言解決學(xué)生成績管理問題_第3頁
用c語言解決學(xué)生成績管理問題_第4頁
用c語言解決學(xué)生成績管理問題_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《用C++語言解決學(xué)生成績管理問題》第PAGE77頁共18頁PAGE用C++語言解決學(xué)生成績管理問題摘要本課程設(shè)計主要解決在一個學(xué)校的某個年級中對所有班級中的學(xué)生考試成績進(jìn)行管理,包括表和記錄的添加,刪除,更新,查找等的程序設(shè)計。在課程設(shè)計中,系統(tǒng)開發(fā)平臺為Windows2021,程序設(shè)計設(shè)計語言采用VisualC++,數(shù)據(jù)庫采用Access2021,程序運行平臺為Windows98/2021/XP。對于學(xué)生成績按班級進(jìn)行分類,管理,更新。程序通過調(diào)試運行,初步實現(xiàn)了設(shè)計目標(biāo),并且經(jīng)過適當(dāng)完善后,將可以應(yīng)用在學(xué)校中解決實際問題。關(guān)鍵詞程序設(shè)計;Access2021;VisualC++

1引言本課程設(shè)計主要解決在一個在一個學(xué)校的某個年級中對所有班級的學(xué)生考試成績進(jìn)行管理,包括表和記錄的添加,刪除,更新,查找等的程序設(shè)計。。1.1背景民辦高中在創(chuàng)辦初期辦學(xué)規(guī)模比較小,學(xué)校各班級的人數(shù)也比較少,所以一直以來對學(xué)生成績管理的主要方式是基于文本,表格等紙介質(zhì)的手工處理,管理水平普遍不高,效率非常低。這種管理手段已不能適應(yīng)時代的發(fā)展,因為它浪費了了許多的人力和物力。在當(dāng)今信息時代這種傳統(tǒng)的管理方法必然被計算機為基礎(chǔ)的信息管理系統(tǒng)所代替。如果本系統(tǒng)能被學(xué)校所采用,將會改變以前靠手工管理學(xué)生成績的狀況,可以樹立良好的辦學(xué)形象,提高工作效率。當(dāng)今時代是飛速發(fā)展的信息時代,在各行各業(yè)中離不開信息處理,這正是計算機被廣泛應(yīng)用于信息管理系統(tǒng)的環(huán)境。計算機的最大好處在于利用它能夠進(jìn)行信息管理。使用計算機進(jìn)行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。尤其對于復(fù)雜的信息管理,計算機能夠充分發(fā)揮它的優(yōu)越性。

管理信息系統(tǒng)是進(jìn)行信息的采集,存儲,加工,維護(hù)和使用的系統(tǒng),它是隨著管理科學(xué)和技術(shù)科學(xué)的發(fā)展而形成的。學(xué)生成績管理系統(tǒng)是一個教育單位不可缺少的部分,它的內(nèi)容對于學(xué)校的決策者和管理者來說都至關(guān)重要,所以學(xué)生成績管理系統(tǒng)應(yīng)該能夠為用戶提供充足的信息和快捷的查詢手段,對學(xué)生來說可以輕松的查閱自己在校的成績以及信息等。但是一直以來人們都是靠傳統(tǒng)人工的方式管理學(xué)生成績,這種管理方式存在著許多缺點,如:效率低,保密性差,另外時間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找,更新和維護(hù)都帶來了不少的困難。

隨著科學(xué)技術(shù)的不斷提高,計算機科學(xué)日漸成熟,其強大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。作為計算機應(yīng)用的一部分,使用計算機對學(xué)生成績信息進(jìn)行管理,有著手工管理所無法比擬的優(yōu)點。例如:檢索迅速,查找方便,可靠性高,存儲量大,保密性好,壽命長,成本低等。這些優(yōu)點能夠極大地提高學(xué)生成績管理的效率,也是企業(yè)的科學(xué)化,正規(guī)化管理,與世界接軌的重要條件。因此,開發(fā)這樣的一套成績管理系統(tǒng)成為很有必要的事情。

學(xué)生成績管理系統(tǒng)提供了強大的學(xué)生成績管理管理功能,方便系統(tǒng)管理員對學(xué)生成績等信息的添加,修改,刪除,查詢,等操作,同時學(xué)生對自己各科成績查詢,進(jìn)行學(xué)習(xí)交流[1]。1.2課程設(shè)計目的將理論教學(xué)中涉及到的知識點貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計題目進(jìn)行綜合性應(yīng)用,對所學(xué)知識達(dá)到融會貫通的程度。通過課程設(shè)計,我們在下述各方面的能力應(yīng)該得到鍛煉:對于給定的設(shè)計題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型;掌握自頂而下的設(shè)計方法,將大問題進(jìn)行模塊化,領(lǐng)會結(jié)構(gòu)化程序設(shè)計的方法;熟練掌握C++語言的基本語法,靈活運用各種數(shù)據(jù)類型;進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序(單步調(diào)試,設(shè)置斷點、觀察表達(dá)式,分塊調(diào)試)和修改程序;樹立正確的程序設(shè)計思想,培養(yǎng)我們的程序設(shè)計能力和創(chuàng)新能力;學(xué)會面向?qū)ο蟮某绦蛟O(shè)計的方法,掌握面向?qū)ο蟪绦蛟O(shè)計的一般規(guī)律;進(jìn)行程序設(shè)計的基本技能訓(xùn)練,如算法分析與設(shè)計、類的設(shè)計與使用、學(xué)會查閱關(guān)的圖書和文獻(xiàn)資料等。根據(jù)學(xué)生成績表特點,通過對學(xué)生管理系統(tǒng)的系統(tǒng)分析、系統(tǒng)設(shè)計、編碼、調(diào)試及維護(hù)工作的實踐,了解信息管理系統(tǒng)的一般設(shè)計思路,熟悉和掌握軟件設(shè)計的一般方法,深入了解數(shù)據(jù)庫設(shè)計的基本理論及方法,從而達(dá)到以下目的:(1)掌握用VisualC++6.0開發(fā)環(huán)境開發(fā)軟件的方法;(2)掌握基于對話框的應(yīng)用程序的編程方法;(3)掌握用資源編輯器進(jìn)行圖標(biāo)、菜單、工具欄、對話框等資源的編輯;(4)掌握對話框、常用控件和ActiveX控件的使用方法;(5)熟悉文檔/視圖結(jié)構(gòu),掌握文檔和視圖相互控制的技巧;(6)掌握用MFC編寫Access的數(shù)據(jù)庫應(yīng)用程序的方法和技巧;(7)提高學(xué)生成績管理的效率,節(jié)約相關(guān)的管理成本;(8)為學(xué)校提供系統(tǒng)、規(guī)范的成績管理手段??傊?,通過該系統(tǒng)的建設(shè)來優(yōu)化該學(xué)校的學(xué)生成績管理系統(tǒng),提高管理效率,為學(xué)校的進(jìn)一步發(fā)展提供更有力的支持。2相關(guān)技術(shù)分析2.1VisualC++6.0簡介VisualC++是Microsoft公司提供的在Windows環(huán)境下應(yīng)用程序開發(fā)的C/C++編譯器。相比其它的編程工具而言,VisualC++在提供可視化的編程方法的同時,也適應(yīng)編寫直接對系統(tǒng)進(jìn)行底層操作的程序。隨VisualC++一起提供的Microsoft基礎(chǔ)類庫(MicrosoftFoundationClassLibrary,簡寫為MFC)對Windows9X/NT所用的Win32應(yīng)用程序接口(Win32ApplicationProgrammingInterface)進(jìn)行了十分徹底的封裝,這使得Windows9X/NT應(yīng)用程序的開發(fā)可以使用完全的面向?qū)ο蟮姆椒ㄟM(jìn)行,從而能夠大量地節(jié)省應(yīng)用程序的開發(fā)周期,降低開發(fā)成本,也使得Windows程序員從大量的繁雜的勞動中解脫出來。VisualC++6.0是Microsoft公司出品的基于Windows的C++開發(fā)工具,它是MicrosoftVisualStudio套件的一個有機組成部分。VisualC++軟件包含有許多單獨的組件,例如編輯器、編譯器、鏈接器、生成實用程序、調(diào)試器,以及各種各樣為開發(fā)MicrosoftWindows下的C/C++程序而設(shè)計的工具。VisualStudio把所有的VisualC++工具結(jié)合在一起,集成為一個整體,通過一個由窗口、對話框、菜單、工具欄、快捷鍵等組成的完整系統(tǒng),你可以觀察和控制整個開發(fā)過程。該環(huán)境就是VisualC++中所能“看見”的所有東西,一般情況下,術(shù)語VisualC++既是指這個產(chǎn)品,又是指它的開發(fā)環(huán)境VisualC++6.0集成開發(fā)環(huán)境的操作界面最頂行是窗口標(biāo)題行,將顯示當(dāng)前編輯的程序文件名。第二行是菜單行,菜單行中的每一項都對應(yīng)一個下拉菜單,第三行是按鈕工具行。屏幕中間的左半?yún)^(qū)是工作區(qū)窗口,右半?yún)^(qū)是程序編輯窗口。屏幕的最下部是狀態(tài)輸出窗口[2]。2.2Access數(shù)據(jù)庫簡介數(shù)據(jù)庫是20世紀(jì)60年代后期發(fā)展起來的一項重要技術(shù)。70年代以來,數(shù)據(jù)庫技術(shù)得到了迅速發(fā)展和廣泛應(yīng)用,已經(jīng)成為計算機科學(xué)與技術(shù)的一個重要分支。MicrosoftAccess作為一種關(guān)系型桌面數(shù)據(jù)庫管理系統(tǒng)是中小型數(shù)據(jù)庫應(yīng)用系統(tǒng)的理想開發(fā)環(huán)境,具有界面友好、易學(xué)好用、開發(fā)簡單、接口靈活等特點,已經(jīng)得到越來越廣泛的應(yīng)用。Access數(shù)據(jù)庫管理系統(tǒng)是MicrosoftOffice套件的重要組成部分,是Access的最新版本,可在Windows95環(huán)境下運行。Access適用于小型商務(wù)活動,用以存貯和管理商務(wù)活動所需要的數(shù)據(jù)。Access不僅是一個數(shù)據(jù)庫,而且它具有強大的數(shù)據(jù)管理功能,它可以方便地利用各種數(shù)據(jù)源,生成窗體(表單),查詢,報表和應(yīng)用程序等[3]。3總體設(shè)計3.1需求分析(1)功能需求學(xué)生成績管理系統(tǒng)需要滿足三方面的要求,分別是班級成績管理、年級成績管理、參數(shù)設(shè)置。班級管理需求是對學(xué)生的成績按班進(jìn)行分類管理,包括增加某個學(xué)生的成績記錄、刪除某個學(xué)生的成績記錄、修改學(xué)生成績等;年級成績管理中需要對年級人數(shù)及平均分進(jìn)行統(tǒng)計,在這個年級中對某個學(xué)生的成績進(jìn)行查詢等;由于分班的原因班級的數(shù)目有可能改變,因此需要創(chuàng)建或是刪除班級,科目調(diào)整是為了便于及時更新文理分科及其他原因所帶來的科目變動。該系統(tǒng)需要實現(xiàn)以下基本功能:管理系統(tǒng)操作人員根據(jù)實際情況對學(xué)生考試成績進(jìn)行修改、添加、刪除以及查詢等操作;對某個班級的總成績、平均成績、優(yōu)秀人數(shù)以及及格人數(shù)進(jìn)行管理;顯示不同班級的任課老師名單。統(tǒng)計出年級總成績、平均成績、及格人數(shù)以及優(yōu)秀人數(shù);能根據(jù)查詢條件及查詢值對全年級的任何一個學(xué)生的成績進(jìn)行查詢;根據(jù)實際情況對全年級的班級進(jìn)行管理,例如創(chuàng)建或刪除某個班級,及時調(diào)整所學(xué)科目信息,對其進(jìn)行增加或刪除;對現(xiàn)有的數(shù)據(jù)庫進(jìn)行管理,包括數(shù)據(jù)備份和恢復(fù),以方便用戶對數(shù)據(jù)庫的管理和維護(hù)工作,提高系統(tǒng)的數(shù)據(jù)安全性[4]。(2)性能需求要求該系統(tǒng)具有一定的可擴展性以適應(yīng)發(fā)展,且易于維護(hù)。3.2設(shè)計思路根據(jù)學(xué)生成績表特點,決定選用鏈表這種數(shù)據(jù)結(jié)構(gòu)來作為組成成績數(shù)據(jù)庫的基本框架。鏈表是最簡單也是最常用的一種動態(tài)數(shù)據(jù)結(jié)構(gòu)。它是對動態(tài)獲得的內(nèi)存進(jìn)行組織的一種結(jié)構(gòu)。選用鏈表的原因有:(1)即用即申請,不會造成內(nèi)存空間的浪費;(2)是數(shù)據(jù)之間既有獨立性,又便于數(shù)據(jù)的相互連系;(3)便于數(shù)據(jù)的添加及刪除等優(yōu)點。用模塊化程序設(shè)計理念,對各個功能定義不同函數(shù),分塊處理,這樣有利于后期調(diào)試及今后對功能的完善。3.3系統(tǒng)層次模塊圖及流程處理本系統(tǒng)是一個相對封閉的單機運行系統(tǒng),不提供與其他系統(tǒng)的數(shù)據(jù)交換,界面美觀,簡單易用,實現(xiàn)學(xué)生成績管理的計算機處理。采用VisualC++6.0開發(fā),Access作為后臺數(shù)據(jù)庫,在滿足需求的前提下將系統(tǒng)對運行環(huán)境的性能要求降到最低。系統(tǒng)基本的流程是:主界面選擇各項功能。學(xué)生成績管理系統(tǒng)可分為三個大的模塊:班級成績、年級成績、參數(shù)設(shè)置,如圖3-1所示。系統(tǒng)業(yè)務(wù)處理流程如圖3-2所示。圖3-1學(xué)生成績管理系統(tǒng)模塊圖3-2系統(tǒng)業(yè)務(wù)處理流程4具體實現(xiàn)本系統(tǒng)的詳細(xì)設(shè)計是基于系統(tǒng)需求分析與系統(tǒng)總體設(shè)計的結(jié)論來進(jìn)行的,并采用VisualC++6.0實現(xiàn)各模塊的功能。因此,系統(tǒng)的設(shè)計和實現(xiàn)按照模塊的劃分分別闡述。4.1數(shù)據(jù)庫設(shè)計根據(jù)系統(tǒng)功能的要求以及功能模塊的劃分,對于本系統(tǒng)的數(shù)據(jù)庫,可以列出以下數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu):(1)名稱:各科成績情況設(shè)置表(見表4-1)表名稱標(biāo)識:OBJECT數(shù)據(jù)來源:基礎(chǔ)數(shù)據(jù)設(shè)置模塊進(jìn)行錄入表4-1OBJECT表名稱類型主鍵非空科目文本YesYes總成績數(shù)字NoNo平均成績數(shù)字NoNo及格人數(shù)數(shù)字NoNo優(yōu)秀人數(shù)數(shù)字NoNo(2)名稱:學(xué)生成績具體情況設(shè)置表(見表4-2)表名稱標(biāo)識:STUDENT數(shù)據(jù)來源:基礎(chǔ)數(shù)據(jù)設(shè)置模塊進(jìn)行錄入表4-2STUDENT表名稱類型主鍵非空學(xué)號數(shù)字YesYes姓名文本NoNo數(shù)學(xué)數(shù)字NoNo物理數(shù)字NoNo化學(xué)數(shù)字NoNo英語數(shù)字NoNo政治數(shù)字NoNo總成績數(shù)字NoNo平均成績數(shù)字NoNo(3)名稱:任課老師情況設(shè)置表(見表4-3)表名稱標(biāo)識:TEACHER數(shù)據(jù)來源:基礎(chǔ)數(shù)據(jù)設(shè)置模塊進(jìn)行錄入表4-3TEACHER表名稱類型主鍵非空科目文本YesYes任課老師文本NoNo所以的班級均按照以上表格數(shù)據(jù)設(shè)計數(shù)據(jù)庫表格。4.2函數(shù)說明程序中所定義的函數(shù)及說明如表4-4所示。表4-4函數(shù)及說明函數(shù)聲明功能聲明BoolOnInitDialog()對話框初始化,布爾型函數(shù)。void:OnStatr()實現(xiàn)班級對話框中的“顯示”按鈕的功能。voidEqual()尋找與查詢條件相匹配的信息,無返回。voidOnAdd()增加記錄,無返回。voidOnDelect()刪除記錄,無返回。voidOnFind()查找記錄,無返回。voidOnAll()顯示全部記錄,不返回。voidOnEdit()修改記錄,不返回。voidOnAddobject()添加對象,無返回值。voidOnDelectobject()刪除對象,無返回值。voidCTabSheet::SetRect()主對話框功能的實現(xiàn),無返回值。4.3系統(tǒng)主控平臺(1)主對話框添加“Tab”控件,用于切換各界面,并設(shè)定相應(yīng)的屬性,具體如圖4-1所示。其屬性如圖4-2所示。圖4-1設(shè)置主界面圖4-2主界面屬性(2)插入“班級成績”對話框“班級成績”對話框主要顯示所選擇的班級的學(xué)生成績表、各課成績表、任課老師表的所以記錄,所以需要三個列表控件,以及實現(xiàn)刪除記錄、增加記錄、修改記錄和查詢記錄等功能。設(shè)計好的控件如圖4-3所示,班級對話框?qū)傩匀鐖D4-4所示。圖4-3“班級成績”對話框圖4-4“班級成績”對話框?qū)傩?3)插入“年級成績”對話框“年級成績”對話框主要顯示兩中信息,一是顯示年級中所有同學(xué)的成績信息,包括學(xué)號、姓名、各科成績、總成績和平均成績,另外,還用來顯示年級的總成績、平均成績、及格人數(shù)、優(yōu)秀人數(shù)。除了顯示外,還需要提供查詢記錄。插入后的“年級成績”對話框如圖4-5所示。圖4-5“年級成績”對話框其中查詢記錄中的部分代碼如下://功能:輸入查詢值和查詢條件,查詢滿足條件的學(xué)生情況voidCNaDilalog::OnFind()//OnFind是CNaDialog類的成員函數(shù){if(m_Set.IsOpen())//條件判斷m_Set.Close();//調(diào)用SetCloseJS=FALSE;//賦JS的初值為FALSEif(dlg.DoModal()==IDOK)//判斷是否使用OK按鈕{m_ListCtrlx.DeleteAllItems(); //刪除列表控件m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"一班STUDENT");//在一班中查找滿足條件的學(xué)生信息this->Select();//指針指向Select函數(shù)m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"[二班STUDENT]");//在二班中查找滿足條件的學(xué)生信息this->Select();this->Sql();if(JS==FALSE)//當(dāng)JS的值為假時AfxMessageBox("沒有符合條件的記錄");//沒有查找到符合條件的記錄}函數(shù)的流程圖如圖4-6所示。圖4-6部分程序流程圖經(jīng)過調(diào)試后,如果有符合條件的學(xué)生存在,則顯示其信息,否則彈出“沒有符合條件記錄”的提示信息。(4)插入“增加記錄”對話框當(dāng)用戶點擊班級成績對話框中的“增加記錄“按鈕時,就會彈出”增加記錄“對話框,在該對話框中需要輸入一個學(xué)生的成績的所有信息,包括學(xué)號、姓名、數(shù)學(xué)、物理、化學(xué)、英語、政治。具體的設(shè)計如圖4-7示。圖4-7“增加記錄“對話框(5)插入“刪除記錄”對話框當(dāng)用戶點擊“班級成績”對話框中的“刪除記錄”按鈕時,就誰彈出“刪除記錄”對話框,在該對話框中用戶只需要輸入某個學(xué)生的學(xué)號以及密碼之后,就可以將其記錄刪除。具體的設(shè)計如圖4-8示。圖4-8“刪除記錄”對話框(6)插入“修改記錄”對話框當(dāng)用戶點擊“班級成績”對話框中的“修改記錄”按鈕時,就會自動彈出“修改記錄”對話框,在該對話框中需要輸入一個學(xué)生的成績的所有信息,包括學(xué)號、姓名、數(shù)學(xué)、物理、化學(xué)、英語、政治以及密碼。具體的設(shè)計如圖4-9示。圖4-9修改記錄”對話框(7)插入“查詢記錄”對話框當(dāng)用戶點擊“班級成績”對話框中的“查詢記錄”按鈕室,就會彈出“查詢記錄”對話框,在該對話框中選擇查詢條件,并可指定查詢值。具體的設(shè)計如圖4-10示。圖4-10“查詢記錄”對話框(8)插入“參數(shù)設(shè)置”對話框“參數(shù)設(shè)置”對話框主要用于對班級進(jìn)行創(chuàng)建或是刪除,對科目進(jìn)行調(diào)整。具體設(shè)計如圖4-11所示。圖4-11“參數(shù)設(shè)置“對話框4.4程序運行結(jié)果程序運行結(jié)果分別如圖4-12、圖4-13和圖4-14所示。圖4-12學(xué)生成績管理——班級成績圖4-13學(xué)生成績管理——年級成績圖4-14學(xué)生成績管理——參數(shù)設(shè)置結(jié)束語經(jīng)過三個周的課程設(shè)計和對相關(guān)資料的收集,讓我深刻的感到隨著網(wǎng)絡(luò)科技的不斷發(fā)展和網(wǎng)絡(luò)的廣泛應(yīng)用,我們的生活越來越離不開它了。在教育越來越受重視的21世紀(jì),隨著學(xué)生成績管理類型的不斷增加和成績管理要求的不斷提高,管理方面的工作量將會越來越大,并且其工作將是一件十分煩瑣和非常容易出錯的事情。每次考試結(jié)束,老師們總要統(tǒng)計大量的學(xué)生成績,這些數(shù)據(jù)的歸檔、統(tǒng)計工作任務(wù)重,時間緊,統(tǒng)計結(jié)束后往往錯誤百出。長時間以后,將產(chǎn)生大量文件和資料,給查找、維護(hù)帶來不少困難。在這樣的情況下有一個實用學(xué)生成績管理系統(tǒng)是有其必然性的,如果能做出一個完善的學(xué)生成績管理系統(tǒng)就使管理方面的工作量減少很多。本實例完成了一個相對較完善的學(xué)生成績管理的功能。程序中包括表的添加,刪除和更新,記錄的添加、刪除、更新、查找等,能滿足該學(xué)校目前及最近一段時間的發(fā)展需求。建立學(xué)生成績管理系統(tǒng),采用計算機對學(xué)生成績進(jìn)行管理,能進(jìn)一步提高辦學(xué)效益和現(xiàn)代化水平。幫助廣大教師提高工作效率,實現(xiàn)學(xué)生成績信息管理工作流程的系統(tǒng)化、規(guī)范化和自動化。如果本系統(tǒng)能被學(xué)校所采用,將會改變以前靠手工管理學(xué)生成績的狀況,可以樹立良好的辦學(xué)形象,提高工作效率。在這次的課程設(shè)計中我學(xué)會了很多,也深感自身知識的貧乏,希望在日后的努力中能做出更完善的系統(tǒng)。由于時間關(guān)系該系統(tǒng)可能存在很多不足之處,希望老師能從百忙之中抽出時間給以點評。參考文獻(xiàn)[1]黃明,梁旭,周紹兵.VisualC++信息系統(tǒng)設(shè)計與開發(fā)實例.北京:機械工業(yè)出版社,2021[2]鄭阿奇,丁有和.VisualC++教程.北京:機械工業(yè)出版社,2021[3]關(guān)正美.中文版Access2021教程.北京:中國宇航出版社,2021[4]沈煒,徐慧.VisualC++數(shù)據(jù)庫編程技術(shù)與實例.第一版.北京:人民郵電出版社,2021.致謝這次的課程設(shè)計讓我對VisualC++又有了更深一步的了解,在做這個課題的過程中遇到過不少的困難,有些是我以前從未見過的,如果沒有彭紀(jì)良老師的悉心指導(dǎo)我可能到現(xiàn)在還不能順利完成設(shè)計,在這里我對彭老師表示我最衷心的感謝。彭紀(jì)良老師的言傳身教將會是我以后學(xué)習(xí)中的榜樣,無論是從她嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度還是認(rèn)真的工作態(tài)度或是專業(yè)水平來說都值得我努力,所以我要感謝她,不僅是因為在課程設(shè)計上對我的幫助而且對我未來人生還具有深遠(yuǎn)的影響。同時我還要感謝學(xué)校為我們提供方便的設(shè)計環(huán)境,以及各位同學(xué)對我最真心的幫助。附錄:源程序清單(1)//程序名稱:Addialog.cpp//程序功能:通過輸入某個學(xué)生的學(xué)號、姓名、數(shù)學(xué)、物理、化學(xué)、英語、政治的信息增加該學(xué)生的記錄。//程序聶誠鳳//最后修改日期:2021-9-//Addialog.cpp:實現(xiàn)文件#include"stdafx.h"http://預(yù)編譯頭文件#include"lhwy.h"#include"Addialog.h"CAddialog::CAddialog(CWnd*pParent/*=NULL*/):CDialog(CAddialog::IDD,pParent){//{{AFX_DATA_INIT(CAddialog)m_fchemistry=0.0f;//初始化化學(xué)成績m_fenglish=0.0f;//初始化英語成績m_fmaths=0.0f;//初始化數(shù)學(xué)成績m_strName=_T("");//初始化姓名為空串m_fphysical=0.0f;//初始化物理成績m_nxue=0;//初始化學(xué)號m_fpolitic=0.0f;//初始化政治成績//}}AFX_DATA_INIT}voidCAddialog::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAddialog)DDX_Control(pDX,IDOK,m_OkButton);//OK按鈕DDX_Control(pDX,IDCANCEL,m_CancelButton);//取消按鈕DDX_Text(pDX,IDC_CHMISTRY,m_fchemistry);DDV_MinMaxFloat(pDX,m_fchemistry,0.f,100.f);//化學(xué)成績的范圍為1-100DDX_Text(pDX,IDC_ENGLISH,m_fenglish);DDV_MinMaxFloat(pDX,m_fenglish,0.f,100.f);//英語成績的范圍為1-100DDX_Text(pDX,IDC_MATHS,m_fmaths);DDV_MinMaxFloat(pDX,m_fmaths,0.f,100.f);//數(shù)學(xué)成績的范圍為1-100DDX_Text(pDX,IDC_NAME,m_strName);DDX_Text(pDX,IDC_PHYCICAL,m_fphysical);DDV_MinMaxFloat(pDX,m_fphysical,0.f,100.f);//物理成績的范圍為1-100DDX_Text(pDX,IDC_XUEHAO,m_nxue);DDV_MinMaxInt(pDX,m_nxue,1,1000000);//學(xué)號范圍DDX_Text(pDX,IDC_POLITIC,m_fpolitic);DDV_MinMaxFloat(pDX,m_fpolitic,0.f,100.f);//英語成績的范圍為1-100 //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAddialog,CDialog)//開始執(zhí)行相應(yīng)的子程序 //{{AFX_MSG_MAP(CAddialog) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//結(jié)束執(zhí)行子程序(2)//程序程序:BaDialog.cpp//程序功能:實現(xiàn)班級成績對話框中的顯示、增加記錄、刪除記錄、修改記錄、查詢錄、全部記錄等的功能//程序聶誠鳳//最后修改日期:2021-9-#include"stdafx.h"#include"lhwy.h"http://工程頭文件#include"BaDialog.h"http://BaDialog頭文件#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;//靜態(tài)指針#endif//“班級成績”對話框的初始化,主要完成初始化列表控件BOOLCBaDialog::OnInitDialog(){CDialog::OnInitDialog();//初始化對話框CDRecordsetm_Set(&theApp.m_DB);//學(xué)生成績記錄集CBRecordsetm_bSet(&theApp.m_DB);//各科成績記錄集CTRecordsetm_tSet(&theApp.m_DB);//任課老師記錄集unsignedi=0;//賦值 CODBCFieldInfoInfo; m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"一班STUDENT");//打開記錄集//設(shè)置列表風(fēng)格 m_ListCtrlx.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//填充列表 for(i=0;i<m_Set.m_nFields;i++) {m_Set.GetODBCFieldInfo(i,Info); //獲取學(xué)生成績記錄集信息 m_ListCtrlx.InsertColumn(i,Info.m_strName,LVCFMT_LEFT,70);//插入的內(nèi)容 }m_Set.Close();//關(guān)閉記錄集m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,"一班OBJECT");//打開記錄集//設(shè)置列表風(fēng)格m_ListCtrlb.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//填充列表 for(i=0;i<m_bSet.m_nFields;i++) {m_bSet.GetODBCFieldInfo(i,Info);//獲取學(xué)生成績記錄集信息 m_ListCtrlb.InsertColumn(i,Info.m_strName,LVCFMT_LEFT,80);//插入的內(nèi)容 } m_bSet.Close();//關(guān)閉記錄集 m_ListCtrll.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//設(shè)置列表風(fēng)格m_ListCtrll.InsertColumn(0,_T("科目"),LVCFMT_IMAGE|LVCFMT_LEFT);//插入科目信息m_ListCtrll.InsertColumn(1,"任課老師");//插入任課老師信息for(i=0;i<2;i++) m_ListCtrll.SetColumnWidth(i,80);//設(shè)置列表每一欄的寬度//設(shè)置當(dāng)前列表的選擇m_cob.SetCurSel(0);this->Enable(FALSE);//賦值為假m_Timer=SetTimer(1,2,NULL);//設(shè)置記時器m_bIsAsc=TRUE;//賦值為假m_bS=TRUE; GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);//獲取文件名 sPath.ReleaseBuffer();//緩沖釋放路徑 intnPos;//定義nPos變量的類型 nPos=sPath.ReverseFind('\\');//反向查找路徑 sPath=sPath.Left(nPos); nPos=sPath.ReverseFind('\\');sPath=sPath.Left(nPos);lpszFile=sPath+"\\tect.txt";//為lpszFile賦值CFileaFile;CFileFindfFind; BOOLbSuccess;//定義bSuccess為布爾型變量 bSuccess=fFind.FindFile(lpszFile);//bSuccess為真時的情況 if(!bSuccess)//如果不成功 aFile.Open(lpszFile,CFile::modeCreate);//打開創(chuàng)建文件 else { aFile.Open(lpszFile,CFile::modeReadWrite);//打開讀寫文件CArchivearr(&aFile,CArchive::load);//檔案改編Serialize(arr);//連續(xù)if(m_Three=="三班")//如果選擇為“三班”m_cob.AddString(m_Three);//在組合框中添加“三班”的字符串if(m_Four=="四班")//若是選擇為“四班”m_cob.AddString(m_Four);//在組合框中添加“四班”的字符串if(m_Five=="五班")//若是選擇為“五班”m_cob.AddString(m_Five);//在組合框中添加“五班”的字符串if(m_Six=="六班")//若是選擇為“六班“m_cob.AddString(m_Six);//在組合框中添加“六班”的字符串if(m_Seven=="七班")//若是選擇為“七班”m_cob.AddString(m_Seven);//在組合框中添加“七班”的字符串if(m_Eight=="八班")//若是選擇為“八班”m_cob.AddString(m_Eight);//在組合框中添加“八班”的字符串 }aFile.Close();//關(guān)閉文件 returnTRUE;}//“班級成績”對話框中的“顯示”按鈕消息處理voidCBaDialog::OnStatr(){ m_ListCtrlx.DeleteAllItems();//刪除學(xué)生成績列表中的所有項目 m_ListCtrlb.DeleteAllItems();//刪除各科成績列表中的所有項目 m_ListCtrll.DeleteAllItems();//刪除任課老師列表中的所有項目 if(m_Set.IsOpen())//如果學(xué)生成績記錄集的打開的 m_Set.Close();//關(guān)閉記錄集 if(m_bSet.IsOpen())//如果各科成績記錄集的打開的 m_bSet.Close();//關(guān)閉記錄集m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring);//組合框控件 this->Select();//選擇CStringstr;//定義str變量類型 str.Format("%sTECHER",m_Getstring);//類型轉(zhuǎn)換m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,str);//打開記錄集m_nRecordCount=this->Show();//顯示記錄數(shù)目this->display();//顯示this->exhibit();//顯示m_bS=GetDlgItem(IDC_STATR)->EnableWindow(FALSE);//獲取對話框項目 this->Enable(TRUE); //賦值為真}//“班級成績”對話框中顯示全部記錄intCBaDialog::Show(){inti=0;//定義變量類型并賦初值m_Set.MoveFirst();//移向第一個學(xué)生成績記錄集if(m_Set.m_column1==0)//如果第一欄為空{(diào) m_Set.Close();//關(guān)閉學(xué)生成績記錄集 returni;//返回i }do//記錄集的遍歷以及顯示{CStrings;//定義變量ss.Format("%d",m_Set.m_column1);//將第一欄的雙精度型轉(zhuǎn)換為字符型m_ListCtrlx.InsertItem(i,s,0);//插入項目m_ListCtrlx.SetItemText(i,1,m_Set.m_column2);//設(shè)置第一欄內(nèi)容s.Format("%.1f",m_Set.m_column3);//將第三欄浮點型轉(zhuǎn)換為字符型m_ListCtrlx.SetItemText(i,2,s);//設(shè)置第二欄內(nèi)容s.Format("%.1f",m_Set.m_column4);//類型轉(zhuǎn)換m_ListCtrlx.SetItemText(i,3,s);//設(shè)置第三欄內(nèi)容s.Format("%.1f",m_Set.m_column5);//類型轉(zhuǎn)換m_ListCtrlx.SetItemText(i,4,s);//設(shè)置第四欄內(nèi)容s.Format("%.1f",m_Set.m_column6);//類型轉(zhuǎn)換m_ListCtrlx.SetItemText(i,5,s);//設(shè)置第五欄內(nèi)容s.Format("%.1f",m_Set.m_column7);//類型轉(zhuǎn)換m_ListCtrlx.SetItemText(i,6,s);//設(shè)置第六欄內(nèi)容s.Format("%.1f",m_Set.m_column8);//類型轉(zhuǎn)換m_ListCtrlx.SetItemText(i,7,s);//設(shè)置第七欄內(nèi)容s.Format("%.2f",m_Set.m_column9);//類型轉(zhuǎn)換m_ListCtrlx.SetItemText(i,8,s);//設(shè)置第八欄內(nèi)容 i++;//自增m_Set.MoveNext();//移向下一個 }while(!m_Set.IsEOF());//直到出現(xiàn)異常m_Set.Close();//關(guān)閉記錄集returni;//返回i}voidCBaDialog::display()//顯示{inti=0;m_bSet.MoveFirst();do//記錄集的遍歷以及顯示 {CStrings; m_ListCtrlb.InsertItem(i,m_bSet.m_column1,0);//插入第一欄內(nèi)容 s.Format("%.1f",m_bSet.m_column2);//類型轉(zhuǎn)換 m_ListCtrlb.SetItemText(i,1,s);//設(shè)置第二欄內(nèi)容 s.Format("%.2f",m_bSet.m_column3);//類型轉(zhuǎn)換m_ListCtrlb.SetItemText(i,2,s);//設(shè)置第三欄內(nèi)容s.Format("%d",m_bSet.m_column4);//類型轉(zhuǎn)換m_ListCtrlb.SetItemText(i,3,s);//設(shè)置第四欄內(nèi)容s.Format("%d",m_bSet.m_column5);//類型轉(zhuǎn)換m_ListCtrlb.SetItemText(i,4,s);//設(shè)置第五欄內(nèi)容 i++;m_bSet.MoveNext();//移向下一個 }while(!m_bSet.IsEOF());//出現(xiàn)異常時結(jié)束m_bSet.Close();//關(guān)閉記錄集}voidCBaDialog::exhibit()//顯示{inti=0;do//記錄集的遍歷以及顯示{m_ListCtrll.InsertItem(i,m_tSet.m_column1,0);//插入第一欄內(nèi)容m_ListCtrll.SetItemText(i,1,m_tSet.m_column2);//設(shè)置第二欄內(nèi)容i++;m_tSet.MoveNext();//移向下一個}while(!m_tSet.IsEOF());//異常情況出現(xiàn)時跳出m_tSet.Close();關(guān)閉記錄集}voidCBaDialog::Enable(BOOLp)//賦值{ GetDlgItem(IDC_ADD)->EnableWindow(p);//獲取“ADD”控件賦區(qū)域 GetDlgItem(IDC_DELECT)->EnableWindow(p);//獲取“DELECT”控件賦值區(qū)域 GetDlgItem(IDC_EDIT)->EnableWindow(p);//獲取“EDIT”控件賦值區(qū)域 GetDlgItem(IDC_FIND)->EnableWindow(p);//獲取“FIND”控件賦值區(qū)域 GetDlgItem(IDC_ALL)->EnableWindow(p);//獲取“ALL”控件賦值區(qū)域 GetDlgItem(IDC_EXPORT)->EnableWindow(p);//獲取“EXPORT”控件賦值區(qū)}CStringCBaDialog::Select()//增加學(xué)生成績記錄,先判斷其增加的記錄在哪個班上,后判斷其學(xué)號是否超出,接著在記錄集中添加,最后顯示出來{ CStringstr;str.Format("%sSTUDENT",m_Getstring);//類型轉(zhuǎn)換 m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,str);//打開學(xué)生成績記錄集 str.Format("%sOBJECT",m_Getstring);//類型轉(zhuǎn)換m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,str);//打開各科成績記錄集 returnm_Getstring;}voidCBaDialog::Equal()//判斷在哪個班級{for(inti=0;i<5;i++) {floatp=0;//初始化p if(i==0)//如果i為0 p=m_Set.m_column3;//在三班if(i==1) p=m_Set.m_column4;//在四班if(i==2) p=m_Set.m_column5;//在五班 if(i==3) p=m_Set.m_column6;//在六班if(i==4) p=m_Set.m_column7;//在七班m_bSet.Edit();//修改各科成績記錄 if(Selec==FALSE)//如果查詢值為假時 {m_bSet.m_column2-=p;//將p值賦與各科成績表第二欄值的差值賦給第二欄 m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount); if(p>=60)//若p不小于60m_bSet.m_column4-=1;//將p值賦與各科成績表第四欄值的差值賦給第四欄 if(p>=80)//如果p不小于80 m_bSet.m_column5-=1; } Else//否則 {m_bSet.m_column2+=p;//將p值賦與各科成績表第二欄值的差值賦給第二欄 m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount); if(p>=60)//p大于等于60時 m_bSet.m_column4+=1; if(p>=80)//p大于等于80時 m_bSet.m_column5+=1; } m_bSet.Update();//學(xué)生各科成績記錄集更新 if(!m_bSet.IsEOF())//如果正常的情況m_bSet.MoveNext();//移至下一個 else break;//否則跳出 }}voidCBaDialog::Xuan()//選擇{m_ListCtrlb.DeleteAllItems(); this->display();//顯示m_ListCtrlx.DeleteAllItems();this->Show();//顯示}voidCBaDialog::OnTimer(UINTnIDEvent)//記時器{ CStringm_string;//定義變量m_string的類型m_cob.GetLBText(m_cob.GetCurSel(),m_string);//獲取內(nèi)容 if(m_Getstring!=m_string)//當(dāng)獲取的字符串與定義的一樣時 { GetDlgItem(IDC_STATR)->EnableWindow(TRUE);//給窗口項目賦值 this->Enable(FALSE);//賦初值為假 } CDialog::OnTimer(nIDEvent);//事件記時器}voidCBaDialog::OnAdd()//添加{ Selec=TRUE;//選擇的初值為真 CAddialogdlg;//添加窗口if(dlg.DoModal()==IDOK)//選擇OK按鈕時 { CStringstr=this->Select();//選擇字符串if(str=="一班")//如果字符為”一班” { if(dlg.m_nxue>=200||dlg.m_nxue<100) { AfxMessageBox("一班學(xué)號在100—200之間");//彈出“一班學(xué)號在100—200之間消息對話框 m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();//關(guān)閉各科成績記錄集return;//返回 } } elseif(str=="二班")//如果為“二班” { if(dlg.m_nxue<200||dlg.m_nxue>=300) {AfxMessageBox("二班學(xué)號在200—300之間");//彈出“二班學(xué)號在200—30之間”消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();//關(guān)閉各科成績記錄集 return;//返回 } } elseif(str=="三班")//如果為“三班” {if(dlg.m_nxue<300||dlg.m_nxue>=400) { AfxMessageBox("三班學(xué)號在300—400之間");//彈出“三班學(xué)號300—400之間”的消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();;//關(guān)閉各科成績記錄集 return;//返回 } } elseif(str=="四班")//如果為“四班” {if(dlg.m_nxue<400||dlg.m_nxue>=500) { AfxMessageBox("三班學(xué)號在400—500之間");//彈出“四班學(xué)號在300—40之間”消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();//關(guān)閉各科成績記錄集 return;//返回 } }elseif(str=="五班")//如果為“五班” {if(dlg.m_nxue<500||dlg.m_nxue>=600) {AfxMessageBox("三班學(xué)號在500—600之間");//彈出“五班學(xué)號在300—400之間”消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();//關(guān)閉各科成績記錄集 return;}//返回 }elseif(str=="六班")//如果為“六班” {if(dlg.m_nxue<600||dlg.m_nxue>=700) {AfxMessageBox("六班學(xué)號在400—500之間");//彈出“六班學(xué)號在300—40之間”消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();//關(guān)閉各科成績記錄集 return;}//返回}elseif(str=="七班")//如果為“七班” {if(dlg.m_nxue<700||dlg.m_nxue>=800) {AfxMessageBox("七班學(xué)號在700—800之間");//彈出“七班學(xué)號在300—400之間”消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();;//關(guān)閉各科成績記錄集 return;}//返回}elseif(str=="八班")//如果為“八班” {if(dlg.m_nxue<800||dlg.m_nxue>=900) {AfxMessageBox("八班學(xué)號在800—900之間");//彈出“八班學(xué)號在300—400之間”消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_bSet.Close();//關(guān)閉各科成績記錄集 return;//返回}} m_Set.AddNew();//添加消息 m_nRecordCount+=1;//統(tǒng)計數(shù)加1 m_Set.m_column1=dlg.m_nxue;//第一欄為學(xué)號 m_Set.m_column2=dlg.m_strName;//第二欄為姓名m_Set.m_column3=dlg.m_fmaths;//第三欄為數(shù)學(xué)成績m_Set.m_column4=dlg.m_fphysical;//第四欄為物理成績m_Set.m_column5=dlg.m_fchemistry;//第五欄為化學(xué)成績 m_Set.m_column6=dlg.m_fenglish;//第六欄為英語成績 m_Set.m_column7=dlg.m_fpolitic;//第七欄為政治成績 m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic;//第八欄為以上所有成績的總和 m_Set.m_column9=(float)(m_Set.m_column8/5);//第九欄為平均成績this->Equal();//等于 m_Set.Update();//Update()一定放在Equal()后m_Set.MoveFirst();//移向第一個 if(m_Set.m_column1==0)//如果第一欄為0 {m_Set.Delete();//刪除學(xué)生成績 m_Set.Requery();//請求 }m_Set.Requery(); this->Xuan();//選擇 }}voidCBaDialog::OnDelect()//刪除記錄{CDelectDialogdlg;//刪除對話框 Selec=FALSE;//賦初值為假 if(dlg.DoModal()==IDOK)//如果選擇OK按鈕 { if(dlg.m_nPass!=1234)//密碼為1234 AfxMessageBox("密碼不正確!你沒有權(quán)限刪除記錄");//彈出“密碼不正確!你沒有權(quán)限刪除記錄”的消息對話框else { this->Select();//選擇m_Set.MoveFirst();//移向第一個 BOOLsel=FALSE;//賦初值為假 do { if(m_Set.m_column1!=dlg.m_nxue)//第一欄不為學(xué)號 m_Set.MoveNext(); //移至下一個 else {m_nRecordCount-=1;//統(tǒng)計數(shù)減一 sel=TRUE;//賦真值m_bSet.MoveFirst();this->Equal();//等于m_Set.Delete();//刪除 m_Set.Requery();//查詢 break;//跳出 } }while(!m_Set.IsEOF());//出現(xiàn)異常時結(jié)束 if(sel==FALSE) { AfxMessageBox("沒有此記錄");//彈出“沒有此記錄”的消息對話框 return;//返回 } else this->Xuan();//選擇 }} }voidCBaDialog::OnFind()//查詢{CFinDialogdlg;//查詢對話框if(dlg.DoModal()==IDOK)//如果選擇OK按鈕{this->Select();//選擇m_bSet.Close();//關(guān)閉各科成績記錄集if(dlg.m_Getstring2==">=")//如果組合框中選擇的是“>=”m_Set.m_strFilter.Format("[%s]>=%.2f",dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=="=")//如果組合框中選擇的是“=”m_Set.m_strFilter.Format("[%s]=%.2f",dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=="<=")//組合框中選擇的是“<=”m_Set.m_strFilter.Format("[%s]<=%.2f",dlg.m_Getstring1,dlg.m_find);m_ListCtrlx.DeleteAllItems();m_Set.Requery();//查詢if(m_Set.IsEOF())//沒找到{AfxMessageBox("沒有符合條件的記錄");//彈出“沒有符合條件的記錄”的消息對話框m_Set.Close();//關(guān)閉學(xué)生成績記錄集return;}elsethis->Show();//顯示}}voidCBaDialog::OnAll()//顯示所有記錄{ this->Select();//選擇 m_bSet.Close();//關(guān)閉各科成績記錄集 m_Set.m_strFilter.Empty(); m_Set.Requery();//查詢 m_ListCtrlx.DeleteAllItems(); this->Show();//顯示}voidCBaDialog::OnEdit()//修改記錄{ CEditDialogdlg;//彈出修改框 if(dlg.DoModal()==IDOK)//如果選擇OK按鈕 {if(strcmp(dlg.m_pass,"1234")!=0)//密碼錯誤 AfxMessageBox("你沒有權(quán)限更改記錄!請重輸入密碼!");//彈出“你沒有權(quán)限更改記錄!請重輸入密碼!”的消息對話框else {this->Select();//選擇 m_Set.m_strFilter.Format("[學(xué)號]=%d",dlg.m_xue); m_Set.Requery();//查詢 if(m_Set.IsEOF())//沒有找到 AfxMessageBox("沒有此記錄");//彈出“沒有此記錄”的消息對話框 else {for(inti=0;i<5;i++) {floatp=0,q=0;//賦初值 if(i==0)//如果i為0 {p=dlg.m_fmaths;//數(shù)學(xué)成績的值賦給p q=m_Set.m_column3;//學(xué)生成績第3欄的數(shù)據(jù)賦給q }if(i==1)//如果i為1 { p=dlg.m_fphysical;//物理成績的值賦給p q=m_Set.m_column4;//學(xué)生成績第4欄的數(shù)據(jù)賦給q }if(i==2)//如果i為2{p=dlg.m_fchemistry;//化學(xué)成績的值賦給pq=m_Set.m_column5;//學(xué)生成績第5欄的數(shù)據(jù)賦給q} if(i==3)//如果i為3 {p=dlg.m_fenglish;//英語成績的值賦給p q=m_Set.m_column6;//學(xué)生成績第6欄的數(shù)據(jù)賦給q }if(i==4)//如果i為4 {p=dlg.m_fpolitic;//政治成績的值賦給p q=m_Set.m_column7;//學(xué)生成績第7欄的數(shù)據(jù)賦給q } m_bSet.Edit();//修改m_bSet.m_column2=m_bSet.m_column2+p-q; m_bSet.m_column3=m_bSet.m_column2/m_nRecordCount; if(p>=60&&q<60)//p大于等于60與q小于60時 m_bSet.m_column4+=1; if(p<60&&q>=60)//p小于60與q大于等于60時 m_bSet.m_column4-=1; if(p>=80&&q<80)//p大于等于80與q小于80時 m_bSet.m_column5+=1; if(p<80&&q>=80)//p小于60與q大于等于60時 m_bSet.m_column5-=1;m_bSet.Update();//更新各科成績表if(!m_bSet.IsEOF())//如果正常m_bSet.MoveNext();//移向下一個elsebreak;//跳出 }m_Set.Edit();//修改m_Set.m_column2=dlg.m_strName;//姓名m_Set.m_column3=dlg.m_fmaths;//數(shù)學(xué)m_Set.m_column4=dlg.m_fphysical;//物理m_Set.m_column5=dlg.m_fchemistry;//化學(xué)m_Set.m_column6=dlg.m_fenglish;//英語m_Set.m_column7=dlg.m_fpolitic;//政治 m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic;//第八欄為所有成績的總和m_Set.m_column9=(float)(m_Set.m_column8/5);//平均成績m_Set.Update();//更新 }m_Set.m_strFilter.Empty();m_bSet.Close();//關(guān)閉各科成績記錄集 m_Set.Close();//關(guān)閉學(xué)生成績記錄集 m_ListCtrlx.DeleteAllItems(); m_ListCtrlb.DeleteAllItems(); this->Select();//選擇 this->Show();//顯示 this->display();//顯示 } }}voidCBaDialog::Sort(BOOLisAsc,intsecol){ if(m_Set.IsOpen())//記錄集是打開的m_Set.Close();//關(guān)閉記錄集 this->Select();//選擇 m_bSet.Close();//關(guān)閉各科成績記錄集 CODBCFieldInfofieldInfo;//數(shù)據(jù)源信息 m_Set.GetODBCFieldInfo(secol,fieldInfo); if(isAsc) {m_Set.m_strSort=fieldInfo.m_strName+"ASC";//升序排列m_bIsAsc=TRUE;//真 } else { m_Set.m_strSort=fieldInfo.m_strName+"DESC";//降序排列 m_bIsAsc=FALSE; } m_Set.Requery(); //查詢}//列表控件voidCBaDialog::OnColumnclickList3(NMHDR*pNMHDR,LRESULT*pResult){ NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; if(FALSE==m_bS) {intk=pNMListView->iSubItem;//列表視圖 Sort(!m_bIsAsc,k);//升序 m_ListCtrlx.DeleteAllItems(); this->Show();//顯示 } *pResult=0;//結(jié)果}LRESULTCBaDialog::OnCreateTabel(WPARAMwParam,LPARAMlParam)//創(chuàng)建表{ switch(wParam) { case3://創(chuàng)建三班的成績表 m_Three=_T("三班");//選擇的是“三班” m_cob.AddString("三班");//在組合框中添加 break;//跳出 case4://創(chuàng)建四班的成績表 m_Four="四班";//選擇的是“四班” m_cob.AddString("四班");//在組合框中添加 break;//跳出 case5://創(chuàng)建五班的成績表 m_Five="五班";//選擇的是“五班” m_cob.AddString("五班");//在組合框中添加 break;//跳出 case6://創(chuàng)建六班的成績表 m_Six="六班";//選擇的是“六班” m_cob.AddString("六班");//在組合框中添加 break;//跳出 case7://創(chuàng)建七班的成績表 m_Seven="七班";//選擇的是“七班” m_cob.AddString("七班");//在組合框中添加 break;//跳出 case8://創(chuàng)建八班的成績表 m_Eight="八班";//選擇的是“八班” m_cob.AddString("八班");//在組合框中添加 break;//跳出 default: break;//全部跳出 }Save();return0;//返回}voidCBaDialog::Save(){//異常處理CFilebFile;try{bFile.Open(lpszFile,CFile::modeCreate|CFile::modeReadWrite);//讀寫}catch(CFileException*e){CStringstr;//定義變量 str.Format("%s",e->m_cause); AfxMessageBox(str);//字符型消息對話框}CArchiveart(&bFile,CArchive::store);art.m_pDocument=(CDocument*)&bFile;//重要if(art.m_pDocument!=NULL)//文檔為空Serialize(art);}voidCBaDialog::Serialize(CArchive&ar){ if(ar.IsStoring()) { //存

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論