#include //静态方法初始化

//void InitContact(Contact *pcon)

//{

//assert(pcon != NULL);

//pcon->sz = 0;

//memset(pcon->data, 0, sizeof(pcon->data));

//}

//动态方法初始化

void InitContact(Contact *pcon)

{

assert(pcon != NULL);

pcon->sz = 0;

pcon->data = (Info*)malloc(3 * sizeof(Info));

if (pcon->data == NULL)

{

perror("InitContact::use malloc");

exit(EXIT_FAILURE);//退出程序

}

pcon->capacity = 3;

//加载文件中的保存信息

LoadContact(pcon);

}

void DestroyContact(Contact *pcon)

{

assert(pcon != NULL);

pcon->sz = 0;

pcon->capacity = 0;

free(pcon->data);

pcon->data = NULL;

}

int Check_Capacity(Contact *pcon)

{

assert(pcon);

if (pcon->capacity == pcon->sz)

{

//扩容

Info *ptr=realloc(pcon->data, (pcon->capacity + 2)*sizeof(Info));

if (ptr != NULL)

{

pcon->data = ptr;

printf("增容成功!");

return 1;

}

}

return 1;

}

void AddContact(Contact *pcon)

{

assert(pcon != NULL);

/*if (pcon->sz == MAX)

{

printf("通讯录已满,无法添加!\n");

}*/

if (0 == Check_Capacity(pcon))

{

printf("增容失败,无法添加");

return;

}

else

{

printf("请输入名字:> ");

scanf("%s", pcon->data[pcon->sz].name);

printf("请输入年龄:> ");

scanf("%d", &(pcon->data[pcon->sz].age));

printf("请输入性别:> ");

scanf("%s", pcon->data[pcon->sz].sex);

printf("请输入电话:> ");

scanf("%s", pcon->data[pcon->sz].tele);

printf("请输入地址;> ");

scanf("%s", pcon->data[pcon->sz].addr);

pcon->sz++;

}

}

void ShowContact(const Contact* pcon)

{

int i = 0;

//名字 年龄 性别 电话 地址

//张三 20 男 123 西安

printf("%10s\t%4s\t%4s\t%12s\t%15s\n", "名字", "年龄", "性别", "电话", "地址");

for (i = 0; i < pcon->sz; i++)

{

printf("%10s\t%4d\t%4s\t%12s\t%15s\n",

pcon->data[i].name,

pcon->data[i].age,

pcon->data[i].sex,

pcon->data[i].tele,

pcon->data[i].addr);

//打印一个人的信息

}

}

static int Find(Contact *pcon, char name[])

{

int i = 0;

for (i = 0; i < pcon->sz; ++i)

{

if (0 == strcmp(pcon->data[i].name, name))

{

return i;

}

}

return -1;

}

void DelContact(Contact *pcon)

{

int i = 0;

int j = 0;

int ret = 0;

char name[MAX_Name] = { 0 };

printf("请输入要删除的人的名字:> ");

scanf("%s", &name);

if (pcon->sz == 0)

{

printf("通讯录已空,无法删除!\n");

return;

}

ret = Find(pcon, name);

if (ret==-1)

{

printf("要删除的人不存在!\n");

return;

}

if (ret != -1 && ret <= pcon->sz)

{

//删除

for (j = ret; j < pcon->sz - 1; ++j)

{

pcon->data[j] = pcon->data[j + 1];

}

}

pcon->sz--;

printf("删除成功!\n");

}

void SearchContact(const Contact *pcon)

{

int pos = 0;

char name[MAX_Name] = { 0 };

assert(pcon != NULL);

printf("请输入要查找的人的名字:> ");

scanf("%s", &name);

pos = Find(pcon, name);

if (pos == -1)

{

printf("要查找的人的信息不存在!\n");

}

else if (pos != -1)

{

printf("%10s\t%4s\t%4s\t%12s\t%15s\n", "名字", "年龄", "性别", "电话", "地址");

printf("%10s\t%4d\t%4s\t%12s\t%15s\n",

pcon->data[pos].name,

pcon->data[pos].age,

pcon->data[pos].sex,

pcon->data[pos].tele,

pcon->data[pos].addr);//打印一个人的信息

}

else

printf("要查找的人不存在!\n");

}

void ModifyContact(Contact *pcon)

{

char name[MAX_Name] = { 0 };

int pos = 0;

assert(pcon != NULL);

printf("请输入要修改的人的名字:> ");

scanf("%s", &name);

pos = Find(pcon, name);

if (pos == -1)

printf("要修改的人的信息不存在!\n");

else

{

printf("请输入名字:");

scanf("%s", pcon->data[pos].name);

printf("请输入年龄:");

scanf("%d", &(pcon->data[pos].age));

printf("请输入性别:");

scanf("%s", pcon->data[pos].sex);

printf("请输入电话:");

scanf("%s", pcon->data[pos].tele);

printf("请输入地址:");

scanf("%s", pcon->data[pos].addr);

}

}

void SortContact(Contact *pcon)//冒泡排序

{

int i = 0;

int j = 0;

assert(pcon != NULL);

for (i = 0; i < pcon->sz; ++i)

{

int flag = 1;//表示已经排好

for (j = 0; j < pcon->sz - 1; ++j)

{

if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)

{

Info tmp = pcon->data[j];

pcon->data[j] = pcon->data[j + 1];

pcon->data[j + 1] = tmp;

}

}

if (flag == 1)

{

printf("已经排好了!\n");

break;

}

}

}

void EmptyContact(Contact *pcon)

{

pcon->sz = 0;

printf("清空成功!!\n");

}

void SaveContact(Contact *pcon)

{

FILE *pf = fopen("contact.data", "wb");

int i = 0;

if (pf == NULL)

{

perror("fopen");

return;

}

//写数据

for (i = 0; i < pcon->sz; i++)

{

fwrite(&(pcon->data[i]), sizeof(Info), 1, pf);

}

fclose(pf);

pf = NULL;

}

void LoadContact(Contact *pcon)

{

FILE* pf = fopen("contact.data", "rb");

Info tmp = { 0 };

if (pf == NULL)

{

perror("LoadContact::fopen");

return;

}

//读文件

while (fread(&tmp, sizeof(Info),1,pf)>=1)

{

//将读取到的元素放在通讯录中

Check_Capacity(pcon);

pcon->data[pcon->sz] = tmp;

pcon->sz++;

}

fclose(pf);

pf = NULL;

}

c语言通讯录文件存储位置,c语言实现通讯录(存入文件)相关推荐

  1. 360健康助手文件存储位置 获取图片

    最近发现360健康助手的背景图都不错,想留下来当背景,故找一找-- 文件存储位置 %AppData%\Roaming\360safe\DesktopRest\eye bk_image目录中是背景图片, ...

  2. 微信文件传输助手文件存储位置问题

    记录微信中文件传输助手文件存储位置问题. 参考手机型号:华为Mate10. 文件位于:Android\data\com.tencent.mm\MicroMsg\Download 上述位置是文档的位置, ...

  3. 录屏软件Camtasia9的录屏文件存储位置/好用的免费录屏软件代替

    1.Camtasia9的录屏默认存放位置 1.修改Camtasia9的文件存放位置 Camtaisa的文件存放位置有好几个,而且修改的地方都比较隐晦.并且无论你安装软件时将软件安装到哪个盘,最后都会在 ...

  4. win10专业版无法找到便签文件存储位置的解决方法

    Win10 系统是大多数职场人士都在用的电脑系统, win10 系统优势很多,但是跟职场人士之前用的 win7 . win8 系统比起来,会略微有差异.比如,有的上班族会发现, win10 专业版无法 ...

  5. python---ISIC2018预处理---根据类别文件存储位置复制

    python-预处理-根据类别文件存储位置复制 最近在学习卷积神经网络,第一步做标签环节.数据集采用的是ISIC-2018数据,由于所以数据存储在一个文件夹里如下图所示. 其分类信息保存在.csv文件 ...

  6. 小米手机应用双开文件存储位置+文件复制导出

    小米手机应用双开文件存储位置 手机查看 打开手机自带的文件管理 选择手机 点击更多即可找到应用双开 但若想访问Android文件下data目录则会受到限制 即使点击前往查看所能查看的也仅是原始应用的A ...

  7. c语言采用文件存储数据,C语言读写文件大全 之 基础篇

    一直想着把C语言和C++关于文件操作的相关内容总结一下,这样在使用的时候就可以顺手拈来,嗯,这就是好记性不如烂笔头.既然是文件操作,那么开篇就从"文件"的介绍开始. 1.文件 文件 ...

  8. oracle修改数据文件存储位置,oracle 修改数据库文件位置

    Oracle 体系结构 Oracle 服务器 如图所示:由oracle实例(INSTANCE)和数据库(database)组成. 1) Instance 实例用于管理和调用数据库,是由oracle系统 ...

  9. hadoop文件存储位置_Hadoop文件的存储格式实例详解

    sequence文件存储格式 1.txt 纯文本格式,若干行记录.默认用字符编码存储 2.SequenceFile格式(顺序文件格式,可进行切割) key-value 格式进行存储,最终形成的是一个二 ...

最新文章

  1. pycharm 常用代码签名
  2. Android零碎知识点-更新中
  3. 各个级别镜像之间的跳转模型
  4. 使用Action,Data属性启动系统Activity
  5. Oracle数据库逻辑存储结构管理相关问题与解决
  6. 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了
  7. 【MyBatis框架】Mybatis开发dao方法第一部分
  8. 解决Python报错:local variable ‘xxxxx‘ referenced before assignment
  9. 售价17999元起,华为Mate X2发布;程序员10万“买”了个北京户口;赏金猎人获苹果5000美元奖励 | 极客头条...
  10. export ,export default 和 import 区别以及用法
  11. java xcap,xcap发包工具的简单使用2(发送报文)
  12. 去除winrar广告
  13. 简谈PCB设计软件对比
  14. 虚拟机 桥接模式和NAT模式下的ip地址、更改kali虚拟机的网络适配器
  15. c语言程序设计小球弹跳,C语言实现弹跳小球
  16. 苏格拉底-爱情、婚姻、外遇、生活
  17. 设计模式之调停者模式
  18. 强大的装逼,表白,炫富,恶搞短视频制作神器微信小程序源码支持多种流量主
  19. 第 05 篇 如何使用 SQL 语句进行模糊查找?
  20. 如何在lion系统下安装Xcode 3.2.x版本

热门文章

  1. Windows_Reverse2逆向寒假生涯(25/100)
  2. 渗透测试之子域到父域的横向移动(Sid History)
  3. MySQL SELECT:数据表查询语句
  4. 数据库的UNDO和REDO
  5. MySQL读写分离一主多从实现
  6. Redis根据是否存在设置值
  7. VS与SVN的交互VisualSVN
  8. 微软服务器系统玩游戏,微软将于2020年1月22日关闭Windows7游戏服务器
  9. png 微软ppt 透明度_用5个技巧教你做出让人眼前一亮的「PPT章节页」,一看就会...
  10. 2021 版 Spring Boot 基础知识复习手册(2w字,建议收藏)