本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

(一)实现思路

1.通讯录功能

添加好友,删除好友,查找好友,修改好友信息,对好友进行排序

2.模块化实现各方面的功能

a. test.c

测试通讯录功能

b. Contact.c

实现通讯录功能

c. Contact.h

包含通讯录实现的头文件

3.代码实现

(二)源代码

A.test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#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("***  7.Help        8.About0 ***\n");printf("***  0.Exit                 ***\n");printf("*******************************\n");
}int main()
{int input = 0;//创建通讯录int size = 0;struct Contact con;//一个结构体里包含1000个人的信息和size;//size表示的是该通讯录里现在的好友数//初始化通讯录InitContact(&con);//使size的初始值,以及好友信息初始化为0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){//添加好友信息case Add:AddContact(&con);break;//删除好友case Del:DelContact(&con);break;//查找好友信息case Search:SearchContact(&con);break;//修改好友信息case Modify:ModifyContact(&con);break;//显示好友信息case Show:ShowContact(&con);break;//好友排序case Sort:SortContact(&con);break;//退出case Exit:printf("退出通讯录!");break;//通讯录的使用以及帮助case Help:HelpContact();break;//关于通讯录case About:AboutContact();break;//选择错误default:printf("选择错误!");break;}} while (input);return 0;
}

B.Contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#define Max 1000
#define Max_name 20
#define Max_sex 5
#define Max_tele 12
#define Max_addr 30enum Option
{Exit,Add,Del,Search,Modify,Show,Sort,Help,About};//创建一个结构体来存放通讯录中要存放的信息
struct PeoInfo
{char name[Max_name];int age;char sex[Max_sex];char tele[Max_tele];char addr[Max_addr];
};//通讯录类型
struct Contact
{struct PeoInfo data[Max];//存放一个信息,包括好友姓名,年龄,性别,电话,地址int size;//记录当前已经有的元素个数//存入一个好友,size加1,表示通讯录人数增加一个
};//声明函数
//1.对通讯录进行初始化
void InitContact(struct Contact* ps);//增加好友信息
void AddContact(struct Contact* ps);//删除好友
void DelContact(struct Contact* ps);//查找指定姓名的好友
void SearchContact(struct Contact* ps);//显示好友信息
void ShowContact(const struct Contact* ps);//修改好友信息
void ModifyContact( struct Contact* ps);//按名字首字母对通讯录的好友进行排序
void SortContact( struct Contact* ps);//帮助使用通讯录
void HelpContact();//关于通讯录
void AboutContact();

C.Contact.c

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"
#include
#include
#include //初始化通讯录
void InitContact(struct Contact* ps)
{memset(ps->data, 0, sizeof(ps->data));ps->size = 0;//设置通讯录最初只有0个元素
}//帮助使用通讯录
void HelpContact()
{printf("各按键的使用:\n");printf("1.添加好友\n");printf("2.删除好友\n");printf("3.查找好友信息\n");printf("4.修改好友信息\n");printf("5.显示好友信息\n");printf("6.对好友进行排序\n");printf("7.帮助使用通讯录\n");printf("8.关于通讯录\n");printf("谢谢使用通讯录!\n");}//关于通讯录
void AboutContact()
{printf("通讯录一般指在日常生活中用笔记录,也在手机,电脑,电子字典等电子产品中拥有这个功能。\n");
}//增加好友的电话,信息
void AddContact(struct Contact* ps)
{if (ps->size == Max){printf("通讯录已满,无法增加!\n");}else{printf("请输入姓名:");scanf("%s", ps->data[ps->size].name);//除了年龄,其他都是数组,直接用数组名printf("请输入年龄:");scanf("%d", &(ps->data[ps->size].age));//年龄不是数组,则需要&printf("请输入性别:");scanf("%s", ps->data[ps->size].sex);printf("请输入电话:");scanf("%s", ps->data[ps->size].tele);printf("请输入地址:");scanf("%s", ps->data[ps->size].addr);ps->size++;//添加成功一个1好友,size加1,;printf("添加成功!\n");}}//在删除,查找,修改的函数中均涉及查找到该好友才能进行
//为了避免冗余,我们把查找的这个环节从函数中抽离出来
//在函数中直接使用,就不会显得重复static int Find_by_name(struct Contact* ps, char name[Max_name])
{int i;for (i = 0; i < ps->size; i++){//将要查找的好友姓名与通讯录中的好友进行比较if (0 == strcmp(ps->data[i].name, name)){//若找到,返回其下标return i;}}//若都循环,比对完了以后还没找到就返回-1return -1;
}//删除好友信息
void DelContact(struct Contact* ps)
{int  j;char name[Max_name];printf("请输入删除好友的名字:");scanf("%s", name);//1.查找要删除的人的位置int pos = Find_by_name(ps, name);//调用函数进行查找,若找到,返回下标,若没找到,返回-1;//2.删除if (pos==-1){printf("该好友不存在!\n");}else{//删除数据for (j = pos; j < ps->size - 1; j++){ps->data[j] = ps->data[j + 1];//删除数据后,后面的元素位置都改变,向前移动一个位置;}ps->size--;//删除一个好友,size-1.printf("删除成功!\n");}
}//查找指定好友信息
void SearchContact(struct Contact* ps)
{char name[Max_name];printf("输入要查找的好友姓名:");scanf("%s", name);int pos = Find_by_name(ps, name);if (pos ==-1){printf("该好友不存在!\n");}else{printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");printf("%10s\t%4d\t%5s\t%12s\t%20s\n",ps->data[pos].name,ps->data[pos].age,ps->data[pos].sex,ps->data[pos].tele,ps->data[pos].addr);}}//修改好友信息
void ModifyContact(struct Contact* ps)
{char name[Max_name];printf("请输入需要修改信息的好友姓名:");scanf("%s", name);int pos=Find_by_name(ps, name);if (pos == -1){printf("该用户不存在!\n");}else{printf("请输入姓名:");scanf("%s", ps->data[pos].name);printf("请输入年龄:");scanf("%d", &(ps->data[pos].age));printf("请输入性别:");scanf("%s", ps->data[pos].sex);printf("请输入电话:");scanf("%s", ps->data[pos].tele);printf("请输入地址:");scanf("%s", ps->data[pos].addr);printf("修改成功!\n");}}//显示出好友的基本信息
void ShowContact(const struct Contact* ps)
{if (ps->size == 0){printf("通讯录为空!\n");}else{int i = 0;printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");for (i = 0; i < ps->size; i++){printf("%10s\t%4d\t%5s\t%12s\t%20s\n",ps->data[i].name,ps->data[i].age,ps->data[i].sex,ps->data[i].tele,ps->data[i].addr);}}
}//按照名字的首字母进行排序int cmp_stu_by_name(const void* e1, const void* e2)
{return (strcmp(((struct Contact*)e1)->data->name, ((struct Contact*)e2)->data->name));
}//我们用qsort()函数对我们的好友按照名字首字母进行排序
void SortContact( struct Contact* ps)
{qsort(ps->data, ps->size, sizeof(ps->data[0]), cmp_stu_by_name);printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");int i;for (i = 0; i < ps->size; i++){printf("%10s\t%4d\t%5s\t%12s\t%20s\n",ps->data[i].name,ps->data[i].age,ps->data[i].sex,ps->data[i].tele,ps->data[i].addr);}
}

到此这篇关于C语言实现通讯录的详细代码的文章就介绍到这了。

教你C语言实现通讯录的详细代码相关推荐

  1. 【五】 C语言基础知识学习回顾 | 一篇搞定C语言基础 | 内附详细代码以及注释

    一 .C语言学习第一天 1.1 编写C语言代码:hello.c #include<stdio.h> #include<stdlib.h> //调用system系统函数需要包含的 ...

  2. C++语言实现网络爬虫详细代码

    最近有关注到某论坛在讨论网络爬虫用python或者java等语言写有多么多么好,其实这种没法具体说哪个好,只能说各自有各自的优点,下文就是关于我使用C++语言写的爬虫代码,对于我来说挺简单的,可以供大 ...

  3. c语言二分法_14个经典C语言算法你就不看一眼?(附详细代码)

    今天,给大家讲一讲,单片机常用的14个C语言算法(附详细代码)哟! 一.计数.求和.求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值.终值或结束条件,更要注意用来表示计数.和. ...

  4. c语言通讯录txt保存,C语言实现通讯录.pdf

    C语语言言实实现现通通讯讯录录 本文实例为大家分享了C语言实现通讯录的具体代码,供大家参考,具体内容如下 实现的功能 : 1.初始化通讯录: 2. 通讯录中增加条目: 3. 删除通讯录中的指定条目: ...

  5. C语言实现通讯录详细教学

    作者:~小明学编程~ 文章专栏:C语言练习题 目之所及皆为回忆,心之所向皆为过往 目录 前言 contact.h text.c contact.c 初始化函数 增加成员函数 删除成员函数 Find函数 ...

  6. 简陋版C语言仿真通讯录之动态内存开辟版本

    简陋版C语言仿真通讯录 https://blog.csdn.net/csdn_kou/article/details/80287640 简陋版C语言仿真通讯录之动态内存开辟版本 给Contact结构体 ...

  7. svn中文语言包安装(最详细步骤)+Language Pack+TortoiseSVN 安装

    原文链接:https://blog.csdn.net/massillon/article/details/102780782 svn中文语言包安装(最详细步骤) 一. 查看自己的SVN 版本(这里省略 ...

  8. 个人通讯管理程序C语言,个人通讯录管理系统C语言源程序(优秀版)[1]

    个人通讯录管理系统C语言源程序(优秀版)[1] 更新时间:2017/2/22 1:03:00  浏览量:613  手机版 C语言个人通讯录系统源程序: #include /*头文件*/ #includ ...

  9. c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...

    八数码问题c语言a星算法详细实验报告含代码解析 (13页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 一.实验内容和要求 八数码问题:在3 ...

最新文章

  1. Docker的使用(二:Docker客户端常用指令练习)
  2. 弃 Windows 而拥抱 Linux 之后,这本书教了新玩法
  3. IOS 项目名称修改(XCODE4.6)
  4. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 26丨餐馆营业额变化增长【难度中等】​
  5. 玩玩机器学习1——ubuntu16.04 64位安装TensorFlow GPU+python3+cuda8.0+cudnn8.0
  6. 将某一类型文件还原为无默认打开方式
  7. UI设计灵感|这才是分享美图的正确姿势!
  8. CV中必要的数学知识_奇异值的物理意义是什么?
  9. 智能体挑战赛 - “奥林匹克 跑步运动”
  10. python修改wav文件声音大小_Python更改wav文件的音高
  11. 读书笔记:《置身事内》
  12. 邮件这样写,PK 掉 99% 的同事
  13. 从WINDOW管理器差异,看WINDOWS与LINUX设计思想的文化内涵不同
  14. 【原创】RPA在BPO领域的场景分享-中科云创CEO每日分享
  15. 苹果id密码忘记了怎么重新设置?请收好这份攻略!
  16. 漫谈云数据中心的前世今生
  17. 互联网月饼大赏,你最喜欢哪家的?
  18. 华三服务器怎样用hdm安装linux,H3C R4900 G2服务器通过HDM安装系统
  19. Spring Boot整合JWT实现用户认证(附源码)
  20. 如何旋转BlackBerry BB10模拟器

热门文章

  1. 美国年薪最高的高管是谁?彭博最新薪酬排名出炉,库克只排第二
  2. 权限表管理之更新权限表数据
  3. Linux之复制、移动文件及目录命令
  4. 解决 王爽写的汇编语言的第七个验七- 寻址方式在结构化数据访问中的应用
  5. OSI七层 TCP/IP四层 TCP/IP协议栈: 不同的通信协议的大集合
  6. 实战:基于OpenCV的人眼检测
  7. 解析激光雷达中时序融合的研究现状和发展方向
  8. 通过对比对象掩码建议的无监督语义分割
  9. windows10+Python3-如何安装numpy和matplotlib包
  10. 网页制作-表单元素2