逻辑代码块:

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"/*该程序中所报的警告都可忽略不计,不造成影响
*//*通讯录:1. 可以存放一千个人的信息2. 人的信息:名字,年龄, 电话, 住址, 性别3. 增加联系人4. 删除联系人5. 查找联系人6. 修改联系人7. 排序(名字/年龄)8. 保存联系人9. 读取联系人
*///使用枚举更方便,更易懂
enum opration
{Exit,//0Add,//1Delete,//2Modify,//3Search,//4Show,//5Sort,//6Sava,//7Reading//8
};void menu()
{printf("                通讯录              \n");printf("1. 增加联系人          2. 删除联系人\n");printf("3. 修改信息          4. 查找联系人\n");printf("5. 展示所有联系人信息     6. 将联系人排序 \n");printf("7. 保存联系人信息     8. 读取联系人信息\n");printf("0. 退出                                  \n");
}int main()
{int input = 0;//创建结构通讯录conContact con;//初始化结构体Initcontact(&con);do{menu();int a = scanf("%d", &input);system("cls");switch (input){case Add:Addcontact(&con);break;case Delete:Deletecontact(&con);break;case Modify:Modifycontact(&con);break;case Search:Searchcontact(&con);break;case Show:Showcontact(&con);break;case Sort:Sortcontact(&con);break;case Sava:Savacontact(&con);break;case Reading:Readcontact(&con);break;case Exit:printf("Exit contact!\n");break;default:printf("Please input again!\n");break;}} while (input);return 0;
}

所需头文件:

#pragma once#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>//为了更改更方便,使用宏定义
#define NAME_MAX 20
#define GENDER_MAX 5
#define TELE_MAX 12
#define ADDRE_MAX 30
#define MAX 1000//定义人信息的结构体,为了方便,重定义个更简单的名字
typedef struct PeoInfo
{char name[NAME_MAX];int age;char gender[GENDER_MAX];char tele[TELE_MAX];char address[ADDRE_MAX];
}PeoInfo;//定义查看通讯录里有多少人,创建通讯录结构体
typedef struct Contact
{PeoInfo data[MAX];//1000个人的信息int sz;//已经存放信息的数量
}Contact;//初始化结构体
void Initcontact(Contact* p);//增加联系人
void Addcontact(Contact* p);//查看联系人
void Showcontact(const Contact* p);//删除联系人
void Deletecontact(Contact* p);//查找联系人
void Searchcontact(const Contact* p);//修改联系人
void Modifycontact(Contact* p);//联系人排序(姓名/年龄)
void Sortcontact(Contact* p);//存储联系人
void Savacontact(Contact* p);//读取已存储联系人的信息
void Readcontact(Contact* p);

本体实现:

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void Initcontact(Contact* p)
{assert(p);p->sz = 0;//使用内存函数初始化memset(p->data, 0, sizeof(p->data));
}void Addcontact(Contact* p)
{assert(p);//满了则不再添加if (p->sz == MAX){printf("通讯录已满!\n");return;}//否则继续添加printf("请输入要添加联系人的姓名\n");int a = scanf("%s", p->data[p->sz].name);printf("请输入要添加联系人的年龄\n");int b = scanf("%d", &(p->data[p->sz].age));printf("请输入要添加联系人的性别\n");int c = scanf("%s", p->data[p->sz].gender);printf("请输入要添加联系人的电话\n");int d = scanf("%s", p->data[p->sz].tele);printf("请输入要添加联系人的地址\n");int e = scanf("%s", p->data[p->sz].address);//添加成功,联系人加一p->sz++;//提示添加成功printf("添加成功!\n");
}void Showcontact(const Contact* p)
{assert(p);//打印已有联系人printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "姓名", "性别", "年龄", "电话", "地址");int i = 0;for (i = 0; i < p->sz; i++){printf("%-10s\t", p->data[i].name);printf("%-5s\t", p->data[i].gender);printf("%-5d\t", p->data[i].age);printf("%-13s\t", p->data[i].tele);printf("%-20s\n", p->data[i].address);}
}//查找联系人
int Fine_contact(const Contact* p, char name[])
{assert(p);int i = 0;for (i = 0; i < p->sz; i++){//当strcmp返回值等于0时,说明找到了,返回szif (strcmp((p->data[i].name), name) == 0){return i;}}//否则返回return -1;
}void Deletecontact(Contact* p)
{assert(p);//通讯录没有联系人,则无法删除if (p->sz == 0){printf("删除失败,通讯录为空!\n");return;}//否则开始删除联系人char name[NAME_MAX] = { 0 };printf("请输入被删除联系人的姓名\n");int a = scanf("%s", name);int ret = Fine_contact(p, name);//当ret等于-1时,说明没有该联系人if (ret == -1){printf("没有该联系人!\n");return;}else{//否则开始删除int j = 0;for (j = ret; j < (p->sz) - 1; j++){p->data[j] = p->data[j + 1];}//删除以后人联系人减一p->sz--;printf("删除联系人成功!\n");}
}void Searchcontact(const Contact* p)
{assert(p);char name[NAME_MAX] = { 0 };printf("请输入想要查找联系人的名字\n");int a = scanf("%s", name);int ret = Fine_contact(p, name);if (ret == -1){printf("查找失败,没有该联系人\n");}else{printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "姓名", "性别", "年龄", "电话", "地址");printf("%-10s\t", p->data[ret].name);printf("%-5s\t", p->data[ret].gender);printf("%-5d\t", p->data[ret].age);printf("%-13s\t", p->data[ret].tele);printf("%-20s\n", p->data[ret].address);}
}void Modifycontact(Contact* p)
{assert(p);//通讯录没有联系人if (p->sz == 0){printf("没有联系人,修改失败\n");return;}//通讯录有联系人,并修改信息char name[NAME_MAX] = { 0 };printf("请输入要被修改联系人的姓名\n");int a = scanf("%s", name);int ret = Fine_contact(p, name);if (ret == -1){printf("修改失败,没有该联系人\n");return;}else{printf("请输入想要修改的信息>\n");while (1){char infor[5] = { 0 };printf("可选信息如下:\n");printf("姓名 性别 年龄 电话 住址\n");int a = scanf("%s", infor);if (strcmp(infor, "姓名") == 0){printf("请输入更改后的姓名\n");int b = scanf("%s", p->data[ret].name);printf("更改成功!\n");break;}else if (strcmp(infor, "性别") == 0){printf("请输入更改后的性别\n");int c = scanf("%s", p->data[ret].gender);printf("更改成功!\n");break;}else if (strcmp(infor, "年龄") == 0){printf("请输入更改后的年龄\n");int d = scanf("%d", &(p->data[ret].age));printf("更改成功!\n");break;}else if (strcmp(infor, "电话") == 0){printf("请输入更改后的电话号码\n");int e = scanf("%s", p->data[ret].tele);printf("更改成功!\n");break;}else if (strcmp(infor, "住址") == 0){printf("请输入更改后的住址\n");int f = scanf("%s", p->data[ret].address);printf("更改成功!\n");break;}else{printf("输入错误,请重新输入\n");}}}
}//姓名比较函数
int com_name(Contact* p, int j)
{return strcmp(p->data[j].name, p->data[j + 1].name);
}//年龄比较函数
int com_age(Contact* p, int j)
{return p->data[j].age - p->data[j + 1].age;
}//采用冒泡思想排序
void Bubble_sort(Contact* p, int (*com)(Contact* s, int num))
{int i = 0;for (i = 0; i < p->sz - 1; i++){int j = 0;for (j = 0; j < p->sz - 1 - i; j++){if ( com(p, j)> 0){PeoInfo temp = p->data[j];p->data[j] = p->data[j+1];p->data[j+1] = temp;}}}
}void Sortcontact(Contact* p)
{assert(p);printf("请选择排序方式>\n");while (1){printf("可选信息如下:\n");printf("姓名 年龄\n");char sort[5] = { 0 };int a = scanf("%s", sort);//按姓名排序if (strcmp(sort, "姓名") == 0){Bubble_sort(p, com_name);printf("排序完成,排序结果如下:\n");Showcontact(p);break;}//按年龄排序else if (strcmp(sort, "年龄") == 0){Bubble_sort(p, com_age);printf("排序完成,排序结果如下:\n");Showcontact(p);break;}else{printf("选择错误,请重新输入!\n");}}
}void Savacontact(Contact* p)
{assert(p);FILE* pw = fopen("contact.txt", "w");//为空时打印错误信息并直接返回if (pw == NULL){printf("Savacontact:%s\n", strerror(errno));return;}//联系人信息存储fprintf(pw, "%d\n", p->sz);//存储联系人个数int i = 0;//存储联系人信息for (i = 0; i < p->sz; i++){fprintf(pw, "%s %s %d %s %s\n",p->data[i].name, p->data[i].gender, p->data[i].age, p->data[i].tele, p->data[i].address);}//操作完成后关闭并置于NULLfclose(pw);pw = NULL;printf("保存成功!\n");
}void Readcontact(Contact* p)
{assert(p);FILE* pr = fopen("contact.txt", "r");//为空时打印错误信息并返回if (pr == NULL){printf("Readcontact():%s\n", strerror(errno));return;}//读取练习人个数int b = fscanf(pr, "%d", &(p->sz));printf("通讯录情况如下:\n");//打印格式printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "姓名", "性别", "年龄", "电话", "地址");//读取并打印联系人信息int i = 0;for (i = 0; i < p->sz; i++){int a = fscanf(pr,"%s %s %d %s %s\n", p->data[i].name, p->data[i].gender, &(p->data[i].age), p->data[i].tele, p->data[i].address);printf("%-10s\t", p->data[i].name);printf("%-5s\t", p->data[i].gender);printf("%-5d\t", p->data[i].age);printf("%-13s\t", p->data[i].tele);printf("%-20s\n", p->data[i].address);}//操作完成后关闭并置于NULLfclose(pr);pr = NULL;
}

C语言实现通讯录初版相关推荐

  1. 教你C语言实现通讯录的详细代码

    本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 (一)实现思路 1.通讯录功能 添加好友,删除好友,查找好友,修改 ...

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

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

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

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

  4. C语言手机通讯录系统

    C语言手机通讯录系统 任务3 题目:手机通讯录系统 任务描述 (1)设计一个对手机通讯录信息进行查询.编辑.添加.删除等操作的管理程序. (2)通讯录的基本信息包括姓名.年龄.联系电话.类别(朋友.家 ...

  5. 【C语言】通讯录——源代码

    这里附上上一篇通讯录博客的链接 [C语言]通讯录_Brant_zero的博客-CSDN博客 目录 一.头文件 二.函数功能实现 三.主函数 一.头文件 //头文件 #include <stdio ...

  6. 【C语言】- 通讯录实现详解

    今天向大家介绍一个利用C语言实现通讯录的过程. 通讯录相信大家都听说过,存放一个人的信息,用来方便联系.下图为我们即将实现通讯录的功能: 图中已经描述的很清楚了,这个通讯录的容量为1000,所录入的信 ...

  7. C语言实现通讯录【二】(动态内存开辟,文件数据存储)

    C语言实现通讯录[二] 在C语言实现通讯录[一]的基础上进行优化,主要实现两大模块: 动态内存开辟 文件数据存储 动态内存开辟: 考虑到通讯录的大小无法固定,在C语言实现通讯录[一]版本上定义一个足够 ...

  8. c语言个人通讯录管理系统实验报告_C语言个人通讯录管理系统课程设计报告

    语言程序设计> C <课程设计报告 _________:__________C 设计题目语言个人通讯录管理系统 摘要 本次课程设计地题目为个人通讯录管理系统, 要求将程序中所输入地联系人姓 ...

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

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

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

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

最新文章

  1. Python--练习及面试题
  2. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】
  3. Applese 涂颜色(欧拉定理降幂+快速幂)
  4. easyui datagrid local pager 表格本地分页
  5. mysql 凭证_如何用mysql验证flask/python中的凭证?
  6. 工业以太网的优点有哪些?
  7. 【2015年第4期】基于大数据技术的P2P网贷平台风险预警模型
  8. CTO被裁,离职前给组了的高级开发们8个建议。
  9. 如何使用pattern recognition letter 的word写作模板
  10. MindManager中读图工具的使用
  11. (Maven配置)Failed to read artifact descriptor for xxx:jar解决方法
  12. paip.程序设计--扫号器跑号器结果分类设计
  13. 2021年4月蓝桥杯软件类省赛:题目+解析(完整版)
  14. 高斯计工作原理和高斯计使用方法图解
  15. 【Unity】制作圆形进度条
  16. JAVA获取服务器文件名乱码,java获取的文件名乱码问题
  17. android 视频编辑应用,安卓视频剪辑软件推荐
  18. Python批量给PDF加图片签名
  19. 计算机英语论文及翻译,计算机专业英语翻译小论文
  20. mysql 计算工作日_MySQL函数查找两个日期之间的工作日数

热门文章

  1. 华南理工会计学计算机答案,2020华工会计学原理平时作业答案
  2. js上传图片时添加水印
  3. 数据结构视频教程 严蔚敏
  4. CPC系统在win10上的安装,1小时快速安装
  5. easypr4android,车牌识别系统EasyPR的批量识别功能测试界面
  6. socket.io实现简单多人聊天室
  7. XP经典壁纸,多少人曾爱慕你年轻时的容颜
  8. MySQL 约束语法
  9. 计算机手机共享上网,上网教程_电脑wifi怎么实现手机共享上网 - 驱动管家
  10. svn 回退到指定版本无法提交_SVN终端演练-版本回退