学生信息管理系统
这是我的一个实训小项目,包含学生系统的基本操作,比如增删改查,用图表显示学生信息情况。所有的控件都是用代码写的,没有用qt拖拽功能。
主界面
上图给大家瞅瞅
上图就是一些主要功能概括。本系统是用多个子窗口实现的,点击就会弹出新的界面。
现在展示主界面代码
// An highlighted block
this->setWindowTitle("学生信息管理界面");
this->resize(1200,750);
// QVBoxLayout1->addStretch();
QVBoxLayout1->addLayout(QHBoxLayout1);
QVBoxLayout1->addLayout(QHBoxLayout2);
// QVBoxLayout1->addStretch();
// QHBoxLayout1->addStretch();
QHBoxLayout1->addWidget(QPushButtonkkk);
QHBoxLayout1->addWidget(QPushButton2);
QHBoxLayout1->addWidget(QPushButton3);
// QHBoxLayout1->addStretch();
// QHBoxLayout2->addStretch();
QHBoxLayout2->addWidget(QPushButton4);
QHBoxLayout2->addWidget(QPushButton5);
QHBoxLayout2->addWidget(QPushButton6);
// QHBoxLayout2->addStretch();
this->setLayout(QVBoxLayout1);
QPalette patlette;
patlette.setColor(QPalette::ButtonText, Qt::white);
QPalette patlettes;
patlettes.setColor(QPalette::ButtonText, Qt::black);
QFont font;
QPushButtonkkk->setFont(QFont(tr("楷体"),25));
QPushButtonkkk->setIconSize(QSize(300,250));
QPushButtonkkk->setIcon(QIcon(":/back/images/ycu.png"));
// QPushButtonkkk->setFlat(true);
QPushButtonkkk->setText("学生管理系统");
QPushButtonkkk->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QPushButtonkkk->setStyleSheet("background-color:cornflowerblue;border-radius:10px;padding:2px 4px;");
QPushButtonkkk->setPalette(patlettes);
QPushButton2->setFont(QFont(tr("宋体"),25));
QPushButton2->setIconSize(QSize(300,250));
QPushButton2->setIcon(QIcon(":/back/images/search.png"));
QPushButton2->setText("信息查找修改");
QPushButton2->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QPushButton2->setStyleSheet("background-color:blue;");
QPushButton2->setStyleSheet("background-color:darkcyan;border-radius:10px;padding:2px 4px;");
QPushButton2->setPalette(patlette);
QPushButton3->setFont(QFont(tr("宋体"),25));
QPushButton3->setIconSize(QSize(300,250));
QPushButton3->setIcon(QIcon(":/back/images/add.png"));
QPushButton3->setText("信息添加");
QPushButton3->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QPushButton3->setStyleSheet("background-color:blue;");
QPushButton3->setStyleSheet("background-color:indianred;border-radius:10px;padding:2px 4px;");
QPushButton3->setPalette(patlette);
QPushButton4->setFont(QFont(tr("圆体"),25));
QPushButton4->setIconSize(QSize(300,250));
QPushButton4->setIcon(QIcon(":/back/images/search.png"));
QPushButton4->setText("信息显示");
QPushButton4->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QPushButton4->setStyleSheet("background-color:blue;");
QPushButton4->setStyleSheet("background-color:forestgreen;border-radius:10px;padding:2px 4px;");
QPushButton4->setPalette(patlette);
QPushButton5->setFont(QFont(tr("圆体"),25));
QPushButton5->setIconSize(QSize(300,250));
QPushButton5->setIcon(QIcon(":/back/images/change.png"));
QPushButton5->setText("图表显示");
QPushButton5->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QPushButton5->setStyleSheet("background-color:blue;");
QPushButton5->setStyleSheet("background-color:mediumorchid;border-radius:10px;padding:2px 4px;");
QPushButton5->setPalette(patlette);
QPushButton6->setFont(QFont(tr("圆体"),25));
QPushButton6->setIconSize(QSize(300,250));
QPushButton6->setIcon(QIcon(":/back/images/settings.png"));
QPushButton6->setText("系统设置");
QPushButton6->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QPushButton6->setStyleSheet("background-color:blue;");
QPushButton6->setStyleSheet("background-color:midnightblue;border-radius:10px;padding:2px 4px;");
QPushButton6->setPalette(patlette);
QImage _image;
_image.load(":/back/images/background.png");
setAutoFillBackground(true); // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
setPalette(pal);
//信号
connect(QPushButton2,&QPushButton::pressed,this,&Widgetko::press22);
connect(QPushButton3,&QPushButton::pressed,this,&Widgetko::press33);
connect(QPushButton4,&QPushButton::pressed,this,&Widgetko::press44);
connect(QPushButton5,&QPushButton::pressed,this,&Widgetko::press55);
connect(QPushButton6,&QPushButton::pressed,this,&Widgetko::press66);
}
void press22(){
Widget3 *widget2= new Widget3();
widget2->show();
}
void press33(){
Widgetpo *widget2= new Widgetpo();
widget2->show();
}
void press44(){
qDebug("显示信息!");
showinfo *fffkkk= new showinfo();
fffkkk->show();
}
void press55(){
mapwidget *fffkkk= new mapwidget();
fffkkk->show();
}
void press66(){
Widgetshe *shezhi=new Widgetshe();
shezhi->show();
}
主界面代码简单,而且易懂。就不作过多的介绍。
功能界面
本系统用的是自己手写的链表文件,使操作更加方便。可以直接创建一个链表存储学生的信息,包括一些增加删除链表的方法。让实现更加的方便。
联系人添加界面
// An highlighted block
private:
QPalette palette1;
QIcon icon2;
//垂直布局
QVBoxLayout *vBoxLayout2=new QVBoxLayout();
//水平布局
QHBoxLayout *hBoxLayout=new QHBoxLayout();
//网格布局
QGridLayout *qgridlayout2=new QGridLayout();
//编辑框
QLineEdit *lineEditid=new QLineEdit();
QLineEdit *lineEditphone=new QLineEdit();
QLineEdit *lineEditname=new QLineEdit();
QLineEdit *lineEditadress=new QLineEdit();
QLineEdit *lineEditsex=new QLineEdit();
QLineEdit *lineEditquality=new QLineEdit();
QLineEdit *lineEditclass=new QLineEdit();
//按钮
QPushButton *pushButtonadd=new QPushButton("确认添加");
//标签
QLabel *qlabelid=new QLabel("编号");
QLabel *qlabelphone=new QLabel("电话");
QLabel *qlabelname=new QLabel("姓名");
QLabel *qlabeladdress=new QLabel("地址");
QLabel *qlabelsex=new QLabel("性别");
QLabel *qlabelquality=new QLabel("综合素质");
QLabel *qlabelclass=new QLabel("班级");
public:
Widgetpo(){
this->setWindowTitle("添加页面");
//this->resize(400,600);
this->setGeometry(70,300,400,600);
qgridlayout2->setRowStretch(7,2);
//字体
QFont ft;
ft.setPointSize(14);
// 添加布局
qgridlayout2->addWidget(lineEditid,0,1);
qgridlayout2->addWidget(qlabelid,0,0);
qlabelid->setFont(ft);
qlabelid->setAlignment(Qt::AlignCenter);
qgridlayout2->addWidget(lineEditname,1,1);
qgridlayout2->addWidget(qlabelname,1,0);
qlabelname->setFont(ft);
qlabelname->setAlignment(Qt::AlignCenter);
qgridlayout2->addWidget(lineEditsex,2,1);
qgridlayout2->addWidget(qlabelsex,2,0);
qlabelsex->setFont(ft);
qlabelsex->setAlignment(Qt::AlignCenter);
qgridlayout2->addWidget(lineEditclass,3,1);
qgridlayout2->addWidget(qlabelclass,3,0);
qlabelclass->setFont(ft);
qlabelclass->setAlignment(Qt::AlignCenter);
qgridlayout2->addWidget(lineEditphone,4,1);
qgridlayout2->addWidget(qlabelphone,4,0);
qlabelphone->setFont(ft);
qlabelphone->setAlignment(Qt::AlignCenter);
qgridlayout2->addWidget(lineEditquality,5,1);
qgridlayout2->addWidget(qlabelquality,5,0);
qlabelquality->setFont(ft);
qlabelquality->setAlignment(Qt::AlignCenter);
qgridlayout2->addWidget(lineEditadress,6,1);
qgridlayout2->addWidget(qlabeladdress,6,0);
qlabeladdress->setFont(ft);
qlabeladdress->setAlignment(Qt::AlignCenter);
//修改布局垂直间距
qgridlayout2->setVerticalSpacing(30);
//添加布局
icon2.addFile(tr(":/back/images/add1.png"));
// this->pushButtonadd->setFlat(true);
this->pushButtonadd->setIcon(icon2);
this->pushButtonadd->setIconSize(QSize(40,40));
pushButtonadd->setFont(ft);
vBoxLayout2->addLayout(qgridlayout2);
vBoxLayout2->addLayout(hBoxLayout);
hBoxLayout->addStretch();
hBoxLayout->addWidget(pushButtonadd);
hBoxLayout->addStretch();
this->setLayout(vBoxLayout2);
QImage _image;
_image.load(":/back/images/red.jpg");
setAutoFillBackground(true); // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));
setPalette(pal);
//发送信号
connect(pushButtonadd,&QPushButton::pressed,this,&Widgetpo::addInfor);
}
// void pepel(){
// peopleList->add(People((lineEditid->text()).toStdString(),(lineEditname->text()).toStdString(),(lineEditphone->text()).toStdString(),(lineEditsex->text()).toStdString(),(lineEditadress->text()).toStdString()));
// }
//响应事件
void addInfor(){
peopleList->add(People((lineEditid->text()).toStdString(),(lineEditname->text()).toStdString(),(lineEditsex->text()).toStdString(),(lineEditclass->text()).toStdString(),(lineEditphone->text()).toStdString(),(lineEditquality->text()).toStdString(),(lineEditadress->text()).toStdString()));
this->update();
QMessageBox::information(NULL, "Title", "添加成功!");
}
主要代码就是直接调用自己链表中的添加函数,完成对数据的添加。
学生信息查看修改页面
此页面可以按照学号特定的查看某个学生的信息,并且可以直接在输入框中修改。
private:
QIcon icon3,icon4;
//垂直布局
QVBoxLayout *vBoxLayout2=new QVBoxLayout();
QVBoxLayout *vBoxLayout3=new QVBoxLayout();
//水平布局
QHBoxLayout *hBoxLayout1=new QHBoxLayout();
QHBoxLayout *hBoxLayout2=new QHBoxLayout();
//网格布局
QGridLayout *qgridlayout2=new QGridLayout();
//输入框
QLineEdit *qlineeditid=new QLineEdit();
//显示
QLineEdit *lineEditid=new QLineEdit();
QLineEdit *lineEditphone=new QLineEdit();
QLineEdit *lineEditname=new QLineEdit();
QLineEdit *lineEditadress=new QLineEdit();
QLineEdit *lineEditsex=new QLineEdit();
QLineEdit *lineEditclass=new QLineEdit();
QLineEdit *lineEditquality=new QLineEdit();
//标签
QLabel *qlabelid=new QLabel("编号");
QLabel *qlabelphone=new QLabel("电话");
QLabel *qlabelname=new QLabel("姓名");
QLabel *qlabeladdress=new QLabel("地址");
QLabel *qlabelsex=new QLabel("性别");
QLabel *qlabelclass=new QLabel("班级");
QLabel *qlabelquality=new QLabel("综合素质");
QLabel *qlabelshu=new QLabel("输入查询ID");
//按钮
QPushButton *pushButtonadd=new QPushButton("查找");
QPushButton *pushButtonfix=new QPushButton("修改");
public:
Widget3(){
this->setWindowTitle("查找修改页面");
this->setGeometry(70,300,400,600);
//this->resize(400,600);
qgridlayout2->setRowStretch(8,2);
//字体
QFont ft;
ft.setPointSize(14);
// 添加布局
hBoxLayout1->addWidget(qlabelshu);
hBoxLayout1->addWidget(qlineeditid);
qlabelshu->setContentsMargins(0, 0, 0, 0);
lineEditid->setContentsMargins(0, 0, 0, 0);
qlabelshu->setFont(ft);
hBoxLayout1->addWidget(pushButtonadd);
//名字
qgridlayout2->addWidget(lineEditname,2,1);
qgridlayout2->addWidget(qlabelname,2,0);
qlabelname->setFont(ft);
qlabelname->setAlignment(Qt::AlignCenter);
//性别
qgridlayout2->addWidget(lineEditsex,3,1);
qgridlayout2->addWidget(qlabelsex,3,0);
qlabelsex->setFont(ft);
qlabelsex->setAlignment(Qt::AlignCenter);
//学号
qgridlayout2->addWidget(lineEditid,4,1);
qgridlayout2->addWidget(qlabelid,4,0);
qlabelid->setFont(ft);
qlabelid->setAlignment(Qt::AlignCenter);
//班级
qgridlayout2->addWidget(lineEditclass,5,1);
qgridlayout2->addWidget(qlabelclass,5,0);
qlabelclass->setFont(ft);
qlabelclass->setAlignment(Qt::AlignCenter);
//综合素质
qgridlayout2->addWidget(lineEditquality,6,1);
qgridlayout2->addWidget(qlabelquality,6,0);
qlabelquality->setFont(ft);
qlabelquality->setAlignment(Qt::AlignCenter);
//地址
qgridlayout2->addWidget(lineEditadress,7,1);
qgridlayout2->addWidget(qlabeladdress,7,0);
qlabeladdress->setFont(ft);
qlabeladdress->setAlignment(Qt::AlignCenter);
//电话
qgridlayout2->addWidget(lineEditphone,8,1);
qgridlayout2->addWidget(qlabelphone,8,0);
qlabelphone->setFont(ft);
qlabelphone->setAlignment(Qt::AlignCenter);
//图片按钮
icon3.addFile(tr(":/back/images/serch.png"));
this->pushButtonadd->setFlat(true);
this->pushButtonadd->setIcon(icon3);
this->pushButtonadd->setIconSize(QSize(40,40));
pushButtonadd->setFont(ft);
icon4.addFile(tr(":/back/images/sx.png"));
// this->pushButtonfix->setFlat(true);
this->pushButtonfix->setIcon(icon4);
this->pushButtonfix->setIconSize(QSize(40,40));
pushButtonfix->setFont(ft);
//添加布局
hBoxLayout2->addStretch();
hBoxLayout2->addWidget(pushButtonfix);
hBoxLayout2->addStretch();
vBoxLayout2->addStretch();
vBoxLayout2->addLayout(qgridlayout2);
vBoxLayout2->addStretch();
vBoxLayout2->addLayout(hBoxLayout2);
vBoxLayout2->addStretch();
vBoxLayout3->addLayout(hBoxLayout1);
vBoxLayout3->addLayout(vBoxLayout2);
vBoxLayout3->setStretchFactor(hBoxLayout1, 1);
vBoxLayout3->setStretchFactor(vBoxLayout2, 3);
this->setLayout(vBoxLayout3);
//背景
QImage _image;
_image.load(":/back/images/qing.jpg");
setAutoFillBackground(true); // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));
setPalette(pal);
connect(pushButtonadd,&QPushButton::pressed,this,&Widget3::findid);
connect(pushButtonfix,&QPushButton::pressed,this,&Widget3::fixid);
}
void findids(){
peopleList->returnIterator();
while(peopleList->hasNext()){
People people =peopleList->next();
if((qlineeditid->text()).toStdString()==people.id){
lineEditname->setText(QString::fromStdString(people.name));
lineEditadress->setText(QString::fromStdString(people.address));
lineEditid->setText(QString::fromStdString(people.id));
lineEditsex->setText(QString::fromStdString(people.sex));
lineEditphone->setText(QString::fromStdString(people.phone));
lineEditclass->setText(QString::fromStdString(people.classstu));
lineEditquality->setText(QString::fromStdString(people.quality));
}
}
}
void fixid(){
peopleList->returnIterator();
while(peopleList->hasNext()){
People people =peopleList->next();
if((qlineeditid->text()).toStdString()==people.id){
people.sex = (lineEditsex->text()).toStdString();
people.name = (lineEditname->text()).toStdString();
people.address = (lineEditadress->text()).toStdString();
people.id = (lineEditid->text()).toStdString();
people.phone = (lineEditphone->text()).toStdString();
people.classstu = (lineEditclass->text()).toStdString();
people.quality = (lineEditquality->text()).toStdString();
peopleList->update(peopleList->returnindex(),people);
}
}
}
void findid(){
findids();
}
学生信息列表
本窗口是显示学生信息,方便快速查看的界面。
private:
//图片
QIcon icon1;
//垂直布局
QVBoxLayout *vBoxLayout=new QVBoxLayout();
QVBoxLayout *peopleBoxLayout=new QVBoxLayout();
//新增联系人
QPushButton *pushButtonnew=new QPushButton("刷新");
//调色板
QPalette pa;
//子界面
QLayoutItem *childss;
public:
showinfo(){
//背景
//字体
QFont ft;
ft.setPointSize(14);
// this->resize(400,600);
this->setGeometry(70,300,400,600);
peopleList->returnIterator();
//上色
pa.setColor(QPalette::Background,Qt::white);
pa.setColor(QPalette::WindowText,Qt::black);
while(peopleList->hasNext()){
People people =peopleList->next();
//标签
QLabel *ql;
//显示
peopleBoxLayout->addWidget(ql=new QLabel(QString::fromStdString(people.name+" "+people.sex+" "+people.quality+" "+people.phone)));
ql->setPalette(pa);
ql->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");
this->vBoxLayout->addLayout(peopleBoxLayout);
}
peopleList->returnIterator();
//增加新增按钮
icon1.addFile(tr(":/back/images/sx.png"));
this->pushButtonnew->setFlat(true);
this->pushButtonnew->setIcon(icon1);
this->pushButtonnew->setIconSize(QSize(40,40));
pushButtonnew->setFont(ft);
this->vBoxLayout->addWidget(pushButtonnew);
//增加新增按钮
connect(pushButtonnew,&QPushButton::pressed,this,&showinfo::pressnew);
//添加布局到窗口
this->setLayout(vBoxLayout);
QImage _image;
_image.load(":/back/images/green.jpg");
setAutoFillBackground(true); // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));
setPalette(pal);
}
//布局初始化
void newlayout(){
peopleList->returnIterator();
while(peopleList->hasNext()){
People people =peopleList->next();
//标签
QLabel *ql;
//显示
peopleBoxLayout->addWidget(ql=new QLabel(QString::fromStdString(people.name+" "+people.sex+" "+people.quality+" "+people.phone)));
ql->setPalette(pa);
ql->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");
this->vBoxLayout->addLayout(peopleBoxLayout);
}
}
void pressnew(){
while ((childss = peopleBoxLayout->takeAt(0)) != 0)
{
//setParent为NULL,防止删除之后界面不消失
if(childss->widget())
{
childss->widget()->setParent(NULL);
}
delete childss;
}
newlayout();
}
这里要注意数据的刷新,每一次都要从新在链表中读取学生信息。
最后就是定义实体
class People{
public:
//学号
std::string id;
//名字
std::string name;
//电话
std::string phone;
//性别
std::string sex;
//地址
std::string address;
//综合素质
std::string quality;
//班级
std::string classstu;
//默认构造方法
People(){}
//有参数构造方法
People(std::string id,std::string name,std::string sex,std::string classstu, std::string phone,std::string quality,
std::string address){
this->id=id;
this->name=name;
this->phone=phone;
this->sex=sex;
this->address=address;
this->classstu=classstu;
this->quality=quality;
}
};
LinkedList<People> *peopleList=new LinkedList<People>;
在文件的最开头定义学生的相关信息,并创建学生信息链表。在这里可以添加或者删除一些属性。
以上就是对整个系统的代码。感谢您的阅读。