【C语言微项目】通讯录 目录1. 通讯录底层逻辑1.1 整体思路1.2 两层结构2. 代码实现1. 通讯录底层逻辑1.1 整体思路通讯录本质上就是一个顺序表只不过顺序表存储的是整数而通讯录存储的是联系人信息结构体包含姓名、电话、地址等。1.2 两层结构内层联系人信息结构体包含姓名、电话、地址、年龄等字段这是顺序表中每个元素的实际内容外层通讯录管理结构体arr指针指向动态数组的首地址size记录当前有多少个联系人capacity记录当前数组最多能存多少个联系人2. 代码实现// Contact.h文件#includestdio.h #pragma once //避免头文件被重复包含 #define NAME_MAX 20 //姓名 #define GENDER_MAX 10 //性别 #define TEL_MAX 20 //电话 #define ADDR_MAX 100 //住址 struct SeqList; //前置声明 typedef struct SeqList Contact; //前置声明重命名 typedef struct PersonInfo //整个顺序表是结构体Contact//顺序表中的元素是结构体PeoInfo { char name[NAME_MAX]; char gender[GENDER_MAX]; int age; char tel[TEL_MAX]; char addr[ADDR_MAX]; }PeoInfo; void ContactInit(Contact* con); //初始化 void ContactDestroy(Contact* con); //销毁 void ContactAdd(Contact* con); //添加联系人 void ContactDel(Contact* con); //删除联系人 void ContactModify(Contact* con); //修改数据 void ContactFind(Contact* con); //查找数据 void ContactShow(Contact* con); //打印数据//Contact.c文件#includestdio.h #includeassert.h #includestring.h #include Contact.h #include SeqList1.h void ContactInit(Contact* con) //初始化 { SLInit(con); } void ContactDestroy(Contact* con) //销毁联系人列表 { SLDestroy(con); } void ContactAdd(Contact* con) //添加联系人 { PeoInfo p1; printf(请输入你要添加的联系人姓名\n); scanf(%s, p1.name); printf(请输入你要添加的联系人性别\n); scanf(%s, p1.gender); printf(请输入你要添加的联系人年龄\n); scanf(%d, p1.age); printf(请输入你要添加的联系人电话\n); scanf(%s, p1.tel); printf(请输入你要添加的联系人地址\n); scanf(%s, p1.addr); SLPushBack(con, p1); //在总表中尾插联系人 } int ContactFindByName(Contact* con, const char name[]) { for(int i0; icon-size; i) { if(strcmp(con-arr[i].name, name) 0) //比较两个字符串 { return i; //返回下标 } } return -1; //没有找到 } void ContactDel(Contact* con) //删除联系人 { char name[NAME_MAX]; printf(请输入你要删除的联系人姓名\n); scanf(%s, name); int x ContactFindByName(con, name); if(x 0) { SLErase(con, x); //指定删除对应下标的联系人 printf(删除成功\n); } else { printf(您要删除的联系人不存在\n); } } void ContactShow(Contact* con) //打印数据 { printf(姓名 性别 年龄 电话 地址\n); for(int i0; icon-size; i) { printf(%s %s %d %s %s\n, con-arr[i].name, con-arr[i].gender, con-arr[i].age, con-arr[i].tel, con-arr[i].addr); } } void ContactModify(Contact* con) //修改数据 { char name[NAME_MAX]; printf(请输入你要修改的联系人姓名\n); scanf(%s, name); int x ContactFindByName(con, name); if(x0) { printf(您要修改的联系人数据不存在\n); return; } printf(请输入新的姓名\n); scanf(%s, con-arr[x].name); printf(请输入新的性别\n); scanf(%s, con-arr[x].gender); printf(请输入新的年龄\n); scanf(%d, con-arr[x].age); //特别留意 printf(请输入新的电话\n); scanf(%s, con-arr[x].tel); printf(请输入新的住址\n); scanf(%s, con-arr[x].addr); } void ContactFind(Contact* con) //查找数据 { printf(请输入你要查找的联系人姓名\n); char name[NAME_MAX]; scanf(%s, name); int x ContactFindByName(con, name); if(x 0) { printf(查无此人\n); return; } printf(姓名 性别 年龄 电话 地址\n); printf(%s %s %d %s %s\n, con-arr[x].name, con-arr[x].gender, con-arr[x].age, con-arr[x].tel, con-arr[x].addr); }//testcon.c文件菜单栏#includestdio.h #include stdio.h #include Contact.c #include SeqList1.c #include Contact.h #include SeqList1.h void menu() { printf(**************通讯录******************\n); printf(******1.增加联系人 2.删除联系人******\n); printf(******3.修改联系人 4.查找联系人******\n); printf(******5.展示联系人 0.退出通讯录******\n); printf(**************************************\n); } int main() { Contact con; ContactInit(con); int op -1; do { menu(); printf(请选择您的操作\n); scanf(%d, op); switch(op) { case 1: { ContactAdd(con); break; } case 2: { ContactDel(con); break; } case 3: { ContactModify(con); break; } case 4: { ContactFind(con); break; } case 5: { ContactShow(con); break; } case 0: { printf(推出通讯录......\n); break; } default: { printf(输入错误请重新选择\n); break; } } }while(op ! 0); return 0; }// 感谢阅读(*/ω*)