void return_tkt(){//退票模块
struct airline *info;
linklist *p1,*p2,*head;//客户指针
char cusname[10];//退票客户姓名
if(!(info=find())) return;//调用查询函数根据客户提供的航线进行搜索 info是指向这一条航线的指针 find可以输入航线
head=info->order;//指向这条航线里订票成功的乘客的指针
p1=head;
printf("请输入退票客户的姓名:");
scanf("%s",cusname);
while(p1!=NULL) {//根据客户提供的姓名到订票客户名单域进行查询
if(!strcmp(cusname,p1->name)) break;//用strcmp比较有匹配 名字相同可以删除
p2=p1;p1=p1->next;//p2一直是p1的前驱
}
if(p1==NULL) {
printf("对不起你没有订过票!\n"); //若未找到退出本模块
return;
} else
{ //若信息查询成功删除订票客户名单域中的信息
if(p1==head)
{
head=p1->next;
free(p1);
}//若删除的是头指针可以直接删除
else
{
p2=p1->next;
free(p1);
}//删除了p1 倒序 第一个订票的在底下
info->ticket_sur+=p1->order_amount;//改变余票量 余票量加上已经退了的p1
printf("成功退票!!\n");
}
}
上面的代码是一个实现退票模块的 C 语言函数。该函数定义了一些变量,并通过调用查询函数 find() 来搜索提供的航线。如果查询成功,函数会提示用户输入退票客户的姓名,并在订票客户名单中查找该客户。如果找到了客户,函数会删除订票客户名单中的客户信息,并将余票量增加已经退票的票数。
具体来说,函数首先定义了一个指向航线信息的指针 info,以及一个指向客户信息的指针 p1 和 p2。然后调用 find() 函数来查询客户提供的航线,并将查询结果存储在 info 指针中。如果 find() 函数返回了 NULL,说明查询失败,函数会退出。
否则,函数会提示用户输入退票客户的姓名,并遍历订票客户名单域(即 head 指针指向的链表),查找名字与用户输入的退票客户姓名匹配的客户信息。如果找到了匹配的客户,函数会删除该客户信息,并更新航线的余票量。