写一个教师信息管理系统的c++可视化程序,可以能够在界面显示教室信息的记录,通过菜单能够对数据库进行 增、删、改的操作。教室信息,包括教室容纳人数、教室空闲时间、教室设备等;
时间: 2023-12-06 11:44:24 浏览: 154
很高兴为您提供一个简单的教师信息管理系统的C++可视化程序。这个程序使用了Qt框架,包含一个主窗口和多个对话框。这个程序能够通过菜单进行增、删、改等操作,同时在界面中显示教室信息的记录。
以下是实现这个程序的步骤:
1. 创建一个Qt Widgets Application项目,命名为TeacherInfoManagementSystem。
2. 在主窗口中添加一个QTableView用于显示教室信息的记录。这个QTableView需要使用一个QSqlTableModel来管理数据。代码如下:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlTableModel>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建一个QSqlTableModel用于管理数据
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("classroom"); // 设置表名
model->select(); // 查询数据
ui->tableView->setModel(model); // 设置QTableView的模型
}
MainWindow::~MainWindow()
{
delete ui;
}
```
3. 创建一个对话框,用于添加教室信息。这个对话框包含多个QLineEdit用于输入教室容纳人数、空闲时间和设备等信息。代码如下:
```cpp
#include "addclassroomdialog.h"
#include "ui_addclassroomdialog.h"
AddClassroomDialog::AddClassroomDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AddClassroomDialog)
{
ui->setupUi(this);
}
AddClassroomDialog::~AddClassroomDialog()
{
delete ui;
}
void AddClassroomDialog::on_buttonBox_accepted()
{
// 获取用户输入的教室信息
QString capacity = ui->capacityLineEdit->text();
QString freeTime = ui->freeTimeLineEdit->text();
QString equipment = ui->equipmentLineEdit->text();
// 将教室信息插入到数据库中
QSqlQuery query;
query.prepare("INSERT INTO classroom (capacity, free_time, equipment) "
"VALUES (:capacity, :freeTime, :equipment)");
query.bindValue(":capacity", capacity);
query.bindValue(":freeTime", freeTime);
query.bindValue(":equipment", equipment);
query.exec();
// 发送信号告诉主窗口需要更新QTableView
emit dataChanged();
}
```
4. 在主窗口中添加一个“添加”菜单项,并在点击时打开上面创建的对话框。代码如下:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlTableModel>
#include <QMessageBox>
#include "addclassroomdialog.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建一个QSqlTableModel用于管理数据
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("classroom"); // 设置表名
model->select(); // 查询数据
ui->tableView->setModel(model); // 设置QTableView的模型
// 添加“添加”菜单项
QAction *addAction = new QAction(tr("添加"), this);
connect(addAction, &QAction::triggered, this, &MainWindow::addRecord);
ui->menuBar->addAction(addAction);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addRecord()
{
AddClassroomDialog dialog(this);
connect(&dialog, &AddClassroomDialog::dataChanged, this, &MainWindow::updateModel);
dialog.exec();
}
void MainWindow::updateModel()
{
// 更新QTableView的模型
QSqlTableModel *model = qobject_cast<QSqlTableModel *>(ui->tableView->model());
if (model)
model->select();
}
```
5. 创建一个对话框,用于删除教室信息。这个对话框显示一个QComboBox,用于选择要删除的教室信息。代码如下:
```cpp
#include "deleteclassroomdialog.h"
#include "ui_deleteclassroomdialog.h"
#include <QSqlQuery>
#include <QSqlError>
DeleteClassroomDialog::DeleteClassroomDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::DeleteClassroomDialog)
{
ui->setupUi(this);
// 从数据库中查询教室信息,并将其添加到QComboBox中
QSqlQuery query;
query.exec("SELECT * FROM classroom");
while (query.next())
{
QString id = query.value(0).toString();
QString capacity = query.value(1).toString();
QString freeTime = query.value(2).toString();
QString equipment = query.value(3).toString();
QString text = QString("%1 - %2 - %3 - %4").arg(id).arg(capacity).arg(freeTime).arg(equipment);
ui->classroomComboBox->addItem(text, id);
}
}
DeleteClassroomDialog::~DeleteClassroomDialog()
{
delete ui;
}
void DeleteClassroomDialog::on_buttonBox_accepted()
{
// 获取用户选择的教室信息的ID
QString id = ui->classroomComboBox->currentData().toString();
// 从数据库中删除该教室信息
QSqlQuery query;
query.prepare("DELETE FROM classroom WHERE id = :id");
query.bindValue(":id", id);
query.exec();
// 发送信号告诉主窗口需要更新QTableView
emit dataChanged();
}
```
6. 在主窗口中添加一个“删除”菜单项,并在点击时打开上面创建的对话框。代码如下:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlTableModel>
#include <QMessageBox>
#include "addclassroomdialog.h"
#include "deleteclassroomdialog.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建一个QSqlTableModel用于管理数据
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("classroom"); // 设置表名
model->select(); // 查询数据
ui->tableView->setModel(model); // 设置QTableView的模型
// 添加“添加”菜单项
QAction *addAction = new QAction(tr("添加"), this);
connect(addAction, &QAction::triggered, this, &MainWindow::addRecord);
ui->menuBar->addAction(addAction);
// 添加“删除”菜单项
QAction *deleteAction = new QAction(tr("删除"), this);
connect(deleteAction, &QAction::triggered, this, &MainWindow::deleteRecord);
ui->menuBar->addAction(deleteAction);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addRecord()
{
AddClassroomDialog dialog(this);
connect(&dialog, &AddClassroomDialog::dataChanged, this, &MainWindow::updateModel);
dialog.exec();
}
void MainWindow::deleteRecord()
{
DeleteClassroomDialog dialog(this);
connect(&dialog, &DeleteClassroomDialog::dataChanged, this, &MainWindow::updateModel);
dialog.exec();
}
void MainWindow::updateModel()
{
// 更新QTableView的模型
QSqlTableModel *model = qobject_cast<QSqlTableModel *>(ui->tableView->model());
if (model)
model->select();
}
```
7. 创建一个对话框,用于修改教室信息。这个对话框显示一个QComboBox,用于选择要修改的教室信息,以及多个QLineEdit用于输入新的教室容纳人数、空闲时间和设备等信息。代码如下:
```cpp
#include "modifyclassroomdialog.h"
#include "ui_modifyclassroomdialog.h"
#include <QSqlQuery>
#include <QSqlError>
ModifyClassroomDialog::ModifyClassroomDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ModifyClassroomDialog)
{
ui->setupUi(this);
// 从数据库中查询教室信息,并将其添加到QComboBox中
QSqlQuery query;
query.exec("SELECT * FROM classroom");
while (query.next())
{
QString id = query.value(0).toString();
QString capacity = query.value(1).toString();
QString freeTime = query.value(2).toString();
QString equipment = query.value(3).toString();
QString text = QString("%1 - %2 - %3 - %4").arg(id).arg(capacity).arg(freeTime).arg(equipment);
ui->classroomComboBox->addItem(text, id);
}
}
ModifyClassroomDialog::~ModifyClassroomDialog()
{
delete ui;
}
void ModifyClassroomDialog::on_classroomComboBox_currentIndexChanged(int index)
{
// 当用户选择一个教室信息时,将其原有的属性显示在QLineEdit中
QString id = ui->classroomComboBox->currentData().toString();
QSqlQuery query;
query.prepare("SELECT * FROM classroom WHERE id = :id");
query.bindValue(":id", id);
query.exec();
if (query.next())
{
ui->capacityLineEdit->setText(query.value(1).toString());
ui->freeTimeLineEdit->setText(query.value(2).toString());
ui->equipmentLineEdit->setText(query.value(3).toString());
}
}
void ModifyClassroomDialog::on_buttonBox_accepted()
{
// 获取用户选择的教室信息的ID和新的属性
QString id = ui->classroomComboBox->currentData().toString();
QString capacity = ui->capacityLineEdit->text();
QString freeTime = ui->freeTimeLineEdit->text();
QString equipment = ui->equipmentLineEdit->text();
// 更新数据库中的教室信息
QSqlQuery query;
query.prepare("UPDATE classroom SET capacity = :capacity, free_time = :freeTime, equipment = :equipment "
"WHERE id = :id");
query.bindValue(":capacity", capacity);
query.bindValue(":freeTime", freeTime);
query.bindValue(":equipment", equipment);
query.bindValue(":id", id);
query.exec();
// 发送信号告诉主窗口需要更新QTableView
emit dataChanged();
}
```
8. 在主窗口中添加一个“修改”菜单项,并在点击时打开上面创建的对话框。代码如下:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlTableModel>
#include <QMessageBox>
#include "addclassroomdialog.h"
#include "deleteclassroomdialog.h"
#include "modifyclassroomdialog.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建一个QSqlTableModel用于管理数据
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("classroom"); // 设置表名
model->select(); // 查询数据
ui->tableView->setModel(model); // 设置QTableView的模型
// 添加“添加”菜单项
QAction *addAction = new QAction(tr("添加"), this);
connect(addAction, &QAction::triggered, this, &MainWindow::addRecord);
ui->menuBar->addAction(addAction);
// 添加“删除”菜单项
QAction *deleteAction = new QAction(tr("删除"), this);
connect(deleteAction, &QAction::triggered, this, &MainWindow::deleteRecord);
ui->menuBar->addAction(deleteAction);
// 添加“修改”菜单项
QAction *modifyAction = new QAction(tr("修改"), this);
connect(modifyAction, &QAction::triggered, this, &MainWindow::modifyRecord);
ui->menuBar->addAction(modifyAction);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addRecord()
{
AddClassroomDialog dialog(this);
connect(&dialog, &AddClassroomDialog::dataChanged, this, &MainWindow::updateModel);
dialog.exec();
}
void MainWindow::deleteRecord()
{
DeleteClassroomDialog dialog(this);
connect(&dialog, &DeleteClassroomDialog::dataChanged, this, &MainWindow::updateModel);
dialog.exec();
}
void MainWindow::modifyRecord()
{
ModifyClassroomDialog dialog(this);
connect(&dialog, &ModifyClassroomDialog::dataChanged, this, &MainWindow::updateModel);
dialog.exec();
}
void MainWindow::updateModel()
{
// 更新QTableView的模型
QSqlTableModel *model = qobject_cast<QSqlTableModel *>(ui->tableView->model());
if (model)
model->select();
}
```
9. 在程序入口函数中创建一个QSqlDatabase对象,并连接到SQLite数据库。代码如下:
```cpp
#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlError>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 连接到SQLite数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("teacher_info.db");
if (!db.open())
{
QMessageBox::critical(nullptr, QObject::tr("无法打开数据库"),
QObject::tr("无法打开数据库,请检查数据库文件是否存在或者是否有足够的权限。\n"
"错误信息:%1").arg(db.lastError().text()));
return -1;
}
MainWindow w;
w.show();
return a.exec();
}
```
完成了以上步骤,编译并运行程序,即可看到一个简单的教师信息管理系统的界面。您可以通过菜单进行增、删、改等操作,并在界面中显示教室信息的记录。
阅读全文