Всем привет,как сверить ведённый логин и пароль уже с хранимшемся в файле? Я в функции void (main) сделал выбор,что при запуске программы выбор: 1- войти , 2- выйти Когда нажимаешь на 1 , то перекидывает на функцию login () В функции login я е запрашиваю логин и пароль, но тут у меня сразу возникет вопрос, в какие переменные мне считывать логин и пароль ? и как мне их сверить?
struct Account {
string login;
string password;
int role; //0-студент ,1 -админ
};
void GlavnoeMenu();
void login();
void MenuAccounts();
void writeFileAccounts(Account *arr_of_accounts, int number_of_accounts);
void writeEndFileAccounts(Account new_account );
void readFileAccounts(Account *arr_of_accounts, int &number_of_accounts);
void showAccounts(Account *arr_of_accounts, int number_of_accounts);
void addAccount(Account *arr_of_accounts, int &number_of_accounts);
void delAccount(Account *arr_of_accounts, int &number_of_accounts);
void updateAccount(Account *arr_of_accounts, int number_of_accounts);
const int SIZE_ARR_OF_ACCOUNTS = 100; //константа для размера нашего массива в 100 элементов
const string FILE_OF_ACCOUNTS = "Accounts.txt";// ПУТЬ К ФАЙЛУ
void main()
{
setlocale(LC_ALL, "rus");
Account arr_of_accounts[SIZE_ARR_OF_ACCOUNTS]; //создаём массив для структуры состоящей из 100 элементов
int number_of_accounts = 0;// ?
readFileAccounts(arr_of_accounts, number_of_accounts);//чтение из файла в массив , берём наш массив и номер аккаунта
bool flag_exit = true;
while (flag_exit) //пока flag_exit равен правда,то
{
//MenuAccounts(); // для отображения пунктов выбора меню
GlavnoeMenu();
int item; //item - переменная для выбора пункта меню
cin >> item; //просим ввести пункт выбора меню
switch (item)
{
case 1:login();
break;
case 2:flag_exit = false;
break;
}
}
writeFileAccounts(arr_of_accounts, number_of_accounts);
system("pause");
}
void GlavnoeMenu(){
cout << "Авторизация" << endl;
cout << "1: войти" << endl;
cout << "2: выход" << endl;
}
void login(){
cout << "Введите ваш логин " << endl;
cin >>
cout << "Введите ваш пароль" << endl;
cin >>
}
void MenuAccounts(){
cout << "Меню для работы с учётными записями пользователей"<<endl;
cout << "1: показать" << endl;
cout << "2: добавить" << endl;
cout << "3: удалить" << endl;
cout << "4: редактировать" << endl;
cout << "0: выход"<< endl;
}
void readFileAccounts(Account *arr_of_accounts, int &number_of_accounts)
{
ifstream fin(FILE_OF_ACCOUNTS, ios::in);//открыли файл для чтения
if (!fin.is_open())
{
arr_of_accounts[0].login = "admin";
arr_of_accounts[0].password = "admin";
arr_of_accounts[0].role = 1;
number_of_accounts = 1;
writeEndFileAccounts(arr_of_accounts[0]);
}
else
{
number_of_accounts = 0;
while (!fin.eof())
{
fin >> arr_of_accounts[number_of_accounts].login >> arr_of_accounts[number_of_accounts].password >> arr_of_accounts[number_of_accounts].role;
number_of_accounts++;
}
}
fin.close();// закрыли открытый файл
}
void writeFileAccounts(Account *arr_of_accounts, int number_of_accounts)
{
ofstream fout(FILE_OF_ACCOUNTS, ios::out);// Открыли файл для записи
for (int i = 0; i < number_of_accounts; i++)
{
if (i < number_of_accounts - 1)
fout << arr_of_accounts[i].login << " " << arr_of_accounts[i].password << " " << arr_of_accounts[i].role << endl;
else
fout << arr_of_accounts[i].login << " " << arr_of_accounts[i].password << " " << arr_of_accounts[i].role;
}
fout.close();
}
void writeEndFileAccounts(Account new_account)
{
ofstream fout(FILE_OF_ACCOUNTS, ios::app);//открыли файл для дозаписи
fout << endl;
fout << new_account.login << " " << new_account.password << " " << new_account.role;
fout.close();
}
void showAccounts(Account *arr_of_accounts, int number_of_acounts)
{
cout << "Таблица учётных записей пользователей "<<endl;
for (int i = 0; i < number_of_acounts; i++)
cout << setw(4) << left << i + 1 <<
setw(15) << left << arr_of_accounts[i].login <<
setw(15) << left << arr_of_accounts[i].password <<
setw(15) << left << arr_of_accounts[i].role << endl;
}
void addAccount(Account *arr_of_accounts, int &number_of_accounts)
{
number_of_accounts++;
cout << "Введите данные новой учётки" <<endl;
cout << "Логин ";
cin >> arr_of_accounts[number_of_accounts - 1].login;
cout << "пароль ";
cin >> arr_of_accounts[number_of_accounts - 1].password;
cout << "Роль ";
cin >> arr_of_accounts[number_of_accounts - 1].role;
system("cls");
cout << "Новая учётка добавлена !" << endl;
cout << endl;
}
void delAccount(Account *arr_of_accounts, int &number_of_accounts)
{
cout << "Введите номер удаляемой записи ";
int del_item;
cin >> del_item;
for (int i = del_item - 1; i < number_of_accounts; i++)
arr_of_accounts[i] = arr_of_accounts[i + 1];
number_of_accounts--;
system("cls");
cout << "запись удалена !" << endl;
cout << endl;
}
void updateAccount(Account *arr_of_accounts, int number_of_accounts)
{
cout << "Введите номер редактируемой записи ";
int upd_item;
cin >> upd_item;
cout << "отредактируейте данные учётной записи: "<<endl;
cout << "логин: !";
cin>>arr_of_accounts[upd_item - 1].login;
cout << "Пароль: !";
cin >> arr_of_accounts[upd_item - 1].password;
cout << "роль: !";
cin >> arr_of_accounts[upd_item - 1].role;
system("cls");
cout << "запись отредактирована !" << endl;
cout << endl;
}
А куда происходит ввод в void login()
? Если проблема с чтением в std::string
, которыми кстати у вас являются поля логина и пароля в структуре Account, то это делается так:
std::string input;
std::getline(std::cin, input);
Ну а сравнение std::string делается через обычный оператор "=="...
Читается и парсится файл с аккаунтами, в функции авторизации читаете в первый буфер ввода логин, если нашли его в своём файле, читаете дальше пароль и сверяете с тем, что соответствует этому логину в файле. Ну а если есть оба соответствия, разрешаете дальнейшие пункты меню.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день! Я студент технического вуза и самостоятельно пытаюсь выучить c++Что пытаюсь сделать :
Сначала получал дескриптор статика и использовал setwindowtext, но почему-то не робит
Некоторые авторы используют два двоеточия ("::") перед неймспейсом std, например:
Autoit работает хорошо, но c++ читает первый символ, как быть?