Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не работает метод Login C++ ( работает но неправильно)

Despicable SHW Ученик (14), закрыт 1 год назад
Лучший ответ
Николай Веселуха Высший разум (356492) 1 год назад
 #include  
#include
#include
#include
using namespace std;
class PersonData {
public:
PersonData() : flag(false) {}
~PersonData() {
if (flag) save(path);
}
bool load(const string& path) {
ifstream inp(path);
if (inp.is_open()) {
string login;
string password;
while (inp >> login >> password) pd.insert({ login, password });
inp.close();
return true;
}
return false;
}
void save(const string& path) {
if (flag) {
ofstream out(path);
if (out.is_open()) {
for (const auto& [login, password] : pd) out << login << ' ' << password << '\n';
flag = false;
}
}
}
bool check(const string& login, const string& password)const {
return pd.contains(login) && pd.at(login) == password;
}
bool add(const string& login, const string& password) {
if (pd.contains(login)) return false;
pd.insert({ login, password });
flag = true;
return true;
}
private:
bool flag;
string path;
map pd;
};
class User {
public:
bool entry() {
PersonData pd;
if (!pd.load(location)) {
puts("Ошибка: сервис не доступен в данный момент!");
return false;
}
string password = attempt();
if (!pd.check(login, password)) {
puts("Ошибка: неверный Логин или Пароль");
return false;
}
return true;
}
bool registration() {
puts("Зарегистрируйтесь...");
PersonData pd;
if (!pd.load(location)) {
puts("Ошибка: сервис не доступен в данный момент!");
return false;
}
string first_password = attempt();
string second_password;
while (first_password != second_password) {
if (!second_password.empty()) puts("Пароли не совпадают!");
cout << "Повторите пароль: ";
cin >> second_password;
}
if (!pd.add(login, first_password)) {
puts("Пользователь с таким логином уже существует!");
login.clear();
return false;
}
pd.save(location);
puts("Регистрация завершена!");
return true;
}
string username()const {
return login;
}
private:
string login;
inline static const string location{ "pd.txt" }; // создайте файл pd.txt
string attempt() {
cout << "Логин: ";
cin >> login;
cout << "Пароль: ";
string password;
cin >> password;
return password;
}
};
int main() {
system("chcp 1251 > nul");
User user;
if (!user.entry()) user.registration();
cout << "Добро пожаловать, " << user.username() << "!\n";
system("pause > nul");
}
Остальные ответы
Сергей Гений (55530) 1 год назад
Дикая вакханалия!
1. сheck принимает вторым параметром int a, которая в методе нигде не всплывает.
Вместо проверки ее - вы проверятете свои константы, которые никогда не меняются.
2. у вас Login заявлен дважды как метод класса и как деф еденицы - не критично
но вы уже запутались. Вывод не используйте одно и тоже слово.
3. if (Check::Login) - бессмысленно, потому что чек::логин - это у вас константная единица всегда. Предпологалось же if (a==Check::Login). То же самое с паролем. if(a==Check::Password)
4. открывать файлы, которые используются только в классе, вне класса - непрактично. Их можно обьявить статик членами класса или же использовать только в соответствующих методах класса. Чтобы в дальнейшем они не отвлекали.
Похожие вопросы