研究生入學考試成績處理系統(tǒng)_第1頁
研究生入學考試成績處理系統(tǒng)_第2頁
研究生入學考試成績處理系統(tǒng)_第3頁
研究生入學考試成績處理系統(tǒng)_第4頁
研究生入學考試成績處理系統(tǒng)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計題 目:研究生入學考試成績處理系統(tǒng)學 院: 班 級: 學 生 姓 名: 學 生 學 號: 指 導(dǎo) 教 師: 2013年 11月27日課程設(shè)計任務(wù)書姓名班級學號設(shè)計題目研究生入學考試成績處理系統(tǒng)理論要點印象最深刻的是在二叉樹的第一個元素是下標從1開始,而順序表的數(shù)組的下標是從0開始,這個細節(jié)總會導(dǎo)致內(nèi)存出錯,最后通過在堆排序過程中,先將數(shù)組后移,排序完后將數(shù)組在前移解決了這個問題,因此印象較為深刻,其他的調(diào)試錯誤,一般都是在程序測試的過程中一一改正,問題不大。設(shè)計目標本系統(tǒng)能擇優(yōu)選擇出研究生考試成績好的,進而可以大大減少人們的工作量。研究方法步驟1、準備階段:建立課題,準備相關(guān)的

2、資料。2、實施階段:編寫相關(guān)的程序,查閱書籍。3、總結(jié)階段:將程序運行,填寫實驗報告。預(yù)期結(jié)果輸入學生成績后,系統(tǒng)便會按要求對成績進行排序,選取成績高的,然后輸出。計劃與進步的安排1、第一天:尋找設(shè)計題目,安排進度。2、第二天:查閱資料,進行設(shè)計前必要的資料準備。3、第三天、第四天、第五天:程序編寫、上機調(diào)試4、第二周的第一天至第三天上機調(diào)試程序、結(jié)果分析。5、第二周的第四天:撰寫設(shè)計報告。2數(shù)據(jù)結(jié)構(gòu)課程設(shè)計目錄摘要11 題目分析22概要設(shè)計33詳細設(shè)計43.1數(shù)據(jù)結(jié)構(gòu)設(shè)計43.2算法設(shè)計44調(diào)試分析55用戶使用76測試結(jié)果87 結(jié)論體會118 參考文獻129 源程序13摘要眾所周知,每年都會

3、有一大批大學生選擇考研究生,這就給各大高校的招生工作帶來巨大的壓力,招生需要對研究生考試的三門成績做排序,然后擇優(yōu)錄取,這個工作異常繁瑣,這就需要一個軟件,能對他們的成績做排序,而且也要保證這個程序在排完序之后能做進一步的處理,能選擇出成績好的輸出,而且需要保證這個程序操作簡單,正確率高,這能為我們的閱卷老師減輕很大的壓力。關(guān)鍵詞:成績、擇優(yōu)、排序、輸出1 題目分析假設(shè)某大學計算機應(yīng)用技術(shù)專業(yè)招收研究生n名,現(xiàn)在要根據(jù)報考者的考試成績擇優(yōu)錄取。考試課程有政治、英語、數(shù)學、專業(yè)綜合四門??荚嚦煽兎譃閮深悾旱谝活悶槊块T課程都達到最低錄取線;第二類為有一門或多門課程未達到最低錄取線。錄取方法是在每門

4、課程達到最低錄取線的考生中按總分從高到低錄取。試設(shè)計一個成績處理程序?qū)崿F(xiàn)以上功能。根據(jù)錄取方法,打印輸出n份錄取通知書,列出錄取者四門課程的成績及總分(要求采用堆排序)。并能實現(xiàn)對任一考生或任一門課程成績的查找(要求兩種查找方式,根據(jù)考號或姓名進行查找,采用高效的查找算法)。錄取通知書的格式如下:(圖一)2 概要設(shè)計(圖二)3 詳細設(shè)計(1) 數(shù)據(jù)結(jié)構(gòu)設(shè)計由于本題明確要求在進行排序時必須采用推排序的算法,而堆排序最常采用的數(shù)據(jù)存儲結(jié)構(gòu)便是順序表存儲結(jié)構(gòu),因此在我的設(shè)計中是采用的結(jié)構(gòu)體數(shù)組將各個學生的信息進行存儲,同時這也方便排序算法的實現(xiàn)。typedef structstring name;i

5、nt Politics;int English;int Mathematics;int Major;int Total;string Num;Student;(2)算法設(shè)計由于題目要求本程序的查找是針對考號和姓名兩種方式進行查找的,而不是針對相應(yīng)的可比較的數(shù)據(jù)進行查找,所以像二叉查找和二叉排序樹這些查找方法基本都用不上,因此本程序采用的是“蠻力”查找的方法,及對整個結(jié)構(gòu)體數(shù)組進行遍歷,而與要查找的信息一一進行對比,只不過在進行比較的過程中用的是string類中的重載“=”,這樣更加的方便快捷。而堆排序的算法,由于學生成績的錄取是一個從高分到低分排序的過程,因此推排序的算法就是一個建立“大頂堆”

6、的一個過程。4 調(diào)試分析由于查找的算法是用的“蠻力”的算法,而對成績的錄入也非常的簡單,因此詳細設(shè)計這一塊主要說說堆排序的詳細設(shè)計算法。堆排序的詳細設(shè)計分析:首先題目要求是按四門課程的總分進行排序,由此我們知道我們要建立的堆是一個“大頂堆”,而建堆過程中主要解決的兩個問題是:(1)如何由一個無序序列建成一個堆?(2)如何在輸出堆元素之后,調(diào)整剩余的元素成為一個新的堆?在無序序列建立堆的過程中在我的程序中是用HeapAdjust()這個函數(shù)實現(xiàn)的,將建堆的過程看做事一個反復(fù)篩選的過程,則只需從從最后一個非終端斷點n/2的下界開始向前一次進行篩選,若所比較的元素比其后繼的元素要小則不需要進行交換,

7、否則需要該元素與其父節(jié)點進行交換。即該過程中每一步都是將二叉樹的子樹建立成一個小頂堆的過程,這主要是方便在后面調(diào)整的過程中將堆頂元素和最后一個元素進行交換,即將其從大到小排序的過程。int HeapAdjust(Student (&S_USE)MAX_SIZE,int s,int m)Student rc;int j;rc=S_USEs;for(j=2*s;j<=m;j*=2)if(j<m&&(S_USEj.Total>S_USEj+1.Total)j+;if(rc.Total<S_USEj.Total)break;S_USEs=S_USEj;s

8、=j;S_USEs=rc;return 0;而調(diào)整的過程比較簡單,即將隊堆頂?shù)脑嘏c順序表的最后一個元素進行交換,然后將剩下的元素建堆的一個過程,主要函數(shù)實現(xiàn)如下:int HeapSort(Student (&S_USE)MAX_SIZE)int i;Student tmp;for(i=count_U;i>=0;i-)S_USEi=S_USEi-1;/cout<<"I am here!"<<endl;for(i=count_U/2;i>0;i-)/要不要減一 先記在這里HeapAdjust(S_USE,i,count_U);for

9、(i=count_U;i>1;i-)tmp=S_USE1;S_USE1=S_USEi;S_USEi=tmp;HeapAdjust(S_USE,1,i-1);for(i=0;i<count_U;i+)S_USEi=S_USEi+1;return 0;5 用戶使用點擊運行程序,在彈出的窗口中,會提示要輸入的信息:1、首先提示輸入的是學生的個數(shù):此時輸入你所需要輸入的學生的個數(shù)即可。2、提示信息為“請按照學生的姓名、政治、英語、數(shù)學和專業(yè)綜合的分數(shù)以及考號依次進行輸入”:按照學生的信息一一進行輸入即可3、提示信息為“請輸入要錄取學生的個數(shù):”此時用戶輸入要錄取學生的個數(shù),窗口中便會顯示出

10、錄取學生的信息4、然后便是查找的過程,用戶按提示進行輸入,便可按考號和姓名兩種方式對所需要的信息進行查找。 6 測試結(jié)果在測試的過程中我一共用到了如下26組數(shù)據(jù):aaa 97 98 85 91 1001bbb 56 89 45 97 1002ccc 62 68 64 92 1003 ddd 66 68 69 92 1004eee 70 72 48 95 1005fff 50 68 78 91 1006ggg 70 76 86 95 1007hhh 75 78 79 96 1008iii 45 65 68 78 1009jjj 65 68 69 98 1010kkk 62 32 68 97 10

11、11lll 65 75 89 100 1012mmm 65 78 89 123 1013nnn 23 56 89 45 1014ooo 47 78 89 65 1015ppp 65 89 41 45 1016qqq 68 89 78 89 1017rrr 58 89 45 97 1018sss 45 78 56 89 1019ttt 61 61 61 91 1020uuu 73 74 75 94 1021vvv 56 58 59 124 1022www 65 68 69 95 1023xxx 68 69 78 94 1024yyy 56 23 45 56 1025zzz 12 45 56 98

12、 1026然后要求程序通過排序后錄取前五位,程序運行結(jié)果如下:(圖三)(圖四)通過與原數(shù)據(jù)的比較,結(jié)果準確無誤:一下便是查找的測試結(jié)果:(圖五)通過分析知道,結(jié)果準確無誤。7 結(jié)論體會經(jīng)過一個星期的課程設(shè)計,過程曲折可謂一語難盡。整天都是對著電腦,不然就是翻閱資料。在此期間我失落過,也曾一度熱情高漲。點點滴滴令我回味無長。這次課程設(shè)計使我體會到只有做到細心耐心,恒心才能做好事情。這次的課程設(shè)計,加強了我們動手、思考和解決問題的能力。鞏固和加深了對數(shù)據(jù)結(jié)構(gòu)的理解,提高綜合運用本課程所學知識的能培養(yǎng)了我選用參考書,查閱手冊及文獻資料的能力。培養(yǎng)獨立思考,深入研究,分析問題、解決問題的能力。通過實際

13、編譯系統(tǒng)的分析設(shè)計、編程調(diào)試,掌握應(yīng)用軟件的分析方法和工程設(shè)計方法。通過課程設(shè)計,培養(yǎng)了我嚴肅認真的工作作風,逐步建立正確的生產(chǎn)觀念、經(jīng)濟觀念和全局觀念。而且做課程設(shè)計同時也是對課本知識的鞏固和加強,平時看課本時,有些問題就不是很能理解,做完課程設(shè)計,那些問題就迎刃而解了。而且還可以記住很多東西。認識來源于實踐,實踐是認識的動力和最終目的,實踐是檢驗真理的唯一標準。所以這個期末測試之后的課程設(shè)計對我們的作用是非常大的。這次的課程設(shè)計使我懂得了理論與實際相結(jié)合是很非常重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動

14、手能力和獨立思考的能力。在整個設(shè)計過程中,構(gòu)思是很花費時間的。調(diào)試時經(jīng)常會遇到這樣那樣的錯誤,有的是因為粗心造成的語法錯誤。當然,很多也時用錯了方法,總是實現(xiàn)不了。同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。8 參考文獻1 嚴蔚敏,吳偉民 編著. 數(shù)據(jù)結(jié)構(gòu)(C語言版)北京: 清華大學出版社,2007.2 譚浩強 編著 C程序設(shè)計(第三版)北京:清華大學出版社,20083 劉振安,孫忱,劉燕君 編著 C程序設(shè)計課程設(shè)計北京:機械工業(yè)出版社,20074 于海英 編著 C語言程序設(shè)計北京:清華大學出版社,20125 楊 劍 編著 數(shù)據(jù)結(jié)構(gòu)清華大學出版社,

15、20116陳維興,林小茶.C+面向?qū)ο蟪绦蛟O(shè)計教程.北京:清華大學出版社,2009.69 源程序#include<iostream>#include<string>using namespace std;const int MAX_SIZE=100;const int L_P=60;/分別表示各門的最低錄取分數(shù)線const int L_E=60;const int L_MATH=60;const int L_MAJOR=90;int count_A=0;/用于記錄全部錄入的學生的個數(shù)int count_U=0;/用于記錄達到最低分數(shù)線的學生的個數(shù)int count_N=

16、0;/用與記錄為達到最低分數(shù)線的學生的個數(shù)int count_ACC=0;/用于記錄錄取學生的個數(shù)typedef structstring name;int Politics;int English;int Mathematics;int Major;int Total;string Num;Student;/ int HeapAdjust(Student (&S_USE)MAX_SIZE,int s,int m);/堆排序 int HeapSort(Student (&S_USE)MAX_SIZE);/調(diào)整 int PanDuan(Student (&S_ALL)MA

17、X_SIZE,Student (&S_USE)MAX_SIZE,Student (&S_UNUSE)MAX_SIZE);/判斷該研究生是否有錄取資格 才能進行堆排序 int Find(Student (&S_ALL)MAX_SIZE);/查找成績 int Display();/輸出成績單 int PutIn(Student &S);/成績錄入/ int Find(Student (&S_ALL)MAX_SIZE) int k,i;string num,name;cout<<"請輸入您要查找的方式:1:按考號查找,2:按姓名查找&qu

18、ot;<<endl;cin>>k;if(k=1)cout<<"請輸入要查詢考生的考號:"<<endl;cin>>num;for(i=0;i<count_A;i+)if(num=S_ALLi.Num)cout<<"查到成功!該學生的信息如下:"<<endl;cout<<"name "<<S_ALL<<endl;cout<<"num "<<S_ALLi.Num

19、<<endl; cout<<"Politics "<<S_ALLi.Politics<<endl;cout<<"English "<<S_ALLi.English<<endl;cout<<"Mathematics "<<S_ALLi.Mathematics<<endl;cout<<"Major "<<S_ALLi.Major<<endl;cout<<

20、"Total "<<S_ALLi.Total<<endl;break;if(i=count_A)cout<<"查找失??!"<<endl;return 0;else if(k=2)cout<<"請輸入要查詢考生的姓名:"<<endl;cin>>name;for(i=0;i<count_A;i+)if(name=S_ALL)cout<<"查到成功!該學生的信息如下:"<<endl;cout<

21、;<"name "<<S_ALL<<endl;cout<<"num "<<S_ALLi.Num<<endl; cout<<"Politics "<<S_ALLi.Politics<<endl;cout<<"English "<<S_ALLi.English<<endl;cout<<"Mathematics "<<S_ALLi

22、.Mathematics<<endl;cout<<"Major "<<S_ALLi.Major<<endl;cout<<"Total "<<S_ALLi.Total<<endl;break;if(i=count_A)cout<<"查找失敗!"<<endl;return 0;elsereturn 1; int HeapAdjust(Student (&S_USE)MAX_SIZE,int s,int m)Student r

23、c;int j;rc=S_USEs;for(j=2*s;j<=m;j*=2)if(j<m&&(S_USEj.Total>S_USEj+1.Total)j+;if(rc.Total<S_USEj.Total)break;S_USEs=S_USEj;s=j;/cout<<"I am here heapadjust!"<<endl;S_USEs=rc;return 0;int HeapSort(Student (&S_USE)MAX_SIZE)int i;Student tmp;for(i=count_U;i

24、>=0;i-)S_USEi=S_USEi-1;/cout<<"I am here!"<<endl;for(i=count_U/2;i>0;i-)/要不要減一 先記在這里HeapAdjust(S_USE,i,count_U);for(i=count_U;i>1;i-)tmp=S_USE1;S_USE1=S_USEi;S_USEi=tmp;/cout<<"I am here heapsort!"<<endl;HeapAdjust(S_USE,1,i-1);for(i=0;i<count_

25、U;i+)S_USEi=S_USEi+1;return 0; int Display(Student (&S)MAX_SIZE)int i;cout<<"請輸入要錄取學生的個數(shù):"<<endl;cin>>count_ACC;for(i=0;i<count_ACC;i+)cout<<" ADMISSION NOTICE "<<endl;cout<<S<<":"<<endl;cout<<" You

26、 have been admitted"<<endl;cout<<" Your scores:"<<endl;cout<<"Politics "<<Si.Politics<<endl;cout<<"English "<<Si.English<<endl;cout<<"Mathematics "<<Si.Mathematics<<endl;cout<<&

27、quot;Major "<<Si.Major<<endl;cout<<"Total "<<Si.Total<<endl;cout<<endl<<endl;cout<< "China University of Geoscience"<<endl;return 0;int PutIn(Student (&S)MAX_SIZE)int i;/cout<<"請您輸入要錄入學生的信息,"0"表示結(jié)

28、束"<<endl;cout<<"請您輸入要錄入學生的個數(shù)"<<endl;cin>>count_A;cout<<"請按照學生的姓名、政治、英語、數(shù)學和專業(yè)綜合的分數(shù)以及考號依次進行輸入:"<<endl;for(i=0;i<count_A;i+)cin>>S;cin>>Si.Politics;cin>>Si.English;cin>>Si.Mathematics;cin>>Si.Major;cin>>Si.Num;Si.Total=Si.Politics+Si.English+Si.Mathematics+Si.Major;return 0;int PanDuan(Student (&S_ALL)MAX_SIZE,Student (&S_USE)MAX_SIZE,Student (&S_UNUSE)MAX_SIZE)int i;for(i=0;i<count_A;i+)if(S_ALLi.English<L_E|S_ALLi.Major<L_MAJOR|S_ALLi.Mathematics<L_M

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論