QT 学生管理系统 练习

本文介绍了一个学生管理系统的实现,包括主界面、添加界面和控制类的设计。系统使用Qt框架,采用单例模式实现控制类,用于管理学生信息的链表,并提供了添加、删除、查询和保存功能。学生信息通过链表存储并在文件中持久化,同时支持在表格中展示和编辑。系统还实现了多选删除和表格修改功能,确保数据一致性。
摘要由CSDN通过智能技术生成

 我们要构建一个学生管理系统

分为两个窗口

1.主界面

2.界面二是添加界面

 3.类图

可以看出项目分为四个类  

其中 主接面Widget类关联添加界面Dialog类和Control类

Dialog类依赖学生类Student

Control类聚合学生类Student

首先我们完成学生类的实现 主要的功能就是设置和获得学生信息

#ifndef STUDENT_H
#define STUDENT_H
#include<QString>

class Student
{
private:
  QString strId;
  QString strName;
  QString strSex;
  QString strAge;
  QString strChinese;
  QString strEnglish;
  QString strMath;

public:
    Student();

     void SetId(QString& id);
     void SetName(QString& name);
     void SetSex(QString& sex);
     void SetAge(QString& age);
     void SetChinese(QString& chinese);
     void SetEnglish(QString& english);
     void SetMath(QString& math);

     QString GetId();
     QString GetName();
     QString GetSex();
     QString GetAge();
     QString GetChinese();
     QString GetEnglish();
     QString GetMath();
};

#endif // STUDENT_H
#include "student.h"

Student::Student()
{


}

void Student::SetId(QString& id)

{
    strId=id;
}

void Student::SetName(QString& name)
{
    strName=name;
}
void Student::SetSex(QString& sex)
{
    strSex=sex;
}
void Student::SetAge(QString& age)
{
    strAge=age;
}
void Student::SetChinese(QString& chinese)
{
    strChinese=chinese;
}
void Student::SetEnglish(QString& english)
{
    strEnglish=english;
}
void Student::SetMath(QString& math)
{
    strMath=math;
}

QString Student::GetId()
{
    return strId;
}
QString Student::GetName()
{
    return strName;
}
QString Student::GetSex()
{

return strSex;
}
QString Student::GetAge()

{
    return strAge;
}
QString Student::GetChinese()
{
    return strChinese;
}
QString Student::GetEnglish()
{
    return strEnglish;
}
QString Student::GetMath()
{
    return strMath;
}

然后在对我们的添加界面Dialog进行实现

在画完Dialog窗口后 我们需要对  提交按钮 和  取消按钮  添加槽函数

public slots:
    void on_pushButtonOk_clicked();

//获取当前输入框的信息  如果满足条件  创建Student节点向Control类中的存Student*的链表上添加

    void on_pushButtonCancel_clicked();

//退出

void Dialog::on_pushButtonOk_clicked()
{
    //获取但行输入框
    QString Id=ui->lineEditId->text();
    QString Age=ui->lineEditAge->text();
    QString Sex=ui->lineEditSex->text();
    QString Name=ui->lineEditName->text();
    QString Chinese=ui->lineEditChinese->text();
    QString English=ui->lineEditEnglish->text();
    QString Math=ui->lineEditMath->text();
      //判断数据是否完整
    if(Id!=""&&Age!=""&&Sex!=""&&Name!=""&&Chinese!=""&&English!=""&&Math!="")
    {
        //创建学生对象
        Student *stu=new Student;
        stu->SetId(Id);
        stu->SetAge(Age);
        stu->SetSex(Sex);
        stu->SetName(Name);
        stu->SetChinese(Chinese);
        stu->SetEnglish(English);
        stu->SetMath(Math);

        //发送信号
        emit MyUpdate(stu);

        //退出

        this->close();
    }



    else
    {
        //消息对话框提示
        QMessageBox::warning(this,"提示","请将数据录入完整");
    }

}

void Dialog::on_pushButtonCancel_clicked()
{
    this->close();
}

接下来  开始对控制类Control进行编写 这里我们用到了单例模式

只允许有一个控制类:

定义一个本类型的静态指针

将构造函数设置为私有的  设置一个公有的静态函数用来创建Control对象

 static Control*Getcon();

Control*Control::Getcon()
{
    if(con==nullptr);
    {
        con=new Control;
    }
    return con;
}

类中有一个成员变量  是一个存Student类对象指针的链表

类中有一些成员方法  是对Student类对象指针的链表的一些操作  

这个链表我们用到了链表容器

list <Student*>& GetList();  返回链表
     void Addlst(Student*stu); 链表节点添加
     void Delete(QString id);  链表节点删除
     void ListToFile();  链表向文件里写入
     void FileToList(); 文件向链表里写出

这里的文件操作我们用到了相对路径

#define PATH "..\\Student.txt"

含义是  当前编译文件的位置的上一级  在进入到Student.txt中

 

class Control
{
private:
    static Control*con;
private:
     Control();
     Control(Control&con);

     list <Student*> lst;
public:
     ~Control();
     static Control*Getcon();
     list <Student*>& GetList();
     void Addlst(Student*stu);
     void Delete(QString id);
     void ListToFile();
     void FileToList();

};
#include "control.h"
#include<fstream>

Control::  Control()
{


}

Control::Control(Control&con)
{

}
Control::~Control()
{
    auto  ite=lst.begin();
    while(ite!=lst.end())
    {
        delete*ite;
        ite++;
    }

}

Control*Control::con=nullptr;//静态指针在类外定义

Control*Control::Getcon()
{
    if(con==nullptr);
    {
        con=new Control;
    }
    return con;
}

list <Student*>& Control::GetList()
{
    return lst;
}
void Control:: Addlst(Student*stu)
{
    lst.push_back(stu);
}
void Control:: Delete(QString  id)
{
    list<Student*>::iterator ite=lst.begin();
    while(ite!=lst.end())
    {
        if((*ite)->GetId()==id)
        {
            delete *ite;
            lst.erase(ite);
            break;
        }

            ite++;
    }
}


void Control::ListToFile()
{
    ofstream os;
    os.open(PATH);
    auto ite=lst.begin();
    while(ite!=lst.end())

    {
        string id=(*ite)->GetId().toStdString();
        string name=(*ite)->GetName().toStdString();
        string sex=(*ite)->GetSex().toStdString();
        string age=(*ite)->GetAge().toStdString();
        string chinese=(*ite)->GetChinese().toStdString();
        string english=(*ite)->GetEnglish().toStdString();
        string math=(*ite)->GetMath().toStdString();
        os<<id<<" "<<name<<" "<<sex<<" "<<age<<" "<<chinese<<" "<<english<<" "<<math<<endl;

        ite++;
    }

    os.close();


}
void Control::FileToList()
{
    ifstream is;
    is.open(PATH);

    string id,name,sex,age,chinese,english,math;
    while(is >> id>> name>> sex>> age >> chinese >> english >> math)
    {
        Student*stemp=new Student;
        QString strid = QString::fromStdString(id);
        QString strname = QString::fromStdString(name);
        QString strsex = QString::fromStdString(sex);
        QString strage = QString::fromStdString(age);
        QString strchinese = QString::fromStdString(chinese);
        QString strenglish = QString::fromStdString(english);
        QString strmath = QString::fromStdString(math);

       stemp->SetId(strid);
       stemp->SetName(strname);
       stemp->SetSex(strsex);
       stemp->SetAge(strage);
       stemp->SetChinese(strchinese);
       stemp->SetEnglish(strenglish);
       stemp->SetMath(strmath);
        Addlst(stemp);
    }
    is.close();

}

最后 开始主界面的实现

主界面分为两大部分 和四大功能

左表格  右  列表

功能:添加 删除 查询 保存

 

public:
    void ShowItem(Student*stu);将Control类对象  cont的链表信息显示在左侧表格上
    void showlistwidget(int row);右边显示第row行相关的信息

public slots:
    void on_pushButtonAdd_clicked();添加功能的槽函数


    void on_MyUptate(Student*stu);

Dialog中 MyUpdate(Student*stu)的槽函数  用来更新cont的链表
    void ShowList();
    void  closeEvent(QCloseEvent*event);

    void on_pushButtonSave_clicked();

保存按钮的槽函数

    void on_tableWidget_cellClicked(int row, int column);

表格被点击的槽函数

    void on_pushButtonSerch_clicked();

查询按钮的槽函数

    void on_pushButtonDelete_clicked();

删除按钮的槽函数

    void on_tableWidget_cellChanged(int row, int column);

表格被修改的槽函数

private:
    Ui::Widget *ui;
    Dialog*d;
    Control*cont;

#ifndef WIDGET_H
#define WIDGET_H
#include "dialog.h"
#include"control.h"
#include <QWidget>
#include <QObject>
#include<QCloseEvent>
#include<QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public:
    void ShowItem(Student*stu);
    void showlistwidget(int row);

public slots:
    void on_pushButtonAdd_clicked();
    void on_MyUptate(Student*stu);
    void ShowList();
    void  closeEvent(QCloseEvent*event);

    void on_pushButtonSave_clicked();

    void on_tableWidget_cellClicked(int row, int column);

    void on_pushButtonSerch_clicked();

    void on_pushButtonDelete_clicked();

    void on_tableWidget_cellChanged(int row, int column);

private:
    Ui::Widget *ui;
    Dialog*d;
    Control*cont;

};
#endif // WIDGET_H

首先我们说添加

步骤大概是  点击添加按钮  弹出添加界面Dialog 的类对象  在添加界面操作 最后点保存或退出

然后主界面和链表相应修改

在添加界面操作完成后 点击ok按钮  

如果数据完整  添加界面会发送一个信号

 emit MyUpdate(stu);

void on_MyUptate(Student*stu);接受这个信号

来对主界面和链表操作

#include "dialog.h"
#include "ui_dialog.h"

using namespace  std;
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

}

Dialog::~Dialog()
{
    delete ui;
}


void Dialog::on_pushButtonOk_clicked()
{
    //获取但行输入框
    QString Id=ui->lineEditId->text();
    QString Age=ui->lineEditAge->text();
    QString Sex=ui->lineEditSex->text();
    QString Name=ui->lineEditName->text();
    QString Chinese=ui->lineEditChinese->text();
    QString English=ui->lineEditEnglish->text();
    QString Math=ui->lineEditMath->text();
      //判断数据是否完整
    if(Id!=""&&Age!=""&&Sex!=""&&Name!=""&&Chinese!=""&&English!=""&&Math!="")
    {
        //创建学生对象
        Student *stu=new Student;
        stu->SetId(Id);
        stu->SetAge(Age);
        stu->SetSex(Sex);
        stu->SetName(Name);
        stu->SetChinese(Chinese);
        stu->SetEnglish(English);
        stu->SetMath(Math);

        //发送信号
        emit MyUpdate(stu);

        //退出

        this->close();
    }



    else
    {
        //消息对话框提示
        QMessageBox::warning(this,"提示","请将数据录入完整");
    }

}

void Dialog::on_pushButtonCancel_clicked()
{
    this->close();
}


//

显示在右边的详细信息模块

void Widget::showlistwidget(int row)
{
    if(ui->listWidget->count()!=0)
    {


        ui->listWidget->item(0)->setText("学号:"+ui->tableWidget->item(row,0)->text());
        ui->listWidget->item(1)->setText("姓名:"+ui->tableWidget->item(row,1)->text());
        ui->listWidget->item(2)->setText("性别:"+ui->tableWidget->item(row,2)->text());
        ui->listWidget->item(3)->setText("年龄:"+ui->tableWidget->item(row,3)->text());
        ui->listWidget->item(4)->setText("数学:"+ui->tableWidget->item(row,4)->text());
        ui->listWidget->item(5)->setText("语文:"+ui->tableWidget->item(row,5)->text());
        ui->listWidget->item(6)->setText("英语:"+ui->tableWidget->item(row,6)->text());

    }
    else
    {
        ui->listWidget->addItem("学号:"+ui->tableWidget->item(row,0)->text());
        ui->listWidget->addItem("姓名:"+ui->tableWidget->item(row,1)->text());
        ui->listWidget->addItem("性别:"+ui->tableWidget->item(row,2)->text());
        ui->listWidget->addItem("年龄:"+ui->tableWidget->item(row,3)->text());
        ui->listWidget->addItem("数学:"+ui->tableWidget->item(row,4)->text());
        ui->listWidget->addItem("语文:"+ui->tableWidget->item(row,5)->text());
        ui->listWidget->addItem("英语:"+ui->tableWidget->item(row,6)->text());

    }
}

//

在表格上显示一个节点的模块

void Widget::ShowItem(Student*stu)
 {
     QObject::disconnect(ui->tableWidget,&QTableWidget::cellChanged,nullptr,nullptr);
     //获得总行数
     int  row=ui->tableWidget->rowCount();

     //设置函数
     ui->tableWidget->setRowCount(row+1);
     //将信息显示到表格上
     ui->tableWidget->setItem( row,0,new QTableWidgetItem (stu->GetId()));
     ui->tableWidget->setItem( row,1,new QTableWidgetItem (stu->GetName()));
     ui->tableWidget->setItem( row,2,new QTableWidgetItem (stu->GetSex()));
     ui->tableWidget->setItem( row,3,new QTableWidgetItem (stu->GetAge()));
     ui->tableWidget->setItem( row,4,new QTableWidgetItem (stu->GetMath()));
     ui->tableWidget->setItem( row,5,new QTableWidgetItem (stu->GetChinese()));
     ui->tableWidget->setItem( row,6,new QTableWidgetItem (stu->GetEnglish()));
     QObject::connect(ui->tableWidget,&QTableWidget::cellChanged,this,&Widget:: on_tableWidget_cellChanged);


 }

//

保存模块

void Widget::on_pushButtonSave_clicked()
{
    cont->ListToFile();

}

//

在表格上显示整个链表的模块

//

void Widget::ShowList()
{
    auto ite=cont->GetList().begin();
    while(ite!=cont->GetList().end())

    {
        ShowItem(*ite);
        ite++;


    }
}

//

退出时询问是否保存

void Widget:: closeEvent(QCloseEvent*event)
{


    QMessageBox::StandardButton but= QMessageBox::question(this,"提示","是否保存" );
    if(but==QMessageBox::StandardButton::Yes)
    {
        cont->ListToFile();
    }
}

//

点击表格中任意一个格  在右侧显示当前行的详细信息

void Widget::on_tableWidget_cellClicked(int row, int column)
{
   showlistwidget( row);

}

//

查询模块

void Widget::on_pushButtonSerch_clicked()
{
    //获取关键字
    QString str=ui->lineEdit->text();
    //获得表格总行数
    int Row=ui->tableWidget->rowCount();
    //循环比较关键字和表格上的第二列
    for(int  i=0;i<Row;i++)
    {

        QString name=ui->tableWidget->item(i,1)->text();
        if(name==str)
        {
            //显示到列表框
            showlistwidget(i);
            ui->lineEdit->clear();
            return ;

        }


    }



    QMessageBox::information(this, "错误 ","请输入正确姓名");

    ui->lineEdit->clear();



}

//

删除模块

void Widget::on_pushButtonDelete_clicked()
{



    //这里实现了多选删除  (如:一次选择两行  一行选两个  2x2=4个)
    //不实现的话   一行选多个会报错  系统会重复删除该行
    QList<QTableWidgetItem*> qlst =ui->tableWidget->selectedItems();

    auto  ite=qlst.begin();
    while(ite!=qlst.end())
    {
        int  row=(*ite)->row();//获取单元格
        ite++;
        int Mark=-1;//删除判断标记
        if(ite!=qlst.end())//判断下一个是否为空
        {
            Mark=(*ite)->row();//把下一个赋给标记
        }
        if(row!=Mark)//不是一行的

        {
            //删除

           QString qstr=ui->tableWidget->item(row,0)->text();
           ui->tableWidget->removeRow(row);

           cont->Delete(qstr);

        }
        //是一行的
        //不操作 往下走



    ui->listWidget->clear();

    }
}

//

修改模块

void Widget::on_tableWidget_cellChanged(int row, int column)
{
    QString qstr=ui->tableWidget->item(row,column)->text();
    QMessageBox::StandardButton but;

    if(column==0)
    {
       QMessageBox::warning(this,"警告","不允许修改学号");
    }

    else
    {

       but= QMessageBox::question(this,"提示","是否修改学号为["+ui->tableWidget->item(row,0)->text()+"]的信息");

       //获取当前链表的学号为这个的节点


    }
    auto ite=cont->GetList().begin();
    while(ite!=cont->GetList().end())
    {
        if((*ite)->GetId()==ui->tableWidget->item(row,0)->text())
        {
            break ;
        }
        ite++;
    }
    if(but==QMessageBox::Yes)
    {
        switch(column)
        {


        case 1:
            (*ite)->SetName(qstr);
            break;
        case 2:
            (*ite)->SetSex(qstr);
            break;
        case 3:
            (*ite)->SetAge(qstr);
            break;
        case 4:
            (*ite)->SetMath(qstr);
            break;
        case 5:
            (*ite)->SetChinese(qstr);
            break;
        case 6:
            (*ite)->SetEnglish(qstr);
            break;

        }
        showlistwidget(row);
    }
    else
    {
        QObject::disconnect(ui->tableWidget,&QTableWidget::cellChanged,nullptr,nullptr);

        switch(column)
        {
        case 0:
        {
            QString id=ui->listWidget->item(0)->text();
            QStringList qlst=id.split(":");
            ui->tableWidget->item(row,0)->setText(qlst[1]);


        }
            break;
        case 1:
            ui->tableWidget->item(row,1)->setText((*ite)->GetName());
            break;
        case 2:
            ui->tableWidget->item(row,2)->setText((*ite)->GetSex());
            break;
        case 3:
            ui->tableWidget->item(row,3)->setText((*ite)->GetAge());
            break;
        case 4:
            ui->tableWidget->item(row,4)->setText((*ite)->GetMath());
            break;
        case 5:
            ui->tableWidget->item(row,5)->setText((*ite)->GetChinese());
            break;
        case 6:
            ui->tableWidget->item(row,6)->setText((*ite)->GetEnglish());
            break;

        }

        QObject::connect(ui->tableWidget,&QTableWidget::cellChanged,this,&Widget:: on_tableWidget_cellChanged);


    }

}

这里需要注意的是  在一些情景下我们需要断开表格的修改信号和此槽函数的连接  我们只想在自己手动改变表格中的元素是在执行此槽函数  如:在系统最开始将文件中的数据添加到链表上 在由链表写到表格中的时候  就不需要这个函数发生所以在我们想断开修改信号和此槽函数的连接时

 用到QObject::disconnect(ui->tableWidget,&QTableWidget::cellChanged,nullptr,nullptr);

//断开信号和槽
//QObject::connect(AA,nullptr,nullptr,nullptr);
//断开AA对象的一切信号和槽
//QObject::connect(AA,&signalfun,nullptr,nullptr);
//断开AA对象的signalfun信号的一切槽函数
//QObject::connect(AA,nullptr,BB,nullptr);
//断开AA对象与BB对象的一切信号和槽
#include "widget.h"
#include "ui_widget.h"
#include "dialog.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("学生管理系统");
    d=nullptr;
    cont=Control::Getcon();

    cont->FileToList();
    ShowList();
    ui->lineEdit->setPlaceholderText("请输入姓名");



}

Widget::~Widget()
{
    delete ui;
    if(d)

    {
        delete d;
    }


}



void Widget::showlistwidget(int row)
{
    if(ui->listWidget->count()!=0)
    {


        ui->listWidget->item(0)->setText("学号:"+ui->tableWidget->item(row,0)->text());
        ui->listWidget->item(1)->setText("姓名:"+ui->tableWidget->item(row,1)->text());
        ui->listWidget->item(2)->setText("性别:"+ui->tableWidget->item(row,2)->text());
        ui->listWidget->item(3)->setText("年龄:"+ui->tableWidget->item(row,3)->text());
        ui->listWidget->item(4)->setText("数学:"+ui->tableWidget->item(row,4)->text());
        ui->listWidget->item(5)->setText("语文:"+ui->tableWidget->item(row,5)->text());
        ui->listWidget->item(6)->setText("英语:"+ui->tableWidget->item(row,6)->text());

    }
    else
    {
        ui->listWidget->addItem("学号:"+ui->tableWidget->item(row,0)->text());
        ui->listWidget->addItem("姓名:"+ui->tableWidget->item(row,1)->text());
        ui->listWidget->addItem("性别:"+ui->tableWidget->item(row,2)->text());
        ui->listWidget->addItem("年龄:"+ui->tableWidget->item(row,3)->text());
        ui->listWidget->addItem("数学:"+ui->tableWidget->item(row,4)->text());
        ui->listWidget->addItem("语文:"+ui->tableWidget->item(row,5)->text());
        ui->listWidget->addItem("英语:"+ui->tableWidget->item(row,6)->text());

    }
}


void Widget::on_pushButtonAdd_clicked()
{
    if(d)

    {
        delete d;
    }


    d=new Dialog(this);


    d->setWindowTitle("添加信息");


    QObject::connect(d,&Dialog::MyUpdate,this,&Widget::on_MyUptate);


    d->exec();

}


void Widget::on_MyUptate(Student*stu)
{


    //将stu添加到list上去
    cont->Addlst(stu);
    //显示在表格中
    ShowItem(stu);
}

 void Widget::ShowItem(Student*stu)
 {
     QObject::disconnect(ui->tableWidget,&QTableWidget::cellChanged,nullptr,nullptr);
     //获得总行数
     int  row=ui->tableWidget->rowCount();

     //设置函数
     ui->tableWidget->setRowCount(row+1);
     //将信息显示到表格上
     ui->tableWidget->setItem( row,0,new QTableWidgetItem (stu->GetId()));
     ui->tableWidget->setItem( row,1,new QTableWidgetItem (stu->GetName()));
     ui->tableWidget->setItem( row,2,new QTableWidgetItem (stu->GetSex()));
     ui->tableWidget->setItem( row,3,new QTableWidgetItem (stu->GetAge()));
     ui->tableWidget->setItem( row,4,new QTableWidgetItem (stu->GetMath()));
     ui->tableWidget->setItem( row,5,new QTableWidgetItem (stu->GetChinese()));
     ui->tableWidget->setItem( row,6,new QTableWidgetItem (stu->GetEnglish()));
     QObject::connect(ui->tableWidget,&QTableWidget::cellChanged,this,&Widget:: on_tableWidget_cellChanged);


 }



void Widget::on_pushButtonSave_clicked()
{
    cont->ListToFile();

}
void Widget::ShowList()
{
    auto ite=cont->GetList().begin();
    while(ite!=cont->GetList().end())

    {
        ShowItem(*ite);
        ite++;


    }
}


void Widget:: closeEvent(QCloseEvent*event)
{


    QMessageBox::StandardButton but= QMessageBox::question(this,"提示","是否保存" );
    if(but==QMessageBox::StandardButton::Yes)
    {
        cont->ListToFile();
    }
}

void Widget::on_tableWidget_cellClicked(int row, int column)
{
   showlistwidget( row);

}

void Widget::on_pushButtonSerch_clicked()
{
    //获取关键字
    QString str=ui->lineEdit->text();
    //获得表格总行数
    int Row=ui->tableWidget->rowCount();
    //循环比较关键字和表格上的第二列
    for(int  i=0;i<Row;i++)
    {

        QString name=ui->tableWidget->item(i,1)->text();
        if(name==str)
        {
            //显示到列表框
            showlistwidget(i);
            ui->lineEdit->clear();
            return ;

        }


    }



    QMessageBox::information(this, "错误 ","请输入正确姓名");

    ui->lineEdit->clear();



}

void Widget::on_pushButtonDelete_clicked()
{



    //这里实现了多选删除  (如:一次选择两行  一行选两个  2x2=4个)
    //不实现的话   一行选多个会报错  系统会重复删除该行
    QList<QTableWidgetItem*> qlst =ui->tableWidget->selectedItems();

    auto  ite=qlst.begin();
    while(ite!=qlst.end())
    {
        int  row=(*ite)->row();//获取单元格
        ite++;
        int Mark=-1;//删除判断标记
        if(ite!=qlst.end())//判断下一个是否为空
        {
            Mark=(*ite)->row();//把下一个赋给标记
        }
        if(row!=Mark)//不是一行的

        {
            //删除

           QString qstr=ui->tableWidget->item(row,0)->text();
           ui->tableWidget->removeRow(row);

           cont->Delete(qstr);

        }
        //是一行的
        //不操作 往下走



    ui->listWidget->clear();

    }
}

void Widget::on_tableWidget_cellChanged(int row, int column)
{
    QString qstr=ui->tableWidget->item(row,column)->text();
    QMessageBox::StandardButton but;

    if(column==0)
    {
       QMessageBox::warning(this,"警告","不允许修改学号");
    }

    else
    {

       but= QMessageBox::question(this,"提示","是否修改学号为["+ui->tableWidget->item(row,0)->text()+"]的信息");

       //获取当前链表的学号为这个的节点


    }
    auto ite=cont->GetList().begin();
    while(ite!=cont->GetList().end())
    {
        if((*ite)->GetId()==ui->tableWidget->item(row,0)->text())
        {
            break ;
        }
        ite++;
    }
    if(but==QMessageBox::Yes)
    {
        switch(column)
        {


        case 1:
            (*ite)->SetName(qstr);
            break;
        case 2:
            (*ite)->SetSex(qstr);
            break;
        case 3:
            (*ite)->SetAge(qstr);
            break;
        case 4:
            (*ite)->SetMath(qstr);
            break;
        case 5:
            (*ite)->SetChinese(qstr);
            break;
        case 6:
            (*ite)->SetEnglish(qstr);
            break;

        }
        showlistwidget(row);
    }
    else
    {
        QObject::disconnect(ui->tableWidget,&QTableWidget::cellChanged,nullptr,nullptr);

        switch(column)
        {
        case 0:
        {
            QString id=ui->listWidget->item(0)->text();
            QStringList qlst=id.split(":");
            ui->tableWidget->item(row,0)->setText(qlst[1]);


        }
            break;
        case 1:
            ui->tableWidget->item(row,1)->setText((*ite)->GetName());
            break;
        case 2:
            ui->tableWidget->item(row,2)->setText((*ite)->GetSex());
            break;
        case 3:
            ui->tableWidget->item(row,3)->setText((*ite)->GetAge());
            break;
        case 4:
            ui->tableWidget->item(row,4)->setText((*ite)->GetMath());
            break;
        case 5:
            ui->tableWidget->item(row,5)->setText((*ite)->GetChinese());
            break;
        case 6:
            ui->tableWidget->item(row,6)->setText((*ite)->GetEnglish());
            break;

        }

        QObject::connect(ui->tableWidget,&QTableWidget::cellChanged,this,&Widget:: on_tableWidget_cellChanged);


    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值