学了这么久的Qt决定动手做一个小项目——多人同时在线考试系统。
这个管理考试系统的分为服务器端和客户端,两者之间的通信利用的是TCP/IP协议。
首先服务器端需要首先开启,然后服务器端会和MYSQL数据库进行连接。
客户端需要先注册一个账号,注册的时候将信息发送给服务器,服务器存到数据库中。
客户端启动的同时,会生成10个随机数,作为题号。
登录的时候需要将登录的信息发送给服务器,服务器从数据库中寻找有没有这个账号,然后判断密码是否一致,最后再将返回的结果返回给客户端。
在登录之后,学生需要选择试卷的题型,然后会跳到相应的考试界面。
做题的时候,客户端首先将题号发送给服务器,然后服务器从数据库中取出相应的题目信息发送给客户端,做完之后客户端会将学生的答案和从服务器发送的正确答案进行比较,给学生进行打分。做完之后可以查看学生每到题的得分、学生的选项以及正确的选项。同时可以查看学生的错题。最后学生退出考试体统的时候,客户端会将这个学生的所有考试记录存到服务器中的数据库中。
这里来看一下客户端中的一部分代码。
void Widget::readdata()
{
memset(&stu, 0, sizeof(stu));
tcpsocket->read((char*)&stu, sizeof(stu));
//qDebug()<< "发送过来的题号" << stu.questionNUmber;
switch (stu.resultflag) {
case 1:
registerresult(stu);//注册结果
break;
case 2:
loadingresult(stu);//登陆结果
default:
break;
}
}
void Widget::loadingresult(stuinfo stu)
{
if(stu.replyfalg == 0)//登陆成功
{
MainWindow *mi = new MainWindow(this);
mi->show();
this->hide();
//QMessageBox::information(this, "恭喜", "登陆成功");
ui->AccountEdit->clear();
ui->PasswordEdit->clear();
}
else if(stu.replyfalg == 1)//密码错误
{
QMessageBox::warning(this, "警告", "密码错误");
ui->PasswordEdit->clear();
}
else if(stu.replyfalg == 2)//没有此账号
{
QMessageBox::warning(this, "警告", "没有此账号");
ui->AccountEdit->clear();
ui->PasswordEdit->clear();
}
}
void Widget::registerresult(stuinfo stu)
{
if(stu.replyfalg == 0)
{
QMessageBox::information(this, "恭喜", "注册成功");
ui->stackedWidget->setCurrentWidget(ui->WelcomPage);
}
else
{
QMessageBox::warning(this, "警告", "注册失败");
ui->PasswordRegisterEdit->clear();
ui->AccountRegisterEdit->clear();
ui->AgainRegisterEdit->clear();
return;
}
}
由于代码太多,所以想看代码的小伙伴可以点击这里
多人同时在线考试系统完整代码
以下是考试系统的一些界面