基于Qt的实验室管理系统的设计(作业)

观前提要: 本项目是大学学习Qt时的结课作业,发出来记录一下(博客=大型网盘),所以技术上并不适合正式使用,仅学习参考
其中的数据库内容很稀烂,全是自己瞎鼓捣的,所以非常复杂繁琐
类的使用也很稀烂,本人在做这个时没学C++,有关这些部分基本上是参考+改编

基本功能

  1. 使用QSQLITE数据库完成数据库的设计。
  2. 注册功能:包含学生注册,教师教辅人员注册,实验室管理员注册。
  3. 忘记密码的功能。
  4. 学生和老师以及实验室管理员的分别登陆后的权限不同,进入到不同的管理页面。
  5. 管理员页面可以完成实验室教师信息的增删改查功能。
  6. 学生注册后管理员可以查看修改删除学生的信息
  7. 管理员界面完成实验室分布情况的增删改查功能,提供实验室可以预约的人数。
  8. 学生注册登录后可以实现学生信息的完善,学生只可以查看和修改自己的信息,不可删除。
  9. 学生端完成实验室课程的预约,每一个学生完成预约,数据库中的可预约人数相应减少一个,只到实验室人数预约满了,该实验室不可再预约。

其他花里胡哨的小功能放下一期
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)

(数据库在登录页面)

  1. 通过对comboBox_ide的检索,判断注册的身份
  2. 用3个if分别插入数据库(每个if里insert的表不同,和随机生成的学工号长度不同)
  3. 用随机数生成学工号长度,管理员为2位,教师为4位,学生为7位
  4. 注册成功弹出新窗口,上面通过父窗口向子窗口传值的方法(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(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值