在本项目中,我们将使用Qt开发一个简单的学生信息管理系统,实现以下功能:
- 添加学生信息(姓名、学号、性别、年龄、班级);
- 显示学生信息列表;
- 根据学号或姓名搜索学生信息;
- 修改学生信息;
- 删除学生信息。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
项目结构
本项目将包含以下文件:
- main.cpp:程序入口文件;
- student.h 和 student.cpp:定义学生类;
- studentwidget.h 和 studentwidget.cpp:定义学生信息管理界面;
- studentwidget.ui:学生信息管理界面的UI设计文件。
学生类的实现
首先,我们需要定义一个学生类,用于存储和管理学生信息。在student.h文件中,我们定义了如下类:
#ifndef STUDENT_H
#define STUDENT_H
#include <QString>
class Student
{
public:
Student();
Student(QString name, QString id, QString gender, int age, QString className);
QString getName() const;
void setName(const QString &value);
QString getId() const;
void setId(const QString &value);
QString getGender() const;
void setGender(const QString &value);
int getAge() const;
void setAge(int value);
QString getClassName() const;
void setClassName(const QString &value);
private:
QString name; // 姓名
QString id; // 学号
QString gender; // 性别
int age; // 年龄
QString className; // 班级
};
#endif // STUDENT_H
在student.cpp文件中,我们实现了这个类的所有成员函数:
#include "student.h"
Student::Student()
{
}
Student::Student(QString name, QString id, QString gender, int age, QString className)
{
this->name = name;
this->id = id;
this->gender = gender;
this->age = age;
this->className = className;
}
QString Student::getName() const
{
return name;
}
void Student::setName(const QString &value)
{
name = value;
}
QString Student::getId() const
{
return id;
}
void Student::setId(const QString &value)
{
id = value;
}
QString Student::getGender() const
{
return gender;
}
void Student::setGender(const QString &value)
{
gender = value;
}
int Student::getAge() const
{
return age;
}
void Student::setAge(int value)
{
age = value;
}
QString Student::getClassName() const
{
return className;
}
void Student::setClassName(const QString &value)
{
className = value;
}
学生信息管理界面的实现
接下来,我们需要创建一个学生信息管理界面,用于添加、显示、搜索、修改和删除学生信息。我们使用Qt Designer来设计该界面,并保存为studentwidget.ui文件。 在studentwidget.h文件中,我们定义了如下类:
#ifndef STUDENTWIDGET_H
#define STUDENTWIDGET_H
#include <QWidget>
#include <QList>
#include "student.h"
namespace Ui {
class StudentWidget;
}
class StudentWidget : public QWidget
{
Q_OBJECT
public:
explicit StudentWidget(QWidget *parent = nullptr);
~StudentWidget();
private slots:
void on_addButton_clicked();
void on_searchButton_clicked();
void on_modifyButton_clicked();
void on_deleteButton_clicked();
private:
Ui::StudentWidget *ui;
QList<Student> students; // 学生信息列表
void showStudentList(); // 显示学生信息列表
};
#endif // STUDENTWIDGET_H
在studentwidget.cpp文件中,我们实现了该类的所有成员函数:
#include "studentwidget.h"
#include "ui_studentwidget.h"
#include <QMessageBox>
StudentWidget::StudentWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::StudentWidget)
{
ui->setupUi(this);
// 添加一些默认学生信息
students.append(Student("张三", "1001", "男", 20, "计算机科学与技术"));
students.append(Student("李四", "1002", "女", 19, "计算机科学与技术"));
students.append(Student("王五", "1003", "男", 21, "计算机科学与技术"));
showStudentList();
}
StudentWidget::~StudentWidget()
{
delete ui;
}
// 显示学生信息列表
void StudentWidget::showStudentList()
{
ui->studentTableWidget->setRowCount(students.count());
for (int i = 0; i < students.count(); i++) {
Student student = students.at(i);
QTableWidgetItem *nameItem = new QTableWidgetItem(student.getName());
QTableWidgetItem *idItem = new QTableWidgetItem(student.getId());
QTableWidgetItem *genderItem = new QTableWidgetItem(student.getGender());
QTableWidgetItem *ageItem = new QTableWidgetItem(QString::number(student.getAge()));
QTableWidgetItem *classItem = new QTableWidgetItem(student.getClassName());
ui->studentTableWidget->setItem(i, 0, nameItem);
ui->studentTableWidget->setItem(i, 1, idItem);
ui->studentTableWidget->setItem(i, 2, genderItem);
ui->studentTableWidget->setItem(i, 3, ageItem);
ui->studentTableWidget->setItem(i, 4, classItem);
}
}
// 添加学生信息
void StudentWidget::on_addButton_clicked()
{
QString name = ui->nameLineEdit->text();
QString id = ui->idLineEdit->text();
QString gender = ui->genderComboBox->currentText();
int age = ui->ageSpinBox->value();
QString className = ui->classLineEdit->text();
students.append(Student(name, id, gender, age, className));
showStudentList();
}
// 根据学号或姓名搜索学生信息
void StudentWidget::on_searchButton_clicked()
{
QString searchText = ui->searchLineEdit->text();
QList<Student> result;
for (int i = 0; i < students.count(); i++) {
Student student = students.at(i);
if (student.getId().contains(searchText) || student.getName().contains(searchText)) {
result.append(student);
}
}
if (result.count() == 0) {
QMessageBox::information(this, "提示", "未找到符合条件的学生信息!");
} else {
QString msg = QString("搜索结果:共找到%1个学生信息\n").arg(result.count());
for (int i = 0; i < result.count(); i++) {
Student student = result.at(i);
msg += QString("姓名:%1,学号:%2,性别:%3,年龄:%4,班级:%5\n").arg(student.getName()).arg(student.getId()).arg(student.getGender()).arg(student.getAge()).arg(student.getClassName());
}
QMessageBox::information(this, "搜索结果", msg);
}
}
// 修改学生信息
void StudentWidget::on_modifyButton_clicked()
{
int row = ui->studentTableWidget->currentRow();
if (row == -1) {
QMessageBox::warning(this, "警告", "请先选择一行!");
return;
}
QString name = ui->nameLineEdit->text();
QString id = ui->idLineEdit->text();
QString gender = ui->genderComboBox->currentText();
int age = ui->ageSpinBox->value();
QString className = ui->classLineEdit->text();
students.replace(row, Student(name, id, gender, age, className));
showStudentList();
}
// 删除学生信息
void StudentWidget::on_deleteButton_clicked()
{
int row = ui->studentTableWidget->currentRow();
if (row == -1) {
QMessageBox::warning(this, "警告", "请先选择一行!");
return;
}
students.removeAt(row);
showStudentList();
}
在以上代码中,我们定义了一个QList来存储学生信息列表,并在showStudentList()函数中将学生信息显示在一个QTableWidget中。添加、搜索、修改和删除学生信息的操作都是基于该列表进行的。
程序入口
最后,我们需要在main.cpp文件中创建一个QApplication对象,并将StudentWidget作为主窗口显示出来:
cppCopy code#include "studentwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StudentWidget w;
w.show();
return a.exec();
}
总结
通过以上步骤,我们已经成功地创建了一个简单的学生信息管理系统。该系统具有添加、显示、搜索、修改和删除学生信息的功能,可以帮助我们更好地了解和掌握Qt的基本操作和界面设计。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓