#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "string.h"
#include <conio.h>
/*
景德镇陶瓷学院 计算机系 07计算机科学与技术2班
杨美泉
2009.6.20
首先要建立一个flight.dat和clint.dat文件,
放在该原代码文件的同一目录下,再运行;
*/
FILE *flightfile;
FILE *clintfile;
struct clint;//客户
struct flight//航班
{
char f_no[10];//航班号
char p_no[10];//飞机号
char s_p[10];//起始地
char e_p[10];//目的地
char time[10];//飞行周日
char s_tm[10];//始发时间
char e_tm[10];//到达时间
int num;//最大乘客量
int leftnum;//剩余票数
clint *bookedName; //该航班的已定票乘客名单
clint *nobookName; //该航班的候补乘客名单
struct flight *next;//
};
flight *head; //航线头指针
flight *p2; //航线结点指针
struct clint//订票客户
{
char c_name[10];//客户名
char c_ID[10];//证件号
char f_no[10];//航班号
int c_num;//订票数
int mark;//舱位等级
struct clint *next;//
};
clint *chead;//订票信息头结点
clint *cp2;//订票信息节点指针
////////////////////////////////////////////////////////////////////
//建立航班
void createflight()
{
flight *p1; //建立临时航班结点
while(1)
{
if(head==NULL)//航线为空
{
p1=p2=new flight; //建立首个航线
head=p2;
}
else
{
p1=new flight; //建立航线结点
p2->next=p1; //前一航线结点指向当前航班结点
p2=p1; //保留当前航班结点地址
}
printf("\n\t--------添加航线------------\n");
cout<<"\t航 班 号:\t";cin>>p2->f_no;
cout<<"\t飞 机 号:\t";cin>>p2->p_no;
cout<<"\t起 始 地:\t";cin>>p2->s_p;
cout<<"\t目 的 地:\t";cin>>p2->e_p;
cout<<"\t飞行周日:\t";cin>>p2->time;
cout<<"\t起飞时间:\t";cin>>p2->s_tm;
cout<<"\t抵达时间:\t";cin>>p2->e_tm;
cout<<"\t乘客定额:\t";cin>>p2->num;
cout<<"\t余 票 量:\t";cin>>p2->leftnum;
cout<<"录入成功,是否继续录入(y/n):";
char ch;
cin>>ch;
if(ch=='Y'||ch=='y')
{
continue;
}
else {p2->next=NULL;break;}
}
}
////////////////////////////////////////////////////////////////////////
//按航班号查询
void readflight(char *flightno)
{
flight *p1;
p1=head;
while(p1!=NULL)
{
if(!strcmp(flightno,p1->f_no))
{
void printfinfo(struct flight *p1);
printfinfo(p1);
break;
}
else p1=p1->next;
}
if(p1==NULL)
{
cout<<"无此航班!"<<endl;
}
}
//该航班号是否存在
bool isexit(char *flightno)
{
flight *p1;
p1=head;
while(p1!=NULL)
{
if(!strcmp(flightno,p1->f_no))
{
return true;
break;
}
else p1=p1->next;
}
if(p1==NULL)
{
// cout<<"无此航班!"<<endl;
return false;
}
}
//返回所要查询到得航班结构体对象
flight * returntheno(char *flightno)
{
flight *p1;
p1=head;
while(p1!=NULL)
{
if(!strcmp(flightno,p1->f_no))
{
return p1;
break;
}
else p1=p1->next;
}
if(p1==NULL)
{
// cout<<"无此航班!"<<endl;
return false;
}
}
//按地点查询查询
void readflight(char *flightp1,char *flightp2)
{
flight *p1;
p1=head;
while(p1!=NULL){
if(strcmp(flightp1,p1->s_p)==0&&strcmp(flightp2,p1->e_p)==0)
{
void printfinfo(struct flight *p1);
printfinfo(p1);
break;
}
else p1=p1->next;
}
if(p1==NULL) cout<<"无此航班!"<<endl;
}
//按剩票航班查询
void readflight(int k)
{
flight *p1;
p1=head;
while(p1!=NULL)
{
if(p1->leftnum>0)
{
void printfinfo(struct flight *p1);
printfinfo(p1);
}
p1=p1->next;
}
if(p1==NULL) cout<<"无剩票航班!"<<endl;
}
//查询所有航班
void readflight()
{
flight *p1;
p1=head;
cout<<"\t----------信息如下--------"<<endl;
while(p1!=NULL)
{
void printfinfo(struct flight *p1);
printfinfo(p1);
p1=p1->next;
}
}
//////////////////////////////////////////////////////////////
//打印航班信息
void printfinfo(struct flight *p1)
{
cout<<"\t--------------------------"<<endl;
cout<<"\t航 班 号:\t"<<p1->f_no<<endl;;
cout<<"\t飞 机 号:\t"<<p1->p_no<<endl;
cout<<"\t起 始 地:\t"<<p1->s_p<<endl;
cout<<"\t目 的 地:\t"<<p1->e_p<<endl;
cout<<"\t飞行周日:\t"<<p1->time<<endl;
cout<<"\t起飞时间:\t"<<p1->s_tm<<endl;
cout<<"\t抵达时间:\t"<<p1->e_tm<<endl;
cout<<"\t乘客定额:\t"<<p1->num<<endl;
cout<<"\t余 票 量:\t"<<p1->leftnum<<endl;
cout<<"\t---------------------------"<<endl;
}
//航班是否为空
bool Empty_Flight()
{
if(head==NULL)
{
system("cls");
printf("\n\t对不起,航线不存在,按任意键返回!");
getch();
return true;
}
else
return false;
}
/////////////////////////////////////////////////////////////////////
//客户订票
void bookticket()
{
loopdingpiao:
clint *cp1; //建立临时客户订票结点
clint *c;
if(chead==NULL)//如果客户为空
{
cp1=cp2=new clint;//建立首个客户节点
chead=cp2;
}
else
{
cp1=new clint; //建立客户结点
cp2->next=cp1; //前一客户结点指向当前客户结点
cp2=cp1; //保留当前客户结点地址
}
printf("\n\t--------填写订票信息---------\n");
char *curr=new char[10];
cout<<"\t航 班 号:\t";cin>>curr;
bool isexit(char *flightno);
if(isexit(curr))
{
if(returntheno(curr)->leftnum>0)
{
//cp2->f_no=curr;
returntheno(curr)->nobookName=NULL;
c=returntheno(curr)->nobookName;
c=new clint;
strcpy(cp2->f_no,curr);
cout<<"\t姓 名:\t";cin>>cp2->c_name;
cout<<"\t证 件 号:\t";cin>>cp2->c_ID;
loopdingpiao2:
cout<<"\t订票数量:\t";cin>>cp2->c_num;
if(cp2->c_num>returntheno(curr)->leftnum||cp2->c_num<=0)
{
cout<<"订票数量不能大于该航班下所剩票数!"<<endl;
cout<<"请重新输入:"<<endl;goto loopdingpiao2;
}
cout<<"\t舱位等级:\t";cin>>cp2->mark;
cout<<"订票成功"<<endl;
returntheno(curr)->bookedName=cp2;
returntheno(curr)->leftnum=returntheno(curr)->leftnum-cp2->c_num;
cp2->next=NULL;
}
else
{
cout<<"该航班机票已全部定完!"<<endl;
cout<<"是查看其他航班信息(Y/N):";
char ch;
cin>>ch;
if(ch=='Y'||ch=='y')
{
void readflight(int k);
readflight(3);
cout<<"\t*-------------------*"<<endl;
cout<<"\t* 1>继续订票 *"<<endl;
cout<<"\t* 2>列为候补名单 *"<<endl;
cout<<"\t* 3>返回 *"<<endl;
cout<<"\t*-------------------*"<<endl;
cout<<"请选择:";
char ch1;
cin>>ch1;
if(ch1=='1')
{
goto loopdingpiao;
}
if(ch1=='2')
{
printf("\n\t--------填写订票信息---------\n");
cout<<"\t航 班 号:\t"<<curr<<endl;
cout<<"\t姓 名:\t";cin>>cp2->c_name;
cout<<"\t证 件 号:\t";cin>>cp2->c_ID;
cout<<"\t订票数量:\t";cin>>cp2->c_num;
cout<<"\t舱位等级:\t";cin>>cp2->mark;
cout<<"订票成功"<<endl;
strcpy(cp2->f_no,curr);
if(returntheno(curr)->nobookName==NULL)
{
returntheno(curr)->nobookName=cp2;
returntheno(curr)->nobookName->next=NULL;
}
//returntheno(curr)->nobookName=cp2;
/*else
{
c->next=NULL;
c=c->next;
}*/
//cp2=cp2->next;
//returntheno(curr)->nobookName->next=NULL;
cout<<"你选择了放弃订阅其他航班票,系统将您列为候补客户名单;"<<endl;
}
}
}
}
else cout<<"对不起,该航班不存在!"<<endl;
}
//读已订票取客户信息
void readclint(char *clintname)
{
clint *cp1;
cp1=chead;
while(cp1!=NULL)
{
if(!strcmp(clintname,cp1->c_name))
{
void printfclintinfo(struct clint *cp1);
printfclintinfo(cp1);
break;
}
else cp1=cp1->next;
}
if(cp1==NULL)
{
cout<<"无此客户!"<<endl;
}
}
//打印客户信息
void printfclintinfo(struct clint *cp1)
{
cout<<"\t-------------