коды для поиска в текстовом файле с использованием QT с C ++ - PullRequest
0 голосов
/ 23 ноября 2018

Я сейчас работаю над школьным проектом, и мне нужно построить систему управления учениками с QT.У меня есть текстовый файл со сведениями о студентах, перечисленными в строке, такой как:

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 выглядит точно так же, как показано ниже

имя и пароль номер идентификатора курсов gpa

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы упомянули, что используете Qt.Этот вопрос показывает, как читать файл построчно ( Читать текстовый файл построчно в Qt ) с помощью Qfile.

Затем вы можете использовать QStrings в встроенных операторах равенства, чтобы увидеть,Ты такой же.http://doc.qt.io/qt-5/qstring.html

0 голосов
/ 23 ноября 2018

непроверенная.Ожидается, что каждая строка (включая последнюю) заканчивается символом новой строки.Учитывая, что у вас есть 2 строки Q username и password:

#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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...