【完结】自学C鸭鸭笔记(二)—— 通讯录管理系统

    科技2024-08-22  32

    学习视频资料见B站:https://www.bilibili.com/video/BV1et411b73Z

    通讯录管理系统

    1 系统要求2 创建项目3 菜单功能4 退出功能5 添加联系人5.1 设计联系人结构体5.2设计通讯录结构体5.3 main函数中创建通讯录变量5.4 封装一个添加联系人子函数 6 显示联系人7 删除联系人7.1 封装检测联系人是否存在的子函数7.2 封装一个删除联系人的函数 8 查找联系人9 修改联系人10 清空联系人11 所有程序

    1 系统要求

    系统中需要实现的功能如下:

    添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信息删除联系人:按照姓名进行删除指定联系人查找联系人:按照姓名查看指定联系人信息修改联系人:按照姓名重新修改指定联系人清空联系人:清空通讯录中所有信息退出通讯录:退出当前使用的通讯录

    2 创建项目

    创建项目和源文件,之前讲过,这里不再赘述。

    3 菜单功能

    菜单界面如下: 步骤:

    封装一个函数来实现菜单的显示void showMenu()在main函数中执行这个函数

    示例:

    #include<iostream> using namespace std; //封装一个显示菜单的函数 void showMenu() { cout << "***************************" << endl; cout << "***** 1、添加联系人 *****" << endl; cout << "***** 2、显示联系人 *****" << endl; cout << "***** 3、删除联系人 *****" << endl; cout << "***** 4、查找联系人 *****" << endl; cout << "***** 5、修改联系人 *****" << endl; cout << "***** 6、清空联系人 *****" << endl; cout << "***** 0、退出通讯录 *****" << endl; cout << "***************************" << endl; } int main() { showMenu(); system("pause"); return 0; }

    4 退出功能

    用switch语句实现

    5 添加联系人

    功能描述:

    实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

    添加联系人实现步骤:

    设计联系人结构体设计通讯录结构体main函数中创建通讯录封装添加联系人函数测试添加联系人功能

    5.1 设计联系人结构体

    联系人信息包括:姓名、性别、年龄、联系电话、家庭住址

    示例:

    #include<string> //设计联系人结构体 struct Contact { string name; int gender; //1--男性 2--女性 int age; string phoneNum; string address; };

    5.2设计通讯录结构体

    里面包括了一个联系人结构体数组,以及目前通讯录中已有的人数。

    示例:

    #define MACX 1000 //创建通讯录结构体 struct contactBook { Contact pensonArray[MAX]; //通讯录中是一个联系人构成的数组,最大1000个 int size; //用来记录现有的联系人个数 };

    5.3 main函数中创建通讯录变量

    示例:

    //创建一个通讯录变量 contactBook ctb; //给这个变量赋初值 ctb.size = 0; //一开始通讯录人数为零

    5.4 封装一个添加联系人子函数

    示例:

    //封装添加联系人子函数 void addPerson(contactBook * p) { if (p->size >= MAX) { cout << "抱歉,通讯录已满" << endl; //判断通讯录是否已经满了 } else { //姓名 cout << "请输入联系人姓名:" << endl; string name; cin >> name; p->pensonArray[p->size].name = name; //性别 cout << "请输入联系人性别:" << endl; cout << "1——男性" << endl; cout << "2——女性" << endl; int gender; while (1) { cin >> gender; if (gender == 1 || gender == 2) { p->pensonArray[p->size].gender = gender; break; } else { cout << "请输入正确的性别!" << endl; } } //年龄 cout << "请输入联系人年龄:" << endl; int age; cin >> age; p->pensonArray[p->size].age = age; //电话号码 cout << "请输入联系人电话号码:" << endl; string num; cin >> num; p->pensonArray[p->size].phoneNum = num; //住址 cout << "请输入联系人地址:" << endl; string add; cin >> add; p->pensonArray[p->size].address = add; //更新通讯录人数 p->size++; cout<<"联系人 "<< name << " 添加成功!" << endl; system("pause"); //按任意键继续 system("cls"); //清屏操作 } }

    6 显示联系人

    封装显示联系人子函数 示例:

    //2.封装显示联系人子函数 void showPerson(contactBook * p) { //判断通讯录是否为空 if (p->size == 0) { cout << "当前通讯录为空!" << endl; } else { for (int i = 0; i < p->size; i++) { cout << "姓名:" << p->pensonArray[i].name << "\t" << "性别:" << (p->pensonArray[i].gender == 1 ? "男" : "女") << "\t" << "年龄:" << p->pensonArray[i].age << "\t" << "电话:" << p->pensonArray[i].phoneNum << "\t" << "住址:" << p->pensonArray[i].address << endl; } } system("pause"); system("cls"); }

    7 删除联系人

    功能描述:按照姓名进行删除指定联系人

    删除联系人实现步骤:

    封装检测联系人是否存在封装删除联系人函数测试删除联系人功能

    7.1 封装检测联系人是否存在的子函数

    示例:

    //3.封装一个检测联系人是否存在的函数,存在返回位置,不存在返回-1 // 传入的参数 参数1:通讯录 参数2:查找的人 int weatherExist(contactBook * p, string name) { for (int i = 0; i < p->size; i++) { if (p->pensonArray[i].name == name) { return i; } } return -1; }

    7.2 封装一个删除联系人的函数

    示例:

    //4.封装一个删除联系人的函数 void deletePerson(contactBook * p) { cout << "请输入想要删除的联系人姓名:" << endl; string name; cin >> name; int resp = weatherExist(p, name); if (resp !=-1) { for (int i = resp; i < p->size; i++) { p->pensonArray[i] = p->pensonArray[i + 1]; } p->size--; cout << "联系人 " << name << " 删除成功!" << endl; } else { cout << "查无此人!" << endl; } system("pause"); system("cls"); }

    8 查找联系人

    封装一个查找联系人的子函数 示例:

    //5.封装一个查找联系人的子函数 void findPerson(contactBook * p) { cout << "请输入您想要查找的联系人姓名:" << endl; string name; cin >> name; int resp = weatherExist(p, name); if (resp != -1) //联系人存在 { cout << "姓名:" << p->pensonArray[resp].name << "\t" << "性别:" << (p->pensonArray[resp].gender == 1 ? "男" : "女") << "\t" << "年龄:" << p->pensonArray[resp].age << "\t" << "电话:" << p->pensonArray[resp].phoneNum << "\t" << "住址:" << p->pensonArray[resp].address << endl; } else //联系人不存在 { cout << "查无此人" << endl; } system("pause"); system("cls"); }

    9 修改联系人

    封装一个修改联系人的子函数 示例:

    //6.封装一个修改联系人的子函数 void modifyPerson(contactBook * p) { cout << "请输入您想要修改的联系人姓名:" << endl; string name; cin >> name; int resp = weatherExist(p, name); if (resp != -1) //联系人存在 { //姓名 cout << "请输入修改后联系人姓名:" << endl; string name; cin >> name; p->pensonArray[resp].name = name; //性别 cout << "请输入修改后联系人性别:" << endl; cout << "1——男性" << endl; cout << "2——女性" << endl; int gender; while (1) { cin >> gender; if (gender == 1 || gender == 2) { p->pensonArray[resp].gender = gender; break; } else { cout << "请输入正确的性别!" << endl; } } //年龄 cout << "请输入修改后联系人年龄:" << endl; int age; cin >> age; p->pensonArray[resp].age = age; //电话号码 cout << "请输入修改后联系人电话号码:" << endl; string num; cin >> num; p->pensonArray[resp].phoneNum = num; //住址 cout << "请输入修改后联系人地址:" << endl; string add; cin >> add; p->pensonArray[resp].address = add; cout << "联系人 " << name << " 修改成功!" << endl; } else //联系人不存在 { cout << "查无此人" << endl; } system("pause"); system("cls"); }

    10 清空联系人

    封装清空联系人函数 示例:

    //7.封装一个清空联系人的函数 void cleanPerson(contactBook * p) { p->size = 0; //做逻辑清空操作 cout << "清空通讯录成功!" << endl; system("pause"); system("cls"); }

    11 所有程序

    #include<iostream> using namespace std; #include<string> #define MAX 1000 //这里用宏定义方便以后直接修改人数上限 //封装一个显示菜单的函数 void showMenu() { cout << "***************************" << endl; cout << "***** 1、添加联系人 *****" << endl; cout << "***** 2、显示联系人 *****" << endl; cout << "***** 3、删除联系人 *****" << endl; cout << "***** 4、查找联系人 *****" << endl; cout << "***** 5、修改联系人 *****" << endl; cout << "***** 6、清空联系人 *****" << endl; cout << "***** 0、退出通讯录 *****" << endl; cout << "***************************" << endl; } //设计联系人结构体 struct Contact { string name; int gender; //1--男性 2--女性 int age; string phoneNum; string address; }; //创建通讯录结构体MAX struct contactBook { Contact pensonArray[MAX]; //通讯录中是一个联系人构成的数组,最大1000个 int size; //用来记录现有的联系人个数 }; //1.封装添加联系人子函数 void addPerson(contactBook * p) { if (p->size >= MAX) { cout << "抱歉,通讯录已满" << endl; //判断通讯录是否已经满了 } else { //姓名 cout << "请输入联系人姓名:" << endl; string name; cin >> name; p->pensonArray[p->size].name = name; //性别 cout << "请输入联系人性别:" << endl; cout << "1——男性" << endl; cout << "2——女性" << endl; int gender; while (1) { cin >> gender; if (gender == 1 || gender == 2) { p->pensonArray[p->size].gender = gender; break; } else { cout << "请输入正确的性别!" << endl; } } //年龄 cout << "请输入联系人年龄:" << endl; int age; cin >> age; p->pensonArray[p->size].age = age; //电话号码 cout << "请输入联系人电话号码:" << endl; string num; cin >> num; p->pensonArray[p->size].phoneNum = num; //住址 cout << "请输入联系人地址:" << endl; string add; cin >> add; p->pensonArray[p->size].address = add; //更新通讯录人数 p->size++; cout<<"联系人 "<< name << " 添加成功!" << endl; system("pause"); //按任意键继续 system("cls"); //清屏操作 } } //2.封装显示联系人子函数 void showPerson(contactBook * p) { //判断通讯录是否为空 if (p->size == 0) { cout << "当前通讯录为空!" << endl; } else { for (int i = 0; i < p->size; i++) { cout << "姓名:" << p->pensonArray[i].name << "\t" << "性别:" << (p->pensonArray[i].gender == 1 ? "男" : "女") << "\t" << "年龄:" << p->pensonArray[i].age << "\t" << "电话:" << p->pensonArray[i].phoneNum << "\t" << "住址:" << p->pensonArray[i].address << endl; } } system("pause"); system("cls"); } //3.封装一个检测联系人是否存在的函数,存在返回位置,不存在返回-1 // 传入的参数 参数1:通讯录 参数2:查找的人 int weatherExist(contactBook * p, string name) { for (int i = 0; i < p->size; i++) { if (p->pensonArray[i].name == name) { return i; } } return -1; } //4.封装一个删除联系人的函数 void deletePerson(contactBook * p) { cout << "请输入想要删除的联系人姓名:" << endl; string name; cin >> name; int resp = weatherExist(p, name); if (resp !=-1) { for (int i = resp; i < p->size; i++) { p->pensonArray[i] = p->pensonArray[i + 1]; //数组整体前移,覆盖掉要删除的联系人 } p->size--; cout << "联系人 " << name << " 删除成功!" << endl; } else { cout << "查无此人!" << endl; } system("pause"); system("cls"); } //5.封装一个查找联系人的子函数 void findPerson(contactBook * p) { cout << "请输入您想要查找的联系人姓名:" << endl; string name; cin >> name; int resp = weatherExist(p, name); if (resp != -1) //联系人存在 { cout << "姓名:" << p->pensonArray[resp].name << "\t" << "性别:" << (p->pensonArray[resp].gender == 1 ? "男" : "女") << "\t" << "年龄:" << p->pensonArray[resp].age << "\t" << "电话:" << p->pensonArray[resp].phoneNum << "\t" << "住址:" << p->pensonArray[resp].address << endl; } else //联系人不存在 { cout << "查无此人" << endl; } system("pause"); system("cls"); } //6.封装一个修改联系人的子函数 void modifyPerson(contactBook * p) { cout << "请输入您想要修改的联系人姓名:" << endl; string name; cin >> name; int resp = weatherExist(p, name); if (resp != -1) //联系人存在 { //姓名 cout << "请输入修改后联系人姓名:" << endl; string name; cin >> name; p->pensonArray[resp].name = name; //性别 cout << "请输入修改后联系人性别:" << endl; cout << "1——男性" << endl; cout << "2——女性" << endl; int gender; while (1) { cin >> gender; if (gender == 1 || gender == 2) { p->pensonArray[resp].gender = gender; break; } else { cout << "请输入正确的性别!" << endl; } } //年龄 cout << "请输入修改后联系人年龄:" << endl; int age; cin >> age; p->pensonArray[resp].age = age; //电话号码 cout << "请输入修改后联系人电话号码:" << endl; string num; cin >> num; p->pensonArray[resp].phoneNum = num; //住址 cout << "请输入修改后联系人地址:" << endl; string add; cin >> add; p->pensonArray[resp].address = add; cout << "联系人 " << name << " 修改成功!" << endl; } else //联系人不存在 { cout << "查无此人" << endl; } system("pause"); system("cls"); } //7.封装一个清空联系人的函数 void cleanPerson(contactBook * p) { p->size = 0; //做逻辑清空操作 cout << "清空通讯录成功!" << endl; system("pause"); system("cls"); } int main() { int select = 0;//创建一个变量,用来接收用户输入的选项 //创建一个通讯录变量 contactBook ctb; //给这个变量赋初值 ctb.size = 0; //一开始通讯录人数为零 while (1) //用while实现能够一直操作的目的 { showMenu(); cin >> select; switch (select) { case 1: addPerson(&ctb); //创建一个子函数,实现添加联系人的功能,这里采用地址传递 break; case 2: showPerson(&ctb); //封装一个显示联系人的子函数,也是地址传递 break; case 3: deletePerson(&ctb); //封装的删除联系人的子函数 break; case 4: findPerson(&ctb); //封装的查找联系人的子函数 break; case 5: modifyPerson(&ctb); //封装的修改联系人的子函数 break; case 6: cleanPerson(&ctb); //封装的清空联系人的函数 break; case 0: cout << "欢迎您下次使用本系统" << endl; system("pause"); return 0; //可以直接跳出main函数,结束程序 break; default: cout << "请输入正确的序号" << endl; break; } } system("pause"); return 0; }
    Processed: 0.009, SQL: 8