找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4496|回复: 3
打印 上一主题 下一主题
收起左侧

C语言航空客运订票系统程序思路及设计(功能全面)

[复制链接]
跳转到指定楼层
楼主
ID:561504 发表于 2019-6-13 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
高程的设计
通过此系统可以实现如下功能:
录入 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班或提供候补席位;
退票 可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息: 当航班信息改变可以修改航班数据文件

2.1 结构定义

因为本题函数变量巨多无比,所以我们定义了typedef struct client和airline,统领一些小变量。这样在之后引用的时候,比较方便。

2.2 函数构造

   利用之前构造的的变量进行函数构造,利用不同函数实现不同的功能。设计航班信息,订票信息的存储结构,设计程序完成功能。

2.3 功能实现

通过此系统可以实现如下功能:

录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) ;

查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;

订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班或提供候补席位;

退票: 可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息: 当航班信息改变可以修改航班数据文件 。



3 程序与功能模块设计
3.1 设计思路
总体思路,通过对题目的阅读和分析,我们发现要求大体分为2大模块,1.航班信息的录入,修改与查询。2.顾客的信息录入,订票,退票系统。我们对录入信息的解决方法是运用链表的插入,将信息放入到一个个链表当中,对于输出,我们则借鉴了遍历函数,同时,我们对于数据的查找,也借鉴了链表中的查找,在订票系统中,我们也是基于此,进行修改,完成了订票退票系统。

录入:首先是数据的录入,这个可以分为航班信息airline和顾客信息client,根据题目要求航班信息airline中需包含 航班号,起飞地,目的地,起飞时间,降落时间,票价,座位总数,剩余座位数,不同舱位的数目,而顾客信息client中需要包含订单号,顾客姓名,证件号,及他所订购的航班信息,和所定的舱位信息。我们根据需求把他们定义为不同的数据类型,便于在之后的函数中直接引用,也便于后期不同模块的整合与统一。

查询:根据功能要求,我们需采取两种方式查询航班:1.航班号 2.起始地和目的地。利用指针,将录入的航班逐个与客户查询的关键字进行比较,直至查找到对应的航班,并输出航班所有信息。

订票:创建一个新的结构体来储存客户的信息,其中包括选择航班的相关信息、客户的身份信息和订单号。与查询方式类似,当指针指向相应的航班时,我们将该航班对应的结构体中相关信息复制储存至收集客户信息的结构体中,并将客户的身份信息也一同存入。若航班的余票量不能满足客户的订票需求,那么系统将提供其他满足客户需求的航班,客户可以重新进行选择订票。客户也可以选择候补满客航班,这时重新创建一个新结构体来储存候补客户的信息。

退票:同样运用指针,我们先找到退票客户的“信息文件夹”。然后将该客户的订票信息删除,同时恢复对应航班的座位数。这时,系统将会按顺序为候补席位中的客户订票。

修改:修改内容包括:1.增加航班 2.删除航班 3.修改部分信息。

增加航班:在储存航班信息的链表中创建一个新的结点,将对应的新航班信息存储在结构体中。

删除航班:利用指针找到需删除航班的结点,之后删除该节点并释放节点中存储的航班信息。

修改部分内容:利用指针找到需要修改航班的结点,根据要求对指针指向的结构体内容进行修改,以完成航班的相关信息修改。

3.2 详细实现过程

录入:在主程序利用了import(num,headline);函数录入航班信息,在之后的订票模块利用 bookticket录入了顾客信息,主要的录入就这两块信息,所以分别定义typedef struct client 和typedef struct airline作为结构变量统领这些信息,而在输入的时候只要采用循环结构,就可以实现地址的移动,一位一位的实现信息录入,具体程序如之后程序所示。

查询:我们分为两种方式对航班进行查询:1.航班号 2.起始地和目的地。通过航班号进行查询,我们利用strcmp函数比较输入的航班号字符串与指针指向的航班号字符串,若返回值为0,则指针temp所指向的就是找到的航班号,这时利用指针temp将结点中该航班的信息全部输出。若返回值不为0,那么指针顺着链表移动,指向下一个结点,继续比较。通过起始地与目的地查找航班方法与通过航班号查询方式差不多,只不过同时比较起始地和目的地两个字符串。


订票:为了便于储存订票客户的具体信息,我们创建了一个新的结构体client。订票时客户选择合适航班,指针temp顺着链表移动找到该航班对应的结点,将对应的航班信息复制储存在client中,同时客户从键盘上输入自己的名字与id,一并存入client中,并将客户的id作为订单编号。订票完成后,执行函数display_client,将客户的订单信息输出至屏幕上。若航班余票量不能满足客户的订票需求,通过函数display_all_line将所有航班信息输出在屏幕上为客户提供其他选择。客户可以选择订购其他航班,其实现步骤与订票无异。客户也可以选择在满客航班候补,这时程序将客户信息存入client中。候补信息填写完成后,将执行函数display_client1将候补信息输出,并提醒客户“无余票,需耐心等待”。

退票:我们先利用指针headclient顺着client链表移动,找到退票客户的结点,然后删除该节点并释放结构体储存的信息。接着再利用指针headline顺着airline链表移动,找到与退票客户信息中的航班号相等的结点,修改其中的座位数。这时要判断客户的舱位等级,利用switch语句分别对不同舱位进行座位数修改。

修改:先利用switch语句选择航班修改操作类型。

  • 增加航班:airline链表新增一个结点,然后与录入过程相似。
  • 删除航班:指针delline顺着链表移动直至找到对应航班结点,然后删除该结点,并释放相关信息存储空间。
  • 修改部分内容:指针temp顺着链表移动直至找到对应航班结点,由于只有部分信息需要修改,我们利用switch语句的选择结构分别执行不同修改内容的语句。当进行选择后,我们通过指针temp对结构体的内容进行修改。考虑到多个部分信息需修改的情况,我们运用了while语句,对定义的整型变量y判断,当有继续修改的需求时,y=1,循环继续,若无需求,y=0,循环结束。


3.3 设计总结

这几个功能有着类似之处,比如订票,退票,修改在设计中,把他们三个定义为3个函数 display_line(find),bookticket和returnticket。然后在不同的函数中实现具体不同的功能,详细的在之后程序分析细说。修改也是同理,不过是找到数据地址,然后进行数据覆盖,只要注意变量定义在了哪里即可。

总的来说,这次的程序设计与我们之前做的作业有着异曲同工之妙,先是定义变量,而后进行功能实现的构思,然后写主函数,主函数简单,利用多种函数实现功能,将大程序分为一个个小功能,最后用main函数总结起来,实现我们希望的功能。

我们最后又进行了功能的完善和扩展,进行了一些实际问题的思考让他看起来更像一个真实的航空售票系统。


5 程序测试例与分析
5.1 结果截图
首先进入选项页面:

1)正常录入航班信息:

  • 查询航线信息:(两种方式)

3)

若是订满,则显示舱位已满,让客户选择排队或者退出,若是排队进行信息的补录,并且显示需要几张票。

4)退票直接显示退票成功

5)

6)

0)
5.2 程序结果详解

   首先,由上文的结果截图可以看到,一共分为了六个模块和一个系统退出。

   在主函数处,我们把程序用switch(x) 函数 ,分为不同的case,这样便于我们分配任务编写,和最后的检查。接下来是每一块的详细实现过程。

   (1)第一个是录入航班信息,这也是这个系统最为基础的部分,由程序段我们也可以看到,我们利用了typedef struct airline 定义了许多个变量,这个是需要我们手动输入的数据。

   而折扣在这里我们采用的是0-1.0作为折扣的输入,比如九折就是0.9,结果都如之前所示。

    (2)第二个是查询航线信息,根据我们的生活经验,我们把这个又分为两种查询方式,分别是起始地和航班编号查询,查询之后,会在下面把所有航班信息都列出来,供人们参考。

   (3)第三个是客户订票,在这里输入的是客户数据,若是还有空位,利用typedef struct client将数据储存起来,同时把航班的空间减一,作为座位的分配,若是没有空位,如上述程序所显示,进行排队或者退出的选择。

   (4)第四个是客户退票,这个很简单,只要把数据清空就可以了,如上述程序显示。

   (5) 第五个是输出所有航班信息,只要利用循环结构和与期中考试类似的node->line_num等等,输出刚刚输入的数据,并且全部列出即可。

   (6)第六个是修改航班信息,注意当前航班信息,找对地址,修改相应数据,再进行录入即可,这个也是实现比较困难的一个。

   (7)第七个是退出程序,直接break就可以了。

6整体设计总结

6.1 遇到的问题

1.删除航班模块,我们发现在删除选择航班后,程序会直接退出,并没有返回订票主系统,即如图所示

  • 其他还有一些函数定义的错误。
  • 在乘客订票结束后,程序不进行下一步,而是卡死在这一步,再次按回车则直接弹出。
6.2 问题的解决方法

1.我们返回函数change_line,然后在2选项中修改了相应代码delete delline->next; 增加了delline=delline->next;使他能够一位一位后移,解决了这个问题。

2.我们找到了相应的定义位置,详细修改了函数的找寻方式及具体定义,解决了这个问题。

3.我们回到对应函数的位置,在程序结束处补上了 return 0; 使函数能够正常结束,解决了这个问题。

6.3 总结

其他还有一些问题,都用类似方法得到了解决,发现程序出错要到相应位置去详细检查,解决之后不能立刻编译,应该先预想一下运行结果,然后再进行编译。

然后若是功能出错,要到相应功能实现的函数位置进行检查,之后与程序检查的步骤一致。


7心得体会

根据第一段信息可知,应将系统信息总体分为两部分——航班信息,乘客信息。可定义出两个结构体来进行信息存储。对于题目所要求的 录入,查询,订票,退票等功能,可通过定义不同函数,分别实现不同功能 ,最后在主函数中进行调用,进行整合。 使用链表来存储信息,更加方便灵活。不同函数间可进行相互调用,以实现所要求的功能。

我们可以利用课上学到的知识,定义结构体,大量使用结构指针,实现很多信息的录入,修改,赋值,比较等。定义单链表,使用 while 循环语句,if 判断,switch 选择等。使用 #include<string.h> 等头文件,使用 strcmp() 来进行数据的比较以实现 航线的查询,订票等功能。

最后再查阅相关资料完成程序的具体编写。


4 C语言程序与接口实现

4.1 程序设计
  1. using namespace std;
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<stdio.h>
  5. /*****************************************************
  6. *功能描述:定义客户信息
  7. *输入参数:name,id,line_num,time1,time2,seat_num
  8. *输出参数:client
  9.             txt文件
  10. ******************************************************/
  11. typedef struct client
  12. {
  13.     char file[20];//订单编号
  14.     char name[20];//顾客名
  15.     char id[17];//顾客证件号
  16.     char line_num[10];//航班号
  17.     char time1[10];//起飞时间
  18.     char time2[10];//降落时间
  19.               double price;//现票价
  20.               int class0;//舱位等级
  21.     int seat_num;//座位号
  22.     struct client *next;//下一个结点
  23. } client;
  24. typedef struct clienthead
  25. {
  26.     int count;
  27.     client *next;
  28. } clienthead;
  29. /*****************************************************
  30. *功能描述:定义航班信息
  31. *输入参数:line_num,time1,time2,seat_num,start_place,end_place,total
  32. *输出参数:airline
  33.             txt
  34. ******************************************************/
  35. typedef struct airline
  36. {
  37.     char line_num[10];//航班号
  38.     char start_place[20];//起飞地
  39.     char end_place[20];//目的地
  40.     char time1[10];//起飞时间
  41.     char time2[10];//降落时间
  42.     double price0;//票价
  43.               double price;//现票价
  44.               double discount;//折扣
  45.               int class1;//一等舱
  46.               int class2;//二等舱
  47.               int class3;//三等舱
  48.               int total;//座位总数
  49.     int left;//剩余座位
  50.     struct airline *next;//下一个结点
  51. } airline;
  52. //头结点
  53. typedef struct airlinehead
  54. {
  55.     int count;
  56.     airline *next;
  57. } airlinehead;
  58. /*****************************************************
  59. *功能描述:录入航班函数
  60. *输入参数:line_num,start_place,end_place,time1,time2,total,left
  61. *输出参数:第i+1个航班录入
  62. ******************************************************/
  63. airlinehead* import(int n,airlinehead *pheadline)//录入航班函数: n为所要录入航班的数量:
  64. {
  65.     airline *temp = new airline;
  66.     temp->next=NULL;
  67.     pheadline->next=temp;
  68.     pheadline->count = n;
  69.     int flag;
  70.     for(int i=0; i<n; i++)
  71.     {
  72.                   printf("请输入第%d个航班的航班号 ",i+1);
  73.                             scanf("%s",temp->line_num);
  74.                   printf("\n");
  75.         printf("请输入第%d个航班的起飞地 ",i+1);
  76.         scanf("%s",temp->start_place);
  77.                   printf("\n");
  78.          printf("请输入第%d个航班的目的地 ",i+1);
  79.            scanf("%s",temp->end_place);
  80.                               printf("\n");
  81.          printf("请输入第%d个航班的起飞时间 ",i+1);
  82.              scanf("%s",temp->time1);
  83.             printf("\n");
  84.          printf("请输入第%d个航班的降落时间 ",i+1);
  85.              scanf("%s",temp->time2);
  86.          printf("\n");
  87.          printf("请输入第%d个航班的座位总数 ",i+1);
  88.           scanf("%d",&temp->total);
  89.                       printf("\n");
  90.         printf("请输入一等舱座位数 ");
  91.         scanf("%d",&temp->class1);
  92.         printf("请输入二等舱座位数 ");
  93.         scanf("%d",&temp->class2);
  94.         printf("请输入三等舱座位数 ");
  95.         scanf("%d",&temp->class3);
  96.         temp->left=temp->total;
  97.         printf("本航班的剩余座位数: %d",temp->left);
  98.                                printf("\n");
  99.                                printf("请输入原票价 ");
  100.                                scanf("%lf",&temp->price0);
  101.                                printf("是否有折扣:(1:是 0:否)");
  102.                             scanf("%d",&flag);
  103.                             if(flag){
  104.                                           printf("请输入折扣:");
  105.                                           scanf("%lf",&temp->discount);
  106.                                           temp->price=(temp->price0)*(temp->discount);
  107.                             }
  108.                             else{
  109.                                           temp->discount=0;
  110.                                           temp->price=temp->price0;
  111.                             }
  112.                             printf("现票价:%.2f",temp->price);
  113.                             printf("\n");
  114.                                printf("第%d个航班成功录入。 ",i+1);
  115.                    printf("\n");
  116.         if(i<n-1)
  117.         {
  118.             temp->next = new airline;
  119.             if(temp->next == NULL)
  120.             {   printf("分配失败");
  121.                           printf("\n");
  122.                 exit(1);
  123.             }
  124.             temp->next->next=NULL;
  125.             temp = temp->next;
  126.         }
  127.     }
  128.     return pheadline;
  129. }
  130. /*****************************************************
  131. *功能描述:查询航班功能
  132. *输入参数:select,1,2
  133. *输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数
  134. *返回值:temp-成功,NULL-失败
  135. ******************************************************/
  136. airline* query(airlinehead *phead )//查询航班情况
  137. {
  138.     airline *find=NULL;
  139.     airline *temp;
  140.     printf("(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)"); printf("\n") ;
  141.     printf("1,航线查询航班。        "); printf("\n") ;
  142.     printf("2,起飞城市查询航班。"); printf("\n") ;
  143.     printf("(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)");
  144.     printf("\n") ;
  145.     printf("请选择:");
  146.     int A;
  147.     scanf("%d",&A) ;
  148.     printf("\n") ;
  149.    if(A==1)
  150.     {
  151.                   printf("请输入航班号:");
  152.         char line_num[10];
  153.         scanf("%s",line_num);
  154.         temp = phead->next;
  155.         while(temp )
  156.         {
  157.             if(strcmp(temp->line_num,line_num) == 0)
  158.             {
  159.                 find= temp;
  160. //display_line(find);
  161.                 return temp;
  162.                 break;
  163.             }
  164.             else
  165.             {
  166.                 temp = temp->next;
  167.             }
  168.         }
  169.         if(!temp)
  170.         {
  171.             printf("没有找到该航班的信息。") ;
  172.             printf("\n") ;
  173.             return NULL;
  174.         }

  175.     }
  176.   if(A==2)  
  177.     {
  178.         char start_place[20];//起飞地
  179.         char end_place[20];//目的地
  180.         printf("请输入起始地:") ;
  181.         scanf("%s",start_place);

  182.         printf("\n") ;
  183.         printf("请输入目的地:") ;
  184.         scanf("%s",end_place);
  185.         printf("\n") ;
  186. //airline *temp;
  187.         temp=phead->next;
  188.         while(temp)
  189.         {
  190.             if(strcmp(temp->start_place,start_place)==0 &&
  191.                     strcmp(temp->end_place,end_place)==0)
  192.             {
  193.                 find=temp;
  194. //return temp;
  195.                 break;
  196.             }
  197.             temp = temp->next;
  198.         }
  199.         if(!temp)
  200.         {   printf("没有找到该航班的信息。") ;
  201.                       printf("\n") ;
  202.             return NULL;
  203.         }  
  204.     }
  205.    else{
  206.      printf("输入错误。") ;
  207.         printf("\n") ;
  208.         }
  209.     return find;
  210. }
  211. /*****************************************************
  212. *功能描述:查询航班功能
  213. *输入参数:select,1,2
  214. *输出参数:航班号,起飞地,抵达地,起飞时间,降落时间,座位数,剩余座数
  215. ******************************************************/
  216. void display_line(airline *node)//输出一个航班结点的所有信息到屏幕
  217. {
  218.     if(node==NULL)
  219.     {
  220.         printf("参数为空!输出失败.\n");
  221.         return;
  222.     }
  223.     printf("\n");
  224.     printf("航班号\t\t 起飞地\t\t 目的地\t\t 起飞时间\t\t 降落时间\t\t 一等舱座位数\t\n ");
  225.     printf("%s\t\t",node->line_num);
  226. printf(" %s\t\t",node->start_place);
  227. printf(" %s\t\t",node->end_place);
  228. printf(" %s\t\t",node->time1);
  229. printf("         %s\t\t",node->time2);
  230. printf("         %d\t\t\n",node->class1);
  231. printf("二等舱座位数\t\t 三等舱座位数\t\t 座位总数\t\t 剩余座位\t\n ");
  232. printf("%d\t\t",node->class2);
  233. printf("         %d\t\t",node->class3);
  234. printf("         %d\t\t",node->total);
  235. printf("         %d\t\t\n",node->left);
  236. printf("原票价\t\t 折扣\t\t 现票价\t\t 余票量\t\n");
  237. printf("%.2f\t\t",node->price0);
  238. printf("%.2f\t\t",node->discount);
  239. printf("%.2f\t\t",node->price);
  240. if(node->left<0){
  241.               printf("无余票,所需票量%d",(0-node->left));
  242. }
  243. else printf("%d\t\n",node->left);
  244. printf("\n");
  245. }
  246. /******************************************************
  247. *功能描述:输出所有的航班信息到屏幕
  248. *输入参数:无
  249. *输出参数:headline
  250. *******************************************************/
  251. void display_all_line(airlinehead *headline)
  252. {
  253.     printf("\n");
  254.     airline *node;
  255.     node = headline->next;
  256.     if(!node)
  257.     {
  258.         printf("当前没有航班信息\n");
  259.         return ;
  260.     }
  261.     printf("航班数目: \n",headline->count);
  262.     while(node)
  263.     {
  264.         display_line(node);
  265.         node=node->next;
  266.     }
  267. }
  268. /******************************************************
  269. *功能描述:修改航班信息
  270. *输入参数:select
  271. *输出参数:无
  272. *返回值:0-正确,1-错误
  273. *******************************************************/
  274. int change_line(airlinehead *headline)//修改航班信息。
  275. {
  276.     printf("当前所有航班的信息为:\n");
  277.     airline *temp,*t;
  278.               int i;
  279.     temp = headline->next;
  280.     while(temp)
  281.     {
  282.         display_line(temp);
  283.                             t=temp;
  284.         temp=temp->next;
  285.     }
  286.     printf("\n");
  287.     printf("请选择你要进行的操作:\n");
  288.     printf("1,增加航班。\n");
  289.     printf("2,删除航班。\n");
  290.               printf("3,修改部分信息。\n");
  291.     int select;
  292.     scanf("%d",&select);
  293.     printf("\n");
  294.     if(select>3 || select<1)
  295.     {
  296.         printf("输入错误。\n");
  297.         return 0;
  298.     }
  299.     switch(select)
  300.     {
  301.     case 1:
  302.     {
  303. //temp->next = (airline*)malloc(sizeof(airline));
  304.      temp=new airline;
  305.      int flag;
  306.               // temp=temp->next;
  307.                            
  308.         printf("请输入要增加的航班号: ");
  309.         scanf("%s",temp->line_num);
  310.         printf("请输入航班的起飞地: ");
  311.         scanf("%s",temp->start_place);
  312.         printf("请输入航班的目的地: ");
  313.         scanf("%s",temp->end_place);
  314.         printf("请输入航班的起飞时间: ");
  315.         scanf("%s",temp->time1);
  316.         printf("请输入航班的降落时间: ");
  317.         scanf("%s",temp->time2);
  318.         printf("请输入一等舱座位数:");
  319.         scanf("%d",&temp->class1);
  320.         printf("请输入二等舱座位数:");
  321.         scanf("%d",&temp->class2);
  322.         printf("请输入三等舱座位数:");
  323.         scanf("%d",&temp->class3);
  324.         printf("请输入航班的座位总数: ");
  325.         scanf("%d",&temp->total);
  326.                                           t->next=temp;
  327.         temp->left=temp->total;
  328.                             printf("请输入原票价:");
  329.                             scanf("%lf",&temp->price0);
  330.                             printf("是否有折扣:(1:是 0:否)");
  331.                             scanf("%d",&flag);
  332.                             if(flag){
  333.                                           printf("请输入折扣:");
  334.                                           scanf("%lf",&temp->discount);
  335.                                           temp->price=(temp->price0)*(temp->discount);
  336.                             }
  337.         temp->next=NULL;
  338.         headline->count++;
  339.         printf("增加成功。\n");
  340.         break;
  341.     }
  342.     case 2:
  343.     {
  344.         printf("请输入您要删除的航班的航班号: ");
  345.         char line_num[10];
  346.         scanf("%s",line_num);
  347.         airline * delline;
  348.         delline = headline->next;
  349.         while(delline)
  350.         {
  351.             if(strcmp(delline->next->line_num, line_num)==0)
  352.             {
  353.                                                         i=1;
  354.                 airline *plink;
  355.                 plink = delline->next->next;
  356. //free(delline->next);
  357.                 delete delline->next;
  358.                 delline->next=plink;
  359.                 headline->count--;
  360.             }
  361.             delline=delline->next;
  362.         }
  363.         if(delline == 0&&i!=1)
  364.         {
  365.             printf("没有找到输入的航班号。\n");
  366.             return 0;
  367.         }
  368.                             i=0;
  369.         break;
  370.     }
  371.     case 3:
  372.     {
  373.         printf("请输入您要修改的航班的航班号:");
  374.         char line_num3[10];
  375.         scanf("%s",line_num3);
  376.         temp = headline->next;
  377.         while(temp)
  378.         {
  379.             if(strcmp(temp->line_num, line_num3)==0)
  380.             {
  381.                                                         int B;
  382.                                                         i=1;
  383.                 printf("请选择要修改的内容??\n");
  384.                 printf("--1,座位总数。--\n");
  385.                 printf("--2,起始地址。--\n");
  386.                 printf("--3,目的地址。--\n");
  387.                                                         printf("--4,起飞时间。--\n");
  388.                                                         printf("--5,降落时间。--\n");
  389.                 printf("--6,原票价。--\n");
  390.                 printf("--7,折扣。--\n");
  391.                 printf("--0,无修改内容。--\n");
  392.                 scanf("%d",&B);
  393.                 while(B){
  394.                                                         switch(B){
  395.                               case 1: {
  396.                                                                               int c;
  397.                                       int y=1;
  398.                                                                               while(y){
  399.                                                                                                   printf("请输入需修改的舱位等级:(1:一等座 2:二等座 3:三等座 )");
  400.                                                                                        scanf("%d",&c);
  401.                                                                                        printf("请输入修改后的座位数:");
  402.                                                                                                             switch(c){
  403. case1: temp->left=(temp->total)-(temp->left);
  404.                                                                                                                               scanf("%d",&temp->class1);
  405.                                                                                                        temp->left=(temp->left)+(temp->class1);
  406.                                                                                                                                                        break;
  407. case2: temp->left=(temp->left)-(temp->class2);
  408.                                                                                                                                scanf("%d",&temp->class2);
  409.                                                                                                                   temp->left=(temp->left)+(temp->class2);
  410.                                                                                                                                                         break;
  411. case3: temp->left=(temp->left)-(temp->c  lass3);
  412.                                                                                                                                scanf("%d",&temp->class3);
  413.                                                                                                                   temp->left=(temp->left)+(temp->class3);
  414.                                                                                                                                                         break;
  415.                                                                                                       }
  416.                                                                                                   printf("是否继续修改座位数:(1:是 0:否)");
  417.                                                                                                   scanf("%d",&y);
  418.                                                                                         }
  419.                                                                                                   temp->total=(temp->class1)+(temp->class2)+(temp->class3);
  420.                                       break;}
  421.                               case 2: printf("请输入修改后的起始地址:");
  422.                                       scanf("%s",temp->start_place);
  423.                                       break;
  424.                               case 3: printf("请输入修改后的目的地址:");
  425.                                       scanf("%s",temp->end_place);
  426.                                       break;
  427.                               case 4: printf("请输入修改后的起飞时间:");
  428.                                       scanf("%s",temp->time1);
  429.                                       break;
  430.                               case 5: printf("请输入修改后的降落时间:");
  431.                                       scanf("%s",temp->time2);
  432.                                       break;
  433.                               case 6: printf("请输入修改后的原票价:");
  434.                                       scanf("%lf",&temp->price0);
  435.                                       if(temp->discount) temp->price=(temp->price0)*(temp->discount);
  436.                                       else temp->price=temp->price0;
  437.                                       break;
  438.                               case 7: printf("请输入修改后的折扣:");
  439.                                       scanf("%lf",&temp->discount);
  440.                                       if(temp->discount) temp->price=(temp->price0)*(temp->discount);
  441.                                       else temp->price=temp->price0;
  442.                                       break;              }
  443.                                                         display_line(temp);
  444.                                                         printf("请选择要修改的内容??\n");
  445.                                                         printf("--1,座位总数。--\n");
  446.                 printf("--2,起始地址。--\n");
  447.                 printf("--3,目的地址。--\n");
  448.                                                         printf("--4,起飞时间。--\n");
  449.                                                         printf("--5,降落时间。--\n");
  450.                 printf("--6,原票价。--\n");
  451.                 printf("--7,折扣。--\n");
  452.                 printf("--0,无修改内容。--\n");
  453.                                                         scanf("%d",&B);               }   }
  454.             temp=temp->next;    }
  455.         if(temp==0&&i!=1)
  456.         {
  457.             printf("没有找到输入的航班号。\n");
  458.             return 0;    }
  459.         break;   }   }
  460.     return 1;}
  461. /*****************************************************
  462. *功能描述:输出一个客户信息到屏幕
  463. *输入参数:无
  464. *输出参数:姓名,证件号码,座号,航班号,起飞时间,降落时间,
  465. ******************************************************/
  466. void display_client(client *node=NULL)//输出一个客户节点的信息到屏幕。
  467. {
  468.     if(node==NULL)
  469.     {  printf("参数为空!输出失败.\n");
  470.         return;  }
  471.     printf("\n");
  472.     printf("订单编号\t\t 姓名\t\t 证件号码\t 舱位等级\t 座号\t\n");
  473.     printf("%s\t\t",node->file);
  474.               printf("         %s\t\t",node->name);
  475.     printf(" %s\t\t",node->id);
  476.     printf(" %d\t\t",node->class0);
  477.     printf(" %d\t\n",node->seat_num);
  478.     printf("起飞时间\t 降落时间\t 航班\t\t\n");
  479.     printf("%s\t\t",node->time1);
  480.     printf("%s\t\t",node->time2);
  481.     printf("%s\t\t",node->line_num);
  482.     printf("\n");}
  483. void display_client1(client *node=NULL)//输出一个客户节点的信息到屏幕。
  484. {   if(node==NULL)
  485.     {   printf("参数为空!输出失败.\n");
  486.         return;   }
  487.     printf("\n");
  488.     printf("姓名\t\t 证件号码\t 座号\t 起飞时间\t 降落时间\t 航班\t\t\n");
  489.     printf("%s\t\t",node->name);
  490.     printf("%s\t\t",node->id);
  491.     printf("无座位,等待中");
  492.     printf("%s\t\t",node->time1);
  493.     printf("%s\t\t",node->time2);
  494.     printf("%s\t\t",node->line_num);
  495.     printf("\n");}

  496. /*****************************************************
  497. *功能描述:输出未售完票航班信息
  498. *输入参数:无
  499. *输出参数:headline
  500. ******************************************************/
  501. void display_left_airline(airlinehead *headline)//输出未售完票的航班的信息。
  502. {   airline *node = headline->next;
  503.     if(!node)
  504.     {
  505.         printf("当前没有航班。。");    }
  506.     for(; node->left!=node->total; node = node->next)
  507.     {
  508.         display_line(node);    }  }
  509. /*****************************************************
  510. *功能描述:订票
  511. *输入参数:line_num,id
  512. *输出参数:
  513. *返回值:1-正确,0-错误
  514. ******************************************************/
  515. int bookticket(airlinehead * headline,clienthead *headclient)//订票
  516. {
  517. //headclient->count=0;
  518.     printf("请输入航班号: ");
  519.     char line_num[10] ;
  520.     scanf("%s",line_num);
  521.     airline *temp;
  522.     temp=headline->next;
  523.     while(temp)
  524.     {   if(strcmp(temp->line_num,line_num)==0)
  525.         {     break;      }
  526.         temp=temp->next;     }
  527.     if(!temp)
  528.     {    printf("未找到该航班\n");
  529.         return 0;     }
  530.     if(temp->left==0)
  531.     {   int x;
  532.         printf("对不起,您所定航班已无余座\n请进行选择:1 退出\n            2 排队\n");
  533.                             scanf("%d",&x);
  534.                             switch(x) {               case 1:
  535.         printf("请选择其他合适的航班.\n");
  536.         printf("全部");
  537.         display_all_line(headline);
  538.         printf("\n");
  539.                             return 0;
  540.                             case 2:int z;
  541.                             printf("替补人员信息补录\n");
  542.                             client *custom1=new client;
  543.                   printf("请输入你的证件号码: ");
  544.                                scanf("%s",custom1->id);
  545.                   printf("\n");
  546.                   printf("请输入你的姓名:");
  547.                                scanf("%s",custom1->name);
  548.                                printf("\n");
  549.                             printf("请输入订票量:");
  550.                             scanf("%d",&z);
  551.                             custom1->next=NULL;
  552.                   strcpy(custom1->line_num,line_num);
  553.                                strcpy(custom1->time1,temp->time1);
  554.                   strcpy(custom1->time2,temp->time2);   
  555.                   headclient->count++;
  556.                   custom1->next = headclient->next;
  557.                   headclient->next = custom1;
  558.                             printf("\n替补信息加入完成!\n");
  559.                             display_client1(custom1); printf("   需要座位\n ");printf("    %d\n",z);
  560.                             printf("替补输入完成\n");
  561.                             return 1;   }  }
  562.     client *custom=new client;
  563.     printf("请输入你的证件号码: ");
  564.     scanf("%s",custom->id);
  565.     printf("\n");
  566.     printf("请输入你的姓名:");
  567.     scanf("%s",custom->name);
  568.               printf("一等舱座位数\t\t 二等舱座位数\t\t 三等舱座位数\t\n");
  569.               printf("%d\t\t",temp->class1);
  570.               printf("         %d\t\t",temp->class2);
  571.               printf("         %d\t\t",temp->class3);
  572.               printf("\n");
  573.               printf("请输入理想舱位等级:(1:一等舱 2:二等舱 3:三等舱)");
  574.               scanf("%d",&custom->class0);
  575.     custom->seat_num=temp->total-temp->left+1;
  576.     custom->next=NULL;
  577.     strcpy(custom->line_num,line_num);
  578.     strcpy(custom->time1,temp->time1);
  579.     strcpy(custom->time2,temp->time2);
  580.     temp->left--;
  581.     switch(custom->class0){
  582.                   case 1: temp->class1--;
  583.                           break;
  584.                   case 2: temp->class2--;
  585.                                     break;
  586.                             case 3: temp->class3--;
  587.                                     break;              }
  588.     headclient->count++;
  589.     custom->next = headclient->next;
  590.     headclient->next = custom;
  591.               strcat(custom->file,custom->id);
  592.     printf("订票成功!祝您旅途愉快~~");
  593.     display_client(custom);
  594.     return 1;  }
  595. /*****************************************************
  596. *功能描述:退票
  597. *输入参数:id
  598. *输出参数:
  599. *返回值:1-正确,0-错误
  600. ******************************************************/
  601. int returnticket(airlinehead * headline,clienthead *headclient)//退票。
  602. {
  603.     printf("请输入顾客的证件号码:id: ");
  604.     char id[20];
  605.     scanf("%s",id);
  606.     airline *airlinetemp= headline->next;
  607.     client *clienttemp= headclient->next;
  608.     if(NULL==airlinetemp)
  609.     {   printf("当前没有航班信息。\n");
  610.         return 0;    }
  611.     char line_num[10]; int rclass;
  612.     client *delnext ;
  613.     if(strcmp(clienttemp->id,id)==0)//要删除的节点为第一个时。。。
  614.     {
  615.         strcpy(line_num,clienttemp->line_num);
  616.                             rclass=clienttemp->class0;
  617.         headclient->next=clienttemp->next;
  618.         delete clienttemp;
  619.         while(airlinetemp)//修改对票客户所对应的航班的售票信息。
  620.         {
  621.             if(strcmp(line_num,airlinetemp->line_num)== 0 )
  622.             {
  623.                 airlinetemp->left++;
  624.                                                         switch(rclass){
  625.                                                                       case 1: airlinetemp->class1++;
  626.                                                                               break;
  627.                                                                       case 2: airlinetemp->class2++;
  628.                                                                               break;
  629.                                                                       case 3: airlinetemp->class3++;
  630.                                                                               break;                                          }
  631.                 break;           }
  632.             airlinetemp = airlinetemp->next;     }
  633.         printf("退票成功!希望有机会与您继续合作。");
  634.         return 1;  }
  635.     while(clienttemp->next)//要删除 的节点不是第一个时。。。
  636.     {
  637.         if(strcmp(clienttemp->next->id,id)==0)
  638.         {  strcpy(line_num,clienttemp->next->line_num);
  639.             delnext = clienttemp->next->next;
  640.             delete clienttemp->next;
  641.             clienttemp->next=delnext;
  642.             while(airlinetemp)//修改对票客户所对应的航班的售票信息。
  643.             {
  644.                 if(strcpy(line_num,airlinetemp->line_num)== 0 )
  645.                 {
  646.                     airlinetemp->left++;
  647.                     switch(rclass){
  648.                                                                       case 1: airlinetemp->class1++;
  649.                                                                               break;
  650.                                                                       case 2: airlinetemp->class2++;
  651.                                                                               break;
  652.                                                                       case 3: airlinetemp->class3++;
  653.                                                                               break;              }
  654.                     break;   }
  655.                airlinetemp = airlinetemp->next;     }
  656.             printf("退票成功!有机会继续合作。\n\n");
  657.             return 1;   break;    }
  658.         clienttemp = clienttemp->next;     }
  659.     printf("未找到该客户的信息。\n");
  660.     return 0;  }
  661. /*****************************************************
  662. *功能描述:退票
  663. *输入参数:id
  664. *输出参数:
  665. *返回值:1-正确,0-错误
  666. ******************************************************/


  667. void main_menu()
  668. {
  669.     printf("********<( ̄︶ ̄)/  欢迎使用飞机售票系统 \( ̄︶ ̄)>********  \n\n");
  670.     printf("*** 1---- 录入航班信息。*** \n\n");
  671.     printf("*** 2---- 查询航线信息。*** \n\n");
  672.     printf("*** 3---- 客户订票。***\n\n");
  673.     printf("*** 4---- 客户退票。*** \n\n");
  674.     printf("*** 5---- 输出所有航班信息。*** \n\n");
  675.               printf("*** 6---- 修改航班信息。*** \n\n");
  676.     printf("*** 0---- 退出系统 。*** \n\n");
  677.     printf("**************************************************************** \n\n");}
  678. int main(void)
  679. {    airlinehead *headline=new airlinehead;
  680.     headline->count=0;
  681.     headline->next=NULL;
  682.     clienthead *headclient=new clienthead;
  683.     headclient->count=0;
  684.     headclient->next=NULL;
  685.     while(1)
  686.     {    main_menu();
  687.         int x;
  688.         printf("请选择您要进行的操作: ");
  689.         scanf("%d",&x);
  690.         printf("\n");
  691.         switch(x)
  692.         {     case 1:
  693.             int num;
  694.              printf("请选择您要录入的航班的数目: ");
  695.            scanf("%d",&num);
  696.              printf("\n");
  697.             import(num,headline);
  698.              printf("\n");
  699. //display_all_line(headline);
  700.             printf("航班信息成功录入。。 ");
  701.             printf("\n\n");
  702.             break;

  703.         case 2:
  704.             airline *find;
  705.             find=query(headline);
  706.             if(find)
  707.             {
  708.                 display_line(find);     }
  709.             break;
  710.         case 3:
  711.        *****限于篇幅余下内容下载附件******
复制代码

完整的Word格式文档51黑下载地址:
程序报告-改二.doc (498.27 KB, 下载次数: 41)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2019-6-16 00:59 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:328014 发表于 2019-6-16 01:00 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:680791 发表于 2020-1-3 23:50 | 只看该作者
我这还有一个代码,可以互相交流一下

航空旅客.zip

2.24 KB, 下载次数: 3, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表