通过数据库实现学生管理系统
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//判断数据库对象是否包含了自己使用的数据库 Studemt.db
if(!db.contains("Student.db"))
{
//添加一个数据库
db = QSqlDatabase::addDatabase("QSQLITE"); //表示使用的是sqlite3版本的数据库
//给数据库命名
db.setDatabaseName("Student.db");
}
//打开数据库
if(!db.open())
{
QMessageBox::information(this,"提示","数据库打开失败");
return;
}
//此时说明数据库创建完毕并打开
//就可以创建数据表了
//需要使用SQL语句,需要使用QSQLQuerry类对象完成
//准备SQL语句
QString sql = "create table if not exists myTable(" //创建表的sql语句
"id integer primary key autoincrement," //id主键,允许自增
"numb integer," //学号,是整形
"name varchar(10)," //姓名 字符串
"score integer,"
"sex varchar(4))"; //性别 字符串
//定义语句执行者
QSqlQuery querry;
//使用queery执行SQL语句
if(!querry.exec(sql))
{
QMessageBox::information(this,"失败","创建表失败");
}else
{
QMessageBox::information(this,"成功","创建表成功");
}
}
Widget::~Widget()
{
delete ui;
}
//录入按钮对应的槽函数
void Widget::on_btn1_clicked()
{
//获取ui界面中要存入数据库中的数据
int numb_ui = ui->edit1->text().toInt(); //获取学号
QString name_ui = ui->edit2->text(); //获取姓名
int score_ui = ui->edit3->text().toInt(); //获取分数
QString sex_ui = ui->edit4->text(); //获取性别
if(numb_ui == 0 || name_ui.isEmpty() || score_ui == 0||sex_ui.isEmpty())
{
QMessageBox::information(this,"提示","请将信息填充完整");
return ;
}
//准备SQL语句
QString sql = QString("insert into myTable(numb,name,score,sex)"
"values(%1,'%2',%3,'%4')")
.arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);
//定义语句执行官
QSqlQuery querry;
//调用执行者的相关函数执行SQL语句
if(!querry.exec(sql))
{
QMessageBox::information(this,"失败","插入失败");
}else
{
QMessageBox::information(this,"成功","插入成功");
}
}
//展示按钮对应的槽函数
void Widget::on_btn2_clicked()
{
//准备SQL语句
QString sql = "select * from myTable";
//准备语句执行者
QSqlQuery querry;
if(!querry.exec(sql))
{
QMessageBox::information(this,"失败","查找失败");
return;
}
//此时将查找的所有结果全都都放在querry对象中
//可以通过next函数不断遍历查询结果
int i = 0; //记录行号
while(querry.next())
{
//遍历任意一组记录,querry.record
//querry.record();
//要找到每条一条记录 中的每个数据使用
//qDebug() << querry.record().value(2);
//返回当前记录对应数据项的个数
//querry.record().count();
//将记录的某一项的数据转变成了字