-
大小: 15KB文件類(lèi)型: .cpp金幣: 2下載: 1 次發(fā)布日期: 2021-05-13
- 語(yǔ)言: C/C++
- 標(biāo)簽: C語(yǔ)言??航班系統(tǒng)??
資源簡(jiǎn)介
1.問(wèn)題描述
該設(shè)計(jì)要求對(duì)飛機(jī)航班信息進(jìn)行排序和查找??砂春桨嗟暮桨嗵?hào)、起點(diǎn)站、終點(diǎn)站、起飛時(shí)間以及到達(dá)時(shí)間等信息進(jìn)行查詢(xún)。
2.擴(kuò)展功能:
①能夠在起點(diǎn)站與終點(diǎn)站相同的航班信息中篩選出票價(jià)最低及飛行時(shí)間最短的航班,并顯示;
②能夠不斷添加新的航班信息;
③能夠檢驗(yàn)輸入時(shí)間的合法性。
3.任務(wù)要求
對(duì)于本設(shè)計(jì),可采用基數(shù)排序法對(duì)一組具有結(jié)構(gòu)特點(diǎn)的飛機(jī)航班號(hào)進(jìn)行排序,利用二分查找法對(duì)排好序的航班記錄按航班號(hào)實(shí)現(xiàn)快速查找,按其他次關(guān)鍵字的查找可采用最簡(jiǎn)單的順序查找方法進(jìn)行,因此他們用得較少。
每個(gè)航班記錄包括八項(xiàng),分別是:航班號(hào)、起點(diǎn)站、終點(diǎn)站、班期、起飛時(shí)間、到達(dá)時(shí)間、飛機(jī)型號(hào)以及票價(jià)等,假設(shè)航班信息表(8條記錄)
航班號(hào) 起點(diǎn)站 終點(diǎn)站 班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià)
CA1544 合肥 北京 1.2.4.5 1055 1240 733 960
MU5341 上海 廣州 每日 1420 1615 M90 1280
CZ3869 重慶 深圳 2.4.6 0855 1035 733 1010
MU3682 桂林 南京 2.3.4.6.7 2050 2215 M90 1380
HU1836 上海 北京 每日 0940 1120 738 1250
CZ3528 成都 廈門(mén) 1.3.4.5.7 1510 1650 CRJ 1060
MU4594 昆明 西安 1.3.5.6 1015 1140 328 1160
SC7425 青島 ???1.3.6 1920 2120 DH4 1630
其中航班號(hào)一項(xiàng)的格式為:
K0 K1 K2 K3 K4 K5
C Z 3 8 6 9
其中K0和K1的輸入值是航空公司的別稱(chēng),用兩個(gè)大寫(xiě)字母標(biāo)示,后4位為航班號(hào),這種航班號(hào)關(guān)鍵字可分成兩段,即字母和數(shù)字。其余七項(xiàng)輸入內(nèi)容因?yàn)椴簧婕氨驹O(shè)計(jì)的核心,因此除了票價(jià)為數(shù)值型外,均定義為字符串即可。
代碼片段和文件信息
#include
#include
#include
#include/*getch()不回顯函數(shù)的頭文件*/
#define?Max?100
#define?keylen?7
#define?flight_num?10/*航班號(hào)數(shù)字*/
#define?flight_letter?26/*航班號(hào)字母*/
typedef?char?keytype;/*定義一個(gè)關(guān)鍵字類(lèi)型*/
typedef?struct?
{
???char?start[6];/*起點(diǎn)站*/
???char?end[6];/*終點(diǎn)站*/
???char?date[15];/*班期*/
???char?stime[5];/*起飛時(shí)間*/
???char?atime[5];/*到達(dá)時(shí)間*/
???char?type[4];/*機(jī)型*/
???int??price;/*票價(jià)*/
}Flight;/*航班記錄類(lèi)型*/
typedef?struct
{
???keytype?keys[keylen];/*關(guān)鍵字(航班號(hào))*/
???Flight?others;/*其它信息*/
???int?next;
}SLNode;/*靜態(tài)鏈表結(jié)點(diǎn)類(lèi)型*/
typedef?struct
{
???SLNode?SL[Max];/*靜態(tài)鏈表,SL[0]為頭結(jié)點(diǎn)*/
???int?keynum;/*記錄當(dāng)前關(guān)鍵字字符個(gè)數(shù)*/
???int?length;/*當(dāng)前表長(zhǎng)*/
}SLList;/*靜態(tài)鏈表類(lèi)型*/
typedef?int?array_num[flight_num];/*十進(jìn)制數(shù)字指針數(shù)組*/
typedef?int?array_letter[flight_letter];/*26個(gè)字母指針數(shù)組*/
//函數(shù)聲明
SLList?inputdata1(SLList?&L);
SLList?inputdata(SLList?&L);/*輸入函數(shù)(數(shù)據(jù)有序化)*/
void?Menu(SLList?L);/*檢索菜單及控制函數(shù)*/
void?distribute_num(SLNode?*SLint?iarray_num?farray_num?e);/*數(shù)字字符分配函數(shù)(一趟)*/
void?Collect_num(SLNode?*SLint?iarray_num?farray_num?e);/*數(shù)字字符收集函數(shù)(一趟)*/
void?distribute_letter(SLNode?*SLint?iarray_letter?farray_letter?e);/*字母字符分配函數(shù)(一趟)*/
void?Collect_letter(SLNode?*SLint?iarray_letter?farray_letter?e);/*字母字符收集函數(shù)(一趟)*/
void?RadixSort(SLList?&L);/*鏈?zhǔn)交鶖?shù)排序函數(shù)*/
void?Arrange(SLList?&L);/*按指針鏈重新整理靜態(tài)鏈表,便于查找(省時(shí)省空間)*/?
int?half_search(SLList?Lkeytype?key[]);/*折半查找(航班號(hào))*/
void?price_search(SLList?Lint?w);/*票價(jià)查找*/
void?order_search(SLList?Lkeytype?key[]int?i);/*順序查找*/
void?find_way(SLList?Lchar?sta[]char?end[]);/*票價(jià)查找*/
int?main()
{
???SLList?L;
???L.keynum=6;/*航班號(hào)當(dāng)前個(gè)數(shù)*/
???L.length=0;/*航班信息當(dāng)前個(gè)數(shù)(初始化)*/
???inputdata(L);/*數(shù)據(jù)輸入并有序化*/
???Menu(L);/*檢索菜單及輸出*/
???return?0;
}
void?distribute_num(SLNode?*SLint?iarray_num?farray_num?e)/*數(shù)字字符分配函數(shù)(一趟)*/
{
???int?jp;
???for(j=0;j ???{
??????f[j]=e[j]=0;/*順序表初始化,置空各子表*/
???}
???for(p=SL[0].next;p;p=SL[p].next)
???{
??????j=SL[p].keys[i]%48;/*將數(shù)字字符轉(zhuǎn)化成相對(duì)應(yīng)的數(shù)值型數(shù)字*/
??????if(!f[j])
??????f[j]=p;/*f[j]為0*/
??????else
??????SL[e[j]].next=p;
??????e[j]=p;/*將p指向的結(jié)點(diǎn)插入到第j個(gè)子表中*/
???}
}
void?Collect_num(SLNode?*SLint?iarray_num?farray_num?e)/*數(shù)字字符收集函數(shù)(一趟)*/
{
???int?jt;
???for(j=0;f[j];j++)/*找第一個(gè)非空子表*/
???SL[0].next=f[j];/*指向第一個(gè)非空子表的一個(gè)結(jié)點(diǎn)*/
???t=e[j];
???while(j ???{
??????for(j=j+1;j ??????if(f[j])
??{
?????????SL[t].next=f[j];
?????????t=e[j];?/*連接兩個(gè)非空子表*/
??}
???}
???SL[t].next=0;/*t指向最后一個(gè)非空子表的最后一個(gè)結(jié)點(diǎn)*/
}
void?distribute_letter(SLNode?*SLint?iarray_letter?farray_letter?e)/*字母字符分配函數(shù)(一趟)*/
{
???int?jp;
???for(j=0;j ???{
??????f[j]=e[j]=0;
???}
???for(p=SL[0].next;p;p=SL[p].next)
???{
??????j=SL[p].keys[i]%65;/*A-Z的ASCII碼值為65-90*/
??????if(!f[j])
??????f[j]=p;
??????else
??????SL[e[j]].next=p;
??????e[j]=p;
???}
}
void?Collect_letter(SLNode?*SLint?iarray_letter?farray_letter?e)/*字母字符收集函數(shù)(一趟)*/
{
???int?jt;
???f
評(píng)論
共有 條評(píng)論