观前提要: 本项目是大学学习Qt时的结课作业,发出来记录一下(博客=大型网盘),所以技术上并不适合正式使用,仅学习参考
其中的数据库内容很稀烂,全是自己瞎鼓捣的,所以非常复杂繁琐
类的使用也很稀烂,本人在做这个时没学C++,有关这些部分基本上是参考+改编
内容概览
基本功能
- 使用QSQLITE数据库完成数据库的设计。
- 注册功能:包含学生注册,教师教辅人员注册,实验室管理员注册。
- 忘记密码的功能。
- 学生和老师以及实验室管理员的分别登陆后的权限不同,进入到不同的管理页面。
- 管理员页面可以完成实验室教师信息的增删改查功能。
- 学生注册后管理员可以查看修改删除学生的信息
- 管理员界面完成实验室分布情况的增删改查功能,提供实验室可以预约的人数。
- 学生注册登录后可以实现学生信息的完善,学生只可以查看和修改自己的信息,不可删除。
- 学生端完成实验室课程的预约,每一个学生完成预约,数据库中的可预约人数相应减少一个,只到实验室人数预约满了,该实验室不可再预约。
其他花里胡哨的小功能放下一期
1.显示密码/隐藏密码
2. 将成功登录的账号加入下拉框,以便下一次登录
3.ui设计
流程图(这个很有点水,不建议看,当时为了交作业粗制滥造的)
功能实现
数据库连接
数据库连接
// 数据库连接
CreatDatabase();
bool ok = db.open();
if (ok)
{
qDebug() << "database connect is ok";
}
else
{
qDebug() << "database connect is fail";
}
createTable("CREATE TABLE admin(id INTEGER PRIMARY KEY,name TEXT,password varchar(20),role int)");
createTable("CREATE TABLE student(id INTEGER PRIMARY KEY,name TEXT,institute TEXT,password varchar(20),role int,labid int)");
createTable("CREATE TABLE teacher(id INTEGER PRIMARY KEY,name TEXT,password varchar(20),role int)");
createTable("CREATE TABLE lab(id INTEGER PRIMARY KEY,name TEXT,total int,num int)");
创建数据库函数
// 创建数据库函数
void login::CreatDatabase()
{
// 创建一个数据库连接,指定数据库驱动
db = QSqlDatabase::addDatabase("QSQLITE");
// 数据库连接需要设置的信息
db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑
db.setDatabaseName("Labsys.db");// 数据库名
db.setUserName("root");// 用户名
db.setPassword("123456");// 密码
db.setPort(3306);// 端口号
}
建表函数
// 建表函数
void login::createTable(QString SQLcreateTable)
{
// 创建一个表
QString sql = SQLcreateTable;
// 实例化QSqlQuery,用于执行sql语句
QSqlQuery sq;
if(sq.exec(sql)){
//执行SQL的成功or失败
qDebug()<<"建表成功!";
}else{
qDebug()<<sq.lastError().text(); //输出错误信息
}
}
注册页面(signup)
(数据库在登录页面)
- 通过对comboBox_ide的检索,判断注册的身份
- 用3个if分别插入数据库(每个if里insert的表不同,和随机生成的学工号长度不同)
- 用随机数生成学工号长度,管理员为2位,教师为4位,学生为7位
- 注册成功弹出新窗口,上面通过父窗口向子窗口传值的方法(getLastWindow函数)将随机生成的学工号和用户输入的姓名密码显示在新窗口(succeed)上,实现反馈效果
参考:父窗口向子窗口传值
注册功能:包含学生注册,教师教辅人员注册,实验室管理员注册。
// 注册功能
void signup::on_pbt_signup_clicked()
{
int flag1 = ui->comboBox_ide->currentIndex();
if(flag1 == 0){
int role = 0;
int id = generateRandomNumber(1,99); //在1到99内生成一个数
QString name = ui->lineEdit_name->text();
QString password = ui->lineEdit_password->text();
if(name == "")
QMessageBox::warning(this,"","学工号不能为空!");
else if(password == "")
QMessageBox::warning(this,"","密码不能为空!");
else{
bool flag = insertadmin(db,id,name,password,role);
if(flag){
succeed *page_succeed = new succeed();
page_succeed->getLastWindow(role,id,name,password);
page_succeed->show();
this->hide();
connect(page_succeed,&succeed::back,[=](){
page_succeed->close();
this->show();
emit this->back();
});
}else
QMessageBox::information(this,tr("提示"),tr("注册失败!"));
}
}else if(flag1 == 1){
int role = 1;
int id = generateRandomNumber(1001,9999);//在1001到9999内生成一个数
QString name = ui->lineEdit_name->text();
QString password = ui->lineEdit_password->text();
if(name == "")
QMessageBox::warning(this,"","学工号不能为空!");
else if(password == "")
QMessageBox::warning(this,"","密码不能为空!");
else{
bool flag = insertteach(db,id,name,password,role);
if(flag){
succeed *page_succeed = new succeed();
page_succeed->getLastWindow(role,id,name,password);
page_succeed->show();
this->hide();
connect(page_succeed,&succeed::back,[=](){
page_succeed->close();
this->show();
emit this->back();
});
}
else
QMessageBox::information(this,tr("提示"),tr("注册失败!"));
}
}else if(flag1 == 2){
int role = 2;
int id = generateRandomNumber(1000001,9999999);//在1000001到9999999内生成一个数
QString name = ui->lineEdit_name->text();
QString password = ui->lineEdit_password->text();
if(name == "")
QMessageBox::warning(