2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  數據結構課程設計報告</p><p><b>  目錄</b></p><p>  1.航班信息管理系統………………3</p><p>  2.鐵路線最佳經由問題……………11</p><p>  3.學生信息管理系統………………20</p><p>  4.個人實習總結……

2、………………30</p><p>  題目1:航空訂票系統</p><p><b>  需求分析:</b></p><p>  設計一個航空訂票系統,基本要求如下:</p><p>  每條航班所涉及的信息有:航班號,航班機型,起飛機場,降落機場,日期(星期幾),起飛時間,降落時間,飛行時長,價格,乘員定額,余票量,訂定

3、票的客戶名單(包括姓名,訂票量,艙位等級(頭等艙、公務艙、經濟倉)以及等候替補的客戶名單(包括姓名、所需數量)。采用鏈式存儲結構。</p><p>  系統能實現的操作和功能如下:</p><p>  (1)航班信息管理。</p><p> ?。?)查詢航線,按以下幾種方式查詢:</p><p><b> ?、侔春桨嗵柌樵?;<

4、/b></p><p><b> ?、诎雌瘘c站查詢;</b></p><p><b> ?、郯唇K點站查詢;</b></p><p><b> ?、馨慈掌诓樵?;</b></p><p>  每種查詢方式中,查詢后輸出如下信息:航班號,航班機型,起飛機場,降落機場,日期(星期

5、幾),起飛時間,降落時間,飛行時長,價格,余票量。</p><p> ?。?)承辦訂票業(yè)務:根據客戶提出的要求(航班號,訂票數額)查詢該航班票額情況,若有余票,則為客戶辦理訂票手續(xù),輸出座位號;若已滿員或余票少于訂票額,則需重新詢問客戶要求。若需要,可登記排隊候補。</p><p>  (4)承辦退票業(yè)務:根據客戶提出的情況(日期,航班號),為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候

6、補,首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其它排隊候補的客戶。</p><p><b>  設計</b></p><p><b>  設計思想:</b></p><p>  (1)數據結構設計:</p><p><b>  a.航班信息:<

7、/b></p><p>  該系統采用動態(tài)鏈表存儲航班信息,每個節(jié)點表示一趟航班的基本信息(航班號,航班機型,起飛機場,降落機場,日期(星期幾),起飛時間,降落時間,飛行時長,價格,乘員定額,余票量),還包括購買該趟航班的客戶信息</p><p>  (包括姓名,訂票量,艙位等級(頭等艙、公務艙、經濟倉),鏈表結構體如下:</p><p>  typedef

8、struct</p><p><b>  {</b></p><p>  char name[MAX]; //客戶姓名</p><p>  int ticketnum; //客戶訂票量</p><p>  char rank[MAX]; //艙位等級</p>

9、<p>  int ticket[MAX]; //記錄座位號</p><p>  }Client; //客戶信息</p><p>  typedef struct</p><p><b>  {</b></p><p>  int NO;

10、 //座位號</p><p>  int flag; //標記是否被買</p><p><b>  }Ticket;</b></p><p>  typedef struct </p><p><b>  {</b></p><p>  int

11、 fID; //航班號</p><p>  char fModel[MAX]; //航班機型</p><p>  char airFrom[MAX]; //起飛機場</p><p>  char airTo[MAX]; //降落機場</p><p>  char week[MAX];

12、 //起飛時間</p><p>  char start[MAX]; //起飛時間</p><p>  char end[MAX]; //降落時間</p><p>  char time[MAX]; //飛行時長</p><p>  float price; //價格&

13、lt;/p><p>  int count; //成員定額</p><p>  int rest; //余票量</p><p>  Client client[MAX]; //購買該趟航班所有客戶信息</p><p>  int clientnum; //購

14、買該趟航班的客戶數量</p><p>  }DataType; //航班數據類型</p><p>  typedef struct node</p><p><b>  {</b></p><p>  DataType data; </p><p>  Ticket t

15、icket[100]; //座位號</p><p>  struct node* next; </p><p><b>  }SLNode;</b></p><p>  b.候補隊列結構體:</p><p>  候補隊列沒有采用隊列,而是采用鏈表,只是添加數據時在末尾添加,刪除數據在首部添加。</

16、p><p>  typedef struct</p><p><b>  {</b></p><p>  char name[MAX]; //候補客戶名稱</p><p>  int number; //候補客戶訂票量</p><p>  int fID;

17、 //候補客戶訂購的航班號</p><p>  }QDataType; //候補信息</p><p>  typedef struct qnode //候補客服信息鏈表 仿隊列</p><p><b>  {</b></p><p>  QDataType da

18、ta;</p><p>  struct qnode *next;</p><p>  }ListQueue;</p><p><b>  算法設計</b></p><p>  該系統包含五項基本功能:添加航班,查找航班,刪除航班,訂票,退票。</p><p>  添加航班:輸入航班基本信息,申請

19、空間,將客戶信息插入鏈表結尾。</p><p>  刪除航班:根據輸入的航班號在鏈表里搜索,找到后將該節(jié)點刪除。</p><p>  查找航班:包括按航班號查詢,按起點站、終點站查詢,按日期查詢。算法均 類似,在鏈表里搜索查詢條件,并將航班信息輸出,如果搜索到表尾均沒有,表示沒有該趟航班信息。</p><p>  

20、訂票業(yè)務:根據客戶輸入的航班號和訂票量,在航班信息表中搜素,沒有則提示錯誤,并返回。有則比較航班的余票量是否滿足客戶的需求,滿足則為該客戶訂票,將該客戶信息存入該趟航班節(jié)點中,并檢索座位號信息是否被訂過,將沒有被訂的座位號輸出,并將該客戶的余票量改變。若不滿足客戶需求,詢問客戶是否需要進入候補隊列等待買票,客戶需要則將該客戶的信息存入候補隊列中,有客戶退票并滿足即可訂票,不需要就返回。</p><p>  退票業(yè)

21、務:先提示客戶輸入航班號和名稱,在航班信息里搜索,檢查客戶輸入的信息是否正確(該客戶是否存在,該客戶退的票數是否比定的票數少或者相等),輸入錯誤就提示并輸出,輸入正確,若輸入的票數和客戶訂購的票數相等,則將該客戶的信息從鏈表中刪除,并將該客戶的座位號退回去(將該趟航班的這幾個座位號標識記為未定),將訂購該趟航班的客戶數量加一;若輸入的票數比客戶訂購的票數少,則將該客戶后面部分的票退回去,并將該趟航班的余票量減少,最后將該客戶訂購的票數減

22、少。退票就完成了。 然后檢索候補隊列的信息,依次詢問客戶是否需要訂票,若滿足則訂票,不滿足就詢問下一個。</p><p>  最后添加了一點打印功能,可以將購買某趟航班的客戶信息打印出來,以及打印候補隊列客戶信息,方便隨時查詢內存情況。</p><p><b>  設計表示:</b></p><p>  (1)函數調用關系圖:</p&

23、gt;<p><b>  函數接口規(guī)格說明:</b></p><p>  void SLNodeInit(SLNode **head) //鏈式表 存儲航班信息</p><p>  int SLNodeInsert(SLNode *head,DataType x) //插入節(jié)點</p><p>  void SLNod

24、eFirst(SLNode *head) //初始化2趟航班</p><p>  int SLnodeLength(SLNode *head) //求鏈表長度</p><p>  void ListQueueInit(ListQueue **head) //候補客戶鏈表初始化</p><p>  int L

25、istQueueLength(ListQueue *head) //鏈表長度</p><p>  ListQueue* ListQueueFind(ListQueue *head,int number,int fid) </p><p>  //按照航班號和票數在鏈表里查找</p><p>  void ListQueueDel(ListQ

26、ueue *head,ListQueue *node) //刪除該節(jié)點</p><p>  ListQueue* ListQueueInsertLast(ListQueue *head,char name[],int fid,int number) </p><p>  //客戶信息插入候補末尾</p><p>  SLNode* FlightA

27、dd(SLNode *head) //添加航班</p><p>  void FlightPrint(SLNode *head) //打印出航班信息</p><p>  void FlightDelete(SLNode *head) //刪除航班</p><p>  void ListQueuePrint(Li

28、stQueue *head) //候補名單打印</p><p>  void ClientFind(SLNode *head,int fid) //查找訂購某趟航班的客戶信息</p><p>  int BackFind(SLNode *head,int fid,char name[],int nu//判斷退票客戶信息是否有誤</p>

29、<p>  void FlightIDFind(SLNode *head,int fid) //按航班號查詢</p><p>  void FlightStartFind(SLNode *head,char start[]) //按起飛機場查詢</p><p>  void FlightEndFind(SLNode *head,char en

30、d[]) /按著陸機場查詢</p><p>  void FlightDateFind(SLNode *head,char date[]) //按星期查詢</p><p>  ListQueue* TicketOrder(SLNode *head,int fid,int tknum,ListQueue *SS) </p><p&

31、gt;<b>  //訂票</b></p><p>  void TicketBack(SLNode *head,int fid,int tknum,char name[],ListQueue *S) </p><p><b>  //退票</b></p><p><b>  詳細設計:</b>

32、</p><p><b> ?。?).調試分析:</b></p><p>  a.首先寫程序我沒有把客戶信息保存下來,而是單獨用一個鏈表保存,后來寫到后面遇到瓶頸,又改為每趟航班都保存客戶信息。</p><p>  b.退票業(yè)務沒有根據客戶姓名退票,在老師的指點下,退票將客戶信息與鏈表中的客戶信息對比,輸入沒有錯誤才可以退票。</p>

33、;<p>  c.座位號是后來老師指點下設置標記為存起來,每次訂票和退票都修改標志位,這樣座位號才是聯系起來的。</p><p><b> ?。?).用戶手冊:</b></p><p>  a. 按照提示輸入數據,一定注意數據的格式和數據的個數。</p><p>  b. 輸入數據最好先保存在文檔中,再復制,不然輸入錯誤一個肯能導

34、致程序運行錯誤。</p><p> ?。?).測試數據及測試結果:</p><p>  添加的兩趟航班信息:</p><p>  按航班號查詢航班信息:</p><p><b>  訂票業(yè)務:</b></p><p><b>  查詢候補客戶信息:</b></p>

35、<p>  退票后為候補客戶訂票</p><p><b>  查詢購票客戶信息:</b></p><p>  題目5:鐵路網最佳經由問題</p><p><b>  需求分析</b></p><p>  鐵路運輸網絡中有鐵路線和火車站兩個主要概念,譬如:1號鐵路線表示京廣線,2號鐵路線

36、表示京滬線等。</p><p>  鐵路線對象包括鐵路線編號、鐵路線名稱、起始站編號、終點站編號、該鐵路線長度、通行標志(00B客貨運禁行,01B貨運通行專線,10B客運通行專線,11B客貨運通行)。</p><p>  火車站對象包括所屬鐵路線編號、車站代碼、車站名、車站簡稱、離該鐵路線起點站路程及終點站路程。</p><p><b>  要求:<

37、/b></p><p>  (1)查詢某站所屬的鐵路線。</p><p> ?。?)要求具備新增鐵路線的管理功能。</p><p> ?。?)要求具備新增車站的管理功能。</p><p>  (4)針對客運、貨運情況能計算任何一個起始車站到任何一個終點站之間的最短路徑。并且要求能夠顯示出該最短路徑的各個火車站的經由順序。</p&g

38、t;<p> ?。?)能輸出全部線路及沿途站點。</p><p><b>  二.設計</b></p><p><b>  1.設計思想:</b></p><p> ?。?)數據結構設計:</p><p>  鐵路線采用動態(tài)鏈表存儲,包括鐵路線編號、鐵路線名稱、起始站編號、終點站編號、

39、該鐵路線長度、通行標志(00B客貨運禁行,01B貨運通行專線,10B客運通行專線,11B客貨運通行)</p><p><b>  結構體如下:</b></p><p>  typedef struct </p><p><b>  {</b></p><p>  int rID;

40、 //鐵路線編號</p><p>  char name[MAX]; //鐵路線名稱</p><p>  int startID; //起始站站點編號</p><p>  int endID; //終點站編號</p><p>  long length; //

41、鐵路線長度</p><p>  char sign[3]; //通行標志</p><p>  }DataType; //鐵路線數據</p><p>  typedef struct node</p><p><b>  {</b></p><p>

42、;  DataType data;</p><p>  struct node *next;</p><p>  }SLNode; //鐵路線節(jié)點</p><p>  所有站點采用鄰接表存儲,鄰接表的下一個節(jié)點包括該站點的站點代碼和距離上一個站點的距離,結構體如下:</p><p>  type

43、def struct Node2</p><p><b>  {</b></p><p>  int sID; //站點代碼</p><p>  long weight; //前一個站到這站的距離</p><p>  struct Node2 *next;&

44、lt;/p><p>  }Edge; //兩個站點之間的邊</p><p>  typedef struct Node1</p><p><b>  {</b></p><p>  int belong[MAX]; //站點所屬的鐵路線&l

45、t;/p><p>  int routecount; //站點所屬的鐵路線數量</p><p>  int sID; //站點代碼</p><p>  char *name; //站點名稱</p><p>  

46、char *shortname; //站點簡稱</p><p>  long startDis; //距離起始站的距離</p><p>  long endDis; //距離終點站的距離</p><p>  int NO; /

47、/記錄它在數組的第幾個位置,方便深度優(yōu)先算法用</p><p>  Edge *adj; //鄰接邊頭指針</p><p>  }SDataType; //站點數據</p><p>  typedef struct</p><p><b>  {</b></p

48、><p>  SDataType data[MAX]; //每個站點的數據 </p><p>  int count; //記錄站點個數</p><p>  }GNode; //圖節(jié)點</p><p><

49、;b>  (2)算法設計:</b></p><p>  該系統采用動態(tài)鏈表存儲所有鐵路線信息,但是包括的站點只是起點站和終點站,以及該鐵路線所有其他信息,鐵路線所以站點(包括起點站和終點站)單獨采用圖的鄰接表存儲。</p><p>  系統包括項功能:添加鐵路線,查看鐵路線,添加站點,顯示全部站點信息及沿途站點,找到任意兩點間的最短距離。</p><p

50、>  添加鐵路線:根據輸入的鐵路線信息,檢查這兩個站點是否已經存在,若不存在,申請內存,將數據存入并插入到鏈表的末尾。并將兩個站點所屬的鐵路線加入所屬鐵路線數組中,所屬鐵路線數量遞增。若存在,則只添加該站點所屬的鐵路線,并修改鄰接表的相關信息。</p><p>  查詢鐵路線:在鏈表中一次循環(huán),將鐵路線信息輸出,鏈表為空則提示錯誤。</p><p>  添加站點:輸入站點所屬的鐵路線

51、,站點信息,上一站代碼,距離上一站點的距離,下一站代碼,距離下一站點的距離。先查看是否存在該站點,存在則只修改所屬的鐵路線,并修改鄰接表的相關信息。</p><p>  顯示全部鐵路線及沿途站點:在鐵路線鏈表中依次搜索鐵路線信息,并在站點中搜尋,若屬于該鐵路線就輸出這個站點的信息,當搜索到表尾時,就可以輸出全部鐵路線信息,同時該系統還采用圖的深度優(yōu)先遍歷算法輸出全部站點信息。</p><p&g

52、t;  找到任意兩點間的距離:題目要求按照鐵路通行情況找到任意兩點間的距離,但是我只是采用弗洛伊德算法找到任意兩點間的最短距離,后來經老師指點可以將全部站點導出各種通行情況,再用弗洛伊德算法,但是由于時間較短,還沒有弄出最終結果,目前只能實現尋找任意兩點間的最短距離及經過的沿途站點。</p><p><b>  2.設計表示:</b></p><p> ?。?).函數

53、關系調用圖:</p><p>  (2).函數接口說明:</p><p>  #include "Graph.h" //站點相關信息</p><p>  #include "SLNode.h" //鐵路線相關信息</p><p>  #include "Pri

54、nt.h" //輸出相關信息</p><p>  void SLNodeInit(SLNode **head) //初始化鏈表</p><p>  void AddRoute(SLNode *head,int rID,char name[],int startID,char *sn,char *ss

55、,int endID,char *en,char *es,long length,char sign[],GNode *G) //添加鐵路線</p><p>  void PrintRoute(SLNode *head,GNode *G) //輸出所有鐵路線信息</p><p>  void GraphInit(GNode **G)

56、 //圖初始化</p><p>  void AddStation(GNode *G,SLNode *head,int belong,int sid,char* sn,char* ss,int preID,long preDis,int laterID,long laterDis) //添加站點</p><p>  int Firs

57、tVertex(GNode *G,int v) //求V的鄰接節(jié)點</p><p>  int NextVertex(GNode *G,int v,int w) //求V的臨界點w的第一個節(jié)點</p><p>  int NextVertex(GNode *G,int v,int w)

58、 //求V的臨界點w的第一個節(jié)點</p><p>  void DepthFSearch(GNode *G,int v,int visited[],void Vist(int sid)) //深度優(yōu)先算法</p><p>  void DepthFirstSearch(GNode *G,void Visit(int sid)) //無向圖的深

59、度優(yōu)先算法</p><p><b>  詳細設計:</b></p><p>  采用動態(tài)鏈表存儲所有鐵路線信息,但是包括的站點只是起點站和終點站,以及該鐵路</p><p>  線所有其他信息,鐵路線所以站點(包括起點站和終點站)單獨采用圖的鄰接表存儲。系統包括項功能:添加鐵路線,查看鐵路線,添加站點,顯示全部站點信息及沿途站點,找到任意兩點間

60、的最短距離。采用弗洛伊德算法找到任意兩點間的最短距離,后來經老師指點可以將全部站點導出各種通行情況,再用弗洛伊德算法,但是由于時間較短,還沒有弄出最終結果,目前只能實現尋找任意兩點間的最短距離及經過的沿途站點。</p><p><b>  調試分析:</b></p><p>  添加站點信息比較麻煩一點,因為可能要添加的站點已經存在,先要搜索站點,沒有則添加,即使有了

61、,還要添加站點所屬的鐵路線信息。并且根據站點相鄰的站點,要將整個圖串聯起來,還要算出各個站點間的距離。</p><p>  b. 求兩點間的距離采用弗洛伊德算法,但是我存儲數據用了鄰接表存儲,沒有找到相應的站點編號,后來在每個新加入的站點中添加編號,根據編號導出二維數組,才能采用弗洛伊德算法求解。</p><p>  c. 根據弗洛伊德算法求出path路徑后,我不知道怎么輸出所經過的站

62、點,在網上搜索各種方法,終于找到一種方法可行,就是要遞歸調用path,最終才得到正確的答案。</p><p><b>  用戶手冊:</b></p><p>  a.添加信息注意數據的格式和數量,否則程序運行會出錯,最好用文檔保存下來,再復制。</p><p>  b.添加站點信息,需要提供所屬的鐵路線,它的上一個站點信息,距離上一站的距離,還

63、要輸入它下一個站點的站點信息和距離下一個站點的距離。</p><p>  c.查找最短距離,還沒有分客貨運情況,有一點小遺憾,目前只能查看可以通行的路線最短距離。</p><p>  測試數據及測試結果:</p><p>  這是我用畫圖工具畫出的鐵路網信息圖(圓圈表示站點代碼)</p><p><b>  添加鐵路線信息:<

64、/b></p><p><b>  所有鐵路線信息:</b></p><p><b>  添加站點信息:</b></p><p><b>  查詢某站信息:</b></p><p><b>  所有站點信息:</b></p><p

65、>  查找兩點間的最短距離和經過的站點:</p><p>  題目8:學生成績管理系統</p><p><b>  需求分析:</b></p><p>  學生成績管理是高等學校教務管理的重要組成部分,主要包括學生注冊、考試成績的錄入及修改、成績的統計分析等等。設計一個系統實現對學生成績的管理。</p><p> 

66、 要求系統應具有以下基本功能:</p><p>  (1)學生注冊登記;</p><p>  (2)增加、刪除某一班級的學生;</p><p> ?。?)成績錄入:輸入學生的考試成績;</p><p>  要求采用二叉排序樹存放學生成績,一門課程對應一棵二叉排序樹;</p><p>  (4)成績修改:若輸入錯誤可進行

67、修改;</p><p> ?。?)統計分析:對某個班級學生的單科成績進行統計,求出平均成績;求出成績處于指定分數段內的學生人數;求出每個學生一學期各科的平均成績等;</p><p> ?。?)查找:查找某個學生的某門課程成績,查找某門課程成績處于指定分數段內的學生名單等等。</p><p> ?。?)打印:打印一個班級學生的單科成績;打印某一課程成績處于指定分數段內

68、的學生名單;打印學生在某一學期的成績報告單。</p><p><b>  設計</b></p><p><b>  1.設計思想:</b></p><p> ?。?)數據結構設計:</p><p>  該系統采用鏈表存儲所有學生信息,每個節(jié)點表示一個學生信息,包括學生的姓名,班級,學號(唯一),成績

69、。其中成績用采用鏈表存儲,可以動態(tài)添加科目及該學生該科目的成績。</p><p><b>  鏈表結構體如下:</b></p><p>  typedef struct </p><p><b>  {</b></p><p>  char subjectname[

70、MAX]; //科目名稱</p><p>  int sorce; //分數</p><p>  }DataTypeSub; </p><p>  typedef struct node3</p><p><b>  {</b><

71、;/p><p>  DataTypeSub data;</p><p>  struct node3 *next;</p><p>  }Subject; //學生科目和成績的鏈表</p><p>  typedef struct</p><p><b>  {<

72、;/b></p><p>  Subject *subject; </p><p>  }Grade; //科目成績</p><p>  typedef struct</p><p><b>  {</b></p><p&

73、gt;  int sID; //學號</p><p>  char name[MAX]; //姓名</p><p>  int cls; //班級</p><p>  Grade grade; //成績</p><p>

74、  }DataType; //學生信息</p><p>  typedef struct node </p><p><b>  {</b></p><p>  DataType data;</p><p>  struct node *next; &

75、lt;/p><p>  }SLNode; //學生信息管理鏈表節(jié)點</p><p>  成績采用二叉排序樹,一科成績對應一科排序二叉樹,但是由于科目可以動態(tài)添加,所以我只用了一科樹,要查看某科目的排序情況,需要輸入科目名稱,從鏈表中取出該科目的成績,并排出二叉排序樹,要查看下一刻目,再輸入科目名稱,再打印出來。</p>&l

76、t;p><b>  二叉樹結構體如下:</b></p><p>  typedef struct node2</p><p><b>  {</b></p><p><b>  int data;</b></p><p>  struct node2 *leftChild

77、;</p><p>  struct node2 *rightChild;</p><p>  }BiTreeNode;</p><p><b> ?。?)算法設計:</b></p><p>  該系統包括以下幾個模塊:</p><p>  注冊學生信息:根據輸入的學生學號,姓名,班級,將該學生查

78、詢鏈表末尾,其中學號是唯一的,若存在重復的會提示出錯誤。查詢所有學生信息:遍歷鏈表,并輸出信息</p><p>  刪除學生信息:根據提供的要刪除的學生學號,在鏈表中找到信息,并刪除節(jié)點。</p><p>  添加成績:提示用戶輸入學生學號,科目名稱,并將成績存入鏈表相關位置。</p><p>  修改成績:在鏈表中找到該學生的科目名稱,并修改成績。</p&g

79、t;<p>  打印某一個班級的單科成績:遍歷鏈表,找到班號,輸出全部學生成績。</p><p>  打印某一科目處于指定分數段的學生名單和數目:這里采用在鏈表中求名單的方法,不足之處就是沒有采用二叉樹前序遍歷。</p><p>  打印某一學生本學期的成績單及平均成績:在鏈表中找到相關學生的信息,并全部輸出,同時求出平均成績。</p><p>  查

80、找某一學生某一科目的成績:在鏈表中找到相關信息并輸出。</p><p>  將某一科目成績存入二叉排序樹并打?。哼@里是先將要打印的科目名稱寫出來,根據科目名稱,取出鏈表中的全部成績,并排序,最后打印出來。</p><p><b>  2.設計表示: </b></p><p> ?。?)函數調用關系圖:</p><p> 

81、 (2)函數接口規(guī)格說明:</p><p><b>  相關頭文件:</b></p><p>  #include "Student.h" //學生相關信息</p><p>  #include "Grade.h" //成績相關信息</p><p>  #include &

82、quot;Print.h" //要輸出的相關函數</p><p>  #include "Tree.h" //二叉排序樹并打印相關函數</p><p>  void SLNodeInit(SLNode **head) //初始化學生信息鏈表</p><p>  void StudentAdd

83、(SLNode *head,int sid,char name[],int cls) //注冊學生信息</p><p>  void StudentPrint(SLNode *head) //顯示所有學生信息</p><p>  void StudentDelete(SLNode *head,int sid,int cls) //按學號查刪除某個班級的學生

84、</p><p>  void StudentSubject(SLNode *head,int sid,char subjectname[]) </p><p>  //查找某個學生某門科目的成績</p><p>  void SubjectInit(Subject **head) //成績信息鏈表初始化&l

85、t;/p><p>  void AddObjectGrade(SLNode *head,int sid,char subjectname[],int sorce) </p><p>  //添加某個學生某門課程的成績</p><p>  void ListGradeModify(SLNode *head,int sid,char subjectname[],i

86、nt newsorce) </p><p>  //把鏈表中的學生成績修改成新數據</p><p>  void ClassSubject(SLNode *head,int cls,char subjectname[]) </p><p>  //打印某個班級某科目的成績和平均成績</p><p>  void BetweenGrade(

87、SLNode *head,char subjectname[],int low,int high) </p><p>  //某科目處于指定分數段的人數</p><p>  void StudentGrade(SLNode *head,int sid) //打印某個學生的成績單和平均成績</p><p>  void BiTreeNodeInit(Bi

88、TreeNode **root) //初始化樹節(jié)點</p><p>  void BiTreeSort(BiTreeNode **root,int sorce) //二叉排序樹算法</p><p>  void GradeTree(SLNode *head,BiTreeNode *root,char subjectname[]

89、) </p><p>  //把某門課程存入排序二叉樹中</p><p>  void PrintGradeBiTree(BiTreeNode *root,int n//以二叉樹形式打印存入成績的科目</p><p><b>  3詳細設計:</b></p><p>  該系統采用鏈表存儲所有學生信息,每個節(jié)點

90、表示一個學生信息,包括學生的姓名,班級,學號(唯一),成績。其中成績用采用鏈表存儲,可以動態(tài)添加科目及該學生該科目的成績。成績采用二叉排序樹,一科成績對應一科排序二叉樹,但是由于科目可以動態(tài)添加,所以我只用了一科樹,要查看某科目的排序情況,需要輸入科目名稱,從鏈表中取出該科目的成績,并排出二叉排序樹,要查看下一刻目,再輸入科目名稱,再打印出來。</p><p><b>  4調試分析:</b>

91、;</p><p>  之前寫程序只是固定的使用某些科目,但是后來才發(fā)現這樣不可以動態(tài)添加,所以后來在鏈表中又動態(tài)添加了一個鏈表,用于存儲科目信息及該同學所有科目的成績。</p><p>  將科目成績排成二叉樹,前序遍歷就是從低到高的成績,改算法反復推敲課本才終于明白其意思。</p><p>  查找處于某分數段的同學信息,是在鏈表中搜索信息,沒有先排成二叉樹,在

92、遍歷后找相應區(qū)間。</p><p><b>  5用戶手冊:</b></p><p>  添加信息注意數據的格式和數量,否則程序運行會出錯,最好用文檔保存下來,再復制。</p><p>  注冊學生信息只能一個一個的注冊,且不能重復使用同一個學號</p><p>  添加成績要提供正確的科目名稱,科目是動態(tài)添加,若輸入錯

93、誤,就是另外一科目的成績。</p><p>  要以排序二叉樹形式打印科目,需要先提供科目名稱,并調用函數將成績取出排成二叉樹,才能打印,一次只能打印一科成績,這是為了可以動態(tài)查看,而不是每一科目成績都事先準備好一棵二叉樹。</p><p><b>  測試數據及測試結果</b></p><p><b>  注冊學生信息:</b

94、></p><p><b>  查詢全部學生信息:</b></p><p><b>  添加學生成績:</b></p><p>  將成績以排序二叉樹打印出來:</p><p>  打印某個班級某科目成績:</p><p>  查找處于指定分數段的學生信息:</p

95、><p>  查找某學生本學期的成績:</p><p><b>  個人總結</b></p><p>  實習時間是安排在7月初考完試,老師在大概6月20左右就把題目給我們,那幾天剛好沒有上課,也怕到實習的時候做不完,所以就先做起來了。也沒多想,就從第一題開始做起。但是開始下筆才發(fā)現問題重重,加之文檔沒有完全說明其要求的功能,還好我們幾個一起探討了

96、一下數據的結構安排,第一個題是在一群人的探討摸索中慢慢寫出來的,當然,漏洞也比較多。還有就是我們幾個總是想著,這個應該不會要求這么高吧,比如那倉位等級的問題,當初也考慮到要不要分開,包括余票量,價格等等。但是我們自我安慰說,這樣分也太麻煩了吧,老師不會這么要求的,并且我們也真就沒有完善這些功能,但是后來真正交報告的時候,我們才知道我們的想法很幼稚,這些功能是必須要完成的。導致的后果就是后來改程序比寫程序麻煩多多了。</p>

97、<p>  第一個題花了大概三四天,那幾天一天到晚在調試,其實寫到后面才知道這是最簡單的一個,但還是花了好長時間,收獲也不少其實。這些代碼一通百通,寫完一個,后面的就方便好多了。還有就是寫出一個功能函數就把它調試好,否則后面bug越積越多,改起來很頭疼。第一個寫完,他們就沒有寫了,我沒辦法,自己一個人寫,沒人跟我討論,只能憑自己的想法寫,但是明星感覺到沒有第一個那樣寫起來困難了。功能也比前面一個有所改進和完善。第三個是寫的鐵

98、路系統,這個涉及到圖,寫起來比較麻煩,所以放在了最后,就一個站點信息的存儲,花了我好長時間,我是用鄰接表存儲,每插入一個節(jié)點就將他相鄰的節(jié)點插進去。但是后來才發(fā)現,其實貌似使用鄰接矩陣存儲更方便點,兩點間的權值也就是一樣的,相當于有權無向圖。后面用深度優(yōu)先遍歷和弗洛伊德算法也比較方便。同時,一個人思維比較容易受限,一直沒有找到方法怎么把客貨運情況分開,后來驗收程序老師跟我說應該把鄰接表導出二維矩陣時分成客運和貨運情況。感覺恍然大悟,但是

99、后來要改這程序已經比較困難了。</p><p>  寫完三個程序花了一周時間,依然記得剛寫完程序的喜悅和如釋重負的感覺,真的是腰酸背痛,全身乏力啊。雖然后來驗收才發(fā)現程序有一些漏洞,但還是挺高興的,畢竟這是自己寫的,基本運行沒有什么問題。后來到真正實習時間時,剛考完試,明顯感覺有心無力,沒有好好靜下心來改程序。給老師驗收時,老師給了我好多修改程序的建議,后來改了一部分,但是真心覺得修改程序比寫更難,所以也沒有改到

100、很完美。</p><p>  總之,真正的去寫,去思考,真的感覺收獲不少。其中一些收獲如下:</p><p>  寫之前一定要考慮到所有的數據情況,不能抱有“僥幸”心理,最后不符合要求,要修改更麻煩。</p><p>  一定完成所有功能,雖然有些要求苛刻,但是總有解決的算法。盡量做到代碼功能強悍和可擴展。</p><p>  分模塊寫,寫好

101、一個模塊,就調試好沒有bug再寫下一個,不僅有一定的收獲感,還不至于后面調試很多的錯誤。</p><p>  盡量自己先思考,不然容易受別人思想的禁錮,最后實在無路可走,就該跟別人交流,這時別人的建議會讓你“茅塞頓開”。</p><p>  堅持。寫程序是枯燥的,調試更是無聊,但是最后的收獲感,成就感應該讓我們更有決心堅持把程序寫完美。</p><p><b&

溫馨提示

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

評論

0/150

提交評論