求教下列代码错误所在,自己实在是看不出错误在哪里了
程序代码:
#include<stdio.h> #include<direct.h> #include<string.h> #include<time.h> #include<stdlib.h> #define LEN_train sizeof(struct train) #define LEN_char sizeof(char) #define TRUE 1 #define FALSE 0 #define LEN 100000; typedef struct //这里使用typedef把train定义为struct的同义词以便下面的函数中可直接使用train来定义一个我们需要的在特定情况下的结构体数据. { int type; char ID[6]; int price; char date[11]; char s_station[20]; char t_station[20]; int num_passenger; int MAX_passenger; char b_seat[91]; }train; train t_data[LEN]; int t_num=0; //t_num用来记录t_data structure的总数量,同时方便在后面检索数据库以寻找需要的具体的一个t_data typedef struct { char name[20]; char ID[6]; char payment[5]; char re_date[5]; char seat[4]; char date[11]; int num_passenger; int MAX_passenger; int price; int k; //此处k代表顾客购买票的数量 char s_station[20]; char t_station[20]; }passenger; passenger p_data[LEN]; int p_num=0;//p_num用处同t_num void PUT_t(int i) { printf("train ID:%s\n",t_data[i].ID); printf("Start station:%20s\n",t_data[i].s_station); printf("Terminal station:%s\n" ,t_data[i].t_station); printf("Departure date:%s\n",t_data[i].date); printf("Capacity:%d",t_data[i].MAX_passenger); printf("Num of reserved passenger:%d\n",t_data[i].num_passenger); printf("Price(per ticket):%d\n",t_data[i].price); } void PUT_p(int j) { ("train ID:%s\n" "Start station:%s\n" "Terminal station:%s\n" "Departure date:%s\n" "Name:%s\n" "Reservation date:%s\n" "Price(per ticket):%d\n", p_data[j].ID,p_data[j].s_station,p_data[j].t_station,p_data[j].date,p_data[j].name,p_data[j].re_date,p_data[j].price); } int readf_t() { FILE *fpt; if ((fpt=fopen("data_train.txt","a+"))==NULL) { printf("\nFailed to load the database,tap to continue"); getchar(); exit(1); } fscanf(fpt, "%d", &t_num); fread(t_data, sizeof(passenger),t_num,fpt); fclose(fpt); return 0; } int savef_t() { FILE *fpt; if((fpt=fopen("data_train.txt","wb"))==NULL) { puts("\nFailed to load the database,tap to continue"); getchar(); exit(1); } fprintf(fpt,"%d",t_num); if(fwrite(t_data,sizeof(train),t_num,fpt)==0) { puts("\nFailed to record data in the file!"); exit(1); } puts("\nData successfully recorded..."); fclose(fpt); return 0; } int readf_p() { FILE *fpp; if ((fpp = fopen("data_passenger.txt", "a+")) == NULL) { printf("\nFailed to load the database,tap to continue"); getchar(); exit(1); } fscanf(fpp, "%d", &p_num); fread(p_data, sizeof(passenger),p_num,fpp); fclose(fpp); return 0; } int savef_p() { FILE *fpp; if((fpp=fopen("data_passenger.txt","wb"))==NULL) { puts("\nFailed to load the database,tap to continue"); getchar(); exit(1); } fprintf(fpp,"%d",p_num); if(fwrite(p_data,sizeof(passenger),p_num,fpp)==0) { puts("\nFailed to record data in the file!"); exit(1); } puts("\nData successfully recorded..."); fclose(fpp); return 0; } short strequal(char *str1, char* str2) { int i=0; if (strlen(str1)!=strlen(str2)) return 0; for (i;*(str1+i)!='\0';i++) { if (*(str1+i)!=*(str2+i)) return 0; } return 1; } void create_train(void) { int i, j; char choice; train create_t_data; for (i=1;i<LEN;i++) { memset(create_t_data.b_seat,'0',91); printf("************************Create Train No.%d************************\n",i); A: printf("Please enter the TYPE of the new train(1 or 2):\n"); fflush(stdin); scanf("%d",create_t_data.type); if (create_t_data.type=='1') { create_t_data.MAX_passenger=40; } else if (create_t_data.type=='2') { create_t_data.MAX_passenger=90; } else printf("please enter a valid number!"); goto A; printf("Please enter the ID:\n"); fflush(stdin); scanf("%s",create_t_data.ID); printf("Please enter the TICKET PRICE:\n"); fflush(stdin); scanf("%d",create_t_data.price); printf("Please enter the DEPARTURE DATE (Year-Month-Date):\n"); fflush(stdin); scanf("%s",create_t_data.date); printf("Please enter the STARTING STATION:\n"); fflush(stdin); scanf("%s",create_t_data.s_station); printf("Please enter the TERMINAL STATION:\n"); fflush(stdin); scanf("%d",create_t_data.t_station); printf("Caution:Are you sure you want to save the data? Any key(Yes) N(No) "); fflush(stdin); scanf("%s",&choice); if (choice == 'N' || choice == 'n') { printf("\nData not saved..."); } else { for (i=0;i<t_num;i++) if (t_data[i].ID==create_t_data.ID) { printf("\n%dhas been used,please change another number...\n", create_t_data.ID); puts("\nData not saved..."); PUT_t(i); break; } if (i==t_num) { t_data[t_num]=create_t_data; t_num++; PUT_t(i); savef_t(); } } printf("Continue to create new trains? Any key(Yes) N(no) "); fflush(stdin); scanf("%c", &choice); if (choice == 'N' || choice == 'n') { printf("\nTap to return to previous menu... "); fflush(stdin); getchar(); } } } void edit_line(void) { train e_data; char choice; int i,j; int e_train,T=0,L=0;//L用来判断是否新ID已被使用,T用来判断是否存在寻找的ID do { puts("\n1.Search the train ID\n" "2.Return to previous menu"); printf("\nPlease choose 1 or 2 to continue:"); fflush(stdin); scanf("%c",&choice); if (choice=='1') { printf("Please enter the train ID:\n"); fflush(stdin); scanf("%d",&e_train); for (i=0;i<t_num;i++) { if (t_data[i].ID==e_data.ID) T=1; PUT_t(i); A: printf("Please enter a new train ID:"); fflush(stdin); scanf("%d",&e_data.ID); for(i=0,L=0;i<t_num;i++) if (t_data[i].ID==e_data.ID) { printf("\n%d has been used,please change another ID...\n"); printf("Data not saved..."); PUT_t(i); L=1; goto A; } else if (L==0); { printf("Please enter a start station:"); fflush(stdin); scanf("%s",e_data.s_station); printf("Please enter a terminal station:"); fflush(stdin); scanf("%s",e_data.t_station); printf("Please enter a departure date(Year/Month/Date):"); fflush(stdin); scanf("%s",e_data.date); printf("Please enter a type number (1 or 2) for the new train:"); fflush(stdin); scanf("%d",&e_data.type); if (e_data.type=='1') e_data.MAX_passenger=40; else if (e_data.type=='2') e_data.num_passenger=90; else printf("please enter a valid number(1 or 2)"); printf("Are you sure you want to save the data of the new train? Y(yes) Any key(no) "); fflush(stdin); scanf("%c", &choice); if (choice == 'Y' || choice == 'y') { e_data.num_passenger=t_data[i].num_passenger; t_data[i]=e_data; savef_t(); puts("\n Information for the new train:"); PUT_t(i); } else { puts("\nData not saved,failed to edit..."); } break; } } } if (T==0) { puts("\n sorry,no information for this ID in database..."); } if (choice=='2'); { printf("\ntap to return to previous menu..."); fflush(stdin); getchar(); break; } printf("\nContinue to edit data? Any key(Yes) N(no):"); fflush(stdin); scanf("%c",&choice); if (choice == 'n' || choice == 'N') { printf("\ntap to return to previous menu... "); fflush(stdin); getchar(); break; } } while(1); } void search() { char choice; int i, flag=0;//flag用来判断是否有查询航班的信息,若执行查询过程中无障碍,则其值增加,否则保持为0 train s_data; do { puts("\n1.Search by ID\n" "2.Search by Start&Teriminal stations\n" "3.Search by departure date\n" "4.Back to previous menu\n"); printf("Choose one option and continue with enter:"); fflush(stdin); scanf("%c",&choice); fflush(stdin); switch(choice) { case '1':printf("Please enter an ID:"); fflush(stdin); scanf("%d",&s_data.ID); for(i=0;i<t_num;i++) if(t_data[i].ID==s_data.ID) { PUT_t(i); flag++; } break; case'2':printf("Please enter the name of start station:"); fflush(stdin); scanf("%s",s_data.s_station); printf("Please enter the name of terminal station:"); fflush(stdin); scanf("%s",s_data.t_station); for (i=0;i<t_num;i++) if((strcmp(t_data[i].s_station,s_data.s_station)==0)&& (strcmp(t_data[i].t_station,s_data.t_station)==0)) //strcmp用来判断两个str的关系,若返回值为0,则两者相等 { PUT_t(i); flag++; } break; case '3':printf("Please enter the departure date(Year/Month/Date"); fflush(stdin); scanf("%s",s_data.date); for (i=0;i<t_num;i++) if(strcmp(t_data[i].date,s_data.date)==0) { PUT_t(i); flag++; } break; case '4':return; default: printf("\nError!Please enter an integer(1-4):"); continue; } if(flag==0) { puts("\nSorry,no required information in database..."); } printf("\nContinue to search? Any key(Yes) N(no):"); fflush(stdin); scanf("%c",&choice); } while((choice!='n')&&(choice!='N')); } void reserve() { int i,j,k,m,n,L=0; //i,j用来表示t_data[i],p_data[j]某个特定的结构体数据,k代表购票的数量,L用来判断用户是否为第一次买票 passenger re_data; char choice; do { L=0; printf("\nPlease enter the train ID you need:"); fflush(stdin); scanf("%d",&re_data.ID); for(i=0;i<t_num;i++) if(t_data[i].ID==re_data.ID) { m=i; printf("\nPlease enter your name:"); fflush(stdin); scanf("%s",&re_data.name); printf("\nPlease enter the date(reservation date:"); fflush(stdin); scanf("%s",&re_data.re_date); printf("\nPlease enter the number of tickets you need:"); fflush(stdin); scanf("%d",&k); if (k<=0) { puts("\nPlease enter a valid number!"); goto B; } if(t_data[i].num_passenger+k>t_data[i].MAX_passenger) { printf("\nSorry,but you can only but %d ticket(s) at most.\n",t_data[i].MAX_passenger - t_data[i].num_passenger); goto B; } for(j=0;j<p_num;j++) if(p_data[j].ID==re_data.ID) if (strcmp(p_data[j].name,re_data.name)&&(strcmp(p_data[j].re_date,re_data.re_date))); { t_data[i].num_passenger+=k; savef_t(); p_data[j].k+=k; savef_p(); L=1; } if(L==0) { j=p_num; p_data[j]=re_data; p_num++; p_data[j].k=k; t_data[i].num_passenger+=k; p_data[j].num_passenger=t_data[m].num_passenger; p_data[j].price=t_data[m].price; strcpy(p_data[j].s_station,t_data[m].s_station); strcpy(p_data[j].t_station,t_data[m].t_station); savef_t(); savef_p(); PUT_p(j); } break; } else { printf("No such ID in the database..."); goto B; } B: printf("\nContinue to reserve? Any key(Yes) N(no):"); fflush(stdin); scanf("%c", &choice); } while (choice != 'n' && choice != 'N'); } void edit_reserve(void) { } void manage(void) { } void menu_admin(void) { char n[2]; do { system("cls"); printf("Please input an interger (1-3):\n" "*******************ADMINISTRATOR******************\n" "* (1) Creat New Railway Lines\n" "* (2) Edit A Railway Line\n" "* (3) Back to Main Menu\n" "**************************************************\n"); gets(n); switch(*n) { case '1':system("cls");create_train();break; case '2':system("cls");edit_line();break; default:break; } }while(*n!='3'); } void menu_agent(void) { char n[2]; do { system("cls"); printf("Please input an interger (1-6):\n" "*******************TICKET AGENT*******************\n" "* (1) Search A Line\n" "* (2) Reserve tickets\n" "* (3) Edit Reservation Information\n" "* (4) Back to Main Menu\n" "**************************************************\n"); gets(n); switch(*n) { case '1':system("cls");search();break; case '2':system("cls");reserve();break; case '3':system("cls");edit_reserve();break; case '4':return; default:break; } }while(*n!='5'); } void menu_manager(void) { char n[2]; do { system("cls"); printf("Please input an interger (1-5):\n" "**********************MANAGER*********************\n" "* (1) Number of Trains for TYPE T123\n" "* (2) Number of Trains for TYPE T456\n" "* (3) Number of Passengers for A Railway Line\n" "* (4) Total Revenue\n" "* (5) Back to Main Menu\n" "**************************************************\n"); gets(n); switch(*n) { case '1':system("cls");break; case '2':system("cls");break; case '3':system("cls");break; case '4':system("cls");break; case '5':break; default:break; } }while(*n!='5'); } void menu_mode(void) { printf("Please input an interger (1-4):\n" "********************Mode Choice*******************\n" "* (1) Administrator\n" "* (2) Ticket Agent\n" "* (3) Manager\n" "* (4) Exit\n" "**************************************************\n"); } int main(void) { char n[2]; do { system("cls"); menu_mode(); gets(n); switch(*n) { case '1':system("cls");menu_admin();break; case '2':system("cls");menu_agent();break; case '3':system("cls");menu_manager();break; default:break; } }while(*n!='4'); return 0; }
25,42,153,154行有错误..但是自己找了好久实在没发现错误在哪,求指教