|
发表于 2019-9-4 18:55:07
|
显示全部楼层
本帖最后由 jackz007 于 2019-9-4 21:19 编辑
楼主试试我用整整一天时间修改的代码:
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <windows.h>
- typedef struct user
- {
- char name[20] ;
- char sex[10] ;
- char phone_number[20] ;
- char Id_card[20] ;
- char line_num[10] ; //航班号
- char start_time[10] ; //起飞时间
- char end_time[10] ; //降落时间
- char start_place[20] ; //起始地点
- char end_place[20] ; //目的地
- int seat_num ; //座位号
- int count ;
- struct user * next ;
- } User ;
- typedef struct airline
- {
- char line_num[10] ; //航班号
- char start_place[20] ; //起飞地
- char end_place[20] ; //目的地
- char start_time[10] ; //起飞时间
- char end_time[10] ; //降落时间
- int total ; //座位总数
- int left ; //剩余座位
- int count;
- struct airline * next ; //下一个结点
- } Airline ;
- int strip(char * s)
- {
- int b , k , m ;
- m = strlen(s) ;
- while(m > 0 && (s[m - 1] == 0x07 || s[m - 1] == 0x0a || s[m - 1] == 0x0d || s[m - 1] == 0x20)) {
- s[m - 1] = 0x00 ;
- m -- ;
- }
- if(m > 0) {
- b = 0 ;
- while(b < m && (s[b] == 0x07 || s[b] == 0x0a || s[b] == 0x0d || s[b] == 0x20)) b ++ ;
- if(b > 0 && b < m) {
- for(k = b ; k < m ; k ++) s[k - b] = s[k] ;
- s[m - b] = 0x00 ;
- m -= b ;
- }
- }
- return m ;
- }
- Airline * find_airline(Airline * A , char * line_num)
- {
- Airline * x , * ret ;
- ret = NULL ;
- x = A ;
- while(x) {
- if(! strcmp(x -> line_num , line_num)) {
- ret = x ;
- break ;
- }
- x = x -> next ;
- }
- return ret ;
- }
- User * find_user(User * U , char * ID)
- {
- User * x , * ret ;
- ret = NULL ;
- x = U ;
- while(x) {
- if(! strcmp(x -> Id_card , ID)) {
- ret = x ;
- break ;
- }
- x = x -> next ;
- }
- return ret ;
- }
- //**利用尾插法进行数据输入**//
- Airline * input_airline_information(Airline * A)
- {
- Airline * ax , * as ;
- char line_num[10] , s[258] ;
- printf("\n\t\t******** 现在开始录入航班信息 ********\n") ;
- for(;;) {
- printf("\t\t 请输入航班号:\t") ;
- fflush(stdin) ;
- fgets(s , 256 , stdin) ;
- if(! strip(s)) {
- break ;
- } else {
- strcpy(line_num , s) ;
- if(A == NULL || find_airline(A , line_num) == NULL) {
- if((as = (Airline *) malloc(sizeof(Airline))) != NULL){
- printf("\t\t 请输入出发地:\t") ;
- scanf("%s" , as -> start_place) ;
- printf("\t\t 请输入目的地:\t") ;
- scanf("%s" , as -> end_place) ;
- printf("\t\t请输入起飞时间:\t") ;
- scanf("%s" , as -> start_time) ;
- printf("\t\t请输入降落时间:\t") ;
- scanf("%s" , as -> end_time) ;
- printf("\t\t请输入座位总数:\t") ;
- scanf("%d" , & as -> total) ;
- strcpy(as -> line_num , line_num) ;
- as -> left = as -> total ;
- as -> count = 0 ;
- as -> next = NULL ;
- if(A == NULL) {
- A = as ;
- } else {
- ax = A ;
- while(ax -> next) ax = ax -> next ;
- ax -> next = as ;
- }
- printf("\n\t\t航班信息录入成功\n\n") ;
- } else {
- fprintf(stderr , "\n\t\t分配内存失败!\n\n") ;
- break ;
- }
- } else {
- fprintf(stderr , "\n\t\t该航班已经存在\n\n") ;
- }
- }
- }
- return A ;
- }
- User * input_user_information(Airline * A , User * U)
- {
- User * us , * ux ;
- Airline * ax ;
- char line_num[10] , Id_card[20] , s[258] ;
- bool f ;
- if(A != NULL) {
- printf("\n\t\t******** 现在开始录入乘客信息 ********\n") ;
- for(;;) {
- printf("\t\t请输入航班号:\t") ;
- fflush(stdin) ;
- fgets(s , 256 , stdin) ;
- if(! strip(s)) {
- break ;
- } else {
- strcpy(line_num , s) ;
- if((ax = find_airline(A , line_num)) != NULL) {
- if (ax -> left > 0) {
- f = true ;
- for(;;) {
- printf("\t\t请您输入乘客身份证号:\t") ;
- fflush(stdin) ;
- fgets(s , 256 , stdin) ;
- if(! strip(s)) {
- f = false ;
- break ;
- } else {
- strcpy(Id_card , s) ;
- if(U == NULL || find_user(U , Id_card) == NULL) break ;
- else fprintf(stderr , "\t\t\n您输入的身份证号与他人重复,请重新输入。\n\n") ;
- }
- }
- if(! f) break ;
- if((us = (User *) malloc(sizeof(User))) != NULL) {
- printf("\t\t 请输入乘客姓名:\t") ;
- scanf("%s" , us -> name) ;
- printf("\t\t 请输入乘客性别:\t") ;
- scanf("%s" , us -> sex) ;
- printf("\t\t请您输入乘客电话号码:\t") ;
- scanf("%s" , us -> phone_number) ;
- strcpy(us -> line_num , line_num) ;
- strcpy(us -> Id_card , Id_card) ;
- strcpy(us -> start_time , ax -> start_time) ;
- strcpy(us -> end_time , ax -> end_time) ;
- strcpy(us -> start_place , ax -> start_place) ;
- strcpy(us -> end_place , ax -> end_place) ;
- us -> seat_num = ax -> total - ax -> left + 1 ;
- us -> count = 1 ;
- us -> next = NULL ;
- if(U == NULL) {
- U = us ;
- } else {
- ux = U ;
- while(ux -> next) ux = ux -> next ;
- ux -> next = us ;
- }
- ax -> left -- ;
- ax -> count ++ ;
- printf("\n\t\t订票成功!祝你旅途愉快\n\n") ;
- } else {
- fprintf(stderr , "\n\t\t分配内存失败!:\n\n") ;
- break ;
- }
- } else {
- fprintf(stderr , "\n\t\t对不起您所找的航班剩余空位为零\n\t\t请选择其他的航班,谢谢合作\n\n") ;
- }
- } else {
- fprintf(stderr , "\n\t\t未找到该航班\n\n") ;
- }
- }
- }
- } else {
- fprintf(stderr , "\t\t航班信息为空链表\n") ;
- }
- return U ;
- }
- //*输出乘客信息到屏幕上**//
- void display_user_information(User * L)
- {
- User * r ;
- r = L ; //把第一个节点赋值给r
- printf("\n\t\t******** 现在开始显示乘客信息 ********\n") ;
- if(r == NULL) {
- printf("\t\t当前并没有乘客信息\n") ;
- } else {
- while(r) {
- printf("\t\t*************************************************************\n") ;
- printf("\t\t******** 姓名 *** [%s]\n" , r -> name) ;
- printf("\t\t******** 性别 *** [%s]\n" , r -> sex) ;
- printf("\t\t******** 身份证号 *** [%s]\n" , r -> Id_card) ;
- printf("\t\t******** 电话号码 *** [%s]\n" , r -> phone_number) ;
- printf("\t\t******** 航班号 *** [%s]\n" , r -> line_num) ;
- printf("\t\t******** 出发地 *** [%s]\n" , r -> start_place) ;
- printf("\t\t******** 目的地 *** [%s]\n" , r -> end_place) ;
- printf("\t\t******** 起飞时间 *** [%s]\n" , r -> start_time) ;
- printf("\t\t******** 降落时间 *** [%s]\n" , r -> end_time) ;
- printf("\t\t******** 座位号 *** [%d]\n" , r -> seat_num) ;
- printf("\t\t*************************************************************\n") ;
- printf("\n") ;
- r = r -> next ;
- }
- }
- }
- main(void)
- {
- Airline * A ;
- User * U ;
- A = NULL ;
- U = NULL ;
- A = input_airline_information(A) ;
- U = input_user_information(A , U) ;
- display_user_information(U) ;
- }
复制代码 |
|