桂電算法與數(shù)據(jù)結構課設學生成績管理系統(tǒng)課程設計報告_第1頁
桂電算法與數(shù)據(jù)結構課設學生成績管理系統(tǒng)課程設計報告_第2頁
桂電算法與數(shù)據(jù)結構課設學生成績管理系統(tǒng)課程設計報告_第3頁
桂電算法與數(shù)據(jù)結構課設學生成績管理系統(tǒng)課程設計報告_第4頁
桂電算法與數(shù)據(jù)結構課設學生成績管理系統(tǒng)課程設計報告_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、桂林電子科技大學綜合設計說明書用紙 編號: 數(shù)據(jù)結構與算法課程設計說明書題 目: 學生成績管理系統(tǒng) 學院: 計算機科學與工程學院 專 業(yè): 計算機科學與技術 學生姓名: 學 號: 指導教師: 2013年 9 月 28 日0目 錄引言21 系統(tǒng)概述32 需求分析3 2.1 系統(tǒng)需求3 2.2 開發(fā)環(huán)境43 詳細設計54 所遇到的問題和分析解決145 系統(tǒng)特殊與關鍵技術156 總結心得157 參考文獻附錄 引 言通過本課程設計,使自己更加系統(tǒng)地理解和掌握數(shù)據(jù)結構的基本概念;能自如地根據(jù)實際要求,設計相應的數(shù)據(jù)結構,并運用C或C+語言實現(xiàn)所設計的算法,編寫較大型的程序,分析和解決實際應用問題,進一步

2、加深、鞏固所學專業(yè)課程的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)自己綜合分析問題和解決問題的能力。掌握C語言或C+語言獨立的編寫、調試應用程序和進行其它相關設計的技能。此項目主要是考察我們對結構體、數(shù)組、文件等具體操作,以及對C語言語法的掌握,所以做成此項目要求比較高的設計要求,對整體有很熟悉的概括,同時調試過程也是很重要的,對程序界面的要求也比較高,要設計的合理同時也要美觀一點,能夠人性化的描述清楚你的各個功能,一目了然,對其他用戶使用本程序簡單易懂,這才能成本程序或本系統(tǒng)是成功的。對于學生成績管理系統(tǒng),此項目每年都有學生去做,但是能夠在其他項目中脫穎而出,還要有自己的設計特色,用簡單的語言詳

3、細描述系統(tǒng)的功能,這才是關鍵。這個設計能夠練習我們的理解和運用結構化程序設計的思想和方法,掌握開發(fā)一個小型實用系統(tǒng)的基本方法,學會調試一個比較長的程序的基本方法,同時掌握書寫程序設計開發(fā)文檔的能力。 1、系統(tǒng)概述 1、課程設計應完成的工作 (1)編寫算法 (2)算法測試,并有具體的測試結果和結果分析 (3)撰寫課程報告,內容包括: 封面 目錄 課程設計報告正文 使用說明 參考文獻 2、總體設計工作(包含幾大功能模塊) (1)輸入學生信息并保存到文件 (2)讀取文件并輸出學生信息 (3)按學號及學期查詢 (4)按姓名及學期查詢 (5)按學號及學期修改信息 (6)插入信息 (7)按學號及學期刪除信

4、息 (8)按數(shù)據(jù)結構降序(冒泡)排序 (9)按總分降序(選擇)排序 (10)統(tǒng)計各科成績的總分和平均分 (11)退出1、需求分析1.1 系統(tǒng)需求(1) 問題描述: 該系統(tǒng)實現(xiàn)對若干個大學生的學習成績進行管理。至少包括以下信息: 學號、姓名、科目、成績,學期。學期取值范圍可為1-8。 (2)功能要求:1使用中文菜單,界面設計和用戶輸入輸出要人性化些;2. 將學生信息保存在文本文檔中,具體對學生信息進行插入刪除查詢操作時,將保存在文本文檔中的學生信息提取出來,保存在自己定義的數(shù)據(jù)結構中,然后再對該數(shù)據(jù)結構進行操作,所有操作完成,或者在相應的命令后,再將學生信息保存到文本文檔中。3具有數(shù)據(jù)輸入功能,

5、輸入的數(shù)據(jù)能最終保存在文件中;4具有數(shù)據(jù)刪除功能,能最終從文件中刪除;5排序功能,根據(jù)自己設計的數(shù)據(jù)結構,設計排序算法6具有多種查詢(如按學號查詢、按姓名查詢、按成績查詢等)及輸出功能;7其它功能(如各種統(tǒng)計,統(tǒng)計每個學生所有課程的平均分,統(tǒng)計某門課程所有學生的平均分等等)8學生信息的修改(比如修改學生姓名,修改學生某門課程的成績) (3)說明: 功能各方面越完善越好 自定義的數(shù)據(jù)結構可以使用數(shù)組,鏈表,樹等,然后根據(jù)不 同的數(shù)據(jù)結構,設計不同的排序,查找算法。其中,排序算法至少有兩種,可以使用多種數(shù)據(jù)結構來存放數(shù)據(jù),然后在其上使用不同的排序算法。 若用數(shù)組,必須動態(tài)分配空間(文本文件中最好有

6、一行表示學生人數(shù)) (4)、輸入輸出的形式本系統(tǒng)是一個學生成績管理系統(tǒng),采用VC+6.0 編譯器作為開 發(fā)環(huán)境,這個環(huán)境是我們在學習C+的平臺。輸入數(shù)據(jù)類型主要是char、int、float等數(shù)據(jù)類型,輸入內容包括:學期、學號、姓名、高等數(shù)學成績,數(shù)據(jù)機構成績,組成原理成績,總分,平均分等數(shù)據(jù)。用戶在輸入學生數(shù)據(jù)時要保證輸入數(shù)據(jù)格式的正確性,系統(tǒng)不會自動檢測輸入的數(shù)據(jù)是否正確,輸出形式與輸入形式類似,根據(jù)需要可以選擇顯示輸入的各項內容,還可以選擇顯示計算好平均分后并排序后的記錄,顯示內容包括:學期、學號、姓名、高等數(shù)學成績,數(shù)據(jù)機構成績,組成原理成績,總分,平均分等數(shù)據(jù)。 1.2 開發(fā)環(huán)境Vi

7、sual C+不僅僅是是一個C+編譯器,而是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境,這種環(huán)境開發(fā)出來的軟件穩(wěn)定性好、可移植性強,可以編制各種各樣的Windows應用程序。三、詳細設計 開始1、系統(tǒng)流程圖 主界面輸出學生成績輸入學生成績插入學生成績按單科排序按總分排序刪除學生信息退出本系統(tǒng)查詢學生信息修改學生信息 結束2、界面設計主界面:在此界面用戶可以選擇要操作的選項,回車之后即可進入相關的頁面進行操作(例如:選擇1 ,即可進入輸入學生數(shù)據(jù)頁面)在本界面里用戶可以輸入學生相關的信息數(shù)據(jù),按照提示進行操作即可,例如:所有操作均有提示語,比較人性化的管理,易懂,簡單。3、大概設計模塊(

8、1)先編入系統(tǒng)所需的庫函數(shù),從而使程序可運行。#include<iostream.h>#include<stdlib.h>#include<iomanip.h>/主要是對cin,cout之類的一些操縱運算,是I/O流控制頭文件。 #include <conio.h> /文件和標準控制臺的輸入輸出#include<stdio.h> (2) Main()函數(shù)的設計 在main()函數(shù)中主要運用do-while循環(huán)語句和switch()-case選擇判斷語句來調用相關功能模塊。系統(tǒng)的運行是在一個永真的循環(huán)里進行的,只有在主界面并選擇“退出”

9、時,才會跳出永真循環(huán),并退出程序。(3) 主界面的設計 在主界面中包括“輸入學生信息并保存到文件 讀取文件并輸出學生信息 按學號及學期查詢 按姓名及學期查詢 按學號及學期修改信息 插入信息 按學號及學期刪除信息 按數(shù)據(jù)結構降序(冒泡)排序 按總分降序(選擇)排序 統(tǒng)計各科成績的總分和平均分 11退出”等全部的功能,之所以設計這麼一個主界面,一是因為能使用戶對程序操作的流程更加清晰簡明,二是保證了用戶同時只能對一個文件進行操作系統(tǒng)的要求,保證了系統(tǒng)不會打開文件紊亂或者出現(xiàn)致命的錯誤。每個函數(shù)體如下:Void main(); /主函數(shù)void input(Student *r); /輸入學生信息及

10、數(shù)據(jù)void output(Student *r); /輸出學生信息及數(shù)據(jù)void searchnum(Student *r); /按學號及學期查找學生信息void searchname(Student *r); /按姓名及學期查找學生信息void change(Student *r); /按學號及學期修改學生信息Student *insert(Student *r); /插入學生信息void shanchu(Student *r); /按學號及學期刪除循聲信息void maopao(Student *r); /按數(shù)據(jù)結構降序(冒泡)排序void xuanze(Student *r); /按總

11、分降序(選擇)排序void tongji(Student *r); /統(tǒng)計各科總分和平均分信息4、詳細設計思想(1)確定語言算法 由于之前都沒有做過類似的設計,所以一時間不能夠確定到底使用何種語言來設計本系統(tǒng),所以在網(wǎng)上看了一些其他人設計的程序,鏈表的、數(shù)組的,C+的,各種各樣的,也不知如何選擇,但是仔細地看了其中的設計思想,最終還是用C+和指針數(shù)組的來做,一是覺得本人對鏈表掌握的不是很熟練,那么在設計過程中容易產(chǎn)生不能理解的錯誤,耽誤時間,二是想運用C+,可以鞏固一下所學的數(shù)據(jù)結構的知識,之前做實驗的時候一直用C來做,都沒怎么用所學的知識,這時候想練練。就這樣確定了整體的結構算法。(2) 確

12、定程序主要功能模塊 這個就比較簡單了,主要是根據(jù)系統(tǒng)設計的說明及要求來設計,從而設計了十大功能模塊,有文件操作,有系統(tǒng)維護功能,排序和統(tǒng)計功能,有輸入輸出等基本功能,比較人性化,添加了較多的提示語。這個程序的主要功能時輸入學生的學號,姓名,學期和三科成績來對其進行存儲,在存儲后可以對學生的成績按學號及學期或姓名及學期來進行查詢,同時輸出此同學的平均分及總分,之后可以對某個同學的成績進行各種操作,例如修改,刪除等,同時還可以對學生們的成績按照總分或單科成績排序,在整個過程中所做的操作都會保存到"student.txt"文件中并顯示。(3) 系統(tǒng)結構體的設計Student 總分

13、平均分成績三學期學號成績二姓名成績一struct Student /結構體int term;/學期int num;/學號char name12;/姓名float mark1;/成績float mark2;float mark3;float sum;/總分float average;/平均分; Student結構體說明表名稱屬性說明term數(shù)據(jù)成員說明學生學期num數(shù)據(jù)成員說明學生學號name數(shù)據(jù)成員說明學生名字mark1數(shù)據(jù)成員說明學生高等數(shù)學成績mark2 數(shù)據(jù)成員說明學生數(shù)據(jù)結構成績mark3數(shù)據(jù)成員說明學生組成原理成績sum數(shù)據(jù)成員說明學生總成績average數(shù)據(jù)成員說明學生平均成績(4

14、) 各功能模塊的設計*主函數(shù)模塊 用函數(shù)void main()來實現(xiàn) 主要是來顯示主菜單,使用戶選擇操作。首先定義一個指針數(shù)組(全局使用)Student *p=(Student *)new Studentnum;在此處num是指學生個數(shù),并不是學號,之前有定義的(不要弄混了),在這里應用了do-while和switch-case語句來進行選擇,是個比較簡單實現(xiàn)的模塊。最后若選擇“11”則是保存記錄并退出永真循環(huán)。*輸入學生記錄模塊 用函數(shù)void input(Student *r); 來實現(xiàn) 主要功能用來對學生的成績進行收集和輸入。首先會有個提示“輸入最初要求的學生數(shù)”,之后跳出主菜單,選擇&

15、quot;1",進入輸入模塊輸入所需學生個數(shù)的學生信息,比如學期,學號,姓名,成績等。輸完之后會自動跳出主菜單,根據(jù)主菜單來在此基礎上進行操作。期間會有一些提示語,按此操作即可。根據(jù)if和for語句來判定期間是否有重復學號輸入,在本操作中,允許有重復學生姓名出現(xiàn)。在此模塊中,用到了文件操作的指針FILE *fp;同時也用到了一個控制變量t,它是用來判定的條件變量,t=1表示找到了與之重復的學號,t=0表示未出現(xiàn)重復學號。在此期間會根據(jù)語句算出總分和平均分,并默認按學號排序保存到文件中去。之后返回主菜單。寫文件操作代碼:if(fp=fopen("student.txt&quo

16、t;,"w")=NULL) cout<<"文件不能打開"<<endl;exit(0); for(n=0;n<i;n+)fprintf(fp,"%d %s %.1f %.1f %.1f %d %.1f %.1f",rn.num,,rn.mark1,rn.mark2,rn.mark3,rn.term,rn.sum,rn.average);fprintf(fp,"n");fclose(fp);cout<<"文件已經(jīng)寫入"<<endl;

17、*顯示學生記錄模塊 用函數(shù)void output(Student *r);來實現(xiàn) 主要功能是用來顯示學生的信息進行輸出。在系統(tǒng)已經(jīng)錄入了學生資料的前提下,只用該功能可以顯示學生的信息資料等等。同時也會自動跳出主菜單進行后續(xù)操作。主要的程序代碼就是從文件的讀操作和界面顯示操作。其中stew()指的是兩字節(jié)之間的間隔,在括號中填入該有的數(shù)字就會有相應的間隔,從而使輸出有一定的美感。讀文件操作代碼:if(fp=fopen("student.txt","r")=NULL) cout<<"文件不能打開"<<endl;ex

18、it(0); for(int n=0;n<num;n+)fscanf(fp,"%d%s%f%f%f%d%f%f",&rn.num,,&rn.mark1,&rn.mark2,&rn.mark3,&rn.term,&rn.sum,&rn.average);fclose(fp);cout<<"文件已經(jīng)讀入"<<endl;*插入學生資料模塊 用函數(shù)Student *insert(Student *r);來實現(xiàn) 主要功能是用來添加學生資料,成績。若顯示時沒有此學生的

19、信息,就可以使用本模塊來進行添加。在此模塊代碼中定義了另一個指針數(shù)組:Student *y=(Student *)new Studentnum+1;用來存放新添加的學生記錄。再利用for循環(huán)進行輸入新學生記錄,for(m=0;m<num;m+) ym=rm;先將指針數(shù)組r中的內容賦給y,之后添加語句r=y;將y的地址送給r,這樣可以保證新輸入的記錄可以在全程序中使用,使其變成全局變量,這樣也可以將新輸入的記錄保存到文件中去,最后會有一個提示語句cout<<"是否繼續(xù)輸入?(繼續(xù),輸入y,否則輸入其他)"<<endl;若輸入y則繼續(xù)輸入,否則將返

20、回主菜單,本模塊功能到此結束。*按學號及學期來查找學生記錄模塊 用函數(shù)void searchnum(Student *r);來實現(xiàn) 主要功能時用來查找學生記錄。首先會有提示輸入學號及學期,再用for循環(huán)語句和if判斷語句來進行查找,if(rm.num0=n0&&rm.term=k)若找到則顯示學生記錄并跳出循環(huán);if(rm.num0!=n0&&rm.term!=k) 若沒有則提示"該學號不存在,或沒有這個學期的成績!"。*按姓名及學期來查找學生記錄模塊 用函數(shù)void searchname(Student *r) 來實現(xiàn) 主要功能也是用來查找

21、學生記錄的。首先會有提示輸入姓名及學期,再用for循環(huán)語句和if判斷語句來進行查找,if(0=n0&&rm.term=k)若找到則顯示學生記錄并跳出循環(huán);if(0!=n0&&rm.term!=k) 若沒有則提示"該姓名不存在,或沒有這個學期的成績!"。*-查找輸出語句實現(xiàn)的代碼如下: cout<<"學號"<<setw(6)<<"姓名"<<setw(10)<<"高等數(shù)學"<<setw(1

22、0)<<"數(shù)據(jù)結構"<<setw(10)<<"組成原理"<<setw(6)<<"學期"<<setw(6)<<"總分"<<setw(8)<<"平均分"<<endl;cout<<rm.num<<setw(6)<<<<setw(7)<<rm.mark1<<setw(10)<<rm.mar

23、k2<<setw(10)<<rm.mark3<<setw(8)<<rm.term<<setw(6)<<rm.sum<<setw(8)<<rm.average<<endl;*修改學生記錄模塊 用函數(shù)void change(Student *r)來實現(xiàn) 主要功能是用來修改學生記錄。首先也要有個判斷語句,來看看要修給的學生是否存在,這個是通過學號及學期來判斷的(學號是不會有重復的),這里會有提示輸入學號及學期,之后是for和if語句,if(rm.num=n&&rm.term=k

24、)若存在則先輸出修改之前的信息,查看是否正確。若正確,則修改此學生記錄,這里有個while循環(huán)語句,和switch-case選擇語句,用來選擇修改哪科成績,和是否進行再修改記錄(通過選擇Y或y來實現(xiàn))。最后將修改過后的記錄保存到文件中去,并輸出提示"文件已修改并寫入"。*按學號及學期刪除學生記錄 用函數(shù)void shanchu(Student *r)來實現(xiàn) 主要功能是用來刪除學生記錄。首先有個度文件的操作,之后會有判斷語句,根據(jù)所輸入的學號及學期,來顯示刪除前的信息記錄,添加for循環(huán)語句,循環(huán)把后一位的信息提前一位,整體數(shù)量減一,來進行全局變量的修改,之后再把修改過后的信

25、息記錄保存到文件中去。在現(xiàn)實中會有由于某些原因而不在學校的同學的記錄,這時候就要對其記錄進行刪除操作,這樣可以使系統(tǒng)及時更新并得到優(yōu)化。*按數(shù)據(jù)結構成績(冒泡)降序排序模塊 用函數(shù)void maopao(Student *r)來實現(xiàn) 主要功能時是用來對學生的記錄來按單科成績進行排序。這樣方便對某科成績有個大致的了解。首先會有一個讀文件操作,為排序做基礎。 本排序使用冒泡排序。它有兩個優(yōu)點:一是“編程復雜度”很低,很容易寫出代碼;二是具有穩(wěn)定性,這里的穩(wěn)定性是指原序列中相同兩元素的相對順序仍然保持到排序后的序列。冒泡排序時進過n-1趟子排序完成的,第i趟子排序從第1個數(shù)至第n+1個數(shù),若第i個數(shù)

26、比后一個數(shù)大(則升序,小則降序。本程序一律采用降序)則交換兩數(shù)。本程序中冒泡排序代碼如下:for(int k=0;k<num-1;k+)for(int m=0;m<num-k;m+) Student max;if(rm.mark2<rm+1.mark2) max=rm+1;rm+1=rm;rm=max; cout<<"排序完畢"<<endl; 排序之后,將排序之后的結果寫入文件,再打開文件的時候,里面顯示的就是按單科成績排序后的結果。*按總分(選擇)降序排序 用函數(shù)void xuanze(Student *r)來實現(xiàn) 主要功能時是用

27、來對學生的記錄來按總分成績進行排序。這樣方便對學生總體有個大致的了解。首先會有一個讀文件操作,為排序做基礎。 本排序使用選擇排序。其基本思想是:n個記錄的文件的直接選擇排序可進過n-1趟直接選擇排序得到有序結果:初始狀態(tài),無序區(qū)為R1.n,有序區(qū)為空。第一趟排序 在無序區(qū)R1.n中選出關鍵字最小的記錄Rk,將它與無序區(qū)的第一個記錄R1交換,使R1.n和R2.n分別變?yōu)橛涗泜€數(shù)增加1個的新有序區(qū)記錄和記錄數(shù)減少1個的新無序區(qū)。 . 第i趟排序 第i唐排序開始時,當前有序區(qū)和無序區(qū)分別為R1.i-1和R(1in-1)。該趟排序從當前無序區(qū)中選出關鍵字最小的記錄Rk,將它與無序區(qū)的第一個記錄與R交換

28、,使R1.i和R分別變成為記錄個數(shù)增加1個的新有序區(qū)和記錄個數(shù)減少1個的新無序區(qū)。 這樣,n個記錄的文件的直接選擇排序可經(jīng)過n-1趟直接選擇排序得到有序結果。本程序中選擇排序代碼如下:for(int i=0;i<num;i+)int max=i;for(int j=i;j<num;j+)if(rmax.sum<rj.sum)max=j;Student temp;temp=rmax;rmax=ri;ri=temp;cout<<"排序完畢"<<endl; 排序之后,將排序之后的結果寫入文件,再打開文件的時候,里面顯示的就是按單科成績排序

29、后的結果。*統(tǒng)計各科總分及平均分模塊 用函數(shù)void tongji(Student *r)來實現(xiàn) 主要功能是計算總分和各科平均分。代碼比較容易實現(xiàn),計算完之后將總分保存到文件中即可。*以上就是本程序的詳細設計及基本思想*4、 所遇到的問題和分析解決1、 存在的不足本學生成績管理系統(tǒng)由十大模塊組成,每個模塊相互聯(lián)系又相互獨立。這個學生成績管理系統(tǒng)存在著很多不足之處,由于自己本身編程能力的問題,這個系統(tǒng)可以實現(xiàn)的功能非常有限。只能實現(xiàn)學生管理系統(tǒng)最基本的功能,可以進行簡單的輸入、輸出學生資料,查詢和修改學生信息,能直接從文件中讀入數(shù)據(jù),能對系統(tǒng)所作的修改、操作進行保存等。而且在每個模塊也有不足的地

30、方,比如在輸入學生資料時,對每個信息項沒有嚴格的規(guī)定,可以輸入任何的字符。這有待以后努力,更詳盡的實現(xiàn)模塊的功能。2、 do-while語句的位置問題在修改學生記錄此模塊中,若循環(huán)語句的位置不對那么這個循環(huán)就會自動跳出,或變?yōu)閬y碼,不能實現(xiàn)原有的功能。所以要想清楚到底是在哪安放,按照邏輯思路找到相應的語句正確添加就行了。 3、 指針數(shù)組的使用就是在插入學生記錄模塊中,另一個指針數(shù)組的定義,之前做的時候沒有注意到這點,結果所做的修改不能夠保存到文件,之后操作的時候也沒有顯示所做修改的記錄,之后找了資料看了之后才知道,是變量的問題,所以最后作了修改,加了一個另外的指針數(shù)組。4、 system(&#

31、39;cls')的使用問題剛開始時對菜單的切換不是很了解,編寫的程序運行的時候是一豎行向下的,很影響使用者的視覺范圍,通過查詢一些資料得知了system('cls')的作用,能夠把一些暫時不用或不相關的信息通過清屏來處理。5、 細節(jié)方面其實在有些細節(jié)方面還是要特別注意啊,比如分號的添加,<<與>>的方向問題,函數(shù)的返回值等問題,雖然容易改掉,但是很容易養(yǎng)成不好的習慣,而且還會浪費時間,所以在一開始寫的時候就要很仔細,這樣才能保證程序編的精細,同時若出現(xiàn)很多這樣的錯誤的話,在編寫程序的時候也會心里煩的,所以在編程的時候要認真仔細。6、 文件的寫入與

32、讀出剛開始時對文件的操作不是很明白,一直不能很好的操作文件,直到最后驗收的時候,仍舊出現(xiàn)了嚴重的問題,就是對已經(jīng)存在的文件讀取問題,通過"讀取文件并輸出學生信息",將數(shù)據(jù)從文件中讀取,但是不能夠正常的讀出,最后把讀文件的操作語句進行仔細檢查后,發(fā)現(xiàn)語句的順序有點問題,把fscanf()語句進行再修改后就能夠正常的讀取文件了。7、 內存的分配問題 對于初學者的話對內存的分配和釋放問題是比較抽象的和模糊的問題,在排序是之前就出現(xiàn)了交換數(shù)據(jù)困難的問題,以及內存分配空間繁瑣釋放空間不及時的問題,造成空間的浪費,使得程序運行時效率較低,因此最后采用了順序存儲記錄的方式,這就能改變前面

33、所出現(xiàn)的問題。8、 較小的問題方面 其余的就沒什么比較大的問題了,基本上只要細心一點的話就可以正確調試了。5、 系統(tǒng)特色及關鍵技術 其實在本程序的設計過程當中,沒有很吸引人的關鍵技術,因為本人的C語言或C+語言都不是學的很好,所以當初設計的時候就只是想把功能都實現(xiàn)就好了,盡可能的把所要求的功能都編進程序,這樣就覺得很滿足了。所以都是設計的比較簡單易懂的語言,這樣自己能夠更明白一些,所以就沒有時間去細細地去設計自己的程序。本程序要說有什么值得說的,那就只有人性化這點了,在設計成學的時候,因為自己怕弄混了,所以添加了很詳盡的提示,這樣在編程的過程中或調試的時候都能夠比較快的運行。還有就是盡可能的應

34、用了do-while語句和switch-case語句,這兩個語句在之前不是很常用,所以在這個程序中試煉了一下,雖然在編寫的過程中總是出錯,但還是成功的用好了,也是程序有條理一些。我也知道這些東西別人可能比我弄得還要好,但是我在我所學的知識中成功的應用了這些,我覺得就是好事,就是進步。6、 結論及心得體會 一周多的課程設計,終于成功的驗收了,雖然有些疲憊,但還是有很多的收獲的,像計算機組成原理的課設一樣,我又一次鞏固了所學到的知識,之前的學習只是停留在理論基礎上,現(xiàn)在自己動手操作試驗后,才是真正的理解及體會。C+也學了近一年,有很多知識都是似懂非懂,通過平時上機操作,自己也了解了一些,但讓我有了

35、更深的理解和更好的認識,則是在這次的課設上,之前的困惑也通過這次的課設解決了一些,雖然還是不能夠全面的理解,但是有進步就很高興。 在課程設計之前,因為有了綜合實驗的經(jīng)驗與教訓,明白了寫代碼這一步是非常重要的,因為當你把代碼輸進去之后,并編譯讓其運行,發(fā)現(xiàn)通過不了,再來檢查出問題,是很費費力的事情,因此分析和規(guī)劃代碼是很重要的,最重要的是要把邏輯結構寫好,這樣就不會出現(xiàn)大問題,寫代碼就要先找出核心的內容,用多種方法來實現(xiàn)核心部分,這樣可以盡可能的避免發(fā)現(xiàn)邏輯或編譯不支持的錯誤。 通過本次論文設計,我初步學會了論文設計的基本方法,學會了怎樣去借鑒別人的方法和經(jīng)驗,知道了如何整合資料和處理這些資料的

36、能力,這位以后做畢設的論文打下了基礎,使我感覺比較好的是有一種成功的喜悅,雖然在編譯的時候會經(jīng)常因為一些小的錯誤而心煩意亂,但是也不失為一件好事,失敗的越多積累的經(jīng)驗越豐富,對人的考驗也比較多,那么在最后編譯成功時的喜悅就越濃烈,也是自己的能力有了進一步的提高。由于知識和經(jīng)驗的不足,這個程序編寫的不是很盡如人意,但是融合了自己的心血,就覺得是最好的,所以在以后還是需要較多的努力的,還是會在以后的學習過程中不斷地提高和改進的。7、 附錄(源代碼)#include<iostream.h>#include<stdlib.h>#include<iomanip.h>/

37、主要是對cin,cout之類的一些操縱運算,是I/O流控制頭文件。 #include <conio.h> /文件和標準控制臺的輸入輸出#include<stdio.h> struct Student /結構體int term;/學期int num;/學號char name12;/姓名float mark1;/成績float mark2;float mark3;float sum;/總分float average;/平均分;int num=0;void input(Student *r); /輸入void output(Student *r); /輸出void searc

38、hnum(Student *r); /按學號及學期查找void searchname(Student *r); /按姓名及學期查找void change(Student *r); /按學號及學期修改信息Student *insert(Student *r); /插入信息void shanchu(Student *r); /按學號及學期刪除信息void maopao(Student *r); /按數(shù)據(jù)結構降序(冒泡)排序void xuanze(Student *r); /按總分降序(選擇)排序void tongji(Student *r); /統(tǒng)計各科總分和平均分信息void main()cou

39、t<<"輸入學生的個數(shù):"cin>>num;Student *p=(Student *)new Studentnum;/定義指針數(shù)組,存放學生個數(shù)int m;docout<<endl;cout<<endl;cout<<"t*菜單欄*n"<<endl;cout<<"t* 1 輸入學生信息并保存到文件 2 讀取文件并輸出學生信息 *"<<endl;cout<<"t* 3 按學號及學期查詢 4 按姓名及學期查詢 *"

40、;<<endl;cout<<"t* 5 按學號及學期修改信息 6 插入信息 *"<<endl;cout<<"t* 7 按學號及學期刪除信息 8 按數(shù)據(jù)結構降序(冒泡)排序 *"<<endl;cout<<"t* 9 按總分降序(選擇)排序 10 統(tǒng)計各科成績的總分和平均分 *"<<endl;cout<<"t* 11 退出 *"<<endl;cout<<"t*n"<<e

41、ndl;cout<<"請選擇:"cin>>m;switch(m)case 1: input(p);break;case 2:output(p);break;case 3: searchnum(p);break;case 4: searchname(p);break;case 5: change(p);break;case 6: p=insert(p);break;case 7: shanchu(p);break;case 8: maopao(p);break;case 9:xuanze(p);break;case 10: tongji(p);brea

42、k;case 11:break;while(m!=11); void input(Student *r) /輸入信息FILE *fp;int n=0;int i;int t=0; /t為控制標量,1為找到,0為未找到 cout<<endl<<"=>> 請輸入學生信息 <<="<<endl;for(i=0;i<num;i+)cout<<"請輸入學期:"cin>>ri.term;cout<<"請輸入第"<<i+1<<

43、;"個人的學號:"cin>>ri.num; if(i>=1)for(n=0;n<i;n+)if(rn.num=ri.num) cout<<"該學號已存在!"<<endl;t=1;if(t=1)/表示有重復i-;t=0;continue;cout<<"請輸入姓名:"cin>>;cout<<"請輸入 高等數(shù)學 成績:"cin>>ri.mark1;cout<<"請輸入 數(shù)據(jù)結構 成績:&qu

44、ot;cin>>ri.mark2;cout<<"請輸入 組成原理 成績:"cin>>ri.mark3;ri.sum=ri.mark1+ri.mark2+ri.mark3;ri.average=(ri.mark1+ri.mark2+ri.mark3)/3;if(fp=fopen("student.txt","w")=NULL) cout<<"文件不能打開"<<endl;exit(0); for(n=0;n<i;n+)fprintf(fp,"%

45、d %s %.1f %.1f %.1f %d %.1f %.1f",rn.num,,rn.mark1,rn.mark2,rn.mark3,rn.term,rn.sum,rn.average);fprintf(fp,"n");fclose(fp);cout<<"文件已經(jīng)寫入"<<endl;void output(Student *r) /輸出信息int m;system("cls");if(num>0)FILE *fp;if(fp=fopen("student.txt&qu

46、ot;,"r")=NULL) cout<<"文件不能打開"<<endl;exit(0); for(int n=0;n<num;n+)fscanf(fp,"%d%s%f%f%f%d%f%f",&rn.num,,&rn.mark1,&rn.mark2,&rn.mark3,&rn.term,&rn.sum,&rn.average);fclose(fp);cout<<"文件已經(jīng)讀入"<<endl;co

47、ut<<"*學生信息如下*"<<endl;cout<<"學號"<<setw(6)<<"姓名"<<setw(10)<<"高等數(shù)學"<<setw(10)<<"數(shù)據(jù)結構"<<setw(10)<<"組成原理"<<setw(6)<<"學期"<<setw(6)<<"總分"

48、<<setw(8)<<"平均分"<<endl;cout<<"-"<<endl;for(m=0;m<num;m+)cout<<rm.num<<setw(6)<<<<setw(7)<<rm.mark1<<setw(10)<<rm.mark2<<setw(10)<<rm.mark3<<setw(8)<<rm.term<<setw(6)<

49、;<rm.sum<<setw(6)<<rm.average<<endl;cout<<"00"<<endl;elsecout<<"未輸入任何信息!"<<endl;void searchnum(Student *r) /按學號及學期查找int n,k;system("cls");if(num>0)cout<<"請輸入要查找學生的學號:"cin>>n;cout<<"請輸入學期號:&

50、quot;cin>>k;for(int m=0;m<num;m+)if(rm.num=n&&rm.term=k)/如果找到了輸出并跳出循環(huán)cout<<endl;cout<<"-要查找的信息如下-"<<endl;cout<<"學號"<<setw(6)<<"姓名"<<setw(10)<<"高等數(shù)學"<<setw(10)<<"數(shù)據(jù)結構"<<

51、;setw(10)<<"組成原理"<<setw(6)<<"學期"<<setw(6)<<"總分"<<setw(8)<<"平均分"<<endl;cout<<rm.num<<setw(6)<<<<setw(7)<<rm.mark1<<setw(10)<<rm.mark2<<setw(10)<<rm.mark

52、3<<setw(8)<<rm.term<<setw(6)<<rm.sum<<setw(8)<<rm.average<<endl;break;if(rm.num!=n&&rm.term!=k) /若沒找到提示不存在cout<<"該學號不存在,或沒有這個學期的成績!"<<endl;elsecout<<"未輸入任何信息!"<<endl;void searchname(Student *r) /按姓名及學期查找cha

53、r n12;int k;system("cls");if(num>0) /如果沒輸入就查找提示cout<<"請輸入要查找學生的姓名:"cin>>n;cout<<"請輸入學期號:"cin>>k;for(int m=0;m<num;m+)if(0=n0&&rm.term=k) /如果找到了輸出并跳出循環(huán)cout<<endl;cout<<"-要查找的信息如下-"<<endl;cout<<

54、;"學號"<<setw(6)<<"姓名"<<setw(10)<<"高等數(shù)學"<<setw(10)<<"數(shù)據(jù)結構"<<setw(10)<<"組成原理"<<setw(6)<<"學期"<<setw(6)<<"總分"<<setw(8)<<"平均分"<<endl;cou

55、t<<rm.num<<setw(6)<<<<setw(7)<<rm.mark1<<setw(10)<<rm.mark2<<setw(10)<<rm.mark3<<setw(8)<<rm.term<<setw(6)<<rm.sum<<setw(8)<<rm.average<<endl;break;if(0!=n0&&rm.term!=k) /若沒找到提示不存在co

56、ut<<"該姓名不存在,或沒有這個學期的成績!"<<endl;elsecout<<"未輸入任何信息!"<<endl;void change(Student *r)/修改信息FILE *fp;int n=0;char chiose='Y'if(num>0)int n,k;int t=0;system("cls");cout<<"輸入要修改成績的學生學號:"cin>>n;cout<<"所需修改的學期:"cin>>k;for(int m=0;m<num;m+)if(rm.num=n&&rm.term=k)int j;cout<<endl;cout<<"-修改前的信息如下-"<<endl;cout<<"學號"<<setw(6)<<"姓名"<<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論