📄 1.cpp
字号:
if(ch!='#')
{
lines[i].replacehead->front=new replaceman;
lines[i].replacehead->rear=lines[i].replacehead->front;
replacep=lines[i].replacehead->front;
}
else
lines[i].replacehead->front=lines[i].replacehead->rear=NULL;
while(ch!='#')
{
f>>replacep->name>>replacep->bill[1]>>replacep->bill[2]>>replacep->bill[3];
replacep->next=NULL;
f.get(ch);
if(ch!='#')
{
replacep=new replaceman;
replacep->next=NULL;
lines[i].replacehead->rear->next=replacep;
lines[i].replacehead->rear=replacep;
}
}
f.close();
i++;
}
}
void returnbill(vector<airline> &lines)
{
string flightn;
string name;
cout<<"请输入航班号:";
cin>>flightn; //航班号
cout<<"请输入姓名:";
cin>>name; //姓名
int i=0;
int degreen[3]={1,6,11}; //几等舱位的第一个座位座号
orderman *orderp;
orderman *befororderp;
Orderbill *billp;
Orderbill *destroybill;
replaceman *replacep;
replaceman *beforreplace;
char ch;
int n,j,k,m;
int flag1=0,flag2=0; //标记是否找到航班号和客户姓名
while(i<lines.size())
{
if(lines[i].flightnumber==flightn) //退票
{
orderp=lines[i].orderhead;
if(orderp==NULL)
cout<<"此航班中无你订的票.\n";
else
{
while(orderp!=NULL)
{
if(orderp->name==name)
{
cout<<"你所订票的座号为:";
billp=orderp->billhead;
j=0;
do
{
cout<<billp->number<<" ";
billp=billp->next;
j++;
}while(billp!=NULL);
cout<<endl<<"是否要全部都退(Y/N):";
cin.get(ch);
ch=readchar();
if(ch=='y'||ch=='Y')
{
billp=orderp->billhead;
while(billp!=NULL)
{
destroybill=billp;
lines[i].seat[destroybill->number]=0;
billp=billp->next;
if(destroybill->number<=5)
{
lines[i].ordernumber[1]--;
lines[i].remainnumber[1]++;
}
else if(destroybill->number>5&&destroybill->number<=10)
{
lines[i].ordernumber[2]--;
lines[i].remainnumber[2]++;
}
else
{
lines[i].ordernumber[3]--;
lines[i].remainnumber[3]++;
}
delete destroybill;
}
if(orderp==lines[i].orderhead)
{
lines[i].orderhead=orderp->next;
delete orderp;
orderp=lines[i].orderhead;
}
else
{
befororderp->next=orderp->next;
delete orderp;
orderp=befororderp;
}
}//if(ch=='y'||ch=='Y')结束
else
{
cout<<"请输入要退的票数:";
n=judgeint();
while(n<0||n>j)
{
cout<<"输入有误请重新输入:";
n=judgeint();
}
billp=orderp->billhead;
for(j=0;j<n;j++)
{
destroybill=billp;
lines[i].seat[destroybill->number]=0;
billp=billp->next;
if(destroybill->number<=5)
{
lines[i].ordernumber[1]--;
lines[i].remainnumber[1]++;
}
else if(destroybill->number>5&&destroybill->number<=10)
{
lines[i].ordernumber[2]--;
lines[i].remainnumber[2]++;
}
else
{
lines[i].ordernumber[3]--;
lines[i].remainnumber[3]++;
}
delete destroybill;
}
orderp->billhead=billp;
}//else结束
flag1=1;
orderp=orderp->next;
}//if(orderp->name==name)结束
else
{
befororderp=orderp;
orderp=orderp->next;
}
}//while(orderp!=NULL)结束
if(flag1==0)
cout<<"此航班中无你订的票.\n";
else //处理候补
{
replacep=lines[i].replacehead->front;
if(lines[i].replacehead->front!=NULL)
{
while(replacep!=NULL)
{
if(replacep->bill[1]<=lines[i].remainnumber[1]&&replacep->bill[2]<=lines[i].remainnumber[2]
&&replacep->bill[3]<=lines[i].remainnumber[3])
{
befororderp=lines[i].orderhead;
while(befororderp->next!=NULL)
befororderp=befororderp->next;
orderp=new orderman;
orderp->name=replacep->name;
orderp->next=NULL;
orderp->billhead=new Orderbill;
billp=orderp->billhead;
m=0;
for(k=1;k<4;k++)
{
for(n=degreen[k-1],j=0;j<replacep->bill[k];n++)
{
if(lines[i].seat[n]==0)
{
lines[i].seat[n]=1;
if(m==0)
{
billp->seatdegree=k;
billp->number=n;
billp->next=NULL;
lines[i].ordernumber[k]++;
lines[i].remainnumber[k]--;
}
else
{
destroybill=new Orderbill;
destroybill->seatdegree=k;
destroybill->number=n;
destroybill->next=NULL;
billp->next=destroybill;
billp=destroybill;
lines[i].ordernumber[k]++;
lines[i].remainnumber[k]--;
}
j++;
m++;
}
}
}//for(int k=1;k<4;k++)结束
befororderp->next=orderp;
if(replacep==lines[i].replacehead->front)
{
if(replacep==lines[i].replacehead->rear)
lines[i].replacehead->rear=lines[i].replacehead->front=replacep->next;
else
lines[i].replacehead->front=replacep->next;
}
else if(replacep==lines[i].replacehead->rear)
lines[i].replacehead->rear=beforreplace;
else
beforreplace->next=replacep;
beforreplace=replacep;
replacep=replacep->next;
delete replacep;
}//if结束
else
{
beforreplace=replacep;
replacep=replacep->next;
}
}//while(replacep!=NULL)结束
}
}//else结束
}//else结束
flag2=1;
}//if(lines[i].flightnumber==flightn)结束
i++;
}//while(i<lines.size())
if(flag2==0)
cout<<"无此航班.\n";
}
void witerfile(vector<airline> lines) //写入文件
{
ofstream f;
orderman *orderp;
Orderbill *billp;
replaceman *replacep;
int i,j,n;
string file[]={"011.txt","012.txt","021.txt","022.txt","031.txt","032.txt","041.txt","042.txt","051.txt","052.txt"}; //储存已订票及等候替补客户信息的文件的文件名数组
f.open("airline.txt"); //写入航线信息的文件
if(f.fail())
{
cout<<"写入文件失败\n";
exit(1);
}
for(i=0;i<lines.size();i++)
{
f<<lines[i].end<<" "<<lines[i].flightnumber<<" "<<lines[i].aircraftnumber<<" "<<lines[i].week<<" ";
f<<lines[i].ordernumber[1]<<' '<<lines[i].ordernumber[2]<<' '<<lines[i].ordernumber[3]<<' ';
f<<lines[i].remainnumber[1]<<' '<<lines[i].remainnumber[2]<<' '<<lines[i].remainnumber[3]<<' ';
for(j=0;j<19;j++)
f<<lines[i].seat[j]<<' ';
if(i==lines.size()-1)
f<<lines[i].seat[j]<<'#';
else
f<<lines[i].seat[j]<<endl;
}
f.close();
i=0;n=0;
for(n=0;n<2*lines.size();n++)
{
f.open(file[n].c_str()); //写入已订票客户的信息
if(f.fail())
{
cout<<"写入文件失败\n";
exit(1);
}
orderp=lines[i].orderhead;
if(orderp==NULL)
f<<'#';
while(orderp!=NULL)
{ // cout<<orderp->name<<endl;
f<<orderp->name<<' '; //已订票客户的名字
billp=orderp->billhead; //此客户票的头指针
while(billp!=NULL)
{
f<<billp->seatdegree<<' '<<billp->number;
if(billp->next==NULL)
if(orderp->next!=NULL)
f<<'$'<<endl;
else
f<<'$';
else
f<<' ';
billp=billp->next;
}
if(orderp->next==NULL)
f<<'#';
orderp=orderp->next;
}
f.close();
n++;
f.open(file[n].c_str()); //写入等候替补客户的信息
if(f.fail())
{
cout<<"写入文件失败\n";
exit(1);
}
replacep=lines[i].replacehead->front;
if(replacep==NULL)
f<<'#';
while(replacep!=NULL)
{
f<<replacep->name<<' '<<replacep->bill[1]<<' '<<replacep->bill[2]<<' '<<replacep->bill[3];
if(replacep->next==NULL)
f<<'#';
else
f<<endl;
replacep=replacep->next;
}
f.close();
i++;
}
}
void menu()
{
cout<<" ┌───────────────────────────┐\n";
cout<<" │ *****请输入要操作的序号**** │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 1.**********查询航线 │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 2.**********承办订票业务 │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 3.**********承办退票业务 │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 0.**********退出系统 │\n";
cout<<" └───────────────────────────┘\n";
}
void main()
{
int n;
char ch;
vector<airline> lines; //航线信息向量
readfile(lines);
do{
do{
system("cls");
system("color 1e");
menu();
n=judgeint();
if(n<0||n>3)
cout<<"输入有误,请重新输入.";
}while(n<0||n>3);
switch(n)
{
case 1:
searchairline(lines,lines.size());
break;
case 2:
orderbill(lines);
break;
case 3:
returnbill(lines);
break;
case 0:
cout<<"谢谢使用......\n";
witerfile(lines);
exit(0);
}
cin.get(ch);
cout<<endl<<"请按任意键回到主菜单....\n";
cin.get(ch);
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -