#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 60
typedef struct Customer
{
//乘客信息
char Name[8]; //姓名
int Amount; //订票数
char Rank; //舱位等级
int IDinfor; //个人信息
struct Customer* Next; //指向下一个乘客结点
}Customer;
typedef struct Flight
{
//航班信息
char Des_Name[10]; //终点站名
char Flight_No[6]; //航班号
char Plane_No[6]; //飞机型号
int Week_Day; //航班日期
int Customer_Amount; //乘员定额
int Free_Amount; //剩余票数
int Price[3]; //舱位等级的价格
Customer* CustName; //该航班的已定票数乘客名单
Customer* ReplName; //该航班的候补乘客名单
struct Flight* Next; //指示下一航班结点
}Flight,*PFlight;//-->Flight* PFlight;
//全局变量
int Customer_Count=0; //所有航班的订票乘客总数
Flight* Head=NULL; //航班结点头指针
Flight* p2; //航班结点指针
Customer* Custp1[MAX]; //各航班乘客结点指针
Customer* Replp1[MAX]; //各条航班候补乘客节点指针
int IsEmpty=1; //是否有订票乘客
int IsReplace=1; //是否有候补乘客
Customer* prior; //满足要求的订票乘客的前结点,以作删除操作
int shouldsave=0;
//询问是否继续的函数
char Continue()
{
char answer;
while(1)
{
printf("\n\t您是否想继续(Y/N)?");
scanf("%s",&answer);
system("cls");
if(answer=='y'||answer=='Y')
return 'y';
else if(answer=='n'||answer=='N')
return 'n';
else
printf("\n\t输入有误,请重新输入!");
}
}
//航班核对函数
int Find_Line1(PFlight L,char* key)
{//核对航班是否唯一
int flag=0;//该标志位为0表示未找到相关信息,反之即找到,以下标志位同理
Flight* p1;
p1=L;//赋航班首地址
if(p1==p2)return flag;//首地址不做比较
while(p1!=p2&&p1!=NULL)//本航班号不纳入比较范围,否则会一直提示航班不唯一
{
if(strcmp(p1->Flight_No,key)==0)
{
flag=1;break;
}
p1=p1->Next;//指向下一航班结点
}
return flag;
}
//航班添加函数
void Line_Add()
{
PFlight* p1,p;//建立临时航班结点
p1=&Head;//传递航班链表头指针的地址
while(1)
{
if(Head==NULL)//航班为空
{
*p1=(PFlight)malloc(sizeof(Flight));
(*p1)->Next=NULL;
p2=Head;//建立首个航班
}
else
{
p1=&p;//p1指向的地址空间,以保持头指针 Head的值不变!!!
*p1=(PFlight)malloc(sizeof(Flight));//建立新航班结点
p2->Next=*p1;//前一航班结点指向当前航班节点
p2=*p1;//保留当前航班结点地址
}
printf("\n\t添加新的航班!\n");
printf("\n\t请输入终点站名:");
scanf("%s",&(p2->Des_Name));
while(1)
{//数据合法性检验
printf("\n\t请输入唯一的航班号:");
scanf("%s",&(p2->Flight_No));
if(Find_Line1(Head,p2->Flight_No))//存在航班号
printf("\n\t航班号已存在!\n");
else break;
}
printf("\n\t请输入飞机型号:");
scanf("%s",&(p2->Plane_No));
while(1)
{
printf("\n\t请输入航班日期(请输入1——7):");
scanf("%d",&(p2->Week_Day));
if(p2->Week_Day<1||p2->Week_Day>7)
printf("\n\t输入日期有误,请重新输入!\n");
else break;
}
printf("\n请输入座位数量:\t");
scanf("%d",&p2->Customer_Amount);
printf("\n\t请输入头等舱的价钱:");
scanf("%d",&p2->Price[0]);
printf("\n\t请输入二等舱的价钱:");
scanf("%d",&p2->Price[1]);
printf("\n\t请输入三等舱的价钱:");
scanf("%d",&p2->Price[2]);
p2->Free_Amount=p2->Customer_Amount;//剩余票数与乘员定额相同
p2->CustName=NULL;//该航班订票乘客头指针为空
shouldsave=1;//
if(Continue()=='n')
{
p2->Next=NULL;return;
}
}//endwhile(1)
}//end
//按终点站查找航班函数
void Line_search()
{
char Desname[10]; //查询终点站航班关键字
Flight* p1;
p1=Head;
if(Head==NULL)
{
printf("\n没有找到您想要的终点站的航班!\n");
getchar();
return;
}
printf("\n\t请输入终点站名:");
scanf("%s",Desname);
printf("\n\t您所查询的
用C写购票系统
最新推荐文章于 2024-07-05 15:39:07 发布