对于通讯的实习,想必会是,学习计算机专业的毕业设计吧!!但是,却是难到了不少人!!叫苦连天!也有不少人在咨询笔者的!!最近以来,笔者刚学习了结构体!所以顺便花了三天多,研究了一下通讯录的实现!所以,笔者打算分享出来,与大家共勉!!

注意,这个是:静态的版本!!其他的版本,请等待笔者后续更新!!请不要着急!


下面,我们需要在写之前,有自己的想法:在以下三个文件名中,分别有自己的专门输入的东西!!

1.test.c  : 测试通讯录的!

2.contact.c  : 通讯录的实现!

3.contact.h  : 通讯录的声明!


在通讯录中:定义100个人的信息,每个人的信息都包含:

姓名

性别

电话

年龄

住址

在菜单栏中的提示:也是该通讯录的主要内容!!

1.增加联系人

2.修改指定联系人

3.删除指定联系人

4.查找指定联系人

5.排序通讯录

6.显示通讯录的信息

下面请看笔者的源代码!!

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");
}int main()
{int input = 0;//创建通讯录struct Contact con;//通讯录//初始化通讯录InitContact(&con);do{    menu();printf("请选择>:");scanf("%d", &input);switch (input){case 1:AddContact(&con);break;case 2:DelContact(&con);break;case 3:SearchContact(&con);break;case 4:ModifyContact(&con);break;case 5:ShowContact(&con);break;case 6:SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

在contact .c文件中:通讯录的实现!

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void InitContact(struct Contact* pc)
{assert(pc);pc->sz = 0;memset(pc->data, 0, MAX *sizeof(struct PeoInfo));
}void AddContact(struct Contact* pc)
{assert(pc);if (pc->sz == MAX){printf("通讯录已满,无法添加数据\n");return;}//增加人的信息printf("请输入名字:>");scanf("%s", pc->data[pc->sz].name);printf("请输入性别:>");scanf("%s", pc->data[pc->sz].sex);printf("请输入年龄:>");scanf("%d", &(pc->data[pc->sz].age));printf("请输入电话:>");scanf("%s", pc->data[pc->sz].tele);printf("请输入地址:>");scanf("%s", pc->data[pc->sz].addr);pc->sz++;printf("成功增加联系人\n");
}void ShowContact(const struct Contact* pc)
{int i = 0;printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[i].name,pc->data[i].sex,pc->data[i].age,pc->data[i].tele,pc->data[i].addr);}
}static int FindByName(const struct Contact* pc, char name[])
{int i = 0;for (i = 0; i < pc->sz; i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}return -1;
}void DelContact(struct Contact* pc)
{char name[MAX_NAME];printf("请输入要删除人的名字:>");scanf("%s", name);//查找一下指定的人是否存在int ret = FindByName(pc, name);if (ret == -1)printf("要删除的人不存在\n");else{//删除int j = 0;for (j = ret; j < pc->sz-1; j++){pc->data[j] = pc->data[j + 1];}pc->sz--;printf("成功删除指定联系人\n");}
}void SearchContact(const struct Contact* pc)
{char name[MAX_NAME];printf("请输入要查找的人的名字:>");scanf("%s", name);//查找一下指定的人是否存在int ret = FindByName(pc, name);if (ret == -1)printf("要查找的人不存在\n");else{printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址");printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[ret].name,pc->data[ret].sex,pc->data[ret].age,pc->data[ret].tele,pc->data[ret].addr);}
}void ModifyContact(struct Contact* pc)
{printf("请输入要修改人的名字:>");char name[MAX_NAME];scanf("%s", name);int ret = FindByName(pc, name);if (ret == -1)printf("要修改的人不存在\n");else{printf("请输入名字:>");scanf("%s", pc->data[ret].name);printf("请输入性别:>");scanf("%s", pc->data[ret].sex);printf("请输入年龄:>");scanf("%d", &(pc->data[ret].age));printf("请输入电话:>");scanf("%s", pc->data[ret].tele);printf("请输入地址:>");scanf("%s", pc->data[ret].addr);printf("修改成功\n");}
}//int CmpByAge(const void* e1, const void* e2)
//{
//  return ((struct PeoInfo*)e1)->age - ((struct PeoInfo*)e2)->age;
//}
//
按照年龄来排序
//void SortContact(struct Contact* pc)
//{
//  qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByAge);
//}int CmpByName(const void* e1, const void* e2)
{return strcmp( ((struct PeoInfo*)e1)->name, ((struct PeoInfo*)e2)->name);
}//按照年龄来排序
void SortContact(struct Contact* pc)
{qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByName);
}

在contact.h文件中:通讯录的声明!

#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30//表示人信息
struct PeoInfo
{char name[MAX_NAME];char sex[MAX_SEX];char tele[MAX_TELE];int age;char addr[MAX_ADDR];
};//通讯录
struct Contact
{struct PeoInfo data[MAX];int sz;
};//初始化通讯录
void InitContact(struct Contact* pc);//增加人的信息到通讯录
void AddContact(struct Contact* pc);//显示通讯录中的信息
void ShowContact(const struct Contact* pc);//删除指定联系人
void DelContact(struct Contact* pc);//查找指定联系人
void SearchContact(const struct Contact* pc);//修改指定联系人的信息
void ModifyContact(struct Contact* pc);//排序通讯录中的信息 - 年龄
void SortContact(struct Contact* pc);

上面就是一个静态的通讯录源代码!!与大家分享一下!!若有不懂得地方,请各位老铁及时私聊!!

通讯录的实现(另附完整源码)相关推荐

  1. JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码)

    JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码) dpUniquePaths.js完整源代码 dpUniquePaths.test.js完整源代码 dpUniquePaths.j ...

  2. JavaScript实现唯一路径问题的回溯方法的算法(附完整源码)

    JavaScript实现唯一路径问题的回溯方法的算法(附完整源码) btUniquePaths.js完整源代码 btUniquePaths.test.js完整源代码 btUniquePaths.js完 ...

  3. JavaScript实现squareMatrixRotation方阵旋转算法(附完整源码)

    JavaScript实现squareMatrixRotation方阵旋转算法(附完整源码) squareMatrixRotation.js完整源代码 squareMatrixRotation.test ...

  4. JavaScript实现递归楼梯问题(带记忆的递归解决方案)算法(附完整源码)

    JavaScript实现递归楼梯问题(带记忆的递归解决方案)算法(附完整源码) recursiveStaircaseMEM.js完整源代码 recursiveStaircaseMEM.test.js完 ...

  5. JavaScript实现递归楼梯问题(迭代解决方案)算法(附完整源码)

    JavaScript实现递归楼梯问题(迭代解决方案)算法(附完整源码) recursiveStaircaseIT.js完整源代码 recursiveStaircaseIT.test.js完整源代码 r ...

  6. JavaScript实现递归楼梯问题(动态规划解决方案)算法(附完整源码)

    JavaScript实现递归楼梯问题(动态规划解决方案)算法(附完整源码) recursiveStaircaseDP.js完整源代码 recursiveStaircaseDP.test.js完整源代码 ...

  7. JavaScript实现递归楼梯问题(蛮力解决方案)算法(附完整源码)

    JavaScript实现递归楼梯问题(蛮力解决方案)算法(附完整源码) recursiveStaircaseBF.js完整源代码 recursiveStaircaseBF.test.js完整源代码 r ...

  8. JavaScript实现截留雨水问题的动态编程方法算法(附完整源码)

    JavaScript实现截留雨水问题的动态编程方法算法(附完整源码) dpRainTerraces.js完整源代码 dpRainTerraces.tset.js完整源代码 dpRainTerraces ...

  9. JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码)

    JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码) bfRainTerraces.js完整源代码 bfRainTerraces.test.js完整源代码 bfRainTerraces. ...

  10. JavaScript实现knight Tour骑士之旅算法(附完整源码)

    JavaScript实现knight Tour骑士之旅算法(附完整源码) knightTour.js完整源代码 knightTour.test.js完整源代码 knightTour.js完整源代码 f ...

最新文章

  1. Samba如何配置共享资源
  2. 【POJ 3273】 Monthly Expense (二分)
  3. Cocos2d-x 3.0正式版及android环境搭建
  4. 揭秘.NET Core剪裁器背后的技术
  5. 最强云硬盘来了,让AI模型迭代从1周缩短到1天
  6. Spring-Security (学习记录二)--修改为自己的登录页面
  7. 分布式文件系统MooseFs部署(二)
  8. 错过现场不要紧,数据智能技术论坛文章、视频大回顾
  9. 黑马程序员传智播客python 协程greenlet gevent学习笔记
  10. 【Multisim仿真】10秒倒计时8路抢答器
  11. IoT全品类全场景来了,但5G时代“大雁群飞”仍需紧盯“服务”
  12. mysql查询字段最大的一条数据类型_SQL查询一个表中类别字段中Max()最大值对应的记录...
  13. 几款入夏品牌包包可以看看
  14. 服务器winsxs文件夹怎么清理工具,Winsxs文件夹内容怎么清理 Winsxs文件夹瘦身清理教程图解...
  15. python基础爬虫篇
  16. Apollo(阿波罗)(一)环境搭建
  17. 云桌面服务器中兴,随需而动——中兴通讯VDI+VOI融合云桌面解决方案
  18. 【开发随记】【提效】工作习惯那些事系列之一——To-Do List
  19. 比较好的文档翻译软件-哪个翻译软件最精准
  20. 深入理解HTML表格秘籍

热门文章

  1. 腾讯汤道生:2020年加大投入产业互联网生态建设
  2. arduino如何加载OLED屏幕库
  3. 2022 极术通讯—AR的元宇宙
  4. 新书上市|历经十年,这本9.2分的数学经典终于再版了!
  5. html css设置文本溢出隐藏
  6. 每日算法面试题,大厂特训二十八天——第九天(位运算)
  7. 唐朝为什么出现多次官修家谱的现象?唐朝家谱的形式有什么变化?
  8. CreateEvent方法详解
  9. win10电脑wifi连不上,一直显示正在检测网络要求
  10. 2021-02-18-ctf-坚持60s-反编译