我现在正在从事一个学校项目,我需要使用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
答案 0 :(得分:0)
未经测试。期望每行(包括最后一行)以换行符结尾。假设您有2个QString 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.
答案 1 :(得分:0)
您提到您正在使用Qt。这个问题显示了如何使用Qfile逐行读取文件(Read a text file line by line in Qt)。
然后,您可以在内置的相等运算符中使用QString,以查看它们是否相同。 http://doc.qt.io/qt-5/qstring.html