最近在学习c++,学习完基础语法部分进行一个小项目的练习。
注释完善,,,
#include#include using namespace std; // 定义结构体 struct user { string name; // 姓名 string sex; // 性别 int age; // 年龄 string phone; // 联系电话 string address; // 家庭住址 }; // 显示菜单 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 << "nn*****菜单选项*****" << 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) 。。



