当前位置:
首页 >
通讯录动态版
发布时间: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;
}
总结
- 上一篇: 第八章Transact-SQL程序设计
- 下一篇: elf文件格式实例解析