📄 flight.cpp
字号:
#include "flight.h"
flight::flight()//初始化
{
char sa[N][20]={"南京","杭州","天津","上海","广州"}; //始发站
char ea[N][20]={"北京","南京","武汉","北京","天津"}; //终点站
char date[N][20]={"12.31","1.2","1.3","1.5","1.7"}; //日期
int fnum[N]={1001,1002,1003,1004,1005},tic[N]={11,42,32,34,12};//航班号
int length=N;
int size=10;
int i,kk;
for(i=0;i<N;i++)
{
strcpy((fl[i]).staAddr,sa[i]);
strcpy((fl[i]).endAddr,ea[i]);
strcpy((fl[i]).date,date[i]);
(fl[i]).booked=0;
(fl[i]).ticket=tic[i];
(fl[i]).flightnum=fnum[i];
(fl[i]).cusnum=0;
(fl[i]).waitnum=0;
}
}
void flight::printall(int *length)//打印所有航班信息
{
int i;
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 显示所有航班信息 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
printf("\t航班号 起点站 终点站 日期 乘员定额 已售票数 剩余票数\n\n");
for(i=0;i<(*length);i++)
{
printf("\t%-6d",(fl[i]).flightnum);
printf(" %-7s",(fl[i]).staAddr);
printf(" %-7s",(fl[i]).endAddr);
printf(" %-6s",(fl[i]).date);
printf(" %-8d",(fl[i]).ticket);
printf(" %-8d",(fl[i]).booked);
printf(" %-6d",(fl[i]).ticket-(fl[i]).booked);
printf("\n");
}
printf("\n\n\t按任意键返回主菜单\n");
getch();
}
int flight::findflight(int n,int *length)//根据航班号找出该航班
{
int i;
for(i=0;i<*length;i++)//length:航班总数
if (fl[i].flightnum==n)
return i;
return 999;//未找到
}
void flight::printselect(int i,int n)//打印航班号为n的航班
{
printf("\n\t\t\t%d 航 线 信 息\n\n",n);
printf(" 航班号 起点站 终点站 日 期 乘员定额 已售票数 剩余票数\n\n");
printf(" %-5d",(fl[i]).flightnum);
printf(" %-5s",(fl[i]).staAddr);
printf(" %-5s",(fl[i]).endAddr);
printf(" %-6s",(fl[i]).date);
printf(" %-8d",(fl[i]).ticket);
printf(" %-8d",(fl[i]).booked);
printf(" %-6d",(fl[i]).ticket-(fl[i]).booked);
printf("\n");
}
void flight::booktic(int *length) //显示订票系统
{
int i=0,n=0,t=999,pn=0,kk=0; //n:航班号t:输入航班号,pn:欲订票数
char na[10],key;
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 订 票 系 统 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
while(1)
{
printf("\t请输入航班号(现有航班为1001~1005):\n");
scanf("%d",&n);
t=findflight(n,length);
if(t==999)
{
printf("\n\t没有找到您所要的航班号,请重新输入\n");
continue;
}
printselect(t,n);
printf("\n\t请输入您的姓名和所需的票数: ");
printf("\n\t姓名:");
scanf("%s",na);
printf("\n\t票数(输入0取消订票):");
scanf("%d",&pn);
if(pn==0)
{
printf("取消订票");
break;
}
if(pn<=(fl[t].ticket-fl[t].booked)&&n>=1)//检查订票数量数是否符合要求
{
fl[t].cusnum++;//订票人数+1
int ztemp=fl[t].cusnum;
strcpy(fl[t].next[ztemp-1].customer,na);//记录订票人信息
fl[t].next[ztemp-1].num=pn;
fl[t].booked+=pn;
printf("\n\t%s,恭喜您订票成功!\n",na);
getch();
return;
}
else
{
printf("\n\tSorry,没有足够的机票\n 按<Y> 重新输入 按<W>候票 按<N>返回\n");
do
{
key=getch();
}while(key!='Y'&&key!='y'&&key!='n'&&key!='N'&&key!='W'&&key!='w');
}
if(key=='Y'||key=='y')//重新输入
continue;
else if(key=='W'||key=='w')//候票
{
for(int kk=0;kk<fl[t].waitnum;kk++)
;
fl[t].waitnum++;
strcpy(fl[t].people[kk],na);
printf("\n\t%s,已排入候票队列,请耐心等候!\n",na);
getch();
return;
}
else if(key=='N'||key=='n')
{
return;//返回
}
else
{
printf("\n\tsorry,订票失败!");
return;
}
}
}
int flight::findname(flightdetail *m,char na[])
{
for(int i=0;i<10;i++)
{
if(strcmp(m[i].customer,na)==0)
return i;
}
return 999;
}
void flight::returntic(int *length)
{
int i=0,n=0,t=999,pn=0;
int temp,itemp;
char na[10],key;
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 退 票 系 统 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
while(1)
{
printf("\nStep1.请输入航班号:");
scanf("%d",&n);
t=findflight(n,length);
if(t==999)
{
printf("\n航班号未找到,按<Y>重新输入 或 按<N>返回");
do
{
key=getch();
}
while(key!='Y'&&key!='y'&&key!='n'&&key!='N');
if(key=='n'||key=='N')
{
getch();
return;
}
else
{
system("cls");
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 退 票 系 统 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
continue;
}
}
printf("Step2.姓名:");
scanf("%s",na);
temp=findname(fl[t].next,na);
if(temp==999)
{
printf("\n没有找到您的信息!\n 按<Y>重新输入 按<N>返回");
do
{
key=getch();
}
while(key!='Y'&&key!='y'&&key!='n'&&key!='N');
if(key=='n'||key=='N')
{
getch();
return;
}
else
{
system("cls");
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 退 票 系 统 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
continue;
}
}
printf("\n\t航班号 起始站 终点站 姓 名 所订票数 ");
printf("\n\t %-5d %-10s %-10s %-10s %-10d",fl[t].flightnum,fl[t].staAddr,
fl[t].endAddr,fl[t].next[temp].customer,fl[t].next[temp].num);
printf("\nStep3.需要退的票数:");
scanf("%d",&pn);
if(pn>fl[t].next[temp].num||pn<1)
{
printf("\n所输入的票数不对\n\t按 <Y> 重新输入 按 <N>返回");
do
{
key=getch();
}
while(key!='Y'&&key!='y'&&key!='n'&&key!='N');
if(key=='n'||key=='N')
{
printf("\n\t退票失败!\n");
getch();
return;
}
else
{
system("cls");
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 退 票 系 统 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
continue;
}
}
fl[t].next[temp].num -=pn ;
printf("\n%s,您已经成功退了 %d 张票 \n \n\t按任意键返回",fl[t].next[temp].customer,pn);
if(fl[t].next[temp].num==0)//退了全部的票,将该退票人信息删除
{
itemp=fl[t].cusnum-1;
if(itemp!=temp)
{
strcpy(fl[t].next[temp].customer,fl[t].next[itemp].customer);
fl[t].next[temp].num=fl[t].next[itemp].num;
}
fl[t].cusnum--;
}
fl[t].booked-=pn;
getch();
//补票
int Rest=fl[t].ticket-fl[t].booked;
int ticketnum=0;
for(int kk=0;kk<fl[t].waitnum && Rest>0;kk++)//fl[t].waitnum是总候票人数
{
strcpy(na,fl[t].people[kk]);
printf("\n\t %s 有票了!",na);
printf("请输入所需的票数(1~%d),按0放弃订票:",Rest);
scanf("%d",&ticketnum);
if(ticketnum==0)
continue;
int flag=1;
while(flag)
{
if(ticketnum<=Rest && ticketnum>0)//满足补票要求
{//补票操作
flag=0;
Rest-=ticketnum;
int jtemp=fl[t].cusnum;
strcpy(fl[t].next[jtemp].customer,na);
fl[t].next[jtemp].num=ticketnum;
fl[t].cusnum++;
fl[t].booked+=pn;
fl[t].waitnum--;
printf("\n%s,恭喜您订票成功!\n",na);
getch();
break;
}
else//补票不成功
{
printf("\n\tsorry:您所输入的票数不正确,请重新输入(输入0表示取消定票)\n");
scanf("%d",&ticketnum);
if(ticketnum==0)//
{
flag=0;
break;
}
}
}
}
break;
}
}
void flight::search(int *length)
{
int ff=0,i;
char na[10];
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 显示我的航班信息 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
printf("\n\t输入您的姓名:");
scanf("%s",na);
for(i=0;i<*length;i++)//*length表示总航线数
{
for(int j=0;j<fl[i].cusnum;j++)//fl[i].cusnum是该i条航线的总订票人数
{
if(strcmp(fl[i].next[j].customer,na)==0)
{
printf("\n\n\n\t航班号 起点站 终点站 时间 姓名 票数\n\n");
printf("\t%-10d",(fl[i]).flightnum);
printf(" %-10s",(fl[i]).staAddr);
printf(" %-10s",(fl[i]).endAddr);
printf(" %-10s",(fl[i]).date);
printf(" %-10s",na);
printf(" %-4d\n",fl[i].next[j].num);
ff++;
}
}
}
if(ff==0)
printf("\n\t没有找到您需要的航班\n");
printf("\n\t按任意键返回");
getch();
}
void flight::FlightSearch(int *length)
{
int n;
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 航 班 查 询");
printf("\n\t\t\t* * * * * * * * * *\n\n");
printf("\n\t输入航班号:");
scanf("%d",&n);
printf(" 航班号 起点站 终点站 日 期 乘员定额 已售票数 剩余票数\n\n");
int ff=0;
for(int i=0;i<*length;i++)
{
if(fl[i].flightnum -n==0)
{
printf(" %-5d",(fl[i]).flightnum);
printf(" %-5s",(fl[i]).staAddr);
printf(" %-5s",(fl[i]).endAddr);
printf(" %-6s",(fl[i]).date);
printf(" %-8d",(fl[i]).ticket);
printf(" %-8d",(fl[i]).booked);
printf(" %-6d",(fl[i]).ticket-(fl[i]).booked);
ff++;
}
}
if(ff==0)
printf("\n\t没有找到您需要的航班\n");
printf("\n\t按任意键返回");
getch();
}
void flight::create(int *length)
{
char sa[20],ea[20],date[20],password[]="123456",pa[7],key;
int m,n,i;
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 增 加 航 班 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
int checkTimes = 1;
printf("\n\t输入密码:");
while(1)
{
for(i=0;i<7;i++)
{
pa[i]=getch();
if(pa[i]=='\r')//\r是回车符
{
pa[i]='\0';
break;
}
printf("*");
}
if(strcmp(password,pa)==0)
{
printf("\n\n\t密码正确!\n");
break;
}
else
{
printf("\n\t密码错误\n\t按<Y>重新输入 按<N>返回\n");
do
{
key=getch();
}
while(key!='Y'&&key!='y'&&key!='n'&&key!='N');
if(key=='n'||key=='N')
{
getch();
return;
}
else if (checkTimes < 3)
{
printf("\n\t您还有%d次机会\n", (3-checkTimes));
printf("\t输入密码:");
checkTimes++;
continue;
}
else
{
printf("\n\t密码输入次数已达到最大\n");
printf("\n\t按任意键返回");
getch();
return;
}
}
}
printf("\n\t输入航班号:");
scanf("%d",&n);
printf("\n\t输入起点站:");
scanf("%s",sa);
printf("\n\t输入终点站:");
scanf("%s",ea);
printf("\n\t输入日期:");
scanf("%s",date);
printf("\n\t输入票数:");
scanf("%d",&m);
//添加新航班信息
strcpy(fl[*length].staAddr,sa);
strcpy(fl[*length].endAddr,ea);
fl[*length].flightnum=n;
strcpy(fl[*length].date,date);
fl[*length].ticket=m;
fl[*length].booked=0;
fl[*length].cusnum=0;
printf("\n");
printselect(*length,n);
printf("\n\t按任意键返回\n");
(*length)++;//总航班数+1
getch();
}
void flight::deleteflight(int *length)//删除航线
{
char password[]="123456",pa[7],key;
int n,i,kk,j;
printf("\n\t\t\t* * * * * * * * * *");
printf("\n\t\t\t 删 除 航 班 ");
printf("\n\t\t\t* * * * * * * * * *\n\n");
int checkTimes = 1;
printf("\n\t输入密码:");
while(1)
{
for(i=0;i<7;i++)
{
pa[i]=getch();
if(pa[i]=='\r')//回车符
{
pa[i]='\0';
break;
}
printf("*");
}
if(strcmp(password,pa)==0)
{
printf("\n\n\t密码正确!\n");
break;
}
else
{
printf("\n\t密码错误\n\t按<Y>重新输入 按<N>返回\n");
do
{
key=getch();
}
while(key!='Y'&&key!='y'&&key!='n'&&key!='N');
if(key=='n'||key=='N')
{
printf("\n\t按任意键返回");
getch();
return;
}
else if (checkTimes < 3)
{
printf("\n\t您还有%d次机会\n", (3-checkTimes));
printf("\t输入密码:");
checkTimes++;
continue;
}
else
{
printf("\n\t密码输入次数已达到最大\n");
printf("\n\t按任意键返回");
getch();
return;
}
}
}
printf("\n\t输入航班号:");
scanf("%d",&n);
const int ft=findflight(n,length);
if(ft==999)
{
printf("\n\t没有找到航班,按任意键返回");
getch();
}
else
{
printf("\n\t确定要删除航班%d吗?按<Y>删除",n);
char ch=getch();
if(ch=='Y'||ch=='y')
{
const int l=(*length)-1;
if (ft!=l)//ft是要删除的航线,l是最后一条航线;将最后一条航线往前复制
{
fl[ft].flightnum=fl[l].flightnum;
fl[ft].booked=fl[l].booked;
fl[ft].cusnum=fl[l].cusnum;
fl[ft].waitnum=fl[l].waitnum;
strcpy(fl[ft].date,fl[l].date);
strcpy(fl[ft].endAddr,fl[l].endAddr);
for (int j=0;j<fl[l].cusnum;j++)
{
strcpy(fl[ft].next[j].customer,fl[l].next[j].customer);
}
fl[ft].next->num=fl[l].next->num;
for (j=0;j<fl[l].waitnum;j++)
{
strcpy(fl[ft].people[j],fl[l].people[j]);
}
strcpy(fl[ft].staAddr,fl[l].staAddr);
fl[ft].ticket=fl[l].ticket;
}
(*length)--;//总航线数-1
printf("\n\n\t已成功删除航班%d",n);
}
}
printf("\n");
printall(length);//打印所有航线
}
//void flight::help()
//{
// printf("\n\t\t\t* * * * * * * * * *");
// printf("\n\t\t\t 帮 助");
// printf("\n\t\t\t* * * * * * * * * *\n\n");
//
// printf("\n\n\t\t 1.本次共有 1001--1005 航班\n");
// printf("\n\t\t 2.日期输入格式为"月.日"\n");
// printf("\n\t\t 3.为了照顾他人,请按需订票");
// printf("\n\t\t 如有其他疑问其咨询服务台\n");
// printf("\n\t\t 祝您旅途愉快!\n");
// printf("\n\t\t 按任意键返回\n");
// getch();
//
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -