




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++程序設(shè)計(jì)課程設(shè)計(jì)匯報(bào)(--第二學(xué)期)學(xué)生成績(jī)系統(tǒng)開發(fā)學(xué)生成績(jī)系統(tǒng)開發(fā)設(shè)計(jì)匯報(bào)需求分析:用數(shù)組或鏈表數(shù)據(jù)結(jié)構(gòu)完成一個(gè)學(xué)生成績(jī)管理系統(tǒng),此系統(tǒng)詳細(xì)功效要求以下:(1)學(xué)生信息錄入功效
1)用戶從鍵盤輸入每個(gè)學(xué)生信息:學(xué)號(hào)、姓名、性別、數(shù)學(xué)、英語(yǔ)、政治、程序設(shè)計(jì)基礎(chǔ)、物理五門課成績(jī)。
2)可插入一個(gè)或多個(gè)學(xué)生信息到當(dāng)前編輯班級(jí)數(shù)據(jù)中。3)可刪除一個(gè)或多個(gè)學(xué)生信息。(2)文件保留功效
1)學(xué)生信息每一班存為一個(gè)數(shù)據(jù)文件,數(shù)據(jù)文件可在程序中打開、編輯和重新保留。
2)用戶輸入學(xué)生信息可隨時(shí)保留數(shù)據(jù)文件。
(3)文件打開功效
1)程序只能對(duì)當(dāng)前打開數(shù)據(jù)文件進(jìn)行編輯。
(4)查詢功效
1)瀏覽全部學(xué)生信息;
2)按學(xué)號(hào)查詢學(xué)生信息;
3)按姓名查詢學(xué)生信息;
4)查詢一個(gè)班總成績(jī)和平均成績(jī);
5)查詢一個(gè)班某一門課總成績(jī)和平均成績(jī);
6)查詢某一門課分?jǐn)?shù)段(<60,60-69,70-79,80-89,>90)學(xué)生數(shù)。
(5)報(bào)表輸出功效
1)按學(xué)號(hào)輸出一個(gè)班學(xué)生信息:學(xué)號(hào)、姓名、性別、數(shù)學(xué)、英語(yǔ)、政治、程序設(shè)計(jì)基礎(chǔ)、物理成績(jī)和總成績(jī),到屏幕和文件。
2)按總成績(jī)輸出從高到低輸出學(xué)號(hào)、姓名信息。
注:以上功效以菜單形式供用戶使用,并有一定容錯(cuò)功效。功效描述整體框架:整個(gè)學(xué)生成績(jī)管理系統(tǒng)采取鏈表作為基本數(shù)據(jù)結(jié)構(gòu),創(chuàng)建一個(gè)類student用于保留學(xué)生數(shù)據(jù)且是鏈表中一個(gè)節(jié)點(diǎn)。類list作為保留整個(gè)鏈表之用。主函數(shù)經(jīng)過switch語(yǔ)句來依照用戶需要連接各個(gè)模塊,以實(shí)現(xiàn)用戶需要。模塊基本介紹:用戶輸入模塊在此模塊中,用戶將依照菜單提醒結(jié)合自己需求輸入一個(gè)0~11值,來實(shí)現(xiàn)一定功效。學(xué)生信息錄入模塊此模塊能夠讓用戶從鍵盤輸入每個(gè)學(xué)生信息:學(xué)號(hào)、姓名、性別、數(shù)學(xué)、英語(yǔ)、政治、程序設(shè)計(jì)基礎(chǔ)、物理五門課成績(jī)。用戶可插入一個(gè)或多個(gè)學(xué)生信息到當(dāng)前編輯班級(jí)數(shù)據(jù)中。用戶可刪除一個(gè)或多個(gè)學(xué)生信息。3.文件保留功效模塊
用戶在確定以錄入成績(jī)無誤之后,能夠?qū)W(xué)生信息以每一班為單位存為一個(gè)數(shù)據(jù)文件。用戶輸入學(xué)生信息可隨時(shí)保留數(shù)據(jù)文件。4.文件打開功效模塊用戶能夠用此模塊將數(shù)據(jù)文件在程序中打開、編輯,程序只能對(duì)當(dāng)前打開數(shù)據(jù)文件進(jìn)行編輯。5.查詢功效模塊在此模塊里,用戶可實(shí)現(xiàn)以下操作:1.瀏覽全部學(xué)生信息;2.按學(xué)號(hào)查詢學(xué)生信息;3.按姓名查詢學(xué)生信息;4.查詢一個(gè)班每個(gè)人總成績(jī)和平均成績(jī);5.查詢一個(gè)班某一門課每個(gè)人總成績(jī)和平均成績(jī);6)進(jìn)行成績(jī)統(tǒng)計(jì)分析:包含總?cè)藬?shù),每門課最高成績(jī)、最低成績(jī)、平均成績(jī)、各個(gè)分?jǐn)?shù)段人數(shù)(100-90、89-80、79-70、69-60、59-50、50以下)、及格人數(shù)。6.報(bào)表輸出功效模塊在此模塊中,用戶能夠?yàn)g覽全部學(xué)生信息,或者能夠按學(xué)號(hào)輸出一個(gè)班學(xué)生信息:學(xué)號(hào)、姓名、性別、數(shù)學(xué)、英語(yǔ)、政治、程序設(shè)計(jì)基礎(chǔ)、物理成績(jī)和總成績(jī),到屏幕和文件。也能夠按總成績(jī)輸出從高到低輸出學(xué)號(hào)、姓名信息。
開始m開始m值1,3,4值8值9值7,2,6,5值10,11文件保留功效模塊學(xué)生信息錄入模塊文件打開功效模塊查詢功效模塊報(bào)表輸出功效模塊用戶輸入,并將值保留至m中m結(jié)束總體設(shè)計(jì)主要功效模塊算法設(shè)計(jì)思緒:1.用戶輸入模塊設(shè)計(jì)提醒用戶輸入一個(gè)0~11值,并存放在一個(gè)整型變量m中。2.學(xué)生信息錄入模塊設(shè)計(jì)經(jīng)過應(yīng)用list中instu()函數(shù),來新建一個(gè)鏈表中節(jié)點(diǎn),即一個(gè)新學(xué)生信息,來進(jìn)行成績(jī)錄入功效。成績(jī)修改功效,能夠依照姓名或?qū)W號(hào)進(jìn)行查詢并修改對(duì)應(yīng)課程成績(jī),使用了voidsearch(chars[10],int)和voidsearch1(chars[20],int)函數(shù)進(jìn)行操作。search函數(shù)依照姓名查找,search1函數(shù)依照學(xué)號(hào)進(jìn)行查找。因?yàn)閷W(xué)號(hào)和姓名,都是存放在字符數(shù)組中,所以都是經(jīng)過字符串比較進(jìn)行查找。然后依照整形參數(shù)進(jìn)行對(duì)應(yīng)課程成績(jī)修改。成績(jī)刪除功效,也是能夠依照姓名或?qū)W號(hào)進(jìn)行刪除,查詢算法和成績(jī)修改功效查詢方法是一樣,當(dāng)找到要?jiǎng)h除節(jié)點(diǎn)時(shí),因?yàn)楣?jié)點(diǎn)都是在堆內(nèi)存中保留,所以能夠直接delete掉,并將前一個(gè)節(jié)點(diǎn)next指針指向被刪掉節(jié)點(diǎn)next指針?biāo)赶蚬?jié)點(diǎn)。3.文件保留功效模塊先提醒用戶輸入保留文件文件名及班級(jí)名稱。文件前兩行分別是班級(jí)名稱和成績(jī)單開頭,然后經(jīng)過ofstream變量output來進(jìn)行學(xué)生信息輸出,一項(xiàng)一項(xiàng)輸出,并設(shè)定格式,直到輸出節(jié)點(diǎn)為NULL為止,之后關(guān)閉output。4.文件打開功效模塊先提醒用戶輸入要打開數(shù)據(jù)文件名稱,然后經(jīng)過一個(gè)ifstream變量input來進(jìn)行文件操作。首先判斷文件是否存在,假如不存在則輸出"Filedoesnotexist",并跳出switch語(yǔ)句。文件存在話,則能夠進(jìn)行數(shù)據(jù)存入了。因?yàn)閿?shù)據(jù)文件具備固定格式,即開頭兩行是班級(jí)名稱和表頭,則能夠先用兩次input.getline(temp,80);語(yǔ)句來將input設(shè)置到第三行,此時(shí)能夠?qū)?shù)據(jù)經(jīng)過input讀入鏈表中。先用input.eof()判斷文件中是否有數(shù)據(jù),若有數(shù)據(jù),則進(jìn)行數(shù)據(jù)讀入,直到文件結(jié)束。5.查詢功效模塊能夠依照姓名或?qū)W號(hào)進(jìn)行查找,搜索方法和前幾個(gè)模塊相同。經(jīng)過outstu1(char*n)和outstu(char*n)來進(jìn)行輸出。總成績(jī)和平均成績(jī)查詢經(jīng)過函數(shù)voidoutsum(char*)和voidoutsum1(char*)來完成。經(jīng)過函數(shù)scanall()來瀏覽全部學(xué)生信息。經(jīng)過函數(shù)think()來進(jìn)行成績(jī)統(tǒng)計(jì)分析。6.報(bào)表輸出功效模塊經(jīng)過建立一個(gè)新類classstucopy用于拷貝student數(shù)據(jù),并實(shí)現(xiàn)排序功效。創(chuàng)建一個(gè)stucopystu[M]數(shù)組,將原鏈表數(shù)據(jù)拷貝與數(shù)組中,然后用選擇排序方法將數(shù)組排序,然后用output按照標(biāo)準(zhǔn)格式輸出或保留為數(shù)據(jù)文件。四,調(diào)試分析調(diào)試是整個(gè)程序編寫過程中十分主要也是很困難一部分,在這個(gè)過程中用了不少時(shí)間進(jìn)行程序調(diào)試,在調(diào)試過程中碰到相關(guān)問題以下:一、語(yǔ)法錯(cuò)誤1、語(yǔ)句最終忘記了加上“;”,使程序發(fā)生錯(cuò)誤。2、把“<<”與“>>”寫反,以及字符與字符串操作問題,這些是比較簡(jiǎn)單錯(cuò)誤,很輕易分辨出來,并改過之。3、函數(shù)返回值問題,也是比較輕易找出并處理問題。二、邏輯錯(cuò)誤1、文件寫入與讀出,剛開始對(duì)文件操作不太明白,一致不能很好操作文件,其中最大問題是對(duì)已存在文件讀取問題,經(jīng)過“顯示全部學(xué)生成績(jī)”將數(shù)據(jù)從文件中讀取,可是在使用過程中總是出現(xiàn)讀犯錯(cuò)誤,出現(xiàn)亂碼。2、內(nèi)存分配問題,這也是迷惑了我很久問題。對(duì)于我們初學(xué)者來說對(duì)內(nèi)存分配和釋放問題是比較抽象和含糊難題,原來使用鏈表方式存放數(shù)據(jù),然而待到排序時(shí)出現(xiàn)了交換數(shù)據(jù)困難問題,以及分配空間繁瑣釋放空間不及時(shí)問題,造成空間浪費(fèi)使得程序運(yùn)行效率低問題。所以最終采取了次序存放統(tǒng)計(jì)方式,這么就能改變前述問題。整個(gè)調(diào)試過程中主要是這么幾個(gè)問題,其余是一些小問題,很輕易就調(diào)試出來了。五,測(cè)試結(jié)果主界面2,錄入統(tǒng)計(jì)3,查詢統(tǒng)計(jì)修改統(tǒng)計(jì)刪除統(tǒng)計(jì)總成績(jī)和平均成績(jī)查詢統(tǒng)計(jì)排序統(tǒng)計(jì)六,用戶使用說明用戶運(yùn)行程序后進(jìn)入系統(tǒng)主界面,在主界面用戶能夠打開或者新建數(shù)據(jù)文件。用戶新建或者打開文件要符合操作系統(tǒng)要求,假如用戶打開不存在文件,那么系統(tǒng)將按照用戶打開文件名作為新數(shù)據(jù)文件名,并對(duì)其進(jìn)行相關(guān)操作。本系統(tǒng)同時(shí)只能對(duì)一個(gè)數(shù)據(jù)文件進(jìn)行相關(guān)操作,不能同時(shí)打開多個(gè)數(shù)據(jù)文件,其類似于單用戶操作系統(tǒng)。當(dāng)用戶指定當(dāng)前文件后可對(duì)其進(jìn)行顯示,插入,刪除,修改,計(jì)算平均分等相關(guān)功效。用戶在操作過程中可隨時(shí)對(duì)當(dāng)前文件進(jìn)行保留到文件操作,以預(yù)防修改數(shù)據(jù)丟失。操作完當(dāng)前文件后,用戶能夠關(guān)閉該文件,在不退出本系統(tǒng)前提下另行打開或者新建數(shù)據(jù)文件對(duì)其進(jìn)行相關(guān)操作。七,課程設(shè)計(jì)總結(jié)兩個(gè)星期課程設(shè)計(jì),即使有些疲勞和困倦,但帶給我很多收獲。C++已經(jīng)學(xué)了一個(gè)學(xué)期了,有許多知識(shí)都存在似懂非懂現(xiàn)象,這種現(xiàn)象經(jīng)過實(shí)際上機(jī)操作,已經(jīng)降低了許多。對(duì)這些知識(shí)也有了更深了解和很好掌握。也有很多理論上說得過去代碼,但到了實(shí)際操作,卻是行不通。這種迷惑,有許多已經(jīng)經(jīng)過實(shí)際操作處理了,并能夠深刻認(rèn)識(shí),但也有很多沒有明白。只能避過這些方法,換方法實(shí)現(xiàn)。在課程設(shè)計(jì)之前,因?yàn)橛辛司C合試驗(yàn)經(jīng)驗(yàn)與教訓(xùn),明白了寫代碼這一步是非常主要,因?yàn)楫?dāng)你把代碼輸入電腦,并用編譯器將其運(yùn)行,發(fā)覺經(jīng)過不了,再來檢驗(yàn)找出問題,這是一件非常辛勞事情,也很浪費(fèi)時(shí)間。于是在課程設(shè)計(jì)時(shí)候,我花了兩天時(shí)間來規(guī)劃與寫代碼,將要實(shí)現(xiàn)內(nèi)容分析清楚,才把代碼輸入電腦。我以為寫程序,應(yīng)該先找到該程序中關(guān)鍵地方,用多個(gè)方法來實(shí)現(xiàn)該關(guān)鍵,這才可能防止等到發(fā)覺邏輯上或者編譯器不支持上錯(cuò)誤,才來想補(bǔ)救方法,這么花費(fèi)時(shí)間在想補(bǔ)救方法是很不值得。此次任務(wù)完成,也表現(xiàn)出同學(xué)之間團(tuán)結(jié)精神。實(shí)踐是檢驗(yàn)真理唯一標(biāo)準(zhǔn)。沒有實(shí)踐,就不會(huì)發(fā)覺和深刻體會(huì)它真實(shí)所在。只有經(jīng)過檢驗(yàn)真理,在自己心里,才會(huì)認(rèn)可它真實(shí)性。面向?qū)ο蟪绦蛟O(shè)計(jì)完成,使我們知道了真理主要性,理論和實(shí)際相結(jié)合,才能真正把握所學(xué)和所掌握知識(shí)。八,附錄源代碼:#include<iostream.h>#include<string.h>#include<iomanip.h>#include<fstream.h>constintM=20;classstucopy//這類用于拷貝student數(shù)據(jù),用于排序功效實(shí)現(xiàn){public: charid[20]; charsex[10]; charname[10]; doublegrade[5]; doublesumsum;//總成績(jī) doubleaverage;//平均成績(jī)};classstudent//用于保留學(xué)生信息類{friendclasslist;public:charid[20];//保留學(xué)號(hào)charsex[10];//保留性別charname[10];//保留名字doublegrade[5];//保留成績(jī)student(){ next=0; for(inti=0;i<20;i++) id[i]=0; for(i=0;i<10;i++) sex[i]=0; for(i=0;i<10;i++) name[i]=0;}voids();voidsetid(charid1[20]){ for(inti=0;i<20;i++) id[i]=id1[i];}voidsetsex(charsex1[10]){ for(inti=0;i<10;i++) sex[i]=sex1[i];}voidsetname(charname1[10]){ for(inti=0;i<10;i++) name[i]=name1[i];}voidsetgrade(doublegrade1[5]){ for(inti=0;i<5;i++) grade[i]=grade1[i];}student*next;//next指向下一個(gè)學(xué)生,組成鏈表char*outid(){returnid;};char*outsex(){returnsex;};char*outname(){returnname;};doubleoutsum(){ doublesum=0; for(inti=0;i<5;i++) sum+=this->outgrade(i); returnsum;}doubleoutav(){returnthis->outsum()/5;}doubleoutgrade(inti){returngrade[i];};voidintgrade(int);};voidstudent::intgrade(intj)//用于修改學(xué)生成績(jī){ switch(j) { case1: cout<<"請(qǐng)輸入數(shù)學(xué)成績(jī):\n"; cin>>grade[0];break; case2: cout<<"請(qǐng)輸入英語(yǔ)成績(jī):\n"; cin>>grade[1];break; case3: cout<<"請(qǐng)輸入政治成績(jī):\n"; cin>>grade[2];break; case4: cout<<"請(qǐng)輸入程序設(shè)計(jì)基礎(chǔ)成績(jī):\n"; cin>>grade[3];break; case5: cout<<"請(qǐng)輸入物理成績(jī):\n"; cin>>grade[4];break; }}voidstudent::s()//用于錄入學(xué)生信息{cout<<"請(qǐng)輸入學(xué)號(hào):\n";cin>>id;cout<<"請(qǐng)輸入姓名:\n";cin>>name;cout<<"請(qǐng)輸入性別:\n";cin>>sex;cout<<"請(qǐng)輸入數(shù)學(xué)成績(jī):\n";cin>>grade[0];cout<<"請(qǐng)輸入英語(yǔ)成績(jī):\n";cin>>grade[1];cout<<"請(qǐng)輸入政治成績(jī):\n";cin>>grade[2];cout<<"請(qǐng)輸入程序設(shè)計(jì)基礎(chǔ)成績(jī):\n";cin>>grade[3];cout<<"請(qǐng)輸入物理成績(jī):\n";cin>>grade[4];}classlist//這類為鏈表{private:doublehigh[5],low[5];public:student*last,*first;//鏈表開頭和結(jié)尾doubletotoal;list(){last=0;first=0;};~list();voidinstu();//新建一個(gè)學(xué)生數(shù)據(jù)voidoutstu(char*);//依照姓名輸出一個(gè)學(xué)生信息intdelstu(char*n);//依照姓名刪除一個(gè)學(xué)生信息voidoutstu1(char*);//依照學(xué)號(hào)輸出一個(gè)學(xué)生信息intdelstu1(char*n);//依照學(xué)號(hào)刪除一個(gè)學(xué)生信息voidoutsum(char*);//依照姓名輸出一個(gè)學(xué)生總成績(jī)和平均成績(jī)voidoutsum1(char*);//依照學(xué)號(hào)輸出一個(gè)學(xué)生總成績(jī)和平均成績(jī)voidthink();//用于輸出班級(jí)成績(jī)統(tǒng)計(jì)分析voidsearch(chars[10],int);//依照姓名修改一個(gè)學(xué)生成績(jī)voidsearch1(chars[20],int);//依照學(xué)號(hào)修改一個(gè)學(xué)生成績(jī)doublehi(inti);//求某門課最高分doublelo(inti);//求某門課最低分voidav(inti);//求某門課平均分voidev(inti);//用于班級(jí)成績(jī)統(tǒng)計(jì)分析人數(shù)分布輸出voidscanall();//輸出全部學(xué)生信息};list::~list()//析構(gòu)函數(shù),將全部創(chuàng)建學(xué)生對(duì)象刪掉{if(first!=0){student*p=first,*temp;while(p!=NULL){temp=p;p=p->next;deletetemp;cout<<"ok\n";}}}voidlist::instu(){student*p=newstudent();p->s();if(first==0){first=last=p;}else{last->next=p;last=p;}}voidlist::outstu(char*n){ if(first==0){cout<<"班級(jí)無組員!查無此人!"<<endl;return;} student*temp=first;for(;temp!=NULL;temp=temp->next) if(strcmp(temp->outname(),n)==0) { cout<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(6)<<"性別"<<setw(6)<<"數(shù)學(xué)"<<setw(6) <<"英語(yǔ)"<<setw(6)<<"政治"<<setw(14)<<"程序設(shè)計(jì)基礎(chǔ)"<<setw(6)<<"物理"<<endl; cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<temp->outsex()<<setw(6) <<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(14) <<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;} cout<<"查無此人!"<<endl; return;}voidlist::outstu1(char*n){ if(first==0){cout<<"班級(jí)無組員!查無此人!"<<endl;return;} student*temp=first;for(;temp!=NULL;temp=temp->next) if(strcmp(temp->outid(),n)==0) { cout<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(6)<<"性別"<<setw(6)<<"數(shù)學(xué)"<<setw(6) <<"英語(yǔ)"<<setw(6)<<"政治"<<setw(14)<<"程序設(shè)計(jì)基礎(chǔ)"<<setw(6)<<"物理"<<endl; cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<temp->outsex()<<setw(6) <<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(14) <<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;} cout<<"查無此人!"<<endl; return;}intlist::delstu(char*n){ if(first==0){cout<<"無數(shù)據(jù)!"<<endl;return0;} student*temp=first; student*p; if(strcmp(first->outname(),n)==0) {first=first->next;deletetemp; cout<<"\n刪除成功\n";return0;} elsefor(;temp->next!=NULL;temp=temp->next) {if(strcmp(temp->next->outname(),n)==0) {p=temp->next;temp->next=temp->next->next;deletep; cout<<"\n刪除成功\n";return0;}} cout<<"\n查無此人,刪除失敗\n"; return0;}intlist::delstu1(char*n){ if(first==0){cout<<"無數(shù)據(jù)!"<<endl;return0;} student*temp=first; student*p; if(strcmp(first->outid(),n)==0) {first=first->next;deletetemp; cout<<"\n刪除成功\n";return0;} elsewhile(temp->next!=NULL) {if(strcmp(temp->next->outid(),n)==0) {p=temp->next;temp->next=temp->next->next;deletep; cout<<"\n刪除成功\n";return0;} elsetemp=temp->next;} cout<<"\n查無此人,刪除失敗\n"; return0;}voidlist::think(){ if(first==0){cout<<"無數(shù)據(jù)!"<<endl;return;}inti=0; student*p=first; while(p!=NULL) { p=p->next; i++; } totoal=i;cout<<"人數(shù):"<<i<<endl;cout<<"數(shù)學(xué)\n";cout<<"最高分:"<<hi(0)<<""<<"最低分:"<<lo(0)<<""<<"平均分:";av(0);ev(0);cout<<"英語(yǔ)\n";cout<<"最高分:"<<hi(1)<<""<<"最低分:"<<lo(1)<<""<<"平均分:";av(1);ev(1);cout<<"政治\n";cout<<"最高分:"<<hi(2)<<""<<"最低分:"<<lo(2)<<""<<"平均分:";av(2);ev(2);cout<<"程序設(shè)計(jì)基礎(chǔ)\n";cout<<"最高分:"<<hi(3)<<""<<"最低分:"<<lo(3)<<""<<"平均分:";av(3);ev(3);cout<<"物理\n";cout<<"最高分:"<<hi(4)<<""<<"最低分:"<<lo(4)<<""<<"平均分:";av(4);ev(4);}doublelist::hi(inti){high[i]=0.00;student*temp=first;while(temp!=0){if(temp->outgrade(i)>high[i])high[i]=temp->outgrade(i);temp=temp->next;}returnhigh[i];}doublelist::lo(inti){low[i]=100;student*temp=first;while(temp!=0){if(temp->outgrade(i)<low[i])low[i]=temp->outgrade(i);temp=temp->next;}returnlow[i];}voidlist::av(inti){ doubleaver=0; student*temp=first; while(temp!=NULL) { aver+=temp->outgrade(i); temp=temp->next; } cout<<aver/totoal<<endl;}voidlist::ev(inti){inta=0,b=0,c=0,d=0,e=0,f=0;student*temp=first;while(temp!=0){switch((int)temp->outgrade(i)/10){case10:a++;break;case9:a++;break;case8:b++;break;case7:c++;break;case6:d++;break;case5:e++;break;default:f++;}temp=temp->next;}cout<<"100-90人數(shù):"<<a<<"89-80人數(shù):"<<b<<"79-70人數(shù):"<<c<<"69-60人數(shù):"<<d<<"59-50人數(shù):"<<e<<"50以下人數(shù):"<<f<<"及格人數(shù):"<<(a+b+c+d)<<"不及格人數(shù):"<<(e+f)<<endl;}voidlist::search(chars[10],intn){student*temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),s)==0)temp->intgrade(n);}voidlist::search1(chars[20],intn){ student*temp=first;for(;temp!=NULL;temp=temp->next) if(strcmp(temp->outid(),s)==0)temp->intgrade(n);}voidlist::outsum(char*n){ if(first==0){cout<<"無數(shù)據(jù)!"<<endl;return;} student*temp=first;for(;temp!=NULL;temp=temp->next) if(strcmp(temp->outname(),n)==0) { cout<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(8)<<"性別"<<setw(8)<<"總成績(jī)"<< setw(10)<<"平均成績(jī)"<<"\n"; cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8) <<temp->outsex()<<setw(8)<<temp->outsum()<<setw(10)<<temp->outav(); return; } cout<<"查無此人!"<<endl; return;}voidlist::outsum1(char*n){ doublesum=0; inti=0; doubleav=0; if(first==0){cout<<"無數(shù)據(jù)!"<<endl;return;} student*temp=first;for(;temp!=NULL;temp=temp->next) if(strcmp(temp->outid(),n)==0) { cout<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(8)<<"性別"<<setw(8)<<"總成績(jī)"<< setw(10)<<"平均成績(jī)"<<"\n"; cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8) <<temp->outsex()<<setw(8)<<temp->outsum()<<setw(10)<<temp->outav(); return; } cout<<"查無此人!"<<endl; return;}voidlist::scanall(){ student*temp; for(temp=first;temp!=NULL;temp=temp->next) cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6) <<temp->outsex()<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1) <<setw(6)<<temp->outgrade(2)<<setw(14)<<temp->outgrade(3)<<setw(6) <<temp->outgrade(4)<<setw(8)<<temp->outsum()<<setw(10)<<temp->outav()<<endl;}voidmain(){ stucopystu[M];//復(fù)制整個(gè)鏈表數(shù)據(jù)于數(shù)組,用于排序 stucopystutemp;//暫時(shí)變量 listwill;//整個(gè)鏈表 student*p,*p1=newstudent(),*q;//暫時(shí)變量 ifstreaminput;//輸入 ofstreamoutput;//輸出 charfile[20],classname[20],temp[80],id[20],name[9],sex1[10];//暫時(shí)變量 intm=0,n=0,j=0,i=0;//暫時(shí)變量 doublegrade1[5];//暫時(shí)變量 for(i=0;i<20;i++)id[i]=0; for(i=0;i<9;i++)name[i]=0;//初始化do{cout<<"http://----------------------------------------------------------\\\n"<<"0、退出系統(tǒng)。\n"<<"1、成績(jī)錄入:包含學(xué)生學(xué)號(hào)、姓名、性別和各門課程成績(jī)錄入。\n"<<"2、成績(jī)查詢:能夠依照學(xué)號(hào)或姓名查詢某個(gè)學(xué)生成績(jī)。\n"<<"3、成績(jī)修改:能夠依照學(xué)號(hào)或姓名來修改對(duì)應(yīng)學(xué)生成績(jī)。\n"<<"4、數(shù)據(jù)刪除:能夠依照學(xué)號(hào)或姓名指定刪除某個(gè)學(xué)生數(shù)據(jù)。\n"<<"5、成績(jī)統(tǒng)計(jì)分析:包含總?cè)藬?shù)、最高成績(jī)、最低成績(jī)、平均成績(jī)、\n"<<"各個(gè)分?jǐn)?shù)段人數(shù)(100-90、89-80、79-70、69-60、59-50、50以下)、及格率。\n"<<"6、總成績(jī)和平均成績(jī)查詢:能夠依照學(xué)號(hào)或姓名查詢。\n"<<"7、瀏覽全部學(xué)生信息。\n"<<"8、將全部學(xué)生信息保留成文件。\n"<<"9、打開指定數(shù)據(jù)文件。\n"<<"10、按總成績(jī)排序輸出學(xué)生信息。\n"<<"11、按學(xué)號(hào)次序輸出學(xué)生信息,并可保留成文件。\n"<<"http://----------------------------------------------------------\\\n";cout<<endl<<"請(qǐng)輸入:";cin>>m;switch(m){case1:will.instu();break;case2: cout<<"1.依照學(xué)號(hào)查詢2.依照姓名查詢"<<endl<<"請(qǐng)輸入:"; cin>>n; switch(n){ case1: cout<<"請(qǐng)輸入學(xué)號(hào)\n"; cin>>id; will.outstu1(id); cout<<"\n";break; case2: cout<<"請(qǐng)輸入姓名\n"; cin>>name; will.outstu(name); cout<<"\n";break;}break;case3: cout<<"1.依照學(xué)號(hào)查詢2.依照姓名查詢"<<endl<<"請(qǐng)輸入:"; cin>>n; switch(n){ case1: cout<<"請(qǐng)輸入學(xué)號(hào)\n"; cin>>id; will.outstu1(id); cout<<"\n"; cout<<setw(6)<<"1.數(shù)學(xué)"<< setw(6)<<"2.英語(yǔ)"<<setw(6)<<"3.政治"<< setw(14)<<"4.程序設(shè)計(jì)基礎(chǔ)"<<setw(6)<<"5.物理"<<endl; cout<<"請(qǐng)輸入要修改課程編號(hào):"; cin>>j; will.search1(id,j);break; case2: cout<<"請(qǐng)輸入姓名\n"; cin>>name; will.outstu(name); cout<<"\n"; cout<<setw(6)<<"1.數(shù)學(xué)"<< setw(6)<<"2.英語(yǔ)"<<setw(6)<<"3.政治"<< setw(14)<<"4.程序設(shè)計(jì)基礎(chǔ)"<<setw(6)<<"5.物理"<<endl; cout<<"請(qǐng)輸入課程編號(hào):"; cin>>j; will.search(name,j);break;}break;case4: cout<<"1.依照學(xué)號(hào)刪除2.依照姓名刪除"<<endl<<"請(qǐng)輸入:"; cin>>n; switch(n){ case1: cout<<"請(qǐng)輸入學(xué)號(hào)\n"; cin>>id; will.outstu1(id); will.delstu1(id);break; case2: cout<<"請(qǐng)輸入姓名\n"; cin>>name; will.outstu(name); will.delstu(name);break;}break;case5:will.think();break;case6: cout<<"1.依照學(xué)號(hào)查詢2.依照姓名查詢"<<endl<<"請(qǐng)輸入:"; cin>>n; switch(n){ case1: cout<<"請(qǐng)輸入學(xué)號(hào)\n"; cin>>id; will.outsum1(id);break; case2: cout<<"請(qǐng)輸入姓名\n"; cin>>name; will.outsum(name);break;}break;case7: cout<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(6)<<"性別"<<setw(6)<<"數(shù)學(xué)"<< setw(6)<<"英語(yǔ)"<<setw(6)<<"政治"<< setw(14)<<"程序設(shè)計(jì)基礎(chǔ)"<<setw(6)<<"物理"<<setw(8)<<"總成績(jī)"<< setw(10)<<"平均成績(jī)"<<"\n"; will.scanall(); break;case8: cout<<"請(qǐng)輸入文件名:"<<endl; cin>>file; cout<<"請(qǐng)輸入班級(jí)名稱:"<<endl; cin>>classname; output.open(file); p=will.first; output<<classname<<"成績(jī)單"<<endl<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(6)<<"性別"<<setw(6)<<"數(shù)學(xué)"<< setw(6)<<"英語(yǔ)"<<setw(6)<<"政治"<< setw(14)<<"程序設(shè)計(jì)基礎(chǔ)"<<setw(6)<<"物理"<<setw(8)<<"總成績(jī)"<< setw(10)<<"平均成績(jī)"<<endl; for(;p!=NULL;p=p->next) output<<setw(8)<<p->outid()<<setw(8)<<p->outname()<<setw(6) <<p->outsex()<<setw(6)<<p->outgrade(0)<<setw(6)<<p->outgrade(1) <<setw(6)<<p->outgrade(2)<<setw(14)<<p->outgrade(3)<<setw(6) <<p->outgrade(4)<<setw(8)<<p->outsum()<<setw(10)<<p->outav()<<endl; output.close(); break;case9: cout<<"請(qǐng)輸入文件名:"<<endl; cin>>file; input.open(file); if(input.fail()) { cout<<"Filedoesnotexist"<<endl; break; } input.getline(temp,80); input.getline(temp,80); if(input.eof()){cout<<"文件中無數(shù)據(jù)!"<<endl;break;} input>>id>>name>>sex1>>grade1[0]>>grade1[1]>>grade1[2]>> grade1[3]>>grade1[4]; input>>temp; input>>temp;//將總成績(jī)和平均成績(jī)輸入進(jìn)暫時(shí)變量 p1->setid(id); p1->setname(name); p1->setsex(sex1); p1->setgrade(grade1); will.first=p1; will.last=will.first; while(!input.eof()) { p=newstudent(); q=will.last;will.last->next=p; will.last=p; input>>id>>name>>sex1>>grade1[0]>>grade1[1]>>grade1[2]>> grade1[3]>>grade1[4]; will.last->setid(id); will.last->setname(name); will.last->setsex(sex1); will.last->setgrade(grade1); input>>temp; input>>temp;//將總成績(jī)和平均成績(jī)輸入進(jìn)暫時(shí)變量 } will.last=q; will.last->next=NULL; input.close();break;case10: p=will.first; for(i=0;i<20&&p!=NULL;i++,p=p->next) { for(j=0;j<20;j++) { stu[i].id[j]=p->id[j]; } for(j=0;j<10;j++) { stu[i].name[j]=p->name[j]; } for(j=0;j<10;j++) { stu[i].sex[j]=p->sex[j]; } stu[i].sumsum=p->outsum(); stu[i].average=p->outav(); } for(n=0;n<i-1;n++) for(j=1;j<i;j++) { if(stu[n].sumsum<stu[j].sumsum) { stutemp=stu[j]; stu[j]=stu[n]; stu[n]=stutemp; } } cout<<setw(8)<<"學(xué)號(hào)"<<setw(8)<<"姓名"<<setw(6)<<"性別"<<setw(8)<<"總成績(jī)"<< setw(10)<<"平均成績(jī)"<<"\n"; for(j=0;j<i;j++) cout<<setw(8)<<stu[j].id<<setw(8)<<stu[j].name<<setw(6)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 茅臺(tái)酒戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 前期接入服務(wù)合同范本模板
- 公租房置換合同范本
- 歷制作合同范本
- 廚房冰箱轉(zhuǎn)讓合同范例
- 食堂托管經(jīng)營(yíng)合同范本
- 云南公路合同范本
- 獸醫(yī)傳染病學(xué)試題庫(kù)含答案
- 醫(yī)療服務(wù)合同范例隱私
- 司機(jī)補(bǔ)充協(xié)議合同范本
- 大學(xué)生必知的自然科學(xué)知識(shí)考試題庫(kù)(300題)
- 煤層氣開發(fā)第7章煤層氣集輸課件
- 中西醫(yī)結(jié)合腫瘤學(xué)試卷
- 一年級(jí)下冊(cè)勞動(dòng)課教案5篇
- 特殊工種操作人員體檢表
- 常用橋牌詞語(yǔ)(中英文對(duì)照)
- 加盟招商方案PPT模板
- 中石油HSE培訓(xùn)試題集(共33頁(yè))
- 噴(烤)漆房VOCs治理設(shè)施日常運(yùn)行臺(tái)賬
- 往復(fù)式壓縮機(jī)組單機(jī)試運(yùn)方案
- 區(qū)域環(huán)境概況
評(píng)論
0/150
提交評(píng)論