飞机购票系统

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 8
typedef struct guke
{
  char name[20];//客户信息
  int tempnumber;//订票量
  struct guke *next;
}linklist;
typedef struct airline
{
  char zanname[20];//终点站名
  char hangnum[20];//航班号
  char planenum[20];//飞机号
  char day[7];//飞行日期
  int allnum;//乘员定额
  int restnum;//余票数量
  linklist *order;//乘员名单域
}airmation;
void display(airmation *air)//打印
{
printf("%8s\t%3s\t%6s\t%6s\t%7d\t%8d\n",air->zanname,air->hangnum,air->planenum,air->day,air->allnum,air->restnum);
}
void list(airmation *air)//打印全部航线信息
{
  int i=0;
  printf("  终点站      航班号  飞机号 飞行日期  乘员定额余票额数\n");
  while(i<maxsize)
  {
 display(air);
 air++;
      i++;
  }
  printf("\n\n");
}
void search(airmation *air)//根据客户提供的终点站名输出航线信息
{
   struct airline *find();
  char name[20];
  int i=0;
  printf("请输入终点站名:");
  scanf("%s",name);
  while(i<maxsize)
  {
    if(!strcmp(name,air->zanname)) break;
  air++;
  i++;
  }
 if(i>=maxsize)
printf("对不起没有航班");
     else
{
 printf("   终点站     航班号  飞机号 飞行日期 乘员定额余票额数\n");
 display(air);
}
}
struct airline *find(airmation *air)//根据系统提供的航班号查询
{
  char number[10];
  int i=0;
  printf("请输入航班班次:");
  scanf("%s",number);
  while(i<maxsize)
  {
    if(!strcmp(number,air->hangnum)) return air;
air++;
i++;
  }
  printf("对不起没有航班");
  return NULL;
}
void prtlink(airmation *air)//打印订票乘员名单域的客户名单信息
{
  linklist *p;
  air=find(air);
  p=air->order;
  if(p!=NULL)
  {
    printf("客户名字    机票数\n");
while(p)
{
 printf("%s\t\t%d\n",p->name,p->tempnumber);
 p=p->next;
}
  }
  else printf("航班没有乘客信息");
}
linklist *insertlink(linklist *head,int amount,char name[])//增加订票乘员名单域的客户信息
{
  linklist *ne;
  ne=(linklist*)malloc(sizeof(linklist));
  strcpy(ne->name,name);
  ne->tempnumber=amount;
  ne->next=NULL;
  if(head==NULL)
  {
    head=ne;
  }
  else
    {
    ne->next=head;
    head=ne;
    }
    return head;
}
void order(airmation *air)//办理订票业务
{
  int amount;
  char name[20];
  if(!(air=find(air))) return;
  printf("请您输入想要订的票量:");
  scanf("%d",&amount);
  if(air->restnum!=0)
    {int i;
printf("请输入您的名字:");
scanf("%s",name);
printf("请订票,请付款...\n");
air->order=insertlink(air->order,amount,name);
printf("%s的座位号是:%d\n",name,40-air->restnum);
air->restnum--;
printf("\n 祝您旅途愉快!\n");
    }
    else
    {
        printf("对不起,票已售完!\n");
    }


}
void return_tkt(airmation *air)//办理退票业务
{
  linklist *p1,*p2,*head;
  char  cusname[20];
  if(!(air=find(air))) return;
  head=air->order;
  p1=head;
  printf("输入您的名字:");
  scanf("%s",cusname);
  while(p1!=NULL)
  {
    if(!strcmp(cusname,p1->name))
break;
p2=p1;
p1=p1->next;
  }
  if(p1==NULL)
  {
    printf("对不起,您没有订票!\n");
return;
  }
  else
  {
    if(p1==head)
  head=p1->next;
    else
  p2->next=p1->next;
air->restnum+=p1->tempnumber;
printf("%s 退票成功!\n",p1->name);
free(p1);
  }


}
int menu_select()//菜单界面
{
  int c;
  char s[20];
printf("*******************************************************************************\n");
printf("**                        欢迎进入武汉航空旅客服务系统                       **\n");
printf("**                             1.显示航班信息                                **\n");
printf("**                             2.打印订票乘客信息                            **\n");
printf("**                             3.航班查询业务                                **\n");
printf("**                             4.航班订票业务                                **\n");
printf("**                             5.航班退票业务                                **\n");
printf("**                             6.退出系统                                    **\n");
printf("*********************************************************************************");
printf("*********************************************************************************");
  do{
      printf("                            请选择您需要的业务:");
      scanf("%s",s);
      c=atoi(s);
    }
   while(c<0||c>7);
   return c;
}
int main()
{
 printf("******************************************************************************\n");
 printf("**                           制作信息简介                                   **\n");
 printf("**                        学院:计算机与信息工程学院                        **\n");
 printf("**                        专业:计算机科学与技术                            **\n");
 printf("**                        班级:计科2班                                     **\n");
 printf("**                        姓名:XXX                                    **\n");
 printf("**                        学号:1604845028                                  **\n");
 printf("**                        指导老师:XXX                               **\n");
 printf("******************************************************************************\n");
 printf("******************************************************************************\n");
 printf("请按任何键以继续……");
 getchar();
   struct airline air[maxsize]=
   { {"beijing","1","B8571","SUN",600,40},
{"tianjing","2","S4652","MON",1500,40},
      {"nanjing","3","H8600","TUS",800,40},
      {"shanghai","4","T5201","WES",600,40},
      {"hongkong","5","B1314","FRI",750,40},
{"jing","6","K2930","SUN",680,40},
{"Londou","7","B8478","SAT",920,40},
{"Englang","8","T4782","FIR",2500,40}};
     system("cls");
for(;;)
{
 switch(menu_select())
 {
 case 1:system("cls");list(air);break;
      case 2:system("cls");prtlink(air);break;
      case 3:system("cls");search(air);break;
      case 4:system("cls");order(air);break;
      case 5:system("cls");return_tkt(air);break;
      case 6:printf("\n欢迎再次进入系统,再见!\n");
      exit(0);
 }
     }
printf("\n 请按任意键继续!\n");
getch();
return(0);
}

1、问题描述: 航空客运订票的业务包括查询航班、客票预订和办理退票等。试设计一个航空客运订票系统,已使上述业务可以借助计算机完成。 2、功能要求: (1)每条航线所涉及的信息有终点站名、航班号、飞机号、星期几飞行、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级),以及等候补替补的客户名单(包括姓名、所需票量)。 (2)作为示意系统:全部数据可以只放在内存中。 (3)系统能实现的操作和功能如下: 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)。 查询航线:根据旅客提出的终点站名输入下列信息:航班号、飞机号、星期几起飞、最近航班的日期和余票量。 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号。若已满员或者余票数少于订票额,则需重新寻味客户要求,若需要,可登记排队候补。 承办退票业务:根据客户提供的情况(日期、航班)为客户办理退票手续,然后查询该航班是否有人排队等候补。首先询问排在第一的客户,若所有退票额能满足他的要求,则为他办理订票手续否则依次询问其他排队候补的客户。 修改航班信息:当航班信息改变可以修改航班数据文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值