版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
航班信息查詢系統(tǒng)航班信息查詢系統(tǒng) 八、總結(jié)通過該實(shí)驗(yàn),實(shí)現(xiàn)了對(duì)于數(shù)據(jù)結(jié)構(gòu)和C語言的練習(xí),同時(shí)也讓自己對(duì)以前學(xué)過的知識(shí)進(jìn)行了回顧和整理,加深了自己的印象,然后該實(shí)驗(yàn)還鍛煉了自己的能力,使自己更加的認(rèn)真,細(xì)心,讓自己培養(yǎng)了很好的代碼檢查能力,同時(shí)也使自己了解了怎么做一個(gè)系統(tǒng),首先要對(duì)問題做好分析,它要實(shí)現(xiàn)是哪些功能,接著才考慮用什么樣的算法來描述,而且要比較幾種算法的優(yōu)缺點(diǎn),再做出選擇,緊接著才是寫核心代碼,在寫代碼之前要先用偽碼來對(duì)程序進(jìn)行描述,這樣便于以后工作的進(jìn)行,在寫代碼時(shí)要特別認(rèn)真。最后才是調(diào)試。整個(gè)過程都要不斷的重復(fù)調(diào)試,修改,不得不說,這是一個(gè)程序?qū)W習(xí)者的天堂。九、參考文獻(xiàn)嚴(yán)蔚敏吳偉民數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué)出版社2002年蘇仕華等數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)機(jī)械工業(yè)出版社2006年譚浩強(qiáng)張基溫唐永炎C語言程序設(shè)計(jì)教程(第二版)高等教育出版社2006年十、附錄(源程序代碼)#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#defineRADIX10#definemaxspace100#definekeylen7#defineRADIX_n10#defineRADIX_c26typedefcharKeyType;typedefstruct{charstart[8];//起點(diǎn)charend[8];//終點(diǎn)charsche[11];//班期chartime1[11];//起飛時(shí)間chartime2[11];//到達(dá)時(shí)間charmode[5];//機(jī)型intprice;//票價(jià)}infotype;//一張除航班號(hào)之外的飛機(jī)票信息typedefstruct{charkeys[6];//關(guān)鍵字,飛機(jī)票航班號(hào)infotypeothers;//航班其他信息intnext;//下一航班的編號(hào)地址}slnode;//某一特定航班信息typedefstruct{slnodes1[maxspace];//最多航班的信息intkeynum;//每張航班的航班號(hào)位數(shù)intlength;//鏈表長度}sllist;//航班信息表typedefintarrtype_n[RADIX_n];//關(guān)于數(shù)字排序鏈表的數(shù)組typedefintarrtype_c[RADIX_c];//關(guān)于字母排序鏈表的數(shù)組intm=0,n=0;//實(shí)現(xiàn)排序的各函數(shù)說明voiddistribute(slnode*s1,inti,arrtype_nf,arrtype_ne)//一趟關(guān)于數(shù)字分配函數(shù),分配好各數(shù)據(jù),本函數(shù)是按關(guān)鍵字keys[i]建立RADIX個(gè)子表,使同一個(gè)子表中記錄的keys[i]相同,f[0RADIX]所指的各子表中的第一個(gè)和最后一個(gè)記錄{intj,p;for(j=0;j<RADIX_n;j++)/*各子表初始化*/{f[j]=0;e[j]=0;}for(p=s1[0].next;p;p=s1[p].next){j=s1[p].keys[i]%48;/*將數(shù)字字符轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值性數(shù)字,48指0數(shù)字所在的ASCII碼的位置*/if(!f[j])f[j]=p;elses1[e[j]].next=p;e[j]=p;/*將p指向的結(jié)點(diǎn)插入到第j個(gè)結(jié)點(diǎn)*/}}voidcollect(slnode*s1,arrtype_nf,arrtype_ne)//一趟數(shù)字字符搜集函數(shù),串聯(lián)起各數(shù)據(jù),本函數(shù)是按關(guān)鍵字keys[i]從小到大將[0RADIX所指的各子表依次鏈接成一個(gè)鏈表] .{intj,t;for(j=0;!f[j];j++);/*找到第一個(gè)非空子表*/s1[0].next=f[j];/*sl[0].next指向第一個(gè)非空子表中的一個(gè)結(jié)點(diǎn)*/t=e[j];while(j<RADIX_n-1){for(j=j+1;j<RADIX_n-1&&!f[j];j++);/*找下一個(gè)非空子表*/if(f[j])/*連接兩個(gè)非空字表*/{s1[t].next=f[j];t=e[j];}}s1[t].next=0;/*t指向最后一個(gè)非空子表*/}voidDistribute_c(slnode*s1,inti,arrtype_cf,arrtype_ce)//一趟關(guān)于字母分配函數(shù),分配好各數(shù)據(jù){intj,p;for(j=0;j<RADIX_c;j++){f[j]=0;e[j]=0;}for(p=s1[0].next;p!=0;p=s1[p].next){j=s1[p].keys[i]%65;//65是ascii中第一個(gè)字母‘A’的值if(!f[j])f[j]=p;elses1[e[j]].next=p;e[j]=p;}}voidCollect_c(slnode*s1,arrtype_cf,arrtype_ce)//一趟字母字符搜集函數(shù),很好的串聯(lián)起各數(shù)據(jù){intj,t;for(j=0;!f[j];j++);s1[0].next=f[j];t=e[j];while(j<RADIX_c-1){for(j=j+1;j<RADIX_c-1&&!f[j];j++);if(f[j]){s1[t].next=f[j];t=e[j];}}s1[t].next=0;}voidArrange(sllist*L)//順序查找函數(shù){intp,q,i;slnodetemp;p=L->s1[1].next;/*p指示第一個(gè)記錄的當(dāng)前位置*/for(i=1;i<L->length;i++){while(p<i)/*找到第i個(gè)記錄,并用p指示其在的位子*/p=L->s1[p].next;q=L->s1[p].next;/*q指示尚未調(diào)整的表尾*/if(p!=i){temp=L->s1[p];L->s1[p]=L->s1[i];L->s1[i]=temp;L->s1[i].next=p;/*指向被移走的記錄*/}p=q;/*p指向尚未調(diào)整的表尾,為下一個(gè)準(zhǔn)備*/}}voidradixsort(sllist*L)//鏈?zhǔn)交鶖?shù)排序函數(shù){inti;arrtype_nfn,en;arrtype_cfc,ec;for(i=0;i<L->length;i++)L->s1[i].next=i+1;//0號(hào)單元僅存放指針,不存放內(nèi)容L->s1[L->length].next=0;/*將指針改造為靜態(tài)鏈表*/for(i=L->keynum-1;i>=2;i--)/*按最低位優(yōu)先次序?qū)€(gè)關(guān)鍵字進(jìn)行分配和收集,先做低4位部分*/{distribute(L->s1,i,fn,en);//按數(shù)字編排航班collect(L->s1,fn,en);//按數(shù)字分配航班}for(i=1;i>=0;i--){Distribute_c(L->s1,i,fc,ec);//按字母編排航班Collect_c(L->s1,fc,ec);//按字母分配航班}}/*對(duì)于此算法主要是注意信息長度的賦值,對(duì)于每次調(diào)用要作相應(yīng)的改變。初始化航班信息*/voidInputData(sllist*L){charch,ken;inti=0,j;do{L->length++;i=L->length;printf("請(qǐng)按照下面的格式輸入航班的信息\n");printf("航班號(hào):");scanf("%s",L->s1[i].keys);printf("起點(diǎn)站:");scanf("%s",L->s1[i].others.start);printf("終點(diǎn)站:");scanf("%s",L->s1[i].others.end);printf("航班期:");scanf("%s",L->s1[i].others.sche);printf("起飛時(shí)間:");scanf("%s",L->s1[i].others.time1);printf("到達(dá)時(shí)間:");scanf("%s",L->s1[i].others.time2);printf("機(jī)型:");scanf("%s",L->s1[i].others.mode);printf("價(jià)格:");scanf("%d",&L->s1[i].others.price);scanf("%c",&ken);//存儲(chǔ)enter符號(hào)for(j=1;j<i;j++){if(strcmp(L->s1[j].keys,L->s1[i].keys)==0){L->length--;}break;}printf("請(qǐng)問是否再次輸入航班信息?(y/n):");scanf("%c",&ch);}while(ch=='y'||ch=='Y');radixsort(L);Arrange(L);}/*實(shí)現(xiàn)查找的各函數(shù)說明二分查找函數(shù)*/intbisearch(sllist*l,KeyTypekey[])//在有序表l中折半查找其關(guān)鍵字等于key[]的元素,若找到,則函數(shù)值為該元素在表中的位置{intlow=1,mid;inthigh=l->length;//置區(qū)間初值while(low<=high){mid=(low+high)/2;if(strcmp(key,l->s1[mid].keys)==0)return(mid);//找到待查元素elseif(strcmp(key,l->s1[mid].keys)<0)return(mid);//未找到,則繼續(xù)在前半?yún)^(qū)間進(jìn)行查找elselow=mid+1;//繼續(xù)在后半?yún)^(qū)間進(jìn)行查找}return0;}voidDisplay(sllist*L,inti)//輸出查找的結(jié)果{printf("航班號(hào):");printf("%s\n",L->s1[i].keys);printf("起點(diǎn)站:");printf("%s\n",L->s1[i].others.start);printf("終點(diǎn)站:");printf("%s\n",L->s1[i].others.end);printf("航班期:");printf("%s\n",L->s1[i].others.sche);printf("起飛時(shí)間:");printf("%s\n",L->s1[i].others.time1);printf("到達(dá)時(shí)間:");printf("%s\n",L->s1[i].others.time2);printf("機(jī)型:");printf("%s\n",L->s1[i].others.mode);printf("價(jià)格:");printf("%d\n",L->s1[i].others.price);}voidSeqSearch(sllist*L,KeyTypekey[],inti){intj,k,m=0;for(j=1;j<=L->length;j++){switch(i){case2:k=strcmp(key,L->s1[j].others.start);break;case3:k=strcmp(key,L->s1[j].others.end);break;case4:k=strcmp(key,L->s1[j].others.time1);break;case5:k=strcmp(key,L->s1[j].others.time2);break;}if(k==0){m=1;Display(L,j);}}if(m==0)printf("無此航班信息,可能是輸入錯(cuò)誤!\n");}//輸入輸出函數(shù)(包括主控菜單函數(shù))voidinput_output(sllist*L){KeyTypekey[keylen];inti=1,k=0;do{printf("*****************************\n");printf("*航班信息查詢系統(tǒng)*\n");printf("*****************************\n");printf("*1.航班號(hào)*\n");printf("*2.起點(diǎn)站*\n");printf("*3.終點(diǎn)站*\n");printf("*4.起飛時(shí)間*\n");printf("*5.到達(dá)時(shí)間*\n");printf("*0.退出系統(tǒng)*\n");printf("*****************************\n");printf("請(qǐng)選擇(0-5):\t");scanf("%d",&i);if(i>=6||i<0){printf("輸入錯(cuò)誤,請(qǐng)重新輸入!");input_output(L);}printf("\n");switch(i){case1:printf("輸入要查詢的航班號(hào)(區(qū)分大小寫):");scanf("%s",key);k=bisearch(L,key);printf("*************************************************************\n");if(k<=0)printf("**無此航班信
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 太陽能利用與光伏儀器考核試卷
- 衛(wèi)浴產(chǎn)品設(shè)計(jì)人體工程學(xué)應(yīng)用考核試卷
- 保險(xiǎn)公估市場(chǎng)競(jìng)爭(zhēng)與策略考核試卷
- 樂器品牌故事挖掘與傳播考核試卷
- 直流vm可逆調(diào)速系統(tǒng)課程設(shè)計(jì)
- 簡易時(shí)鐘課程設(shè)計(jì)
- 二零二五年擔(dān)保公司項(xiàng)目法律意見書(影視娛樂行業(yè))3篇
- 選礦廠設(shè)計(jì)課程設(shè)計(jì)
- 問卷星微課程設(shè)計(jì)
- 英語詞匯課程設(shè)計(jì)
- GB/T 24478-2023電梯曳引機(jī)
- 油田酸化工藝技術(shù)
- 食堂經(jīng)營方案(技術(shù)標(biāo))
- 代收實(shí)收資本三方協(xié)議范本
- 人教版八年級(jí)英語下冊(cè)全冊(cè)課件【完整版】
- 乒乓球比賽表格
- 商務(wù)接待表格
- 腸梗阻導(dǎo)管治療
- word小報(bào)模板:優(yōu)美企業(yè)報(bào)刊報(bào)紙排版設(shè)計(jì)
- 漢語教學(xué) 《成功之路+進(jìn)步篇+2》第17課課件
- 三十頌之格助詞【精品課件】-A3演示文稿設(shè)計(jì)與制作【微能力認(rèn)證優(yōu)秀作業(yè)】
評(píng)論
0/150
提交評(píng)論