数据结构课程设计
cout<<\├───┼───┼───┼───┼────┼───┼───┤\ } }
p1=p1->Next; }
cout<<\└───┴───┴───┴───┴────┴───┴───┘\
cout<<\按任意键返回子菜单...\ getch(); }
//-----------------退票办理函数----------------- void Sub3Menu() {
int Flight_No=0,flag=0; //记录满足条件的航线的定票结点 Flight *p1; //记下满足条件的航线结点地址 Customer *p2,*p4; //临时性定票乘员结点 Replace *p3,*p5; //临时性候补乘员结点 char answer[7],name[7]; //用户输入的航班数据
int tag=0; //若第二乘客满足条件,则它的首地址会发生冲突,注意此处
int Seat_No; //记录座位号 if(Empty_Flight()) //航班线为空 return;
prefix(\退票办理\
36
数据结构课程设计
if(IsEmpty) {
cout<<\对不起,系统中暂时无定票乘客...\ getch(); return; } while(1) {
flag=0; tag=0; Flight_No=0; prefix(\退票办理\
cout<<\请输入航班号:\ cin>>answer;
if(Find_Line(Head,answer,p1,Flight_No)) //航线存在 {
p2=p1->CustName; //指向该航线的乘客名单的首地址 cout<<\请输入您的姓名:\ cin>>name;
if(p2==NULL) //该航线无定票乘客 {
cout<<\很抱歉,该航线暂时无人定票,无法进行退票操作.\
if(Continue()=='n')//是否继续操作 return;
37
数据结构课程设计
else
continue; //提前结束本次循环,重新进行退票处理 }
else
while(p2!=NULL)//查找有无此乘客名 {
if(strcmp(p2->Name,name)==0)//功能会转变
{
if(p2==p1->CustName) // {
prior=p1->CustName; // Seat_No=p2->Seat_No; flag=1; break; } }
else if(p2->Next!=NULL)// {
if(strcmp(p2->Next->Name,name)==0) {
tag=1; // prior=p2; //以作删除操作
Seat_No=p2->Next->Seat_No;
此外括号不能省略,否则若为首位乘客满足 记录指针 记录满足航线的的前结点地址 特别注意此处
记录满足定乘客的前一地址,38
数据结构课程设计
flag=1; break; } }
p2=p2->Next; //指向下一乘客结点 }//while if(!flag)
cout<<\很抱歉,该航线无此乘客,请查证后再操作...\ }//存在该航线 else
cout<<\对不起,没有该次航班,按任意继续操作.\//没有该次航线 if(flag) {
if(prior==p1->CustName&&!tag) //首结点满足条件且一个乘客,则该航线定票乘客置空 {
if(prior->Next==NULL) //仅一乘客,头指针置空 {
p1->Free_Amount+=prior->Amount; p1->CustName=NULL; } else {
39
数据结构课程设计
p1->Free_Amount+=prior->Next->Amount; p1->CustName=prior->Next; //指向下一乘客结点 } } else {
p1->Free_Amount+=prior->Next->Amount; prior->Next=prior->Next->Next; //删除操作 }
Customer_Count--; if(Customer_Count==0) IsEmpty=1; }
if(flag)//存在退票操作 {
p3=p1->ReplName; while(p3!=NULL) {
if(p3->Amount<=p1->Free_Amount)//候补乘客的定票数小于或等于剩余票数 {
cout<<\候补乘员\已经列入定票乘客名单中...\\n\
p4=Custp1[Flight_No]->Next=new Customer; p4->Next=NULL;
40