c语言通讯录文件存储位置,c语言实现通讯录(存入文件)
#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语言实现通讯录(存入文件)相关推荐
- 360健康助手文件存储位置 获取图片
最近发现360健康助手的背景图都不错,想留下来当背景,故找一找-- 文件存储位置 %AppData%\Roaming\360safe\DesktopRest\eye bk_image目录中是背景图片, ...
- 微信文件传输助手文件存储位置问题
记录微信中文件传输助手文件存储位置问题. 参考手机型号:华为Mate10. 文件位于:Android\data\com.tencent.mm\MicroMsg\Download 上述位置是文档的位置, ...
- 录屏软件Camtasia9的录屏文件存储位置/好用的免费录屏软件代替
1.Camtasia9的录屏默认存放位置 1.修改Camtasia9的文件存放位置 Camtaisa的文件存放位置有好几个,而且修改的地方都比较隐晦.并且无论你安装软件时将软件安装到哪个盘,最后都会在 ...
- win10专业版无法找到便签文件存储位置的解决方法
Win10 系统是大多数职场人士都在用的电脑系统, win10 系统优势很多,但是跟职场人士之前用的 win7 . win8 系统比起来,会略微有差异.比如,有的上班族会发现, win10 专业版无法 ...
- python---ISIC2018预处理---根据类别文件存储位置复制
python-预处理-根据类别文件存储位置复制 最近在学习卷积神经网络,第一步做标签环节.数据集采用的是ISIC-2018数据,由于所以数据存储在一个文件夹里如下图所示. 其分类信息保存在.csv文件 ...
- 小米手机应用双开文件存储位置+文件复制导出
小米手机应用双开文件存储位置 手机查看 打开手机自带的文件管理 选择手机 点击更多即可找到应用双开 但若想访问Android文件下data目录则会受到限制 即使点击前往查看所能查看的也仅是原始应用的A ...
- c语言采用文件存储数据,C语言读写文件大全 之 基础篇
一直想着把C语言和C++关于文件操作的相关内容总结一下,这样在使用的时候就可以顺手拈来,嗯,这就是好记性不如烂笔头.既然是文件操作,那么开篇就从"文件"的介绍开始. 1.文件 文件 ...
- oracle修改数据文件存储位置,oracle 修改数据库文件位置
Oracle 体系结构 Oracle 服务器 如图所示:由oracle实例(INSTANCE)和数据库(database)组成. 1) Instance 实例用于管理和调用数据库,是由oracle系统 ...
- hadoop文件存储位置_Hadoop文件的存储格式实例详解
sequence文件存储格式 1.txt 纯文本格式,若干行记录.默认用字符编码存储 2.SequenceFile格式(顺序文件格式,可进行切割) key-value 格式进行存储,最终形成的是一个二 ...
最新文章
- pycharm 常用代码签名
- Android零碎知识点-更新中
- 各个级别镜像之间的跳转模型
- 使用Action,Data属性启动系统Activity
- Oracle数据库逻辑存储结构管理相关问题与解决
- 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了
- 【MyBatis框架】Mybatis开发dao方法第一部分
- 解决Python报错:local variable ‘xxxxx‘ referenced before assignment
- 售价17999元起,华为Mate X2发布;程序员10万“买”了个北京户口;赏金猎人获苹果5000美元奖励 | 极客头条...
- export ,export default 和 import 区别以及用法
- java xcap,xcap发包工具的简单使用2(发送报文)
- 去除winrar广告
- 简谈PCB设计软件对比
- 虚拟机 桥接模式和NAT模式下的ip地址、更改kali虚拟机的网络适配器
- c语言程序设计小球弹跳,C语言实现弹跳小球
- 苏格拉底-爱情、婚姻、外遇、生活
- 设计模式之调停者模式
- 强大的装逼,表白,炫富,恶搞短视频制作神器微信小程序源码支持多种流量主
- 第 05 篇 如何使用 SQL 语句进行模糊查找?
- 如何在lion系统下安装Xcode 3.2.x版本
热门文章
- Windows_Reverse2逆向寒假生涯(25/100)
- 渗透测试之子域到父域的横向移动(Sid History)
- MySQL SELECT:数据表查询语句
- 数据库的UNDO和REDO
- MySQL读写分离一主多从实现
- Redis根据是否存在设置值
- VS与SVN的交互VisualSVN
- 微软服务器系统玩游戏,微软将于2020年1月22日关闭Windows7游戏服务器
- png 微软ppt 透明度_用5个技巧教你做出让人眼前一亮的「PPT章节页」,一看就会...
- 2021 版 Spring Boot 基础知识复习手册(2w字,建议收藏)