欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

通讯录动态版

发布时间:2025/3/11 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 通讯录动态版 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#include<stdio.h> #include<stdlib.h> #include<string.h>enum operation {EXIT, //退出ADD, //添加SEARCH, //查找DELETD, //删除AMEND, //修改SHOW //显示 };enum object {X_NAME, //名字X_AGE, //年龄X_TELNUMBER,//电话号码X_ADDRESS //住址 };#define max_name 10 #define max_telnumber 15 #define max_address 20 #define init_capacity 2typedef struct PeopleDate {char name[max_name]; //名字short int age; //年龄char telnumber[max_telnumber]; //号码char address[max_address]; //住址 }PeopleDate;typedef struct person {PeopleDate* data; //定义联系人相关信息的PeopleDate结构体指针int sz; //当前存储的个数int capacity; //当前容量 }person;void menu_operation(); //操作对象菜单 void menu_object(); //信息对象菜单 void init(person* con); //初始化 void f_add(person* con); //添加成员 void f_search(person* con); //查找成员 void f_delete(person* con); //删除成员 void f_amend(person* con); //修改成员 void f_show(person* con); //显示所有成员 int dilatation(person *pcon); //扩充容量 void f_empty(person *pcon); //清空所有成员void menu_operation() {printf("*****************************************\n");printf("*******0、退出 1、添加 *******\n");printf("*******2、查找 3、删除 *******\n");printf("*******4、修改 5、显示 *******\n");printf("*****************************************\n"); }void menu_object() {printf("*****************************************\n");printf("*******0、姓名 1、年龄 *******\n");printf("*******2、号码 3、地址 *******\n");printf("*****************************************\n");printf("请输入需要修改的选项:"); }void init(person *pcon) {pcon->sz = 0;pcon->capacity = init_capacity;pcon->data = (PeopleDate*)malloc(pcon->capacity*sizeof(PeopleDate)); //实例化指针,给pcon->data分配内存memset(pcon->data, 0, pcon->capacity*sizeof(PeopleDate)); //将pcon->data所指向的空间初始化为0 }int dilatation(person *pcon) {PeopleDate* ptr = (PeopleDate*)realloc(pcon->data, (pcon->capacity + init_capacity)*sizeof(PeopleDate));//改变pcon->data所指向的空间大小if (ptr != NULL)//判断扩容是否成功,成功返回1,反之为0{pcon->data = ptr;pcon->capacity += init_capacity;//更新当前实际容量大小return 1;}elsereturn 0; }void f_empty(person *pcon) {//释放掉pcon->data所指向的空间free(pcon->data);pcon->data = NULL;pcon->sz = 0;pcon->capacity = 0;printf("内容已销毁\n"); }void f_add(person *pcon) {if (pcon->sz == pcon->capacity)//判断当前联系人个数是否满了{int a = dilatation(pcon);switch (a){case 0: {printf("尝试扩容失败\n");return;}break;case 1:{printf("尝试扩容成功\n");}break;default: printf("错误\n"); break;}}//给新增加的联系人添加信息printf("姓名:");scanf("%s", pcon->data[pcon->sz].name);printf("年龄:");scanf("%d", &(pcon->data[pcon->sz].age));printf("号码:");scanf("%s", pcon->data[pcon->sz].telnumber);printf("地址:");scanf("%s", pcon->data[pcon->sz].address);printf("添加成功\n");pcon->sz++;//当前联系人个数+1 }void f_search(person *pcon) {char nowname[max_name];int i = 0;printf("请输入需要查找的姓名:");scanf("%s", nowname);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, nowname) == 0)//判断当前对象是否与要查找的人的姓名相同{printf("姓名:%s\n", pcon->data[i].name);printf("年龄:%d\n", pcon->data[i].age);printf("号码:%s\n", pcon->data[i].telnumber);printf("地址:%s\n", pcon->data[i].address);break;}if (i == pcon->sz - 1) //如果查到最后一个人则说明没有该联系人printf("无该联系人\n");} }void f_delete(person *pcon) {char nowname[max_name];int i = 0, j = 0;printf("请输入需要删除人的姓名:");scanf("%s", nowname);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, nowname) == 0)//判断当前对象是否与要删除的人的姓名相同{j = i;break;}}for (j = i; j < pcon->sz; j++) //依次向前覆盖,把目标联系人删除{pcon->data[j] = pcon->data[j + 1];}pcon->sz--; //联系人个数-1printf("已删除\n"); }void f_amend(person *pcon) {char nowname[max_name];int i = 0, j = 0;printf("请输入需要修改人的姓名:");scanf("%s", nowname);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, nowname) == 0){j = i;break;}}//按照菜单做出相应的信息修改menu_object();scanf("%d", &i);switch (i){case X_NAME:{printf("请输入姓名:");scanf("%s", pcon->data[j].name);printf("修改完成\n");}break;case X_AGE:{printf("请输入年龄:");scanf("%d", &(pcon->data[j].age));printf("修改完成\n");}break;case X_TELNUMBER:{printf("请输入号码:");scanf("%s", pcon->data[j].telnumber);printf("修改完成\n");}break;case X_ADDRESS:{printf("请输入地址:");scanf("%s", pcon->data[j].address);printf("修改完成\n");}break;default: printf("命令错误\n"); break;} }void f_show(person *pcon) {int i = 0;printf("当前有%d个联系人\n", pcon->sz);for (i = 0; i < pcon->sz; i++){printf("\n");printf("姓名:%s\n", pcon->data[i].name);printf("年龄:%d\n", pcon->data[i].age);printf("号码:%s\n", pcon->data[i].telnumber);printf("地址:%s\n", pcon->data[i].address);printf("\n");} }int main() {int input = 0;struct person con;init(&con);do{menu_operation();printf("请输入指令:");scanf("%d", &input);switch (input){case EXIT: f_empty(&con); break;case ADD: f_add(&con); break;case SEARCH: f_search(&con); break;case DELETD: f_delete(&con); break;case AMEND: f_amend(&con); break;case SHOW: f_show(&con); break;default: printf("命令无效\n"); break;}} while (input);system("pause");return 0; }

总结

以上是生活随笔为你收集整理的通讯录动态版的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。