【C语言】C语言实现动态通讯录
来源:互联网 发布:java 字符串拼接 效率 编辑:程序博客网 时间:2024/05/14 17:35
C语言实现动态通讯录是在静态通讯录的基础上进行修改(静态通讯录点击打开链接),静态通讯录已经在前面博客中总结出来了仅供大家参考。
实现一个通讯录;
通讯录可以用来存储个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
以上是实现通讯录的基本要求,代码如下,基本的注释已经在代码后面给出:
通讯录可以用来存储个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
以上是实现通讯录的基本要求,代码如下,基本的注释已经在代码后面给出:
Contact.h
#ifndef __CONTACT_H__ #define __CONTACT_H__ #include<stdio.h> #include<assert.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#define MAX 1000 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12 #define DEFSULT_SZ 5#define DEFAULT_INC 2typedef struct PeoInfo{char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX];}PeoInfo;typedef struct Contact{PeoInfo *data;//数据存储的区域int sz; //有效元素的个数int capacity;//容量}Contact, *pContact;void InitContact(pContact pcon);void AddContact(pContact pcon);void ShowContact(const pContact pcon);void DelContact(pContact pcon);void SearchContact(pContact pcon);void ModifyContact(pContact pcon);//修改void SortContact(pContact pcon);void ClearContact(pContact pcon);void ExitContact(pContact pcon);void DestoryContact(pContact pcon);#endif
Contact.c
#define _CRT_SECURE_NO_WARNINGS#include"contact.h"void InitContact(pContact pcon){pcon->sz = 0;pcon->data = malloc(DEFSULT_SZ* sizeof(PeoInfo)); if (pcon->data == NULL){perror("use malloc");exit(EXIT_FAILURE);}memset(pcon->data, 0, DEFSULT_SZ* sizeof(PeoInfo));pcon->capacity = DEFSULT_SZ;}//添加void CheckCapacity(pContact pcon){if (pcon->sz == pcon->capacity){//增容PeoInfo*ptr = realloc(pcon->data, (pcon->capacity + DEFAULT_INC)*sizeof(PeoInfo));if (ptr == NULL){perror("realloc");exit(EXIT_FAILURE);}else{pcon->data = ptr;}pcon->capacity += DEFAULT_INC;printf("增容成功\n");}}void AddContact(pContact pcon){assert(pcon);CheckCapacity(pcon);/*if (pcon->sz == MAX){printf("通讯录满了!!!\n");return;*/printf("请输入名字:");scanf("%s", pcon->data[pcon->sz].name);printf("请输入年龄:");scanf("%d", &(pcon->data[pcon->sz].age));//年龄 取地址printf("请输入性别:");scanf("%s", (pcon->data[pcon->sz].sex));printf("请输入地址:");scanf("%s", (pcon->data[pcon->sz].addr));printf("请输入电话:");scanf("%s", (pcon->data[pcon->sz].tele));pcon->sz++;printf("添加成功 !\n");}//显示void ShowContact(const pContact pcon){int i = 0;printf("%15s\t%5s\t%5s\t%15s\t%15s\n", "姓名", "年龄", "性别", "地址", "电话");for (i = 0; i < pcon->sz; i++){printf("%15s\t%5d\t%5s\t%15s\t%15s\n",pcon->data[i].name,pcon->data[i].age,pcon->data[i].sex,pcon->data[i].addr,pcon->data[i].tele);}}void DestoryContact(pContact pcon){free(pcon->data);pcon->data = NULL;pcon->capacity = 0;pcon->sz = 0;}static int FindEntry(pContact pcon, char name[]){int i = 0;for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, name) == 0)return i;}return -1;}//删除void DelContact(pContact pcon){int pos = 0;char name[NAME_MAX] = { 0 };printf("请输入要删除人的名字:\n");scanf("%s", name);pos = FindEntry(pcon, name);if (pos == -1){printf("要删除的人不存在 !\n");return;}else{//删除int j = 0;for (j = pos; j < pcon->sz; j++){pcon->data[j] = pcon->data[j + 1];}pcon->sz--;printf("删除成功 !\n");}}//查找void SearchContact(pContact pcon){int pos = 0;char name[NAME_MAX] = { 0 };printf("请输入要查找人的名字:\n");scanf("%s", name);pos = FindEntry(pcon, name);if (pos == -1){printf("要查找的人不存在 !\n");return;}else{printf("%15s\t%5d\t%5s\t%15s\t%15s\n",pcon->data[pos].name,pcon->data[pos].age,pcon->data[pos].sex,pcon->data[pos].addr,pcon->data[pos].tele);}}//修改void ModifyContact(pContact pcon){int i = 0;char flag = 'Y';int mod = -1;char na[20] = { 0 };do{printf("请输入需要修改的人:");scanf("%s", na);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, na) == 0){mod = i;}}if (mod >= 0){printf("请输入修改后的名字:");scanf("%s", &(pcon->data[mod].name));printf("请输入修改后的年龄:");scanf("%d", &(pcon->data[mod].age));printf("请输入修改后的性别:");scanf("%s", &(pcon->data[mod].sex));printf("请输入修改后的地址:");scanf("%s", &(pcon->data[mod].addr));printf("请输入修改后的电话号码:");scanf("%s", &(pcon->data[mod].tele));printf("是否继续录入?(继续输入请输入Y,任意键退出):\n");getchar();scanf("%c", &flag);if (toupper(flag) != 'Y')break;}else{printf("没有你要修改的人!");printf("是否继续修改联系人?(继续则输入Y,按任意键退出):");getchar();scanf("%c", &flag);if (toupper(flag) != 'Y')break;}} while (toupper(flag) == 'Y');}//排序void SortContact(pContact pcon){int i = 0, j = 0;for (i = 0; i < pcon->sz - 1; i++){for (j = 0; j < pcon->sz - 1 - i; j++){if (strcmp(pcon->data[j].name, pcon->data[j + 1].name) > 0){PeoInfo peo = pcon->data[j];pcon->data[j] = pcon->data[j + 1];pcon->data[j + 1] = peo;}}}printf("%15s\t%5s\t%5s\t%15s\t%15s\n", "姓名", "年龄", "性别", "地址", "电话");for (i = 0; i < pcon->sz; i++){printf("%4s\t%2d\t%2s\t%12s\t%12s\n",pcon->data[i].name,pcon->data[i].age,pcon->data[i].sex,pcon->data[i].addr,pcon->data[i].tele);}}//清空void ClearContact(pContact pcon){pcon->sz = 0;}
#include"contact.h"//#include<stdio.h>enum {EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT,CLEAR,DESTROY};void meau(){printf(" *********************************************\n");printf(" *********************************************\n");printf(" ###############My address book###############\n");printf(" * 1-add 2-del 3-search *\n");printf(" * 4-modify 5-show 6-Sort *\n");printf(" * 0-Exit 7-clear *\n");printf(" *********************************************\n");printf(" *********************************************\n");}void test(){int input = 0;Contact my_con;InitContact(&my_con);do{meau();printf("请选择:");scanf_s("%d", &input);switch (input){case ADD://添加AddContact(&my_con);break;case SHOW://显示ShowContact(&my_con);break;case DEL://删除DelContact(&my_con);break;case SEARCH://查找SearchContact(&my_con);break;case MODIFY://修改ModifyContact(&my_con);break;case SORT://排序SortContact(&my_con);break;case CLEAR://清除ClearContact(&my_con);break;/*case DESTROY:DestroyContact(&my_con);break;*/case EXIT://退出exit(0);break;}} while (input);}int main(){test();return 0;}
程序示意图;
以上就是动态通讯录的实现,动态通讯录的主要部分便是对原本静态的内容进行增容处理,当然结构体与指针依旧是重点。里面重要的内容都在代码后面做了注释共大家参考。由于个人的能力有限,有不足的地方欢迎大家批评指正,新手上路,大神勿喷!
阅读全文
0 0
- 【C语言】C语言实现动态通讯录
- c语言实现动态通讯录
- c语言实现通讯录(动态内存开辟)
- c语言实现动态版本通讯录
- C语言实现通讯录-动态内存
- c语言实现----通讯录
- C语言实现通讯录
- C语言实现通讯录
- c语言实现通讯录
- C语言实现通讯录
- 【C语言】C语言实现静态通讯录
- 【C语言】实现一个通讯录(二:动态的实现)
- 【c语言】实现一个通讯录
- c语言实现通讯录系统
- C语言实现简单通讯录
- 用C语言实现通讯录
- C语言实现简易通讯录
- c语言实现简单通讯录
- 基于SSM或者SSH的三种单元测试方式
- 文章标题
- 51nod 1117 聪明的木匠
- LintCode python 小白-简单题-627最长回文串
- android开源库---Dagger2入门学习(为什么使用)
- 【C语言】C语言实现动态通讯录
- cardview向下兼容API21以下
- hdu 6040 Hints of sd0061(STL)
- Maven和SBT学习日记1
- hdu2035 人见人爱A^B(C语言)
- 数据库的定时任务
- android事件分发机制
- js怎么清空div里面的内容
- Activity的启动流程