[QT][CPP]带界面的学生信息管理系统 原创
headFile
StuAdd.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_StuAdd.h"
class StuAdd : public QWidget
{
Q_OBJECT
public:
StuAdd(QWidget *parent = Q_NULLPTR);
void clearUserInterFace();
void writeToFile(QString cnt);
private:
Ui::StuAddClass ui;
private slots:
void ok_clicked();
void closeThis();
};
StuMainMenu.h
#pragma once
#include <QMainWindow>
#include "ui_StuMainMenu.h"
#include "StuQuery.h"
#include "StuAdd.h"
#include "StuStatistic.h"
#include <QDebug>
class StuMainMenu : public QMainWindow
{
Q_OBJECT
public:
StuMainMenu(QWidget *parent = Q_NULLPTR);
~StuMainMenu();
private:
Ui::StuMainMenu ui;
private slots:
void btn_Menuclicked(QAction* act);
};
StuModification
#pragma once
#pragma once
#include <QDialog>
#include "ui_StuModification.h"
class StuModification : public QDialog
{
Q_OBJECT
public:
StuModification(QWidget *parent = Q_NULLPTR);
~StuModification();
private:
Ui::StuModification ui;
private slots:
void btn_read_clicked();
void btn_write_clicked();
};
StuQuery.h
#pragma once
#include <QDialog>
#include "ui_StuQuery.h"
#include <QFile>
#include <QList>
#include <QString>
#include <QStandardItemModel>
#include <QTextStream>
#include <QMessageBox>
#include <QDebug>
class StuQuery : public QDialog
{
Q_OBJECT
public:
StuQuery(QWidget *parent = Q_NULLPTR);
~StuQuery();
int readFramFile();
void doQuert(int index, QString cnt);
void disPlay(int row, QStringList subs);
private:
Ui::StuQuery ui;
QList<QString> stu_lines;
QStandardItemModel * model;
private slots:
void bnt_qurey_clicked();
};
StuStatistic.h
#pragma once
#include <QDialog>
#include "ui_StuStatistic.h"
#include <QFile>
#include <QList>
#include <QString>
#include <QStandardItemModel>
#include <QTextStream>
#include <QMessageBox>
#include <QDebug>
class StuStatistic : public QDialog
{
Q_OBJECT
int readFramFile();
void showStu();
void disPlay(int row, QStringList subs);
public:
StuStatistic(QWidget *parent = Q_NULLPTR);
~StuStatistic();
private:
Ui::StuStatistic ui;
QList<QString> stu_lines;
QStandardItemModel * model;
private slots:
void btn_s_clicked();
};
sourceFile
StuAdd.cpp
#include <StuAdd.h>
#include <QString>
#include <QDebug>
#include <QMessageBox>
#include "QPushButton"
#include <QList>
#include <QAbstractButton>
#include <QCheckBox>
#include <QFile>
#include <QTextStream>
#include <QIODevice>
StuAdd::StuAdd(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(this->ui.btn_ok, SIGNAL(clicked(bool)), this, SLOT(ok_clicked()));
connect(this->ui.btn_cancel, SIGNAL(clicked(bool)), this, SLOT(closeThis()));
}
void StuAdd::ok_clicked()
{
QString name = this->ui.le_name->text();
QString id = this->ui.le_id->text();
QString year = this->ui.le_year->currentText();
QString sex = this->ui.sexGroup->checkedButton()->text();
QString academy = this->ui.le_academy->currentText();
QList<QAbstractButton *> ins_list = this->ui.insGroup->buttons();
QString ins;
int i = 0;
for (i = 0; i < ins_list.length(); i++)
{
QAbstractButton * che = ins_list.at(i);
if (che->isCheckable())
{
ins += che->text() + " ";
}
}
QMessageBox msgbox;
/*
if (name == "admin" && id == "18105756")
{
msgbox.setText(u8"欢迎你,管理员");
}
*/
//msgbox.setText(u8"请确认信息?");
//msgbox.setInformativeText(u8"用户姓名为:" + name + '\n'+ u8"用户密码为:" + id);
//msgbox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
//msgbox.setDefaultButton(QMessageBox::Save);
//QPushButton * cbtn = msgbox.addButton(u8"确定", QMessageBox::AcceptRole);
//msgbox.addButton(u8"取消", QMessageBox::RejectRole);
//msgbox.setDefaultButton(cbtn);//默认选择确定按钮
QString content =
u8"学生姓名为:" + name + '\n'
+ u8"学生学号为:" + id + '\n'
+ u8"该学生年龄为:" + year + '\n'
+ u8"该学生的性别为:" + sex + '\n'
+ u8"该学生所属院系为:" + academy + '\n';
+u8"该学生的兴趣为:" + ins;
QString cnt =
name + ' '
+ id + ' '
+ year + ' '
+ sex + ' '
+ academy + ' '
+ ins + ' ';
if (name.length() < 1 || id.length() < 8 || ins.length() < 1)
{
QMessageBox::critical(this, u8"错误", u8"信息填写不完整,请重新填写", u8"确定");
}
else
{
int ret = QMessageBox::question(this, u8"请确认以下信息", content, u8"确认", u8"取消");
if (ret == 0)
{
clearUserInterFace();
writeToFile(cnt);
}
}
//int ret = msgbox.exec();
}
void StuAdd::closeThis()
{
this->close();
}
void StuAdd::clearUserInterFace()
{
ui.le_name->clear();
ui.le_id->clear();
ui.rbtn_male->setChecked(true);
ui.le_academy->setCurrentIndex(0);
QList<QAbstractButton *> ins_list = ui.insGroup->buttons();
for (int i = 0; i < ins_list.length(); i++)
{
QAbstractButton *box = ins_list.at(i);
box->setChecked(false);
}
//焦点显示
ui.le_name->setFocus();
}
void StuAdd::writeToFile(QString cnt)
{
QFile file("StuInfo.txt");
if (!file.open(QIODevice::Append | QIODevice::Text))
{
QMessageBox::critical(this, u8"错误", u8"文件打开失败", u8"信息没有保存", u8"确定");
return;
}
QTextStream out(&file);
out << cnt << "\n";
}
StuMainMenu.CPP
#include "StuMainMenu.h"
#include "StuAdd.h"
#include "StuLogin.h"
#include "StuStatistic.h"
#include "StuModification.h"
#include <QFile>
StuMainMenu::StuMainMenu(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.menuBar, SIGNAL(triggered(QAction*)), this, SLOT(btn_Menuclicked(QAction*)));
}
StuMainMenu::~StuMainMenu()
{
}
void StuMainMenu::btn_Menuclicked(QAction* act)
{
if (act->text() == u8"添加学生信息")
{
StuAdd *dls = new StuAdd(0);
dls->show();
}
else if (act->text() == u8"查询学生信息")
{
StuQuery *dlq = new StuQuery(0);
dlq->setWindowFlags(Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
dlq->setModal(true);
dlq->show();
dlq->exec();
}
else if (act->text() == u8"显示学生信息")
{
StuStatistic *dlSic = new StuStatistic(0);
dlSic->setWindowFlags(Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
dlSic->show();
dlSic->exec();
}
else if (act->text() == u8"修改学生信息")
{
StuModification *dlMdic = new StuModification(0);
dlMdic->setWindowFlags(Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
dlMdic->show();
dlMdic->exec();
}
}
StuModification.cpp
#include "StuModification.h"
#include <Qfile>
#include <QFileDialog>
#include <qstring>
#include <QMessageBox>
#include <QTextStream>
#include <QIODevice>
#include <QDebug>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
#pragma execution_character_set("utf-8")
StuModification::StuModification(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
connect(ui.btn_read, SIGNAL(clicked()), this, SLOT(btn_read_clicked()));
connect(ui.btn_write, SIGNAL(clicked()), this, SLOT(btn_write_clicked()));
}
StuModification::~StuModification()
{
}
void StuModification::btn_read_clicked()
{
QFile file("StuInfo.txt");
//QString path = QFileDialog::getOpenFileName(this, "open", "StuInfo", "TXT(*txt)");
//if (path.isEmpty() == false)
{
// QFile file(path);
bool isOK = file.open(QIODevice::ReadOnly);
if (isOK)
{
//适用于UTF-8格式
//QByteArray array = file.readAll();
//QString cnt = QString::fromLocal8Bit((QString)array,array.length());
const char* array = file.readAll();
QString cnt = QString::fromLocal8Bit(array);
ui.textEdit->setPlainText(cnt);
/*
FILE *fp = fopen("StuInfo.txt", "r");
char cnt[10000] = { 0 };
while (1)
{
int count = fread(cnt, sizeof(char), sizeof(cnt), fp);
if (count <= 0)
break;
}
ui.textEdit->setPlainText(cnt);
*/
file.close();
}
}
}
// 1
void StuModification::btn_write_clicked()
{
//QString path = QFileDialog::getSaveFileName(this, "save", "StuInfo", "TXT(*txt)");
//if (path.isEmpty() == false)
//{
//QFile file;
//file.setFileName(path);
QFile file("StuInfo.txt");
bool isOK = file.open(QIODevice::WriteOnly);
if (isOK)
{
//QString str = ui.textEdit->toPlainText();
//UTF-8 格式!
//file.write(str.toUtf8());
QTextStream out(&file); //分行写入文件
out << ui.textEdit->toPlainText();
}
file.close();
// ui.textEdit->toPlainText();
//QStringList list = ui.textEdit->toPlainText().split("\n");
QMessageBox msgbox;
msgbox.setText(u8"已保存成功");
msgbox.exec();
//}
}
StuQuery.cpp
#include "StuQuery.h"
#include <qstring>
StuQuery::StuQuery(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(bnt_qurey_clicked()));
if (readFramFile() == -1)
{
QMessageBox::critical(this, "严重错误", "文件打开失败", "请重试!");
this->close();
}
this->model = new QStandardItemModel(0);
model->setColumnCount(6);
//设置表头
this->model->setHorizontalHeaderItem(0, new QStandardItem(u8"姓名"));
this->model->setHorizontalHeaderItem(1, new QStandardItem(u8"学号"));
this->model->setHorizontalHeaderItem(2, new QStandardItem(u8"性别"));
this->model->setHorizontalHeaderItem(3, new QStandardItem(u8"年龄"));
this->model->setHorizontalHeaderItem(4, new QStandardItem(u8"院系"));
this->model->setHorizontalHeaderItem(5, new QStandardItem(u8"兴趣"));
ui.tableView->setModel(model);
}
StuQuery::~StuQuery()
{
}
int StuQuery::readFramFile()
{
QFile file("StuInfo.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return -1;
}
QTextStream in(&file);
while (!in.atEnd())
{
QString line = in.readLine();
stu_lines.append(line);
}
file.close();
return 0;
}
void StuQuery::bnt_qurey_clicked()
{
int index = ui.cbb_mathod->currentIndex();
QString cnt = ui.le_cnt->text();
doQuert(index, cnt);
}
void StuQuery::doQuert(int index, QString cnt)
{
int row = 0;
for (int i = 0; i < stu_lines.length(); i++)
{
QString line = stu_lines.at(i);
line = line.trimmed();//去掉开头与结尾的空白
QStringList subs = line.split(" ");//分割读取
//模糊查询
switch (index)
{
case 1:
if (subs.at(0).contains(cnt, Qt::CaseSensitive))//CaseSensitive 不区分大小写
{
disPlay(row++, subs);
}
else if (cnt == subs.at(0))
{
disPlay(row++, subs);
}
break;
case 2:
if (subs.at(1).contains(cnt, Qt::CaseSensitive))
{
disPlay(row++, subs);
}
else if (cnt == subs.at(1))
{
disPlay(row++, subs);
}
break;
case 3:
if (subs.at(4).contains(cnt, Qt::CaseSensitive))
{
disPlay(row++, subs);
}
else if (cnt == subs.at(4))
{
disPlay(row++, subs);
}
break;
default:
break;
}
}
}
void StuQuery::disPlay(int row, QStringList subs)
{
/*
for (int i = 0; i < 5; i++)
{
this->model->setItem(row, i, new QStandardItem(subs.at(i)));
}
QString ins;
for (int i = 5; i < subs.length(); i++)
{
ins += subs.at(i) + ",";
}
this->model->setItem(row, 5, new QStandardItem(ins));
*/
for (int i = 0; i < subs.length(); i++)
{
this->model->setItem(row, i, new QStandardItem(subs.at(i)));
}
}
[](https://zhgzi.com/wp-content/uploads/2019/06/十一班学生信息管理学系统.png)
StuStatisic.cpp
#include "StuStatistic.h"
#include <qstring>
#include <QFileDialog>
StuStatistic::StuStatistic(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
connect(ui.btn_s, SIGNAL(clicked()), this, SLOT(btn_s_clicked()));
if (readFramFile() == -1)
{
QMessageBox::critical(this, "严重错误", "文件打开失败", "请重试!");
this->close();
}
this->model = new QStandardItemModel(0);
model->setColumnCount(6);
//设置表头
this->model->setHorizontalHeaderItem(0, new QStandardItem(u8"姓名"));
this->model->setHorizontalHeaderItem(1, new QStandardItem(u8"学号"));
this->model->setHorizontalHeaderItem(2, new QStandardItem(u8"年龄"));
this->model->setHorizontalHeaderItem(3, new QStandardItem(u8"性别"));
this->model->setHorizontalHeaderItem(4, new QStandardItem(u8"院系"));
this->model->setHorizontalHeaderItem(5, new QStandardItem(u8"兴趣"));
ui.tableView->setModel(model);
}
StuStatistic::~StuStatistic()
{
}
int StuStatistic::readFramFile()
{
QFile file("StuInfo.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return -1;
}
QTextStream in(&file);
while (!in.atEnd())
{
QString line = in.readLine();
stu_lines.append(line);
}
file.close();
return 0;
}
void StuStatistic::showStu()
{
int row = 0;
for (int i = 0; i < stu_lines.length(); i++)
{
QString line = stu_lines.at(i);
line = line.trimmed();//去掉开头与结尾的空白
QStringList subs = line.split(" ");//分割读取
disPlay(row++, subs);
}
}
void StuStatistic::disPlay(int row, QStringList subs)
{
for (int i = 0; i < subs.length(); i++)
{
this->model->setItem(row, i, new QStandardItem(subs.at(i)));
}
}
void StuStatistic::btn_s_clicked()
{
showStu();
}
Main.cpp
#include <cstdio>
#include <iostream>
#include <string>
#include "StuInfo.h"
#include "StuAdd.h"
#include <QtWidgets/QApplication>
#include "QDebug"
#include <StuMainMenu.h>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//StuAdd w;
//w.show();
StuMainMenu Menu;
Menu.show();
return a.exec();
}
/*
C语言课程设计题目编号(24)
2018级软件工程班级学生信息管理系统
1、学生信息输入 1
2、学生信息显示 1
3、学生信息追加 1
4、学生信息查询 1
按学号查询 1
按姓名查询 1
5、学生信息修改 1
6、学生信息统计 1
7、学生信息删除 1
8、学生信息保存 1
9、学生信息读取 1
10、退出程序 1
*/
展示
总结
已完成


浙公网安备 33010602011771号