代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAXSIZE 5
typedef struct passengernode{
char name[15];
int passengernode_amt;
struct passengernode*next;
}linklist;
typedef struct airline
{
char ter_name[15];
char tr_no[10];
char time[10];
char pri[7];
int tkt_amt;
int tkt_sur;
linklist*passengernode;
}lineinfo;
struct airline*start;
void display(struct airline*info)
{
printf("%8s\t%3s\t%s\t\t%4s\t%3d\t%10d\n",info->ter_name,info->tr_no,info->time,info->pri,info->tkt_amt,info->tkt_sur);
}
void list()
{
struct airline*info;
int i=0;
printf("终点站/t航班号\t起飞时间\t票价\t限定乘客\t剩余票量\n");
for(info=start;i<MAXSIZE;info++,i++)
{
display(info);
}
printf("\n\n");
}
void search()
{
struct airline*info;
char number[15];
int i;
info=start;
printf("请输入航班:");
scanf("%s",number);
for(i=0;i<MAXSIZE;info++,i++)
{
if(!strcmp(number,info->tr_no))
break;
}
if(i>=MAXSIZE)
{
printf("对不起,找不到这个航线没有\n");
}
else
{
printf("终点站/t航班号\t起飞时间\t票价\t限定乘客\t剩余票量\n");
display(info);
}
}
linklist*insertlink(linklist*head,int amount,char name[])
{
linklist*p1,*p2;
p1=head;
p2=(linklist*)malloc(sizeof(linklist));
if(!p2){
printf("\n溢出!\n");
return NULL;
}
strcpy(p2->name,name);
p2->passengernode_amt=amount;
p2->next=NULL;
if(head==NULL)
{
head=p2;
p2->next=NULL;
}
else{
head=p2;
}
p2->next=p1;
return head;
}
void order()
{
struct airline*info;
int i;
int amount;
char name[10];
char number[15];
info=start;
printf("请输入你所需要的航线:");
scanf("%s",number);
for(i=0;i<MAXSIZE;info++,i++)
{
if(!strcmp(number,info->tr_no))
break;
}
if(i>=MAXSIZE)
{
printf("对不起,找不到这个航线没有\n");
}
else{
printf("请输入你需要的票数:");
scanf("%d",&amount);
if(amount> info->tkt_amt)
{
printf("\n对不起,你输入的票数以超过限定成员!");
return;
}
if(amount<=info->tkt_sur)
{
int i;
printf("请输入你的名字:");
scanf("%s",name);
info->passengernode=insertlink(info->passengernode,amount,name);
for(i=0;i<amount;i++)
{
printf("%s座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1);
}
info->tkt_sur-=amount;
printf("\n祝你乘坐快乐\n");
}
else
{
printf("\n以满人\n");
}}}
void return_tkt()
{
struct airline*info;
linklist*p1,*s1,*head;
char aname[15];
head=info->passengernode;
p1=head;
printf("请输入你的名字:");
scanf("%s",aname);
while(p1!=NULL)
{
if(!strcmp(aname,p1->name))
{
break;
}
s1=p1;
p1=p1->next;
}
if(p1==NULL)
{
printf("对不起,你没订票\n");
return;
}
else
{
if(p1==head)
{
head=p1->next;
}
else
{
s1->next=p1->next;
}
info->tkt_sur+=p1->passengernode_amt;
printf("%s退票成功\n",p1->name);
free(p1);
}
info->passengernode=head;
}
int menu_select()
{
int c;
char s[40];
printf("\t订票系统\n");
printf("___________\n");
printf("1.查看航线信息\n");
printf("2.查询航线\n");
printf("3.订票\n");
printf("4.退票\n");
printf("5.退出系统\n");
printf("________\n");
do{
printf("请选择:");
scanf("%s",s);
c=atoi(s);
}while(c<1||c>5);
return c;
}
int main()
{
struct airline air[MAXSIZE]=
{
{"a","1","2000","860",30,30},
{"b","2","1000","750",30,30},
{"c","3","1500","650",20,20},
{"d","4","1100","520",40,40},
{"e","5","1600","450",10,10},
};
start=air;
for(;;)
{
system("cls");
switch(menu_select())
{
case 1:list();
break;
case 2:search();
break;
case 3:order();
break;
case 4:return_tkt();
break;
case 5:printf("\n感谢你的使用,再见\n");
exit(0);
}
printf("\n任意按键继续\n");
getch();
}
}