IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 学习之通讯录系统 -> 正文阅读

[C++知识库]C++ 学习之通讯录系统

作者:>

最近在学习c++,学习完基础语法部分进行一个小项目的练习。

注释完善,,,

#include <iostream>
#include <string>
using namespace std;

/*
	通讯录系统:
	author: 晚风亦是救赎
	datetime: 2021/10/12 16:48:32

	通讯录系统:
		简介:是一个记录亲人、好友信息的工具
		具体功能如下:
			1、添加联系人:向通信录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)
			2、显示联系人:显示通讯录中所有的联系人信息
			3、删除联系人:按照姓名进行删除指定联系人
			4、查找联系人:按照姓名查看指定联系人信息
			5、修改联系人:按照姓名查出信息然后进行修改保存
			6、清空联系人:清空通讯录中所有信息
			7、退出通讯录
*/

// 定义结构体
struct user {
    string name;	// 姓名
    string sex;		// 性别
    int age;		// 年龄
    string phone;	// 联系电话
    string address; // 家庭住址
};

/* 以下部分为函数声明:方便main函数中调用 */
// 显示菜单
void showMenu();
// 整理通讯录,将没有数据的位置清除,有数据的往前移位
void arrange(struct user* userList, int len);
// 判断字符串是否为空,为空返回true
bool judStr(string val);
// 找到数组中第一个空位置
int getIndex(user* userList, int len);
// 添加联系人
bool addUser(user* userList, int len, user user);
// 显示所有联系人
void showUserList(user* userList, int len);
// 返回通讯录中联系人总数量
int getAdressListSize(user* userList, int len);
// 删除联系人
bool deleteUser(user* userList, int len, string name);
// 根据名字查找某个联系人
void findUser(user* userList, int len, string name);
// 根据名字获取某个联系人对象信息
user getUser(user* userList, int len, string name);
// 保存修改后的联系人信息
bool updateUser(user* userList, int len, user user, string name);
// 清空所有联系人
void clearUserList(user* userList, int len);

/*主函数入口*/
int main() {
    struct user userList[1000]; // 定义通讯录
    clog << "-----欢迎进入通讯录系统-----" << endl;
    int flag = 0; // 初始化选项变量
    do {
        showMenu(); // 显示菜单
        cin >> flag;

        struct user u;  // 联系人数据容器
        bool res;		// 结果容器
        string name;    // 名字容器


        switch (flag) {
            case 1:
                clog << "-----添加联系人-----" << endl;
                clog << "请输入姓名:";
                cin >> u.name;
                clog << "\n请输入性别:";
                cin >> u.sex;
                clog << "\n请输入年龄:";
                cin >> u.age;
                clog << "\n请输入联系电话:";
                cin >> u.phone;
                clog << "\n请输入家庭住址:";
                cin >> u.address;
                res = addUser(userList,1000,u);
                if (res) {
                    cout << "添加联系人成功!!" << endl;
                }
                else {
                    cout << "添加联系人失败,通讯录已满或该名字已存在!" << endl;
                }
                break;
            case 2:
                clog << "-----显示联系人-----" << endl;
                clog << "当前通讯录中一共有: " << getAdressListSize(userList, 1000) << "位联系人!" << endl;
                showUserList(userList,1000);
                break;
            case 3:
                clog << "-----删除联系人-----" << endl;
                clog << "请输入要删除的联系人名称:";
                cin >> name;
                res = deleteUser(userList, 1000, name);
                if (res) {
                    cout << "删除联系人成功!" << endl;
                }
                else {
                    cout << "删除联系人失败,该联系人不存在!" << endl;
                }

                break;
            case 4:
                clog << "-----查找联系人-----" << endl;
                clog << "请输入要查找的联系人名称:";
                cin >> name;
                findUser(userList, 1000, name);
                break;
            case 5:
                clog << "-----修改联系人-----" << endl;
                clog << "请输入要修改的联系人名称:";
                cin >> name;
                u = getUser(userList, 1000, name);
                if (judStr(u.name)) {
                    cout << "查询成功!请进行修改操作!" << endl;
                    for (; ;) {
                        cout << "\n1:修改名称\n2:修改年龄\n3:修改性别\n4:修改联系电话\n5:修改家庭地址\n6:保存修改\n输入0退出\n请输入:";
                        cin >> flag;
                        switch (flag) {
                            case 1:
                                cout << "\n原名称:" << u.name << endl;
                                cout << "请输入修改后的名称:";
                                cin >> u.name;
                                break;
                            case 2:
                                cout << "\n原年龄:" << u.age << endl;
                                cout << "请输入修改后的年龄:";
                                cin >> u.age;
                                break;
                            case 3:
                                cout << "\n原性别:" << u.sex << endl;
                                cout << "请输入修改后的性别:";
                                cin >> u.sex;
                                break;
                            case 4:
                                cout << "\n原联系电话:" << u.phone << endl;
                                cout << "请输入修改后的联系电话:";
                                cin >> u.phone;
                                break;
                            case 5:
                                cout << "\n原家庭地址:" << u.address << endl;
                                cout << "请输入修改后的家庭地址:";
                                cin >> u.address;
                                break;
                            case 6:
                                res = updateUser(userList, 1000, u, name);
                                if (res) {
                                    flag = 0;
                                    cout << "修改联系人信息成功!" << endl;
                                }
                                else {
                                    cout << "修改联系人信息失败!" << endl;
                                }
                                break;
                            default :
                                cout << "没有该选项!" << endl;
                                break;
                        }

                        if (flag == 0) {
                            break;
                        }
                    }
                }

                break;
            case 6:
                clog << "-----清空联系人-----" << endl;
                clog << "是否清空所有联系人信息?(1确定/0取消):";
                cin >> flag;
                if (flag == 1) {
                    clearUserList(userList, 1000);
                    cout << "已清除所有联系人信息资料!" << endl;
                }
                break;
            case 7:
                clog << "-----退出通讯录-----" << endl;
                break;
            default :
                clog << "-----没有该选项-----" << endl;
                break;
        }


    } while (flag != 7);

    //system("pause");

    return 0;
}


void showMenu() {
    clog << "\n\n*****菜单选项*****" << endl;
    clog << "1、添加联系人" << endl;
    clog << "2、显示联系人" << endl;
    clog << "3、删除联系人" << endl;
    clog << "4、查找联系人" << endl;
    clog << "5、修改联系人" << endl;
    clog << "6、清空联系人" << endl;
    clog << "7、退出通讯录" << endl;
    clog << "请输入选项:";
}
void arrange(struct user* userList, int len) {
    for (int i = 0; i < len; i++) {
        if (!judStr(userList[i].name) && i != len - 1) {
            userList[i] = userList[i + 1];
            // 由于我们只判断名字是否存在,所以清空名字信息即可
            userList[i + 1].name = "";
        }
    }
}
bool judStr(string val) {
    if (val.empty()) {
        return false;
    }
    else if (val.size() == 0) {
        return false;
    }
    else if (val == "") {
        return false;
    }
    else {
        return true;
    }
}
int getIndex(user* userList, int len) {
    for (int i = 0; i < len; i++) {
        if (!judStr(userList[i].name)) {
            return i;
        }
    }
    return -1;
}
bool addUser(user* userList, int len, user user) {
    int index = getIndex(userList, len);
    if (index >= 0) {
        userList[index] = user;
        return true;
    }
    return false;
}
void showUserList(user* userList, int len) {
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            cout << "-----" << i + 1 << "-----" << endl;
            cout << "姓名:" << userList[i].name
                << " 性别:" << userList[i].sex
                << " 年龄:" << userList[i].age
                << " 联系电话:" << userList[i].phone
                << " 家庭住址:" << userList[i].address << endl;
        }
    }
}
int getAdressListSize(user* userList, int len) {
    int flag = 0;
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            flag++;
        }
        else {
            break;
        }
    }
    return flag;
}
bool deleteUser(user* userList, int len, string name) {
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            if (userList[i].name == name) {
                userList[i].name = "";
                arrange(userList, len);
                return true;
            }
        }
    }
    return false;
}
void findUser(user* userList, int len, string name) {
    int flag = 0;
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            if (userList[i].name == name) {
                flag++;
                string sex = userList[i].sex == "男" ? "他" : "她";
                cout << "找到了姓名为:" + name << "的联系人," << sex << "的个人信息如下:";
                cout << "\n 姓名:" << userList[i].name << endl
                    << " 性别:" << userList[i].sex << endl
                    << " 年龄:" << userList[i].age << endl
                    << " 联系电话:" << userList[i].phone << endl
                    << " 家庭住址:" << userList[i].address << endl;
            }
        }
    }
    if (!flag) {
        cout << "没有找到该联系人!" << endl;
    }
}

user getUser(user* userList, int len, string name) {
    int flag = 0;
    user u;
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            if (userList[i].name == name) {
                flag++;
                u = userList[i];
            }
        }
    }
    if (!flag) {
        cout << "没有找到该联系人!" << endl;
    }
    return u;
}
bool updateUser(user* userList, int len, user user, string name) {
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            if (userList[i].name == name) {
                userList[i] = user;
                return true;
            }
        }
    }
    return false;
}
void clearUserList(user* userList, int len) {
    user u = {};
    for (int i = 0; i < len; i++) {
        if (judStr(userList[i].name)) {
            userList[i] = u;
        }
    }
}

用时一个半小时。。

(O-O) 。。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:17:51  更:2021-10-13 11:17:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 19:50:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计