c语言如何编写飞机订票系统?

2025-02-22 11:31:03
推荐回答(2个)
回答1:

#include 
#include 
#include 
#include 
#include 
#include 
#include //overflow

#define ok 1

typedef struct Yidingkehu
{//单链表
 char name[15];//已订票的客户姓名
 int dingpiaoshu;//已订票数量
 struct Yidingkehu *next1;//
}Yidingkehu,*Link;

typedef struct Weidingkehu
{//单链队
 char name[15];//预订票的客户姓名
 int yudingpiao;// 要订票数量
 struct Weidingkehu *next2;//下一个链队结点指针
}Weidingkehu,*Qptr;

typedef struct Hangxian
{//创建一个含有六个信息的结构体
 char hangbanhao[15];//航班号-
 char feijihao[15];//飞机号
 int feixingriqi;//起飞时间
 int chenkerenshu;//座位数
 int yupiao;//余票
 char zhongdianzhai[15];//降落城市
 struct Hangxian *next;//指向下一个链结点的指针
 struct Yidingkehu *yiding;//定义一个指向已订票客户的头结点指针
 struct Weidingkehu *yudingqueue;
}Hangxian,*Linklist;

Linklist InitLinklist();//01
int InsertLinklist(Linklist &head1);//02

void hbhchaxun();//通过航班号查询
void mddchaxun();//通过目的地查询

void lurugongneng();//初始化录入功能
void chaxungongnen();//查询功能
void dingpiaogongnen();//订票功能
void tuipiaogongnen();//退票功能

void main()
{
 
 int n;
 do{ //打印主界面
  printf("\t 欢迎使用航空客运订票系统\n");
  printf("\t+++++++++++++++++++++++++++++\n");
  printf("\t==>1. 录入功能 ==\n");
  printf("\t==>2. 查询功能 ==\n");
  printf("\t==>3. 订票功能 ==\n");
  printf("\t==>4. 退票功能 ==\n");
  printf("\t==>5. 退出 ==\n");
  printf("\t+++++++++++++++++++++++++++++\n");
  printf("\t请选择:");
  scanf("%d",&n);printf("\n");
  switch(n)
  {
  case 1: lurugongneng();//录入功能
   break;
  case 2: chaxungongnen();//查询功能
   break;
  case 3: dingpiaogongnen();//订票功能
   break;
  case 4:tuipiaogongnen();//退票功能
   break;
  default :exit(0);//退出
  }
 }while(n==1||n==2||n==3||n==4);
}

void lurugongneng()//初始化的单链表*********************************************************录入功能
{
 
 Linklist p;
 //int m,n;
 if(!p) exit(OVERFLOW);
 printf("\t请依次输入下面几项内容:\n\n");//这里的输入采用一个个单独输入,避免了乱赋值的现象
 printf("航班号\n");
 gets(p->hangbanhao);//这里的二个gets主要是因为在回车键的输入,其中的第一个是来接收上次的回车
    gets(p->hangbanhao);
 printf("飞机号\n");
 gets(p->feijihao);
 printf("终点站\n");
 gets(p->zhongdianzhai);
 printf("飞行日期\n");
 scanf("%d",&p->feixingriqi);
 printf("乘客总数\n");
 scanf("%d",&p->chenkerenshu);
 printf("余票数\n");
 scanf("%d",&p->yupiao);
 
}

void chaxungongnen()//******************************************************************查询功能
{
 int n;
 printf("\t 查 找 航 线 信 息 \n");
 printf("\t+++++++++++++++++++++++++++++\n");
 printf("\t==>1. 通过目的地查询 ==\n");
 printf("\t==>2. 通过航班号查询 ==\n");
 printf("\t+++++++++++++++++++++++++++++\n");
 printf("\t请选择:");
 scanf("%d",&n);
 printf("\n");//格式化
 switch(n)
 {
 case 1:mddchaxun();
  break;
 case 2:hbhchaxun();
  break;
 default :break;
 }
}

void mddchaxun()//通过目的地查询
{
 char c[15];
 int m;
 Linklist p=L;
 printf("\t请输入要查询的目的地:");
 gets(c);
 gets(c);//原因同上
 do{
  p=p->next;
  if(p)
  {
   m=strcmpi((*p).zhongdianzhai,c);//如果==的话则m=0;
   if(m==0)
   {
    printf("\t航班信息:\n");
    printf("\t航班号:%s\n",p->hangbanhao);
    printf("\t飞机号:%s\n",p->feijihao);
    printf("\t飞行时间:周%d\n",p->feixingriqi);
    printf("\t余票量:%d\n",p->yupiao);
   }
  }
  else
  {//如果不匹配的话就做
   printf("\t对不起没有你要找的目的地:\n\n"); m=0;
  }
 }while(m!=0);
}

void hbhchaxun()//通过目的地查询
{
 char c[15];
 int m;
 Linklist p=L;
 printf("\t请输入要查询的航班号:");
 gets(c); gets(c);printf("\n");
 do{
  p=p->next;
  if(p)
  {
   m=strcmpi((*p).hangbanhao,c);//如果==的话则m=0;这里的(*p).与p->的作用是一样的
   if(m==0)
   {
    printf("\t航班信息:\n");
    printf("\t航班号:%s\n",p->hangbanhao);
    printf("\t飞机号:%s\n",p->feijihao);
    printf("\t飞行时间:周%d\n",p->feixingriqi);
    printf("\t余票量:%d\n\n",p->yupiao);
   }
  }
  else
  {//如果不匹配的话就做
   printf("\t对不起没有你要找的航班号:\n"); m=0;
  }
 }while(m!=0);
}

void dingpiaogongnen()//***************************************************************订票功能
{
 
 char c[15];
 int m=1,piao,ydpiao=0,yd=0,n;//
 gets(c);
 printf("请输入终点站名:"); gets(c); printf("\n");
 p=L->next;
 if(p) {
  do{//查找一下,是否有这个航班
   if(!p)
   {
    printf("对不起,没有你要找的航班:\n\n");
    goto loop1;
   }
   m=strcmpi(p->zhongdianzhai,c);
   if(m==0)
   {
    printf("航班信息:\n");
    printf("航班号:%s\n",p->hangbanhao);
    printf("飞机号:%s\n",p->feijihao);
    printf("飞行时间:周%d\n",p->feixingriqi);
    printf("余票量:%d\n",p->yupiao);}
   else p=p->next;
  }while(m!=0);
  if(m==0)
  {
   do{
    printf("\n请输入你要订的票数:"); scanf("%d",&piao);
    if(piao<=p->yupiao)
    {
     h=p->yiding;
     if(h)
     {
      h1=h;
      h=h->next1;
      h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));
      printf("请输入你的名字:");
      gets(h->name);gets(h->name);
      h->dingpiaoshu=piao;
      h->next1=h1->next1;
      h1->next1=h;
      p->yupiao=p->yupiao-piao;
      printf("订票成功:\n"); m=2;
     }
    }
    else
    { 
     printf("余票量:%d\n",p->yupiao);
     printf("对不起,余票 %d 张不足,不能完成订票\n\n",p->yupiao);
     printf(" 是否要重新订票?\n");
     printf("需要请输入1 否则请按2 预订请输入3 : ");
     scanf("%d",&m);
     printf("\n");
     if(m==3) goto loop3;
    }
   }while(m==1);
  }
 }
 else if(!p) 
 {
loop3: struct Weidingkehu *q3;
printf("对不起,该航班的票已售完\n");
q.front=p->yudingqueue;
if(q.front==q.rear) printf("没有人预订票,是否要预订?\n");
else if(q.front!=q.rear) printf("已有人预订票,是否要预订?\n");
printf("预订请输入1 否则输入2 : ");
scanf("%d",&n);
printf("\n");
if(n==1)
{
 
 printf("请输入你的姓名"); gets(q3->name); gets(q3->name);//q3不能指向name???
 printf("请输入订票数"); scanf("%d",&q3->yudingpiao);
 q3->next2=NULL;
 q.rear->next2=q3;
 q.rear=q3;
 printf(" 你已经预订了 !\n");
}
 }
loop1:;
}

void tuipiaogongnen()//***************************************************************退票功能
{
 
}
///////////以下是人家的要求//////////
1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:起飞地、目的地 航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。
2、本系统显示这样的菜单:
(1) 输入航班信息
(2) 输出航班信息
(3) 查找航班信息
a.显示空座的数量
b.显示空座的信息
c.显示已订座的信息
d.起飞时间
(4)订票预约
(5)删除定票预约
(6)退出系统
1、 本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。
2、 查找航班信息既可按线路查,也可按目的地查。
4、在两次运行之间,数据被保存于一个文件里,当本程序重新开
始的时候,它首先从该文件读入数据

回答2:

课程设计么?

什么要求,我可以有偿帮你