星星博客 »  > 

QT大作业:学生管理系统(通过mysql数据库)

一、前言

学校实验室进行第二轮考核,第二次qt作业是学生管理系统。

 

要求如下:
1、连接数据库,对学生信息进行增删改查操作,可以使用qt的SQLITE,但大家需自行学习sql语句的语法才能实现相关功能(建议使用MYSQL)
2、需要做一个登录界面,登录过程使用数据库进行验证,登录成功后跳转主界面,视频会有相关显示
3、学生信息数据增删改查通过tableView控件显示,且查询需要与视频中功能相同,详情翻阅工具书
4、需要将增删改查操作信息显示在操作日志中
5、学习qt文件读写实现日志信息保存
6、需要在学生信息删改实现时加入消息弹窗,防止误操作
7、此次作业不要手写界面控件,要使用ui窗体对控件进行拖拽
8、在此基础上增加其他功能,视为加分项

二、思路与过程

首先安装mysql,因为qt版本是5.12没有mysql的驱动,要自己手动编译mysql的驱动,网上有许多教程。QT编译MYSQL驱动_qq_21532575的博客-CSDN博客

 

编译完驱动后,尝试qt与mysql连接,这里可以用一段代码测试 

\\把信息改成你数据库的信息
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("127.0.0.1");
            db.setPort(3306);
                db.setDatabaseName("mysql");
                QString root= "";
                QString passward="";
                    db.setUserName(root);
                        db.setPassword(passward);
                            bool ok = db.open();
                                if (ok){
                                            QMessageBox::information(this, "提示信息", "连接数据库成功");

                                           
                                                }
                                    else {
                                           QMessageBox::information(this, "错误信息", "连接数据库失败!  错误信息"+db.lastError().text());
                                            qDebug()<<"error open database because"<<db.lastError().text();
                                                        }

连接的结果,会有信息框提示

 

先来设计登入页面:

 

主页面:

添加信息,修改信息页面(两个页面差不多内容):

三、代码

 

链接: https://pan.baidu.com/s/1VThneMJTr8u1VaF4pcZPhQ 提取码: 1eaa 复制这段内容后打开百度网盘手机App,操作更方便哦

 

四、感悟与总结

1.字符串作为“模板”

 mysql =  QString("insert into pet(name,sfz,class,phone,adress,id) values('%1','%2','%3','%4','%5','%6')").arg(ss1).arg(ss2).arg(ss3).arg(ss4).arg(ss5).arg(ss6);
    query.exec(mysql);//memery delete

2.

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL","mysql_connect");
        db.setHostName("127.0.0.1");
            db.setPort(3306);
                db.setDatabaseName("mysql");

为连接命名 mysql_connect,一般不用命名

  QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
    database.setDatabaseName("configmain");
    database.setHostName("127.0.0.1");
    database.setPort(3306);
    database.setUserName("root");
    database.setPassword("root");

很好的QSqlDatabase问题说明,关于连接错误(转)_weixin_34242658的博客-CSDN博客

3.出现的错误

错误一:duplicate connetion name 'qt_sql_default_connection',old connection removed

解决办法:程序中多次建立了Qt与MySQL之间的连接,删除其中多于的建立关系,只保留一组即可。

错误二:QSqlQuery::value:not positioned on a valid record

解决办法:定义了QSqlQuery对象query后,query并没有指向任何记录,必须手动指定。可以使用next()、first()等。

但是注意一点,必须先执行query.exec(),在执行query.first()等语句,顺序很重要。
 

Qt与MySQL通信错误及解决方法_hubery_zhang的博客-CSDN博客

4.query的多种执行

    QString DBname;
    DBname ="nxcgqw1004";
    QString query=QString("select max(id) from %1").arg(DBname);
    QSqlQuery query1(query);//执行mysql语句
    int id= query1.value("id").toInt();//给id最新的值
QSqlDatabase db;
    db = QSqlDatabase::database("mysql_connect");	//连接已打开的数据库
    qDebug()<<db.open();
    QSqlQuery query(db);

    query.exec("SELECT * FROM mysql.pet");

第一个方式 QSqlQuery query("mysql语句",库名); 库名/连接名QSqlDatabase的名字

当有多个数据库连接时:

QT 连接多个数据库,必须指定不同的连接名字_restraint的专栏-CSDN博客

5.query.next()

近似于指针  一个一个向下遍历

6.QStandardItemModel类的使用

7.窗口布局,实现布局比例随窗口大小改变

8.右键菜单(获取鼠标位置,进入tableview事件,ui里的槽函数)

void gm::on_tableView_entered(const QModelIndex &index) // . -> ???
{
    tempp = index.row();

}

9.定时器

注意槽函数的写法


    time = new QTimer();
    time->setInterval(1000);
    connect(time,&QTimer::timeout,this,&gm::ontimeout);//lmd表达式,qtimer也是类
    time->start();

10.创建文件,对文件读写

txt文本覆盖,先读取出来txt文本(光标到最后),在写内容,就不会覆盖。  //该方法有待完善

中文乱码问题还未解决

11.QT父窗口与子窗口互相通信

Qt 主窗口与子窗口之间传值 - 一杯清酒邀明月 - 博客园 (cnblogs.com)

 

相关文章