數(shù)據(jù)結(jié)構(gòu)航班信息的管理實驗報告_第1頁
數(shù)據(jù)結(jié)構(gòu)航班信息的管理實驗報告_第2頁
數(shù)據(jù)結(jié)構(gòu)航班信息的管理實驗報告_第3頁
數(shù)據(jù)結(jié)構(gòu)航班信息的管理實驗報告_第4頁
數(shù)據(jù)結(jié)構(gòu)航班信息的管理實驗報告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 實驗課程: 航班信息系統(tǒng) 班 級: 軟件13301 組 長: XXXX 成 員:XXXX、XXXX、XXXXXX、XXXX 學(xué) 號:XXXXXXXXXX、1XXXXXXXXX、 1XXXXXXXXX、XXXXXXXXXX 指導(dǎo)教師: XXXXXXX 目錄一、概述:2二、系統(tǒng)分析:22.1 輸入/輸出形式和輸出值22.2 功能需求32.3 系統(tǒng)特點3三、概要設(shè)計:33.1 設(shè)計思路33.2 數(shù)據(jù)處理33.3 基本概念和數(shù)據(jù)處理43.4 數(shù)據(jù)流圖6四、詳細設(shè)計:74.1 設(shè)計說明74.2 算法設(shè)計與分析7二分查找74.3 算法實現(xiàn)8五、運行與測試:9六、總結(jié)與心得:11附錄:程序

2、代碼12一、 概述:設(shè)計一個航班信息查詢與檢索系統(tǒng)??墒孪劝匆箐浫牒桨嘈畔?、刪除航班信息、查看全部航班信息及按航班的航班號、起點站、終點站、起飛時間、以及到達時間等信息進行查詢。二、系統(tǒng)分析:2.1 輸入/輸出形式和輸出值進入系統(tǒng)后,首先按照要求輸入航班信息,包括:航班號、起點站、終點站、航班期、起飛時間、到達時間、票價。除票價為整型外,其他均為字符型。信息完成后均以Enter結(jié)束。當(dāng)輸入完一個航班信息后,會提示是否繼續(xù)輸入,若要繼續(xù)輸入則重復(fù)上述步驟,否顯示主菜單。根據(jù)主菜單輸入功能序號選擇,若用戶輸入的值超過給定范圍,則提示錯誤并要求重新輸入。2.2 功能需求(1)輸入航班信息(2)刪除

3、航班信息,可按航班號、起點站、終點站、起飛時間、到達時間等刪除(3)按不同類型查詢航班信息,如航班號、起點站、終點站、起飛時間、到達時間等(4)顯示當(dāng)前所有的航班記錄(5)退出系統(tǒng)2.3 系統(tǒng)特點本系統(tǒng)的使用者是航空公司,操作人員只需具備基本的計算機操作技巧即可。三、概要設(shè)計:3.1 設(shè)計思路根據(jù)設(shè)計要求,程序必須實現(xiàn)航班信息的錄入和查詢。程序首先定義了一個用于存儲航班信息的數(shù)據(jù)類型,再由用戶錄入航班數(shù)據(jù)路,在錄入的同時并對數(shù)據(jù)進行排序,最后執(zhí)行數(shù)據(jù)查詢和檢索。在設(shè)計過程中,使用二分查找法對航班數(shù)據(jù)按航班號實現(xiàn)快速查找,按起點站、終點站、起飛時間、到達時間查找。3.2 數(shù)據(jù)處理航班信息管理系統(tǒng)

4、退出顯示全部記錄查詢航班信息刪除航班信息錄入航班信息按終點站刪除查詢按起飛時間刪除查詢按到達時間刪除查詢按航班號刪除查詢按起點站刪除查詢3.3 基本概念和數(shù)據(jù)處理開始初始化信息主菜單顯示輸入查詢序號判斷序號是否合法按地點查詢按時間查詢按航班號查詢按票價查詢輸出航班信息結(jié)束3.4 數(shù)據(jù)流圖航班信息航班信息管理員業(yè)務(wù)處理用 戶查詢關(guān)鍵字四、詳細設(shè)計:4.1 設(shè)計說明1)利用起點站、終點站、起飛時間、到達時間為關(guān)鍵字來查詢航班信息。該查找算法使用最簡單的順序查找方法進行。即按照航班信息的結(jié)構(gòu)體數(shù)組依次與被查找信息進行比較,若找到,則輸出結(jié)構(gòu)即可,若沒找到,則輸出相關(guān)的提示信息。 2)利用航班號作為關(guān)

5、鍵字進行查詢由于設(shè)計內(nèi)容要求使用基數(shù)排序?qū)@組航班信息進行排序,并利用二分查找法對排好的航班記錄按航班號實現(xiàn)快速查找,因此此算法設(shè)計包括基數(shù)排序和二分查找。4.2 算法設(shè)計與分析基數(shù)排序基數(shù)排序是一種借助多關(guān)鍵字排序的思想對單邏輯關(guān)鍵字進行排序的方法,其是通過“分配”和“收集”兩種操作對相應(yīng)關(guān)鍵字進行排序。算法思路是按照排序關(guān)鍵字的每一位字符進行排序。排序前,先定義一個隊列數(shù)組,每個隊列數(shù)組與某個關(guān)鍵字位對應(yīng),某隊列中只能存放與該關(guān)鍵字位對應(yīng)的元素。首先先從關(guān)鍵字的最后一位字符進行判斷,根據(jù)關(guān)鍵字位,把這個元素放入相應(yīng)的隊列中去,這就是“分配”過程。等到所有元素均被分配到相應(yīng)隊列中之后,在把各

6、個隊列中的元素,按照隊列數(shù)組順序,依次重新放回原元素數(shù)組中,這就是“收集”過程。經(jīng)過“分配”和“收集”后,一次排序完成。接著再以關(guān)鍵字的倒數(shù)第二位字符作為關(guān)鍵字位進行上述排序過程,直到按照關(guān)鍵字的所有位全部進行排序過后,整個序列就成為有序序列,排序完成。二分查找二分查找是對有序序列進行快速查找的一種有效方法。它的基本思想是,每次都與這個有序序列的中間元素進行比較,若找到,則輸出元素信息,若沒找到,則判斷這個中間元素比待查找的元素大還是小,如果大,那么查找工作繼續(xù)在該有序序列的前半段進行;反之,則繼續(xù)查找該有序序列的后半段。如此一直查找,直到找到該元素或者查找到只剩下一個元素而這個元素與待查找元

7、素不相符時,查找結(jié)束。前一種情況找到了待查找元素,輸出該元素,后一種沒有找到,輸出相應(yīng)提示信息。4.3 算法實現(xiàn)1定義數(shù)據(jù)類型根據(jù)設(shè)計要求,所用到的數(shù)據(jù)記錄只有航班信息,因此要定義相關(guān)的數(shù)據(jù)類型。本系統(tǒng)采用鏈式存儲的存儲結(jié)構(gòu),分別定義三個結(jié)構(gòu)體。 typedef struct /定義航班信息的結(jié)構(gòu)體,靜態(tài)鏈表類型char terminal6; /定義起點站char end6; /定義終點站char flightNo10; /定義航班期char startTime5; /定義起飛時間char endTime5; /定義到達時間char type10; /定義機型int price; /定義票價i

8、nfotype;typedef structkeytype keyskeylen; /航班號,動態(tài)鏈表infotype others;int next;slnode;typedef struct/定義存儲信息的結(jié)構(gòu)體slnode slMAX;int keynum; /信息數(shù)量,最大表長int length; /信息長度,當(dāng)前表長sllist; /順序表類型2實現(xiàn)排序的各函數(shù)說明(1)顯示一條航班記錄函數(shù)void Display(SLList L,int i)(2)刪除記錄函數(shù)void del(SLList L, keytype key,int i)(3)顯示所有記錄函數(shù)void display

9、all(SLList L)(4)順序查找函數(shù)void SeqSearch(sllist l,keytype key,int i)(5)查詢檢索菜單void serachcon (sllist l)(6)錄入航班數(shù)據(jù)函數(shù)void InputData(sllist &l)(7)主函數(shù)void main()初始化;數(shù)據(jù)輸入;排序處理;接受查找要求及查找關(guān)鍵字;查找處理;輸出查找結(jié)果;五、運行與測試:1、錄入航班信息 2、刪除航班信息3、按起點站查詢航班4、按終點站查詢航班及顯示全部航班信息5、退出航班信息與檢索系統(tǒng)六、總結(jié):XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

10、XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX! XXXX附錄:程序代碼#include <stdio.h>#include <string.h>#include <stdlib.h>struct SLNode char start10; /起點 char end 10;/終點 char sche10;/班期 char time16;/起飛時間 char time26;/到達時間 char model4;/機型 int price;/票價 char

11、keys6; /關(guān)鍵字(航班號);/航班記錄類型/靜態(tài)鏈表節(jié)點類型typedef struct SLNode *sl;/動態(tài)鏈表 int listsize;/最大表長 int length;/當(dāng)前表長SLList;/順序表類型/顯示一條航班記錄函數(shù)void Display(SLList L,int i) printf("航班號 起點站 終點站 航班期 起飛時間 到達時間 機型 票價n"); printf("%6s%6s %6s %6s %6s %6s %4s %dn",L.sli.keys,L.sli.start,L.sli.end,L.sli.sche

12、,L.sli.time1,L.sli.time2,L.sli.model,L.sli.price);/順序查找函數(shù)void SeqSearch(SLList L,char key,int i) int k,j,m=0; for(j=1;j<=L.length;j+) switch(i) case 1: k=strcmp(key,L.slj.keys); break; case 2: k=strcmp(key,L.slj.start); break;/起點站 case 3: k=strcmp(key,L.slj.end); break;/終點站 case 4: k=strcmp(key,L

13、.slj.time1); break;/起飛時間 case 5: k=strcmp(key,L.slj.time2); break;/到達時間 if(k=0) m=1; Display(L,j); if(m=0) printf("無此航班信息,您可能輸入錯誤!n"); void del(SLList &L,char key,int i) int k,j,m=0;char ch; for(j=1;j<=L.length;j+) switch(i) case 1: k=strcmp(key,L.slj.keys); break; case 2: k=strcmp(

14、key,L.slj.start);break;/起點站 case 3: k=strcmp(key,L.slj.end);break;/終點站 case 4: k=strcmp(key,L.slj.time1);break;/起飛時間 case 5: k=strcmp(key,L.slj.time2);break;/到達時間 if(k=0) m=1; Display(L,j); printf("是否刪除此記錄?Y/N:"); scanf("%c",&ch); getchar(); if(ch='Y'|ch='y')

15、strcpy(L.slj.keys,L.slL.length.keys); strcpy(L.slj.end,L.slL.length.end); strcpy(L.slj.model,L.slL.length.model); L.slj.price=L.slL.length.price; strcpy(L.slj.sche,L.slL.length.sche); strcpy(L.slj.start,L.slL.length.start); strcpy(L.slj.time1,L.slL.length.time1); strcpy(L.slj.time2,L.slL.length.time

16、2); L.length = L.length-1; printf("刪除成功!n"); if(m=0) printf("無此航班信息,您可能輸入錯誤!n"); /查詢檢索菜單控制程序void serachcon(SLList L) int i=1; char key10,kl8; while(1) printf("*n"); printf("* 航班信息查詢系統(tǒng) *n"); printf("*n"); printf("* 1.航 班 號 *n"); printf("

17、;* 2.起 點 站 *n"); printf("* 3.終 點 站 *n"); printf("* 4.起飛時間 *n"); printf("* 5.到達時間 *n"); printf("* 0.返 回 *n"); printf("*n"); printf("* 請輸入(0-5):"); scanf("%d",&i); getchar(); if(i>=0 && i<=5) switch(i) case 1

18、: printf("請輸入要查詢的航班號(字母要大寫):"); scanf("%s",key); getchar(); SeqSearch(L,key,i); break; case 2 : printf("請輸入要查詢的航班的起始站名:"); scanf("%s",key); getchar(); SeqSearch(L,key,i); break; case 3 : printf("請輸入要查詢的航班的終點站名:"); scanf("%s",key); getchar()

19、; SeqSearch(L,key,i); break; case 4 : printf("請輸入要查詢的航班的起飛時間:"); scanf("%s",kl); getchar(); SeqSearch(L,kl,i); break; case 5 : printf("請輸入要查詢的航班的到達時間:"); scanf("%s",kl); getchar(); SeqSearch(L,kl,i); break; case 0 : return ; else printf("您輸入的信息錯誤!n")

20、; /輸入航班記錄函數(shù)void InputData(SLList &L) int i;char yn='y'while(yn='y'|yn='Y') if(L.listsize<=L.length) SLNode *newbase; newbase = (SLNode *)realloc(L.sl,(L.listsize+100)*sizeof(SLNode); if(!newbase) printf("存儲分配失敗"); return; /存儲分配失敗 L.sl = newbase; /新基址 L.listsi

21、ze += 100; /增加存儲容量 i=+L.length; printf("航班號 起點站 終點站 航班期 起飛時間 到達時間 機型 票價n"); scanf("%s %s %s %s %s %s %s %d",L.sli.keys,L.sli.start,L.sli.end,L.sli.sche,L.sli.time1,L.sli.time2,L.sli.model,&L.sli.price); printf("繼續(xù)輸入嗎?y/n:"); getchar(); scanf("%c",&yn);

22、 getchar();void menu() printf("*n"); printf("* 航班信息查詢與檢索系統(tǒng) *n"); printf("*n"); printf("* 1.錄 入 航 班 信 息 *n"); printf("* 2.刪 除 航 班 信 息 *n"); printf("* 3.查 詢 航 班 信 息 *n"); printf("* 4.顯 示 全 部 記 錄 *n"); printf("* 0.退 出 *n");

23、 printf("*n"); printf("* 請輸入(0-4):"); void del_SNode(SLList &L)getchar();if(L.length>0) int i; char key10,kl8; while(1) printf("*n"); printf("* 航班信息刪除系統(tǒng) *n"); printf("*n"); printf("* 1. 按 航 班 號 刪 除 *n"); printf("* 2. 按 起 點 站 刪 除

24、 *n"); printf("* 3. 按 終 點 站 刪 除 *n"); printf("* 4. 按 起飛時間 刪 除 *n"); printf("* 5. 按 到達時間 刪 除 *n"); printf("* 0. 返 回 *n"); printf("*n"); printf("* 請輸入(0-5):"); scanf("%d",&i); getchar(); if(i>=0 && i<=5) switc

25、h(i) case 1 : printf("請輸入要刪除的航班號(字母要大寫):"); scanf("%s",key); getchar(); del(L,key,i); break; case 2 :printf("請輸入要刪除的航班的起始站名:"); scanf("%s",key); getchar();del(L,key,i); break; case 3 :printf("請輸入要刪除的航班的終點站名:"); scanf("%s",key); getchar();del(L,key,i); break; case 4 :printf("請輸入要刪除的航班的起飛時間:"); scanf("%s",kl); getchar();del(L,kl,i); break; case 5 :printf("請輸入要刪除的航班的到達時間:"); scanf("%s",kl); getchar();de

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論