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