C語(yǔ)言實(shí)現(xiàn)航班訂票系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)航班訂票系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
描述:
點(diǎn)定義兩個(gè)鏈表,一個(gè)存儲(chǔ)航班信息,一個(gè)存儲(chǔ)客戶信息;
進(jìn)行一系列簡(jiǎn)單的增刪查找;
代碼如下
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
using namespace std;
const int MAXN=250;
typedef struct
{
string p_id;
int sum;
int r;
int c;
int selected;
int select;
string start;
string startp;
string arrive;
string arrivep;
int acx[MAXN][MAXN];
} node;
typedef struct Pnode
{
node data;
struct Pnode *next;
} Pnode,*Plist;
typedef struct
{
int r;
int c;
string name;
string kp_id;
string k_id;
} node1;
typedef struct Knode
{
node1 data;
struct Knode *next;
} Knode,*Klist;
void init(Plist &l)
{
l=new Pnode;
l->next=NULL;
}
void init(Klist &L)
{
L=new Knode;
L->next=NULL;
}
void creatp(Plist &l,int e)
{
cout<<endl<<endl;
Plist r=new Pnode;
r=l;
for(int i=0; i<e; i++)
{
Plist ll=new Pnode;
cout<<endl;
cout<<"請(qǐng)依次輸入航班班次,起飛時(shí)間,起飛地點(diǎn),到達(dá)時(shí)間,到達(dá)地點(diǎn),座位行數(shù),列數(shù),總座位數(shù),已被購(gòu)買的數(shù)目,未被購(gòu)買的數(shù)目"<<endl;
cout<<'\t';
cin>>ll->data.p_id;
cout<<" ";
cin>>ll->data.start;
cout<<" ";
cin>>ll->data.startp;
cout<<" ";
cin>>ll->data.arrive;
cout<<" ";
cin>>ll->data.arrivep;
cout<<" ";
cin>>ll->data.r;
cout<<" ";
cin>>ll->data.c;
cout<<" ";
cin>>ll->data.sum;
cout<<" ";
cin>>ll->data.selected;
cout<<" ";
cin>>ll->data.select;
for(int j=1; j<=ll->data.r; j++)
for(int v=1; v<=l->data.c; v++)
ll->data.acx[j][v]=0;
ll->next=NULL;
r->next=ll;
r=ll;
}
}
void creatk(Klist &L,node1 e)
{
Klist LL=new Knode;
LL->data=e;
LL->next=NULL;
Klist r;
r=L;
while(r->next!=NULL)
{
r=r->next;
}
r->next=LL;
//cout<<L->next->data.r<<endl;
}
void show(Plist &l)
{
Plist p=new Pnode;
p=l->next;
while(p!=NULL)
{
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<p->data.p_id<<" "<<p->data.start<<" "<<p->data.startp<<" "<<p->data.arrive<<" "<<p->data.arrivep<<" "<<p->data.sum<<" "<<p->data.selected<<" "<<p->data.select<<endl;
for(int i=1; i<=p->data.r; i++)
{
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t';
for(int j=1; j<=p->data.c; j++)
cout<<p->data.acx[i][j];
cout<<endl;
}
p=p->next;
}
return ;
}
void alter(Plist &l,node1 e,int flag)
{
Pnode *p,*pre;
p=l->next;
while(p->data.p_id!=e.kp_id)
{
pre=p;
p=p->next;
}
if(flag)
{
p->data.select-=1;
p->data.selected+=1;
p->data.acx[e.r][e.c]=1;
}
else
{
p->data.select+=1;
p->data.selected-=1;
p->data.acx[e.r][e.c]=0;
}
return ;
}
int delet(Klist &L,node1 e)
{
Klist p,pre;
p=L;
while(p->next!=NULL)
{
if(p->data.name==e.name&&p->data.k_id==e.k_id&&p->data.kp_id==e.kp_id)
break;
pre=p;
p=p->next;
}
if(p==NULL)
return 0;
else
{
//cout<<"hjdhfjks"<<endl;
pre->next=p->next;
free(p);
return 1;
}
}
int searchh(Klist &L,node1 e)
{
Knode *p;
p=L->next;
while(p!=NULL)
{
if(p->data.name==e.name&&p->data.k_id==e.k_id&&p->data.kp_id==e.kp_id)
{
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"您的位置是"<<p->data.r<<"行"<<p->data.c<<"列"<<endl;
return 1;
}
p=p->next;
}
return 0;
}
void showone(Plist &l,node1 e)
{
Pnode *p;
p=l->next;
while(p!=NULL)
{
if(p->data.p_id==e.kp_id)
{
cout<<endl;
cout<<'\t'<<"您的航班信息如下(依次為航班班次,起飛時(shí)間,起飛地點(diǎn),到達(dá)時(shí)間,到達(dá)地點(diǎn),座位總數(shù),已購(gòu)座位數(shù),未購(gòu)座位數(shù))"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<p->data.p_id<<" "<<p->data.start<<" "<<p->data.startp<<" "<<p->data.arrive<<" "<<p->data.arrivep<<" "<<p->data.sum<<" "<<p->data.selected<<" "<<p->data.select<<endl;
return ;
}
}
return ;
}
int judge(Plist &l,node1 e)
{
Pnode *p;
p=l->next;
while(p!=NULL)
{
//cout<<p->data.acx[e.r][e.c]<<endl;
if(p->data.p_id==e.kp_id)
{
if(p->data.acx[e.r][e.c])
return 0;
}
p=p->next;
}
return 1;
}
int main()
{
Plist l;
Klist L;
init(l);
init(L);
int choose,n;
node p;
node1 k;
cout<<endl<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"初始化存儲(chǔ)航班信息"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"輸入航班總數(shù):";
cin>>n;
system("cls");
creatp(l,n);
system("cls");
while(1)
{
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"1.客戶訂票"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"2.客戶退票"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"3.客戶查詢航班信息"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"0.退出系統(tǒng)"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"選擇功能:";
cin>>choose;
system("cls");
if(!choose)
{
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<endl;
break;
}
else if(choose==1)//訂票
{
cout<<endl<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"航班信息如下"<<endl;
show(l);
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"輸入客戶姓名,證件號(hào):";
cin>>k.name>>k.k_id;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"輸入客戶選擇的航班號(hào),位置(行,列):";
cin>>k.kp_id>>k.r>>k.c;
if(judge(l,k))
{
creatk(L,k);
alter(l,k,1);
}
else
{
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"座位已有人,不能訂票,請(qǐng)重新選擇!"<<endl;
}
getchar();
getchar();
system("cls");
}
else if(choose==2)//退票
{
cout<<endl<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"輸入客戶信息(名字,證件號(hào),航班)"<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t';
cin>>k.name>>k.k_id>>k.kp_id;
int flag=delet(L,k);
if(flag)
{
alter(l,k,0);
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"退票成功"<<endl;
}
else
{
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"查找失敗,請(qǐng)重新輸入"<<endl;
}
getchar();
getchar();
system("cls");
}
else if(choose==3)
{
cout<<endl<<endl;
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"輸入客戶信息(名字,證件號(hào),航班):";
cin>>k.name>>k.k_id>>k.kp_id;
int flag=searchh(L,k);
if(flag)
{
showone(l,k);
}
else
{
cout<<'\t'<<'\t'<<'\t'<<'\t'<<'\t'<<"查找失敗,請(qǐng)重新輸入"<<endl;
}
getchar();
getchar();
system("cls");
}
}
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言中操作utmp文件的相關(guān)函數(shù)用法
這篇文章主要介紹了C語(yǔ)言中操作utmp文件的相關(guān)函數(shù)用法,包括getutent()函數(shù)和setutent()函數(shù)以及endutent()函數(shù),需要的朋友可以參考下2015-08-08
關(guān)于C語(yǔ)言strlen與sizeof區(qū)別詳情
對(duì)于 strlen 和 sizeof,相信不少程序員會(huì)混淆其功能。雖然從表面上看它們都可以求字符串的長(zhǎng)度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別,今天得這篇文章我們就來(lái)學(xué)習(xí)C語(yǔ)言strlen與sizeof區(qū)別的相關(guān)資料,需要的朋友可以參考一下2021-10-10
C語(yǔ)言關(guān)于自定義數(shù)據(jù)類型之枚舉和聯(lián)合體詳解
枚舉顧名思義就是把所有的可能性列舉出來(lái),像一個(gè)星期分為七天我們就可以使用枚舉,聯(lián)合體是由關(guān)鍵字union和標(biāo)簽定義的,和枚舉是一樣的定義方式,不一樣的是,一個(gè)聯(lián)合體只有一塊內(nèi)存空間,什么意思呢,就相當(dāng)于只開(kāi)辟最大的變量的內(nèi)存,其他的變量都在那個(gè)變量占據(jù)空間2021-11-11
C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程
這篇文章主要介紹了C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
C++實(shí)現(xiàn)對(duì)回收站里的文件進(jìn)行操作的示例代碼
這篇文章主要為大家詳細(xì)介紹了C++如何使用代碼對(duì)回收站里的文件進(jìn)行操作,譬如文件的刪除與恢復(fù)等,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
用C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī)
這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
C++詳細(xì)講解互斥量與lock_guard類模板及死鎖
線程的主要優(yōu)勢(shì)在于,能夠通過(guò)全局變量來(lái)共享信息。不過(guò),這種便捷的共享是有代價(jià)的:必須確保多個(gè)線程不會(huì)同時(shí)修改同一變量,或者某一線程不會(huì)讀取正由其他線程修改的變量。為了防止出現(xiàn)線程某甲試圖訪 問(wèn)一共享變量時(shí),線程某乙正在對(duì)其進(jìn)行修改。引入了互斥量2022-07-07

