c语言文件分类二进制,C语言实现文件版(二进制文件版)通讯录
C语言实现文件版(二进制文件版)通讯录
C语言实现文件版(二进制文件版)通讯录
通讯录功能
添加,删除,查找,修改, 全部,
储存
文章目录通讯录功能
文件结构
一、主函数文件(入口)
二、函数声明文件
三,函数的实现
功能测试添加
删除功能
查询功能
修改功能
存储功能
文件结构
头文件,函数文件,函数头文件。目录结构
提示:以下是本篇文章正文内容,下面案例可供参考
一、主函数文件(入口)
代码如下
#include "Contact.h"
void menu() {
printf("1.Add 2.Del\n");
printf("3.Search 4.Modeify\n");
printf("5.Show 6.Sort\n");
printf(" 7.存储 \n");
printf(" 0.exit \n ");
}
int main() {
int input = 0;
//创建通讯录
//struct Contact con;//包含1000个元素数组
//使用柔性数组版本
struct Contact con;//包含data指针和size和capacity
//初始化通讯录
InitContact(&con);
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input){
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case SORT:
break;
case Save:
SaveContact(&con);
break;
case 0:
break;
SaveContact(&con);
//释放动态空间
Destry(&con);
printf("退出");
default:
printf("选择错误");
}
} while (input);
return 0;
}
二、函数声明文件
#include
#include
#include
#include
//#define Max 1000
#define Namesize 20
#define Sexsize 5
#define TeleSize 5
#define AddrSize 12
#define Def 3
//个人信息
typedef struct PeoInfo{
char name[Namesize];
int age;
char sex[Sexsize];
char tele[TeleSize];
char addr[AddrSize];
}PeoInfo;
//枚举选项
enum option{
EXIT,//0
ADD,//1
DEL,//2
SEARCH,//3
MODIFY,//4
SHOW,
SORT,
Save
};
//通讯录类型
typedef struct Contact
{
//struct PeoInfo data[Max];//存放1000个信息;->1000个 struct PeoInfo 这样的数据类型
//int size;记录已经有多少人信息
//使用柔性数组
struct PeoInfo* data;//存放1000个信息;->1000个 struct PeoInfo 这样的数据类型
int size;记录已经有多少人信息
int capacity;//记录当前通讯最大容量
}Contact;
//声明函数
void InitContact(struct Contact* ps);
void AddContact(struct Contact* ps);
//删除
void DelContact( struct Contact* ps);
void ShowContact(const struct Contact* ps);
void SearchContact(const struct Contact* ps);
void ModifyContact(struct Contact* ps);
void Destry(struct Contact* ps);
//保存
void SaveContact(struct Contact* ps);
//加载文件
void Loding(struct Contact* ps);
三,函数的实现
#include "Contact.h"
//函数实现
//检查容量代码CheckCapacity
void CheckCapacity(struct Contact* ps)
{
if (ps->size==ps->capacity)
{
//增加空间
struct PeoInfo*ptr=realloc(ps->data, (ps->capacity + 2) * sizeof(struct PeoInfo));
if (ptr != NULL)
{
ps->data = ptr;
ps->capacity += 2;
printf("增加空间成功");
}
else
{
printf("增加失败");
}
}
}
void InitContact(struct Contact* ps)
{
//memset(ps->data, 0, sizeof(ps->data));
//ps->size = 0;//设置通讯录初始化0个元素
ps->data = (struct PeoInfo*)malloc(Def * sizeof(struct PeoInfo));//开辟一个3*Peinfo这样的结构体类型
if (ps->data==NULL)
{
//申请空间失败
return;
}
ps->size = 0;
ps->capacity = Def;
Loding(ps);//将文件添加到到数据里
//
}
void CheckCapacity(struct Contact* ps);
void Loding(Contact* ps)
{
PeoInfo tmp = { 0 };
FILE* pfRead = fopen("contat.dat", "rb");
if (pfRead == NULL){
printf("LoadContact::%s\n", strerror(errno));
return;
}
//读取文件,存放到通讯录中
while (fread(&tmp, sizeof(PeoInfo), 1, pfRead))
{
CheckCapacity(ps);
ps->data[ps->size] = tmp;
ps->size++;
}
fclose(pfRead);
pfRead = NULL;
}
void AddContact(struct Contact* ps)
{
//if (ps->size == Max)
//{
//printf("通讯录已经满!");
//}
//else
//{
//printf("请输入名字>>");
//scanf("%s", ps->data[ps->size].name);//ps->size下标
//printf("请输入年龄>>");
//scanf("%d", &(ps->data[ps->size].age));//age不是一个数组需要取地址操作
//printf("请输入性别>>");
//scanf("%s", ps->data[ps->size].sex);
//printf("请输入电话>>");
//scanf("%s", ps->data[ps->size].tele);
//printf("请输入地址>>");
//scanf("%s", ps->data[ps->size].addr);
//ps->size++;
//printf("添加成功\n");
//}
//检测当前通讯录的容量
//如果满了,就增加空间
CheckCapacity(ps);
//增加数据
printf("请输入名字>>");
scanf("%s", ps->data[ps->size].name);//ps->size下标
printf("请输入年龄>>");
scanf("%d", &(ps->data[ps->size].age));//age不是一个数组需要取地址操作
printf("请输入性别>>");
scanf("%s", ps->data[ps->size].sex);
printf("请输入电话>>");
scanf("%s", ps->data[ps->size].tele);
printf("请输入地址>>");
scanf("%s", ps->data[ps->size].addr);
ps->size++;
printf("添加成功\n");
}
void ShowContact(const struct Contact* ps)
{
if (ps->size == 0)
{
printf("通讯录为空格\n");
}
else
{
int i = 0;
//% -20s对齐
printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
for (i = 0; i < ps->size; i++) {
printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
ps->data[i].name,
ps->data[i].age,
ps->data[i].sex,
ps->data[i].tele,
ps->data[i].addr);
}
}
}
// static(私有)
static int FindbyName(const struct Contact* ps, char name[Namesize])
{
int i = 0;
for (i = 0; i < ps->size; i++) {
if (0 == strcmp(ps->data[i].name, name))
{
return i;
}
}
return -1;
}
void DelContact( struct Contact* ps)
{
char name[Namesize];
int ret = 0;
printf("请输入要删除人的名字:>");
scanf("%s", name);
//1.查找要删除的人在什么位置
//找到了返回名字元素所在元素下标
//找不到返回-1
ret=FindbyName(ps,name);//查找名字函数
//2.删除
if (ret ==-1)
{
printf("要删除的人不存\n");
}
else
{
//删除数据
int j = 0;
for (j = ret; j < ps->size - 1; j++)
{
ps->data[j] = ps->data[j + 1];
}
ps->size--;
printf("删除成功\n");
}
}
void SearchContact(const struct Contact* ps)
{
int ret = 0;
char name[Namesize];
printf("请输入要查找人的名字:>");
scanf("%s", name);
ret = FindbyName(ps, name);
if (ret == -1)
{
printf("要查找的人不存在\n");
}
else
{
printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
ps->data[ret].name,
ps->data[ret].age,
ps->data[ret].sex,
ps->data[ret].tele,
ps->data[ret].addr);
}
}
void ModifyContact(struct Contact* ps)
{
int ret = 0;
char name[Namesize];
printf("请输入要修改的名字:>");
scanf("%s", name);
ret = FindbyName(ps, name);
if (ret == -1)
{
printf("要修改的人不存在\n");
}
else
{
printf("开始修改操作>>");
printf("请输入名字>>");
scanf("%s", ps->data[ret].name);//ps->size下标
printf("请输入年龄>>");
scanf("%d", &(ps->data[ret].age));//age不是一个数组需要取地址操作
printf("请输入性别>>");
scanf("%s", ps->data[ret].sex);
printf("请输入电话>>");
scanf("%s", ps->data[ret].tele);
printf("请输入地址>>");
scanf("%s", ps->data[ret].addr);
printf("修改成功\n");
}
}
void Destry(struct Contact* ps)
{
free(ps->data);
ps->data = NULL;
}
void SaveContact(struct Contact* ps)
{
FILE* pfWrite = fopen("contat.dat", "wb");
if (pfWrite == NULL)
{
printf("SaveContact::%s\n", strerror(errno));
return;
}
//写通讯录中数据到为文件中
int i = 0;
for (i = 0; i < ps->size; i++)
{
fwrite(&(ps->data[i]),sizeof(PeoInfo), 1, pfWrite);
}
fclose(pfWrite);
pfWrite = NULL;
}
功能测试
[var1]
[var1]
[var1]
[var1]
存储功能
C语言实现文件版(二进制文件版)通讯录相关教程
c语言文件分类二进制,C语言实现文件版(二进制文件版)通讯录相关推荐
- 文件分类服务器,云服务器 搭建 文件分类存储
云服务器 搭建 文件分类存储 内容精选 换一换 本章节指导用户挂载已有数据的共享磁盘,只可以用作数据盘.您可以在磁盘列表中查看磁盘信息,磁盘信息符合以下条件,该磁盘支持挂载至云服务器用作数据盘.共享盘 ...
- 懒人的文件分类整理神器:归类所有文件素材
大家在平常学习和办公时,可能电脑保存各种格式的文件会越来越多,比如图片.文档.压缩包.视频等等,如果不进行整理会显得特别乱,至于如何归类呢?下面一起来试试这个新的处理技巧. 所需工具 文件素材若干 操 ...
- r语言 回归分析 分类变量_R语言进阶之广义线性回归
广义线性回归是一类常用的统计模型,在各个领域都有着广泛的应用.今天我会以逻辑回归和泊松回归为例,讲解如何在R语言中建立广义线性模型. 在R语言中我们通常使用glm()函数来构建广义线性模型,glm实际 ...
- r语言 回归分析 分类变量_R语言 | 回归分析(二)
R语言 语言学与R语言的碰撞 Xu & Yang PhoneticSan 学习参考 Discovering Statistics Using R Statistics for Linguist ...
- r语言 回归分析 分类变量_R语言下的PSM分析分类变量处理与分析步骤
最近学习了PSM,我选择了用R去跑PSM,在这过程中遇到了许多问题,最后也都一一解决了,写下这个也是希望大家在遇到相同问题的时候能够得到帮助和启发,别的应该不会遇到太难的问题了哈哈.最近我也没做什么, ...
- C语言十进制转换为二进制(附完整源码)
C语言十进制转换为二进制 C语言十进制转换为二进制完整源码 C语言十进制转换为二进制完整源码 #include <stdio.h> #include <stdlib.h>#de ...
- C语言数据类型 / 变量类型 - C语言零基础入门教程
目录 一.C 语言数据类型分类 二.C 语言整形 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 4.超出取值范围的整形 三.C 语言浮点型 float ...
- python自动化整理计算机文件(一)文件分类
在日常工作中操作计算机时会接触大量不同格式的文件,为方便检索文件,可以使用Python对其进行自动化整理,本文介绍如何通过python编程完成文件的自动分类,文件和文件夹的快速查找,重复文件的清理,图 ...
- r读取文件夹下的所有csv文件_[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。...
解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...
最新文章
- Android之记录并研究Volley框架中知识点
- HDU-1045-fire net
- c++ 10.跳转语句
- MySQL 对于千万级的大表要怎么优化?
- c语言三种循环语句,C语言三种循环语句的功能等价性
- MATLAB中文显示乱码如何解决
- fluent-bit 本地安装及配置
- 镁光c400-MTFDDAK064M固态硬盘更新固件
- 简单几步便可轻松制作思维导图,快来查收这份干货
- 当我真正开始爱自己,我才认识到,所有的痛苦和情感折磨,都...
- StarRocks 社区一周年:极速统一,感谢遇见!
- LaTeX设置图片左对齐
- 杭州旭航集团,申请纳斯达克IPO上市,募资9800万美元
- useCallback 的问题和隐患的解决方案 - 胡耀(字节跳动)
- Android Studio打不开,出现start failed的报错
- Mybatis-01-配置详解
- python金融应用的好书推荐卡_十大金融好书推荐
- ansys怎么合并体_ANSYS梁体组合连接计算方法的讨论
- Android 简单的内存管理器
- 【数字化】“网络效应”指南:13 种网络效应全解析,带你了解巨头成功的秘密
热门文章
- 每日一题 2020.05.11
- 记一次服务器执行MySQL耗时问题
- ACE总监侯圣文全面解析特训方法
- 深度评测丨GaussDB(for Redis)大Key操作的影响
- 顶会VLDB‘22论文解读:CAE-ENSEMBLE算法
- ECS实践案例丨逻辑卷的创建和扩容操作指导
- 一个编程指南还有这么多道道儿?
- 十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略
- RDS关系型数据库 入门 01 创建关系型数据库实例【华为云分享】
- java filter注入_如何在Java Filter 中注入 Service