目录


一、Contact.h

二、Contact.c

三、test.c


一、Contact.h

#pragma once
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>#define Max 1000
#define Name_Max 10
#define Sex_Max 5
#define Tele_Max 12
#define Addr_Max 10typedef struct PeoInfo
{char name[Name_Max];int age;char sex[Sex_Max];char tele[Tele_Max];char addr[Addr_Max];
}PeoInfo;typedef struct Contact
{PeoInfo arr[Max];int sz;
}Contact;//初始化通讯录
void InitContact(Contact* pc);//增加联系人
void AddContact(Contact* pc);//删除指定联系人
void DelContact(Contact* pc);//查询指定联系人
void SearchContact(const Contact* pc);//修改指定联系人
void ModifyCotact(Contact* pc);//展示通讯录
void ShowContact(const Contact* pc);//清空通讯录
void ClearContact(Contact* pc);//将通讯录按照姓名排序
void SortContact(Contact* pc);

二、Contact.c

#include "Contact.h"//初始化通讯录
void InitContact(Contact* pc)
{assert(pc);memset(pc->arr, 0, sizeof(pc->arr));pc->sz = 0;
}//增加联系人
void AddContact(Contact* pc)
{assert(pc);if (pc->sz == Max){printf("通讯录已满,无法添加\n");return;}printf("请输入姓名:>");scanf("%s", pc->arr[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->arr[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->arr[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->arr[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->arr[pc->sz].tele);printf("新增联系人成功\n");(pc->sz)++;
}//根据姓名匹配联系人
int FindByName(const Contact* pc, char name[])
{assert(pc);int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(name, pc->arr[i].name) == 0){return i;}}return -1;
}//删除指定联系人
void DelContact(Contact* pc)
{assert(pc);if (pc->sz == 0){printf("通讯录为空,无法删除\n");return;}char name[Name_Max] = { 0 };printf("请输入想要删除的联系人姓名:>");scanf("%s", name);int ret = FindByName(pc, name);if (ret == -1){printf("该联系人不存在\n");return;}else{int i = 0;for (i = ret; i < pc->sz - 1; i++){pc->arr[i] = pc->arr[i + 1];}(pc->sz)--;printf("删除联系人成功\n");}
}//查询指定联系人
void SearchContact(const Contact* pc)
{assert(pc);char name[Name_Max] = { 0 };printf("请输入想要查询的联系人姓名->");scanf("%s", name);int ret = FindByName(pc, name);if (ret == -1){printf("该联系人不存在\n");}else{printf("%-10s\t%-5s\t%-2s\t%-10s\t%-12s\t\n","姓名", "年龄", "性别", "地址", "电话");printf("%-10s\t%-5d\t%-2s\t%-10s\t%-12s\t\n",pc->arr[ret].name,pc->arr[ret].age,pc->arr[ret].sex,pc->arr[ret].addr,pc->arr[ret].tele);}
}//修改指定联系人
void ModifyCotact(Contact* pc)
{assert(pc);char name[Name_Max] = { 0 };printf("请输入想要修改的联系人姓名:>");scanf("%s", name);int ret = FindByName(pc, name);if (ret == -1){printf("该联系人不存在\n");}else{printf("请输入姓名:>");scanf("%s", pc->arr[ret].name);printf("请输入年龄:>");scanf("%d", &(pc->arr[ret].age));printf("请输入性别:>");scanf("%s", pc->arr[ret].sex);printf("请输入地址:>");scanf("%s", pc->arr[ret].addr);printf("请输入电话:>");scanf("%s", pc->arr[ret].tele);printf("修改联系人成功\n");}
}//展示通讯录
void ShowContact(const Contact* pc)
{assert(pc);printf("%-10s\t%-5s\t%-2s\t%-10s\t%-12s\t\n","姓名", "年龄", "性别", "地址", "电话");int i = 0;for (i = 0; i < pc->sz; i++){printf("%-10s\t%-5d\t%-2s\t%-10s\t%-12s\t\n",pc->arr[i].name,pc->arr[i].age,pc->arr[i].sex,pc->arr[i].addr,pc->arr[i].tele);}
}//清空通讯录
void ClearContact(Contact* pc)
{if (pc->sz == 0){printf("通讯录为空,无需清空\n");return;}else{memset(pc->arr, 0, sizeof(pc->arr));pc->sz = 0;printf("通讯录已清空\n");}
}//按照姓名排序
int SortByName(const void* p1, const void* p2)
{assert(p1 && p2);return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name);
}//将通讯录按照姓名排序
void SortContact(Contact* pc)
{assert(pc);qsort(pc->arr, pc->sz, sizeof(pc->arr[0]), SortByName);printf("排序成功\n");
}

三、test.c

#include "Contact.h"void menu(void)
{printf("**********************************\n");printf("******  1.add     2.del     ******\n");printf("******  3.search  4.modify  ******\n");printf("******  5.show    6.clear   ******\n");printf("******  7.sort    0.exit    ******\n");printf("**********************************\n");
}int main()
{Contact con;//初始化通讯录InitContact(&con);int input = 0;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:ModifyCotact(&con);break;case 5:ShowContact(&con);break;case 6:ClearContact(&con);break;case 7:SortContact(&con);break;case 0:printf("已退出程序\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);return 0;
}

C语言——简易版通讯录完整代码相关推荐

  1. 电子英汉词典附带背单词功能C语言程序设计,附录完整代码

    电子英汉词典附带背单词功能C语言程序设计,附录完整代码 系统需求分析 本程模拟面对英语单词有背诵和查询需求的用户.用户在实际学习过程中可能会遇到学习单词时实体单词书体积大不方便的情况,这时就可以使用便 ...

  2. c语言实现简单通讯录(仅代码)

    C语言实现简单通讯录(仅代码) 头文件部分 #pragma once //头文件区域 #include<stdio.h> #include<Windows.h> #includ ...

  3. 简易通讯录的实现(c语言,后附完整代码)

    今天我要介绍的是通讯录的实现(c语言) 首先先简单说一下思路吧. 一共需要三个文件分别为test.c(测试通讯录),contact.h(所需函数及头文件),contact.c(通讯录功能实现).因为通 ...

  4. 基于B树的图书管理系统(C语言)(含完整代码)

    目录: 一.实现的设计要求 1.基本要求 2.额外选做要求 二.项目文件管理 三.完整代码 1.实现的接口 2.头文件 BTreeBook.h 全部代码 3.源文件 BTreeBook.cpp 全部代 ...

  5. 生成式对抗网络实战(一)——手写数字生成(CPU本地版)完整代码加详解

    [注1]代码的原文来自以下网址,修改部分及增添注释(基本上都注释了).修改版整体见最后,原版下方链接,均可以跑通,有问题欢迎交流.生成对抗网络GAN---生成mnist手写数字图像示例( 附代码)_陶 ...

  6. 花狗C语言彩色贪吃蛇(完整代码)

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平 ...

  7. ZZNUOJ_C语言1001 : 植树问题(完整代码)

    题目描述 某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且m>n),请问每位同学平均可以植树几株?还有几株剩余? 输入 输入两个整数m和n,分别表示树苗的数量和学生的人数(m& ...

  8. ZZNUOJ_C语言1011 : 圆柱体表面积(完整代码)

    题目描述 输入圆柱体的底面半径r和高h,计算圆柱体的表面积并输出到屏幕上.要求定义圆周率为如下宏常量   #define PI 3.14159 输入 输入两个实数,表示圆柱体的底面半径r和高h. 输出 ...

  9. 快速排序(适用于C语言初学者,附完整代码)

    快速排序 基本思想 快速排序的基本思想就是寻找一个轴值,此轴值将待排序数列分成两部分,左侧的数据均小于轴值,右侧的数据均大于轴值,在从左右两侧分别找取各自的轴值,很明显用到了递归的思想,此文轴值的寻找 ...

最新文章

  1. OpenAI魔改大模型,参数减少100倍!13亿参数InstructGPT碾压GPT-3
  2. 2008秋季-计算机软件基础-有序表合并 教材 P79, ex3
  3. 一位软件工程师的6年总结(转)
  4. Runnable接口介绍(中文文档)
  5. 概率论与数理统计中的算子半群 第一讲 Banach-Steinhaus定理2 Banach-Steinhaus定理的应用
  6. java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法
  7. boost::mpi模块对 all_gather() 集体的测试
  8. 用设计模式去掉没必要的状态变量 —— 状态模式
  9. ssl2342-打击犯罪【并查集】
  10. HTTP协议简介_请求消息/请求数据包/请求报文_响应消息/响应数据包/响应报文
  11. 学python入门需要什么基础?
  12. MongoDB多条件分组聚合查询
  13. 【JavaScript回顾】闭包
  14. Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换
  15. 2009年英国大学综合排名
  16. 数字转换汉语中人民币的大写
  17. SEO学习笔记一:Google搜索引擎背后的运作模式
  18. 未能启动apache服务器,教你apache服务无法启动一直失败怎么办
  19. 06.ESP8266驱动OLED屏
  20. Mysql大字段blob返回是数字_innodb使用大字段text,blob的一些优化建议(转)

热门文章

  1. Cisco之路由和OSPF动态路由协议
  2. 递归与分治 | 2:最接近点对问题 —— 例题:套圈
  3. charles之map功能
  4. php之laravel项目的部署
  5. 10 个杀手级的自动化脚本
  6. oracle中怎么获取系统时间,oracle中得到当前系统时间
  7. 关于360安全浏览器的分析以及奇虎360走向。。【个人原创】
  8. 数字图像处理 图像对比度增强算法概览
  9. 这些软件太强了,Windows必装!尤其程序员!
  10. ADB 调试问题记录一:error:failed to copy