Qt 实现简易的学生信息管理文档

来源:互联网 发布:原生js手风琴效果原理 编辑:程序博客网 时间:2024/06/07 02:25

头文件:

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_OBJECTpublic:    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


程序设计思路图:


运行效果图:


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

原创粉丝点击