當前位置:編程學習大全網 - 源碼下載 - 航空公司訂票系統源代碼 要求要 c++ 來寫

航空公司訂票系統源代碼 要求要 c++ 來寫

#include <iostream.h>

#include <stdio.h>

#include <string.h>

#include <conio.h>

#define m 4 //3架飛機

#define n 5 //每架飛機5張票

struct node

{

char name[21];

char id[21];

int seat,plane,date;

node *next,*pre;

};

struct wait

{

char name[21];

char id[21];

char phone[8];

int seat,plane,date,count;

wait *next,*pre;

};

struct piao

{

int seat[n+1];

};

void makenull();

void makenull_piao();

void makenull_information();

void list_menu();

void list_piao();

void makenull_wait();

void list_information();

void plane_information(node *head);

void book();

void add_information(node *head,int x,int y);

void add_wait(int x,int y);

void search_delete(int x);

void write_to_file();

void show_wait();

bool comp(node *x,node*y);

node *head1,*head2,*head3,*q;

wait *wait_head,*wait_end;

char c;

piao a[m];

void main()

{

makenull();

do

{ list_menu();

cout<<endl<<"choose an operation: ";

cin>>c;

if (c!='6')

switch(c)

{

case '0' : show_wait();break;

case '1' : {list_piao();book();}break;

case '2' : search_delete(1);break;

case '3' : list_piao();break;

case '4' : list_information();break;

case '5' : search_delete(0);break;

default : break;

}

}while(c!='6');

cout<<"Exit System ";

}

void makenull()

{

makenull_piao();

makenull_information();

makenull_wait();

}

void list_menu()

{ cout<<endl<<"";

cout<<endl<<" 菜單";

cout<<endl<<" ************************";

cout<<endl<<" * 0 . 查看排隊情況 *";

cout<<endl<<" * 1 . 訂票 *";

cout<<endl<<" * 2 . 退票 *";

cout<<endl<<" * 3 . 查看剩余票 *";

cout<<endl<<" * 4 . 查看飛機信息 *";

cout<<endl<<" * 5 . 查看乘客信息 *";

cout<<endl<<" * 6 . 退出 *";

cout<<endl<<" ************************";

cout<<endl<<"";

}

void makenull_piao()

{

FILE *fp;

int i;

if((fp=fopen("piao.dat","r")) == NULL )

{

fp=fopen("piao.dat","w");

for (i=1;i<=m-1;i++)

fwrite(&a[i],sizeof(piao),1,fp);

fclose(fp);

fp=fopen("piao.dat","r");

}

for(i=1;i<=m-1;i++)

fread(&a[i],sizeof(piao),1,fp);

fclose(fp);

}

void makenull_information()

{

node *r;

FILE *fp;

int i,j,sum;

sum=a[1].seat[0]+a[2].seat[0]+a[3].seat[0];

fp=fopen("information.dat","r");

head1=new node;

head2=new node;

head3=new node;

head1->pre=NULL;

head1->next=NULL;

head2->pre=NULL;

head2->next=NULL;

head3->pre=NULL;

head3->next=NULL;

q=head1;

for(i=1;i<=sum;i++)

{

j=0;

r=new node;

fread(r,sizeof(node),1,fp);

q->next=r;

r->pre=q;

r->next=NULL;

q=q->next;

fclose(fp);

if(i==a[1].seat[0]+1) {

head2->next=q;

q->pre->next=NULL;

q->pre=head2;

}

if(i==a[1].seat[0]+a[2].seat[0]+1) {

head3->next=q;

q->pre->next=NULL;

q->pre=head3;

}

}

}

void makenull_wait()

{

wait *tempw;

FILE *fp;

tempw=new wait;

int i;

if((fp=fopen("wait.txt","r")) ==NULL )

{

fp=fopen("wait.txt","w");

fclose(fp);

}

wait_end=new wait;

wait_head=new wait;

wait_end->next=NULL;

wait_end->pre=NULL;

wait_head=wait_end;

wait_head->count=0;

fp=fopen("wait.txt","r");

fread(wait_head,sizeof(wait),1,fp);

for(i=1;i<=wait_head->count;i++)

{

fread(tempw,sizeof(wait),1,fp);

wait_end->next=tempw;

tempw->pre=wait_end;

tempw->next=NULL;

wait_end=tempw;

}

}

void list_piao()

{

int i,j;

for(i=1;i<=m-1;i++)

{

if(a[i].seat[0]!=n)

{

cout<<endl<<"第 "<<i<<" 架飛機剩余的票 :"<<endl;

for(j=1;j<=n;j++)

if (a[i].seat[j]==0) cout<<" "<<j;

cout<<endl;

}

else cout<<endl<<"The "<<i<<" plane is full !"<<endl<<endl;

}

}

void list_information()

{

int x;

do {cout<<endl<<"顯示哪架飛機的信息 ? "; cin>>x;cout<<endl;}while(x<1 || x>=m);

cout<<endl<<"第 "<<x<<" 架飛機的信息如下 "<<endl;

if(x==1) plane_information(head1);

if(x==2) plane_information(head2);

if(x==3) plane_information(head3);

}

void plane_information(node *head)

{

node *q;

char ch;

int x=0;

if(head!=NULL && head->next!=NULL)

q=head->next;

else {

q=NULL;

cout<<"飛機空,無預訂票 !"<<endl;

}

while(q!=NULL)

{

cout<<endl<<"*******************"<<endl;

q->date=q->plane;

cout<<"日期 :"<<q->date<<endl;

cout<<"座位號 : "<<q->seat<<endl;

cout<<"姓名 : "<<q->name;

cout<<endl<<"ID 號 : "<<q->id;

q=q->next;x++;

if (x % 3 ==0) ch=getch();

}

cout<<endl;

}

void book()

{

int i,j,p;

cout<<endl<<"請選擇地點:(1、2、3) ";

do {

cin>>i;

if (i<1 || i>=m) {

cout<<endl<<"**** 超出範圍!****"<<endl<<"請重新輸入:";

}

else

{cout<<endl<<"妳要訂的是到"<<i<<"地的飛機"<<endl;

cout<<endl<<"第 "<<i<<" 架飛機剩余的票 :"<<endl;

for(p=1;p<=n;p++)

if (a[i].seat[p]==0) cout<<" "<<p;

cout<<endl;

break;}

}while(1);

cout<<endl<<"請選擇座位號 : ";

do {

cin>>j;

if (j<1 || j>n) {

cout<<endl<<"**** 超出範圍!****"<<endl<<"請重新輸入:";

}

else

{

q->date=i;

cout<<endl<<"您的訂票日期 : "<<q->date<<endl;

break;

}

}while(1);

if (a[i].seat[j]==0) {

a[i].seat[j]=1;

cout<<endl;

a[i].seat[0]++;

if(i==1) add_information(head1,1,j);

if(i==2) add_information(head2,2,j);

if(i==3) add_information(head3,3,j);

}

else

{

cout<<endl<<"**** 對不起,該座位已被預訂,您被安排到訂票等候隊列 ****"<<endl;

add_wait(i,j);

}

}

void add_wait(int x,int y)

{

wait *tempw;

tempw=new wait;

tempw->next=NULL;

cout<<"請輸入個人信息"<<endl;

cout<<endl<<"*************"<<endl;

cout<<"姓名 : ";cin>>tempw->name;

cout<<"ID號 : ";cin>>tempw->id;

cout<<"電話 :";cin>>tempw->phone;

tempw->seat=y;

tempw->plane=x;

wait_end->next=tempw;

tempw->pre=wait_end;

wait_end=wait_end->next;

cout<<endl<<"**** 正在排隊等候 ****"<<endl;

wait_head->count++;

write_to_file();

}

void show_wait()

{

wait *tempw;

tempw=wait_head->next;

if (tempw==NULL) cout<<endl<<"排隊中沒有人!"<<endl;

while(tempw!=NULL)

{

cout<<tempw->name<<" - ";

tempw=tempw->next;

}

}

void add_information(node *head,int x,int y)

{

node *temp;

temp=new node;

temp->pre=NULL;

temp->next=NULL;

cout<<"請輸入個人信息"<<endl;

cout<<endl<<"*************"<<endl;

cout<<"姓名 : ";cin>>temp->name;

cout<<"ID號 : ";cin>>temp->id;

temp->seat=y;

temp->plane=x;

temp->next=head->next;

temp->pre=head;

if (head->next!=NULL) head->next->pre=temp;

head->next=temp;

write_to_file();

cout<<endl<<"**** 訂票成功 ****"<<endl;

}

void search_delete(int x)

{

node *p,*q,*r;

wait *tempw,*tempw2,*tempw3;

int step=1,t1,t2,i;

char ch;

p=new node;

tempw=new wait;

tempw2=new wait;

tempw3=new wait;

q=head1;

cout<<endl<<"請輸入個人信息"<<endl;

cout<<"*************"<<endl;

cout<<endl<<"姓名 : ";cin>>p->name;

do{

q=q->next;

if ( (q!=NULL) &&

(comp(q,p)) )

{

cout<<endl;

q->date=q->plane;

cout<<"Located!"<<endl;

cout<<"****************";

cout<<endl<<"姓名 : "<<q->name;

cout<<endl<<"ID號 : "<<q->id;

cout<<endl<<"座位號 : "<<q->seat;

cout<<endl<<"班機號 : "<<q->plane;

cout<<endl<<"日期 : "<<q->date<<endl;

if (x==1) {

cout<<"刪除該紀錄 ? [Y/N] ";

cin>>ch;

if (ch=='Y' || ch=='y') {

t1=q->plane;

t2=q->seat;

a[t1].seat[t2]=0;

a[t1].seat[0]--;

r=q;q=q->pre;

r->pre->next=r->next;

if(r->next!=NULL) r->next->pre=r->pre;

delete(r);

cout<<"**** 記錄刪除成功 ! ****";

write_to_file();

tempw=wait_head;

for(i=0;i<wait_head->count;i++)

{

tempw=tempw->next;

if(tempw==NULL) break;

if((tempw->plane==t1) && (tempw->seat==t2))

{

strcpy(tempw3->name,tempw->name);

strcpy(tempw3->phone,tempw->phone);

cout<<endl<<"等候的人中有可以訂票的了:"<<endl;

cout<<endl<<"姓名 : "<<tempw->name;

cout<<endl<<"ID號 : "<<tempw->id<<endl;

a[t1].seat[0]++;

a[t1].seat[t2]=1;

if(tempw->plane==1) add_information(head1,1,tempw->seat);

if(tempw->plane==2) add_information(head2,2,tempw->seat);

if(tempw->plane==3) add_information(head3,3,tempw->seat);

tempw2=tempw->pre;

tempw2->next=tempw->next;

if(tempw->next==NULL) wait_end=tempw2;

else tempw->next->pre=tempw2;

delete(tempw);

wait_head->count--;

write_to_file();

cout<<endl<<"等候的"<<tempw3->name<<"已經成功訂票,已經由電話"<<tempw3->phone<<"通知了"<<endl;

break;

}

}

}

}continue;

}

else

{

if (q==NULL)

{

step++;

if(step==2) q=head2;

if(step==3) q=head3;

if(step==4) {cout<<endl<<"**** 信息檢索完畢 ****";break;}

}

}

}while(1);

}

bool comp(node *x,node *y)

{

node *p,*q;

int i,j,k;

p=x;

q=y;

i=j=0;

do

{

while ( (p->name[i] != q->name[j]) && (p->name[i] != '\0') ) i++;

if (p->name[i] == '\0') {return(false);break;}

else

{

k=i;

while ( (p->name[k] == q->name[j]) && (q->name[j]!='\0') ) {k++;j++;}

if (q->name[j]=='\0') return(true);

else

{

j=0;

i++;

}

}

}while( (q->name[j]!='\0') && (p->name[i] != '\0') );

return(false);

}

void write_to_file()

{

FILE *fp;

int i,j;

int x[m];

node *p;

wait *tempw;

tempw=new wait;

tempw=wait_head;

fp=fopen("piao.dat","w");

for (i=1;i<=m-1;i++)

{

fwrite(&a[i],sizeof(piao),1,fp);

}

fclose(fp);

fp=fopen("information.dat","w");

x[0]=0;x[1]=a[1].seat[0];

for(i=0,j=1;j<=m-1;j++) {i=i+a[j].seat[0];x[j]=a[j].seat[0]+x[j-1];}

j=1;p=head1->next;

for(j=1;j<=i;j++)

{

if(j==x[1]+1) p=head2->next;

if(j==x[2]+1) p=head3->next;

if(p==NULL)break;

fwrite(p,sizeof(node),1,fp);

p=p->next;

}

fclose(fp);

fp=fopen("wait.txt","w");

for(j=0;j<=wait_head->count;j++)

{

if(tempw==NULL)break;

fwrite(tempw,sizeof(wait),1,fp);

tempw=tempw->next;

}

fclose(fp);

}

  • 上一篇:海外網店有哪些平臺?
  • 下一篇:絕對低點公式源代碼
  • copyright 2024編程學習大全網