qt小案例之学生成绩管理系统

发布时间 2023-06-21 00:31:28作者: 满城衣冠

 

image

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;
}

该系统只是有显示菜单,显示学生成绩,添加学生到列表,但是无法修改文件中的数据,存在当添加完学生后,和文件中的数据加倍显示在列表中。有保存修改的功能和退出功能
效果图:
image
image

image
bug图:
image

还是操作数据库方便,在文件上面操作数据,繁琐和复杂。