鱼C论坛

 找回密码
 立即注册
查看: 2238|回复: 3

输出顾客信息有误

[复制链接]
发表于 2019-9-2 15:34:11 | 显示全部楼层 |阅读模式
75鱼币
本帖最后由 wuliangtdi 于 2019-9-2 15:34 编辑
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<windows.h>
  5. typedef struct user
  6. {
  7.         char name[20];
  8.         char sex[10];
  9.         char phone_number[20];
  10.         char Id_card[20];
  11.         char line_num[10];                      //航班号
  12.     char start_time[10];                     //起飞时间
  13.     char end_time[10];                      //降落时间
  14.     char start_place[20];                   //起始地点
  15.     char end_place[20];                       //目的地
  16.     int  seat_num;                          //座位号
  17.     int  count;
  18.         struct user *next;
  19. }users, *User;
  20. typedef struct airline
  21. {
  22.     char line_num[10];//航班号
  23.     char start_place[20];//起飞地
  24.     char end_place[20];//目的地
  25.     char start_time[10];//起飞时间
  26.     char end_time[10];//降落时间
  27.     int total;//座位总数
  28.     int left;//剩余座位
  29.     int count;
  30.     struct airline *next;//下一个结点
  31. } airline,*Airline;
  32. //*将单链表初始化*//
  33. void InitList(User *L)
  34. {
  35.         *L=(User)malloc(sizeof(users));
  36.         (*L)->next=NULL;
  37. }
  38. void InitList_1(Airline *pheadline)
  39. {
  40.         *pheadline=(Airline)malloc(sizeof(airline));
  41.         (*pheadline)->next=NULL;
  42. }
  43. //**利用尾插法进行数据输入**//
  44. int put_users_information(Airline headline, User L)
  45. {
  46.         users *r,*s,*Investigation;            //**Investigation是用来搜寻是否存在有重复的身份证号码**//
  47.         Airline temp;
  48.         temp = headline->next;
  49.         r=L;
  50.         s=(users *)malloc(sizeof(users));
  51.         printf("\t\t请输入航班号:\n\t\t");
  52.         scanf("%s",s->line_num);
  53.         while(temp!=NULL)
  54.         {
  55.                 if(strcmp(temp->line_num,s->line_num)==0)
  56.                 {
  57.                         break;
  58.                 }
  59.                 else
  60.                 {
  61.                         temp=temp->next;
  62.                 }
  63.         }
  64.         if(!temp)
  65.         {
  66.                 printf("\t\t未找到该航班\n");
  67.                 return 0;
  68.         }
  69.         if(temp->left==0)
  70.         {
  71.                 printf("\t\t对不起您所找的航班剩余空位为零\n\t\t请选择其他的航班,谢谢合作\n\t\t");
  72.         }
  73.         Investigation=L->next;
  74.         printf("\t\t请您输入您的身份证号码\n\t\t");
  75.         scanf("%s",s->Id_card);
  76.         while(Investigation!= NULL)
  77.         {
  78.                 if(strcmp(Investigation->Id_card,s->Id_card)!=0)
  79.                 {
  80.                         Investigation=Investigation->next;
  81.                 }
  82.                 else
  83.                 {
  84.                         printf("\t\t您输入的身份证号与他人重复,请重新输入:\n\t\t");
  85.                         scanf("%s",s->Id_card);
  86.                         Investigation=L->next;                                         //**对比之后要初始化,不然的话会出bug,不能比较之前的客户信息**//
  87.                 }
  88.         }
  89.         printf("\t\t请输入您的名字:\n\t\t");
  90.         scanf("%s",s->name);
  91.         printf("\t\t%s\n",s->name);
  92.         printf("\t\t请输入您的性别:\n\t\t");
  93.         scanf("%s",s->sex);
  94.         printf("\t\t请您输入您的电话号码:\n\t\t");
  95.         scanf("%s",s->phone_number);
  96.         s->seat_num=temp->total-temp->left+1;
  97.         strcpy(s->start_time,temp->start_time);
  98.         strcpy(s->end_time,temp->end_time);
  99.         strcpy(s->start_place,temp->start_place);
  100.         strcpy(s->end_place,temp->end_place);
  101.         temp->left--;
  102.         temp->count++;
  103.         r->count++;
  104.         printf("\t\t订票成功!祝你旅途愉快\n");
  105.         r->next=s;
  106.         r=s;
  107.         r->next=NULL;
  108.         free(s);
  109.         return 1;

  110. }
  111. //*输出客户信息到屏幕上**//
  112. void display_user_information(User L)
  113. {
  114.     users *r;
  115.         r=L->next;      //把第一个节点赋值给r
  116.         if(!r)
  117.         {
  118.                 printf("\t\t当前并没有用户信息\n\t\t");
  119.         }
  120.         while(r!=NULL)
  121.         {
  122.                 printf("\t\t***************************************************************\n\n");
  123.                 printf("\t\t********姓名     *****%s******************************\n\n",r->name);
  124.                 printf("\t\t********性别     *****%s*********************************\n\n",r->sex);
  125.                 printf("\t\t********身份证号 *****%s*********************\n\n",r->Id_card);
  126.                 printf("\t\t********电话号码 *****%s**************************\n\n",r->phone_number);
  127.                 printf("\t\t********航班号   *****%s**********************\n\n",r->line_num);
  128.                 printf("\t\t********起始地点 *****%s**********************\n\n",r->start_place);
  129.                 printf("\t\t********目的地   *****%s**********************\n\n",r->end_place);
  130.                 printf("\t\t********座位号   *****%d***********************\n\n",r->seat_num);
  131.                 printf("\t\t*****************************************************************\n\n");
  132.                 r=r->next;
  133.         }
  134. }
  135. int main()
  136. {
  137.         Airline cc;
  138.         User  bb;
  139.         InitList(&bb);
  140.         InitList_1(&cc);
  141.         //Main_Menu();
  142.         Put_Flight_Information(1,cc);
  143.         put_users_information(cc,bb);
  144.         display_user_information(bb);
  145.         return 0;
  146. }
复制代码

好像是display_user_information函数那里有问题 ,把L赋值给r,然后查看了下r中的内容,发现与自己刚开始输入的内容不同,麻烦大佬看看我哪里出了问题。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-2 17:35:50 | 显示全部楼层
插入的时候,r不是最后一个节点,而是头结点,这样你的链表里最多有一个数据吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-2 18:14:28 | 显示全部楼层
int put_users_information(Airline headline, User L){
    ......
    //free(s);    //把这一行注释掉
    return 1;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-4 18:55:07 | 显示全部楼层
本帖最后由 jackz007 于 2019-9-4 21:19 编辑

      楼主试试我用整整一天时间修改的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <windows.h>

  5. typedef struct user
  6. {
  7.         char name[20]         ;
  8.         char sex[10]          ;
  9.         char phone_number[20] ;
  10.         char Id_card[20]      ;
  11.         char line_num[10]     ; //航班号
  12.         char start_time[10]   ; //起飞时间
  13.         char end_time[10]     ; //降落时间
  14.         char start_place[20]  ; //起始地点
  15.         char end_place[20]    ; //目的地
  16.         int  seat_num         ; //座位号
  17.         int  count            ;
  18.         struct user * next    ;
  19. } User                        ;

  20. typedef struct airline
  21. {
  22.         char line_num[10]     ; //航班号
  23.         char start_place[20]  ; //起飞地
  24.         char end_place[20]    ; //目的地
  25.         char start_time[10]   ; //起飞时间
  26.         char end_time[10]     ; //降落时间
  27.         int  total            ; //座位总数
  28.         int  left             ; //剩余座位
  29.         int  count;
  30.         struct airline * next ; //下一个结点
  31. } Airline                     ;

  32. int strip(char * s)
  33. {
  34.         int b , k , m                                                                               ;
  35.         m = strlen(s)                                                                               ;
  36.         while(m > 0 && (s[m - 1] == 0x07 || s[m - 1] == 0x0a || s[m - 1] == 0x0d || s[m - 1] == 0x20)) {
  37.                 s[m - 1] = 0x00                                                                     ;
  38.                 m --                                                                                ;
  39.         }
  40.         if(m > 0) {
  41.                 b = 0                                                                               ;
  42.                 while(b < m && (s[b] == 0x07 || s[b] == 0x0a || s[b] == 0x0d || s[b] == 0x20)) b ++ ;
  43.                 if(b > 0 && b < m) {
  44.                         for(k = b ; k < m ; k ++) s[k - b] = s[k]                                   ;
  45.                         s[m - b] = 0x00                                                             ;
  46.                         m -= b                                                                      ;
  47.                 }
  48.         }
  49.         return m                                                                                    ;
  50. }

  51. Airline * find_airline(Airline * A , char * line_num)
  52. {
  53.         Airline * x , * ret                              ;
  54.         ret = NULL                                       ;
  55.         x = A                                            ;
  56.         while(x) {
  57.                 if(! strcmp(x -> line_num , line_num)) {
  58.                         ret = x                          ;
  59.                         break                            ;
  60.                 }
  61.                 x = x -> next                            ;
  62.         }
  63.         return ret                                       ;
  64. }

  65. User * find_user(User * U , char * ID)
  66. {
  67.         User * x , * ret                                 ;
  68.         ret = NULL                                       ;
  69.         x = U                                            ;
  70.         while(x) {
  71.                 if(! strcmp(x -> Id_card , ID)) {
  72.                         ret = x                          ;
  73.                         break                            ;
  74.                 }
  75.                 x = x -> next                            ;
  76.         }
  77.         return ret                                       ;
  78. }

  79. //**利用尾插法进行数据输入**//

  80. Airline * input_airline_information(Airline * A)
  81. {
  82.         Airline * ax , * as                                                          ;
  83.         char line_num[10] , s[258]                                                   ;
  84.         printf("\n\t\t******** 现在开始录入航班信息 ********\n")                     ;
  85.         for(;;) {
  86.                 printf("\t\t  请输入航班号:\t")                                      ;
  87.                 fflush(stdin)                                                        ;
  88.                 fgets(s , 256 , stdin)                                               ;
  89.                 if(! strip(s)) {
  90.                         break                                                        ;
  91.                 } else {
  92.                         strcpy(line_num , s)                                         ;
  93.                         if(A == NULL || find_airline(A , line_num) == NULL) {
  94.                                 if((as = (Airline *) malloc(sizeof(Airline))) != NULL){
  95.                                         printf("\t\t  请输入出发地:\t")              ;
  96.                                         scanf("%s" , as -> start_place)              ;
  97.                                         printf("\t\t  请输入目的地:\t")              ;
  98.                                         scanf("%s" , as -> end_place)                ;
  99.                                         printf("\t\t请输入起飞时间:\t")              ;
  100.                                         scanf("%s" , as -> start_time)               ;
  101.                                         printf("\t\t请输入降落时间:\t")              ;
  102.                                         scanf("%s" , as -> end_time)                 ;
  103.                                         printf("\t\t请输入座位总数:\t")              ;
  104.                                         scanf("%d" , & as -> total)                  ;
  105.                                         strcpy(as -> line_num , line_num)            ;
  106.                                         as -> left = as -> total                     ;
  107.                                         as -> count = 0                              ;
  108.                                         as -> next = NULL                            ;
  109.                                         if(A == NULL) {
  110.                                                 A = as                               ;
  111.                                         } else {
  112.                                                 ax = A                               ;
  113.                                                 while(ax -> next) ax = ax -> next    ;
  114.                                                 ax -> next = as                      ;
  115.                                         }
  116.                                         printf("\n\t\t航班信息录入成功\n\n")         ;
  117.                                 } else {
  118.                                         fprintf(stderr , "\n\t\t分配内存失败!\n\n") ;
  119.                                         break                                       ;
  120.                                 }
  121.                         } else {
  122.                                 fprintf(stderr , "\n\t\t该航班已经存在\n\n")         ;
  123.                         }
  124.                 }
  125.         }
  126.         return A                                                                     ;
  127. }

  128. User * input_user_information(Airline * A , User * U)
  129. {
  130.         User * us , * ux                                                                                                                    ;
  131.         Airline * ax                                                                                                                        ;
  132.         char line_num[10] , Id_card[20] , s[258]                                                                                            ;
  133.         bool f                                                                                                                              ;

  134.         if(A != NULL) {
  135.                 printf("\n\t\t******** 现在开始录入乘客信息 ********\n")                                                                    ;
  136.                 for(;;) {
  137.                         printf("\t\t请输入航班号:\t")                                                                                       ;
  138.                         fflush(stdin)                                                                                                       ;
  139.                         fgets(s , 256 , stdin)                                                                                              ;
  140.                         if(! strip(s)) {
  141.                                 break                                                                                                       ;
  142.                         } else {
  143.                                 strcpy(line_num , s)                                                                                        ;
  144.                                 if((ax = find_airline(A , line_num)) != NULL) {
  145.                                         if (ax -> left > 0) {
  146.                                                 f = true                                                                                    ;
  147.                                                 for(;;) {
  148.                                                         printf("\t\t请您输入乘客身份证号:\t")                                               ;
  149.                                                         fflush(stdin)                                                                       ;
  150.                                                         fgets(s , 256 , stdin)                                                              ;
  151.                                                         if(! strip(s)) {
  152.                                                                 f = false                                                                   ;
  153.                                                                 break                                                                       ;
  154.                                                         } else {
  155.                                                                 strcpy(Id_card , s)                                                         ;
  156.                                                                 if(U == NULL || find_user(U , Id_card) == NULL) break                       ;
  157.                                                                 else fprintf(stderr , "\t\t\n您输入的身份证号与他人重复,请重新输入。\n\n")  ;
  158.                                                         }
  159.                                                 }
  160.                                                 if(! f) break                                                                               ;
  161.                                                 if((us = (User *) malloc(sizeof(User))) != NULL) {
  162.                                                         printf("\t\t      请输入乘客姓名:\t")                                               ;
  163.                                                         scanf("%s" , us -> name)                                                            ;
  164.                                                         printf("\t\t      请输入乘客性别:\t")                                               ;
  165.                                                         scanf("%s" , us -> sex)                                                             ;
  166.                                                         printf("\t\t请您输入乘客电话号码:\t")                                               ;
  167.                                                         scanf("%s" , us -> phone_number)                                                    ;
  168.                                                         strcpy(us -> line_num , line_num)                                                   ;
  169.                                                         strcpy(us -> Id_card , Id_card)                                                     ;
  170.                                                         strcpy(us -> start_time , ax -> start_time)                                         ;
  171.                                                         strcpy(us -> end_time , ax -> end_time)                                             ;
  172.                                                         strcpy(us -> start_place , ax -> start_place)                                       ;
  173.                                                         strcpy(us -> end_place , ax -> end_place)                                           ;
  174.                                                         us -> seat_num = ax -> total - ax -> left + 1                                       ;
  175.                                                         us -> count = 1                                                                     ;
  176.                                                         us -> next = NULL                                                                   ;
  177.                                                         if(U == NULL) {
  178.                                                                 U = us                                                                      ;
  179.                                                         } else {
  180.                                                                 ux = U                                                                      ;
  181.                                                                 while(ux -> next) ux = ux -> next                                           ;
  182.                                                                 ux -> next = us                                                             ;
  183.                                                         }
  184.                                                         ax -> left --                                                                       ;
  185.                                                         ax -> count ++                                                                      ;
  186.                                                         printf("\n\t\t订票成功!祝你旅途愉快\n\n")                                          ;
  187.                                                 } else {
  188.                                                         fprintf(stderr , "\n\t\t分配内存失败!:\n\n")                                       ;
  189.                                                         break                                                                               ;
  190.                                                 }
  191.                                         } else {
  192.                                                 fprintf(stderr , "\n\t\t对不起您所找的航班剩余空位为零\n\t\t请选择其他的航班,谢谢合作\n\n") ;
  193.                                         }
  194.                                 } else {
  195.                                         fprintf(stderr , "\n\t\t未找到该航班\n\n")                                                          ;
  196.                                 }
  197.                         }
  198.                 }
  199.         } else {
  200.                 fprintf(stderr , "\t\t航班信息为空链表\n")                                                                                  ;
  201.         }
  202.         return U                                                                                                                            ;
  203. }

  204. //*输出乘客信息到屏幕上**//

  205. void display_user_information(User * L)
  206. {
  207.         User * r                                                                                             ;
  208.         r = L                                                                                                ;      //把第一个节点赋值给r
  209.         printf("\n\t\t******** 现在开始显示乘客信息 ********\n")                                             ;
  210.         if(r == NULL) {
  211.                 printf("\t\t当前并没有乘客信息\n")                                                           ;
  212.         } else {
  213.                 while(r) {
  214.                         printf("\t\t*************************************************************\n")        ;
  215.                         printf("\t\t********      姓名 *** [%s]\n" , r -> name)                              ;
  216.                         printf("\t\t********      性别 *** [%s]\n" , r -> sex)                               ;
  217.                         printf("\t\t********  身份证号 *** [%s]\n" , r -> Id_card)                           ;
  218.                         printf("\t\t********  电话号码 *** [%s]\n" , r -> phone_number)                      ;
  219.                         printf("\t\t********    航班号 *** [%s]\n" , r -> line_num)                          ;
  220.                         printf("\t\t********    出发地 *** [%s]\n" , r -> start_place)                       ;
  221.                         printf("\t\t********    目的地 *** [%s]\n" , r -> end_place)                         ;
  222.                         printf("\t\t********  起飞时间 *** [%s]\n" , r -> start_time)                        ;
  223.                         printf("\t\t********  降落时间 *** [%s]\n" , r -> end_time)                          ;
  224.                         printf("\t\t********    座位号 *** [%d]\n" , r -> seat_num)                          ;
  225.                         printf("\t\t*************************************************************\n")        ;
  226.                         printf("\n")                                                                         ;
  227.                         r = r -> next                                                                        ;
  228.                 }
  229.         }
  230. }

  231. main(void)
  232. {
  233.         Airline * A                                                                                          ;
  234.         User  * U                                                                                            ;
  235.         A = NULL                                                                                             ;
  236.         U = NULL                                                                                             ;
  237.         A = input_airline_information(A)                                                                     ;
  238.         U = input_user_information(A , U)                                                                    ;
  239.         display_user_information(U)                                                                          ;
  240. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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