Qt 实现简易的学生信息管理文档_qt简易学生信息管理系统文件存储-程序员宅基地

技术标签: 文档  C++  对象  qt  学习记录之Qt篇  管理  

头文件:

mianwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTableWidget>
#include <QTreeWidget>
#include <QComboBox>
#include <QLineEdit>
#include <QStringList>
#include <QTableWidgetItem>
#include <QTreeWidgetItem>
#include <QAction>


#include "student.h"
#include "teacher.h"
#include "collage.h"
#include "university.h"
#include "newcollagedialog.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    void DataInit();
    void TreeInit();
    void creatAction();
private:
    Ui::MainWindow *ui;
    University *u;
    QAction *m_add;
    QAction *m_del;
private slots:
    void onItemClicked(QTreeWidgetItem*item, int index);
    void customContextMenuRequested(QPoint pos);
    void OnCollageAdd();
};

#endif // MAINWINDOW_H


Person.h

#ifndef PERSON_H
#define PERSON_H

#include <iostream>
#include <string>

class Person
{
public:
    Person();
    ~Person();
    Person(const Person &other);
    Person& operator= (const Person &other);
    Person(const int Age,const int Height,const std::string Name);
    virtual void ShowInfo();
public:
    void setAge(const int &Age);
    void setHeight(const int &Height);
    void setName(const std::string &Name);
    const int& Age()const;
    const int& Height()const;
    const std::string &Name()const;
private:
    int age;
    int height;
    std::string name;
};

#endif // PERSON_H
Student.h

#ifndef STUDENT_H
#define STUDENT_H
#include "person.h"
#include <iostream>
using namespace std;

class Student:public Person
{
public:
    Student();
    ~Student();

public:
    Student(const string Sid,const int sAge,
            const int sHeight,string sName);

    friend std::ostream &operator <<(ostream &os,const Student &s);
    void ShowInfo()const;
    Student& operator= (const Student &s);
    bool CompareSid(const string &sid);
    string &StudentSid();
    bool setStudentName(const string &name);
private:
    string SID;
};

#endif // STUDENT_H
Teacher.h

#ifndef TEACHER_H
#define TEACHER_H
#include "person.h"

class Teacher:public Person
{
public:
    Teacher();
    ~Teacher();
    void ShowInfo();
    std::string &TeacherID();
    Teacher(const std::string tid,const int age,
            const int height,const std::string name);
private:
    std::string TID;
};

#endif // TEACHER_H
Collage.h

#ifndef COLLAGE_H
#define COLLAGE_H
#include "student.h"
#include "teacher.h"
#include <list>

class Collage:public Teacher,public Student
{
public:
    Collage();
    ~Collage();
    Collage(string Cid, string Cname);
public:
    bool StudentAdd(Student* s);
    void StudentDel(const string &sid);
    Student *StudentInfo(const string &sid)const;
    void ShowStudentList()const;
    bool CompareCid(const string &CID)const;
    string &CollageCid();
    bool TeacherAdd(Teacher* t);
    void StudentRemove(const string &tid);
    Teacher *TeacherInfo(const string &tid);
public:
    const string &getCid()const;
    const string &getCname()const;
    const void ShowInfo()const;
    std::list<Student*>& sList();
private:
    string cid;
    string cname;
    list<Student *> s_list;
    list<Teacher *> t_list;
};

#endif // COLLAGE_H
University.h

#ifndef UNIVERSITY_H
#define UNIVERSITY_H
#include "collage.h"

class University:public Collage
{
public:
    University();
    University(const string &uid,
               const string &uname,
               const string &uaddr);

    static University *CreatUniversity(const string &uid,
                      const string &uname,
                      const string &uaddr)
    {
        if(nullptr == unty)
        {
            unty = new University(uid,uname,uaddr);
        }
        return unty;
    }

    ~University();
public:
    const void ShowInfo()const;
    bool CollageAdd(Collage *c);
    void CollageDel(const string &cid);
    Collage *CollageInfo(const string &id) const;
    const string& uName()const;
    list<Collage*>& cList();
private:
    string m_uid;
    string m_uname;
    string m_uaddr;
    list<Collage *> m_list;
    static University *unty;
};

#endif // UNIVERSITY_H
源文件:

person.cpp

#include "person.h"
#include "student.h"

Person::Person()
{
}

Person::~Person()
{

}

Person::Person(const Person &other)
{
    this->age = other.age;
    this->height = other.height;
    this->name = other.name;
}

Person &Person::operator=(const Person &other)
{
    if(this == &other)
    {
        return *this;
    }
    this->age = other.age;
    this->height = other.height;
    this->name = other.name;

    return *this;
}

Person::Person(const int Age, const int Height, const std::string Name)
{
    this->age = Age;
    this->height = Height;
    this->name = Name;
}

void Person::ShowInfo()
{
   std::cout << this->age << " " << this->height << " " << this->name << std::endl;
}

void Person::setAge(const int &Age)
{
    this->age = Age;
}

void Person::setHeight(const int &Height)
{
    this->height = Height;
}

void Person::setName(const std::string &Name)
{
    this->name = Name;
}

const int& Person::Age() const
{
    return (this->age);
}

const int& Person::Height() const
{
    return (this->height);
}

const string& Person::Name() const
{
    return (this->name);
}
student.cpp
#include "student.h"

Student::Student()
{

}

Student::~Student()
{

}



Student::Student(const string Sid, const int sAge,
const int sHeight, string sName):SID(Sid),Person(sAge,sHeight,sName)
{
    //this->SID = Sid;
}

ostream &operator <<(ostream &os,const Student &s)
{
    os << s.SID << " " << s.Age() << " "
       <<s.Height() << " " <<s.Name()<<endl;
    return os;
}

void Student::ShowInfo()const
{
    cout << this->SID << " " << this->Age()<< " "
         << this->Height() << " " << this->Name() << endl;

}

Student& Student::operator=(const Student &s)
{
    if(this == &s)
    {
        return *this;
    }
    else
    {
        this->SID = s.SID;
        this->setAge(s.Age());
        this->setHeight(s.Height());
        this->setName(s.Name());
    }
    return *this;
}

bool Student::CompareSid(const string &sid)
{
    if(sid == SID)
    {
        return true;
    }
    else
    {
        return false;
    }
}

string &Student::StudentSid()
{
    return this->SID;
}

bool Student::setStudentName(const string &name)
{
    this->setName(name);
    return true;
}
teacher.cpp

#include "teacher.h"

Teacher::Teacher()
{
}

Teacher::~Teacher()
{

}

Teacher::Teacher(const std::string tid, const int age,
const int height, const std::string name):TID(tid),Person(age,height,name)
{
//    this->TID = tid;
}

void Teacher::ShowInfo()
{
    std::cout << this->TID << " " << this->Age() << " "
              << this->Height() << " " << this->Name() << std::endl;
}

std::string &Teacher::TeacherID()
{
    return this->TID;
}
collage.cpp

#include "collage.h"
#include "student.h"

Collage::Collage()
{
//    s_list.clear();
//    t_list.clear();
}

Collage::~Collage()
{

}

Collage::Collage(string Cid, string Cname):cid(Cid),cname(Cname)
{
//    this->cid = Cid;
//    this->cname = Cname;
}

bool Collage::StudentAdd(Student *s)
{
    if(nullptr != s)
    {
        s_list.push_back(s);
        return true;
    }
    else
    {
        return false;
    }
}

void Collage::StudentDel(const string &sid)
{
    list<Student *>::iterator iter;

    for(iter = s_list.begin();iter != s_list.end();++iter)
    {
        if((*iter)->CompareSid(sid))
        {
            s_list.erase(iter);
            break;
        }
    }
}

Student *Collage::StudentInfo(const string &sid) const
{
    list<Student *>::const_iterator iter;

    for(iter = s_list.begin(); iter != s_list.end();++iter)
    {
        Student* vaule = *iter;
        if(vaule->StudentSid() == sid)
        {
           vaule->ShowInfo();
           break;
        }
//        else
//        {
//            cout << "NO,Find!" << endl;
//        }
    }
    return 0;
}

void Collage::ShowStudentList() const
{
    list<Student *>::const_iterator iter;

    for(iter = s_list.begin(); iter != s_list.end();++iter)
    {
         (*iter)->ShowInfo();
    }
}

bool Collage::CompareCid(const string &CID) const
{
    if(this->cid == CID)
    {
        return true;
    }
    else
    {
        return false;
    }
}

string &Collage::CollageCid()
{
    return this->cid;
}

bool Collage::TeacherAdd(Teacher* t)
{
    if(nullptr != t)
    {
        t_list.push_back(t);
        return true;
    }
    else
    {
        return false;
    }
}

void Collage::StudentRemove(const string &tid)
{
    list<Student *>::iterator iter;

    for(iter = s_list.begin();iter != s_list.end();iter++)
    {
        if((*iter)->CompareSid(tid))
        {
            s_list.remove(*iter);
            break;
        }
    }
}

Teacher *Collage::TeacherInfo(const string &tid)
{
    list<Teacher *>::iterator iter;

    for(iter = t_list.begin(); iter != t_list.end();iter++)
    {
        Teacher* vaule = *iter;
        if(vaule->TeacherID() == tid)
        {
           vaule->ShowInfo();
           break;
        }
        else
        {
            cout << "NO,Find!" << endl;
        }
    }
    return 0;
}

const string &Collage::getCid() const
{
    return cid;
}

const string &Collage::getCname() const
{
    return cname;
}

const void Collage::ShowInfo() const
{
    cout << this->cid << " " << this->cname << endl;
}

list<Student *> &Collage::sList()
{
    return s_list;
}
university.cpp

#include "university.h"


University::University(const string &uid,
                       const string &uname,
                       const string &uaddr)
:m_uid(uid),m_uname(uname),m_uaddr(uaddr)
{

}

University::~University()
{

}

const void University::ShowInfo() const
{
    cout << this->m_uid << " "
         << this->m_uaddr << " "
         << this->m_uname << endl;

}

bool University::CollageAdd(Collage *c)
{
    if(nullptr != c)
    {
        m_list.push_back(c);
        return true;
    }
    else
    {
        return false;
    }
}

void University::CollageDel(const string &cid)
{
    list<Collage *>::iterator iter;

    for(iter = m_list.begin();iter != m_list.end();++iter)
    {
        if((*iter)->CompareCid(cid))
        {
            m_list.remove(*iter);
            break;
        }
    }
}

Collage *University::CollageInfo(const string &id)const
{
    list<Collage *>::const_iterator iter;
//    Collage *p = new Collage;
    for(iter = m_list.begin();iter != m_list.end();++iter)
    {
        if((*iter)->CompareCid(id))
        {
//            cout << "haveing"<<endl;
//            cout << p->getCid() << p->getCname() <<endl;
            return *iter;
        }
    }
    return 0;
}

const string &University::uName() const
{
    return m_uname;
}

std::list<Collage *> &University::cList()
{
    return m_list;
}

University*University:: unty = NULL;

mianwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <iostream>
using namespace std;


void MainWindow::DataInit()
{

    Student *s1 = new Student("201601",16,169,"zhangsan");
    Student *s2 = new Student("201602",17,168,"zhangtwo");
    Student *s3 = new Student("201603",15,178,"zhangthr");
    Student *s4 = new Student("201604",18,188,"zhangfou");

    Collage *c0 = new Collage("c0001", "XX学院");
    Collage *c1 = new Collage("c0002", "OO学院");

    c0->StudentAdd(s1);
    c0->StudentAdd(s2);
    c0->StudentAdd(s3);
    c0->StudentAdd(s4);

    c1->StudentAdd(s2);
    c1->StudentAdd(s3);
   QTreeWidgetItem *txt = new QTreeWidgetItem;
   txt->setText(0,"University");
    ui->treeWidget->setHeaderItem(txt);
    u = University::CreatUniversity("u0001",
                                    "电子科大", "moziqiao");
    u->CollageAdd(c0);
    u->CollageAdd(c1);
}

void MainWindow::TreeInit()
{
    ui->treeWidget->clear();
    QString str = QString::fromStdString(u->uName());
    QTreeWidgetItem *uitem = new QTreeWidgetItem;
    uitem->setText(0, str);
    ui->treeWidget->insertTopLevelItem(0, uitem);

    list<Collage*> &c = u->cList();
    list<Collage*>::iterator i;
    for (i = c.begin(); i != c.end(); ++i)
    {
        QTreeWidgetItem *citem = new QTreeWidgetItem;
        citem->setText(0, QString::fromStdString((*i)->getCname()));
        citem->setText(1, QString::fromStdString((*i)->getCid()));
        uitem->addChild(citem);
    }
//    ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    connect( ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
             this, SLOT(onItemClicked(QTreeWidgetItem*,int)) );
}

void MainWindow::creatAction()
{
    m_add = new QAction("添加",this);
    m_del = new QAction("删除",this);
    connect(m_add,SIGNAL(triggered()),
            this,SLOT(OnCollageAdd()));
}

void MainWindow::onItemClicked(QTreeWidgetItem *item, int index)
{
    Q_UNUSED(index);
    if( !item->parent()){
        return ;
    }
    Collage *c = u->CollageInfo(item->text(1) .toStdString());
    list<Student *>& s= c->sList();
    list<Student *>::iterator i;

    int j = 0;
    ui->tableWidget->clear();
    ui->tableWidget->setColumnCount(0);
    ui->tableWidget->setRowCount(0);
    for (i = s.begin(); i != s.end(); ++i)
    {
        ui->tableWidget->insertRow(j);
        QStringList headr;
        headr << "ID" << "姓名" << "年龄" << "身高" ;
        ui->tableWidget->setHorizontalHeaderLabels(headr);

//        ui->tableWidget->verticalHeader()->setHidden(true);//设置垂直标签隐藏
        ui->tableWidget->verticalHeader()->setVisible(false);//设置垂直标签不可见
        QTableWidgetItem *sid = new QTableWidgetItem;
        sid->setText(QString::fromStdString((*i)->StudentSid()));
        QTableWidgetItem *sname = new QTableWidgetItem;
        sname->setText(QString::fromStdString((*i)->Name()));
        QTableWidgetItem *sheight = new QTableWidgetItem;
        sheight->setText(QString::number((*i)->Height()));
        QTableWidgetItem *sage = new QTableWidgetItem;
        sage->setText(QString::number((*i)->Age()));

        if( 0==j )
        {
            ui->tableWidget->insertColumn(0);
        }
        ui->tableWidget->setItem(j, 0, sid);
        if( 0==j )
        {
            ui->tableWidget->insertColumn(1);
        }
        ui->tableWidget->setItem(j, 1, sname);
        if( 0==j )
        {
            ui->tableWidget->insertColumn(2);
        }
        ui->tableWidget->setItem(j, 2, sage);
        if( 0==j )
        {
            ui->tableWidget->insertColumn(3);
        }
        ui->tableWidget->setItem(j, 3, sheight);

        j++;
    }
}
//右键菜单显示
void MainWindow::customContextMenuRequested(QPoint pos)
{
    Q_UNUSED(pos);
    QTreeWidgetItem *item = ui->treeWidget->currentItem();
    QMenu *menu = new QMenu;
    menu->addAction(m_add);
    menu->addAction(m_del);
    if(!item->parent())
    {
        menu->exec(QCursor::pos());
//        menu->exec(ui->treeWidget->mapToGlobal(pos));
    }
}
//添加
void MainWindow::OnCollageAdd()
{
    newCollageDialog *Dlg = new newCollageDialog;
    int ret = Dlg->exec();
    if(ret == QDialog::Accepted)
    {
       QString cname = Dlg->getName();
       QString cid = Dlg->getId();
       Collage *c = new Collage(cid.toStdString(),cname.toStdString());
       u->CollageAdd(c);
       TreeInit();
    }
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->mainToolBar->addAction(ui->actionOpen);
    ui->mainToolBar->addAction(ui->actionNew);
    ui->mainToolBar->addAction(ui->actionSave);
    DataInit();//数据初始化
    TreeInit();//列表初始化
    creatAction();
    connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),
            this,SLOT(customContextMenuRequested(QPoint)));
}

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



main.cpp

#include "mainwindow.h"
#include <QApplication>

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

    return a.exec();
}

界面设计:

用到了Tree Widget,Table Widget


程序设计思路图:


运行效果图:


:功能并不完善,源码下载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/biu__biu_biu/article/details/78141703

智能推荐

Qt表格数据处理_qstandarditemmodel 怎么清除筛选-程序员宅基地

文章浏览阅读766次。QTableView显示表格数据,并进行筛选和排序_qstandarditemmodel 怎么清除筛选

【Unity3D】运动模糊特效_unity 动态模糊-程序员宅基地

文章浏览阅读1.6k次。开启混合(Blend)后,通过Alpha通道控制当前屏幕纹理与历史屏幕纹理进行混合,当有物体运动时,就会将当前位置的物体影像与历史位置的物体影像进行混合,从而实现运动模糊效果。第一个 Pass通过Alpha通道控制当前屏幕纹理与历史屏幕纹理进行混合,通过 ColorMask RGB保证融合不影响Alpha通道值;第二个Pass对当前屏幕的Alpha通道进行采样,通过 ColorMask A保证采样不影响RGB通道的值。_unity 动态模糊

最简单的基于FFmpeg的移动端例子:IOS 推流器_ios ffmpeg 推流-程序员宅基地

文章浏览阅读3.8w次,点赞4次,收藏30次。本文记录IOS平台下基于FFmpeg的推流器。该示例C语言的源代码来自于《最简单的基于FFMPEG的推流器》。相关的概念就不再重复记录了。源代码项目的目录结构如图所示。C代码位于ViewController.m文件中,内容如下所示。_ios ffmpeg 推流

jQuery获取和设置checkbox的checked属性小结_jquery 获取check-程序员宅基地

文章浏览阅读2.7w次,点赞8次,收藏16次。今天写静态页面,需要拿jquery去控制checkbox的check属性,开始用的attr,每次设置完成后,点开f12观察elements,后面每次,无论怎么点击checkbox,它的checked属性都是选中的,于是上网查找,得以解决,下面是是转载的内容在jquery里,有两种操作元素属性的方法,一种是attr(),另一种是prop()。attr()的属性在页面首次加载时就确定。当页面初_jquery 获取check

Qt多国语言的实现与切换(国际化)_qt怎么实现多语言切换-程序员宅基地

文章浏览阅读7.2k次,点赞3次,收藏8次。1、创建语言文件  打开.pro文件,加入以下:TRANSLATIONS+=cn.ts  工具->外部->Qt语言家->更新翻译,将生成翻译文件cn.ts2、编辑翻译文件  启动Linguist(Qt语言家),打开cn.ts,然后进行编辑,主要是将源文对应的译文填写上,最后保存3、部署翻译文件  工具->外部->Qt语言家->部署翻译,将生成_qt怎么实现多语言切换

Django的INSTALLED_APPS中应该写app名,还是AppConfig子类?-程序员宅基地

文章浏览阅读7.3k次,点赞17次,收藏22次。当你使用python manage.py startapp app01的命令创建了一个名为app01的新应用后,通常接下来要做的就是在settings.py里注册它,把它加到INSTAL..._installed_apps

随便推点

用Keil调试STM32F407ZET6时,出现no cortex-m sw device found报错!_keil no cortexm sw-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏7次。keil+jlink环境下,stm32在SW模式下调试时,如果在download程序时报错no cortex-m sw device found,需要排查三个问题:1.确保接线正确;2. 高版本jlink固件可识别出赝品jlink,而MDK5.x版本要求SEGGER固件高于V4.78,排查是否是盗版jlink导致该问题发生。若是,可网购jlink-ob小调试器;3.如果是在程序烧写成功_keil no cortexm sw

大数据之Hadoop进行文件管理_如何扩展hadoop文件系统的功能,使其具有更加强大的文件管理的功能。-程序员宅基地

文章浏览阅读568次。1.hadoop查看目标文件hadoop fs -ls /{目标文件路径}2.hadoop删除目标文件hadoop fs -rm /{目标文件路径}3.上传文件至目标路径hadoop fs -put /{本地文件路径} /{目标文件路径}4.默认hdfs会将文件保存三份,可以通过修改../hadoop/etc/hadoop/hdfs-site.xml中的dfs.repli..._如何扩展hadoop文件系统的功能,使其具有更加强大的文件管理的功能。

VBS 删除非空文件夹_vba 删除不为空的文件夹-程序员宅基地

文章浏览阅读2.6k次。以前以为必须要使用遍历,查许多网站也是这样写的,但其实不用遍历也可以的:set fso=createobject("Scripting.FileSystemObject")fso.DeleteFolder(tempPath),true这样就行了。但这语法我却是看不懂。_vba 删除不为空的文件夹

Java的继承内存分析_java 继承的内存空间理解-程序员宅基地

文章浏览阅读780次。继承内存分析1.创建对象之前,先加载方法区中object类,GrandPa类,Father类,Son类的属性和方法2.在堆里分配空间,依次开辟空间将Object类的属性,GrandPa类,Father类,Son类的属性放入3.依次从Object开始,字符串放在方法区的常量池内package com;public class TestA { public static void main(String[] args) { Son son = new Son(); _java 继承的内存空间理解

Redis(七)------redis哨兵机制的实现_查看redis端口号存储数据大小-程序员宅基地

文章浏览阅读1.6k次。前言Redis(四)------redis主从复制的实现上一节我们搭建了redis主从复制,redis主从复制主要作用读写分离和数据备份的作用。主机负责写入数据,从机负责读取数据。如果主机节点崩溃了,造成redis服务关闭,需要认为手动启动redis服务。因此我们集成哨兵模式来实现解决这个问题,实现redis的高可用作用。服务器用途redis端口号master-name备..._查看redis端口号存储数据大小

U盘引导安装centos7_centos7 u盘引导-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏18次。利用UltraISO写入映像到U盘,然后通过U盘引导安装centos。_centos7 u盘引导

推荐文章

热门文章

相关标签