Qt实现学生成绩管理系统——登录界面
2017-12-12 16:02阅读:
一个管理系统的任务很大,不过只要搞清楚我们在每个界面以及界面的转换之间做什么操作,就会变得非常简单。
首先我们想到的是最为熟悉的登录界面了,那么我们在这个界面都需要做什么操作呢。第一,要有用户名和密码,而且密码最好是密码模式,最好输入时还有文本提示。第二呢,要选择学生登录还是教师登录。学生登录和教师登录分别要有不同的效果,这个要通过槽函数实现。第三,只顾着登录,没有账号的一开始总要注册的,所以需要一个注册按钮。第四,还需要个退出按钮,退出系统。暂时想到的基本功能就这么多,剩下的美观问题,我们边编边想。
界面布置就这些,下面我们一步一步来实现。

(1)设置窗口的标题,图标,大小,是必须的。分别通过setWindowTitle,setWindowIcon,setMaximumSize,setMinimumSize函数来设置,非常简单,这里不再多说
(2)我们虽然加了两个复选按钮来区分学生或者教师登录,那么我们程序内部如何区分呢,这就需要将两个按钮加到一个按钮组中,在按钮组中每个按钮对应一个ID,我们通过ID来区分。
radiogroup=new
QButtonGroup(this);
radiogroup->adon(ui->studentradio,0);
radiogroup->adon(ui->teacherradio,1);
这里学生登录教师登录按钮分别对应ID 0 和 1.
(3)用户名和密码的设计中,我们需要有文本提示以及密码模式,通过
//设置lineedit提示语句
ui->userline->setPlaceholderText('请输入用户名');
ui->passwordline->setPlaceholderText('请输入密码');
//设置passlineedit显示为密码模式
ui->passwordline->setEchoMode(QLineEdit::Password);
(4)接下来就是信号与槽的设置。例如点击登录按钮要有登录操作的槽函数,点击注册按钮要有注册的界面弹出,我们要用connect函数连接,另外根据要求另外实现各自的槽函数,这个我们后面再说。
(5)下面我们考虑一下,程序的一些细节问题,比如当用户名或者密码没有填的时候,登录按钮应该不能操作,setEnable函数就可以实现了。
下面是这个界面的重头戏,槽函数的实现
(1)首先是登录的槽函数,填好用户名和密码之后,点击登录按钮,我们要做什么操作才是对的呢。应该是率先判断用户名和密码一栏是不是填好了,有一栏为空也要返回,不能做接下来的操作。然后就是判断是学生登录还是教师登录了,判断完各自有各自的操作。我们在这里通过按钮组的checkId函数来判断,此函数返回点击的按钮的ID,若没有按钮按下,则返回-1.
void LoginDialog::loginbtnSlot()
{
if(false ==
this->judgeEmpty())
{
ui->passwordline->clear();
return;
}
//判断是否学生登录
if(radiogroup->checkedId()==0)
{......}
else
if(radiogroup->checkedId()==1)
{.......}
else
QMessageBox::warning(this,'警告','请选择登录方式',QMessageBox::Yes);
}
登录的整体框架就是这样,这样看起来其实不是很难吧,然后我们需要在里面填清登录的具体操作。
鉴于登录操作肯定要和数据库关联,所以我们需要采用model-view模型。那么首先我们需要建立一个model对象,且动态分配空间,当然我们需要手动提交关于数据库的变化方案。
model=new
QSqlTableModel(this);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
在登录部分,以学生登录为例,数据库应选择为student,
model->setTable('student');
model->select();
那么如何登录呢,如果已经注册过,那么数据库一定有记录,我们需要遍历数据库,和已经输入的用户名和密码匹配,如果相同才能登录成功。这里需要用到QSqlRecord
来存储数据库的记录,以便对比。
for(i=0;irowCount();i++)
{
QSqlRecord
record=model->record(i);
if(record.value(0)==ui->userline->text() &&
record.value(5)==ui->passwordline->text())
{
}
else if(record.value(0)==ui->userline->text() &&
record.value(5)!=ui->passwordline->text())
{
QMessageBox::information(this,'提示','密码输入有误',QMessageBox::Yes);
this->clearAll();
return;
}
}
这里就登录成功了,登录界面就已经基本完成了,当然还缺少和其他界面的连接,以后的工作再接着补充。