使用QT和C ++在txt文件中搜索的代码

时间:2018-11-23 03:32:38

标签: c++ qt

我现在正在从事一个学校项目,我需要使用QT构建学生管理系统。我有一个txt文件,其中在一行中列出了学生信息:

Studentname accountpassword  studentid

每次用户(学生)输入他们的学生名和密码时,我都必须检查名称和密码是否在数据库中(现在是txt文件)。

这就是我现在正在努力的目标。我不知道如何只能逐行搜索。例如,如果第一个学生用户名是jack,而他的密码是123456;同时,第二个学生的用户名为peter,密码为23567。

如何检查是否同时输入了用户名jack和123456?

void MainWindow::on_loginpush_clicked()
{
    QString username = ui -> lineedit_username -> text();
    QString password = ui -> lineedit_password -> text();

    if (username == "admin" && password =="admin")
    {
        Adminmanagment adminview;
        adminview.exec();
    }

    else if( (username != "admin") && (password !="admin"))
        {
            ifstream studentinfo("student.txt");
            if (!studentinfo.is_open())
            {

            }
            else 
            {
                string current_name;
                string current_password;
                string id;
                int numofcourses;
                int gpa;
                char newline;
                char space;
                bool valid =false;
                while((studentinfo>>current_name>>current_password>>id>>numofcourses>>gpa>>noskipws>>newline) &&newline == '\n')
                {   
                    if((current_name == username)&& (current_password== password))
                    {

                    }
                }
            }
}

我的student.txt如下所示

名称密码ID课程编号gpa

jack 123456 900440123 4 0
testing 987654 900542015 4 2
testing2 8888 900145265 4 2
testing3 8888 900158256 4 0

2 个答案:

答案 0 :(得分:0)

未经测试。期望每行(包括最后一行)以换行符结尾。假设您有2个QString usernamepassword

#include <fstream>
#include <string>
#include <cctype>  // std::isspace()

// ...

std::istream& eat_whitespace(std::istream &is) // eats whitespace except '\n'
{
    int ch;
    while (is && (ch = is.peek()) != EOF && ch != '\n'
           && std::isspace(static_cast<char unsigned>(ch)))
    {
        is.get();
    }
    return is;
}

// ...

std::ifstream studentinfo{ "your_file" };
if (!studentinfo.is_open())
    // big trouble

std::string current_name;
std::string current_password;
std::string id;
int numofcourses;
int gpa;
char newline;
bool valid = false;

while ((studentinfo >> current_name >> current_password >> id >> numofcourses >> gpa
                    >> eat_whitespace >> std::noskipws >> newline >> std::skipws )
       && newline == '\n')
{
    if (current_name == username.toLocal8Bit().constData() &&
        current_password == password.toLocal8Bit().constData())
    {
        valid = true;
        break;
    }
}

// valid now true if credentials found.

答案 1 :(得分:0)

您提到您正在使用Qt。这个问题显示了如何使用Qfile逐行读取文件(Read a text file line by line in Qt)。

然后,您可以在内置的相等运算符中使用QString,以查看它们是否相同。 http://doc.qt.io/qt-5/qstring.html