[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/十一班学生信息管理学系统-300x169.png)](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
*/

展示

总结

已完成

posted @ 2022-12-09 13:09  俺叫西西弗斯  阅读(0)  评论(0)    收藏  举报  来源