qt小案例之学生成绩管理系统
MainWindow.h
点击查看代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include "Student.h"
#include<QStringList>
#include<QList>
#include<QTableWidgetItem>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//键盘操作
void keyPressEvent(QKeyEvent *event) override;
//加载数据
void loadData(const QString& filename);
//保存数据到文件中
void saveData(const QString& filename);
private slots:
void on_lookBtn_released();
void on_statBtn_released();
void on_quitBtn_released();
void on_addBtn_released();
void on_saveBtn_released();
private:
Ui::MainWindow *ui;
QStringList m_fields;//表头字段
QList<Student*> m_students;
};
#endif // MAINWINDOW_H
Student.h
点击查看代码
#ifndef STUDENT_H
#define STUDENT_H
#include<QString>
class Student
{
public:
Student();
void display();
QString number;
QString name;
QString classname;
qreal math;
qreal chinese;
qreal english;
};
#endif // STUDENT_H
main.cpp
点击查看代码
#include "MainWindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
MainWindow.cpp
点击查看代码
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include<QKeyEvent>
#include<QFile>
#include<QDebug>
#include<QTextStream>
#include<QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("学生成绩管理系统");
loadData("F:\\QT\\QTProjectFiles\\StudentManagerSystem\\image\\student.txt");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if(event->key()==Qt::Key_Escape){
ui->stackedWidget->setCurrentWidget(ui->menuPage);
}
}
void MainWindow::loadData(const QString &filename)
{
QFile file(filename);
//打开文件
if(!file.open(QIODevice::ReadOnly)){
qInfo()<<"open file faild";
return;
}
//读取数据
QTextStream stream(&file);
//读取表头
m_fields=stream.readLine().split("\t",QString::SplitBehavior::SkipEmptyParts);
//读取数据
while(!stream.atEnd()){
auto lineData=stream.readLine().split("\t",QString::SplitBehavior::SkipEmptyParts);
auto s=new Student;
s->number=lineData[0];
s->name=lineData[1];
s->classname=lineData[2];
s->math=lineData[3].toDouble();
s->chinese=lineData[4].toDouble();
s->english=lineData[5].toDouble();
m_students.push_back(s);
}
}
void MainWindow::saveData(const QString &filename)
{
//流操作<< >>
}
void MainWindow::on_lookBtn_released()
{
//切换到查看页面
ui->stackedWidget->setCurrentWidget(ui->lookPage);
//把list中的数据显示到表格中
ui->lookTableWidget->setColumnCount(m_fields.size());
ui->lookTableWidget->setHorizontalHeaderLabels(m_fields);
for(auto s:m_students){
//获取数量,将要添加的新行的行号
int row=ui->lookTableWidget->rowCount();
//1.添加空行
ui->lookTableWidget->insertRow(row);
ui->lookTableWidget->setItem(row,0,new QTableWidgetItem(s->number));
ui->lookTableWidget->setItem(row,1,new QTableWidgetItem(s->name));
ui->lookTableWidget->setItem(row,2,new QTableWidgetItem(s->classname));
//
ui->lookTableWidget->setItem(row,3,new QTableWidgetItem(QString::number(s->math)));
ui->lookTableWidget->setItem(row,4,new QTableWidgetItem(QString::number(s->chinese)));
ui->lookTableWidget->setItem(row,5,new QTableWidgetItem(QString::number(s->english)));
}
}
void MainWindow::on_statBtn_released()
{
//切换到统计页面
ui->stackedWidget->setCurrentWidget(ui->statPage);
}
void MainWindow::on_quitBtn_released()
{
close();//关闭窗口
}
void MainWindow::on_addBtn_released()
{
//添加一个新行,在最下面
ui->lookTableWidget->insertRow(ui->lookTableWidget->rowCount());
//跳转到最下面
ui->lookTableWidget->scrollToBottom();
//创建一个学生
m_students.push_back(new Student);
}
void MainWindow::on_saveBtn_released()
{
for(int i=0;i<ui->lookTableWidget->rowCount();i++){
m_students[i]->number=ui->lookTableWidget->item(i,0)->text();
m_students[i]->name=ui->lookTableWidget->item(i,1)->text();
m_students[i]->classname=ui->lookTableWidget->item(i,2)->text();
m_students[i]->math=ui->lookTableWidget->item(i,3)->text().toDouble();
m_students[i]->chinese=ui->lookTableWidget->item(i,4)->text().toDouble();
m_students[i]->english=ui->lookTableWidget->item(i,5)->text().toDouble();
}
QMessageBox::information(this,"保存提示","保存成功");
}
Student.cpp
点击查看代码
#include "Student.h"
#include<QDebug>
Student::Student()
{
}
void Student::display()
{
qInfo()<<number<<name<<classname<<math<<chinese<<english;
}
该系统只是有显示菜单,显示学生成绩,添加学生到列表,但是无法修改文件中的数据,存在当添加完学生后,和文件中的数据加倍显示在列表中。有保存修改的功能和退出功能
效果图:
bug图:
还是操作数据库方便,在文件上面操作数据,繁琐和复杂。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现