首页 > 编程语言 >【QT项目】QT6项目之基于C++的通讯录管理系统(联系人/学生管理系统)

【QT项目】QT6项目之基于C++的通讯录管理系统(联系人/学生管理系统)

时间:2024-11-08 17:50:52浏览次数:3  
标签:QT6 QT 管理系统 void PersonList ui 通讯录 include QList

目录

一.项目背景

二.创建工程

工程创建

添加文件 

联系人类 

功能类

三.功能实现

联系人类

person.cpp

person.h 

查询按钮槽函数

返回按钮槽函数

findperson.cpp:

addperson.cpp:

deleteperson.cpp:

changeperson.cpp:

!!显示!!

displayperson.cpp:

清除

clearperson.cpp: 

!!主窗口!!

mainwindow.cpp:

mainwindow.h:

四.总结


一.项目背景

        本学期在学C++,老师布置了作业要求使用C++完成一个联系人管理系统,同时笔者最近也在自学QT,QT的基础语言也是C++,笔者便萌生出了使用QT来完成本次作业的想法。

        由于笔者也是初学者,所以实现这次管理系统各方面选择了最简单最基础的方法。关于QT在此不介绍基础环境的搭建,基础可以看笔者以前发的文章。

二.创建工程

工程创建

        工程创建还是像往常一样选择QT传统窗口与qmake即可。由于我们要实现以下功能,即基础的增删改查。所以我们的思路是必须先创建一个联系人的类来供我们操作存储,接着围绕这几个功能分别创建功能类,调用以实现基础功能。

添加文件 

        思路确定后就可以正式对工程添加需要的文件了。

        右键工程名添加新文件:

联系人类 

        由于联系人是很基础的对象,不需要对其实现ui上的某些操作,所以我们这里创建联系人类时选择了纯C++类。

        命名看自己选择,我这里选择命名为Person:

 

功能类

        对于增删改查这些功能类,由于需要对其UI进行操作,所以这里我们选择创建为QT设计师类:

        注意:每个功能都要创建一个类!!!

创建完成后:

以上就把基础的工程创建部分完成了,接下来就可以向其中添加我们实现功能的代码了。

三.功能实现

联系人类

person.cpp

#include "person.h"

Person::Person()
{

}

Person::~Person()
{

}

void Person::SetPersonName(QString name)
{
    this->PersonName = name;
}
void Person::SetPhoneNumber(QString number)
{
    this->PhoneNumber = number;
}
QString Person::GetPersonName(void)
{
    return this->PersonName;
}
QString Person::GetPhoneNumber(void)
{
    return this->PhoneNumber;
}

person.h 

#ifndef PERSON_H
#define PERSON_H

#include <QMainWindow>
#include <QObject>
#include <QWidget>

class Person
{
private:
    QString PersonName;
    QString PhoneNumber;
public:
    Person();
    ~Person();

    void SetPersonName(QString name);
    void SetPhoneNumber(QString number);
    QString GetPersonName(void);
    QString GetPhoneNumber(void);
};

#endif // PERSON_H

        增删改查中围绕的最紧密的一个就是查,一旦实现了查,我们所有其他的功能便好实现了。为了实现查以及方便显示联系人,这里我选择了使用列表实现整个功能,选择列表的原因有以下:

  • 列表对频繁删改增添的功能实现很友好。
  • QT中列表方便显示

        所以这里我们创建一个联系人类的列表:

QList<Person> PersonList;//创建联系人列表

        后续的操作都将围绕这个列表进行。

        按照上面所说的我们优先实现查的功能。

        向findperson.cpp中添加相关头文件:

#include "QList"//列表容器
#include "person.h"//联系人类

extern QList<Person> PersonList;//创建联系人列表

        双击dinperson.ui文件进入设计界面,设计UI如下:

        右键相关控件转到槽:

        在这个工程中我们基本只需呀用到按钮,所以选择按钮的clicked()槽函数;

查询按钮槽函数

void FindPerson::on_pushButton_find_clicked()
{
    if(ui->lineEdit_name->text().isEmpty() != true)
    {
        QList<Person>::iterator it;
        for(it = PersonList.begin();it != PersonList.end();it ++)
        {
            if(it->GetPersonName() == ui->lineEdit_name->text())
            {
                ui->label_number->setText(it->GetPhoneNumber());
            }
        }
    }
}

返回按钮槽函数

void FindPerson::on_pushButton_goback_clicked()
{
    this->close();
}

findperson.cpp:

#include "findperson.h"
#include "ui_findperson.h"
#include "QList"//列表容器
#include "person.h"//联系人类

extern QList<Person> PersonList;//创建联系人列表

FindPerson::FindPerson(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::FindPerson)
{
    ui->setupUi(this);
}

FindPerson::~FindPerson()
{
    delete ui;
}

void FindPerson::on_pushButton_goback_clicked()
{
    this->close();
}

void FindPerson::on_pushButton_find_clicked()
{
    if(ui->lineEdit_name->text().isEmpty() != true)
    {
        QList<Person>::iterator it;
        for(it = PersonList.begin();it != PersonList.end();it ++)
        {
            if(it->GetPersonName() == ui->lineEdit_name->text())
            {
                ui->label_number->setText(it->GetPhoneNumber());
            }
        }
    }
}


        仿照查的写法:

addperson.cpp:

#include "addperson.h"
#include "ui_addperson.h"
#include "person.h"

extern QList<Person> PersonList;

AddPerson::AddPerson(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::AddPerson)
{
    ui->setupUi(this);
}

AddPerson::~AddPerson()
{
    delete ui;
}

//输入完成后
void AddPerson::on_pushButton_clicked()
{
    Person person_add;
    if(ui->lineEdit_name->text().isEmpty() != true && ui->lineEdit_number->text().isEmpty() != true)
    {
        person_add.SetPersonName(ui->lineEdit_name->text());
        person_add.SetPhoneNumber(ui->lineEdit_number->text());
        PersonList.append(person_add);
    }
    ui->lineEdit_name->clear();//清空输入框
    ui->lineEdit_number->clear();
    this->close();
}

deleteperson.cpp:

#include "deleteperson.h"
#include "ui_deleteperson.h"
#include "QList"//列表容器
#include "person.h"//联系人类

extern QList<Person> PersonList;//创建联系人列表

DeletePerson::DeletePerson(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::DeletePerson)
{
    ui->setupUi(this);
}

DeletePerson::~DeletePerson()
{
    delete ui;
}

void DeletePerson::on_pushButton_clicked()
{
    if(ui->lineEdit_name->text().isEmpty() != true)
    {
        //以下两种
        QList<Person>::iterator it;
        for(it = PersonList.begin();it != PersonList.end();)
        {
            if(it->GetPersonName() == ui->lineEdit_name->text())
            {
                it = PersonList.erase(it);//删除该元素并返回修改后的迭代器
            }
            else
            {
                it++;
            }
        }

        // for(int i = 0;i < PersonList.size();)
        // {
        //     if(PersonList[i].GetPersonName() == ui->lineEdit_name->text())
        //     {
        //         PersonList.removeAt(i);
        //     }
        //     else
        //     {
        //         i++;
        //     }
        // }
    }
    this->close();
}

changeperson.cpp:

#include "changeperson.h"
#include "ui_changeperson.h"
#include "QList"//列表容器
#include "person.h"//联系人类

extern QList<Person> PersonList;//创建联系人列表

ChangePerson::ChangePerson(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::ChangePerson)
{
    ui->setupUi(this);
}

ChangePerson::~ChangePerson()
{
    delete ui;
}

void ChangePerson::on_pushButton_change_clicked()
{
    if(ui->lineEdit_previousName->text().isEmpty() != true)
    {
        QList<Person>::iterator it;
        for(it = PersonList.begin();it != PersonList.end();it ++)
        {
            if(it->GetPersonName() == ui->lineEdit_previousName->text())
            {
                //修改姓名
                if(ui->lineEdit_presentName->text().isEmpty() != true)
                {
                    it->SetPersonName(ui->lineEdit_presentName->text());
                }
                //修改电话
                if(ui->lineEdit_number->text().isEmpty() != true)
                {
                    it->SetPhoneNumber(ui->lineEdit_number->text());
                }
            }
        }
    }
    this->close();
}

!!显示!!

        这里由于我们选择使用列表来操作整个联系人数,所以这里的显示控件可以选择ListView,但笔者觉得TableView更方便对应操作,所以选择了TableView控件。QT中TableView进行填充数据时要创建一个模型,在模型总确定好各个参数后,再将模型填充到TableView控件中。这里可以了解下:

QT框架的核心特性之一——模型-视图编程范式(Model-View Programming)

        同时由于我们联系人类中只设置了两个私有属性,所以要进行分别填充。

displayperson.cpp:

#include "displayperson.h"
#include "ui_displayperson.h"
#include "QStandardItemModel"
#include "QTableView"
#include "person.h"

extern QList<Person> PersonList;

int ListCount = PersonList.count();//获取列表中元素的个数

DisplayPerson::DisplayPerson(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::DisplayPerson)
{
    ui->setupUi(this);

    //由于这里使用的是TableView控件,所以要新建一个模型
    QStandardItemModel *model = new QStandardItemModel;
    model->setColumnCount(2);//列数
    model->setRowCount(ListCount);//行数

    ui->tableView->setModel(model);

    model->setHeaderData(0,Qt::Horizontal,"姓名");
    model->setHeaderData(1,Qt::Horizontal,"电话号码");

    int row = 0;
    QList<Person>::iterator it;
    for(it = PersonList.begin();it != PersonList.end();it++)
    {
        QStandardItem *item1 = new QStandardItem(it->GetPersonName());
        QStandardItem *item2 = new QStandardItem(it->GetPhoneNumber());
        item1->setTextAlignment(Qt::AlignCenter);
        model->setItem(row,0,item1);
        model->setItem(row,1,item2);
        row ++;
    }
}

DisplayPerson::~DisplayPerson()
{
    delete ui;
}

void DisplayPerson::on_pushButton_clicked()
{
    this->close();
}

清除

        由于我们选择了列表进行数据操作,所以这步就十分简单,直接调用其成员函数即可。

clearperson.cpp: 

#include "clearperson.h"
#include "ui_clearperson.h"
#include "QList"//列表容器
#include "person.h"//联系人类

extern QList<Person> PersonList;//创建联系人列表

ClearPerson::ClearPerson(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::ClearPerson)
{
    ui->setupUi(this);
}

ClearPerson::~ClearPerson()
{
    delete ui;
}

void ClearPerson::on_pushButton_clicked()
{
    PersonList.clear();//清空联系人
    this->close();
}

!!主窗口!!

        为几个功能添加按钮即可,点击对应按钮就触发相应功能。

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "QList"//列表容器
#include "person.h"//联系人类

QList<Person> PersonList;//创建联系人列表

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

//0.退出
void MainWindow::on_pushButton_7_clicked()
{
    this->close();
}

//1.添加联系人
void MainWindow::on_pushButton_clicked()
{
    static AddPerson addui;
    addui.show();
}

//2.显示联系人
void MainWindow::on_pushButton_2_clicked()
{
    //这里使用new创建的好处是关闭后自动销毁
    DisplayPerson *displayui = new DisplayPerson();
    displayui->show();
}

//3.删除联系人
void MainWindow::on_pushButton_3_clicked()
{
    DeletePerson *deleteui = new DeletePerson();
    deleteui->show();
}

//4.查询联系人
void MainWindow::on_pushButton_4_clicked()
{
    FindPerson *findui = new FindPerson();
    findui->show();
}

//5.修改联系人
void MainWindow::on_pushButton_5_clicked()
{
    ChangePerson *changeui = new ChangePerson();
    changeui->show();
}

//6.清空联系人
void MainWindow::on_pushButton_6_clicked()
{
    ClearPerson *clearui = new ClearPerson();
    clearui->show();
}


void MainWindow::on_pushButton_author_clicked()
{
    Author *authorui = new Author();
    authorui->show();
}

mainwindow.h:

   要在mainwindow.h主窗口头文件中添加我们创建的所有类的头文件:

四.总结

        总体来说这个项目难度不高,对于QT初学者来说练习巩固尚可,也是笔者初学QT独立完成的练习之作,希望对大家能够有所帮助!如有想要工程学习的可以访问我的gitee仓库进行克隆:

AddressBook: QT联系人管理系统


                                                                                                                       如有错误,感谢指正!

                                                                                                                                       2024.10.29

标签:QT6,QT,管理系统,void,PersonList,ui,通讯录,include,QList
From: https://blog.csdn.net/2203_75993546/article/details/143325386

相关文章

  • Springboot招聘信息管理系统lny2s(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,企业,工作类型,企业招聘,投简信息,面试邀请,求职信息开题报告内容一、研究背景与意义随着互联网技术的飞速发展和互联网的普及,传统的招聘方式已难以满足企......
  • Java+SpringBoot+Vue 学院个人信息管理系统
    学生个人信息管理一:基本介绍开发环境功能模块图系统功能部分数据库表设计用例分析二:部分系统页面展示登录页面首页管理端首页个人信息管理教师信息管理学生作业管理学习课程信息管理课程分类管理班级管理学生信息管理源码一:基本介绍开发环境·开发语言:Java·......
  • node.js毕设一手包家政服务管理系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着社会经济的发展和人们生活水平的提高,家政服务需求日益增长。现有研究主要集中在家政服务的供需匹配、服务质量评价等方面,专门针对一手包家政服务管......
  • 计算机毕业设计 | SpringBoot慈善公益平台 爱心互助活动发布管理系统(附源码)
    1,项目介绍爱慈善公益平台(love-charity)是一个基于SpringBoot开发的标准JavaWeb项目。整体页面非常的简约大气,项目的完整度较高,是一个偏向公益论坛的系统。非常适合刚刚接触学习SpringBoot的技术小白学习,也非常适合学校中的项目答辩或者毕业设计。2,技术分析前端技术......
  • SpringBoot物流信息管理系统jeg7v 带论文文档1万字以上,文末可获取,
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,站点管理,网点信息,计费标准,订单信息,车辆信息开题报告内容一、研究背景与意义随着信息技术的飞速发展,物流行业正逐步向信息化、智能化转型。物......
  • Vue3+AntDesign后台管理系统 | 小蚂蚁云
      项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、AntDesign、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈......
  • 最全Vue3开源管理系统 | 小蚂蚁云
    框架ElementPlusAntDesignVueNaiveUIArcoDesign简介element-uiVue3版本AntDesign的Vue实现,组件的风格与AntDesign保持同步Vue作者推荐的Vue3ui组件库ArcoDesign主要服务于字节跳动旗下中后台产品的体验设计和技术实现社区活跃度高高中中实现方式单文件Vue单文......
  • Springboot月嫂服务管理系统xf6t5(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表会员,月嫂分类,月嫂,月嫂服务,服务订单,联系我们,友情链接,服务退订,服务评价开题报告内容一、研究背景随着社会经济的发展和人们生活水平的提高,家庭对月嫂服务......
  • (附项目源码)Java开发语言,基于Java的高校实验室教学管理系统的设计与开发 50,计算机毕设
    摘 要随着高校实验室教学与管理的复杂性增加,传统的手动管理系统已经无法满足日益增长的需求。实验室教学不仅涉及到学生的教学安排和管理,还需要对实验设备、实验材料、实验室资源等进行有效的调配和管理。而目前实验室教学管理的各项工作,如实验室的预约,设备的借用归还、课......
  • (附项目源码)python开发语言,基于python Web的高校毕业论文管理系统 51,计算机毕设程序开
    摘 要随着信息化技术的迅速发展,人类信息化文明的到来,为人类的日常生活以及日常生产活动提供了非常大的便利,有效地解决了很多曾经无法解决的问题。本次基于pythonWeb的高校毕业论文管理系统的开发是针对我国传统的高校毕业论文管理模式沟通成本高且容易造成管理混乱、导师......