Материал: ПЗ_Рушева_972304 (1)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

puts("------------------------------------------------

\n");

//ввод

 

printf(">> ");

 

scanf_s("%d", &c); getchar();

FILE* f = NULL;

/*для логина и пароля когда 1-ый раз запускается программа*/ char pwd[33], login[33];

/*если вход для администратора*/ if (c == 1)

{

/*файл админов открывается для чтения в бинарном режиме*/ fopen_s(&f, admins, "rb");

/*если не открылся, значит, скорее всего его ещё нет*/ if (!f)

{

puts("Это первый вход в систему. Необходима регистрация!"); /*файл открывается для записи*/

fopen_s(&f, admins, "wb");

/*если открылся...*/ if (f)

{

/*создаётся объект User с ролью ADMIN*/ User admin;

admin.role = ADMIN; /*вводится логин ...*/ printf_s("Введите логин: ");

gets_s(admin.login, sizeof admin.login); if (strlen(admin.login))

{

/*... и пароль*/ printf_s("Введите пароль: ");

gets_s(admin.password, sizeof admin.password); if (strlen(admin.password))

{

/*данные админа штфруются и записываются в соответствующий бинарный файл*/

encrypt(admin.login);

encrypt(admin.password); fwrite(&admin, 1, sizeof admin, f);

}

else

puts("Пароль не может быть

пустым!\nРегистрация отклонена!");

}

46

else

puts("Логин не может быть

пустым!\nРегистрация отклонена!");

}

/*файл закрывается ...*/ fclose(f);

f = NULL;

/*... и следует рекурсивный вызов этого меню*/ c = 5;

}

/*если файл admins.bin открылся, следует запрос логина и пароля*/ else

{

printf_s("Введите логин: "); gets_s(login, sizeof login); if (strlen(login))

{

printf_s("Введите пароль: "); gets_s(pwd, sizeof pwd);

if (strlen(pwd))

{

encrypt(login);

encrypt(pwd);

User u;

/*объект для чтения

данных админа из файла*/

while (fread(&u, sizeof u, 1, f) == 1) /*чтение

данных админа из файла*/

{

/*если логи/пароль совпали, значение с

остаётся = 1*/

if (!strcmp(u.login, login) &&

!strcmp(u.password, pwd))

{

puts("Ok!");

break;

}

}

if (feof(f))

{

/*если админа с данным логином/паролем нет в списке, значение с меняется на 5 в этом случае ф-ция вернёт значение CONTINUE*/

puts("Вы не зарегистрированы :("); c = 5;

}

47

}

else

{

puts("Пароль не может быть пустой строкой!"); c = 5;

}

}

else

{

puts("Логин не может быть пустой строкой!"); c = 5;

}

fclose(f); f = NULL;

}

}

/*если вход для пользователя, то меняется только файл*/ else if (c == 2)

{

fopen_s(&f, users, "rb"); if (!f)

{

puts("Это первый вход в систему. Необходима регистрация!"); /*файл открывается для записи*/

fopen_s(&f, users, "wb");

/*если открылся...*/ if (f)

{

/*создаётся объект User с ролью GUEST*/ User user;

user.role = GUEST; /*вводится логин ...*/ printf_s("Введите логин: ");

gets_s(user.login, sizeof user.login); if (strlen(user.login))

{

/*... и пароль*/ printf_s("Введите пароль: ");

gets_s(user.password, sizeof user.password); if (strlen(user.password))

{

/*данные пользователя шифруются и записываются в соответствующий бинарный файл*/

encrypt(user.login);

encrypt(user.password);

48

fwrite(&user, 1, sizeof user, f);

}

else

puts("Пароль не может быть

пустым!\nРегистрация отклонена!");

}

else

puts("Логин не может быть

пустым!\nРегистрация отклонена!");

}

/*файл закрывается ...*/ fclose(f);

f = NULL;

/*... и следует рекурсивный вызов этого меню*/ c = 5;

}

/*если файл users.bin открылся, следует запрос логина и пароля*/ else

{

printf_s("Введите логин: "); gets_s(login, sizeof login); if (strlen(login))

{

printf_s("Введите пароль: "); gets_s(pwd, sizeof pwd);

if (strlen(pwd))

{

encrypt(login);

encrypt(pwd);

User u;

/*объект для чтения

данных пользователя из файла*/

while (fread(&u, sizeof u, 1, f) == 1) /*чтение

данных пользователя из файла*/

{

/*если логи/пароль совпали, значение с

остаётся = 1*/

if (!strcmp(u.login, login) &&

!strcmp(u.password, pwd))

{

puts("Ok!");

break;

}

}

if (feof(f))

49

{

/*если пользователя с данным логином/паролем нет в списке, значение с меняется на 5 в этом случае ф-ция вернёт значение CONTINUE*/

puts("Вы не зарегистрированы :("); c = 5;

}

}

else

{

puts("Пароль не может быть пустой строкой!"); c = 5;

}

}

else

{

puts("Логин не может быть пустой строкой!"); c = 5;

}

fclose(f); f = NULL;

}

}

/*проверка пользовательского ввода и определение возвращаемого

значения*/

switch (c)

{

case 1:

return ADMIN;

case 2:

return GUEST;

case 3:

return EXIT; default:

break;

}

/*случай, когда, например, с = 5*/ return CONTINUE;

}

50

Источник: https://studfile.net/preview/16447983/