代码:
/*****************************************************
* 版权所有(C)2016
*文件名称:航空售票系统
*文件标识:无
*内容摘要:航空售票系统
*其他说明:无
*当前版本:V1.0
*作者:房斐
*完成日期:2015.12.30
*****************************************************/
a.h
#ifndef BTREE_H_INCLUDED
#define BTREE_H_INCLUDED
#include<iostream>
#include <windows.h>
#include<fstream> //文件下的类和函数
using namespace std;
#include<stdlib.h>
#include<string.h>
void sleep1();
void sleep2();
/*****************************************************
*功能描述:定义客户信息
*输入参数:name,id,line_num,time1,time2,seat_num
*输出参数:client
******************************************************/
typedef struct client
{
char name[20];//顾客名
char id[10];//顾客证件号
char line_num[10];//航班号
char time1[10];//起飞时间
char time2[10];//降落时间
int seat_num;//座位号
struct client *next;//下一个结点
} client;
//头结点
typedef struct clienthead
{
int count;
client *next;
} clienthead;
/*****************************************************
*功能描述:定义航班信息
*输入参数:line_num,time1,time2,start_place,end_place,total,money.
*输出参数:airline
******************************************************/
typedef struct airline
{
char line_num[10];//航班号
char start_place[20];//起飞地
char end_place[20];//目的地
char time1[10];//起飞时间
char time2[10];//降落时间
int total;//座位总数
int left;//剩余座位
int money;//票价
struct airline *next;//下一个结点
} airline;
//头结点
typedef struct airlinehead
{
int count;
airline *next;
} airlinehead;
airlinehead* import(int n,airlinehead *pheadline);//录入航班函数: n为所要录入航班的数量:
airline* query(airlinehead *phead );//查询航班情况
void display_line(airline *node);//输出一个航班结点的所有信息到屏幕
void display_all_line(airlinehead *headline); 输出所有航班结点的所有信息到屏幕
void display_client(client *node);//输出一个客户节点的信息到屏幕。
void display_all_client(clienthead *headclient);//输出所有客户信息到屏幕。。
int bookticket(airlinehead * headline,clienthead *headclient);//订票
int returnticket(airlinehead * headline,clienthead *headclient);//退票。
#endif //BTREE_H_INCLUDED
a.cpp
#include "a.h"
#include <stdio.h>
/*****************************************************
*功能描述:录入航班函数
*输入参数:line_num,start_place,end_place,time1,time2,total,left,money.
*输出参数:第i+1个航班录入
******************************************************/
airlinehead* import(int n,airlinehead *pheadline)//录入航班函数: n为所要录入航班的数量:
{
airline *temp = new airline;
temp->next=NULL; //尾链表插入
pheadline->next=temp;
pheadline->count = n; //航班数
for(int i=0; i<n; i++)
{
cout<<"请输入第"<<i+1<<"个航班的航班号 ";
cin>>temp->line_num;
cout<<"请输入第"<<i+1<<"个航班的起飞地 ";
cin>>temp->start_place;
cout<<"请输入第"<<i+1<<"个航班的目的地 ";
cin>>temp->end_place;
cout<<"请输入第"<<i+1<<"个航班的起飞时间";
cin>>temp->time1;
cout<<"请输入第"<<i+1<<"个航班的降落时间";
cin>>temp->time2;
cout<<"请输入第"<<i+1<<"个航班的座位总数 ";
cin>>temp->total;
cout<<"请输入第"<<i+1<<"个航班的票价 ";
cin>>temp->money;
temp->left=temp->total; //剩余数初定义
cout<<"第"<<i+1<<"个航班成功录入。"<<endl;
if(i<n-1)
{
temp->next = new airline;
if(temp->next == NULL)
{
cout<<"分配内存失败"<<endl;
exit(1);
}
temp->next->next=NULL;
temp = temp->next;
}
}
return pheadline;
}
/*****************************************************
*功能描述:查询航班功能
*输入参数:select1,select2
*输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数 ,票价
*返回值:temp-成功,NULL-失败
******************************************************/
airline* query(airlinehead *phead )//查询航班情况
{
airline *find=NULL;
airline *temp;
cout<<"**********************************"<<endl;
cout<<"* 1,按航班号查询航班情况。 *"<<endl;
cout<<"* 2,按起飞抵达城市查询航班情况。 *"<<endl;
cout<<"**********************************"<<endl;
cout<<"请选择:";
int select;
cin>>select;
cout<<endl;
switch(select)
{
case 1:
{
cout<<"请输入航班号:";
char line_num[10];
cin>>line_num;
temp = phead->next;
while(temp )
{
if(strcmp(temp->line_num,line_num) == 0)//输出航班信息
{
find= temp;
return temp;
break;
}
else //向下继续搜索
{
temp = temp->next;
}
}
if(!temp)
{
cout<<"没有找到该航班的信息。"<<endl;
return NULL;
}
break;
}
case 2:
{
char start_place[20];//起飞地
char end_place[20];//目的地
cout<<"请输入起飞地址:";
cin>>start_place;
cout<<"请输入目的地:";
cin>>end_place;
temp=phead->next;
while(temp)
{
if(strcmp(temp->start_place,start_place)==0 &&
strcmp(temp->end_place,end_place)==0)
{
find=temp;
break;
}
temp = temp->next;
}
if(!temp)
{
cout<<"没有找到该航班的信息。"<<endl;
return NULL;
}
break;
}
default:
cout<<"输入错误。"<<endl;
break;
}
return find;
}
/*****************************************************
*功能描述:输出航班信息功能
*输入参数:select1,select2
*输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数 ,票价
******************************************************/
void display_line(airline *node)//输出一个航班结点的所有信息到屏幕
{
if(node==NULL)
{
cout<<"参数为空!输出失败."<<endl;
return;
}
cout<<endl;
cout<<"航班号:"<<node->line_num<<endl;
cout<<"起飞地:"<<node->start_place<<endl;
cout<<"目的地:"<<node->end_place<<endl;
cout<<"起飞时间:"<<node->time1<<endl;
cout<<"降落时间:"<<node->time2<<endl;
cout<<"座位数:"<<node->total<<endl;
cout<<"剩余座位:"<<node->left<<endl;
cout<<"票价:"<<node->money<<endl;
}
/******************************************************
*功能描述:输出所有的航班信息到屏幕
*输入参数:无
*输出参数:headline
*******************************************************/
void display_all_line(airlinehead *headline)
{
cout<<endl;
airline *node; //初定义node
node = headline->next;
if(!node)
{
cout<<"当前没有航班信息"<<endl;
return ;
}
cout<<"航班数目: "<<headline->count<<endl;
while(node)
{
display_line(node); //调用单个航班信息输出函数
node=node->next;
}
}
/*****************************************************
*功能描述:输出一个客户信息到屏幕
*输入参数:无
*输出参数:姓名,证件号码,座号,航班号。
******************************************************/
void display_client(client *node)//输出一个客户节点的信息到屏幕。
{
if(node==NULL)
{
cout<<"参数为空!输出失败。"<<endl;
return;
}
cout<<endl;
cout<<"姓名:"<<node->name<<endl;
cout<<"证件号码:"<<node->id<<endl;
cout<<"座号:"<<node->seat_num<<endl;
cout<<"航班号:"<<node->line_num<<endl;
}
/*****************************************************
*功能描述:输出全部客户信息到屏幕
*输入参数:无
*输出参数:姓名,证件号码,座号,航班号。
******************************************************/
void display_all_client(clienthead *headclient)//打印所有客户信息到屏幕。。
{
client *node=headclient->next;
if(!node)
{
cout<<"当前没有客户信息。"<<endl;
return ;
}
while(node)
{
display_client(node); //调用单个客户信息输出
node=node->next;
}
}
/*****************************************************
*功能描述:订票
*输入参数:line_num,id
*输出参数:
*返回值:1-正确,0-错误
******************************************************/
int bookticket(airlinehead * headline,clienthead *headclient)//订票
{
cout<<"请输入航班号: ";//检测目标航班是否有余票
char line_num[10] ;
cin>>line_num;
int num;
airline *temp;
temp=headline->next;
while(temp)
{
if(strcmp(temp->line_num,line_num)==0)
{
break;
}
temp=temp->next;
}
if(!temp)
{
cout<<"未找到该航班"<<endl;
return 0;
}
if(temp->left==0)
{
cout<<"对不起,该航班票已经售完。"<<endl;
cout<<"请选择其他合适的航班."<<endl;
}
if(temp!=NULL && temp->left!=0)
{
client *custom=new client;
cout<<"请输入你的证件号码: ";
cin>>custom->id;
cout<<"请输入你的姓名:";
cin>>custom->name;
cout<<endl;
for(int i=1;i<=temp->total;i++)//每个人从第一个位置开始寻找,找到位置没人输出
{
client *client1;
client1=headclient->next;
if(headclient->count==0) //第一次执行,航班没人时执行,输出第一个位置。
{
num=i;
break;
}
while(client1) //
{
if(client1->seat_num==i)//位置有人
break;//跳出for循环
client1=client1->next;//没人时指向下一个客户
}
if(!client1) //没有冲突,没有人占位,输出位置。
{
num=i; //位置赋值
break;
}
// 冲突时执行下一个i
// 没冲突时执行下一个client(该次的i直至执行到最后一个client时没冲突 num=i 直接退出 )
//最后一个之前有冲突 从头开始 执行下一个i
}
custom->seat_num=num; //座位号按购票顺序排序
strcpy(custom->line_num,line_num); //保存客户航班号
custom->next=NULL;
temp->left--;//余票-1
headclient->count++; //客户+1
custom->next = headclient->next;//头插法增加客户
headclient->next = custom;
cout<<"订票成功!祝您旅途愉快~~";
cout<<endl;
return 1;
}
}
/*****************************************************
*功能描述:退票
*输入参数:id
*输出参数:
*返回值:1-正确,0-错误
******************************************************/
int returnticket(airlinehead * headline,clienthead *headclient)//退票。
{
cout<<"请输入顾客的证件号码:id: ";
char id[10];
cin>>id;
airline *airlinetemp= headline->next;
client *clienttemp= headclient->next;
if(NULL==airlinetemp)
{
cout<<"当前没有客户信息。"<<endl;
return 0;
}
char line_num[10];
client *delnext ;
if(strcmp(clienttemp->id,id)==0)//要删除的节点为第一个时。。。
{
strcpy(line_num,clienttemp->line_num);
headclient->next=clienttemp->next;//删除节点的下一个连上headclient下一位
delete clienttemp;
while(airlinetemp)//修改对票客户所对应的航班的售票信息。
{
if(strcmp(line_num,airlinetemp->line_num)== 0 )
{
airlinetemp->left++;
break;
}
airlinetemp = airlinetemp->next;
}
cout<<"退票成功!希望有机会与您继续合作。";
cout<<endl;
return 1;
}
while(clienttemp->next)//要删除 的节点不是第一个时。。。
{
if(strcmp(clienttemp->next->id,id)==0)
{
strcpy(line_num,clienttemp->next->line_num);
delnext = clienttemp->next->next;//定义为删除节点的下一个
delete clienttemp->next; //删除
clienttemp->next=delnext; //链接
while(airlinetemp)//修改对票客户所对应的航班的售票信息。
{
if(strcmp(line_num,airlinetemp->line_num)== 0 )
{
airlinetemp->left++;
break;
}
airlinetemp = airlinetemp->next;
}
cout<<"退票成功!有机会继续合作。"<<endl<<endl;
return 1;
break;
}
clienttemp = clienttemp->next;
}
cout<<"未找到该客户的信息。"<<endl;
return 0;
}
main.cpp
#include "a.h"
#include <stdio.h>
//主函数
void main_menu()
{ system("color 0B");
cout<<"******************** 欢迎使用飞机售票系统************************"<<endl<<endl;
cout<<"** 1---- 录入航班信息。"<<endl<<endl;
cout<<"** 2---- 查询航线信息。"<<endl<<endl;
cout<<"** 3---- 客户订票。"<<endl<<endl;
cout<<"** 4---- 客户退票。"<<endl<<endl;
cout<<"** 5---- 输出所有航班信息。"<<endl<<endl;
cout<<"** 6---- 输出所有顾客信息。"<<endl<<endl;
cout<<"** 0---- 退出系统 。"<<endl<<endl;
cout<<"****************************************************************"<<endl<<endl;
}
void main()
{
printf(" ************* \n");
printf(" * * * * \n");
printf(" * * * * \n");
printf(" * ************** * \n");
printf(" * * * * \n");
printf(" * ******* * \n");
printf(" * * * * \n");
printf(" * ******* * \n");
printf(" ************* \n");
printf(" \n\n\n 正在加载 ING~~~ \n\n\n");
sleep1();
airlinehead *headline=new airlinehead;
headline->count=0; //航班数初始化
headline->next=NULL;
clienthead *headclient=new clienthead;
headclient->count=0; //客户数初始化
headclient->next=NULL;
while(1)
{
main_menu();
int n;
cout<<"请选择您要进行的操作: ";
cin>>n;
cout<<endl;
switch(n)
{
case 1:
int num;
cout<<"请选择您要录入的航班的数目: ";
cin>>num;
cout<<endl;
import(num,headline);
cout<<endl;
cout<<"航班信息成功录入。。";
cout<<endl<<endl;
sleep1();
break;
case 2:
airline *find;
find=query(headline);
if(find)
{
display_line(find);
}
sleep2();
break;
case 3:
bookticket( headline,headclient);
sleep1();
break;
case 4:
returnticket(headline,headclient);
sleep1();
break;
case 5:
display_all_line(headline);
sleep2();
break;
case 6:
display_all_client(headclient);
sleep2();
break;
case 0:
exit(1);
break;
}
}
}
void sleep1()
{
for(int j=0;j<70;j++)
{
Sleep(20);
printf(">");
}
system("cls");
}
void sleep2()
{
for(int j=0;j<70;j++)
{
Sleep(40);
printf(">");
}
system("cls");
}
操作页面
录入信息
安航班号查询航班信息
按起始地目的地查询航班信息
订票
查询航班信息
查询客户信息
退票