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) 。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值