📄 airline.cpp
字号:
//数据结构 课程设计
/*
订票系统(A类)
功能要求:
(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
(4)退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
(5)修改航班信息:当航班信息改变可以修改航班数据文件
*/
#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
struct airticket
{
char IDcard[18]; //身份证号码 35058219880808853x
int num; //航班号
int day; //日期
char time[50]; //时间
char count[50]; //票数
char start[50]; //起飞城市
char ends[50]; //终点城市
airticket *next;
};
void main();
FILE *fp;
airticket * head=NULL;
void fn(); //输出功能函数声明
airticket * Create() //创建链表
{
int flag;
airticket * ps;
airticket * pEnd;
ps=new airticket; //给ps开辟空间
//
head=ps; //把ps 的地址赋给head,链表的首地址
//
cout<<"航班号:";
cin>>ps->num;
if (ps->num==0)
{
fn();
}
cout<<"日期:";
cin>>ps->day;
cout<<"时间: ";
cin>>ps->time;
cout<<"身份证号:";
cin>>ps->IDcard;
cout<<"票数: ";
cin>>ps->count;
cout<<"起点:";
cin>>ps->start;
cout<<"终点:";
cin>>ps->ends;
cout<<endl<<endl;
//cout<<"如果需要继续服务请按键选择,退出请按0!";
pEnd=ps;
ps=new airticket;
while(flag)
{
cout<<"航班号:";
cin>>ps->num;
flag=ps->num;
if(flag==0)
break;
//while(ps->num!=0)
// {
//if(head==NULL)
// head=ps;
//else
pEnd->next=ps;
pEnd=ps;
cout<<"日期: ";
cin>>ps->day;
cout<<"时间: ";
cin>>ps->time;
cout<<"身份证号:";
cin>>ps->IDcard;
cout<<"票数: ";
cin>>ps->count;
cout<<"起点:";
cin>>ps->start;
cout<<"终点:";
cin>>ps->ends;
ps=new airticket;
cout<<endl<<endl;
}
pEnd->next=NULL;
return head;
}
void Save(airticket * head1) //保存信息输出到磁盘文件上
{
if((fp=fopen("BookAirTicket.txt","ab"))==NULL) //ab 追加 向二进制文件尾增加数据
{
return;
}
for(;head1;head1=head1->next)
fwrite(head1,sizeof(struct airticket),1,fp);
fclose(fp);
}
void Book()//功能1:订票
{
airticket * head1=Create();
Save(head1);
}
void ReturnBook()//功能2:退票
{
airticket *tail, *temp=new airticket;
head=NULL;
if((fp=fopen("BookAirTicket.txt","rb"))==NULL) //rb 只读 //为输入打开一个二进制文件
{
//system("cls");
printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
getchar();
fn();
}
while((fread(temp,sizeof(airticket),1,fp))==1)
{
if(head==NULL)
{
head=tail=temp;head->next=NULL;
}
else
{
temp->next=NULL;
tail->next=temp;
tail=temp;
}
temp=new airticket;
}
fclose(fp);
int num;
if(!head)
{
cout<<"\n数据为空!\n";
return;
}
temp=tail=head;
cout<<"请输入想退机票的航班号:";
cin>>num;
int tip=0;
temp=tail=head;
for(;tail;tail=tail->next)
{
if(head->num==num)
{
head=tail->next;
cout<<"你已经成功完成退票"<<endl;
tip=1;
}
else
if(tail->num==num)
{
temp->next=tail->next;
cout<<"你已经成功完成退票"<<endl;
tip=1;
}
}
if (tip==0)
{
cout<<"退票失败! 没有你所查找的信息!"<<endl;
}
if((fp=fopen("BookAirTicket.txt","wb"))==NULL) //只写 为输出打开一个二进制文件
return;
for(;head;head=head->next)
fwrite(head,sizeof(airticket),1,fp);
fclose(fp);
}
void watch()//功能3:查看信息
{
airticket *tail, *temp=new airticket;
head=tail=NULL;
int flag=1;
if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
{
//system("cls");
printf("出错,请检查文件是否存在,按任意键返回主菜单\n");//出错提示
main();
}
while((fread(temp,sizeof(struct airticket),1,fp))==1)
{
if(head==NULL)
{
head=tail=temp;
head->next=NULL;
}
else
{
temp->next=NULL;
tail->next=temp;
tail=temp;
}
cout<<endl;
cout<<"航班号:"<<tail->num<<endl;
cout<<"日期:"<<tail->day<<endl;
cout<<"时间:"<<tail->time<<endl;
cout<<"身份证号:"<<tail->IDcard<<endl;
cout<<"票数:"<<tail->count<<endl;
cout<<"起点站:"<<tail->start<<endl;
cout<<"终点站:"<<tail->ends<<endl;
temp=new airticket;
}
if(!head)
{
cout<<"\n数据为空!\n";
return;
}
delete tail,temp;
fclose(fp);
}
void search_num()//查找航班号
{
int num;
int k=0;
airticket *tail, *temp=new airticket;
head=NULL;
if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
{
printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
getchar();
fn();
}
while((fread(temp,sizeof(airticket),1,fp))==1)
{
if(head==NULL)
{
head=tail=temp;
head->next=NULL;
}
else
{
temp->next=NULL;
tail->next=temp;
tail=temp;
}
temp=new airticket;
}
cout<<"请输入所要查找航班号:"<<endl;
cin>>num;
if(head==NULL)
{
printf("数据为空!");
fn();
}
for(;head;head=head->next)
if(head->num==num)
{
cout<<endl<<"找到相匹配的信息"<<endl;
cout<<"航班号是:"<<head->num<<","<<"日期是:"<<head->day<<",";
cout<<"时间是(星期):"<<head->time<<",";
cout<<"身份证号是:"<<head->IDcard<<","<<"票数是:"<<head->count<<",";
cout<<"起点站是:"<<head->start<<","<<"终点站是:"<<head->ends<<endl;
k=1;
}
while (!k)
{
cout<<"没有你所查找的信息!"<<endl;break;
}
delete tail,temp;
fclose(fp);
loop :cout<<endl<<"是否继续? 是请按'1',否请按(0)."<<endl;
cin>>k;
switch(k)
{
case 1:
search_num();break;
case 0:
fn();break;
default:
cout<<"按键错误!请重新按键!"<<endl;
goto loop;break;
}
}
void search_day()//查找航班日期
{
int day,m=0;
airticket *tail, *temp=new airticket;
head=NULL;
if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
{
cout<<"出错,请检查文件是否存在,按任意键返回主菜单"<<endl;//出错提示
getchar();
fn();
}
while((fread(temp,sizeof(airticket),1,fp))==1)
{
if(head==NULL)
{
head=tail=temp;
head->next=NULL;
}
else
{
temp->next=NULL;
tail->next=temp;
tail=temp;
}
temp=new airticket;
}
cout<<"请输入所要查找的飞行日期:"<<endl;
cin>>day;
if(head==NULL)
{
cout<<endl;
cout<<"数据为空!"<<endl;
fn();
}
for( ; head; head=head->next)
if(head->day==day)
{
cout<<endl<<"找到相匹配的信息"<<endl;
cout<<"航班号是:"<<head->num<<","<<"日期是:"<<head->day<<",";
cout<<"时间是:"<<head->time<<",";
cout<<"身份证号:"<<head->IDcard<<","<<"票数是:"<<head->count<<",";
cout<<"起点站是:"<<head->start<<","<<"终点站是:"<<head->ends<<endl<<endl;
m=1;
}
while (!m)
{
cout<<"没有你所查找的信息!"<<endl;
m=0;
break;
}
delete tail,temp;
fclose(fp);
loop:cout<<endl<<"是否继续?是(按1),否(按0):"<<endl;
cin>>m;
switch(m)
{
case 1:
search_day();break;
case 0:
fn();break;
default:
cout<<"按键错误!请重新按键!"<<endl;
goto loop;
break;
}
}
void searchticket() //功能4:查询航线
{
int i;
cout<<"请选择按键 "<<endl;
cout<<endl<<"按航班号查询请按(1),按日期查询请按(2),返回请按(0)."<<endl;
cin>>i;
switch(i)
{
case 1:
search_num();break;
case 2:
search_day();break;
case 0:
fn();break;
default:cout<<"按键错误!请重新按键!"<<endl;
}
fn();
}
void change()//功能5:修改航班信息(当修改信息不存在时,不运行)
{
int num,k=1;
int i=0;
airticket temp;
if((fp=fopen("BookAirTicket.txt","rb+"))==NULL)
{
printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
}
cout<<"请输入所要修改的航班号:"<<endl;
cin>>num;
while((fread(&temp,sizeof(airticket),1,fp))==1)
{
i++;
if(temp.num==num)
{
cout<<"修改航班号\""<<num<<"\"的航班信息"<<endl;
cout<<"修改后航班号是:";
cin>>temp.num;
cout<<"修改后日期是:";
cin>>temp.day;
cout<<"修改后时间是:";
cin>>temp.time;
cout<<"修改后的身份证号:";
cin>>temp.IDcard;
cout<<"修改后票数是:";
cin>>temp.count;
cout<<"修改后起点站是:";
cin>>temp.start;
cout<<"修改后终点站是:";
cin>>temp.ends;
fseek(fp,(i-1)*sizeof(airticket),0); //fseek(文件类型指针,位移量,起始点)
fwrite(&temp,sizeof(airticket),1,fp);
fseek(fp,0,0);
k=0;
break;
}
}
if (k)
{
cout<<endl<<"没有你所查找的信息!"<<endl;
}
fclose(fp);
}
void fn() //输出信息函数
{
int i=1;
while(i)
{
cout<<endl<<endl; //打印提示信息
cout<<" ★★★★★服务信息★★★★★ "<<endl<<endl;
cout<<" ※1 订购机票(航班号为0结束输入) ※"<<endl;
cout<<" ※2 返退机票 ※"<<endl;
cout<<" ※3 查看订票信息 ※"<<endl;
cout<<" ※4 查询航班信息 ※"<<endl;
cout<<" ※5 修改航班信息 ※"<<endl;
cout<<" ※0 结束服务 退出系统 ※"<<endl;
cout<<"请选择按键(0-5):";
cin>>i;
cout<<endl;
//if(i>=0 && i<=5)
//{
switch(i)
{
case 0:
exit(0);
case 1:
Book();break; //进入定票系统
case 2:
ReturnBook();break; //进入退票系统
case 3:
watch();break; //查看定票信息
case 4:
searchticket();break; //查询航班信息
case 5:
change();break; //修改航班
//case 6:
// cout<<"谢谢使用! "<<endl;
// break;
default:
cout<<"按键错误!请重新按键!"<<endl;
}
//}
// else
// cout<<"按键错误!请重新按键!"<<endl;
//cout<<endl;
}
}
//主函数
void main()
{
system("color 1f");
system("title **欢迎进入中国民航管理系统**"); //指定命令提示窗口的标题
int j=1;
while(j)
{
cout<<" $---------------------------------$"<<endl;
cout<<" | |"<<endl;
cout<<" | **欢迎进入中国民航管理系统** |"<<endl;
cout<<" | |"<<endl;
cout<<" @---------------------------------@"<<endl<<endl;
//cout<<"管理员进入请按1,客户进入请按2: "<<endl;
//cin>>j;
//if(j>=1&&j<=2)
//{
// switch(j)
// {
// case 1:
//{
// char f[]="2005"; //设置密码
// printf("请输入密码并以回车键结束(密码是2005):\n\n");
// scanf("%s",f); //读取密码
// if(strcmp(f,"2005")==0)
fn();//密码正确是时进入系统
// else
// cout<<"密码错误!请重新选择按键!"<<endl;
//};break;
// case 2:
// {
// cout<<"^_^客户能查看和查询航空信息^_^"<<endl;
// cout<<endl<<"按1查看信息,按2查询信息:";
//
// int m;
// cin>>m;
// if(m>=1&&m<=2)
// {
// switch(m)
// {
// case 1:
// watch();break;
// case 2:
// {
// int num;
// int k=1;
// airticket *tail, *temp=new airticket;
// head=NULL;
// if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
// {
// printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
// getchar();
// fn();
// }
// while((fread(temp,sizeof(airticket),1,fp))==1)
// {
// if(head==NULL)
// {
// head=tail=temp;head->next=NULL;
// }
// else
// {
// temp->next=NULL;
// tail->next=temp;
// tail=temp;
// }
// temp=new airticket;
// }
// cout<<endl<<"请输入所要查找航班号:"<<endl;
// cin>>num;
// if(head==NULL)
// {
// printf("没有你所查找的信息!");fn();
// }
// for(;head;head=head->next)
// if(head->num==num)
// {
// cout<<endl<<"找到相匹配的信息"<<endl;
// cout<<"航班号是:"<<head->num<<","<<"日期是:"<<head->day<<",";
// cout<<"时间是(星期):"<<head->time<<",";
// cout<<"身份证号是:"<<head->IDcard<<","<<"票数是:"<<head->count<<",";
// cout<<"起点站是:"<<head->start<<","<<"终点站是:"<<head->ends<<endl;
// }
// delete tail,temp;
// fclose(fp);
// cout<<endl<<"是否继续?是请按1,否请按2."<<endl;
// cin>>k;
// switch(k)
// {
// case 1:
// search_num();break;
// case 2:
// main();break;
// default:cout<<"按键错误!请重新按键!"<<endl;
// }
// };break;
// }
// }
// else
// {
// cout<<"按键错误!请重新选择按键!"<<endl;
// };
// }
// break;
// }
//}
//
// else
// {
// cout<<"按键错误!请重新选择按键!"<<endl;
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -