初学者用Qt实现小型运动会成绩管理软件


前言

由于是第一次接触到涉及有关界面可视化的方面,出现了许许多多的在做此次任务之前未曾出现的问题与困难。从学编程开始,一直想去做一个完整而有实用性的程序,这次任务正好给了我这个机会。Qt对我来说是一个全新的概念,其中复杂而又强大的功能令我起初无所适从,不知从何下手。互联网上对于Qt的学习也并未达到普及程度,很多问题以及实现方法都没有经验可以借鉴,所以刚开始的时候几乎是一段很艰难的时期。连使用Qt的最基础使用技巧都无法熟练掌握,一直处于一种摸着石头过河的状态。我也曾在网上搜索我这任务的代码,可是Qt的模范代码几乎都是学生成绩管理系统,我只能再次基础去改写。在学习Qt的期间,也曾试想用别的方法来完成此次任务,但是都因为方法过于难以实现以及学习周期过长放弃。在经历了大概一周的摸索过程中,渐渐可以看懂部分教程和别人的代码,慢慢对自己的程序的设想也渐渐清晰了起来。在我一位研究生师兄的帮助下,我开始了艰难的边学习边实现的编程,也曾为了一个功能的实现熬一个通宵,也曾因为一个功能的突破而兴奋的不能自已。QT的控件操控,界面的划分,数据的存储,都成为路上的拦路虎,搜集资料,询问师兄,自己摸索,慢慢的我一个一个问题的解决。终于,我漫长的编程过程结束了,为我自己的第一次尝试画上句号。


运行截图太多了,就不在这里展示了,我将所有的测试和界面展示都放在文档里了,需要的朋友可以在文档中查看,我也将所有的源码打包放在了一起,下面是百度网盘的链接:链接:https://pan.baidu.com/s/13-gnK_ZuE47xpso2-Zm3LA
提取码:cjgl


Qt下载

我也是新手第一次用,之前在网上找了很多很多的教程,但是都效果很差,我这里有我自己使用的5.9版本,朋友们需要的话可以看一下,里面有很详细的教程:http://c.biancheng.net/view/3851.html

一、要求是什么?

设计一款小型学生运动会成绩管理软件,系统主要功能及报告要求如下:

  1. 记录某校运动会上全部运动项目,包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等;
  2. 记录各系获得的分数及排名的情况,包括:按各系院编号输出总分,按总分排序,按男团体总分排序,按女团体总分排序;
  3. 进入系统后可以输入和修改某个项目的结果情况;
  4. 进入系统后可以查询某个项目的结果情况,包括:按系院编号查询,按项目编号查询;
  5. 课程设计报告必须符合课程设计报告规范;
  6. 提交合格的课程设计报告后,经指导教师测试(验收)程序,课程设计完成。

二、所有代码

1.MainWidget.cpp

代码如下(示例):

#include "MainWidget.h"
#include<QDebug>
MainWidget::MainWidget()
{
    /*
     * 主界面利用 QHBoxLayout 布局为两个区域,左边区域用 Left_Table_Box 实现,右边由 Right_Table_Box 实现
    */
    setWindowIcon(QIcon(":/logo.ico"));
    setWindowTitle("运动会成绩管理系统");
    this->resize(1000,600);
    QHBoxLayout *HBoxLayout = new QHBoxLayout(this);

    QGroupBox *Left_Table_Box = createStuMess();
    QGroupBox *Right_Table_Box = createMenu();

    HBoxLayout->addWidget(Left_Table_Box,4);
    HBoxLayout->addWidget(Right_Table_Box,2);   
}
//构建学生信息面板,Left_Table_Box 中只包含一个 QTableWidget 表格控件,为了使表格尺寸自适应整个窗口,将表格添加到了 QHBoxLayout 布局工具中。
QGroupBox * MainWidget::createStuMess(){
    QGroupBox * box = new QGroupBox("队伍信息");
    TableWidget = new QTableWidget;
    TableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    TableWidget->setColumnCount(14);
    TableWidget->setHorizontalHeaderLabels(QStringList() <<"学院代号"<<"学院名称"<< "五十米"<<"一百米"<<"四百米"<< "一千五百米"<<"跳高"<<"跳远"<< "标枪"<<"铅球"<<"铁饼"<<"男子团体总分"<<"女子团体总分"<<"总分");
    flushTable();
    QHBoxLayout * AutoHBoxLayout = new QHBoxLayout;
    AutoHBoxLayout->addWidget(TableWidget);
    box->setLayout(AutoHBoxLayout);
    //这是排序,我不懂如何排序,排序功能也没能完美实现,这个是点击表头排序,但是我的数据全是Qstring,应该改为int,但我没办法修改,所有出现了后面的九点九代替10
    TableWidget->setSortingEnabled(true);
    //当用户点击某个单元格时,更新列表中显示的队伍信息
    connect(TableWidget,&QTableWidget::cellClicked,this,&MainWidget::flushListWidget);
    //当用户更改某个单元格内的内容时,调用 changeStuMess() 方法处理
    connect(TableWidget,&QTableWidget::cellChanged,this,&MainWidget::changeStuMess);
    //将用户更改某个单元格内的内容时,同时还要更新表格中显示的队伍信息
    connect(TableWidget,&QTableWidget::cellChanged,this,&MainWidget::flushListWidget);
    return box;
}

/* 构建功能面板
 * 最外层有 QGroupBox 分组框,内部用 QVBoxLayout 将整个区域分为上下两部分,分别嵌入 QListWidget 和 QGridLayout
 * QGridLayout 内包含添加、删除、保存、退出按钮和 1 个实现查找功能的单行输入框。
*/
QGroupBox * MainWidget::createMenu(){
    QGroupBox * box = new QGroupBox("功能面板");
    QVBoxLayout *VBoxLayout = new QVBoxLayout;

    ListWidget = new QListWidget;
    QGridLayout * Buts = new QGridLayout;
    AddStuBtn = new QPushButton("添加");
    DelStuBtn = new QPushButton("删除");
    SaveBtn = new QPushButton("保存");
    ExitBtn = new QPushButton("退出");
    FindStuEdit = new QLineEdit;
    FindStuEdit->setPlaceholderText("输入学院名称查找...");
    FindStuEdit->setClearButtonEnabled(true);
    FindStuEdit->setStyleSheet("QLineEdit{padding:3,3,3,3;}");
    Buts->addWidget(AddStuBtn,0,0);
    Buts->addWidget(DelStuBtn,0,1);
    Buts->addWidget(FindStuEdit,1,0,1,0);
    Buts->addWidget(SaveBtn,2,0);
    Buts->addWidget(ExitBtn,2,1);

    VBoxLayout->addWidget(ListWidget,4);
    VBoxLayout->addLayout(Buts,2);

    box->setLayout(VBoxLayout);
    //点击添加按钮,执行 addStuBox() 方法
    connect(AddStuBtn,&QPushButton::clicked,this,&MainWidget::AddStuBox);
    //点击删除按钮,执行 delStuFun() 方法
    connect(DelStuBtn,&QPushButton::clicked,this,&MainWidget::delStuFun);
    //当向学院名称输入框内输入信息后,执行 findStuMess() 方法
    connect(FindStuEdit,&QLineEdit::returnPressed,this,&MainWidget::findStuMess);
    //点击退出按钮,关闭主窗口
    connect(ExitBtn,&QPushButton::clicked,this,&MainWidget::close);
    //点击保存按钮,执行 saveStuMess() 方法
    connect(SaveBtn,&QPushButton::clicked,this,&MainWidget::saveStuMess);
    return box;
}
//当点击添加按钮时,弹出添加队伍信息的子窗口
void MainWidget::AddStuBox(){
    messBox = new EditStuMessBox;
    //当添加队伍信息窗口关闭时,更新表格,同时清空列表中显示的队伍信息
    QObject::connect(messBox,&EditStuMessBox::closeBox,this,&MainWidget::flushTable);
    QObject::connect(messBox,&EditStuMessBox::closeBox,ListWidget,&QListWidget::clear);
    messBox->exec();
}

//刷新表格中的内容,当界面初始化、添加和删除队伍信息后,都需要对表格内容进行更新
void MainWidget::flushTable(){
    //更新表格内容前,要断开与 cellChanged 信号关联的所有槽,否则会导致程序闪退
    disconnect(TableWidget,&QTableWidget::cellChanged,0,0);
    QFile file(file_name);
    file.open(QIODevice::ReadOnly);
    QDataStream dataStr(&file);
    QString id,name,wushimi,yibaimi,sibaimi,yiqianwu,tiaogao,tiaoyuan,biaoqiang,qianqiu,tiebing,malescore,femalescore,sumscore;
    TableWidget->setRowCount(0);
    while(!dataStr.atEnd()){
        TableWidget->setRowCount(TableWidget->rowCount()+1);
        dataStr>>id>>name>>wushimi>>yibaimi>>sibaimi>>yiqianwu>>tiaogao>>tiaoyuan>>biaoqiang>>qianqiu>>tiebing>>malescore>>femalescore>>sumscore;
        TableWidget->setItem(TableWidget->rowCount()-1,0,new QTableWidgetItem(id));
        TableWidget->setItem(TableWidget->rowCount()-1,1,new QTableWidgetItem(name));
        TableWidget->setItem(TableWidget->rowCount()-1,2,new QTableWidgetItem(wushimi));
        TableWidget->setItem(TableWidget->rowCount()-1,3,new QTableWidgetItem(yibaimi));
        TableWidget->setItem(TableWidget->rowCount()-1,4,new QTableWidgetItem(sibaimi));
        TableWidget->setItem(TableWidget->rowCount()-1,5,new QTableWidgetItem(yiqianwu));
        TableWidget->setItem(TableWidget->rowCount()-1,6,new QTableWidgetItem(tiaogao));
        TableWidget->setItem(TableWidget->rowCount()-1,7,new QTableWidgetItem(tiaoyuan));
        TableWidget->setItem(TableWidget->rowCount()-1,8,new QTableWidgetItem(biaoqiang));
        TableWidget->setItem(TableWidget->rowCount()-1,9,new QTableWidgetItem(qianqiu));
        TableWidget->setItem(TableWidget->rowCount()-1,10,new QTableWidgetItem(tiebing));
        TableWidget->setItem(TableWidget->rowCount()-1,11,new QTableWidgetItem(malescore));
        TableWidget->setItem(TableWidget->rowCount()-1,12,new QTableWidgetItem(femalescore));
        TableWidget->setItem(TableWidget->rowCount()-1,13,new QTableWidgetItem(sumscore));
    }
    file.close();
    //完成更新表格的任务后,重新关联与 cellChanged 相关的槽。
    connect(TableWidget,&QTableWidget::cellChanged,this,&MainWidget::changeStuMess);
    connect(TableWidget,&QTableWidget::cellChanged,this,&MainWidget::flushListWidget);
}

//更新列表中显示的队伍信息
void MainWidget::flushListWidget(int row){
    //当列表中有信息时,直接修改即可
    if(ListWidget->count() > 0){
        ListWidget->item(0)->setText("学院代号:" + TableWidget->item(row,0)->text());
         ListWidget->item(1)->setText("学院名称:" + TableWidget->item(row,1)->text());
        ListWidget->item(2)->setText("五十米:" + TableWidget->item(row,2)->text());
        ListWidget->item(3)->setText("一百米:" + TableWidget->item(row,3)->text());
        ListWidget->item(4)->setText("四百米:" + TableWidget->item(row,4)->text());
        ListWidget->item(5)->setText("一千五百米:" + TableWidget->item(row,5)->text());
        ListWidget->item(6)->setText("跳高:" + TableWidget->item(row,6)->text());
        ListWidget->item(7)->setText("跳远:" + TableWidget->item(row,7)->text());
        ListWidget->item(8)->setText("标枪:" + TableWidget->item(row,8)->text());
        ListWidget->item(9)->setText("铅球:" + TableWidget->item(row,9)->text());
        ListWidget->item(10)->setText("铁饼:" + TableWidget->item(row,10)->text());
        ListWidget->item(11)->setText("男子团体总分:" + TableWidget->item(row,11)->text());
        ListWidget->item(12)->setText("女子团体总分:" + TableWidget->item(row,12)->text());
        ListWidget->item(13)->setText("总分:" + TableWidget->item(row,13)->text());
    }else{
        ListWidget->addItem("学院代号:" + TableWidget->item(row,0)->text());
         ListWidget->addItem("学院名称:" + TableWidget->item(row,1)->text());
        ListWidget->addItem("五十米:" + TableWidget->item(row,2)->text());
        ListWidget->addItem("一百米:" + TableWidget->item(row,3)->text());
        ListWidget->addItem("四百米:" + TableWidget->item(row,4)->text());
        ListWidget->addItem("一千五百米:" + TableWidget->item(row,5)->text());
        ListWidget->addItem("跳高:" + TableWidget->item(row,6)->text());
        ListWidget->addItem("跳远:" + TableWidget->item(row,7)->text());
        ListWidget->addItem("标枪:" + TableWidget->item(row,8)->text());
        ListWidget->addItem("铅球:" + TableWidget->item(row,9)->text());
        ListWidget->addItem("铁饼:" + TableWidget->item(row,10)->text());
        ListWidget->addItem("男子团体总分:" + TableWidget->item(row,11)->text());
        ListWidget->addItem("女子团体总分:" + TableWidget->item(row,12)->text());
        ListWidget->addItem("总分:" + TableWidget->item(row,13)->text());
    }
}

/* 删除队伍信息
 * 思路:将除目标队伍外,其它队伍的信息拷贝到一个临时文件中,然后删除原来的文件,并将临时文件的文件名改为和原文件相同的名称。
*/
void MainWidget::delStuFun()
{
    QList<QTableWidgetItem*>items = TableWidget->selectedItems();
    //判断用户是否在表格中选中了某个队伍信息,只有选中之后,才能执行删除操作
    if(items.count() > 0){
        QMessageBox::StandardButton result=QMessageBox::question(this, "删除","确定要删除学院代号为【"+items.at(0)->text()+"】的队伍吗?");
        if(result == QMessageBox::Yes){
            QString ID,name,wushimi,yibaimi,sibaimi,yiqianwu,tiaogao,tiaoyuan,biaoqiang,qianqiu,tiebing,malescore,femalescore,sumscore;
            QFile file(file_name);
            file.open(QIODevice::ReadOnly);
            QDataStream readDataStr(&file);

            QFile tempFile(tempFile_name);
            tempFile.open(QIODevice::WriteOnly);
            QDataStream writeDataStr(&tempFile);

            while (!readDataStr.atEnd()) {
                readDataStr >> ID >>name>>wushimi>>yibaimi>>sibaimi>>yiqianwu>>tiaogao>>tiaoyuan>>biaoqiang>>qianqiu>>tiebing>>malescore>>femalescore>>sumscore;
                if(ID != items.at(0)->text()){
                    writeDataStr << ID <<name << wushimi<<yibaimi<<sibaimi<<yiqianwu<<tiaogao<<tiaoyuan<<biaoqiang<<qianqiu<<tiebing<<malescore<<femalescore<<sumscore;
                }
            }
            tempFile.close();
            file.close();
            //删除原文件,将临时文件重命名为和原文件相同的名字
            file.remove();
            tempFile.rename(file_name);
            flushTable();
            ListWidget->clear();
            QMessageBox::warning(this,"提示","删除队伍成功");
        }
    }else{
        QMessageBox::warning(this,"提示","请选择要删除的队伍");
    }
}

//根据学院输入框中的代号,在表格中查找目标队伍
void MainWidget::findStuMess()
{
    qint32 count = TableWidget->rowCount();
    bool findSuccess = false;
    if(count>0){
        for(qint32 i=0;i<count;i++){
            QString name = TableWidget->item(i,1)->text();
            if(name == FindStuEdit->text()){
                findSuccess = true;
                TableWidget->selectRow(i);
                flushListWidget(i);
                break;
            }
        }
        if(findSuccess == false){
            QMessageBox::information(this,"查找失败","当前表格中没有【"+FindStuEdit->text()+"】队伍");
        }
    }
}



/* 更改队伍信息
 * 思路:逐一将队伍信息拷贝到另一个临时文件中,当读取到要更改的队伍信息时,将更改后的队伍信息写入临时文件。最终,临时文件中存储的是更改后所有队伍的信息。
 * 拷贝完成后,删除原文件,将临时文件的名称改为和原文件一样。
*/
void MainWidget::changeStuMess(int row)
{
    QString ID,name,wushimi,yibaimi,sibaimi,yiqianwu,tiaogao,tiaoyuan,biaoqiang,qianqiu,tiebing,malescore,femalescore,sumscore;
    QString stuName = TableWidget->item(row,1)->text();
    QFile file(file_name);
    file.open(QIODevice::ReadOnly);
    QDataStream readDataStr(&file);

    QFile tempFile(tempFile_name);
    tempFile.open(QIODevice::WriteOnly);
    QDataStream writeDataStr(&tempFile);

    while (!readDataStr.atEnd()) {
        readDataStr >> ID  >>name>>wushimi>>yibaimi>>sibaimi>>yiqianwu>>tiaogao>>tiaoyuan>>biaoqiang>>qianqiu>>tiebing>>malescore>>femalescore>>sumscore;
        if(name != stuName){
            writeDataStr << ID <<name<< wushimi<<yibaimi<<sibaimi<<yiqianwu<<tiaogao<<tiaoyuan<<biaoqiang<<qianqiu<<tiebing<<malescore<<femalescore<<sumscore;
            for(int i=0;i<TableWidget->columnCount();i++){
                writeDataStr<<TableWidget->item(row,i)->text();
            }
        }
    }
    tempFile.close();
    file.close();
    file.remove();
    tempFile.rename(file_name);
}

//保存队伍信息,将表格中的队伍信息重新存储到文件中
void MainWidget::saveStuMess()
{
    QFile file(file_name);
    file.open(QIODevice::WriteOnly);
    QDataStream dataStr(&file);

    for(int i=0;i<TableWidget->rowCount();i++){
        for(int j=0;j<TableWidget->columnCount();j++){
            dataStr << TableWidget->item(i,j)->text();
        }
    }
    file.close();
    QMessageBox::information(this,"保存","保存成功!");
}

2.main.cpp

代码如下


#include <QApplication>
#include "MainWidget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc,argv);

    MainWidget mWidget;
    mWidget.show();

    a.exec();
    return 0;
}


3.EditStuMessBox.cpp

代码如下


#include "EditStuMessBox.h"

//构建添加队伍信息主界面
EditStuMessBox::EditStuMessBox()
{
    /*
     * QVBoxLayout 局部工具中放置 QFormLayout 和 QHBoxLayout
     * QFormLayout 中放置多个单行输入框
     * QHBoxLayout 中放置两个按钮
    */
    setWindowIcon(QIcon(":/logo.ico"));
   // setWindowFlags(Qt::Dialog);
    setWindowTitle("添加队伍信息");
    QVBoxLayout * VBox = new QVBoxLayout;

    QFormLayout *FormLayout = new QFormLayout;
    ID = new QLineEdit;
    name = new QLineEdit;
    wushimi = new QLineEdit;
    yibaimi = new QLineEdit;
    sibaimi = new QLineEdit;
    yiqianwu = new QLineEdit;
    tiaogao = new QLineEdit;
    tiaoyuan = new QLineEdit;
    biaoqiang = new QLineEdit;
    qianqiu = new QLineEdit;
    tiebing = new QLineEdit;
    sumscore = new QLineEdit;
    malescore = new QLineEdit;
    femalescore = new QLineEdit;
    FormLayout->addRow("学院代号:",ID);
    FormLayout->addRow("学院名称:",name);
    FormLayout->addRow("五十米:",wushimi);
    FormLayout->addRow("一百米:",yibaimi);
    FormLayout->addRow("四百米:",sibaimi);
    FormLayout->addRow("一千五百米:",yiqianwu);
    FormLayout->addRow("跳高:",tiaogao);
    FormLayout->addRow("跳远:",tiaoyuan);
    FormLayout->addRow("标枪:",biaoqiang);
    FormLayout->addRow("铅球:",qianqiu);
    FormLayout->addRow("铁饼:",tiebing);
    FormLayout->addRow("男子团体总分:",malescore);
    FormLayout->addRow("女子团体总分:",femalescore);
    FormLayout->addRow("总分:",sumscore);
    FormLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);

    QHBoxLayout * HBox = new QHBoxLayout;
    submit = new QPushButton("提交");
    cancel = new QPushButton("取消");
    HBox->addWidget(submit);
    HBox->addWidget(cancel);

    VBox->addLayout(FormLayout,4);
    VBox->addLayout(HBox,1);
    this->setLayout(VBox);
    //点击提交按钮时,将队伍信息保存到文件中
    QObject::connect(submit,&QPushButton::clicked,this,&EditStuMessBox::saveStuMess);
    //点击取消按钮时,关闭添加队伍信息窗口
    QObject::connect(cancel,&QPushButton::clicked,this,&EditStuMessBox::close);
}

//当用户添加提交按钮时,保存队伍信息
void EditStuMessBox::saveStuMess(){
    //确保所有信息填写后,将信息写入到文件中,否则提示用户将信息填写完整
    if(this->ID->text() !=""&& this->name->text()!="" && this->wushimi->text()!="" && this->yibaimi->text()!="" && this->sibaimi->text()!="" && this->yiqianwu->text()!="" && this->tiaogao->text()!="" && this->tiaoyuan->text()!="" && this->biaoqiang->text()!="" && this->qianqiu->text()!=""&& this->tiebing->text()!=""&& this->sumscore->text()!="" && this->malescore->text()!="" && this->femalescore->text()!=""){
       if(this->wushimi->text().toInt()>=0 && this->yibaimi->text().toInt()>=0 && this->sibaimi->text().toInt()>=0 && this->yiqianwu->text().toInt()>=0 && this->tiaogao->text().toInt()>=0 && this->tiaoyuan->text().toInt()>=0&& this->biaoqiang->text().toInt()>=0 && this->qianqiu->text().toInt()>=0&& this->tiebing->text().toInt()>=0&& this->sumscore->text().toInt()>=0&& this->malescore->text().toInt()>=0&& this->femalescore->text().toInt()>=0
          &&this->wushimi->text().toInt()<10 && this->yibaimi->text().toInt()<10 && this->sibaimi->text().toInt()<10 && this->yiqianwu->text().toInt()<10 && this->tiaogao->text().toInt()<10 && this->tiaoyuan->text().toInt()<10&& this->biaoqiang->text().toInt()<10 && this->qianqiu->text().toInt()<10&& this->tiebing->text().toInt()<10)
       {
            Student stu;
            stu.setID(this->ID->text());
            stu.setName(this->name->text());
            stu.setWushimi(this->wushimi->text());
            stu.setYibaimi(this->yibaimi->text());
            stu.setSibaimi(this->sibaimi->text());
            stu.setYiqianwu(this->yiqianwu->text());
            stu.setTiaogao(this->tiaogao->text());
            stu.setTiaoyuan(this->tiaoyuan->text());
            stu.setBiaoqiang(this->biaoqiang->text());
            stu.setQianqiu(this->qianqiu->text());
            stu.setTiebing(this->tiebing->text());
            stu.setMalescore(this->malescore->text());
            stu.setFemalescore(this->femalescore->text());
            stu.setSumscore(this->sumscore->text());

            QFile file(file_name);
            file.open(QIODevice::WriteOnly|QIODevice::Append);
            QDataStream dataStr(&file);
            dataStr << stu.getID() << stu.getName()  << stu.getWushimi() << stu.getYibaimi() << stu.getSibaimi()
                       << stu.getYiqianwu() << stu.getTiaogao() << stu.getTiaoyuan()
                          << stu.getBiaoqiang() << stu.getQianqiu() << stu.getTiebing()
                  << stu.getMalescore() << stu.getFemalescore() << stu.getSumscore() ;
            file.close();
            this->close();
            emitCloseBox();
       }
       else
       {
            QMessageBox::warning(this,"提示","本比赛采用十分制,所有项目得分均不得低于零分或者高于十分(十分用九点九分代替),学院编号采用“00X”的形式,您的输入有误",QMessageBox::Ok);
       }
    }else{
        QMessageBox::warning(this,"提示","请将信息填写完整",QMessageBox::Ok);
    }

}

void EditStuMessBox::emitCloseBox(){
    emit closeBox();
}



4.Student.cpp

#include "Student.h"

QString Student::getID() const
{
    return ID;
}

QString Student::getName() const
{
    return name;
}

void Student::setName(const QString &value)
{
    name = value;
}

void Student::setID(const QString &value)
{
    ID = value;
}

QString Student::getWushimi() const
{
    return wushimi;
}

void Student::setWushimi(const QString &value)
{
    wushimi = value;
}

QString Student::getYibaimi() const
{
    return yibaimi;
}

void Student::setYibaimi(const QString &value)
{
    yibaimi = value;
}

QString Student::getSibaimi() const
{
    return sibaimi;
}

void Student::setSibaimi(const QString &value)
{
    sibaimi = value;
}

QString Student::getYiqianwu() const
{
    return yiqianwu;
}

void Student::setYiqianwu(const QString &value)
{
    yiqianwu = value;
}
QString Student::getTiaogao() const
{
    return tiaogao;
}

void Student::setTiaogao(const QString &value)
{
    tiaogao = value;
}

QString Student::getTiaoyuan() const
{
    return tiaoyuan;
}

void Student::setTiaoyuan(const QString &value)
{
    tiaoyuan = value;
}

QString Student::getBiaoqiang() const
{
    return biaoqiang;
}

void Student::setBiaoqiang(const QString &value)
{
    biaoqiang = value;
}

QString Student::getQianqiu() const
{
    return qianqiu;
}

void Student::setQianqiu(const QString &value)
{
    qianqiu = value;
}


QString Student::getTiebing() const
{
    return tiebing;
}

void Student::setTiebing(const QString &value)
{
    tiebing = value;
}

QString Student::getSumscore() const
{
    return sumscore;
}

void Student::setSumscore(const QString &value)
{
    sumscore = value;
}

QString Student::getMalescore() const
{
    return malescore;
}

void Student::setMalescore(const QString &value)
{
    malescore = value;
}

QString Student::getFemalescore() const
{
    return femalescore;
}

void Student::setFemalescore(const QString &value)
{
    femalescore = value;
}




5.Tool.cpp

#include "Tool.h"


6.EditStuMessBox.h

#ifndef EDITSTUMESSBOX_H
#define EDITSTUMESSBOX_H

#include <QWidget>
#include <QLineEdit>
#include <QFormLayout>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "Student.h"
#include <QFile>
#include <QDataStream>
#include "Tool.h"
#include <QMessageBox>
//自定义添加队伍信息窗口
class EditStuMessBox : public QDialog
{
    Q_OBJECT
public:
    //构建添加队伍信息界面
    EditStuMessBox();
signals:
    //自定义信号,当添加队伍信息完成后,更新主界面上的表格
    void closeBox();

public slots:
    //将新队伍的信息写入到文件中
    void saveStuMess();
public:
    //发出 closeBox 信号
    void emitCloseBox();
private:
    QLineEdit * ID;
    QLineEdit * name;
    QLineEdit * sumscore;
    QLineEdit * malescore;
    QLineEdit * femalescore;
    QLineEdit * wushimi;
    QLineEdit * yibaimi;
    QLineEdit * sibaimi;
    QLineEdit * yiqianwu;
    QLineEdit * tiaogao;
    QLineEdit * tiaoyuan;
    QLineEdit * biaoqiang;
    QLineEdit * qianqiu;
    QLineEdit * tiebing;
    QPushButton * submit;
    QPushButton * cancel;
};
#endif // EDITSTUMESSBOX_H



7.MainWidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QListWidget>
#include <QTableWidget>
#include <QGroupBox>
#include <QPushButton>
#include <QLineEdit>
#include "EditStuMessBox.h"
#include <QFile>
#include <QDataStream>
#include "Student.h"
#include "Tool.h"
//自定义主窗口
class MainWidget : public QWidget
{
    Q_OBJECT
public:
    //构建主窗口界面
    MainWidget();
    //当用户点击添加按钮时,弹出添加学生信息窗口
    void AddStuBox();
public slots:
    //更新表格中罗列的队伍信息
    void flushTable();
    //更新列表中显示的队伍信息
    void flushListWidget(int row);
    //实现删除队伍信息功能
    void delStuFun();
    //实现查找队伍信息功能
    void findStuMess();
    //实现修改队伍信息功能
    void changeStuMess(int row);
    //实现保存队伍信息功能
    void saveStuMess();

private:
    //创建主窗口中的队伍信息面板
    QGroupBox * createStuMess();
    //创建主窗口中的功能面板
    QGroupBox * createMenu();
private:
    //主窗口中的表格控件
    QTableWidget * TableWidget;
    //主窗口中的列表控件
    QListWidget *ListWidget;
    //主窗口中的添加、删除、保存、退出按钮和查找文本框控件
    QPushButton * AddStuBtn;
    QPushButton * DelStuBtn;
    QLineEdit * FindStuEdit;
    QLineEdit * FindXEdit;
    QPushButton * SaveBtn;
    QPushButton * ExitBtn;
    //弹出的添加队伍信息窗口
    EditStuMessBox * messBox;
};

#endif // MAINWIDGET_H

8.Student.h

#ifndef STUDENT_H
#define STUDENT_H

#include <QString>
class Student
{
public:
    QString getID() const;
    void setID(const QString &value);

    QString getName() const;
    void setName(const QString &value);

    QString getSumscore() const;
    void setSumscore(const QString &value);

    QString getMalescore() const;
    void setMalescore(const QString &value);

    QString getFemalescore() const;
    void setFemalescore(const QString &value);

    QString getWushimi() const;
    void setWushimi(const QString &value);

    QString getYibaimi() const;
    void setYibaimi(const QString &value);

    QString getSibaimi() const;
    void setSibaimi(const QString &value);

    QString getYiqianwu() const;
    void setYiqianwu(const QString &value);

    QString getTiaogao() const;
    void setTiaogao(const QString &value);

    QString getTiaoyuan() const;
    void setTiaoyuan(const QString &value);

    QString getBiaoqiang() const;
    void setBiaoqiang(const QString &value);

    QString getQianqiu() const;
    void setQianqiu(const QString &value);

    QString getTiebing() const;
    void setTiebing(const QString &value);
    

private:
    QString ID;
    QString name;
    QString sumscore;
    QString malescore;
    QString femalescore;
    QString wushimi;
    QString yibaimi;
    QString sibaimi;
    QString yiqianwu;
    QString tiaogao;
    QString tiaoyuan;
    QString biaoqiang;
    QString qianqiu;
    QString tiebing;
};



#endif // STUDENT_H


9.Tool.h

#ifndef TOOL_H
#define TOOL_H
#define file_name "student.txt"
#define tempFile_name "student_temp.txt"
#endif // TOOL_H


三、学生信息管理系统实现源码

下载整个项目的实现源码,下载完成后,依次完成以下操作即可运行项目:
打开 Qt Creator 并创建一个不带 ui 文件的新 Qt Widget Application 项目,删除项目中默认生成的所有源文件;
找到存储新项目的文件夹,将下载的文件全部拷贝到文件夹内;
在 Qt Creator 中逐一将这些源码文件添加到项目里(项目名上右键选择“添加现有文件”);
这是我改编的代码的源码,朋友们如果想去修改出自己的东西的话,可以去看看,这个网站也是很好的学习平台 http://c.biancheng.net/view/9431.html

总结

我也是一位新手,为了作业而做的东西,很low的,望各位有什么好的想法了告诉我,可以加我QQ:3491785408

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值