通讯录(C语言版)

通讯录(C语言版)通讯录的实现 通讯录的制作 c 语言

大家好,欢迎来到IT知识分享网。

🐌博主主页:🐌​倔强的大蜗牛🐌​

目录

 一、通讯录的概念

二、通讯录制作(静态版)

(1)通讯录准备工作阶段

 1.菜单制作界面

2. 类型声明

3.通讯录的建立

4.初始化通讯录

5.利用枚举来定义

(2)功能的实现

1.增加联系人

2.显示联系人信息 

 3.删除指定联系人

4.查找指定联系人

 5.修改指定联系人

6.释放通讯录

三、通讯录制作(动态版)

1.结构体优化

2.初始化

3.增加联系人+增容(优化)

四、总代码

1.Contact.h

2.Contact.c

3.test.c


 一、通讯录的概念

通讯录一般指在日常生活中用笔记录,也在手机,电脑,电子字典等电子产品中拥有这个功能。通讯录作为通讯录地址的书本,当今的通讯录可以涵盖多项内容。

二、通讯录制作(静态版)

(1)通讯录准备工作阶段

通讯录(C语言版)通讯录(C语言版)

通讯录(C语言版)

 1.菜单制作界面

void menu() { printf("*\n"); printf("1.add 2.del *\n"); printf("3.search 4.modify*\n"); printf("5.show 6.sort \n"); printf(" 0.exit *\n"); printf("*\n"); }

通讯录(C语言版)

2. 类型声明

//类型的声明 //设计保存人的信息的这个结构体 typedef struct PeoInfo { char name[MAX_NAME]; int age; char sex[MAX_SEX]; char tele[MAX_TELE]; char addr[MAX_ADDR]; }PeoInfo;

3.通讯录的建立

typedef struct Contact { PeoInfo data[MAX];//data要增加sz就加, int sz;//data要减少sz减少(两个必定是联动的) }Contact;

4.初始化通讯录

//初始化通讯录 void InitContact(Contact* pc);

初始化实现

静态版本 void InitContact(Contact* pc) { assert(pc); memset(pc->data, 0, sizeof(pc->data)); pc->sz=0; }

5.利用枚举来定义

enum OPTION { EXIT,//默认0开始 ADD, DEL, SEARCH, MODIFY, SHOW, SORT }; 

枚举用于:对于用户使用会更加的方便简洁

do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case ADD: AddContact(&con); break; case DEL: DelContact(&con); break; case SEARCH: SerchContact(&con); break; case MODIFY: ModifyContact(&con); break; case SHOW: ShowContact(&con); break; case SORT: //SortContact(&con); break; case EXIT: //释放通讯录 DestroyContact(&con); printf("退出通讯录"); break; default: printf("选择错误,重新选择"); break; } } while (input); }

(2)功能的实现

1.增加联系人

函数声明:

//增加联系人 void AddContact(Contact* pc);

增加联系人的实现:

静态版本 void AddContact(Contact* pc) { assert(pc); if (pc->sz == MAX) { printf("通讯录已满,无法添加\n"); return; } printf("请输入名字:>"); scanf("%s", pc->data[pc->sz].name); printf("请输入年龄:>"); scanf("%d", &(pc->data[pc->sz].age)); printf("请输入性别:>"); scanf("%s", pc->data[pc->sz].sex); printf("请输入电话:>"); scanf("%s", pc->data[pc->sz].tele); printf("请输入地址:>"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("成功输入联系人\n"); } 

 成果展示:

通讯录(C语言版)

2.显示联系人信息 

函数声明:

//显示所有联系人的信息 void ShowContact(const Contact* pc); 

显示所以联系人的信息实现:

void ShowContact(const Contact* pc) { int i = 0; //打印列标题 printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址"); //打印数据 for (i = 0;i < pc->sz;i++) { printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); } }

成果展示:

通讯录(C语言版)

 3.删除指定联系人

函数声明:

//删除指定联系人 void DelContact( Contact* pc); 

删除指定联系人实现:

void DelContact(Contact* pc) { if (pc->sz == 0) { printf("通讯录为空,无法删除\n"); return; } char name[MAX_NAME] = { 0 }; assert(pc); //删除 printf("请输入要删除的人的名字:>"); scanf("%s", name); 找到要删除的人 //int i = 0; //int del = 0; //int flag = 0; //for (i = 0;i < pc->sz;i++) //{ // //pc->data[i].name==name这样不能比较是错误的 // if (strcmp(pc->data[i].name, name) == 0) // { // del = i; // flag = 1; // break; // } //} //if (flag == 0) //{ // printf("要删除的人不存在\n"); // return; //} // int del=FindByName(pc, name); if (del == -1) { printf("要删除的人不存在\n"); return; } int i = 0; //删除坐标为del的联系人 for (i = del;i < pc->sz - 1;i++) { pc->data[i] = pc->data[i + 1]; } pc->sz--; printf("成功删除联系人\n"); }

成果展示:

通讯录(C语言版)

4.查找指定联系人

函数声明:

//查找指定联系人 void SerchContact(const Contact* pc);

 查找指定联系人实现:

void SerchContact(const Contact* pc) { assert(pc); char name[MAX_NAME] = { 0 }; printf("请输入要查找的人的名字:>"); scanf("%s", name); int pos = FindByName(pc, name);//pos=position if (pos == -1) { printf("要查找的人不存在\n"); } else { printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址"); //打印数据 printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); } }

 5.修改指定联系人

函数声明:

//修改指定联系人 void ModifyContact(Contact* pc);

函数实现:

void ModifyContact(Contact* pc) { assert(pc); char name[MAX_NAME] = { 0 }; printf("请输入要修改的人的名字:>"); scanf("%s", name); int pos = FindByName(pc, name);//pos=position if (pos == -1) { printf("要修改的人不存在\n"); } else { printf("请输入名字:>"); scanf("%s", pc->data[pos].name); printf("请输入年龄:>"); scanf("%d", &(pc->data[pos].age)); printf("请输入性别:>"); scanf("%s", pc->data[pos].sex); printf("请输入电话:>"); scanf("%s", pc->data[pos].tele); printf("请输入地址:>"); scanf("%s", pc->data[pos].addr); printf("成功输入联系人\n"); } }

6.释放通讯录

函数声明:

void DestroyContact(Contact * pc);

函数实现:

void DestroyContact(Contact* pc) { free(pc->data); pc->data = NULL; pc->capacity = 0; pc->sz = 0; }

三、通讯录制作(动态版)

1.结构体优化

//动态版本 typedef struct Contact { PeoInfo *data;//指向了存放数据的空间 int sz;//记录当前放的有效元素个数 int capacity;//通讯录当前的最大容量 }Contact; 

2.初始化

//动态版本 void InitContact(Contact* pc) { assert(pc); pc->data = (PeoInfo*)malloc(DEFAUL_SZ *sizeof(PeoInfo)); if (pc->data == NULL) { perror("InitContact"); return; } pc->sz = 0; pc->capacity = DEFAUL_SZ; }

3.增加联系人+增容(优化)

//动态版本 int CheckCapacity(Contact* pc) { if (pc->sz == pc->capacity) { PeoInfo* ptr=(PeoInfo*)realloc(pc->data,( pc->capacity + INC_SZ)* sizeof(PeoInfo)); if (ptr == NULL) { perror("CheckCapacity"); return 0; } else { pc->data = ptr; pc->capacity += INC_SZ; printf("增容成功\n"); return 1; } } return 1; } void AddContact(Contact* pc) { assert(pc); if (0==CheckCapacity(pc)) { return; } printf("请输入名字:>"); scanf("%s", pc->data[pc->sz].name); printf("请输入年龄:>"); scanf("%d", &(pc->data[pc->sz].age)); printf("请输入性别:>"); scanf("%s", pc->data[pc->sz].sex); printf("请输入电话:>"); scanf("%s", pc->data[pc->sz].tele); printf("请输入地址:>"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("成功输入联系人\n"); } 

四、总代码

1.Contact.h

#pragma once #include<string.h> #include<assert.h> #include<stdio.h> #include<stdlib.h> #define MAX 100 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 30 #define DEFAUL_SZ 3 #define INC_SZ 2 enum OPTION { EXIT,//默认0开始 ADD, DEL, SEARCH, MODIFY, SHOW, SORT }; //类型的声明 //设计保存人的信息的这个结构体 typedef struct PeoInfo { char name[MAX_NAME]; int age; char sex[MAX_SEX]; char tele[MAX_TELE]; char addr[MAX_ADDR]; }PeoInfo; //通讯录 // 静态版本 //typedef struct Contact //{ // PeoInfo data[MAX];//data要增加sz就加, // int sz;//data要减少sz减少(两个必定是联动的) //}Contact; //动态版本 typedef struct Contact { PeoInfo *data;//指向了存放数据的空间 int sz;//记录当前放的有效元素个数 int capacity;//通讯录当前的最大容量 }Contact; //函数声明 //初始化通讯录 void InitContact(Contact* pc); //增加联系人 void AddContact(Contact* pc); //显示所以联系人的信息 void ShowContact(const Contact* pc); //删除指定联系人 void DelContact( Contact* pc); //查找指定联系人 void SerchContact(const Contact* pc); //修改指定联系人 void ModifyContact(Contact* pc); // void DestroyContact(Contact * pc);

2.Contact.c

#define _CRT_SECURE_NO_WARNINGS 1 #include"Contact.h" //静态版本 //void InitContact(Contact* pc) //{ // assert(pc); // memset(pc->data, 0, sizeof(pc->data)); // pc->sz=0; //} //动态版本 void InitContact(Contact* pc) { assert(pc); pc->data = (PeoInfo*)malloc(DEFAUL_SZ *sizeof(PeoInfo)); if (pc->data == NULL) { perror("InitContact"); return; } pc->sz = 0; pc->capacity = DEFAUL_SZ; } //静态版本 //void AddContact(Contact* pc) //{ // assert(pc); // if (pc->sz == MAX) // { // printf("通讯录已满,无法添加\n"); // return; // } // printf("请输入名字:>"); // scanf("%s", pc->data[pc->sz].name); // printf("请输入年龄:>"); // scanf("%d", &(pc->data[pc->sz].age)); // printf("请输入性别:>"); // scanf("%s", pc->data[pc->sz].sex); // printf("请输入电话:>"); // scanf("%s", pc->data[pc->sz].tele); // printf("请输入地址:>"); // scanf("%s", pc->data[pc->sz].addr); // // pc->sz++; // printf("成功输入联系人\n"); // //} //动态版本 int CheckCapacity(Contact* pc) { if (pc->sz == pc->capacity) { PeoInfo* ptr=(PeoInfo*)realloc(pc->data,( pc->capacity + INC_SZ)* sizeof(PeoInfo)); if (ptr == NULL) { perror("CheckCapacity"); return 0; } else { pc->data = ptr; pc->capacity += INC_SZ; printf("增容成功\n"); return 1; } } return 1; } void AddContact(Contact* pc) { assert(pc); if (0==CheckCapacity(pc)) { return; } printf("请输入名字:>"); scanf("%s", pc->data[pc->sz].name); printf("请输入年龄:>"); scanf("%d", &(pc->data[pc->sz].age)); printf("请输入性别:>"); scanf("%s", pc->data[pc->sz].sex); printf("请输入电话:>"); scanf("%s", pc->data[pc->sz].tele); printf("请输入地址:>"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("成功输入联系人\n"); } void ShowContact(const Contact* pc) { int i = 0; //打印列标题 printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址"); //打印数据 for (i = 0;i < pc->sz;i++) { printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); } } int FindByName(const Contact*pc,char name[]) { int i = 0; for (i = 0;i < pc->sz;i++) { //pc->data[i].name==name这样不能比较是错误的 if (strcmp(pc->data[i].name, name) == 0) { return 1;//找到了 } } return -1;//找不到 } void DelContact(Contact* pc) { if (pc->sz == 0) { printf("通讯录为空,无法删除\n"); return; } char name[MAX_NAME] = { 0 }; assert(pc); //删除 printf("请输入要删除的人的名字:>"); scanf("%s", name); 找到要删除的人 //int i = 0; //int del = 0; //int flag = 0; //for (i = 0;i < pc->sz;i++) //{ // //pc->data[i].name==name这样不能比较是错误的 // if (strcmp(pc->data[i].name, name) == 0) // { // del = i; // flag = 1; // break; // } //} //if (flag == 0) //{ // printf("要删除的人不存在\n"); // return; //} // int del=FindByName(pc, name); if (del == -1) { printf("要删除的人不存在\n"); return; } int i = 0; //删除坐标为del的联系人 for (i = del;i < pc->sz - 1;i++) { pc->data[i] = pc->data[i + 1]; } pc->sz--; printf("成功删除联系人\n"); } void SerchContact(const Contact* pc) { assert(pc); char name[MAX_NAME] = { 0 }; printf("请输入要查找的人的名字:>"); scanf("%s", name); int pos = FindByName(pc, name);//pos=position if (pos == -1) { printf("要查找的人不存在\n"); } else { printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址"); //打印数据 printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); } } void ModifyContact(Contact* pc) { assert(pc); char name[MAX_NAME] = { 0 }; printf("请输入要修改的人的名字:>"); scanf("%s", name); int pos = FindByName(pc, name);//pos=position if (pos == -1) { printf("要修改的人不存在\n"); } else { printf("请输入名字:>"); scanf("%s", pc->data[pos].name); printf("请输入年龄:>"); scanf("%d", &(pc->data[pos].age)); printf("请输入性别:>"); scanf("%s", pc->data[pos].sex); printf("请输入电话:>"); scanf("%s", pc->data[pos].tele); printf("请输入地址:>"); scanf("%s", pc->data[pos].addr); printf("成功输入联系人\n"); } } void DestroyContact(Contact* pc) { free(pc->data); pc->data = NULL; pc->capacity = 0; pc->sz = 0; }

3.test.c

#define _CRT_SECURE_NO_WARNINGS 1 #include"Contact.h" void menu() { printf("*\n"); printf("1.add 2.del *\n"); printf("3.search 4.modify*\n"); printf("5.show 6.sort \n"); printf("0.exit \n"); printf("*\n"); } void test() { int input = 0; //首先要有通讯录 Contact con; //封装一个函数,把通讯录初始化一下 InitContact(&con); do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case ADD: AddContact(&con); break; case DEL: DelContact(&con); break; case SEARCH: SerchContact(&con); break; case MODIFY: ModifyContact(&con); break; case SHOW: ShowContact(&con); break; case SORT: //SortContact(&con); break; case EXIT: //释放通讯录 DestroyContact(&con); printf("退出通讯录"); break; default: printf("选择错误,重新选择"); break; } } while (input); } int main() { test(); return 0; }

❤️结语: 

本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,蜗牛必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128015.html

(0)
上一篇 2025-09-03 17:45
下一篇 2025-09-03 18:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信