用Qt设计通讯录

界面化通讯录

1. 问题描述

定义通讯录类,属性有:编号、姓名、性别、年龄、通讯地址、邮箱地址、电话等信息和相关的对属性做操作的行为。 主要完成对通讯录的简单管理。

2、功能要求 基本功能

(1)添加功能:程序能够添加通讯录信息,要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。

(2)显示功能:可显示当前系统中所有通讯信息,每条记录占据一行。

(3)统计功能:可统计当前通讯录的信息总数、可按性别进行统计,可按年龄进行排序。

(4)保存功能:可将当前系统中通讯录记录存入文件中,存入方式任意。

(5)退出系统。

拓展功能 (1)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 (2)删除功能:主要实现对已添加的通讯记录进行删除。若果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作。 (3)查询功能:可根据姓名、电话、邮箱地址等信息对已添加的信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (4)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。

核心代码:

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>

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

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

void MainWindow::on_addButton_clicked()
{
    // 添加功能的实现
    int id = ui->idLineEdit->text().toInt();
    QString name = ui->nameLineEdit->text();
    QString gender = ui->genderComboBox->currentText();
    int age = ui->ageSpinBox->value();
    QString address = ui->addressLineEdit->text();
    QString email = ui->emailLineEdit->text();
    QString phone = ui->phoneLineEdit->text();

    // 检查编号是否唯一
    if (findContactById(id) != -1) {
        QMessageBox::warning(this, "添加失败", "编号重复,请重新输入!"); //调用 findContactById(id) 函数找到了匹配的联系人,QMessageBox::warning() 函数显示一个警告对话框
        return;
    }

    // 创建联系人对象并添加到通讯录
    Contact contact(id, name, gender, age, address, email, phone);
    m_contacts.append(contact); //通过调用append()函数,可以将新的Contact对象添加到列表中

    QMessageBox::information(this, "添加成功", "联系人添加成功!");
    clearFields(); //是一个函数调用,可能是用于清空字段或重置字段值的操作
}

void MainWindow::on_displayButton_clicked()
{
    // 显示功能的实现
    displayContacts();
}

void MainWindow::on_statisticsButton_clicked()
{
    // 统计功能的实现
    int totalContacts = m_contacts.size();
    int maleCount = 0;
    int femaleCount = 0;

    for (const Contact& contact : m_contacts) {
        if (contact.getGender() == "男") {
            maleCount++;
        } else if (contact.getGender() == "女") {
            femaleCount++;
        }
    }

    QMessageBox::information(this, "统计结果",
                             QString("通讯录总数:%1\n男性联系人:%2\n女性联系人:%3")
                             .arg(totalContacts).arg(maleCount).arg(femaleCount));
}

void MainWindow::on_saveButton_clicked()
{
    // 保存功能的实现
    // 将通讯录记录存入文件中,存入方式任意
    // 这里只是示例,将通讯录记录输出到控制台
    for (const Contact& contact : m_contacts) {
        qDebug() << "编号:" << contact.getId();
        qDebug() << "姓名:" << contact.getName();
        qDebug() << "性别:" << contact.getGender();
        qDebug() << "年龄:" << contact.getAge();
        qDebug() << "通讯地址:" << contact.getAddress();
        qDebug() << "邮箱地址:" << contact.getEmail();
        qDebug() << "电话:" << contact.getPhone();
        qDebug() << "---------------------------";
    }

    QMessageBox::information(this, "保存成功", "通讯录记录已保存!");
}

void MainWindow::on_exitButton_clicked()
{
    // 退出系统
    QApplication::quit();
}

void MainWindow::displayContacts()
{
    // 显示通讯录信息
    ui->contactsTextEdit->clear();

    for (const Contact& contact : m_contacts) {
        ui->contactsTextEdit->append(QString("编号:%1\n姓名:%2\n性别:%3\n年龄:%4\n通讯地址:%5\n邮箱地址:%6\n电话:%7\n")
                                     .arg(contact.getId()).arg(contact.getName()).arg(contact.getGender())
                                     .arg(contact.getAge()).arg(contact.getAddress()).arg(contact.getEmail())
                                     .arg(contact.getPhone()));
        ui->contactsTextEdit->append("-------------------------------");
    }
}

void MainWindow::clearFields()
{
    // 清空输入框
    ui->idLineEdit->clear();
    ui->nameLineEdit->clear();
    ui->genderComboBox->setCurrentIndex(0);
    ui->ageSpinBox->setValue(0);
    ui->addressLineEdit->clear();
    ui->emailLineEdit->clear();
    ui->phoneLineEdit->clear();
}

int MainWindow::findContactById(int id)
{
    // 根据编号查找联系人在通讯录中的索引
    for (int i = 0; i < m_contacts.size(); i++) {
        if (m_contacts[i].getId() == id) {
            return i;
        }
    }

    return -1;
}

void MainWindow::on_searchButton_clicked()
{
    // 查询功能的实现
    int id = ui->idLineEdit->text().toInt();

    int index = findContactById(id);
    if (index == -1) {
        QMessageBox::information(this, "查询结果", "未找到该联系人!");
    } else {
        const Contact& contact = m_contacts[index];
        QMessageBox::information(this, "查询结果",
                                 QString("编号:%1\n姓名:%2\n性别:%3\n年龄:%4\n通讯地址:%5\n邮箱地址:%6\n电话:%7")
                                 .arg(contact.getId()).arg(contact.getName()).arg(contact.getGender())
                                 .arg(contact.getAge()).arg(contact.getAddress()).arg(contact.getEmail())
                                 .arg(contact.getPhone()));
    }
}

void MainWindow::on_editButton_clicked()
{
    // 编辑功能的实现
    int id = ui->idLineEdit->text().toInt();

    int index = findContactById(id);
    if (index == -1) {
        QMessageBox::warning(this, "编辑失败", "未找到该联系人!");
        return;
    }

    QString name = ui->nameLineEdit->text();
    QString gender = ui->genderComboBox->currentText();
    int age = ui->ageSpinBox->value();
    QString address = ui->addressLineEdit->text();
    QString email = ui->emailLineEdit->text();
    QString phone = ui->phoneLineEdit->text();

    Contact& contact = m_contacts[index];
    contact.setName(name);
    contact.setGender(gender);
    contact.setAge(age);
    contact.setAddress(address);
    contact.setEmail(email);
    contact.setPhone(phone);

    QMessageBox::information(this, "编辑成功", "联系人编辑成功!");
    clearFields();
}

void MainWindow::on_deleteButton_clicked()
{
    // 删除功能的实现
    int id = ui->idLineEdit->text().toInt();

    int index = findContactById(id);
    if (index == -1) {
        QMessageBox::warning(this, "删除失败", "未找到该联系人!");
        return;
    }

    QMessageBox::StandardButton confirm = QMessageBox::question(this, "确认删除", "确定要删除该联系人吗?");
    if (confirm == QMessageBox::Yes) {
        m_contacts.removeAt(index);
        QMessageBox::information(this, "删除成功", "联系人删除成功!");
        clearFields();
    }
}

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值