學生信息管理系統QT版本(附帶qchart組件)

此程序採用qt5編寫與實現,編譯器採用的爲gcc32位,Windows10測試
需要用到的庫:core gui charts
程序有點bug存在,但終究能用
github開源地址
廢話不多說,上代碼

addnewwindow.h

這個文件裏包含所有信息修改彈窗與部分控件接口

#ifndef ADDNEWWINDOW_H
#define ADDNEWWINDOW_H

#include "studentinfo.h"
#include "teacherinfo.h"
#include <QDebug>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QList>
#include <QMessageBox>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>

namespace Ui {
class AddNewWindow;
}

class AddNewWindow : public QWidget {
  Q_OBJECT
  /**


  {"學生名字", "學生性別", "學生年齡", "學生班級",
                               "學生成績", "學生學號", "學生住址"};

  */
public:
  QStringList studentList = {"學生名字", "學生性別", "學生年齡", "學生班級",
                             "學生成績", "學生學號", "學生住址"};
  QStringList courseList = {"學生名字", "學生性別", "學生學號", "語文成績",
                            "數學成績", "英語成績", "物理成績", "政治成績",
                            "化學成績", "地理成績", "歷史成績", "生物成績"};
  QStringList allTextList = {"學生名字", "學生性別", "學生年齡", "學生班級",
                             "學生成績", "學生學號", "學生住址", "語文成績",
                             "數學成績", "英語成績", "物理成績", "政治成績",
                             "化學成績", "地理成績", "歷史成績", "生物成績"};
  QStringList teacherList = {"教師名字",     "教師性別",     "教師年齡",
                             "教師所管班級", "教師所教科目", "教師執照號碼",
                             "教師住址",     "教師工資(元)"};
  QHBoxLayout *hbox;
  QVBoxLayout *vbox;
  QPushButton *change, *cancel, *add;
  QLineEdit *nameEdit = NULL, *SexEdit = NULL, *AgeEdit = NULL,
            *ClassEdit = NULL, *SumEdit = NULL, *IdEdit = NULL,
            *AddressEdit = NULL, *chineseEdit = NULL, *mathematicsEdit = NULL,
            *EnglishEdit = NULL, *PhysicsEdit = NULL, *ChemistryEdit = NULL,
            *historyEdit = NULL, *GeographyEdit = NULL, *PoliticsEdit = NULL,
            *BiologyEdit = NULL, *SubjectEdit = NULL, *MoneyEdit = NULL;

  QList<QLineEdit *> editList, editList2, allEditList, teacherEditList;

  int con_count = 0, add_con_count = 0, clickvalue = -1, teacher_con_count = 0,
      add_teacher_con_count = 0;

public:
  void init();
  void AddStudent(QList<StudentInfo> &l);
  void ChangeStudent(QList<StudentInfo> &l, StudentInfo s);
  void RemoveStudent(QList<StudentInfo> &l, StudentInfo s);
  StudentInfo showMsg(QList<QString> editValueList);
  void showLayout();

  bool isID(QList<StudentInfo> &l, StudentInfo s);

  TeacherInfo showMsgTeacher(QList<QString> editValueList);
  void AddStudent(QList<TeacherInfo> &l);
  void ChangeStudent(QList<TeacherInfo> &l, TeacherInfo s);
  void RemoveStudent(QList<TeacherInfo> &l, TeacherInfo s);
  bool isID(QList<TeacherInfo> &l, TeacherInfo s);

public:
  explicit AddNewWindow(QWidget *parent = nullptr);
  ~AddNewWindow();

private:
  Ui::AddNewWindow *ui;
};

#endif // ADDNEWWINDOW_H

addnewwindow.cpp

這裏爲實現上個接口文件內容

#include "addnewwindow.h"
#include "ui_addnewwindow.h"

AddNewWindow::AddNewWindow(QWidget *parent)
    : QWidget(parent), ui(new Ui::AddNewWindow) {
  ui->setupUi(this);
}

void AddNewWindow::AddStudent(QList<TeacherInfo> &l) {
  showLayout();
  change->setHidden(true);
  add->setHidden(false);
  setWindowTitle("添加一個新教師");
  if (add_teacher_con_count == 0) {
    connect(add, &QPushButton::clicked, [&]() {
      TeacherInfo s = showMsgTeacher({nameEdit->text(), SexEdit->text(),
                                      AgeEdit->text(), ClassEdit->text(),
                                      SubjectEdit->text(), IdEdit->text(),
                                      AddressEdit->text(), MoneyEdit->text()});
      if (!s.getId().isEmpty() && !s.getAge().isEmpty() &&
          !s.getSex().isEmpty() && !s.getManageClass().isEmpty() &&
          !s.getAddress().isEmpty() && !s.getName().isEmpty() &&
          !s.getManageSubject().isEmpty()) {

        if (isID(l, s)) {
          l.append(s);
          close();
        } else {
          QMessageBox::critical(this, "錯誤",
                                "存在兩個相同的教師編號!請重新輸入",
                                QMessageBox::Yes);
        }
      }
      add_teacher_con_count = add_teacher_con_count + 1;
    });
  }
  show();
}
void AddNewWindow::ChangeStudent(QList<TeacherInfo> &l, TeacherInfo sss) {
  showLayout();
  add->setHidden(true);
  change->setHidden(false);
  cancel->setText("刪除此條");
  setWindowTitle("修改一個職工信息");
  RemoveStudent(l, sss);
  nameEdit->setText(sss.getName());
  SexEdit->setText(sss.getSex());
  AgeEdit->setText(sss.getAge());
  ClassEdit->setText(sss.getManageClass());
  SubjectEdit->setText(sss.getManageSubject());
  IdEdit->setText(sss.getId());
  AddressEdit->setText(sss.getAddress());
  MoneyEdit->setText(sss.getMoney());

  if (teacher_con_count == 0) {
    connect(change, &QPushButton::clicked, [&]() {
      TeacherInfo s = showMsgTeacher({nameEdit->text(), SexEdit->text(),
                                      AgeEdit->text(), ClassEdit->text(),
                                      SubjectEdit->text(), IdEdit->text(),
                                      AddressEdit->text(), MoneyEdit->text()});

      if (!s.getId().isEmpty() && !s.getAge().isEmpty() &&
          !s.getSex().isEmpty() && !s.getManageClass().isEmpty() &&
          !s.getAddress().isEmpty() && !s.getName().isEmpty() &&
          !s.getManageSubject().isEmpty()) {
        if (isID(l, s)) {
          l.append(s);
          close();
        } else {
          QMessageBox::critical(this, "錯誤",
                                "存在兩個相同的教師編號!請重新輸入",
                                QMessageBox::Yes);
        }
      }
      teacher_con_count = teacher_con_count + 1;
    });
  }
  show();
}
void AddNewWindow::RemoveStudent(QList<TeacherInfo> &l, TeacherInfo sss) {
  for (int i = 0; i < l.size(); i++) {
    if (l[i].getId().compare(sss.getId()) == 0 &&
        l[i].getAge().compare(sss.getAge()) == 0 &&
        l[i].getSex().compare(sss.getSex()) == 0 &&
        l[i].getManageSubject().compare(sss.getManageSubject()) == 0 &&
        l[i].getName().compare(sss.getName()) == 0 &&
        l[i].getAddress().compare(sss.getAddress()) == 0 &&
        l[i].getManageClass().compare(sss.getManageClass()) == 0) {
      l.removeAt(i);
      break;
    }
  }
}
bool AddNewWindow::isID(QList<TeacherInfo> &l, TeacherInfo s) {
  foreach (TeacherInfo info, l) {
    if (info.getId().compare(s.getId()) == 0) {
      return false;
    }
  }
  return true;
}
TeacherInfo AddNewWindow::showMsgTeacher(QList<QString> editValueList) {

  QString nameText = editValueList[0], SexText = editValueList[1],
          AgeText = editValueList[2], ClassText = editValueList[3],
          SubJect = editValueList[4], IdText = editValueList[5],
          AddressText = editValueList[6], MoneyText = editValueList[7];
  QStringList textList = {nameText, SexText, AgeText,     ClassText,
                          SubJect,  IdText,  AddressText, MoneyText};
  QMessageBox msg;
  msg.setIcon(QMessageBox::Icon::Critical);
  msg.setWindowTitle("錯誤");
  msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
  msg.setButtonText(QMessageBox::Yes, "好的");
  msg.setButtonText(QMessageBox::No, "不行,我拒絕");
  for (int i = 0; i < textList.size(); i++) {
    if (textList[i].isNull() || textList[i].isEmpty()) {
      msg.setText("請確認" + teacherList[i] + "是否爲空或者合法字符串");
    }
  }
  if (!msg.text().isNull() || !msg.text().isEmpty()) {
    switch (msg.exec()) {
    case QMessageBox::Yes:
      msg.close();
      break;
    case QMessageBox::No:
      foreach (QLineEdit *e, teacherEditList) { e->clear(); }
      close();
      break;
    }
  }

  return TeacherInfo(nameText, SexText, AgeText, ClassText, SubJect, IdText,
                     AddressText, MoneyText);
}

StudentInfo AddNewWindow::showMsg(QList<QString> editValueList) {
  QString nameText = editValueList[0], SexText = editValueList[1],
          AgeText = editValueList[2], ClassText = editValueList[3],
          SumText = editValueList[4], IdText = editValueList[5],
          AddressText = editValueList[6], chineseText = editValueList[7],
          mathematicsText = editValueList[8], EnglishText = editValueList[9],
          PhysicsText = editValueList[10], ChemistryText = editValueList[11],
          historyText = editValueList[12], GeographyText = editValueList[13],
          PoliticsText = editValueList[14], BiologyText = editValueList[15];
  double (*getSum)(QStringList l) = [](QStringList l) {
    double sum = 0;
    foreach (QString n, l) { sum += n.replace(QRegExp("\\s+"), "").toDouble(); }

    return sum;
  };
  QStringList textList = {
      nameText,        SexText,       AgeText,      ClassText,
      SumText,         IdText,        AddressText,  chineseText,
      mathematicsText, EnglishText,   PhysicsText,  ChemistryText,
      historyText,     GeographyText, PoliticsText, BiologyText};

  QMessageBox msg;

  msg.setIcon(QMessageBox::Icon::Critical);
  msg.setWindowTitle("錯誤");
  msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
  msg.setButtonText(QMessageBox::Yes, "好的");
  msg.setButtonText(QMessageBox::No, "不行,我拒絕");
  for (int i = 0; i < textList.size(); i++) {
    if (textList[i].isNull() || textList[i].isEmpty()) {
      msg.setText("請確認" + allTextList[i] + "是否爲空或者合法字符串");
    }
  }
  if (!msg.text().isNull() || !msg.text().isEmpty()) {
    switch (msg.exec()) {
    case QMessageBox::Yes:
      msg.close();
      break;
    case QMessageBox::No:
      foreach (QLineEdit *e, allEditList) { e->clear(); }
      close();
      break;
    }
  }
  SumText = QString::number(getSum({chineseText, mathematicsText, EnglishText,
                                    PhysicsText, ChemistryText, historyText,
                                    GeographyText, PoliticsText, BiologyText}));
  return StudentInfo(chineseText, mathematicsText, EnglishText, PhysicsText,
                     ChemistryText, historyText, GeographyText, PoliticsText,
                     BiologyText, nameText, AgeText, AddressText, SexText,
                     IdText, SumText, ClassText);
}

bool AddNewWindow::isID(QList<StudentInfo> &l, StudentInfo s) {

  foreach (StudentInfo info, l) {
    if (info.getId().compare(s.getId()) == 0) {
      return false;
    }
  }

  return true;
}

void AddNewWindow::AddStudent(QList<StudentInfo> &l) {
  showLayout();
  change->setHidden(true);
  add->setHidden(false);
  setWindowTitle("添加一個新同學");
  if (add_con_count == 0) {
    connect(add, &QPushButton::clicked, [&]() {
      StudentInfo s = showMsg(
          {nameEdit->text(), SexEdit->text(), AgeEdit->text(),
           ClassEdit->text(), SumEdit->text(), IdEdit->text(),
           AddressEdit->text(), chineseEdit->text(), mathematicsEdit->text(),
           EnglishEdit->text(), PhysicsEdit->text(), ChemistryEdit->text(),
           historyEdit->text(), GeographyEdit->text(), PoliticsEdit->text(),
           BiologyEdit->text()});
      if (!s.getId().isEmpty() && !s.getAge().isEmpty() &&
          !s.getSex().isEmpty() && !s.getStudentClass().isEmpty() &&
          !s.getAddress().isEmpty() && !s.getName().isEmpty() &&
          !s.getSum().isEmpty()) {

        if (isID(l, s)) {
          l.append(s);
          close();
        } else {
          QMessageBox::critical(this, "錯誤", "存在兩個相同的學號!請重新輸入",
                                QMessageBox::Yes);
        }
      }
      add_con_count = add_con_count + 1;
    });
  }
  show();
}

void AddNewWindow::ChangeStudent(QList<StudentInfo> &l, StudentInfo sss) {
  showLayout();

  add->setHidden(true);
  change->setHidden(false);
  cancel->setText("刪除此條");
  setWindowTitle("修改一個同學信息");
  RemoveStudent(l, sss);
  nameEdit->setText(sss.getName());
  SexEdit->setText(sss.getSex());
  AgeEdit->setText(sss.getAge());
  ClassEdit->setText(sss.getStudentClass());
  SumEdit->setText(sss.getSum());
  IdEdit->setText(sss.getId());
  AddressEdit->setText(sss.getAddress());
  chineseEdit->setText(sss.getChinese());
  mathematicsEdit->setText(sss.getMathematics());
  EnglishEdit->setText(sss.getEnglish());
  PhysicsEdit->setText(sss.getPhysics());
  ChemistryEdit->setText(sss.getChemistry());
  historyEdit->setText(sss.getHistory());
  GeographyEdit->setText(sss.getGeography());
  PoliticsEdit->setText(sss.getPolitics());
  BiologyEdit->setText(sss.getBiology());
  if (con_count == 0) {
    connect(change, &QPushButton::clicked, [&]() {
      StudentInfo s = showMsg(
          {nameEdit->text(), SexEdit->text(), AgeEdit->text(),
           ClassEdit->text(), SumEdit->text(), IdEdit->text(),
           AddressEdit->text(), chineseEdit->text(), mathematicsEdit->text(),
           EnglishEdit->text(), PhysicsEdit->text(), ChemistryEdit->text(),
           historyEdit->text(), GeographyEdit->text(), PoliticsEdit->text(),
           BiologyEdit->text()});
      qDebug() << "143 :::::: ";
      if (!s.getId().isEmpty() && !s.getAge().isEmpty() &&
          !s.getSex().isEmpty() && !s.getStudentClass().isEmpty() &&
          !s.getAddress().isEmpty() && !s.getName().isEmpty() &&
          !s.getSum().isEmpty()) {

        if (isID(l, s)) {
          l.append(s);
          close();
        } else {
          QMessageBox::critical(this, "錯誤", "存在兩個相同的學號!請重新輸入",
                                QMessageBox::Yes);
        }
      }
      con_count = con_count + 1;
      //      close();
    });
  }
  show();
}

void AddNewWindow::RemoveStudent(QList<StudentInfo> &l, StudentInfo sss) {

  for (int i = 0; i < l.size(); i++) {
    if (l[i].getId().compare(sss.getId()) == 0 &&
        l[i].getAge().compare(sss.getAge()) == 0 &&
        l[i].getSex().compare(sss.getSex()) == 0 &&
        l[i].getSum().compare(sss.getSum()) == 0 &&
        l[i].getName().compare(sss.getName()) == 0 &&
        l[i].getAddress().compare(sss.getAddress()) == 0 &&
        l[i].getStudentClass().compare(sss.getStudentClass()) == 0) {
      qDebug() << " find :::: " << sss.getName();
      l.removeAt(i);
      break;
    }
  }
}

void AddNewWindow::showLayout() {
  if (nameEdit == NULL) {
    init();
    QStringList sList;
    QList<QLineEdit *> tmpEdit;
    if (clickvalue == 2) {
      sList = teacherList;
      tmpEdit = teacherEditList;
    } else {
      sList = allTextList;
      tmpEdit = allEditList;
    }
    int index = 0;
    QHBoxLayout *hbox2 = new QHBoxLayout();
    for (int i = 0; i < sList.size(); i++) {
      if (index == 2) {
        vbox->addLayout(hbox);
        hbox2 = new QHBoxLayout();
        hbox = new QHBoxLayout();
        index = 0;
      }

      tmpEdit[i]->setPlaceholderText("請輸入" + sList[i]);
      tmpEdit[i]->setFixedHeight(30);
      hbox2->addWidget(new QLabel(sList[i]));
      hbox2->addWidget(tmpEdit[i]);
      hbox->addLayout(hbox2);
      index++;
      if (i == (sList.size() - 1)) {
        vbox->addLayout(hbox);
      }
    }

    hbox2 = new QHBoxLayout();
    hbox2->addWidget(add);
    hbox2->addWidget(change);
    hbox2->addWidget(cancel);
    vbox->addLayout(hbox2);
    setLayout(vbox);
  }
}

void AddNewWindow::init() {

  nameEdit = new QLineEdit();
  SexEdit = new QLineEdit();
  AgeEdit = new QLineEdit();
  ClassEdit = new QLineEdit();
  SumEdit = new QLineEdit();
  IdEdit = new QLineEdit();
  AddressEdit = new QLineEdit();
  chineseEdit = new QLineEdit();
  mathematicsEdit = new QLineEdit();
  EnglishEdit = new QLineEdit();
  PhysicsEdit = new QLineEdit();
  ChemistryEdit = new QLineEdit();
  historyEdit = new QLineEdit();
  GeographyEdit = new QLineEdit();
  PoliticsEdit = new QLineEdit();
  BiologyEdit = new QLineEdit();
  SubjectEdit = new QLineEdit();
  MoneyEdit = new QLineEdit();

  hbox = new QHBoxLayout();
  vbox = new QVBoxLayout();

  change = new QPushButton("修改");
  cancel = new QPushButton("取消");
  add = new QPushButton("添加");
  editList = {nameEdit, SexEdit, AgeEdit,    ClassEdit,
              SumEdit,  IdEdit,  AddressEdit};

  editList2 = {nameEdit,        SexEdit,       AgeEdit,      ClassEdit,
               SumEdit,         IdEdit,        AddressEdit,  chineseEdit,
               mathematicsEdit, EnglishEdit,   PhysicsEdit,  ChemistryEdit,
               historyEdit,     GeographyEdit, PoliticsEdit, BiologyEdit};
  allEditList = {nameEdit,        SexEdit,       AgeEdit,      ClassEdit,
                 SumEdit,         IdEdit,        AddressEdit,  chineseEdit,
                 mathematicsEdit, EnglishEdit,   PhysicsEdit,  ChemistryEdit,
                 historyEdit,     GeographyEdit, PoliticsEdit, BiologyEdit};

  teacherEditList = {nameEdit,    SexEdit, AgeEdit,     ClassEdit,
                     SubjectEdit, IdEdit,  AddressEdit, MoneyEdit};

  connect(cancel, &QPushButton::clicked, [=]() { close(); });
}

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

chartwindow.h

這個文件主要用於顯示圖餅、柱狀圖、線條

#ifndef CHARTWINDOW_H
#define CHARTWINDOW_H

#include "studentinfo.h"
#include "teacherinfo.h"
#include <QVBoxLayout>
#include <QWidget>
#include <QtCharts>
namespace Ui {
class chartWindow;
}

class chartWindow : public QWidget {
  Q_OBJECT

public:
  QPieSeries *series;
  QBarSeries *studentCourseSum;
  //  QChartView *chartView;
  StudentInfo s;
  int init_ok = 0, courseSum_init_ok = 0;
  //  QChart *chart1 = NULL, *chart2 = NULL;
  QPoint p;

public:
  QChartView *ShowStudentChart(QList<StudentInfo> l);
  QChartView *ShowStudentBarSeries(QList<StudentInfo> l);
  QChartView *ShowTeacherView(QList<TeacherInfo> l);

  void init();

public:
  explicit chartWindow(QWidget *parent = nullptr);
  ~chartWindow();

private:
  Ui::chartWindow *ui;
};

#endif // CHARTWINDOW_H

chartwindow.cpp

#include "chartwindow.h"
#include "ui_chartwindow.h"

chartWindow::chartWindow(QWidget *parent)
    : QWidget(parent), ui(new Ui::chartWindow) {
  ui->setupUi(this);
}

QChartView *chartWindow::ShowTeacherView(QList<TeacherInfo> l) {

  QLineSeries *lineseries = new QLineSeries();
  QStringList categories;
  lineseries->setName("工資");
  for (int i = 0; i < l.size(); i++) {
    lineseries->append(i, l[i].getMoney().toInt());
    categories.append(l[i].getName());
  }
  QChart *chart = new QChart();
  QBarCategoryAxis *axis = new QBarCategoryAxis();
  chart->addSeries(lineseries);
  chart->createDefaultAxes();
  chart->legend()->setVisible(true);
  chart->legend()->setAlignment(Qt::AlignBottom);
  axis->append(categories);
  chart->setAxisX(axis);
  chart->setTitle("教師工資一覽");
  QChartView *chartView = new QChartView(chart);
  chartView->setRenderHint(QPainter::Antialiasing);
  return chartView;
}

QChartView *chartWindow::ShowStudentBarSeries(QList<StudentInfo> l) {
  init();
  studentCourseSum->clear();
  QBarSet *chinese = new QBarSet("語文");
  QBarSet *mathematics = new QBarSet("數學");
  QBarSet *English = new QBarSet("英語");
  QBarSet *Physics = new QBarSet("物理");
  QBarSet *Chemistry = new QBarSet("化學");
  QBarSet *history = new QBarSet("歷史");
  QBarSet *Geography = new QBarSet("地理");
  QBarSet *Politics = new QBarSet("政治");
  QBarSet *Biology = new QBarSet("生物");
  double (*re_str)(QString str) = [](QString str) {
    return str.replace(QRegExp("\\s+"), "").toDouble();
  };
  qDebug() << "QList<StudentInfo> l size ::: " << l.size();
  QStringList studentNameList;
  foreach (StudentInfo info, l) {
    chinese->append(re_str(info.getChinese()));
    mathematics->append(re_str(info.getMathematics()));
    English->append(re_str(info.getEnglish()));
    Physics->append(re_str(info.getPhysics()));
    Chemistry->append(re_str(info.getChemistry()));
    history->append(re_str(info.getHistory()));
    Geography->append(re_str(info.getGeography()));
    Politics->append(re_str(info.getPolitics()));
    Biology->append(re_str(info.getBiology()));
    studentNameList.append(info.getName());
  }
  Biology->setColor(QColor(28, 28, 28));
  Politics->setColor(QColor(72, 209, 204));
  Geography->setColor(QColor(139, 101, 8));
  history->setColor(QColor(205, 104, 57));
  Chemistry->setColor(QColor(208, 32, 144));
  studentCourseSum->append({chinese, mathematics, English, Physics, Chemistry,
                            history, Geography, Politics, Biology});
  studentCourseSum->setLabelsPosition(
      QAbstractBarSeries::
          LabelsInsideEnd); // 設置數據系列標籤的位置於數據柱內測上方
  studentCourseSum->setLabelsVisible(true); // 設置顯示數據系列標籤
  QChart *chart2 = new QChart();
  chart2->addSeries(studentCourseSum);
  chart2->setTitle("學生成績");
  chart2->setAnimationOptions(QChart::SeriesAnimations);
  QBarCategoryAxis *axis = new QBarCategoryAxis();
  axis->append(studentNameList);
  chart2->createDefaultAxes();
  chart2->setAxisX(axis, studentCourseSum);
  chart2->legend()->setVisible(true);
  chart2->legend()->setAlignment(Qt::AlignBottom);
  QChartView *chartView = new QChartView(chart2);
  chartView->setRenderHint(QPainter::Antialiasing);
  chartView->setHorizontalScrollBarPolicy(
      Qt::ScrollBarPolicy::ScrollBarAsNeeded);
  chartView->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);

  chartView->setResizeAnchor(QGraphicsView::AnchorUnderMouse);
  chartView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);

  return chartView;
}

QChartView *chartWindow::ShowStudentChart(QList<StudentInfo> StudentInfoList) {
  init();
  series->clear();
  //  chart1->removeAllSeries();
  double sum = 0.0, boyNum = 0.0, girlNum = 0.0, boy = 0,
         num = StudentInfoList.size(), girl = 0;
  foreach (StudentInfo s, StudentInfoList) {
    if (s.getSex().compare("女") == 0) {
      girl++;
    }
    if (s.getSex().compare("男") == 0) {
      boy++;
    }
    sum += s.getSum().replace(QRegExp("\\s+"), "").toDouble();
  }
  boyNum = (boy / num) * 100;
  girlNum = (girl / num) * 100;
  qDebug() << "男生佔" + QString::number(boyNum) + "%" << boyNum;
  qDebug() << "女生佔" + QString::number(girlNum) + "%" << girlNum;
  series->append("男生佔" + QString::number(boyNum) + "%", boyNum);
  series->append("女生佔" + QString::number(girlNum) + "%", girlNum);
  series->setLabelsVisible(true);
  series->setHoleSize(0.35);
  series->slices().at(0)->setColor(QColor(0, 255, 255));
  series->slices().at(1)->setColor(QColor(205, 38, 38));
  QChart *chart1 = new QChart();
  chart1->addSeries(series);
  chart1->setTitle("學校男女比例");
  //  return chart;
  QChartView *chartView = new QChartView(chart1);
  //  chartView->setChart(chart);
  chartView->setRenderHint(QPainter::Antialiasing);

  return chartView;
}

void chartWindow::init() {
  if (init_ok == 0) {
    series = new QPieSeries();
    init_ok++;
  } else if (courseSum_init_ok == 0) {
    studentCourseSum = new QBarSeries();
    courseSum_init_ok++;
  }
}

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

crmwindow.h

這個文件爲登錄後界面,一切都從這裏開始操作

#ifndef CRMWINDOW_H
#define CRMWINDOW_H

#include <QAction>
#include <QCheckBox>
#include <QCloseEvent>
#include <QComboBox>
#include <QDebug>
#include <QEvent>
#include <QFontDialog>
#include <QHBoxLayout>
#include <QHeaderView>
#include <QInputDialog>
#include <QKeyEvent>
#include <QLabel>
#include <QLineEdit>
#include <QList>
#include <QMenu>
#include <QMenuBar>
#include <QMessageBox>
#include <QPushButton>
#include <QRegExp>
#include <QTableWidget>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QVBoxLayout>
#include <QWidget>
#include <QtCharts>

#include "addnewwindow.h"
#include "chartwindow.h"
#include "studentinfo.h"
#include "teacherinfo.h"

namespace Ui {
class CRMWindow;
}

class CRMWindow : public QWidget {
  Q_OBJECT

public:
  QList<StudentInfo> StudentInfoList, FindStudentInfoList;
  QList<TeacherInfo> TeacherInfoList, FindTeacherInfoList;
  AddNewWindow addNewWindow;
  chartWindow chartwind;
  QLineEdit *searchEdit;
  QComboBox *showSearchValues;
  QPushButton *searchButton, *addButton, *removeButton, *changeButton,
      *refButton;
  bool studentFindIsOK = false, studentChangeIsOK = false,
       studentSubjectFindIsOK = false, studentSubjectChangeIsOK = false;
  QChartView *chartView = NULL, *barView = NULL, *teacherView = NULL;
  int clickedValue = -1;

public:
  void showLayout();
  void init();
  void checkValues();
  void closeEvent(QCloseEvent *event);
  QTableWidget *addTableWidget(QStringList l);
  void studentFind();
  void showStudentFindLayout(QVBoxLayout *vbox2);
  void listStudent(QList<StudentInfo> StudentInfoList);
  void addStudent(StudentInfo studentInfo);
  void removeStudent(int id);
  void changeStudent();
  void addTable(StudentInfo studentInfo, int index);
  void listCourse(QList<StudentInfo> StudentInfoList);
  void listTeacher(QList<TeacherInfo> TeacherInfoList);
  void addTeacher(TeacherInfo teacherInfo);
  void addTable(TeacherInfo teacherInfo, int index);
  void checkClickValue();
  void showTable();
  void showCombox();
  void closeControl();
  void showControl();
  void closeView();
  void showView();

public:
  QHBoxLayout *hbox;
  QVBoxLayout *vbox;
  QTableWidget *table, *table2, *table3;

public:
  explicit CRMWindow(QWidget *parent = nullptr);
  ~CRMWindow();

private:
  Ui::CRMWindow *ui;
};

#endif // CRMWINDOW_H

crmwindow.cpp

#include "crmwindow.h"
#include "ui_crmwindow.h"

CRMWindow::CRMWindow(QWidget *parent) : QWidget(parent), ui(new Ui::CRMWindow) {
  ui->setupUi(this);

  init();
}

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

void CRMWindow::showLayout() {

  QTreeWidget *tw = new QTreeWidget();
  QStringList menu1list, menu2list;
  menu1list << "首頁"
            << "學生信息"
            << "課程信息"
            << "在職人員"
            << "遵紀作風";

  menu2list << "學生查詢"
            << "學生修改"
            << "課程查詢"
            << "課程修改"
            << "在職人員查詢"
            << "在職人員修改";

  tw->setFixedWidth(220);
  tw->setColumnCount(1);
  tw->setHeaderHidden(true);
  tw->setFont(QFont("華文楷體", 20));
  tw->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
  tw->header()->setStretchLastSection(false);
  QTreeWidgetItem *item = new QTreeWidgetItem(tw, {"crm"});
  int menucount = 0, index = 0;
  foreach (QString menu1, menu1list) {
    QTreeWidgetItem *ii = new QTreeWidgetItem(item, {menu1});
    if (menucount > 0 && index < menu2list.size()) {
      for (int i = 0; i < 2; i++) {
        new QTreeWidgetItem(ii, {menu2list[index]});
        index++;
      }
    }
    menucount++;
  }

  hbox->addWidget(tw, 1);
  QVBoxLayout *vbox2 = new QVBoxLayout();
  QLabel *titleLabel = new QLabel("CRM");
  titleLabel->setFont(QFont("華文楷體", 20));
  titleLabel->setAlignment(Qt::AlignCenter);
  vbox2->addWidget(titleLabel);
  vbox2->setAlignment(Qt::AlignCenter);
  hbox->addLayout(vbox2);
  vbox->addLayout(hbox, 1);
  hbox = new QHBoxLayout();
  chartView = chartwind.ShowStudentChart(StudentInfoList);
  barView = chartwind.ShowStudentBarSeries(StudentInfoList);
  teacherView = chartwind.ShowTeacherView(TeacherInfoList);
  closeView();
  hbox->addWidget(chartView);
  hbox->addWidget(barView);
  vbox2->addLayout(hbox);
  vbox2->addWidget(teacherView);
  showStudentFindLayout(vbox2);
  connect(tw, &QTreeWidget::clicked, this, [=]() {
    QString currentName = tw->currentItem()->text(tw->currentColumn());
    if (currentName.compare("首頁") == 0) {
      titleLabel->setText("首頁");
      showView();
    } else if (currentName.compare("學生信息") == 0) {
      titleLabel->setText("學生信息");
      clickedValue = 0;
      showControl();
    } else if (currentName.compare("學生查詢") == 0) {
      titleLabel->setText("學生查詢");
      clickedValue = 0;
      studentFind();
    } else if (currentName.compare("學生修改") == 0) {
      titleLabel->setText("學生修改");
      clickedValue = 0;
      changeStudent();
    } else if (currentName.compare("課程信息") == 0) {
      titleLabel->setText("課程信息");
      clickedValue = 1;
      showControl();
    } else if (currentName.compare("課程查詢") == 0) {
      titleLabel->setText("課程查詢");
      clickedValue = 1;
      studentFind();
    } else if (currentName.compare("課程修改") == 0) {
      titleLabel->setText("課程修改");
      clickedValue = 1;
      changeStudent();
    } else if (currentName.compare("在職人員") == 0) {
      titleLabel->setText("在職人員");
      clickedValue = 2;
      showControl();
    } else if (currentName.compare("在職人員查詢") == 0) {
      titleLabel->setText("在職人員查詢");
      clickedValue = 2;
      addNewWindow.clickvalue = 2;
      studentFind();
    } else if (currentName.compare("在職人員修改") == 0) {
      titleLabel->setText("在職人員修改");
      clickedValue = 2;
      addNewWindow.clickvalue = 2;
      changeStudent();
    } else if (currentName.compare("遵紀作風") == 0) {
      titleLabel->setText("聽黨指揮能打勝仗");
      closeControl();
    }
  });
}

void CRMWindow::closeView() {
  barView->setHidden(true);
  chartView->setHidden(true);
  teacherView->setHidden(true);
}

void CRMWindow::showView() {
  barView->setHidden(false);
  chartView->setHidden(false);
  teacherView->setHidden(false);
}

void CRMWindow::showControl() {
  closeControl();
  switch (clickedValue) {
  case 0:
    chartView->setHidden(false);
    break;
  case 1:
    barView->setHidden(false);
    break;
  case 2:
    teacherView->setHidden(false);
    break;
  }
}

void CRMWindow::closeControl() {
  closeView();
  addButton->setHidden(true);
  changeButton->setHidden(true);
  removeButton->setHidden(true);
  refButton->setHidden(true);
  searchEdit->setHidden(true);
  searchButton->setHidden(true);
  showSearchValues->setHidden(true);
  table->setHidden(true);
  table2->setHidden(true);
  table3->setHidden(true);
}

void CRMWindow::addTable(StudentInfo studentInfo, int index) {
  if (clickedValue == 0) {
    table->setItem(index, 0, new QTableWidgetItem(studentInfo.getName()));
    table->setItem(index, 1, new QTableWidgetItem(studentInfo.getSex()));
    table->setItem(index, 2, new QTableWidgetItem(studentInfo.getAge()));
    table->setItem(index, 3,
                   new QTableWidgetItem(studentInfo.getStudentClass()));
    table->setItem(index, 4, new QTableWidgetItem(studentInfo.getSum()));
    table->setItem(index, 5, new QTableWidgetItem(studentInfo.getId()));
    table->setItem(index, 6, new QTableWidgetItem(studentInfo.getAddress()));
    table->item(index, 0)->setTextAlignment(Qt::AlignCenter);
    table->item(index, 1)->setTextAlignment(Qt::AlignCenter);
    table->item(index, 2)->setTextAlignment(Qt::AlignCenter);
    table->item(index, 3)->setTextAlignment(Qt::AlignCenter);
    table->item(index, 4)->setTextAlignment(Qt::AlignCenter);
    table->item(index, 5)->setTextAlignment(Qt::AlignCenter);
    table->item(index, 6)->setTextAlignment(Qt::AlignCenter);
  } else if (clickedValue == 1) {
    table2->setItem(index, 0, new QTableWidgetItem(studentInfo.getName()));
    table2->setItem(index, 1, new QTableWidgetItem(studentInfo.getSex()));
    table2->setItem(index, 2, new QTableWidgetItem(studentInfo.getId()));
    table2->setItem(index, 3, new QTableWidgetItem(studentInfo.getChinese()));
    table2->setItem(index, 4,
                    new QTableWidgetItem(studentInfo.getMathematics()));
    table2->setItem(index, 5, new QTableWidgetItem(studentInfo.getEnglish()));
    table2->setItem(index, 6, new QTableWidgetItem(studentInfo.getPhysics()));
    table2->setItem(index, 7, new QTableWidgetItem(studentInfo.getPolitics()));
    table2->setItem(index, 8, new QTableWidgetItem(studentInfo.getChemistry()));
    table2->setItem(index, 9, new QTableWidgetItem(studentInfo.getGeography()));
    table2->setItem(index, 10, new QTableWidgetItem(studentInfo.getHistory()));
    table2->setItem(index, 11, new QTableWidgetItem(studentInfo.getBiology()));
    table2->item(index, 0)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 1)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 2)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 3)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 4)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 5)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 6)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 7)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 8)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 9)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 10)->setTextAlignment(Qt::AlignCenter);
    table2->item(index, 11)->setTextAlignment(Qt::AlignCenter);
  }
}

void CRMWindow::addTable(TeacherInfo teacherInfo, int index) {
  if (clickedValue == 2) {
    table3->setItem(index, 0, new QTableWidgetItem(teacherInfo.getName()));
    table3->setItem(index, 1, new QTableWidgetItem(teacherInfo.getSex()));
    table3->setItem(index, 2, new QTableWidgetItem(teacherInfo.getAge()));
    table3->setItem(index, 3,
                    new QTableWidgetItem(teacherInfo.getManageClass()));
    table3->setItem(index, 4,
                    new QTableWidgetItem(teacherInfo.getManageSubject()));
    table3->setItem(index, 5, new QTableWidgetItem(teacherInfo.getId()));
    table3->setItem(index, 6, new QTableWidgetItem(teacherInfo.getAddress()));
    table3->setItem(index, 7, new QTableWidgetItem(teacherInfo.getMoney()));

    table3->item(index, 0)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 1)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 2)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 3)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 4)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 5)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 6)->setTextAlignment(Qt::AlignCenter);
    table3->item(index, 7)->setTextAlignment(Qt::AlignCenter);
  }
}

QTableWidget *CRMWindow::addTableWidget(QStringList l) {
  QTableWidget *table = new QTableWidget(l.size(), l.size());
  table->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
  table->verticalHeader()->setHidden(true);
  //設置表格默認爲填充
  //  table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
  table->setSelectionBehavior(QAbstractItemView::SelectRows);
  return table;
}

void CRMWindow::listCourse(QList<StudentInfo> StudentAchievementList) {
  table2->clear();
  table2->setRowCount(StudentAchievementList.size());
  table2->setHorizontalHeaderLabels(addNewWindow.courseList);
  for (int i = 0; i < StudentAchievementList.size(); i++) {
    addTable(StudentAchievementList[i], i);
  }
}

void CRMWindow::listStudent(QList<StudentInfo> StudentInfoList) {
  table->clear();
  table->setRowCount(StudentInfoList.size());
  table->setHorizontalHeaderLabels(addNewWindow.studentList);
  for (int i = 0; i < StudentInfoList.size(); i++) {
    addTable(StudentInfoList[i], i);
  }
}

void CRMWindow::listTeacher(QList<TeacherInfo> TeacherInfoList) {
  table3->clear();
  table3->setRowCount(TeacherInfoList.size());
  table3->setHorizontalHeaderLabels(addNewWindow.teacherList);
  for (int i = 0; i < TeacherInfoList.size(); i++) {
    addTable(TeacherInfoList[i], i);
  }
}

void CRMWindow::addStudent(StudentInfo studentInfo) {
  if (!studentInfo.getName().isNull() || !studentInfo.getName().isEmpty()) {
    StudentInfoList.append(studentInfo);
  }
}

void CRMWindow::addTeacher(TeacherInfo teacherInfo) {
  if (!teacherInfo.getName().isNull() || !teacherInfo.getName().isEmpty()) {
    TeacherInfoList.append(teacherInfo);
  }
}

void CRMWindow::checkClickValue() {
  if (StudentInfoList.size() > 0 || TeacherInfoList.size() > 0) {
    switch (clickedValue) {
    case 0:
      listStudent(StudentInfoList);
      break;
    case 1:
      listCourse(StudentInfoList);
      break;
    case 2:
      listTeacher(TeacherInfoList);
      break;
    }
  }
}

void CRMWindow::showTable() {
  switch (clickedValue) {
  case 0:
    table->setHidden(false);
    table2->setHidden(true);
    table3->setHidden(true);
    break;
  case 1:
    table->setHidden(true);
    table2->setHidden(false);
    table3->setHidden(true);
    break;
  case 2:
    table->setHidden(true);
    table2->setHidden(true);
    table3->setHidden(false);
    break;
  }
}

void CRMWindow::changeStudent() {
  closeView();
  addButton->setHidden(false);
  changeButton->setHidden(false);
  removeButton->setHidden(false);
  refButton->setHidden(false);
  showTable();
  searchEdit->setHidden(false);
  searchButton->setHidden(false);
  showSearchValues->setHidden(false);
  void (*changeStudent)(QList<QTableWidgetItem *> t, StudentInfo & s,
                        QList<StudentInfo> StudentInfoList) =
      [](QList<QTableWidgetItem *> t, StudentInfo &s,
         QList<StudentInfo> StudentInfoList) {
        s.setName(t[0]->text());
        s.setSex(t[1]->text());
        s.setAge(t[2]->text());
        s.setStudentClass(t[3]->text());
        s.setSum(t[4]->text());
        s.setId(t[5]->text());
        s.setAddress(t[6]->text());
        foreach (StudentInfo info, StudentInfoList) {
          if (info.getId().compare(s.getId()) == 0) {
            s = info;
            break;
          }
        }
      };
  void (*changeCourse)(QList<QTableWidgetItem *> t, StudentInfo & s,
                       QList<StudentInfo> StudentInfoList) =
      [](QList<QTableWidgetItem *> t, StudentInfo &s,
         QList<StudentInfo> StudentInfoList) {
        s.setName(t[0]->text());
        s.setSex(t[1]->text());
        s.setId(t[2]->text());
        s.setChinese(t[3]->text());
        s.setMathematics(t[4]->text());
        s.setEnglish(t[5]->text());
        s.setPhysics(t[6]->text());
        s.setPolitics(t[7]->text());
        s.setChemistry(t[8]->text());
        s.setGeography(t[9]->text());
        s.setHistory(t[10]->text());
        s.setBiology(t[11]->text());
        foreach (StudentInfo info, StudentInfoList) {
          if (info.getId().compare(s.getId()) == 0) {
            s = info;
            break;
          }
        }
      };

  void (*changeTeacher)(QList<QTableWidgetItem *> t, TeacherInfo & s,
                        QList<TeacherInfo> TeacherInfoList) =
      [](QList<QTableWidgetItem *> t, TeacherInfo &s,
         QList<TeacherInfo> TeacherInfoList) {
        s.setName(t[0]->text());
        s.setSex(t[1]->text());
        s.setAge(t[2]->text());
        s.setManageClass(t[3]->text());
        s.setManageSubject(t[4]->text());
        s.setId(t[5]->text());
        s.setAddress(t[6]->text());
        foreach (TeacherInfo info, TeacherInfoList) {
          if (info.getId().compare(s.getId()) == 0) {
            s = info;
            break;
          }
        }
      };
  showCombox();
  if (!studentChangeIsOK) {
    connect(searchButton, &QPushButton::clicked, this, [=]() {
      FindStudentInfoList.clear();
      FindTeacherInfoList.clear();
      if (clickedValue == 2) {
        switch (showSearchValues->currentIndex()) {
        case 0:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getName().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        case 1:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getSex().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        case 2:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getAge().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        case 3:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getManageClass().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        case 4:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getManageSubject().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        case 5:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getId().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        case 6:
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getAddress().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindTeacherInfoList.append(info);
            }
          }
          break;
        }
      } else {
        switch (showSearchValues->currentIndex()) {
        case 0:
          qDebug() << showSearchValues->currentText() << " -- 0";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getName().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        case 1:
          qDebug() << showSearchValues->currentText() << " -- 1";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getSex().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        case 2:
          qDebug() << showSearchValues->currentText() << " -- 2";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getAge().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        case 3:
          qDebug() << showSearchValues->currentText() << " -- 3";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getStudentClass().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        case 4:
          qDebug() << showSearchValues->currentText() << " -- 4";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getSum().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        case 5:
          qDebug() << showSearchValues->currentText() << " -- 5";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getId().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        case 6:
          qDebug() << showSearchValues->currentText() << " -- 6";
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getAddress().indexOf(
                    searchEdit->text().replace(QRegExp("\\s+"), "")) != -1) {
              FindStudentInfoList.append(info);
            }
          }
          break;
        }
      }

      if (clickedValue == 0) {
        listStudent(FindStudentInfoList);
      } else if (clickedValue == 1) {
        listCourse(FindStudentInfoList);
      } else if (clickedValue == 2) {
        listTeacher(FindTeacherInfoList);
      }
    });

    connect(removeButton, &QPushButton::clicked, this, [=]() {
      if (clickedValue == 2) {
        TeacherInfo info;
        if (table3->selectedItems().size() > 0) {
          changeTeacher(table3->selectedItems(), info, TeacherInfoList);
        } else {
          int id = QInputDialog::getInt(this, "教師編號", "請輸入");
          foreach (TeacherInfo info2, TeacherInfoList) {
            if (info2.getId().compare(QString::number(id)) == 0) {
              info = info2;
            }
          }
        }
        addNewWindow.RemoveStudent(TeacherInfoList, info);
      } else {
        StudentInfo s;
        if (table->selectedItems().size() > 0) {
          changeStudent(table->selectedItems(), s, StudentInfoList);
        } else if (table2->selectedItems().size() > 0) {

          changeCourse(table2->selectedItems(), s, StudentInfoList);
        } else {
          int id = QInputDialog::getInt(this, "學生學號", "請輸入");
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getId().compare(QString::number(id)) == 0) {
              s = info;
            }
          }
        }
        qDebug() << "s ::: " << s.getName();
        addNewWindow.RemoveStudent(StudentInfoList, s);
      }
    });

    connect(addButton, &QPushButton::clicked, this, [=]() {
      if (clickedValue == 2) {
        addNewWindow.AddStudent(TeacherInfoList);
      } else {
        addNewWindow.AddStudent(StudentInfoList);
      }
    });

    connect(table, &QTableWidget::doubleClicked, this, [=]() {
      if (clickedValue == 0) {
        StudentInfo s;
        changeStudent(table->selectedItems(), s, StudentInfoList);
        addNewWindow.ChangeStudent(StudentInfoList, s);
      }
    });
    connect(table2, &QTableWidget::doubleClicked, this, [=]() {
      if (clickedValue == 1) {
        StudentInfo s;
        changeCourse(table2->selectedItems(), s, StudentInfoList);
        addNewWindow.ChangeStudent(StudentInfoList, s);
      }
    });
    connect(table3, &QTableWidget::doubleClicked, this, [=]() {
      if (clickedValue == 2) {
        TeacherInfo s;
        changeTeacher(table3->selectedItems(), s, TeacherInfoList);
        addNewWindow.ChangeStudent(TeacherInfoList, s);
      }
    });
    connect(refButton, &QPushButton::clicked, [=]() { checkClickValue(); });

    connect(changeButton, &QPushButton::clicked, this, [=]() {
      if (clickedValue == 2) {
        TeacherInfo s;
        if (table3->selectedItems().size() > 0) {
          changeTeacher(table3->selectedItems(), s, TeacherInfoList);
        } else {
          int id = QInputDialog::getInt(this, "教師編號", "請輸入");
          foreach (TeacherInfo info, TeacherInfoList) {
            if (info.getId().compare(QString::number(id)) == 0) {
              s = info;
            }
          }
        }
        addNewWindow.ChangeStudent(TeacherInfoList, s);
      } else {
        StudentInfo s;
        if (table->selectedItems().size() > 0) {
          changeStudent(table->selectedItems(), s, StudentInfoList);
        } else if (table2->selectedItems().size() > 0) {
          changeCourse(table2->selectedItems(), s, StudentInfoList);
        } else {
          int id = QInputDialog::getInt(this, "學生學號", "請輸入");
          foreach (StudentInfo info, StudentInfoList) {
            if (info.getId().compare(QString::number(id)) == 0) {
              s = info;
            }
          }
        }
        addNewWindow.ChangeStudent(StudentInfoList, s);
      }
    });
    studentChangeIsOK = true;
  }

  checkClickValue();
}

void CRMWindow::studentFind() {

  if (!studentFindIsOK) {
    changeStudent();
    studentFindIsOK = true;
  }
  showCombox();
  closeView();
  addButton->setHidden(true);
  changeButton->setHidden(true);
  removeButton->setHidden(true);
  refButton->setHidden(true);
  searchEdit->setHidden(false);
  searchButton->setHidden(false);
  showSearchValues->setHidden(false);
  showTable();
}

void CRMWindow::showStudentFindLayout(QVBoxLayout *vbox2) {
  searchEdit = new QLineEdit();
  searchEdit->setPlaceholderText("請輸入搜索內容");
  searchEdit->setFixedHeight(40);
  showSearchValues = new QComboBox();
  showSearchValues->addItems(addNewWindow.studentList);
  showSearchValues->setFixedHeight(40);
  QPushButton *(*addButtonFunc)(QString text) = [](QString text) {
    QPushButton *B = new QPushButton(text);
    B->setFixedHeight(40);
    return B;
  };

  QHBoxLayout *(*addHbox)(QList<QWidget *> l) = [](QList<QWidget *> l) {
    QHBoxLayout *hbox2 = new QHBoxLayout();
    foreach (QWidget *q, l) { hbox2->addWidget(q); }
    return hbox2;
  };

  searchButton = addButtonFunc("搜索");
  addButton = addButtonFunc("新增");
  changeButton = addButtonFunc("修改");
  removeButton = addButtonFunc("刪除");
  refButton = addButtonFunc("刷新");
  vbox2->addLayout(addHbox({searchEdit, showSearchValues, searchButton}));
  vbox2->addLayout(addHbox({addButton, changeButton, removeButton, refButton}));
  table = addTableWidget(addNewWindow.studentList);
  table2 = addTableWidget(addNewWindow.courseList);
  table3 = addTableWidget(addNewWindow.teacherList);
  vbox2->addWidget(table);
  vbox2->addWidget(table2);
  vbox2->addWidget(table3);
  //  addButton->setHidden(true);
  //  changeButton->setHidden(true);
  //  removeButton->setHidden(true);
  //  refButton->setHidden(true);
  //  searchEdit->setHidden(true);
  //  searchButton->setHidden(true);
  //  showSearchValues->setHidden(true);
  //  table->setHidden(true);
  //  table2->setHidden(true);
  //  table3->setHidden(true);
  closeControl();
}
void CRMWindow::init() {
  hbox = new QHBoxLayout();
  vbox = new QVBoxLayout();

  checkValues();
  setWindowTitle("CRMSystem");
  resize(800, 600);
  showLayout();
  setLayout(vbox);
}
void CRMWindow::checkValues() {

  double (*getSum)(QStringList l) = [](QStringList l) {
    double sum = 0;
    foreach (QString n, l) { sum += n.replace(QRegExp("\\s+"), "").toDouble(); }
    return sum;
  };

  QString (*getRandomNum)() = []() {
    return QString::number(QRandomGenerator::global()->bounded(0, 100));
  };

  QString (*getRandomSum)(int min, int max) = [](int min, int max) {
    return QString::number(QRandomGenerator::global()->bounded(min, max));
  };

  //初始化數據
  QString stus[15][16] = {
      {"小明", getRandomSum(15, 30), "123312", "上海虹橋", "666", "男",
       "12計算機系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"小紅", getRandomSum(15, 30), "123313", "上海浦東", "66", "女",
       "12計算機系二班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"小王", getRandomSum(15, 30), "123332", "北京海淀", "780", "男",
       "12模具系一班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"小李", getRandomSum(15, 30), "143311", "廣州番禺", "566", "男",
       "14電商系四班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), "6", getRandomNum(),
       getRandomNum()},
      {"小黑", getRandomSum(15, 30), "153316", "上海虹橋", "666", "男",
       "15計算機系一班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), "80", getRandomNum(),
       getRandomNum()},
      {"唐唐", getRandomSum(15, 30), "123314", "上海虹橋", "667", "男",
       "12計算機系四班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), "10", getRandomNum(),
       getRandomNum()},
      {"張三", getRandomSum(15, 30), "12312", "上海虹橋", "663", "男",
       "13計算機系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), "90", getRandomNum(),
       getRandomNum()},
      {"李四", getRandomSum(15, 30), "13312", "上海虹橋", "626", "男",
       "14計算機系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), "120", getRandomNum(),
       getRandomNum()},
      {"王五", getRandomSum(15, 30), "123276", "上海虹橋", "166", "男",
       "16計算機系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), "130", getRandomNum(),
       getRandomNum()},
      {"仁六", getRandomSum(15, 30), "123319", "上海虹橋", "366", "男",
       "20計算機系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"二狗", getRandomSum(15, 30), "144276", "廣州越秀", "16", "男",
       "20機械系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"小花", getRandomSum(15, 30), "127319", "深圳龍崗", "766", "女",
       "20電商系三班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"老王", getRandomSum(15, 30), "013319", "陝西西安", "566", "男",
       "08計算機系一班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"小燕", getRandomSum(15, 30), "203319", "浙江杭州", "766", "女",
       "20幼教系一班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()},
      {"劉備", getRandomSum(15, 30), "173319", "四川成都", "566", "男",
       "17計算機系一班", getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum(), getRandomNum(), getRandomNum(),
       getRandomNum(), getRandomNum()}};
  QString teacherDatas[15][8] = {
      {"王剛", "男", getRandomSum(18, 70), "計算機系",
       "計算機科學與技術、數據結構、操作系統理論", "12138", "北京通城區",
       getRandomSum(500, 10000)},
      {"王二妞", "女", getRandomSum(18, 70), "歷史系",
       "中國通史、世界通史,史學理論、中源國史學史、西方史學史、考古學通論、中"
       "外關係史、文化人類學、歷史地理學",
       "121145", "北京海淀區", getRandomSum(500, 10000)},
      {"張鐵柱", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "12553", "上海浦東",
       getRandomSum(500, 10000)},
      {"載淳", "男", getRandomSum(18, 70), "皇家系", "攝政、輔佐", "18601",
       "北京故宮紫禁城", getRandomSum(500, 10000)},
      {"張鐵", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "12523", "上海浦東",
       getRandomSum(500, 10000)},
      {"張柱", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "12551", "上海浦東",
       getRandomSum(500, 10000)},
      {"劉田", "男", getRandomSum(18, 70), "電商系",
       "電子商務專業,簡稱電商專業,是融計算機科學、市場營銷學、管理學、經濟學"
       "、法學",
       "10875", "四川成都", getRandomSum(500, 10000)},
      {"張三丰", "男", getRandomSum(18, 70), "化學系",
       "有機化學,無機化學,分析化學,物理化學,環境化學,天然產物化學,化工原"
       "理",
       "13225", "美國聖地亞哥", getRandomSum(500, 10000)},
      {"李敏", "女", getRandomSum(18, 70), "計算機系", "計算機科學與技術",
       "12583", "上海浦東", getRandomSum(500, 10000)},
      {"張鐵柱2", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "125553", "上海浦東",
       getRandomSum(500, 10000)},
      {"張鐵柱3", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "125x3", "上海浦東",
       getRandomSum(500, 10000)},
      {"張鐵柱4", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "125a3", "上海浦東",
       getRandomSum(500, 10000)},
      {"張鐵柱5", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "125163", "上海浦東",
       getRandomSum(500, 10000)},
      {"張鐵柱6", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "125538", "上海浦東",
       getRandomSum(500, 10000)},
      {"張鐵柱7", "男", getRandomSum(18, 70), "物理系",
       "力學、熱學、光學、電磁學、原子物理", "125053", "上海浦東",
       getRandomSum(500, 10000)}};

  for (int i = 0; i < 15; i++) {
    stus[i][4] = QString::number(
        getSum({stus[i][7], stus[i][8], stus[i][9], stus[i][10], stus[i][11],
                stus[i][12], stus[i][13], stus[i][14], stus[i][15]}));
    StudentInfoList.append(
        StudentInfo(stus[i][7], stus[i][8], stus[i][9], stus[i][10],
                    stus[i][11], stus[i][12], stus[i][13], stus[i][14],
                    stus[i][15], stus[i][0], stus[i][1], stus[i][3], stus[i][5],
                    stus[i][2], stus[i][4], stus[i][6]));
    TeacherInfoList.append(TeacherInfo(teacherDatas[i][0], teacherDatas[i][1],
                                       teacherDatas[i][2], teacherDatas[i][3],
                                       teacherDatas[i][4], teacherDatas[i][5],
                                       teacherDatas[i][6], teacherDatas[i][7]));
  }
}

void CRMWindow::closeEvent(QCloseEvent *event) {
  QMessageBox msg;
  msg.setIcon(QMessageBox::Icon::Warning);
  msg.setWindowTitle("警告");
  msg.setText("您是否要退出此程序?");
  msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
  msg.setButtonText(QMessageBox::Yes, "是的,我要退出");
  msg.setButtonText(QMessageBox::No, "不,我拒絕");
  if (msg.exec() == QMessageBox::Yes) {
    event->accept();
  } else {
    event->ignore();
  }
}

void CRMWindow::showCombox() {
  switch (clickedValue) {
  case 2:
    for (int i = 0; i < addNewWindow.teacherList.size(); i++) {
      showSearchValues->setItemText(i, addNewWindow.teacherList[i]);
    }
    break;
  default:
    for (int i = 0; i < addNewWindow.studentList.size(); i++) {
      showSearchValues->setItemText(i, addNewWindow.studentList[i]);
    }
    break;
  }
}

mainwindow.h

這個文件爲登錄窗口,主要用於驗證用戶是否存在以及用戶能否通過驗證登錄進來

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "crmwindow.h"
#include <QCloseEvent>
#include <QDebug>
#include <QEvent>
#include <QFontDialog>
#include <QHBoxLayout>
#include <QKeyEvent>
#include <QLabel>
#include <QLineEdit>
#include <QMainWindow>
#include <QMessageBox>
#include <QPushButton>
#include <QRegExp>
#include <QRegExpValidator>
#include <QVBoxLayout>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
  Q_OBJECT

public:
  QHBoxLayout *hbox;
  QVBoxLayout *vbox;

  QPushButton *login;
  QPushButton *quite;

  QLabel *LoginIcon;
  QLabel *LoginUserName;
  QLabel *LoginUserPwd;

  QLineEdit *userNameEdit;
  QLineEdit *userPwdEdit;

  QString userName, userPwd;

public:
  void showLayout();
  void showLoginMenu();
  void init();
  void checkValues();
  //  void closeEvent(QCloseEvent *event);
  void keyPressEvent(QKeyEvent *event);

public:
  MainWindow(QWidget *parent = nullptr);
  ~MainWindow();

private:
  Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow) {
  ui->setupUi(this);
  showLoginMenu();
}

void MainWindow::keyPressEvent(QKeyEvent *event) {
  qDebug() << event->text();
  if (event->text() == "\r") {
    checkValues();
  }
}

// void MainWindow::closeEvent(QCloseEvent *event) {
//  QMessageBox msg;
//  msg.setIcon(QMessageBox::Icon::Warning);
//  msg.setWindowTitle("警告");
//  msg.setText("您是否要退出此程序?");
//  msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
//  msg.setButtonText(QMessageBox::Yes, "是的,我要退出");
//  msg.setButtonText(QMessageBox::No, "不,我拒絕");
//  if (msg.exec() == QMessageBox::Yes) {
//    event->accept();
//  } else {
//    event->ignore();
//  }
//}

void MainWindow::showLayout() {

  setWindowTitle("學生信息管理系統");
  setFixedSize(800, 260);
  QWidget *widget = new QWidget();
  setCentralWidget(widget);
  vbox = new QVBoxLayout(widget);

  void (*addLable)(QLabel * lable, QString s) = [](QLabel *lable, QString s) {
    lable->setText(s);
    lable->setFont(QFont("華文琥珀", 30));
    lable->setAlignment(Qt::AlignCenter);
  };

  void (*addButton)(QPushButton * lable, QString s) = [](QPushButton *lable,
                                                         QString s) {
    lable->setText(s);
    lable->setFont(QFont("華文琥珀", 30));
  };

  void (*addEdit)(QLineEdit * lable, QString s) = [](QLineEdit *lable,
                                                     QString s) {
    lable->setPlaceholderText(s);
    lable->setFixedHeight(50);
    lable->setValidator(new QRegExpValidator(QRegExp("[a-zA-Z0-9]+")));
  };

  addLable(LoginIcon, "學生信息管理系統登錄頁面");
  addLable(LoginUserName, "用戶名");
  addLable(LoginUserPwd, "密  碼");
  addEdit(userNameEdit, "請輸入學生姓名");
  addEdit(userPwdEdit, "請輸入學生密碼");
  userPwdEdit->setEchoMode(QLineEdit::EchoMode::Password);
  addButton(login, "登錄");
  addButton(quite, "退出");
  vbox->addWidget(LoginIcon);
  hbox->addWidget(LoginUserName);
  hbox->addWidget(userNameEdit, 1);
  vbox->addLayout(hbox);

  hbox = new QHBoxLayout();
  hbox->addWidget(LoginUserPwd);
  hbox->addWidget(userPwdEdit, 1);
  vbox->addLayout(hbox);
  hbox = new QHBoxLayout();
  hbox->addWidget(login);
  hbox->addWidget(quite);
  vbox->addLayout(hbox);
  vbox->setAlignment(Qt::AlignTop);
  widget->setLayout(vbox);
}

void MainWindow::showLoginMenu() {
  init();
  showLayout();

  userNameEdit->setText("root");
  userPwdEdit->setText("123");

  connect(login, &QPushButton::clicked, this, [=]() { checkValues(); });

  connect(quite, &QPushButton::clicked, this, [=]() { close(); });
}

void MainWindow::checkValues() {
  QMessageBox msg;
  msg.setWindowTitle("登錄錯誤!!!!");
  msg.setText("用戶名或者密碼錯誤,請重新輸入!!");
  msg.setIcon(QMessageBox::Icon::Critical);
  msg.setStandardButtons(QMessageBox::Ok | QMessageBox::No);
  userName = userNameEdit->text().replace(QRegExp("\\s+"), "");
  userPwd = userPwdEdit->text().replace(QRegExp("\\s+"), "");
  if (userName.compare("root") == 0 && userPwd.compare("123") == 0) {
    CRMWindow *c = new CRMWindow();
    c->show();
    this->close();
  } else {
    switch (msg.exec()) {
    case QMessageBox::Ok:
      userNameEdit->clear();
      userPwdEdit->clear();
      break;
      ;
      ;
    case QMessageBox::No:
      this->close();
      ;
      ;
    }
  }
}

void MainWindow::init() {
  hbox = new QHBoxLayout();
  login = new QPushButton();
  quite = new QPushButton();

  LoginIcon = new QLabel();
  LoginUserName = new QLabel();
  LoginUserPwd = new QLabel();

  userNameEdit = new QLineEdit();
  userPwdEdit = new QLineEdit();
}

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

studentachievement.h

這些都是保存數據用得頭文件,我就不多說了,自己去翻譯

#ifndef STUDENTACHIEVEMENT_H
#define STUDENTACHIEVEMENT_H

#include "studentinfo.h"

class StudentAchievement : public StudentInfo {
public:
  QString chinese, mathematics, English, Physics, Chemistry, history, Geography,
      Politics, Biology;
  QString getBiology() const;
  void setBiology(const QString &value);
  QString getMathematics() const;
  void setMathematics(const QString &value);
  QString getEnglish() const;
  void setEnglish(const QString &value);
  QString getPhysics() const;
  void setPhysics(const QString &value);
  QString getChemistry() const;
  void setChemistry(const QString &value);
  QString getHistory() const;
  void setHistory(const QString &value);
  QString getGeography() const;
  void setGeography(const QString &value);
  QString getPolitics() const;
  void setPolitics(const QString &value);
  QString getChinese() const;
  void setChinese(const QString &value);
  QString toString();

public:
  StudentAchievement();
  StudentAchievement(const QString &chinese, const QString &mathematics,
                     const QString &English, const QString &Physics,
                     const QString &Chemistry, const QString &history,
                     const QString &Geography, const QString &Politics,
                     const QString &Biology, const QString &name,
                     const QString &age, const QString &address,
                     const QString &sex, const QString &id, const QString &sum,
                     const QString &studentclass);
};

#endif // STUDENTACHIEVEMENT_H

studentachievement.cpp

#include "studentachievement.h"

QString StudentAchievement::getBiology() const { return Biology; }

void StudentAchievement::setBiology(const QString &value) { Biology = value; }

QString StudentAchievement::getMathematics() const { return mathematics; }

void StudentAchievement::setMathematics(const QString &value) {
  mathematics = value;
}

QString StudentAchievement::getEnglish() const { return English; }

void StudentAchievement::setEnglish(const QString &value) { English = value; }

QString StudentAchievement::getPhysics() const { return Physics; }

void StudentAchievement::setPhysics(const QString &value) { Physics = value; }

QString StudentAchievement::getChemistry() const { return Chemistry; }

void StudentAchievement::setChemistry(const QString &value) {
  Chemistry = value;
}

QString StudentAchievement::getHistory() const { return history; }

void StudentAchievement::setHistory(const QString &value) { history = value; }

QString StudentAchievement::getGeography() const { return Geography; }

void StudentAchievement::setGeography(const QString &value) {
  Geography = value;
}

QString StudentAchievement::getPolitics() const { return Politics; }

void StudentAchievement::setPolitics(const QString &value) { Politics = value; }

QString StudentAchievement::getChinese() const { return chinese; }

void StudentAchievement::setChinese(const QString &value) { chinese = value; }

StudentAchievement::StudentAchievement(
    const QString &chinese, const QString &mathematics, const QString &English,
    const QString &Physics, const QString &Chemistry, const QString &history,
    const QString &Geography, const QString &Politics, const QString &Biology,
    const QString &name, const QString &age, const QString &address,
    const QString &sex, const QString &id, const QString &sum,
    const QString &studentclass) {

  this->chinese = chinese;
  this->mathematics = mathematics;
  this->English = English;
  this->Physics = Physics;
  this->Chemistry = Chemistry;
  this->history = history;
  this->Geography = Geography;
  this->Politics = Politics;
  this->Biology = Biology;
  this->name = name;
  this->id = id;
  this->address = address;
  this->sex = sex;
  this->sum = sum;
  this->age = age;
  this->studentclass = studentclass;
}

QString StudentAchievement::toString() {
  return StudentInfo::toString() + "[ chinese : " + getChinese() +
         " ][ mathematics : " + getMathematics() +
         " ][ English : " + getEnglish() + " ][ Physics : " + getPhysics() +
         " ][ Chemistry : " + getChemistry() + " ][ history : " + getHistory() +
         " ][ Geography : " + getGeography() +
         " ][ Politics : " + getPolitics() + " ][ Biology : " + getBiology() +
         " ]";
}

StudentAchievement::StudentAchievement() {}

studentinfo.h

#ifndef STUDENTINFO_H
#define STUDENTINFO_H

#include <QString>

class StudentInfo {

public:
  QString name, age, address, sex, id, sum, studentclass, chinese, mathematics,
      English, Physics, Chemistry, history, Geography, Politics, Biology;

public:
  void setName(QString name);
  void setAge(QString age);
  void setAddress(QString address);
  void setSex(QString sex);
  void setId(QString id);
  void setSum(QString sum);
  void setStudentClass(QString studentclass);
  QString getName();
  QString getAge();
  QString getAddress();
  QString getSex();
  QString getId();
  QString getSum();
  QString getStudentClass();

  StudentInfo(QString name, QString age, QString address, QString sex,
              QString id, QString sum, QString studentclass);

  StudentInfo(const QString &chinese, const QString &mathematics,
              const QString &English, const QString &Physics,
              const QString &Chemistry, const QString &history,
              const QString &Geography, const QString &Politics,
              const QString &Biology, const QString &name, const QString &age,
              const QString &address, const QString &sex, const QString &id,
              const QString &sum, const QString &studentclass);

  QString toString();

public:
  StudentInfo();
  QString getChinese() const;
  void setChinese(const QString &value);
  QString getMathematics() const;
  void setMathematics(const QString &value);
  QString getBiology() const;
  void setBiology(const QString &value);
  QString getPolitics() const;
  void setPolitics(const QString &value);
  QString getGeography() const;
  void setGeography(const QString &value);
  QString getHistory() const;
  void setHistory(const QString &value);
  QString getChemistry() const;
  void setChemistry(const QString &value);
  QString getPhysics() const;
  void setPhysics(const QString &value);
  QString getEnglish() const;
  void setEnglish(const QString &value);
};

#endif // STUDENTINFO_H

studentinfo.cpp

#include "studentinfo.h"

QString StudentInfo::getChinese() const { return chinese; }

void StudentInfo::setChinese(const QString &value) { chinese = value; }

QString StudentInfo::getMathematics() const { return mathematics; }

void StudentInfo::setMathematics(const QString &value) { mathematics = value; }

QString StudentInfo::getBiology() const { return Biology; }

void StudentInfo::setBiology(const QString &value) { Biology = value; }

QString StudentInfo::getPolitics() const { return Politics; }

void StudentInfo::setPolitics(const QString &value) { Politics = value; }

QString StudentInfo::getGeography() const { return Geography; }

void StudentInfo::setGeography(const QString &value) { Geography = value; }

QString StudentInfo::getHistory() const { return history; }

void StudentInfo::setHistory(const QString &value) { history = value; }

QString StudentInfo::getChemistry() const { return Chemistry; }

void StudentInfo::setChemistry(const QString &value) { Chemistry = value; }

QString StudentInfo::getPhysics() const { return Physics; }

void StudentInfo::setPhysics(const QString &value) { Physics = value; }

QString StudentInfo::getEnglish() const { return English; }

void StudentInfo::setEnglish(const QString &value) { English = value; }

StudentInfo::StudentInfo(const QString &chinese, const QString &mathematics,
                         const QString &English, const QString &Physics,
                         const QString &Chemistry, const QString &history,
                         const QString &Geography, const QString &Politics,
                         const QString &Biology, const QString &name,
                         const QString &age, const QString &address,
                         const QString &sex, const QString &id,
                         const QString &sum, const QString &studentclass) {
  this->chinese = chinese;
  this->mathematics = mathematics;
  this->English = English;
  this->Physics = Physics;
  this->Chemistry = Chemistry;
  this->history = history;
  this->Geography = Geography;
  this->Politics = Politics;
  this->Biology = Biology;
  this->name = name;
  this->id = id;
  this->address = address;
  this->sex = sex;
  this->sum = sum;
  this->age = age;
  this->studentclass = studentclass;
}

void StudentInfo::setName(QString name) { this->name = name; }
void StudentInfo::setAge(QString age) { this->age = age; }
void StudentInfo::setAddress(QString address) { this->address = address; }
void StudentInfo::setSex(QString sex) { this->sex = sex; }
void StudentInfo::setId(QString id) { this->id = id; }
void StudentInfo::setSum(QString sum) { this->sum = sum; }
void StudentInfo::setStudentClass(QString studentclass) {
  this->studentclass = studentclass;
}

QString StudentInfo::getName() { return name; }
QString StudentInfo::getAge() { return age; }
QString StudentInfo::getAddress() { return address; }
QString StudentInfo::getSex() { return sex; }
QString StudentInfo::getId() { return id; }
QString StudentInfo::getSum() { return sum; }
QString StudentInfo::getStudentClass() { return studentclass; }

StudentInfo::StudentInfo(QString name, QString age, QString address,
                         QString sex, QString id, QString sum,
                         QString studentclass) {

  this->name = name;
  this->id = id;
  this->address = address;
  this->sex = sex;
  this->sum = sum;
  this->age = age;
  this->studentclass = studentclass;
}

QString StudentInfo::toString() {
  return "[ name : " + getName() + " ][ id : " + getId() +
         " ][ address : " + getAddress() + " ][ sex : " + getSex() +
         " ][ sum : " + getSum() + " ][ age : " + getAge() +
         " ][ studentclass : " + getStudentClass() + " ]";
}

StudentInfo::StudentInfo() {}

teacherinfo.h

#ifndef TEACHERINFO_H
#define TEACHERINFO_H
#include <QString>

class TeacherInfo {
  /**

{"教師名字",     "教師性別",     "教師年齡",
                           "教師所管班級", "教師所教科目", "教師執照號碼",
                           "教師住址","教師工資"};

*/

public:
  QString name, sex, age, manageClass, manageSubject, id, address, money;

public:
  QString getName() const;
  void setName(const QString &value);
  QString getSex() const;
  void setSex(const QString &value);
  QString getAge() const;
  void setAge(const QString &value);
  QString getManageClass() const;
  void setManageClass(const QString &value);
  QString getManageSubject() const;
  void setManageSubject(const QString &value);
  QString getId() const;
  void setId(const QString &value);
  QString getAddress() const;
  void setAddress(const QString &value);
  QString getMoney() const;
  void setMoney(const QString &value);
  QString toString();

public:
  TeacherInfo();
  TeacherInfo(const QString &name, const QString &sex, const QString &age,
              const QString &manageClass, const QString &manageSubject,
              const QString &id, const QString &address);
  TeacherInfo(const QString &name, const QString &sex, const QString &age,
              const QString &manageClass, const QString &manageSubject,
              const QString &id, const QString &address, const QString &money);
};

#endif // TEACHERINFO_H

teacherinfo.cpp

#include "teacherinfo.h"

QString TeacherInfo::toString() {

  return "[ name : " + getName() + " ][ age : " + getAge() +
         " ][ sex : " + getSex() + " ][ manageClass : " + getManageClass() +
         " ][ manageSubject : " + getManageSubject() + " ][ id : " + getId() +
         " ][ address : " + getAddress() + " ][ money : " + getMoney() + " ]";
}

TeacherInfo::TeacherInfo(const QString &name, const QString &sex,
                         const QString &age, const QString &manageClass,
                         const QString &manageSubject, const QString &id,
                         const QString &address, const QString &money) {
  this->name = name;
  this->sex = sex;
  this->age = age;
  this->manageClass = manageClass;
  this->manageSubject = manageSubject;
  this->id = id;
  this->address = address;
  this->money = money;
}

TeacherInfo::TeacherInfo(const QString &name, const QString &sex,
                         const QString &age, const QString &manageClass,
                         const QString &manageSubject, const QString &id,
                         const QString &address) {
  this->name = name;
  this->sex = sex;
  this->age = age;
  this->manageClass = manageClass;
  this->manageSubject = manageSubject;
  this->id = id;
  this->address = address;
}

QString TeacherInfo::getMoney() const { return money; }

void TeacherInfo::setMoney(const QString &value) { money = value; }

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

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

QString TeacherInfo::getSex() const { return sex; }

void TeacherInfo::setSex(const QString &value) { sex = value; }

QString TeacherInfo::getAge() const { return age; }

void TeacherInfo::setAge(const QString &value) { age = value; }

QString TeacherInfo::getManageClass() const { return manageClass; }

void TeacherInfo::setManageClass(const QString &value) { manageClass = value; }

QString TeacherInfo::getManageSubject() const { return manageSubject; }

void TeacherInfo::setManageSubject(const QString &value) {
  manageSubject = value;
}

QString TeacherInfo::getId() const { return id; }

void TeacherInfo::setId(const QString &value) { id = value; }

QString TeacherInfo::getAddress() const { return address; }

void TeacherInfo::setAddress(const QString &value) { address = value; }

TeacherInfo::TeacherInfo() {}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

程序運行截圖

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
謝謝觀看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章