版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p><b> 目錄</b></p><p> 1.航班信息管理系統(tǒng)………………3</p><p> 2.鐵路線最佳經(jīng)由問題……………11</p><p> 3.學(xué)生信息管理系統(tǒng)………………20</p><p> 4.個人實習(xí)總結(jié)……
2、………………30</p><p> 題目1:航空訂票系統(tǒng)</p><p><b> 需求分析:</b></p><p> 設(shè)計一個航空訂票系統(tǒng),基本要求如下:</p><p> 每條航班所涉及的信息有:航班號,航班機型,起飛機場,降落機場,日期(星期幾),起飛時間,降落時間,飛行時長,價格,乘員定額,余票量,訂定
3、票的客戶名單(包括姓名,訂票量,艙位等級(頭等艙、公務(wù)艙、經(jīng)濟(jì)倉)以及等候替補的客戶名單(包括姓名、所需數(shù)量)。采用鏈?zhǔn)酱鎯Y(jié)構(gòu)。</p><p> 系統(tǒng)能實現(xiàn)的操作和功能如下:</p><p> ?。?)航班信息管理。</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è)務(wù):根據(jù)客戶提出的要求(航班號,訂票數(shù)額)查詢該航班票額情況,若有余票,則為客戶辦理訂票手續(xù),輸出座位號;若已滿員或余票少于訂票額,則需重新詢問客戶要求。若需要,可登記排隊候補。</p><p> ?。?)承辦退票業(yè)務(wù):根據(jù)客戶提出的情況(日期,航班號),為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候
6、補,首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其它排隊候補的客戶。</p><p><b> 設(shè)計</b></p><p><b> 設(shè)計思想:</b></p><p> (1)數(shù)據(jù)結(jié)構(gòu)設(shè)計:</p><p><b> a.航班信息:<
7、/b></p><p> 該系統(tǒng)采用動態(tài)鏈表存儲航班信息,每個節(jié)點表示一趟航班的基本信息(航班號,航班機型,起飛機場,降落機場,日期(星期幾),起飛時間,降落時間,飛行時長,價格,乘員定額,余票量),還包括購買該趟航班的客戶信息</p><p> (包括姓名,訂票量,艙位等級(頭等艙、公務(wù)艙、經(jīng)濟(jì)倉),鏈表結(jié)構(gòu)體如下:</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; //標(biāo)記是否被買</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、買該趟航班的客戶數(shù)量</p><p> }DataType; //航班數(shù)據(jù)類型</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.候補隊列結(jié)構(gòu)體:</p><p> 候補隊列沒有采用隊列,而是采用鏈表,只是添加數(shù)據(jù)時在末尾添加,刪除數(shù)據(jù)在首部添加。</
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> 算法設(shè)計</b></p><p> 該系統(tǒng)包含五項基本功能:添加航班,查找航班,刪除航班,訂票,退票。</p><p> 添加航班:輸入航班基本信息,申請
19、空間,將客戶信息插入鏈表結(jié)尾。</p><p> 刪除航班:根據(jù)輸入的航班號在鏈表里搜索,找到后將該節(jié)點刪除。</p><p> 查找航班:包括按航班號查詢,按起點站、終點站查詢,按日期查詢。算法均 類似,在鏈表里搜索查詢條件,并將航班信息輸出,如果搜索到表尾均沒有,表示沒有該趟航班信息。</p><p>
20、訂票業(yè)務(wù):根據(jù)客戶輸入的航班號和訂票量,在航班信息表中搜素,沒有則提示錯誤,并返回。有則比較航班的余票量是否滿足客戶的需求,滿足則為該客戶訂票,將該客戶信息存入該趟航班節(jié)點中,并檢索座位號信息是否被訂過,將沒有被訂的座位號輸出,并將該客戶的余票量改變。若不滿足客戶需求,詢問客戶是否需要進(jìn)入候補隊列等待買票,客戶需要則將該客戶的信息存入候補隊列中,有客戶退票并滿足即可訂票,不需要就返回。</p><p> 退票業(yè)
21、務(wù):先提示客戶輸入航班號和名稱,在航班信息里搜索,檢查客戶輸入的信息是否正確(該客戶是否存在,該客戶退的票數(shù)是否比定的票數(shù)少或者相等),輸入錯誤就提示并輸出,輸入正確,若輸入的票數(shù)和客戶訂購的票數(shù)相等,則將該客戶的信息從鏈表中刪除,并將該客戶的座位號退回去(將該趟航班的這幾個座位號標(biāo)識記為未定),將訂購該趟航班的客戶數(shù)量加一;若輸入的票數(shù)比客戶訂購的票數(shù)少,則將該客戶后面部分的票退回去,并將該趟航班的余票量減少,最后將該客戶訂購的票數(shù)減
22、少。退票就完成了。 然后檢索候補隊列的信息,依次詢問客戶是否需要訂票,若滿足則訂票,不滿足就詢問下一個。</p><p> 最后添加了一點打印功能,可以將購買某趟航班的客戶信息打印出來,以及打印候補隊列客戶信息,方便隨時查詢內(nèi)存情況。</p><p><b> 設(shè)計表示:</b></p><p> ?。?)函數(shù)調(diào)用關(guān)系圖:</p&
23、gt;<p><b> 函數(shù)接口規(guī)格說明:</b></p><p> void SLNodeInit(SLNode **head) //鏈?zhǔn)奖?存儲航班信息</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> //按照航班號和票數(shù)在鏈表里查找</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> 詳細(xì)設(shè)計:</b>
32、</p><p><b> ?。?).調(diào)試分析:</b></p><p> a.首先寫程序我沒有把客戶信息保存下來,而是單獨用一個鏈表保存,后來寫到后面遇到瓶頸,又改為每趟航班都保存客戶信息。</p><p> b.退票業(yè)務(wù)沒有根據(jù)客戶姓名退票,在老師的指點下,退票將客戶信息與鏈表中的客戶信息對比,輸入沒有錯誤才可以退票。</p>
33、;<p> c.座位號是后來老師指點下設(shè)置標(biāo)記為存起來,每次訂票和退票都修改標(biāo)志位,這樣座位號才是聯(lián)系起來的。</p><p><b> ?。?).用戶手冊:</b></p><p> a. 按照提示輸入數(shù)據(jù),一定注意數(shù)據(jù)的格式和數(shù)據(jù)的個數(shù)。</p><p> b. 輸入數(shù)據(jù)最好先保存在文檔中,再復(fù)制,不然輸入錯誤一個肯能導(dǎo)
34、致程序運行錯誤。</p><p> (3).測試數(shù)據(jù)及測試結(jié)果:</p><p> 添加的兩趟航班信息:</p><p> 按航班號查詢航班信息:</p><p><b> 訂票業(yè)務(wù):</b></p><p><b> 查詢候補客戶信息:</b></p>
35、<p> 退票后為候補客戶訂票</p><p><b> 查詢購票客戶信息:</b></p><p> 題目5:鐵路網(wǎng)最佳經(jīng)由問題</p><p><b> 需求分析</b></p><p> 鐵路運輸網(wǎng)絡(luò)中有鐵路線和火車站兩個主要概念,譬如:1號鐵路線表示京廣線,2號鐵路線
36、表示京滬線等。</p><p> 鐵路線對象包括鐵路線編號、鐵路線名稱、起始站編號、終點站編號、該鐵路線長度、通行標(biāo)志(00B客貨運禁行,01B貨運通行專線,10B客運通行專線,11B客貨運通行)。</p><p> 火車站對象包括所屬鐵路線編號、車站代碼、車站名、車站簡稱、離該鐵路線起點站路程及終點站路程。</p><p><b> 要求:<
37、/b></p><p> (1)查詢某站所屬的鐵路線。</p><p> (2)要求具備新增鐵路線的管理功能。</p><p> ?。?)要求具備新增車站的管理功能。</p><p> ?。?)針對客運、貨運情況能計算任何一個起始車站到任何一個終點站之間的最短路徑。并且要求能夠顯示出該最短路徑的各個火車站的經(jīng)由順序。</p&g
38、t;<p> ?。?)能輸出全部線路及沿途站點。</p><p><b> 二.設(shè)計</b></p><p><b> 1.設(shè)計思想:</b></p><p> ?。?)數(shù)據(jù)結(jié)構(gòu)設(shè)計:</p><p> 鐵路線采用動態(tài)鏈表存儲,包括鐵路線編號、鐵路線名稱、起始站編號、終點站編號、
39、該鐵路線長度、通行標(biāo)志(00B客貨運禁行,01B貨運通行專線,10B客運通行專線,11B客貨運通行)</p><p><b> 結(jié)構(gòu)體如下:</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]; //通行標(biāo)志</p><p> }DataType; //鐵路線數(shù)據(jù)</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é)點包括該站點的站點代碼和距離上一個站點的距離,結(jié)構(gòu)體如下:</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; //站點所屬的鐵路線數(shù)量</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、/記錄它在數(shù)組的第幾個位置,方便深度優(yōu)先算法用</p><p> Edge *adj; //鄰接邊頭指針</p><p> }SDataType; //站點數(shù)據(jù)</p><p> typedef struct</p><p><b> {</b></p
48、><p> SDataType data[MAX]; //每個站點的數(shù)據(jù) </p><p> int count; //記錄站點個數(shù)</p><p> }GNode; //圖節(jié)點</p><p><
49、;b> (2)算法設(shè)計:</b></p><p> 該系統(tǒng)采用動態(tài)鏈表存儲所有鐵路線信息,但是包括的站點只是起點站和終點站,以及該鐵路線所有其他信息,鐵路線所以站點(包括起點站和終點站)單獨采用圖的鄰接表存儲。</p><p> 系統(tǒng)包括項功能:添加鐵路線,查看鐵路線,添加站點,顯示全部站點信息及沿途站點,找到任意兩點間的最短距離。</p><p
50、> 添加鐵路線:根據(jù)輸入的鐵路線信息,檢查這兩個站點是否已經(jīng)存在,若不存在,申請內(nèi)存,將數(shù)據(jù)存入并插入到鏈表的末尾。并將兩個站點所屬的鐵路線加入所屬鐵路線數(shù)組中,所屬鐵路線數(shù)量遞增。若存在,則只添加該站點所屬的鐵路線,并修改鄰接表的相關(guān)信息。</p><p> 查詢鐵路線:在鏈表中一次循環(huán),將鐵路線信息輸出,鏈表為空則提示錯誤。</p><p> 添加站點:輸入站點所屬的鐵路線
51、,站點信息,上一站代碼,距離上一站點的距離,下一站代碼,距離下一站點的距離。先查看是否存在該站點,存在則只修改所屬的鐵路線,并修改鄰接表的相關(guān)信息。</p><p> 顯示全部鐵路線及沿途站點:在鐵路線鏈表中依次搜索鐵路線信息,并在站點中搜尋,若屬于該鐵路線就輸出這個站點的信息,當(dāng)搜索到表尾時,就可以輸出全部鐵路線信息,同時該系統(tǒng)還采用圖的深度優(yōu)先遍歷算法輸出全部站點信息。</p><p&g
52、t; 找到任意兩點間的距離:題目要求按照鐵路通行情況找到任意兩點間的距離,但是我只是采用弗洛伊德算法找到任意兩點間的最短距離,后來經(jīng)老師指點可以將全部站點導(dǎo)出各種通行情況,再用弗洛伊德算法,但是由于時間較短,還沒有弄出最終結(jié)果,目前只能實現(xiàn)尋找任意兩點間的最短距離及經(jīng)過的沿途站點。</p><p><b> 2.設(shè)計表示:</b></p><p> ?。?).函數(shù)
53、關(guān)系調(diào)用圖:</p><p> (2).函數(shù)接口說明:</p><p> #include "Graph.h" //站點相關(guān)信息</p><p> #include "SLNode.h" //鐵路線相關(guān)信息</p><p> #include "Pri
54、nt.h" //輸出相關(guān)信息</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> 詳細(xì)設(shè)計:</b></p><p> 采用動態(tài)鏈表存儲所有鐵路線信息,但是包括的站點只是起點站和終點站,以及該鐵路</p><p> 線所有其他信息,鐵路線所以站點(包括起點站和終點站)單獨采用圖的鄰接表存儲。系統(tǒng)包括項功能:添加鐵路線,查看鐵路線,添加站點,顯示全部站點信息及沿途站點,找到任意兩點間
60、的最短距離。采用弗洛伊德算法找到任意兩點間的最短距離,后來經(jīng)老師指點可以將全部站點導(dǎo)出各種通行情況,再用弗洛伊德算法,但是由于時間較短,還沒有弄出最終結(jié)果,目前只能實現(xiàn)尋找任意兩點間的最短距離及經(jīng)過的沿途站點。</p><p><b> 調(diào)試分析:</b></p><p> 添加站點信息比較麻煩一點,因為可能要添加的站點已經(jīng)存在,先要搜索站點,沒有則添加,即使有了
61、,還要添加站點所屬的鐵路線信息。并且根據(jù)站點相鄰的站點,要將整個圖串聯(lián)起來,還要算出各個站點間的距離。</p><p> b. 求兩點間的距離采用弗洛伊德算法,但是我存儲數(shù)據(jù)用了鄰接表存儲,沒有找到相應(yīng)的站點編號,后來在每個新加入的站點中添加編號,根據(jù)編號導(dǎo)出二維數(shù)組,才能采用弗洛伊德算法求解。</p><p> c. 根據(jù)弗洛伊德算法求出path路徑后,我不知道怎么輸出所經(jīng)過的站
62、點,在網(wǎng)上搜索各種方法,終于找到一種方法可行,就是要遞歸調(diào)用path,最終才得到正確的答案。</p><p><b> 用戶手冊:</b></p><p> a.添加信息注意數(shù)據(jù)的格式和數(shù)量,否則程序運行會出錯,最好用文檔保存下來,再復(fù)制。</p><p> b.添加站點信息,需要提供所屬的鐵路線,它的上一個站點信息,距離上一站的距離,還
63、要輸入它下一個站點的站點信息和距離下一個站點的距離。</p><p> c.查找最短距離,還沒有分客貨運情況,有一點小遺憾,目前只能查看可以通行的路線最短距離。</p><p> 測試數(shù)據(jù)及測試結(jié)果:</p><p> 這是我用畫圖工具畫出的鐵路網(wǎng)信息圖(圓圈表示站點代碼)</p><p><b> 添加鐵路線信息:<
64、/b></p><p><b> 所有鐵路線信息:</b></p><p><b> 添加站點信息:</b></p><p><b> 查詢某站信息:</b></p><p><b> 所有站點信息:</b></p><p
65、> 查找兩點間的最短距離和經(jīng)過的站點:</p><p> 題目8:學(xué)生成績管理系統(tǒng)</p><p><b> 需求分析:</b></p><p> 學(xué)生成績管理是高等學(xué)校教務(wù)管理的重要組成部分,主要包括學(xué)生注冊、考試成績的錄入及修改、成績的統(tǒng)計分析等等。設(shè)計一個系統(tǒng)實現(xiàn)對學(xué)生成績的管理。</p><p>
66、 要求系統(tǒng)應(yīng)具有以下基本功能:</p><p> ?。?)學(xué)生注冊登記;</p><p> ?。?)增加、刪除某一班級的學(xué)生;</p><p> ?。?)成績錄入:輸入學(xué)生的考試成績;</p><p> 要求采用二叉排序樹存放學(xué)生成績,一門課程對應(yīng)一棵二叉排序樹;</p><p> ?。?)成績修改:若輸入錯誤可進(jìn)行
67、修改;</p><p> ?。?)統(tǒng)計分析:對某個班級學(xué)生的單科成績進(jìn)行統(tǒng)計,求出平均成績;求出成績處于指定分?jǐn)?shù)段內(nèi)的學(xué)生人數(shù);求出每個學(xué)生一學(xué)期各科的平均成績等;</p><p> ?。?)查找:查找某個學(xué)生的某門課程成績,查找某門課程成績處于指定分?jǐn)?shù)段內(nèi)的學(xué)生名單等等。</p><p> ?。?)打印:打印一個班級學(xué)生的單科成績;打印某一課程成績處于指定分?jǐn)?shù)段內(nèi)
68、的學(xué)生名單;打印學(xué)生在某一學(xué)期的成績報告單。</p><p><b> 設(shè)計</b></p><p><b> 1.設(shè)計思想:</b></p><p> ?。?)數(shù)據(jù)結(jié)構(gòu)設(shè)計:</p><p> 該系統(tǒng)采用鏈表存儲所有學(xué)生信息,每個節(jié)點表示一個學(xué)生信息,包括學(xué)生的姓名,班級,學(xué)號(唯一),成績
69、。其中成績用采用鏈表存儲,可以動態(tài)添加科目及該學(xué)生該科目的成績。</p><p><b> 鏈表結(jié)構(gòu)體如下:</b></p><p> typedef struct </p><p><b> {</b></p><p> char subjectname[
70、MAX]; //科目名稱</p><p> int sorce; //分?jǐn)?shù)</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; //學(xué)生科目和成績的鏈表</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; //學(xué)號</p><p> char name[MAX]; //姓名</p><p> int cls; //班級</p><p> Grade grade; //成績</p><p>
74、 }DataType; //學(xué)生信息</p><p> typedef struct node </p><p><b> {</b></p><p> DataType data;</p><p> struct node *next; &
75、lt;/p><p> }SLNode; //學(xué)生信息管理鏈表節(jié)點</p><p> 成績采用二叉排序樹,一科成績對應(yīng)一科排序二叉樹,但是由于科目可以動態(tài)添加,所以我只用了一科樹,要查看某科目的排序情況,需要輸入科目名稱,從鏈表中取出該科目的成績,并排出二叉排序樹,要查看下一刻目,再輸入科目名稱,再打印出來。</p>&l
76、t;p><b> 二叉樹結(jié)構(gòu)體如下:</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> (2)算法設(shè)計:</b></p><p> 該系統(tǒng)包括以下幾個模塊:</p><p> 注冊學(xué)生信息:根據(jù)輸入的學(xué)生學(xué)號,姓名,班級,將該學(xué)生查
78、詢鏈表末尾,其中學(xué)號是唯一的,若存在重復(fù)的會提示出錯誤。查詢所有學(xué)生信息:遍歷鏈表,并輸出信息</p><p> 刪除學(xué)生信息:根據(jù)提供的要刪除的學(xué)生學(xué)號,在鏈表中找到信息,并刪除節(jié)點。</p><p> 添加成績:提示用戶輸入學(xué)生學(xué)號,科目名稱,并將成績存入鏈表相關(guān)位置。</p><p> 修改成績:在鏈表中找到該學(xué)生的科目名稱,并修改成績。</p&g
79、t;<p> 打印某一個班級的單科成績:遍歷鏈表,找到班號,輸出全部學(xué)生成績。</p><p> 打印某一科目處于指定分?jǐn)?shù)段的學(xué)生名單和數(shù)目:這里采用在鏈表中求名單的方法,不足之處就是沒有采用二叉樹前序遍歷。</p><p> 打印某一學(xué)生本學(xué)期的成績單及平均成績:在鏈表中找到相關(guān)學(xué)生的信息,并全部輸出,同時求出平均成績。</p><p> 查
80、找某一學(xué)生某一科目的成績:在鏈表中找到相關(guān)信息并輸出。</p><p> 將某一科目成績存入二叉排序樹并打?。哼@里是先將要打印的科目名稱寫出來,根據(jù)科目名稱,取出鏈表中的全部成績,并排序,最后打印出來。</p><p><b> 2.設(shè)計表示: </b></p><p> ?。?)函數(shù)調(diào)用關(guān)系圖:</p><p>
81、?。?)函數(shù)接口規(guī)格說明:</p><p><b> 相關(guān)頭文件:</b></p><p> #include "Student.h" //學(xué)生相關(guān)信息</p><p> #include "Grade.h" //成績相關(guān)信息</p><p> #include &
82、quot;Print.h" //要輸出的相關(guān)函數(shù)</p><p> #include "Tree.h" //二叉排序樹并打印相關(guān)函數(shù)</p><p> void SLNodeInit(SLNode **head) //初始化學(xué)生信息鏈表</p><p> void StudentAdd
83、(SLNode *head,int sid,char name[],int cls) //注冊學(xué)生信息</p><p> void StudentPrint(SLNode *head) //顯示所有學(xué)生信息</p><p> void StudentDelete(SLNode *head,int sid,int cls) //按學(xué)號查刪除某個班級的學(xué)生
84、</p><p> void StudentSubject(SLNode *head,int sid,char subjectname[]) </p><p> //查找某個學(xué)生某門科目的成績</p><p> void SubjectInit(Subject **head) //成績信息鏈表初始化&l
85、t;/p><p> void AddObjectGrade(SLNode *head,int sid,char subjectname[],int sorce) </p><p> //添加某個學(xué)生某門課程的成績</p><p> void ListGradeModify(SLNode *head,int sid,char subjectname[],i
86、nt newsorce) </p><p> //把鏈表中的學(xué)生成績修改成新數(shù)據(jù)</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> //某科目處于指定分?jǐn)?shù)段的人數(shù)</p><p> void StudentGrade(SLNode *head,int sid) //打印某個學(xué)生的成績單和平均成績</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詳細(xì)設(shè)計:</b></p><p> 該系統(tǒng)采用鏈表存儲所有學(xué)生信息,每個節(jié)點
90、表示一個學(xué)生信息,包括學(xué)生的姓名,班級,學(xué)號(唯一),成績。其中成績用采用鏈表存儲,可以動態(tài)添加科目及該學(xué)生該科目的成績。成績采用二叉排序樹,一科成績對應(yīng)一科排序二叉樹,但是由于科目可以動態(tài)添加,所以我只用了一科樹,要查看某科目的排序情況,需要輸入科目名稱,從鏈表中取出該科目的成績,并排出二叉排序樹,要查看下一刻目,再輸入科目名稱,再打印出來。</p><p><b> 4調(diào)試分析:</b>
91、;</p><p> 之前寫程序只是固定的使用某些科目,但是后來才發(fā)現(xiàn)這樣不可以動態(tài)添加,所以后來在鏈表中又動態(tài)添加了一個鏈表,用于存儲科目信息及該同學(xué)所有科目的成績。</p><p> 將科目成績排成二叉樹,前序遍歷就是從低到高的成績,改算法反復(fù)推敲課本才終于明白其意思。</p><p> 查找處于某分?jǐn)?shù)段的同學(xué)信息,是在鏈表中搜索信息,沒有先排成二叉樹,在
92、遍歷后找相應(yīng)區(qū)間。</p><p><b> 5用戶手冊:</b></p><p> 添加信息注意數(shù)據(jù)的格式和數(shù)量,否則程序運行會出錯,最好用文檔保存下來,再復(fù)制。</p><p> 注冊學(xué)生信息只能一個一個的注冊,且不能重復(fù)使用同一個學(xué)號</p><p> 添加成績要提供正確的科目名稱,科目是動態(tài)添加,若輸入錯
93、誤,就是另外一科目的成績。</p><p> 要以排序二叉樹形式打印科目,需要先提供科目名稱,并調(diào)用函數(shù)將成績?nèi)〕雠懦啥鏄?,才能打印,一次只能打印一科成績,這是為了可以動態(tài)查看,而不是每一科目成績都事先準(zhǔn)備好一棵二叉樹。</p><p><b> 測試數(shù)據(jù)及測試結(jié)果</b></p><p><b> 注冊學(xué)生信息:</b
94、></p><p><b> 查詢?nèi)繉W(xué)生信息:</b></p><p><b> 添加學(xué)生成績:</b></p><p> 將成績以排序二叉樹打印出來:</p><p> 打印某個班級某科目成績:</p><p> 查找處于指定分?jǐn)?shù)段的學(xué)生信息:</p
95、><p> 查找某學(xué)生本學(xué)期的成績:</p><p><b> 個人總結(jié)</b></p><p> 實習(xí)時間是安排在7月初考完試,老師在大概6月20左右就把題目給我們,那幾天剛好沒有上課,也怕到實習(xí)的時候做不完,所以就先做起來了。也沒多想,就從第一題開始做起。但是開始下筆才發(fā)現(xiàn)問題重重,加之文檔沒有完全說明其要求的功能,還好我們幾個一起探討了
96、一下數(shù)據(jù)的結(jié)構(gòu)安排,第一個題是在一群人的探討摸索中慢慢寫出來的,當(dāng)然,漏洞也比較多。還有就是我們幾個總是想著,這個應(yīng)該不會要求這么高吧,比如那倉位等級的問題,當(dāng)初也考慮到要不要分開,包括余票量,價格等等。但是我們自我安慰說,這樣分也太麻煩了吧,老師不會這么要求的,并且我們也真就沒有完善這些功能,但是后來真正交報告的時候,我們才知道我們的想法很幼稚,這些功能是必須要完成的。導(dǎo)致的后果就是后來改程序比寫程序麻煩多多了。</p>
97、<p> 第一個題花了大概三四天,那幾天一天到晚在調(diào)試,其實寫到后面才知道這是最簡單的一個,但還是花了好長時間,收獲也不少其實。這些代碼一通百通,寫完一個,后面的就方便好多了。還有就是寫出一個功能函數(shù)就把它調(diào)試好,否則后面bug越積越多,改起來很頭疼。第一個寫完,他們就沒有寫了,我沒辦法,自己一個人寫,沒人跟我討論,只能憑自己的想法寫,但是明星感覺到?jīng)]有第一個那樣寫起來困難了。功能也比前面一個有所改進(jìn)和完善。第三個是寫的鐵
98、路系統(tǒng),這個涉及到圖,寫起來比較麻煩,所以放在了最后,就一個站點信息的存儲,花了我好長時間,我是用鄰接表存儲,每插入一個節(jié)點就將他相鄰的節(jié)點插進(jìn)去。但是后來才發(fā)現(xiàn),其實貌似使用鄰接矩陣存儲更方便點,兩點間的權(quán)值也就是一樣的,相當(dāng)于有權(quán)無向圖。后面用深度優(yōu)先遍歷和弗洛伊德算法也比較方便。同時,一個人思維比較容易受限,一直沒有找到方法怎么把客貨運情況分開,后來驗收程序老師跟我說應(yīng)該把鄰接表導(dǎo)出二維矩陣時分成客運和貨運情況。感覺恍然大悟,但是
99、后來要改這程序已經(jīng)比較困難了。</p><p> 寫完三個程序花了一周時間,依然記得剛寫完程序的喜悅和如釋重負(fù)的感覺,真的是腰酸背痛,全身乏力啊。雖然后來驗收才發(fā)現(xiàn)程序有一些漏洞,但還是挺高興的,畢竟這是自己寫的,基本運行沒有什么問題。后來到真正實習(xí)時間時,剛考完試,明顯感覺有心無力,沒有好好靜下心來改程序。給老師驗收時,老師給了我好多修改程序的建議,后來改了一部分,但是真心覺得修改程序比寫更難,所以也沒有改到
100、很完美。</p><p> 總之,真正的去寫,去思考,真的感覺收獲不少。其中一些收獲如下:</p><p> 寫之前一定要考慮到所有的數(shù)據(jù)情況,不能抱有“僥幸”心理,最后不符合要求,要修改更麻煩。</p><p> 一定完成所有功能,雖然有些要求苛刻,但是總有解決的算法。盡量做到代碼功能強悍和可擴展。</p><p> 分模塊寫,寫好
101、一個模塊,就調(diào)試好沒有bug再寫下一個,不僅有一定的收獲感,還不至于后面調(diào)試很多的錯誤。</p><p> 盡量自己先思考,不然容易受別人思想的禁錮,最后實在無路可走,就該跟別人交流,這時別人的建議會讓你“茅塞頓開”。</p><p> 堅持。寫程序是枯燥的,調(diào)試更是無聊,但是最后的收獲感,成就感應(yīng)該讓我們更有決心堅持把程序?qū)懲昝馈?lt;/p><p><b&
溫馨提示
- 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è)計報告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——課程設(shè)計報告模板
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (4)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實習(xí)報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (3)
評論
0/150
提交評論