數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---學(xué)生成績管理系統(tǒng)_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論