Сохранение данных в файлах в c - PullRequest
0 голосов
/ 07 декабря 2018

Я работаю над этим проектом бронирования кино!Здесь я сталкиваюсь с двумя проблемами, связанными с сохранением данных.

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;
                }
    }

1 Ответ

0 голосов
/ 11 декабря 2018

Проблема в том, что очень трудно сохранить более одной структуры в двоичный файл.

Примечание. Двоичные файлы имеют расширение не «.txt», а z.".Bin", ".dat" или т.п .;Иногда двоичные файлы сохраняются даже без расширения.

Я думаю, что вы пытаетесь «спамить» пароль в двоичном файле (шифровать).К сожалению, я должен сказать вам, что это не работает.Если вы откроете файл в текстовом редакторе, вы увидите пароль.Я бы посоветовал вам сохранить данные в виде текстового файла и затем читать данные шаг за шагомКроме того, у вас не было объявлено все функции.Есть неявные объявления.Это может привести к ошибкам для более крупных программ.Для некоторых из них решением было бы включить stdlib.h.

Если вы хотите сохранить файл следующей ночью, пожалуйста, используйте режим Subfix "b" z.Например, "a + b".Возможно несколько полезных ссылок:

http://www.cplusplus.com/reference/cstdio/fopen/ http://www.cplusplus.com/reference/cstdio/fwrite/ Чтение / запись структуры в двоичный файл

Хотя я не смогрешить проблемы, но я надеюсь, что смогу помочь в любом случае.

Если вы все еще хотите сохранить структуры в двоичном файле, вы можете прочитать это в Интернете (я просто говорю, Google).Например, если вы хотите что-то зашифровать с помощью C, вы можете найти библиотеку crypt или что-то подобное.

...