航空客运订票系统(c语言)

代码分享如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define ERROR 0
#define OK 1

typedef struct aldbook{//已订票人结点
 char albookname[20];  //订票人姓名
 int albookno;  //订票量
 struct aldbook *next;
}aldbook,*albook;

typedef struct undbook{//等候订票人节点
 char unbookname[20];//等候订票人姓名
 int unbookno;//所需票量
 struct undbook *next;
}undbook,*unbook;

typedef struct{  //队列
 unbook front;   //队头指针
 unbook rear;    //队尾指针
}linkqueueun;

typedef struct airline{ //航线结点
 char terminusname[20];//终点站名
 char flightno[10];//航班号
 char planeno[10];//飞机号
 char flytime[10];//起飞时间
 int allnumber;//乘员定额
 int unsellno;//余票量
 struct airline *next;
 albook albookP;
 linkqueueun QY;
}airline,*air;

int initqueue(linkqueueun &Q)
{//建立以Q为头结点的链队列,成功返回OK,否则返回ERROR
 Q.front=Q.rear=(unbook)malloc(sizeof(undbook));   //分配存储空间,使队头队尾指针指向同一结点
 if(!Q.front)  return ERROR;  //分配空间失败
 Q.front->next=NULL;
 return OK;
}//initqueue()

int initlist1(air &P)
//建立存储航线信息的空链表
 P=(air)malloc(sizeof(airline));
 if(!P) return ERROR;
 P->next=NULL;
 return OK;
}//initlist1()

int initlist2(albook &Y)
{ //建立存储已定票人信息的空链表
 Y=(albook)malloc(sizeof(aldbook));
 if(!Y) return ERROR;
 Y->next=NULL;
 return OK;
}//initlist2()


int enqueue(linkqueueun &Q,char name[],int num);

int deletelist(albook &Y,char name[])//在存放已定票人信息的链表中删除用户名为name[]的结点
                                   //并返回此用户的订票数量
    int i;
 albook p,q;
 p=Y->next;
 q=Y;
 while(p&&strcmp(p->albookname,name)) {p=p->next;q=q->next;}
 if(!p) {
  printf("对不起!本航班无此用户信息!请确认是否输入正确!n");
  return ERROR;
 }
 i=p->albookno;
 q->next=p->next;
 free(p);
 return i;
}//deletelist()

int  createlistcorrect(air &p)//建立存储航线信息的链表
{
 air newbase,pa;
 pa=p;
 newbase=(airline *)malloc(sizeof(airline));
 if(!newbase) return ERROR;
 printf("请依此输入以下内容:n");
 printf("请输入终点站名:");
 scanf("%s",newbase->terminusname);
 printf("请输入航班号:");
 scanf("%s",newbase->flightno);
 printf("请输入飞机号:");
 scanf("%s",newbase->planeno);
 printf("请输入飞行时间(输入格式为:飞行周日(用数字表示)-(具体时间)):  ");
 scanf("%s",newbase->flytime);
 printf("请输入客机容量:");
 scanf("%d",&newbase->allnumber);
 printf("请输入客机总余票量:");
 scanf("%d",&newbase->unsellno);
 initlist2(newbase->albookP);
 initqueue(newbase->QY);
 newbase->next=pa->next;
 pa->next=newbase;
 return OK;
}//createlistcorrect()

int  createlist(air &p)
{//建立以P为头结点的链表
 air newbase;
 newbase=(airline *)malloc(sizeof(airline));//分配新的存储空间
 if(!newbase) return ERROR;  //分配失败
 strcpy(newbase->terminusname,"上海");//初始化
 strcpy(newbase->flightno,"AZ001");
 strcpy(newbase->planeno,"BY747");
 strcpy(newbase->flytime,"3-09:00");
 newbase->allnumber=200;
 newbase->unsellno=200;
    initlist2(newbase->albookP);//建立存储以订票人信息的头指针
 initqueue(newbase->QY);//建立存储预定票人信息的队列
 newbase->next=p->next; 
 p->next=newbase;
 return OK;
} //CreateList()

int addflight(air &plane)//增加航班信息,对应按键6
 
 char password[20]="gaoyunqiang";
 char ps[20];
 printf("相关操作需要密码,请输入以确定您的信息n");
 scanf("%s",ps);
    if(strcmp(ps,password)==0)
 {
  printf("密码正确n");
  createlistcorrect(plane);
     return OK;
 }
 else
 {
     printf("密码错误,系统将要退出n");
  return ERROR;
 }
}//addflight()

int deleteflight(air &plane) //删除航班信息,对应按键7
{  
 char password[20]="gaoyunqiang";
 char ps[20];
 printf("相关操作需要密码,请输入以确定您的信息n");
 scanf("%s",ps);
    if(strcmp(ps,password)==0)
 {
 printf("密码正确n");
 char banci[10];
 air frontp,delep;
    printf("请输入要删除的航班号:");
 scanf("%s",banci);
 delep=plane->next;
 frontp=plane;
 for(;delep;)
 {
  if(strcmp(delep->flightno,banci)==0)
  {
      frontp->next=delep->next;free(delep);
      printf("删除成功!n");
      break;
  }
   else
  {
    frontp=delep; delep=delep->next;
  }
 
  if(!delep)
  {
   printf("无此航班信息!请再次输入确定n");
  }
        return OK;
 }
 else
 {
     printf("密码错误,系统将要退出n");
  return ERROR;
 }
}//deleteflight()

int searchname(albook p, char name[])//检查姓名,后面调用
{
 albook YD;
 YD=p->next;
 while(YD)
 {
  if(strcmp(YD->albookname,name)==0)
   return OK;
  else YD=YD->next;
 }
 return ERROR;
}//searchname()

int  searchaim(air plane)//通过目的地查询航线,对应按键1
{
 char Aim[20];
 air p;
 p=plane->next;
 printf("==>请输入您要查找的目的地:");
 scanf("%s",Aim);
 for(;p;p=p->next)
 {
  if(strcmp(p->terminusname,Aim)==0)
  {
   printf("航班号:%s 飞机号:%s 飞行时间:%s  余票量:%dn",
   p->flightno,p->planeno,p->flytime,p->unsellno);
   return OK;
  }//if 
 }//while
    printf("对不起!本航空公司还未开通此航线,敬请谅解n");
 return ERROR;
}//searchaim()

int searchnum(air plane)//通过航班号查询航线,对应按键2
{
 char Aim[10];
 air p;
 p=plane->next;
 printf("请输入您要查找的航班号:");
 scanf("%s",Aim);
 for(;p;p=p->next)
 {
  if(strcmp(p->flightno,Aim)==0)
  {
   printf("降落城市:%s 飞机号:%s 飞行时间:%s  余票量:%dn",
   p->terminusname,p->planeno,p->flytime,p->unsellno);
   return OK;
  }
 }
 printf("对不起!本航空公司还未开通此航线,敬请谅解n");
 return ERROR;
}//searchnum()

int bookticket(air &plane)//实现订票业务,对应按键3
{
 int i,a;
 char f;
 char banhao[10];
 air p;
 albook YI;
 YI=(albook)malloc(sizeof(aldbook));
 p=plane->next;
 int  num;
loop:printf("请输入您要乘坐的航班号:");
 scanf("%s",banhao);
 for(;p;p=p->next)
 {
  if(strcmp(p->flightno,banhao)==0)
  {
   printf("请输入您要购买的票数:");
   getchar();
   scanf("%d",&num);
   if(p->unsellno>=num)
   {
    printf("请输入您的姓名:");
    getchar();
    scanf("%s",YI->albookname);
    a=p->allnumber-p->unsellno;
    printf("您的座位号为: ");
    for(i=1;i<=num;i++)
    {
     printf("- ",a+i);
    }
    printf("n");
    p->unsellno-=num;
    YI->albookno=num;
    YI->next=p->albookP->next;
    p->albookP->next=YI;
    printf("订票成功,为保护您的合法权益,请在主页面进行登记n");
    return OK;
   }
   else
   {
    printf("==>对不起,本航班剩余座位已不足,请到主页面进行登记");
    return ERROR;
   }
  }
 }
 printf("对不起,本航空公司未开通此航线,请确认输入是否正确n");
 printf("是否重新输入(Y/N?):");
 getchar();
 scanf("%c",&f);
 if(f=='Y'||f=='y') goto loop;
 else return ERROR;
}//bookticket()

int tuipiao(air &plane)
{
 char date[20];
 char HB[10];
 char name[20];
 int num;
 air p;
 unbook  Q;
 Q=(unbook)malloc(sizeof(undbook));
 albook  Y;
 Y=(albook)malloc(sizeof(aldbook));
    printf("==>请输入您要退票的航班:");
 getchar();
 gets(HB); 
 for(p=plane->next;p;p->next)
 {
  if(strcmp(p->flightno,HB)==0)
  {
RePutDate: printf("==>请输入乘坐日期:");
   gets(date);
   if(strcmp(p->flytime,date)==0)
   {
                printf("==>请输入用户名:");
    gets(name);
    if(searchname(p->albookP,name))
    {
     num=deletelist(p->albookP,name);
     p->unsellno+=num;
     Q=p->QY.front->next;
     while(Q)
     {
      if(Q!=NULL&&Q->unbookno<=p->unsellno)
      {
       Y->albookno=Q->unbookno;
       strcpy(Y->albookname,Q->unbookname);
       p->unsellno=p->unsellno-Q->unbookno;
       Y->next=p->albookP->next;
       p->albookP->next=Y;
      }
      Q=Q->next;
     }
    return OK;
    }
    else
    {
     printf("==>无此顾客信息,请确认输入是否正确,系统退出n");
    }
    return ERROR;
   }
   else
   {
    printf("==>输入的日期错误,请重新输入:");
    goto RePutDate;
   }
  }
 else
 {
 printf("==>无本航班信息,请确认输入是否正确,系统退出n");
 return ERROR;}
 }
  return OK ;
}//tuipiao()

int  albookrecord(albook &p)//建立存储已订票人信息的链表,对应按键10
{
 albook newbase,pa;
 pa=p;
 newbase=(aldbook *)malloc(sizeof(aldbook));
 if(!newbase) return ERROR;
 printf("请依此输入以下内容:n");
 printf("请输入姓名:");
 scanf("%s",newbase->albookname);
 printf("请输入定票量:");
 scanf("%d",&newbase->albookno);
 newbase->next=pa->next;
 pa->next=newbase;
 return OK;
}//albookrecord()

void Printal(albook b)//实现显示全部订票人信息,对应按键8
{
 char password[20]="gaoyunqiang";
 char ps[20];
 printf("相关操作需要密码,请输入以确定您的信息n");
 scanf("%s",ps);
    if(strcmp(ps,password)==0)
 {
 printf("密码正确n");
 albook p;
 p=b->next;
 if(!p) printf("对不起,暂无已订票人信息n");
 for(;p;p=p->next)
 {
  printf("订票人姓名:%s  定票量:%dn",
  p->albookname,p->albookno);
 }
 }
 else  printf("密码错误,系统将要退出n");
}//Printal()

int enqueue(linkqueueun &Q,char name[],int num)//在队列Q中插入新的队尾元素,对应按键11
{
 unbook Y;
 Y=(unbook)malloc(sizeof(undbook));
 if(!Y) return ERROR;
 strcpy(Y->unbookname,name);
 Y->unbookno=num;
 Y->next=NULL;
 Q.rear->next=Y;
 Q.rear=Y;
 return OK;
// enqueue()

void Printun(linkqueueun &Q)//实现显示全部预订票人信息,对应按键9
{
 char password[20]="gaoyunqiang";
 char ps[20];
 printf("相关操作需要密码,请输入以确定您的信息n");
 scanf("%s",ps);
    if(strcmp(ps,password)==0)
 {
 printf("密码正确n");
 unbook p;
 p=Q.front->next;
 if(!p) printf("对不起,暂无等候排队订票人信息n");
 for(;p;p=p->next)
 {
  printf("等候人姓名:%s  所需票量:%dn",
  p->unbookname,p->unbookno);
 }
 }
    else  printf("密码错误,系统将要退出n");
}//Printun()

void Print(air plane)//实现显示全部航班信息,对应按键5
{
 air p;
 p=plane->next;
 if(!p) printf("对不起,本航空公司无航线信息n");
 for(;p;p=p->next)
 {
  printf("降落城市:%s 航班号:%s  飞机号:%s 飞行时间:%s  余票量:%dn",
  p->terminusname,p->flightno,p->planeno,p->flytime,p->unsellno);
 }
}//Print()

void main()//主函数
{
 int a;
 air plane;
 albook alb;
 linkqueueun Q;
    initqueue(Q);
 initlist1(plane);
 initlist2(alb);
 createlist(plane);
loop1:printf("----------------------欢迎使用本公司航空客运订票系统----------------------------n");
 printf("-----------------本系统具有如下功能,请选择您要办理的业务-----------------------n");
 printf("====== 1、通过目的地查询航线n");
 printf("====== 2、通过航班号查询航线n");
 printf("====== 3、客票订购n");
 printf("====== 4、办理退票n");
 printf("====== 5、查看全部航班信息n");
 printf("====== 框内为管理员操作,非相关人员勿进=======================n");
 printf("|                                                            |n");
 printf("====== 6、添加航班信息                                       |n");
 printf("====== 7、删除航班信息                                       |n");
 printf("====== 8、查看已订票人信息                                   |n");
 printf("====== 9、查看预订票人信息                                   |n");
 printf("|                                                            |n");
 printf("====== 框内为管理员操作,非相关人员勿进=======================n");
 printf("====== 10、已订票人登记n");
 printf("====== 11、等候订票人登记n");
 printf("====== 12、退出系统n");
 printf("-----------------本系统具有以上功能,请选择您要办理的业务-----------------------n");
 printf("请输入您要办理的业务:");
loop2:scanf("%d",&a);
 switch(a)
 {
 case 1:
  system("pause");
  system("cls");
  printf("------------------------------欢迎使用查询航线业务------------------------------n");
  searchaim(plane);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 2:
  system("pause");
  system("cls");
  printf("------------------------------欢迎使用查询航线业务------------------------------n");
  searchnum(plane);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 3:
  system("pause");
  system("cls");
  printf("------------------------------欢迎使用客票预订业务------------------------------n");
  bookticket(plane);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 4:
  system("pause");
  system("cls");
  printf("------------------------------欢迎使用办理退票业务------------------------------n");
  if(tuipiao(plane))
  printf("退票成功n");
  else printf("退票失败n");
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 5:
  system("pause");
  system("cls");
  printf("---------------------------欢迎使用全部航线查询业务---------------------------n");
  Print(plane);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 6:
        system("pause");
  system("cls");
  printf("---------------------------警告:非相关人员勿擅自操作---------------------------n");
  addflight(plane);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 7:
        system("pause");
  system("cls");
  printf("---------------------------警告:非相关人员勿擅自操作---------------------------n");
  deleteflight(plane);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 8:
        system("pause");
  system("cls");
  printf("---------------------------警告:非相关人员勿擅自操作---------------------------n");
  Printal(alb);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 9:
        system("pause");
  system("cls");
  printf("---------------------------警告:非相关人员勿擅自操作---------------------------n");
  Printun(Q);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 10:
  system("pause");
  system("cls");
  printf("---------------------------欢迎使用已订票人登记业务---------------------------n");
  albookrecord(alb);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 11:
  system("pause");
  system("cls");
  printf("---------------------------欢迎使用等候订票人登记业务---------------------------n");
  char name[20];
  int num;
  printf("请输入您的姓名:");
  scanf("%s",name);
  printf("请输入您想要预定票量:");
  scanf("%d",&num);
  enqueue(Q,name,num);
  system("pause");
  system("cls");
  goto loop1;
  break;
 case 12:
  system("pause");
  system("cls");
  printf("n");
  printf("n");
  printf("n");
  printf("n");
  printf("tt感谢您对本航空公司的支持,欢迎下次光临!n");
  break;
 default :
  getchar();
  printf("对不起,您输入的数字无效,请重新输入:");
  goto loop2;
  break;
 }
}

  • 18
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
目 录 摘 要 1 前 言 2 基本算法的实现 3 采用类C语言定义相关的数据类型 3 各模块的伪码算法 4 函数的调用关系图 6 调试分析 7 测试结果 8 源程序(带注释) 11 总 结 22 参考文献 23 致 谢 24 附件Ⅰ 部分源程序代码 25 摘 要 该设计要求对飞机航班信息进行排序和查找。可按航班的班号、起点站、到达站、起飞时间以及到达时间等信息时行查询。对于本设计,主要是通过线性表的逻辑结构、存储结构,线性表及队列上基本运算实现的。可以让我们学会如何把学到的知识用于解决实际问题。 关键词: 航班信息;客户信息;链式存储结构; 前 言 飞机在现今的社会中已是越来越重要了,人们在旅游、工作、学习等生活中对飞机几乎是不可缺少了。而由乘坐飞机所引起的问题也深入到了计算机领域,飞机订票系统就是解决这种问题的一种途径。如人们常常在订票前要对问很多信息(飞机的起落时间,机票的价格,乘坐的人数以及是否有票等等)。这个系统主要是由线性表的链式存储结构以及队列的存储结构来存储航班信息与客户信息的。它的主要功能:1、是录入航班信息,其调用函数为—insert_airline;2、查询航线(航班号,飞机号,日期,航班容量,余票数),其调用函数为:search_air;3、订票(根据客户提供的情况,办理订票手续),其调用函数为:book_air;4、承办退票业务(根据客户提供的情况,办理退票手续),其调用函数为:del_cus;5、删除已有航班信息 ,其调用函数为:del_airline . 设计这样的一个系统可以很快的查出人们所需要的信息,能省去很多的步骤,而且还非常的准确。
目录 总体设计 2 概要设计 2 详细设计 3 调试分析 11 测试数据及截图 11 时间复杂度分析 15 问题思考 15 算法的改进设想 15 课设总结体会 15 附录 17 程序说明 17 源代码 17 主要参考文献 30 总体设计 通过此系统可以实现如下功能:   1).录入:可以录入航班情况(数据存储在一个数据文件中)   2).查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞 抵达城市,航班票价,票价折扣,确定航班是否满仓);   可以输入起飞抵达城市,查询飞机航班情况;   3).订票:(订票情况存在一个数据文件中)   可以订票,如果该航班已经无票,可以提供相关可选择航班;   4).退票: 可退票,退票后修改相关数据文件;   客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。   5).修改航班信息:   当航班信息改变可以修改航班数据文件 概要设计 每个模块的算法设计说明如下: (1)录入模块: 查找单链表的链尾,在链头插入一个"航班信息"的新结点。 (2)浏览模块: 顺着单链表输出航班信息。 (3)修改模块: 输入密码,确认是否有权限对航班信息进行修改,有则进行修改,否则不能修改。 提供两种修改方式:添加航班和对已有的航班信息进行改动(修改和删除),1添加航线 ,0对已有的航班信息进行改动(修改和删除)。 对已有的航班信息进行改动(修改和删除):顺着单链表查找,若找到则进行相关操 作。 (4)查询模块: 提供两种查方式:按航号和起飞抵达城市查询,0代表按航号查询,1代表按起飞抵达 城市查询。 顺着单链表查找,如果与航班号(起飞抵达城市)一致,输出相关信息并询问乘客是 否要订票,若订进入订票模块;否则,查询不成功。 (5)订票模块: 查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成 功;否则查找这个月此乘客起飞城市和降落城市的有空位航班,供乘客选择,若有则订 票,若无则订票不成功并把此乘客的信息录入此航班等候订票队列中,退出订票。 (6)退票模块: 输入要退票的乘客姓名以及所退票的编号,查找乘客资料的链表中是否有这位乘客, 有则删去此结点,并判断是否有等候订票的乘客(有则通知等候订票乘客订票,无则余 票加乘客所退票数);无则退票失败。 (7)文件模块: 顺着单链表把链表的信息写入文件。 详细设计 由于此系统流程图太多,流程图所对应的源代码较长,所占篇幅也较大,并且流程图 所对应的源程序在订票系统源程序中都有,这里就不再赘述。需要说明的是插入、查找 、修改和删除这些线性表的基本操作的流程图在订票系统源程序中没有单独函数,是因 为此系统主要是运用线性表的基本操作解决实际问题,具体问题所对应的基本操作代码 有所不同,但思维是相同的,所以这几个操作的源代码已经对应写入了其他具体操作的 函数中,这里也不再给出。 根据订票系统功能的需要定义了如下的结构体: typedef struct wat_ros /*等候订票乘客的信息*/ { char name[20];/*姓名*/ char phone[15];/*等候订票乘客的联系方式*/ struct wat_ros *next; }qnode,*qptr; typedef struct pqueue { qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/ }linkqueue; typedef struct ord_ros { char name[20];/*客户姓名*/ char IDnum[20];/*客户有效证件的编号*/ char airnum[7];/*航班号*/ int dpl;/*订票量*/ char piaohaio[20];//票的编号,由航班号起飞日期此航班订票前的余票量 struct ord_ros *next; }Lnode ,*linklist; typedef struct airline { char qdname[20];/*起点站名*/ char zhname[20];/*终点站名 */ char air_num[7];/*航班号*/ char plane_num[10];/*飞机型号*/ char year[5]; char month[3]; char day[3];/*飞行日期*/ char qhour[3]; char qminute[3];/*起飞时间*/ char jhour[3]; char jminute[3];/*降落时间*/ float zhekou;/*没有折扣为十折*/ float price;/*票价*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ Lnode *o

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值