




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、“數(shù)據(jù)結(jié)構(gòu)與算法”課程設(shè)計報告設(shè)計題目 學生成績管理系統(tǒng) 姓 名 學 號 專 業(yè) 計算機科學與技術(shù) 班 級 12-01班 完成日期 2014.06.27 (一) 需求和規(guī)格說明主要功能是對批量學生的各門成績進行錄入、修改、查詢、統(tǒng)計等,要求方便快速。記錄學生的學號、姓名、班級、性別、聯(lián)系電話以及課程和成績;可以對學生的成績按學號和姓名進行查尋;輸出顯示學生成績;并實現(xiàn)排序、統(tǒng)計及格率和優(yōu)秀率功能。編程任務:(1)界面基本要求:*學生成績管理系統(tǒng) * F1 -幫助 * F2 -輸入數(shù)據(jù)并存入文件 * F3 -根據(jù)學號查詢成績 * F4 -根據(jù)姓名查詢成績 * F5 -輸出文件內(nèi)容 * F6 成績
2、排序 * F7 -統(tǒng)計及格和優(yōu)秀人數(shù) * ESC-退出系統(tǒng) *另:提倡用MFC的對話框做簡單的輸入輸出交互界面。(2)功能要求:1)幫助:系統(tǒng)使用方法的相關(guān)信息。2)輸入數(shù)據(jù)并存入文件:輸入相關(guān)信息,并實現(xiàn)文件流的讀寫操作。3)根據(jù)學號查詢成績:輸入學號,查詢學生的各門成績4)根據(jù)姓名查詢成績:輸入姓名,查詢學生的各門成績5)輸出文件內(nèi)容:屏幕輸出顯示所有學生的成績6) 成績排序:對某門成績或總分進行快速排序,顯示、保存7)統(tǒng)計及格和優(yōu)秀人數(shù):統(tǒng)計及格和優(yōu)秀率。8)退出(二) 設(shè)計主要內(nèi)容如下:1.關(guān)鍵類的設(shè)計,繼承層次關(guān)系,代碼:(編譯器 C-Free 5.0)首先,創(chuàng)建了一個student
3、類.在student類的共有部分聲明程序所需函數(shù);然后就是student類的函數(shù)實現(xiàn)部分,其中定義student類的帶參數(shù)及不帶參數(shù)構(gòu)造函數(shù);再是常用函數(shù)的調(diào)用,并定義系統(tǒng)菜單函數(shù)及其界面;最后就是主函數(shù)文件。屬性和方法定義類名成員類別類型成員名描述student屬性stringName學生姓名stringNumber學生學號stringCLas所在班級charGender性 別stringPhone電話號碼doubleMath數(shù)學成績doubleComputer微機機成績doubleSum總的分數(shù)floatJige_num數(shù)學及格人數(shù)floatYousheng_num數(shù)學優(yōu)秀人數(shù)floatJ
4、ige微機及格人數(shù)floatYouxiu微機優(yōu)秀人數(shù)floatJigelv數(shù)學及格率floatyoushenglv數(shù)學優(yōu)秀率floatJigel微機及格率floatyouxiul微機優(yōu)秀率intCount統(tǒng)計輸入數(shù)據(jù)個數(shù)方法voidhelp()幫助文件voidsum_score()總分函數(shù)voidapp_score動態(tài)節(jié)點建立的函數(shù)voidcin_app()輸入數(shù)據(jù)的函數(shù)voiddel_score()刪除數(shù)據(jù)的函數(shù)voiddisplist()打印數(shù)據(jù)的函數(shù)voidlookup(int,string)查找數(shù)據(jù)的函數(shù)voidcompositor(int)排序數(shù)據(jù)的函數(shù)voidtongji()計算及
5、格率和優(yōu)秀率voidmenu()系統(tǒng)菜單函數(shù)結(jié)束開始進入主菜單根據(jù)菜單輸入n的值選擇程序輸入打印輸出查找排序統(tǒng)計幫助刪除(三) 用戶手冊程序運行時,進入主界面選擇”0”,讀取幫助信息 幫助信息 系統(tǒng)有對學生的學號、姓名、班級、性別、聯(lián)系電話以及計算機、數(shù)學的成績錄入等功能 可以對學生的成績按學號和姓名進行查尋,并且能對學生成績實現(xiàn)排序功能。按照界面說明進行程序的各個子程序調(diào)用,最終完成工作后便可退出。 2014 Anpengfei. All rights reserved.(四) 調(diào)試及測試在調(diào)試過程中也出現(xiàn)了多處錯誤,逐一修改,坦然漏洞還是有的。由于系統(tǒng)每增加一個學生信息,無論他(她)是的情
6、況如何,其學號和其他信息都是自定義的,但是當出現(xiàn)相同學號時,系統(tǒng)能返回上級菜單,讓用戶重新輸入。對于班級、性別、電話號碼都是后輸入系統(tǒng)的,沒有進行限制,此系統(tǒng)只有保存和調(diào)用數(shù)據(jù)的功能,并不能對數(shù)據(jù)進行判斷,查驗是否為合法班級。合法電話號碼等等。但是編程過程中對數(shù)學和微機的成績輸入是有限制的,輸入數(shù)據(jù)必須滿足0<=輸入值<=100,否則將返回上級菜單重新輸入。(五) 運行實例:以兩組數(shù)據(jù)為例:學號 姓名 班級 性別 電話 數(shù)學成績 微機成績 01 qq 01 b 666666 88 59 02 ww 02 g 888888 79 80運行各功能函數(shù) 如圖所示:(六)進一步改進(1)、
7、并未實現(xiàn)文件流的讀取,目前程序只能逐條進行輸入,不能實現(xiàn)批量讀入,以后會做改進。(2)、沒有實現(xiàn)結(jié)果的輸出保存功能,信息只能在系統(tǒng)中調(diào)用,當系統(tǒng)關(guān)閉后沒有保存想要的數(shù)值等功能,以后要加強。(3)、沒有進行MFC的優(yōu)化設(shè)計,程序只是單純的存在編譯器當中,不過利用C-Free 5.0 倒是能生成”函數(shù).exe”文件,能單獨拿出來在windows 操作系統(tǒng)下使用。(4)、對于信息的修改,用刪除重新輸入的方式來完成,并未構(gòu)建直接修改函數(shù)。(七)心得體會由于本課題中的許多知識點都沒有學過都要靠自己到課外的資料中去查找。在用的時候難免出現(xiàn)這樣那樣的錯誤。如開始設(shè)計出來的菜單不是預想的那樣,而是總個窗中出現(xiàn)
8、混亂。解決的這個問題的辦法是調(diào)整。一個系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用這個成績管理系統(tǒng)。在設(shè)計的調(diào)試過程中也無法順利的完成調(diào)試工作。有了一個清晰簡單的菜單和一些提示信息這后,調(diào)試過程完成的非常順利?;仡櫞舜握n程設(shè)計,我感慨頗多,的確,從拿到題目到完成整個編程,從理論到實踐,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考
9、的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體通過這次課程設(shè)計之后,一定把以前所學過的知識熟悉了,本次課程設(shè)計結(jié)束了,我們通過這次實踐學到了許多知識。學到了設(shè)計一個簡單的系統(tǒng)。要注意哪些方面。也使我知道自己哪些方面做得還不夠。這不僅是程序設(shè)計,更是鍛煉處理問題的能力,同時編寫程序是件細心活,稍不留神就會出錯,這就必須要求我對待事情要認真!在編寫程序的過程中,錯誤不斷出現(xiàn),不同的類型(如少寫了一個符號,寫錯了字母,用錯了函數(shù)等等)層出不窮,這考
10、驗我們待事細心,耐心,能不能堅持到底,不能半途而廢。但我總結(jié)出了一點點的經(jīng)驗如下:1、要對系統(tǒng)的功能和要求做出詳細的分析,并合理分解任務。2、把分解出來的子任務,做給一個相對獨立的模塊。3、在設(shè)計一個模塊之前,要簡單構(gòu)想一下總界面的顯視情況。4、針對構(gòu)想出來的界面進行程序的編寫。(八)對課程設(shè)計的建議1、可以多做一些技術(shù)上的指導,多講講算法。針對每個人的題目,有一些建設(shè)性的指導,比如我的題目中要求MFC設(shè)計,可以簡單得培訓一下,或許效果會更好。2、課程設(shè)計,每個人的題目都不一樣,相互之間交流還是很少的,我建議今后可以出一些相對難一點兒題目,分組進行設(shè)計,這樣在過程中每個人都能得到鍛煉,還能培養(yǎng)
11、合作意識和團隊精神,這對即將成為程序員的我們是很重要的。(九)附錄¾¾源程序#include<iostream>#include<string>#include<stdio.h>#include<fstream>#include<iomanip>using namespace std;class studentprivate:string number;string name;string clas;char gender;string phone; double computer;double math;doub
12、le sum;student *head;student *curnode;student *next;float jige_num;float youshen_num;float jige;float youxiu;float jigelv;float youshenglv;float jigel;float youxiul;int count;public:student();/不帶參數(shù)的構(gòu)造函數(shù)/帶數(shù)據(jù)域參數(shù)的構(gòu)造函數(shù),用來動態(tài)建立節(jié)點-student(string ,string ,string ,char ,string ,double ,double ,double=0.0);vo
13、id help();/用于描述幫助信息 void sum_score();/總分函數(shù)void cin_app();/用于輸入 void app_score(string,string,string,char,string,double,double);/動態(tài)的建立節(jié)點void del_score();/刪除全部節(jié)點void displist();/輸出節(jié)點中的全部數(shù)據(jù)void lookup(int ,string );/查找函數(shù)void del_score(int ,string );/刪除函數(shù) void compositor(int);/排序函數(shù) void tongji();/統(tǒng)計及格率和優(yōu)
14、秀率 ;/student類的實現(xiàn)void err_char();/輸入錯誤字符檢測函數(shù)void score_err();/成績范圍檢測函數(shù),當輸入成績不在0到100之間時提示重新輸入student:student():next(NULL)/不帶參數(shù)的構(gòu)造函數(shù)head=curnode=this;/帶參數(shù)的構(gòu)造函數(shù)student:student(string Number,string Name,string Clas,char Gender,string Phone,double Computer,double Math,double Sum):next(NULL)number=Number;n
15、ame=Name;clas=Clas;gender=Gender;phone=Phone; computer=Computer;math=Math;sum=Sum;/統(tǒng)計及格率和優(yōu)秀率 ?void student:tongji()int count; int jige_num=0,youshen_num=0,jige=0,youxiu=0;/分別算計算機和數(shù)學成績的率人數(shù)和率 float jigelv,youshenlv,jigel,youxiul;/jigelv stand for computer;jigel stand for math int m=count; for(int i=0;
16、i<=m;i+) if(computer>=60)jige_num=jige_num+1; if(computer>=85)youshen_num=youshen_num+1; if(math>=60)jige=jige+1; if(math>=85)youxiu=youxiu+1; jigelv=jige_num/m; youshenlv=youshen_num/m; jigel=jige/m; youxiul=youxiu/m; cout<<"計算機及格率: "<<jigelv*100.0<<"
17、% 計算機優(yōu)秀率: "<<youshenlv*100.0<<"%"<<endl; cout<<"數(shù)學及格率: "<<jigel*100.0<<"% 數(shù)學優(yōu)勝率: "<<youxiu*100.0<<"%"<<endl; jige_num=0; youshen_num=0; jigelv=0; youshenlv=0; /幫助信息/ void student:help()cout<<&quo
18、t; 幫助信息 "<<endl;cout<<"系統(tǒng)有對學生的學號、姓名、班級、性別、聯(lián)系電話以及計算機、數(shù)學的成績錄入等功能"<<endl; cout<<"可以對學生的成績按學號和姓名進行查尋,并且能對學生成績實現(xiàn)排序功能。"<<endl;cout<<" 2014 Anpengfei. All rights reserved."<<endl; cout<<" "system("pause")
19、; /計算總成績void student:sum_score()sum=computer+math;void student:app_score(string Number,string Name,string Clas,char Gender,string Phone,double Computer,double Math)/動態(tài)建立節(jié)點curnode->next=new student(Number,Name,Clas,Gender,Phone,Computer,Math);curnode=curnode->next;/刪除表中的全部數(shù)據(jù)void student:del_sco
20、re()student *p;curnode=head->next;while(curnode!=NULL)p=curnode->next;delete curnode;curnode=p;head->next=NULL;curnode=head;cout<<"現(xiàn)已是一個空表 "<<endl;cout<<" "system("pause");/輸出表中的全部數(shù)據(jù)void student:displist()if(head->next=NULL)cout<<&quo
21、t;!這是一個空表!"<<endl;cout<<" "system("pause");return;elsestudent *pw=curnode;curnode=head->next; cout<<"學號 姓名 班級 性別 電話 計算機 數(shù)學 總分 "<<endl;while(curnode!=NULL)cout<<curnode->number;cout<<setw(12)<<curnode->name;cout<
22、<setw(8)<<curnode->clas;cout<<setw(8)<<curnode->gender;cout<<setw(14)<<curnode->phone;cout<<setw(15)<<curnode->computer;cout<<setw(8)<<curnode->math;curnode->sum_score();cout<<setw(8)<<curnode->sum;if(curnode-&
23、gt;next!=NULL)cout<<endl;elsecout<<endl;curnode=curnode->next;curnode=pw;cout<<"!表中內(nèi)容輸出完畢!"<<endl;cout<<endl;cout<<" "system("pause");/輸入數(shù)據(jù)void student:cin_app()student *p=curnode;bool b=0;string Number;string Name;string Clas; cha
24、r Gender;string Phone; double Computer;double Math;int count=0;while(1) cout<<" 學 號:"cin>>Number;curnode=head->next;while(curnode!=NULL)b=(Number=curnode->number);curnode=curnode->next;if(!b)break;elsecout<<"出現(xiàn)了相同的學號,請重新輸入"<<endl;curnode=p;cout<
25、;<" 姓 名:"cin>>Name;count+; curnode=p;cout<<"班級(數(shù)字):"cin>>Clas; curnode=p;cout<<"性別(b for boy,g for girl):"cin>>Gender; curnode=p;cout<<"電話:"cin>>Phone;while(1)cout<<" 計算機:"cin>>Computer;while(c
26、in.fail()err_char();cout<<" 計算機:"cin>>Computer;if(Computer>=0&&Computer<=100)break;elsescore_err();while(1)cout<<" 數(shù) 學:"cin>>Math;while(cin.fail()err_char();cout<<" 數(shù) 學:"cin>>Math;if(Math>=0&&Math<=100)brea
27、k;elsescore_err();this->app_score(Number,Name,Clas,Gender,Phone,Computer,Math);cout<<"記錄已添加!"<<endl;cout<<" "system("pause");/查找函數(shù)的實現(xiàn)void student:lookup(int n,string str)student *p=curnode;bool b;/定義i=1,當找到數(shù)據(jù)時把i置為0.用于輸出沒有找到數(shù)據(jù)int i=1;if(!(curnode=hea
28、d->next)cout<<"!這是一個空表!"<<endl;curnode=p;cout<<" "system("pause");return;cout<<" 學號 姓名 班級 性別 電話 計算機 數(shù)學 總分 "<<endl;while(curnode!=NULL)switch(n)case 1: b=curnode->number=str;break;case 2: b=curnode->name=str;break;default:
29、 return;if(b)i=0;cout<<curnode->number;cout<<setw(8)<<curnode->name;cout<<setw(8)<<curnode->clas;cout<<setw(8)<<curnode->gender;cout<<setw(14)<<curnode->phone;cout<<setw(15)<<curnode->computer;cout<<setw(8)<
30、<curnode->math;curnode->sum_score();cout<<setw(8)<<curnode->sum;cout<<endl; curnode=curnode->next;/當i=1是代表沒有找到數(shù)據(jù)if(i)cout<<endl;cout<<"沒有匹配的數(shù)據(jù) "<<endl;curnode=p;cout<<" 以上是本次查找的結(jié)果!"<<endl;cout<<" "syst
31、em("pause");/刪除函數(shù)的實現(xiàn)void student:del_score(int n,string str)student *p=curnode,*pw=head;bool b;/定義i=1,當找到數(shù)據(jù)時把i置為0.用于輸出沒有找到數(shù)據(jù)int i=1;if(!(curnode=head->next)cout<<"!這是一個空表!"<<endl;curnode=p;cout<<" "system("pause");return;while(curnode!=NUL
32、L)switch(n)case 1: b=curnode->number=str;break;case 2: b=curnode->name=str;break;default: return;if(b)i=0;pw->next=curnode->next;delete curnode;curnode=pw->next;elsepw=curnode;curnode=curnode->next;/當i=1是代表沒有找到數(shù)據(jù)if(i)cout<<"沒有匹配的數(shù)據(jù)"<<endl;elsecout<<"
33、; 數(shù)據(jù)刪除成功 "<<endl;curnode=head;while(curnode->next)curnode=curnode->next;cout<<" "system("pause");/排序函數(shù)的實現(xiàn)void student:compositor(int n)if(head->next=NULL)cout<<"這是一個空表不能排序!"<<endl;cout<<" "system("pause");r
34、eturn;if(head->next->next=NULL)cout<<"只有一條記錄不用排序!"<<endl;cout<<" "system("pause");return;student *s,*p,*q,*r; r=head; s=head->next; q=s; p=q->next; while(s!=NULL) while(p!=NULL) switch(n)case 1:while(s->computer<p->computer) q->
35、next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p=NULL)break; break;case 2:while(s->sum<p->sum) q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p=NULL)break; break;case 3:while(s->math<p->math) q->next=p->next; r->next=p; p->n
36、ext=s; s=p; p=q->next; if(p=NULL)break; break;default: return; if(p=NULL) break; q=p; p=p->next; r=s; s=s->next; q=s; p=q->next; if(p=NULL) break; cout<<"成功完成排序操作,即將輸出排序結(jié)果!"<<endl;cout<<" "system("pause");displist(); / void menu()/系統(tǒng)菜單函數(shù)的定義
37、 cout<<"*"<<endl; cout<<"* 合 肥 工 業(yè) 大 學 *"<<endl; cout<<"* 學 生 成 績 管 理 系 統(tǒng) *"<<endl; cout<<"*"<<endl; cout<<"* 0 -幫助 *"<<endl; cout<<"* 1 -輸入數(shù)據(jù)并存入文件 *"<<endl; cout<&l
38、t;"* 2 -根據(jù)名字或?qū)W號查詢成績 *"<<endl; cout<<"* 3 -刪除信息 *"<<endl; cout<<"* 4 -顯示文件內(nèi)容 *"<<endl; cout<<"* 5 成績排序(降序) *"<<endl; cout<<"* 6 -統(tǒng)計及格和優(yōu)秀人數(shù) *"<<endl; cout<<"* 其他任意鍵 -退出系統(tǒng) *"<<e
39、ndl; cout<<"*"<<endl; cout<<"請選擇:"/查找函數(shù)的調(diào)用void fun_lookup(student &a)int n;string str;cout<<"1、按學號 2、按姓名"<<endl;cout<<" 你的選擇是:"cin>>n;while(cin.fail()err_char();cout<<" 你的選擇是:"cin>>n;if(n!=1&&n!=2)n=1;cout<<" 請輸入查找關(guān)鍵字:"cin>>str;a.lookup(n,str);/刪除函數(shù)的調(diào)用void fun_del(student &a)int n;string str; cout<<"1、按學號 2、按姓名"<<endl;cout<<" 你的選擇是:"cin>>n;while(cin.fail()err_cha
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建材庫房拆除方案
- 消防材料庫存管理方案
- 車間承包經(jīng)營與品牌形象策劃合同模板
- 玻璃幕墻工程勞務分包合同含材料供應
- 出租車公司駕駛員健康體檢協(xié)議書
- 精密制造廠房租賃服務全面合作協(xié)議
- 肺炎的護理與治療
- 車輛保險代理權(quán)轉(zhuǎn)讓及保險產(chǎn)品創(chuàng)新合作協(xié)議
- 普工應聘考試題及答案
- 天津工商面試題及答案
- 鋼板倉施工方案
- DBJ50-112-2016 現(xiàn)澆混凝土橋梁梁柱式模板支撐架安全技術(shù)規(guī)范
- 北京福賽爾V6891、V6851控制器(聯(lián)動型)的調(diào)試
- 中航信離港系統(tǒng)培訓(3)
- 第九章 解析空中三角測量基礎(chǔ)
- 汽車維修安全生產(chǎn)管理制度大全
- 晉江市勞動合同書
- 蘇州園區(qū)時尚舞臺二期項目(簡介)
- 中國銀行_境外匯款申請書樣板(最新版)-帶中行行標
- EVA交聯(lián)度實驗操作規(guī)程
- 壓力管道安裝竣工資料--特檢所版式
評論
0/150
提交評論