📜  用于登录和注册的简单程序 C++ (1)

📅  最后修改于: 2023-12-03 15:27:12.059000             🧑  作者: Mango

用于登录和注册的简单程序 C++

对于几乎所有的应用程序,登录和注册是至关重要的功能之一。在这个简单的C++程序中,我们将介绍如何创建一个简单的登录和注册功能。我们将使用文件系统来保存用户信息。

程序预备

在开始之前,我们需要确保我们在本地有一个C++编译器。我们可以使用任何一个集成开发环境(IDE),比如Code::Blocks,Visual Studio和Dev-C++等等。

程序设计

在此简单程序中,我们将使用一个结构体来存储用户信息。同时,我们将使用文件系统来保存和读取用户信息。下面是用户结构体的定义:

struct User {
    std::string username;
    std::string password;
};

接下来,我们将使用一个vector来存储用户信息:

std::vector<User> users;

现在我们可以向用户提供一个简单的菜单,他们可以选择登录或注册:

int main() {
    int choice;
    loadUsers();

    while (true) {
        std::cout << "Menu:\n";
        std::cout << "1. Login\n";
        std::cout << "2. Register\n";
        std::cout << "3. Quit\n";

        std::cout << "Enter your choice: ";
        std::cin >> choice;

        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

        if (choice == 1) {
            login();
        }
        else if (choice == 2) {
            registerUser();
        }
        else if (choice == 3) {
            break;
        }
        else {
            std::cout << "Invalid choice. Try again.\n";
        }
    }

    return 0;
}

现在我们可以开始实现login()registerUser()函数。我们可以使用std::find()函数来查找向量中是否存在特定的用户。

登录

login()函数中,我们将要求用户输入用户名和密码。如果找到了匹配的用户,则会向用户提供一个简单的消息来表示他们已经成功登录。否则,我们将向用户提供一个错误消息。

void login() {
    std::string username;
    std::string password;

    std::cout << "Enter your username: ";
    std::getline(std::cin, username);

    std::cout << "Enter your password: ";
    std::getline(std::cin, password);

    auto user = std::find_if(users.begin(), users.end(), [&](const User &u) {
        return (u.username == username && u.password == password);
    });

    if (user != users.end()) {
        std::cout << "Login successful!\n";
    }
    else {
        std::cout << "Login failed. Please try again.\n";
    }
}
注册

registerUser()函数中,我们将要求用户输入新的用户名和密码。如果向量中已经存在该用户名,则不允许注册该用户,否则我们将该用户添加到向量中,并将用户信息保存到文件中。

void registerUser() {
    std::string username;
    std::string password;

    std::cout << "Enter your username: ";
    std::getline(std::cin, username);

    auto user = std::find_if(users.begin(), users.end(), [&](const User &u) {
        return (u.username == username);
    });

    if (user != users.end()) {
        std::cout << "Username already exists. Please try a different username.\n";
    }
    else {
        std::cout << "Enter your password: ";
        std::getline(std::cin, password);

        User newUser{username, password};
        users.push_back(newUser);
        saveUsers();

        std::cout << "Registration successful!\n";
    }
}
代码实现

在这里,我们将给出完整的程序。请注意,我们使用了C++ 11的新特性,auto类型和lambda表达式:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <limits>

struct User {
    std::string username;
    std::string password;
};

std::vector<User> users;

void loadUsers() {
    std::ifstream file("users.txt");

    if (file.is_open()) {
        std::string line;

        while (std::getline(file, line)) {
            size_t delim = line.find(":");

            std::string username = line.substr(0, delim);
            std::string password = line.substr(delim + 1);

            User user{username, password};
            users.push_back(user);
        }

        file.close();
    }
}

void saveUsers() {
    std::ofstream file("users.txt");

    if (file.is_open()) {
        for (auto user : users) {
            file << user.username << ":" << user.password << "\n";
        }

        file.close();
    }
}

void login() {
    std::string username;
    std::string password;

    std::cout << "Enter your username: ";
    std::getline(std::cin, username);

    std::cout << "Enter your password: ";
    std::getline(std::cin, password);

    auto user = std::find_if(users.begin(), users.end(), [&](const User &u) {
        return (u.username == username && u.password == password);
    });

    if (user != users.end()) {
        std::cout << "Login successful!\n";
    }
    else {
        std::cout << "Login failed. Please try again.\n";
    }
}

void registerUser() {
    std::string username;
    std::string password;

    std::cout << "Enter your username: ";
    std::getline(std::cin, username);

    auto user = std::find_if(users.begin(), users.end(), [&](const User &u) {
        return (u.username == username);
    });

    if (user != users.end()) {
        std::cout << "Username already exists. Please try a different username.\n";
    }
    else {
        std::cout << "Enter your password: ";
        std::getline(std::cin, password);

        User newUser{username, password};
        users.push_back(newUser);
        saveUsers();

        std::cout << "Registration successful!\n";
    }
}

int main() {
    int choice;
    loadUsers();

    while (true) {
        std::cout << "Menu:\n";
        std::cout << "1. Login\n";
        std::cout << "2. Register\n";
        std::cout << "3. Quit\n";

        std::cout << "Enter your choice: ";
        std::cin >> choice;

        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

        if (choice == 1) {
            login();
        }
        else if (choice == 2) {
            registerUser();
        }
        else if (choice == 3) {
            break;
        }
        else {
            std::cout << "Invalid choice. Try again.\n";
        }
    }

    return 0;
}
结尾

现在我们已经创建了一个简单的登录和注册系统。虽然这个程序做得很好,但是它缺乏一些重要的特性。比如,我们可以为用户添加更多的字段(例如,电子邮件地址等)。我们还可以考虑加入一些安全特性,例如口令策略等等。然而,这个简单程序足以让我们了解如何使用C++创建登录和注册功能。