Как сохранить данные в файле на языке C
Я работаю над этим проектом бронирования кинотеатров !! 2 проблемы, с которыми я сталкиваюсь здесь, связаны с сохранением данных.
1) : Когда я закрываю программу и пытаюсь зарегистрировать нового пользователя, регистрационная информация предыдущего зарегистрированного пользователя удаляется, даже если я открываю файл в режиме "а+". но если я напрямую войду в систему с уже зарегистрированным пользователем, это сработает. дело в том, что я не могу зарегистрировать более 1 пользователя одновременно.
2) : Когда я закрываю программу и снова вошел в систему, информация о резервировании пользователя удаляется. я также хочу сохранить информацию о бронировании пользователя.
Как я могу решить эту проблему ?
Что я уже пробовал:
struct login { char fname[100]; char lname[100]; char username[20]; char password[20]; }; #include <stdio.h> #define RVALUE 5 #define CVALUE 10 int i, j; void DisplaySeats(void); void ReserveSeats(void); void ChooseSeat(void); void CancelSeat(void); void CheckCancelSeat(void); void menu(void); int Seats[RVALUE][CVALUE]; void registration(); void login(); int main() { int c; int choice, menu; printf("Welcome to our small Cinema!!!\n"); printf("\n"); //DisplaySeats(); printf("\n1 : register!!!\n"); printf("2 : login!!!\n"); printf("3 : quit\n"); printf("Enter your choice : \n"); scanf("%d",&c); switch (c) { case 1: registration(); break; case 2: login(); break; case 3: printf("Thankyou for Choosing our small Cinema !! \n"); getch(); exit(1); default : system("CLS"); printf("Enter a valid number !!\n"); main(); } getch(); } void registration() { FILE *log; log = fopen("login.txt", "a+"); struct login l; printf("\nEnter first name : "); scanf("%s", &l.fname); printf("\nEnter last name : "); scanf("%s", &l.lname); printf("\nEnter your Username : "); scanf("%s", &l.username); printf("\nEnter your password : "); scanf("%s", &l.password); fwrite(&l, sizeof(l), 1, log); fclose(log); printf("\nYou are successfully registered!!"); printf("\nYour UserId is %s and your password is %s", l.username, l.password); printf("\nNow login with your username and password!!"); printf("\nPress any key to continue ..."); getch(); system("CLS"); main(); } void login() { char username[100]; char password[100]; FILE *log; struct login l; log = fopen("login.txt", "r"); if (log == NULL) { printf("FILE NOT FOUND!!!"); exit(1); } printf("\nUserID : "); scanf("%s", &username); printf("\nPassword : "); scanf("%s", &password); while (fread(&l, sizeof(l), 1, log)); { if (strcmp(username, l.username) == 0 && strcmp(password, l.password)==0) { system("CLS"); printf("\nYou are successfully logged in !!\n"); menu(); } else { printf("\nYour UserID or password is incorrect !!\n"); printf("Press any key to continue ...\n"); getch(); system("CLS"); login(); } } fclose(log); } void ChooseSeat(void) { int row, col,k; printf("Which row do you want to choose? : "); scanf("%d", &row); printf("Which seat do you want to select? : "); scanf("%d", &col); if (row > RVALUE || col > CVALUE) { printf("Wrong Entry !! Try again\n"); ChooseSeat(); } else if (Seats[row - 1][col - 1] != 0) { printf("Seat is already reserved try again !!\n"); ChooseSeat(); } else { Seats[row - 1][col - 1] = 1; printf("Congratulations!! Reservation Completed!!!\n"); DisplaySeats(); printf("\nPress any key to go to main menu!!"); getch(); system("CLS"); main(); } } void ReserveSeats(void) { int NoOfSeats,i; printf("How many seats do you want to reserve?\n"); scanf("%d", &NoOfSeats); DisplaySeats(); for (i = 1; i <= NoOfSeats; i++) { ChooseSeat(); } } void DisplaySeats(void) { printf("\t \t Seats\n"); printf("\t 1 2 3 4 5 6 7 8 9 10\n"); for (i = 0; i < RVALUE; i++) { printf("Rows %d : ", i + 1); for (j = 0; j < CVALUE; j++) printf("%d ", Seats[i][j]); printf("\n"); } printf("\n"); } void CheckCancelSeat(void) { while (1) { for (i = 0; i < RVALUE; i++) { for (j = 0; j < CVALUE; j++) { if (Seats[i][j] == 0) { printf("There is no reserved seat available!!\n"); break; } else { CancelSeat(); } break; } break; } system("CLS"); break; } } void CancelSeat(void) { int r, c; printf("\nWhich row do you want to cancell ? : "); scanf("%d", &r); printf("\nWhich column do you want to cancell ? : \n"); scanf("%d", &c); if (Seats[r - 1][c - 1] != 0) { Seats[r - 1][c - 1] = 0; printf("Your Seat is Cancelled !!\n"); system("CLS"); } else { printf("Wrong Entry !!\n"); CancelSeat(); } } void menu(void) { int choice; DisplaySeats(); printf("1 : reserve a seat\n"); printf("2 : cancell a seat\n"); printf("3 : Main Menu\n"); printf("Enter your choice : \n"); scanf("%d", &choice); system("CLS"); switch (choice) { case 1: ReserveSeats(); break; case 2: CheckCancelSeat(); break; case 3: main(); break; default: printf("Please enter a valid choice!!"); menu(); break; } }
KarstenK
используйте цикл while в своей основной функции, чтобы избежать рекурсивного вызова.