文章目录
前言
由于是第一次接触到涉及有关界面可视化的方面,出现了许许多多的在做此次任务之前未曾出现的问题与困难。从学编程开始,一直想去做一个完整而有实用性的程序,这次任务正好给了我这个机会。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
一、要求是什么?
设计一款小型学生运动会成绩管理软件,系统主要功能及报告要求如下:
- 记录某校运动会上全部运动项目,包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等;
- 记录各系获得的分数及排名的情况,包括:按各系院编号输出总分,按总分排序,按男团体总分排序,按女团体总分排序;
- 进入系统后可以输入和修改某个项目的结果情况;
- 进入系统后可以查询某个项目的结果情况,包括:按系院编号查询,按项目编号查询;
- 课程设计报告必须符合课程设计报告规范;
- 提交合格的课程设计报告后,经指导教师测试(验收)程序,课程设计完成。
二、所有代码
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