




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C+課程設(shè)計報告摘要:隨著科學(xué)技術(shù)的發(fā)展,計算機(jī)領(lǐng)域不斷取得新的研究成果。計算機(jī)在代替和延伸腦力勞動方面發(fā)揮越來越重要的作用,不僅在工業(yè)方面而且在日常生活中也越來越離不開計算機(jī)。尤其是在學(xué)校里,要處理大量的學(xué)生數(shù)據(jù)。隨著科學(xué)技術(shù)的不斷提高,計算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用.作為計算機(jī)應(yīng)用的一部分,使用計算機(jī)對學(xué)生成績信息進(jìn)行管理,有著手工管理所無法比擬的優(yōu)點。學(xué)生成績管理系統(tǒng)能方便用戶迅速、準(zhǔn)確處理學(xué)生的成績,得到想要的數(shù)據(jù)并能將學(xué)生的信息以文檔保存。本文介紹了簡易學(xué)生成績管理系統(tǒng)在Microsoft Visual C+ 6.0環(huán)境下的實現(xiàn)過程:系統(tǒng)的分析,功能模塊的設(shè)計,系統(tǒng)的調(diào)試和測試。此系統(tǒng)的主要管理的信息有:學(xué)生的班級,學(xué)號,姓名和三(可以更改)門課的成績。本系統(tǒng)的主要功能有學(xué)生成績的添加、刪除、插入、顯示,能對學(xué)生成績按分?jǐn)?shù)或?qū)W號進(jìn)行排序,可以根據(jù)用戶的要求按班級,姓名,學(xué)號查詢學(xué)生的成績信息,計算每位學(xué)生的總分,分類匯總統(tǒng)計每門課的的總分均分能保存信息到文件以及從文件中讀取信息等功能。關(guān)鍵詞:學(xué)生成績管理系統(tǒng);功能模塊(函數(shù));指針;結(jié)構(gòu);鏈表;文件保存及讀取。 目錄1 需求分析41.1功能需求分析:41.11學(xué)生成績的讀入和寫出模塊41.12學(xué)生成績輸入刪除模塊41.13學(xué)生成績的查詢模塊51.14學(xué)生成績的分類匯總模塊51.2 環(huán)境需求分析:51.3 方法需求分析52概要設(shè)計62.1 系統(tǒng)功能模塊圖62.2 設(shè)計思想:63詳細(xì)設(shè)計73.1 設(shè)計原理73.2程序詳細(xì)代碼描述73.3系統(tǒng)界面214調(diào)試與操作說明214.1調(diào)試過程214.2操作說明23總 結(jié)24致 謝251 需求分析1.1功能需求分析:簡易學(xué)生成績管理系統(tǒng)主要有4個大的模塊:學(xué)生成績從文件讀入和寫入,學(xué)生成績的輸入和刪除,學(xué)生成績信息的查詢,以及學(xué)生成績的分類匯總。1.11學(xué)生成績的讀入和寫出模塊主要功能是讀出要管理的成績文檔,保存修改后的成績文檔。實際生活中學(xué)生成績的文件主要以word或excel保存,為了方便操作我在調(diào)式本系統(tǒng)中成績文件采用了txt的文檔格式保存,當(dāng)然以word文檔形式保存也是可以的。1.12學(xué)生成績輸入刪除模塊主要功能是輸入、追加、刪除學(xué)生成績的操作。添加操作是根據(jù)用戶的要求實現(xiàn)的。例如用戶可以輸入要刪除學(xué)生的學(xué)號刪除學(xué)生的信息。此程序輸入學(xué)生成績時就計算個人的總分,并保存到數(shù)據(jù)結(jié)構(gòu)中相應(yīng)的變量中。1.13學(xué)生成績的查詢模塊主要功能是按照用戶的要求查詢學(xué)生的成績。其中用戶可以選擇查詢單個學(xué)生的成績還是某個班級的成績,成績查詢中包括個人學(xué)生的總分,。1.14學(xué)生成績的分類匯總模塊統(tǒng)計主要功能是某個班級的每門學(xué)科的總分。1.2 環(huán)境需求分析:操作系統(tǒng): Windows XP開發(fā)軟件: Visual C+ 6.01.3 方法需求分析由于數(shù)組存放數(shù)據(jù)的時候要先確定數(shù)組的規(guī)模,不能動態(tài)的分配內(nèi)存空間,而單鏈表是非連續(xù)存放的,可以對內(nèi)存空間進(jìn)行動態(tài)分配,此系統(tǒng)是用單鏈表完成的。然后定義鏈表的結(jié)點類型為結(jié)構(gòu)就可以實現(xiàn)對學(xué)生學(xué)號、姓名、成績、班級等學(xué)保存。 每次只要返回頭指針,就可以對整個鏈表進(jìn)行操作,因此選鏈表來存放學(xué)生信息。2概要設(shè)計2.1 系統(tǒng)功能模塊圖學(xué) 生 成 績 管 理 系 統(tǒng) 鏈表的初始化 輸入學(xué)生成績刪除學(xué)生成績顯示學(xué)生成績按姓名找學(xué)生保存學(xué)生成績讀取學(xué)生成績計算總分學(xué)生成績排序按學(xué)號查成績分類合計2.2 設(shè)計思想:學(xué)生成績管理系統(tǒng)是用面向?qū)ο蟮姆椒ㄔO(shè)計,由于數(shù)組的存放是連續(xù)的,而單鏈表是非連續(xù)存放的,是動態(tài)分配內(nèi)存空間,因此此系統(tǒng)采用單鏈表來完成。各個功能模塊的實現(xiàn)主要轉(zhuǎn)變到對單鏈表的遍歷,添加和刪除結(jié)點。3詳細(xì)設(shè)計3.1 設(shè)計原理 學(xué)生成績管理系統(tǒng)以菜單選擇,通過調(diào)用各個函數(shù),對單鏈表的遍歷,實現(xiàn)不同的功能,不同函數(shù)處理后返回的只是一個頭結(jié)點,但是通過頭結(jié)點可以找到所有鏈表中的信息,只要有函數(shù),找到頭指針就能進(jìn)行相應(yīng)的操作,所以模塊化的程序方便以后添加或者刪除某些功能,程序中通過system(“cls”)清屏函數(shù)實現(xiàn)界面的轉(zhuǎn)換,主函數(shù)中的循環(huán)保證程序不會退出,一個循環(huán)和一個清屏函數(shù)實現(xiàn)了主菜單和各子畫面的切換(子函數(shù))。這樣的話各個子函數(shù)都可以調(diào)用一開始輸入的數(shù)據(jù),這樣就實現(xiàn)了各個不同函數(shù)調(diào)用時都能使用整個系統(tǒng)連續(xù)起來了。作為一個學(xué)生成績管理系統(tǒng),增加了文件的讀入和寫出功能,增加了程序的實用性。3.2程序詳細(xì)代碼描述#include #include #include #include using namespace std; #define max 100; class student public: student *next; public: string name;/姓名 long num;/學(xué)號 int x,y,z;/數(shù)學(xué),計算機(jī),英語 int AA;/總分 void play()coutname學(xué)生的學(xué)號是num,數(shù)學(xué):x,計算機(jī):y,英語:z,總分:AAnext; delete stu; stu=p; stu=0; void sadd(); /添加 void sremove(); /刪除 void samend(); /修改 void ssearch(); /查詢 void staxis(); /排序 void ssave(); /保存 void sload(); /讀取 /排序函數(shù) void pxh(); void psx(); void pyw(); void pyy(); void pAA(); private: student *stu; /頭接點 ; void cla:sadd()/添加 student *q; string name1; long num1; int x1,y1,z1; system(cls); coutn *增加的學(xué)生* nendl; cout請輸入學(xué)生的(中間用空格間隔) endl; cout姓名 學(xué)號 數(shù)學(xué)成績 計算機(jī)成績 英語成績:name1num1x1y1z1; q=new student(name1,num1,x1,y1,z1); q-next=0; q-AA=x1+y1+z1; if(stu) student *t; t=stu; if(t-num=num1) cout學(xué)號已存在,請重新輸入next) if(t-num=num1) cout學(xué)號已存在,請重新輸入next; t-next=q; else stu=q; cout輸入完畢endl; void cla:sremove()/刪除 system(cls); int num1; coutn* 刪除學(xué)生信息 *n; coutnum1; /查找要刪除的結(jié)點 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; /刪除結(jié)點 if(p1!=NULL)/若找到結(jié)點,則刪除 p1-play(); cout確定刪除嗎?Y/Nc; if(toupper(c)!=Y) return; if(p1=stu) /若要刪除的結(jié)點是第一個結(jié)點 stu=p1-next; delete p1; else /若要刪除的結(jié)點是后續(xù)結(jié)點 p2-next=p1-next; delete p1; cout找到學(xué)號為num1的學(xué)生,并刪除n; else /未找到結(jié)點 cout未找到想要刪除的學(xué)生!n; void cla:samend()/修改 system(cls); long num1; coutn* 修改學(xué)生信息 *n; coutnum1; /查找要修改的結(jié)點 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; if(p1!=NULL) cout學(xué)號是num1的學(xué)生的信息endl; cout姓名 name數(shù)學(xué)x計算機(jī)y英語zendl; cout請輸入修改后的信息:姓名 數(shù)學(xué)成績 計算機(jī)24 成績 英語成績p1-namep1-xp1-yp1-z; p1-AA=p1-x+p1-y+p1-z; cout修改成功endl; else /未找到接點 cout未找到!n; void cla:ssearch()/查詢 system(cls); coutn* 查詢學(xué)生信息 *nendl; cout請輸入查詢方式:endl; cout1.按學(xué)號查詢endl; cout2.按姓名查詢endl; cout3.返回c; switch (c) case 1: long num1; cout要查詢的學(xué)號num1; /查找要查詢的結(jié)點 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; if(p1!=NULL) cout學(xué)號是num1的學(xué)生的信息endl; cout姓名:name 數(shù)學(xué):x 計算機(jī):y 英語:zendl; cout查詢完畢.; else /未找到接點 cout未找到!n; break; case 2: string name1; cout要查詢的學(xué)生姓名name1; /查找要查詢的結(jié)點 student *p1,*p2; p1=stu; while(p1) if(p1-name=name1) break; else p2=p1; p1=p1-next; if(p1!=NULL) coutname1的學(xué)生的信息endl; cout學(xué)號:num 數(shù)學(xué):x 計算機(jī):y 英語:zendl; cout查詢完畢.; else /未找到接點 coutnext) n+; p1=p1-next; cout共有n條信息.endl; int i; p1=stu; for(i=1;inump1-next-num) / 如果頭結(jié)點大于第二個的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /頭結(jié)點交換 stu=p2; p1=stu; while(p1-next-next) /中間的交換 p2=p1; p1=p1-next; if(p1-nump1-next-num) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交換 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:psx()/按數(shù)學(xué)成績排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n條信息.endl; int i; p1=stu; for(i=1;ixp1-next-x) / 如果頭結(jié)點大于第二個的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /頭結(jié)點交換 stu=p2; p1=stu; while(p1-next-next) /中間的交換 p2=p1; p1=p1-next; if(p1-xp1-next-x) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交換 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:pyw()/按語文成績排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n條信息.endl; int i; p1=stu; for(i=1;iyp1-next-y) / 如果頭結(jié)點大于第二個的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /頭結(jié)點交換 stu=p2; p1=stu; while(p1-next-next) /中間的交換 p2=p1; p1=p1-next; if(p1-yp1-next-y) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交換 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:pyy()/按英語成績排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n條信息.endl; int i; p1=stu; for(i=1;izp1-next-z) / 如果頭結(jié)點大于第二個的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /頭結(jié)點交換 stu=p2; p1=stu; while(p1-next-next) /中間的交換 p2=p1; p1=p1-next; if(p1-zp1-next-z) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交換 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:pAA()/按總分排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n條信息.endl; int i; p1=stu; for(i=1;iAAp1-next-AA) / 如果頭結(jié)點大于第二個的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /頭結(jié)點交換 stu=p2; p1=stu; while(p1-next-next) /中間的交換 p2=p1; p1=p1-next; if(p1-AAp1-next-AA) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交換 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:staxis()/排序 system(cls); char c; cout請選擇以何種方式排序:endl; cout1以學(xué)號排序endl; cout2以數(shù)學(xué)成績排序endl; cout3以計算機(jī)成績排序endl; cout4以英語成績排序endl; cout5以總分排序endl; cout6返回endl; cout請選擇(1-6)c; switch (c) case 1:pxh(); break; case 2:psx(); break; case 3:pyw(); break; case 4:pyy(); break; case 5:pAA(); break; case 6:return; void cla:ssave() /保存到文件 system(cls); char c; coutc; if(toupper(c)!=Y) return; ofstream tfile(date.txt,ios_base:binary); student *p=stu; while(p)/ 寫入文件 tfilenametnumtxtytz; tfilenext; tfile.close(); cout保存完畢.next; delete p; p=stu; ifstream tfile(date.txt,ios_base:binary); string name1; long num1; int x1,y1,z1; tfilename1num1x1y1z1; while(tfile.good() /創(chuàng)建學(xué)生接點 student *s; s=stu; s=new student(name1,num1,x1,y1,z1); s-next=0; s-AA=x1+y1+z1; if(stu) /若已經(jīng)存在結(jié)點 student *p2; p2=stu; while(p2-next) /查找尾結(jié)點 p2=p2-next; p2-next=s; /連接 else /若不存在結(jié)點(表空) stu=s; /連接 tfilename1num1x1y1z1; tfile.close(); coutn學(xué)生信息已經(jīng)裝入.n; void main() char c; cla a; do coutn 學(xué) 生 成 績 管 理 系 統(tǒng) n; cout*n; cout 作者:09軟件+信息(2)班: n; cout 1增加學(xué)生 n; cout 2刪除學(xué)生 n; cout 3修改學(xué)生 n; cout 4查詢學(xué)生信息 n; cout 5排序 n; cout 6保存信息 n; cout 7讀取信息 n; cout 8退出 n; cout*n; coutc; switch(c) case 1: a.sadd();break; case 2: a.sremove();break; case 3: a.samend();break; case 4: a.ssearch();break; case 5: a.staxis();break; case 6: a.ssave();break; case 7: a.sload();break; while(c!=8); 3.3系統(tǒng)界面系統(tǒng)主菜單列出了該程序的所有功能,學(xué)生個人的總分在輸入創(chuàng)建鏈表是就計算好并儲存好了,同時顯示學(xué)生信息是就一起顯示出來了,使用時該適當(dāng)?shù)氖褂玫谝粋€初始化鏈表的功能,否則可能出現(xiàn)意想不到的錯誤。初始界面圖01:4調(diào)試與操作說明4.1調(diào)試過程增加學(xué)生修改信息查詢方式排序方式保存信息4.2操作說明一個成績管理系統(tǒng)如果不能進(jìn)行文檔的讀出和寫入的操作,功能再多,程序關(guān)閉后,所做的操作都將沒有,這就失去了實際的意義。此系統(tǒng)當(dāng)用戶退出系統(tǒng)時,用戶可以選擇是否保存已做的修改。當(dāng)用戶任意選擇一個操作時,系統(tǒng)將會提示。此外在輸入成績時,輸入錯誤的數(shù)字系統(tǒng)可以提示錯誤,但是如果輸入標(biāo)點和字母時,系統(tǒng)將會出錯,因此輸入成績時不可以輸入字母和標(biāo)點。此外,注意適當(dāng)?shù)氖褂面湵沓跏蓟乐钩霈F(xiàn)意外錯誤,例如,一開始不初始化就顯示學(xué)生信息,由于鏈表還未創(chuàng)建,會出現(xiàn)內(nèi)存不能為read的錯誤。提示是否返回主菜單,如果不返回則自動提示退出系統(tǒng),選擇是的話返回主菜單??偨Y(jié)一開始知道課題后,以為很簡單,但我想如果用數(shù)組實現(xiàn)的話,在內(nèi)存中是以連續(xù)地址存放的,不方便操作,所以我選擇了使用鏈表,它可以實現(xiàn)無序的在內(nèi)存中存放,只要有一個頭結(jié)點,就可以對整個鏈表進(jìn)行相關(guān)的操作,在調(diào)式時遇到了很多問題,最多的是指針問題引起的內(nèi)存不能為read,因此指針這一塊知識還得好好的加強(qiáng),當(dāng)我將學(xué)生成績管理系統(tǒng)的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 火災(zāi)應(yīng)急預(yù)案培訓(xùn)制度(3篇)
- 2025年法學(xué)概論考試的知識掌握方式與試題及答案
- 2025年科技進(jìn)步對戰(zhàn)略影響試題及答案
- 行政法與社會資本的關(guān)系探討試題及答案
- 2025年信息技術(shù)應(yīng)用能力試題及答案
- 2025年法學(xué)概論的實務(wù)考察及試題及答案
- 行政法學(xué)重要時事考題及答案
- 開源軟件項目2025年考試試題及答案
- 2025年網(wǎng)絡(luò)管理資格考核試題及答案
- 2025二手筆記本電腦轉(zhuǎn)讓合同
- 法人擔(dān)保書范例
- 2025年國家藥監(jiān)局醫(yī)療器械技術(shù)審評檢查大灣區(qū)分中心事業(yè)編制人員招聘5人歷年高頻重點提升(共500題)附帶答案詳解
- 巡邏盤查培訓(xùn)課件
- 《閩南高甲戲民俗文化旅游開發(fā)中存在的問題及優(yōu)化策略》5100字(論文)
- 客戶溝通與服務(wù)技巧考核試卷
- 機(jī)場安檢液態(tài)物品培訓(xùn)
- 計算機(jī)的基本工作原理初中七年級上冊信息技術(shù)課件
- 腸瘺 課件教學(xué)課件
- 加油站防雷制度檔案
- 2024年四川省巴中市中考文科綜合試卷(含答案解析)
- 欠款抵車的協(xié)議書范本
評論
0/150
提交評論