版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p> 選題名稱: 學(xué)生成績管理系統(tǒng) </p><p> 系(院): 理學(xué) 院</p><p> 專 業(yè): 信息與計算科學(xué)</p><p> 班 級: </p>&
2、lt;p> 姓 名: 。。。。。 學(xué) 號: </p><p> 指導(dǎo)教師: </p><p> 學(xué)年學(xué)期: 2011 ~ 2012 學(xué)年 第 2 學(xué)期</p><p> 2012 年 07 月 11 日</p><p><b> 目錄</b>
3、;</p><p><b> 一、需求分析3</b></p><p><b> 1,系統(tǒng)需求3</b></p><p><b> 2,開發(fā)環(huán)境4</b></p><p><b> 二、概要設(shè)計4</b></p><p
4、><b> 三、詳細(xì)設(shè)計5</b></p><p> ?元素類型,結(jié)點類型和指針類型6</p><p> ?主函數(shù)和其他函數(shù)的偽碼算法7</p><p><b> ?系統(tǒng)流程圖8</b></p><p><b> 四、調(diào)試分析9</b><
5、;/p><p> 五、用戶手冊10</p><p> 六、測試結(jié)果11</p><p> 七、參考文獻(xiàn):12</p><p><b> 需求分析</b></p><p><b> 1,系統(tǒng)需求</b></p><p> ?。?)以單鏈
6、表的結(jié)點p表示學(xué)生,其中p->num表示學(xué)號,p->name表示姓名,p->score表示分?jǐn)?shù),p->total表示總分。學(xué)生人數(shù)沒有限制,由用戶隨意設(shè)定。該系統(tǒng)實現(xiàn)對若干個大學(xué)生的學(xué)習(xí)成績進(jìn)行管理。包括以下信息:學(xué)號、姓名、科目、成績,總排名。</p><p><b> (2)程序命令執(zhí)行</b></p><p><b> 1.
7、登記成績 </b></p><p> 2.查詢成績 </p><p> 3.插入成績 </p><p> 4.刪除成績 </p><p> 5.成績排序
8、 </p><p> 6.輸出所有學(xué)生成績 </p><p> 7.退出程序 </p><p> ?。?)輸入輸出的形式</p><p> 本系統(tǒng)是一個學(xué)生成績管理系統(tǒng),采用VC++6.0 編譯器作為開發(fā)環(huán)境,這個環(huán)境是我們在學(xué)習(xí)C++的平臺。輸
9、入數(shù)據(jù)類型主要是char、int、float等數(shù)據(jù)類型,輸入內(nèi)容包括:學(xué)號、姓名、復(fù)變函數(shù)成績,數(shù)據(jù)機(jī)構(gòu)成績,實變函數(shù)成績,常微分成績,總分,排名。用戶在輸入學(xué)生數(shù)據(jù)時要保證輸入數(shù)據(jù)格式的正確性,系統(tǒng)不會自動檢測輸入的數(shù)據(jù)是否正確,輸出形式與輸入形式類似,根據(jù)需要可以選擇顯示輸入的各項內(nèi)容,還可以選擇顯示計算好平均分后并排序后的記錄,顯示內(nèi)容包括:學(xué)號、姓名、復(fù)變函數(shù)成績,數(shù)據(jù)機(jī)構(gòu)成績,實變函數(shù)成績,常微分成績,總分。如圖:</p
10、><p><b> 3</b></p><p><b> 2,開發(fā)環(huán)境</b></p><p> Visual C++不僅僅是是一個C++編譯器,而是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境IDE,這種環(huán)境開發(fā)出來的軟件穩(wěn)定性好、可移植性強(qiáng),可以編制各種各樣的Windows應(yīng)用程序。</p>&l
11、t;p><b> 概要設(shè)計</b></p><p> 為實現(xiàn)上述程序功能,應(yīng)以線性鏈表表示學(xué)生。為此,需要一個抽象數(shù)據(jù)類型:線性鏈表。</p><p> 線鏈表的抽象數(shù)據(jù)類型定義為:</p><p> 抽象數(shù)據(jù)類型線性表的定義如下:</p><p> ADT List {</p><p
12、> 數(shù)據(jù)對象:D={ ai | ai ∈ ElemSet, i =1, 2, … …, n, n≥0 }</p><p> 數(shù)據(jù)關(guān)系:R1 = { < ai-1 , ai > | ai-1 , ai ∈ D, i =2, … …, n }</p><p><b> 基本操作:</b></p><p> InitLis
13、t (&L ) </p><p> 操作結(jié)果:構(gòu)造一個空的線性表L 。</p><p> DestoryList (&L)</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:銷毀線性表L。</p><p> ClearList (&L)</p>&
14、lt;p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:將L重置為空表。</p><p> ListEmpty (L)</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:若L 為空表,則返回TRUE,否則返回 FALSE。</p><p> ListLength (
15、L)</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:返回L中數(shù)據(jù)元素個數(shù)。</p><p> GetElem ( L, i, &e )</p><p> 初始條件:線性表L已存在,1≤i≤ListLength(L)+1。</p><p> 操作結(jié)果:用e返回L中第i個數(shù)據(jù)元
16、素的值。</p><p> LocateElem ( L,e, compare() )</p><p> 初始條件:線性表L已存在,compare()是判定函數(shù)。</p><p> 操作結(jié)果:返回L中第1個與e滿足關(guān)系compare()的數(shù)據(jù)元素的位序。若這樣的數(shù)據(jù)元素不存在,則返回值0。</p><p> PriorElem ( L
17、, cur_e, &pre_e )</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:若cur_e是L的數(shù)據(jù)元素且不是第1個,則用pre_e返回它的前驅(qū),否則操作失敗。</p><p> NextElem ( L, cur_e, &next_e )</p><p> 初始條件:線性表L已存在。&
18、lt;/p><p> 操作結(jié)果:若cur_e是L的數(shù)據(jù)元素且不是最后一個,則用next_e返回它的后繼,否則操作失敗。</p><p> ListInsert ( &L, i, e )</p><p> 初始條件:線性表L已存在,1≤i≤ListLength(L)+1。</p><p> 操作結(jié)果:在L中第i個位置之前插入新的數(shù)據(jù)
19、元素e,L的長度加1。</p><p> ListDelete( &L, i, &e )</p><p> 初始條件:線性表L已存在且非空,1≤i≤ListLength(L)。</p><p> 操作結(jié)果:刪除L的第i個數(shù)據(jù)元素,并用e返回其值,L的長度減1。</p><p> ListTraverse ( L,vis
20、it())</p><p> 初始條件:線性表L已存在。</p><p> 操作結(jié)果:依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù) visit()。一旦visit()失敗,則操作失敗。</p><p> } ADT List</p><p> 本程序主要包含三個模塊</p><p><b> 1)主程序模塊:&l
21、t;/b></p><p> void main()</p><p><b> {</b></p><p><b> 初始化;</b></p><p><b> while(1)</b></p><p><b> {</b
22、></p><p> switch(命令)</p><p><b> {</b></p><p> case 接受命令;</p><p> 處理命令;break;</p><p><b> }</b></p><p><b>
23、 }</b></p><p><b> }</b></p><p> 2)單鏈表模塊—實現(xiàn)單鏈表抽象類型</p><p> 3)學(xué)生成績管理模塊—實現(xiàn)學(xué)生成績管理系統(tǒng)</p><p> 各模塊之間的調(diào)用關(guān)系如下:</p><p><b> 主程序模塊</b&
24、gt;</p><p><b> 學(xué)生成績管理模塊</b></p><p><b> 單鏈表模塊</b></p><p><b> 詳細(xì)設(shè)計</b></p><p> 元素類型,結(jié)點類型和指針類型</p><p> Typedef char E
25、lemType ; //元素類型</p><p> typedef struct Node</p><p><b> {</b></p><p> ElemType data;</p><p> struct Node *next;</p><p> }Node,*Link
26、List;</p><p><b> ADT Node</b></p><p><b> {</b></p><p><b> //建立頭結(jié)點</b></p><p> Node* CreatHead(){</p><p> Node *hea
27、d;//Node *head,*tail;</p><p> head=new Node;//建立鏈表頭指針,記得釋放!</p><p> //tail=head;//臨時變量,此處沒有太多意義</p><p> head->link=NULL;</p><p> return head;</p><p>
28、;<b> }</b></p><p> 鏈表遍歷查找,按照關(guān)鍵字查找</p><p> Node*TravFind(Node*head,DataType key){</p><p> Node*p=head->link;</p><p> while(p!=NULL&&p->inf
29、o!=key)p=p->link;</p><p><b> return p;</b></p><p><b> }</b></p><p> 結(jié)點p后插入一個信息域為X的新結(jié)點</p><p> void InsertAfter(Node*p,DataType x){</p&
30、gt;<p> Node*q=new Node;</p><p> q->info=x;</p><p> q->link=p->link;</p><p> p->link=q;</p><p><b> }</b></p><p> 刪除一結(jié)點
31、后的結(jié)點,返回備用</p><p> Node* RemoveAft_rt(Node*p){</p><p><b> Node*q;</b></p><p> q=p->link;//Or, if(p->link=NULL) q=NULL; else</p><p> p->link=q-&g
32、t;link;</p><p> return q;//返回備用</p><p><b> }</b></p><p> 刪除一結(jié)點后的結(jié)點,不返回</p><p> void RemoveAfter(Node*p){</p><p><b> Node*q;</b>
33、;</p><p> q=p->link; </p><p> p->link=q->link;</p><p> if(q!=NULL){</p><p><b> delete q;</b></p><p><b> q=NULL;</b>&l
34、t;/p><p><b> } </b></p><p><b> }</b></p><p> 刪除指定結(jié)點p,返回</p><p> Node* RemoveCur_rt(Node*head,Node*p){</p><p> Node*q=head;</p&
35、gt;<p> while(q->link!=NULL && q->link!=p) q=q->link;//遍歷查找</p><p> //if(q->link==tail) tail=q;//已經(jīng)找到末尾</p><p> return RemoveAft_rt(q);//刪除q后面的結(jié)點p。若q==tail,返回NULL。
36、</p><p><b> }</b></p><p> 刪除指定結(jié)點p,不返回</p><p> void RemoveCur(Node*head,Node*p){</p><p> Node*q=head;</p><p> while(q->link!=NULL &&
37、amp; q->link!=p) q=q->link;//遍歷查找</p><p> RemoveAfter(q);//刪除q后面的結(jié)點p。若q==tail,返回NULL。 </p><p><b> }</b></p><p> 清空單鏈表,保留表頭結(jié)點</p><p> void MakeEmpt
38、y(Node* head){</p><p><b> Node*p;</b></p><p> while(head->link!=NULL){//未到尾節(jié)點</p><p> p=head->link;</p><p> head->link=p->link;//頭結(jié)點后第一個結(jié)點從鏈
39、中脫落</p><p> delete p; p=NULL;//刪除脫離下來的結(jié)點</p><p><b> } </b></p><p><b> }</b></p><p><b> 鏈表打印</b></p><p> void Print
40、SLL(Node* head){</p><p> Node* p=head->link;</p><p> while(p!=NULL){</p><p> cout<<p->info<<'\t';</p><p> p=p->link;</p><p&g
41、t;<b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p><b> }</b></p><p> 主函數(shù)和其他函數(shù)的偽碼算法</p><p> void main(
42、)</p><p><b> {</b></p><p><b> //主函數(shù)</b></p><p> Initialization();//初始化</p><p> while (cmd=’q’&&cmd=’Q’) </p><p><b&g
43、t; { </b></p><p> ReadCommand(cmd);//讀入一個操作命令符</p><p> Interpret(cmd);//解釋執(zhí)行操作命令符</p><p> switch (cmd)</p><p><b> {</b></p><p><
44、;b> case 1: </b></p><p> p=create(p,n);</p><p><b> break;</b></p><p><b> case 2: </b></p><p><b> find(p);</b></p&g
45、t;<p><b> break;</b></p><p><b> case 3:</b></p><p> insert(p);</p><p><b> break;</b></p><p><b> case 4:</b>&
46、lt;/p><p> Delete(p);</p><p><b> break;</b></p><p><b> case 5:</b></p><p><b> sort(p);</b></p><p><b> break;<
47、;/b></p><p><b> case 6:</b></p><p> output(p);</p><p><b> break;</b></p><p> case 0:exit(0);</p><p><b> default:</
48、b></p><p> cout<<"選擇錯誤,重新開始!"<<endl;</p><p><b> }//switch</b></p><p><b> }//while</b></p><p><b> }</b>&
49、lt;/p><p> void Initialization</p><p><b> {</b></p><p><b> //系統(tǒng)初始化</b></p><p> 在屏幕上顯示操作命令清單:1.登記成績 ,2.查詢成績;3.插入成績,4.刪除成績,5.成績排名;6.輸出所有學(xué)生成績 ,
50、7.退出程序 </p><p> } //Initialization</p><p><b> 系統(tǒng)流程圖</b></p><p><b> 調(diào)試分析</b></p><p><b> 存在的不足</b></p><p> 本學(xué)生成
51、績管理系統(tǒng)由七大模塊組成,每個模塊相互聯(lián)系又相互獨立。這個學(xué)生成績管理系統(tǒng)存在著很多不足之處,由于自己本身編程能力的問題,這個系統(tǒng)可以實現(xiàn)的功能非常有限。只能實現(xiàn)學(xué)生管理系統(tǒng)最基本的功能,可以進(jìn)行簡單的輸入、輸出學(xué)生資料,查詢和修改學(xué)生信息,能直接從文件中讀入數(shù)據(jù),能對系統(tǒng)所作的修改、操作進(jìn)行保存等。而且在每個模塊也有不足的地方,比如在輸入學(xué)生資料時,對每個信息項沒有嚴(yán)格的規(guī)定,可以輸入任何的字符。這有待以后努力,更詳盡的實現(xiàn)模塊的功能
52、。</p><p> do-while語句的位置問題</p><p> 在修改學(xué)生記錄此模塊中,若循環(huán)語句的位置不對那么這個循環(huán)就會自動跳出,或變?yōu)閬y碼,不能實現(xiàn)原有的功能。所以要想清楚到底是在哪安放,按照邏輯思路找到相應(yīng)的語句正確添加就行了。 </p><p><b> 指針數(shù)組的使用</b></p><p
53、> 就是在插入學(xué)生記錄模塊中,另一個指針數(shù)組的定義,之前做的時候沒有注意到這點,結(jié)果所做的修改不能夠保存到文件,之后操作的時候也沒有顯示所做修改的記錄,之后找了資料看了之后才知道,是變量的問題,所以最后作了修改,加了一個另外的指針數(shù)組。</p><p><b> 細(xì)節(jié)方面</b></p><p> 其實在有些細(xì)節(jié)方面還是要特別注意啊,比如分號的添加,<
54、;<與>>的方向問題,函數(shù)的返回值等問題,雖然容易改掉,但是很容易養(yǎng)成不好的習(xí)慣,而且還會浪費(fèi)時間,所以在一開始寫的時候就要很仔細(xì),這樣才能保證程序編的精細(xì),同時若出現(xiàn)很多這樣的錯誤的話,在編寫程序的時候也會心里煩的,所以在編程的時候要認(rèn)真仔細(xì)。</p><p><b> 文件的寫入與讀出</b></p><p> 剛開始時對文件的操作不是很明白
55、,一直不能很好的操作文件,直到最后驗收的時候,仍舊出現(xiàn)了嚴(yán)重的問題,就是對已經(jīng)存在的文件讀取問題,通過"讀取文件并輸出學(xué)生信息",將數(shù)據(jù)從文件中讀取,但是不能夠正常的讀出,最后把讀文件的操作語句進(jìn)行仔細(xì)檢查后,發(fā)現(xiàn)語句的順序有點問題,把fscanf()語句進(jìn)行再修改后就能夠正常的讀取文件了。</p><p><b> 內(nèi)存的分配問題</b></p><
56、;p> 對于初學(xué)者的話對內(nèi)存的分配和釋放問題是比較抽象的和模糊的問題,在排序是之前就出現(xiàn)了交換數(shù)據(jù)困難的問題,以及內(nèi)存分配空間繁瑣釋放空間不及時的問題,造成空間的浪費(fèi),使得程序運(yùn)行時效率較低,因此最后采用了順序存儲記錄的方式,這就能改變前面所出現(xiàn)的問題。</p><p><b> 較小的問題方面</b></p><p> 其余的就沒什么比較大的問題了,基本
57、上只要細(xì)心一點的話就可以正確調(diào)試了。</p><p><b> 用戶手冊</b></p><p> 本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為:GradeCheck.exe。</p><p> 進(jìn)入演示程序后即可顯示文本方式的用戶界面:</p><p> 進(jìn)入“登記成績”的命令后,即提示輸入學(xué)生的信息,包括各科
58、成績和學(xué)號姓名等;</p><p> 接受其他命令后即執(zhí)行相應(yīng)運(yùn)算和顯示相應(yīng)結(jié)果。</p><p><b> 測試結(jié)果</b></p><p> 執(zhí)行命令‘1’:出現(xiàn)如下圖</p><p> 相繼輸入學(xué)生人數(shù)和其他信息,如下圖:</p><p> 執(zhí)行命令‘2’:得如下圖</p&g
59、t;<p> 執(zhí)行命令‘3’:得結(jié)果為</p><p> 執(zhí)行命令‘4’:刪除學(xué)生成績;</p><p> 執(zhí)行命令‘5’:得成績排序如下:</p><p> 執(zhí)行命令‘6’:便會出現(xiàn)總成績。</p><p><b> 參考文獻(xiàn):</b></p><p> 1.《數(shù)據(jù)結(jié)構(gòu)
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--- 學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--學(xué)生成績管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---學(xué)生成績管理系統(tǒng)(部分)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-學(xué)生成績查詢系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)學(xué)生成績管理課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---學(xué)生成績管理問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--成績管理
- 數(shù)據(jù)結(jié)構(gòu)之學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--學(xué)生成績管理程序的設(shè)計與實現(xiàn)
評論
0/150
提交評論