Member 13780562 Ответов: 2

Как я могу найти пароль, снова запросив имя пользователя в C++?


Я создал такую базу данных(на самом деле это одна из частей моей большой программы). Он работает отлично. Но мне нужно, чтобы моя программа нашла пароль, снова запросив имя пользователя. Он находится в корпусе выключателя.Как я могу это сделать? Пожалуйста, помогите!

Что я уже пробовал:

class LoginPage
{
private:
public:
bool Login();
void login_intro();
};

bool LoginPage::Login()
{
string username, password, name, pin;
cout << "enter username: ";
cin >> username;
cout << "enter password: ";
cin >> password;
ifstream in("newuser" + username + ".txt");
getline(in, name);
getline(in, pin);


if (name == username&&pin == password)  return true;
else return false;
}

void LoginPage::login_intro()
{
start:
system("cls");
cout << "\t\t\tQUIZLET of IUT\n\n";
cout << "\t\t\t1.Register\n\t\t\t2.Login\n";
int a;
cin >> a;
if (a == 1)
{
reg:
    system("cls");
    string username, password, password1;
    cout << "\nSelect username: "; cin >> username;
    cout << "\nSelect password: "; cin >> password;
    for (int i = 0; i != 50; i++)
    {
        cout << "\nConfirm password: "; cin >> password1;
        if (password != password1) cout << "Passwords do not match!\n";
        else if (password == password1) i = 49;
    }

    ofstream new_user("newuser" + username + ".txt", ios::app);
    new_user << username << endl << password;
    new_user.close();
    system("cls");
    goto start;
}
else if (a == 2)
{
    system("cls");
CHECKPOINT:
    bool status = Login();
    if (!status)
    {
        cout << "\nIncorrect username or password\n";
        cout << "1. Try again\n2. Forgot password?\n3. Don't have an account, register\n";
        asd:
        cin >> a; 
        switch (a)
        {
        case 1:
            goto CHECKPOINT;
            break;
        case 2:
            //I have to do something here
            break;
        case 3:
            goto reg;
            break;
        default:
            cout << "Please enter a proper value\n";
            goto asd;
        }
        _getch(); system("cls");
        goto CHECKPOINT;
    }
    else cout << "You have successfully logged in\n"; 
    Sleep(700);
    system("cls");
}
else if (a != 1 || a != 2)
{
    cout << "Please enter a proper value\n";
    goto start;
}
}

Patrice T

- Но мне нужно, чтобы моя программа нашла пароль, снова запросив имя пользователя."
Это не имеет никакого смысла для меня, не могли бы вы объяснить и дать подробную информацию о контексте ?

Member 13780562

вроде как если вы забыли свой пароль, он должен отображать ваш пароль и имя пользователя. Это похоже на поиск

2 Ответов

Рейтинг:
2

Rick York

This is just a issue of properly writing your logic. To begin, I would make a class that contains all of the user's information (name, password, PIN, etc...) and write methods to accept entry of them and to validate them. Then take a step back, think carefully about you are trying to do, and rewrite the code using loops without gotos. Gotos are a really bad idea in C++ because they can cause all kinds of nasty problems like memory leaks when you jump around an object's destructor. You can use break and continue to control the execution flow of the loop. Break exits a loop and continue advances to the end of the loop which causes the iteration statement(s) of a for loop to be executed.


Рейтинг:
2

KarstenK

Вы должны избегать операторов goto, потому что они плохо влияют на читаемость и поток программы. Вместо этого можно вызвать функцию.

Я бы предложил сделать петлю:

bool password = false;

do {
  //your code
  password = true;//when checked successfully
} while( password == false );

Когда пароль неверен пользователь только нужно ввести пароль еще раз.

Взгляните в окно. Изучайте C++ учебник, потому что я вижу в вашем коде большой пробел в знаниях.