⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.txt

📁 能够实现飞机订票的系统源代码
💻 TXT
字号:
#include <iostream.h> 
#include <conio.h> //用到ch=getch()时的函数
#include <fstream>//'system'包含在这个头文件中'FILE''fp' 'fopen''fwrite''fclose''fread''包含在这个头文件中'strcpy'也包含在里面

#define m 4 //3架飞机 
#define n 5 //每架飞机5张票 

//买到票的顾客的链表的接点,是有前驱结点和后继结点的
struct node 
{ 
char name[21]; //顾客的姓名
char id[21]; //顾客的ID号
int seat,plane,date; //顾客的座位,飞机号,飞行时间
node *next,*pre; 
}; 

//候补队列接点wait的结构体
struct wait 
{ 
char name[21]; //候补队列的姓名
char id[21]; //ID号码
char phone[8]; 
int seat,plane,date,count; 
wait *next,*pre; 
}; 

struct ticket 
{ 
int seat[n+1]; 
}; 

node *head1,*head2,*head3,*q; 
wait *wait_head,*wait_end; 
char c; 
ticket a[m]; 


void makenull() 
{ 
void makenull(); 
void makenull_ticket(); 
void makenull_information();
void makenull_wait();
makenull_ticket(); 
makenull_information(); 
makenull_wait(); 
} 




void makenull_ticket() 
{ 
FILE *fp; 
int i; 
if((fp=fopen("ticket.dat","r")) == NULL ) //在存放位置生成一个数据.dat文件
{ 
fp=fopen("ticket.dat","w"); 
for (i=1;i<=m-1;i++) 
fwrite(&a[i],sizeof(ticket),1,fp); 
fclose(fp); 
fp=fopen("ticket.dat","r"); 
} 
for(i=1;i<=m-1;i++) 
fread(&a[i],sizeof(ticket),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_ticket() 
{ 
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() //查看飞机信息
{
void plane_information(node *head); 
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() 
{ 
void add_wait(int x,int y);
void add_information(node *head,int x,int y);  
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) 
{ 
void write_to_file();
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) 
{
void write_to_file(); 
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) 
{ 
void write_to_file(); 
bool comp(node *x,node*y);
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("ticket.dat","w"); 
for (i=1;i<=m-1;i++) 
{ 
fwrite(&a[i],sizeof(ticket),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); 
}

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 main() 
{ 
system("color bc "); //设置字体颜色和背景,
makenull(); 
do 
{ list_menu(); 
cout<<endl<<"choose an operation: "; 
cin>>c; 
if (c!='6') 
switch(c) 
{ 
case '4' : show_wait();break; //显示
case '1' : {list_ticket();book();}break; 
case '2' : search_delete(1);break; 
case '3' : list_ticket();break; 
case '0' : list_information();break; 
case '5' : search_delete(0);break; 
default : break; 
} 
}while(c!='6'); 
cout<<"Exit System "; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -