C语言通讯录管理系统 利用fwrite和fread进行文件存取
2018-01-27 20:23
656 查看
本通讯录管理系统采用 C语言编写,运行直接可以使用。由头文件 1.h 与源文件test.c构成。
fread 是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
本通讯录fread(&(MM),sizeof(struct
People),1,fp);
MM:是首先创建的结构体用于存储文件里的数据。
sizeof(struct
People):计算原结构体的大小
1:每次取一个
fp:指针所指的文件
fwrite() 是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。
本通讯录fwrite(&(book->people[i]),sizeof(struct People),1,fp);
book->people[i]:储存到文件的数据
sizeof(struct People):计算原结构体的大小
1:每次取一个
fp:指针所指的文件
头文件 1.h
#ifndef __1_H__
#define __1_H__
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
typedef struct People
{
char name[10];
char sex[10];
int age;
char adress[10];
char telphone[10];
}People;
typedef struct Book
{
struct People *people;
int size;//实际大小
int capacity;//容量
}Book;
void CheckFull(Book *book);//判断容量是否满
void DeletePeople(Book *book);//删除一个人
void FindPeople(Book *book);//寻找一个人
void Init(Book *book);//初始化
void PeoplePrintf(Book *book);//打印
void InsertPeople(Book *book);//添加人员
void Change(Book *book);//改变一个人的信息
void load1(Book *book);//读取文件
void save1(Book *book);//fwrite函数是以二进制方式进行储存
void menu();//菜单
#endif
源文件 test.c
#include "1.h"
void menu()
{
printf("****************************\n");
printf("******* 1. 添加联系人*******\n");
printf("******* 2. 修改联系人*******\n");
printf("******* 3. 删除联系人*******\n");
printf("******* 4. 查找联系人*******\n");
printf("******* 5. 显示联系人*******\n");
printf("******* 6. 导入联系人*******\n");
printf("******* 7. 导出联系人*******\n");
printf("******* 8. 退 出 *******\n");
printf("****************************\n");
}
void InsertPeople(Book *book)//插入联系人
{
int n;
if (book->size==book->capacity)
{
CheckFull(book);
}
printf("你要输入几个人: ");
scanf("%d",&n);
do
{
printf("\n输入姓名:");
scanf("%s",book->people[book->size].name);
printf("输入电话:");
scanf("%s",book->people[book->size].telphone);
printf("输入性别:");
scanf("%s",book->people[book->size].sex);
printf("输入年龄:");
scanf("%d
4000
",&(book->people[book->size].age));
printf("输入住址:");
scanf("%s",book->people[book->size].adress);
++(book->size);
if (book->size==book->capacity)
{
CheckFull(book);
}
} while (--n);
printf("\n添加成功!!!");
}
void PeoplePrintf(Book *book)//打印联系人
{
int i;
printf("--------------------------------------------------\n");
printf("| 通讯录管理系统 |\n");
printf("--------------------------------------------------\n");
for(i=0;i<book->size;i++)
{
printf(" 姓名:%s\t\n",book->people[i].name);
printf(" 性别:%s\t\n",book->people[i].sex);
printf(" 年龄:%d\t\n",book->people[i].age);
printf(" 地址:%s\t\n",book->people[i].adress);
printf(" 电话:%s\t\n",book->people[i].telphone);
printf("--------------------------------------------------\n");
}
}
void Init(Book *book)//初始化
{
book->size=0;
book->capacity=1;
book->people=(struct People *)malloc(book->capacity*sizeof(struct People));
}
void CheckFull(Book *book)//判断容量是否满,进行扩容
{
struct People *tem=(struct People *)realloc(book->people,sizeof(struct People)*book->capacity*2);
book->capacity*=2;
book->people=tem;
}
int Find_M(Book *book,char *name)//判断是否有这个人
{
int i;
for (i=0;i<book->size;i++)
{
if (strcmp(name,book->people[i].name)==0)
{
return i;
}
}
return -1;
}
void FindPeople(Book *book)//寻找一个人
{
char n[10];
int x;
printf("你所查找的人:");
scanf("%s",n);
x=Find_M(book,n);
if (x!=-1)
{
printf("--------------------------------------------------\n");
printf("| 通讯录管理系统 |\n");
printf("--------------------------------------------------\n");
printf(" 姓名:%s\t\n",book->people[x].name);
printf(" 性别:%s\t\n",book->people[x].sex);
printf(" 年龄:%d\t\n",book->people[x].age);
printf(" 地址:%s\t\n",book->people[x].adress);
printf(" 电话:%s\t\n",book->people[x].telphone);
printf("--------------------------------------------------\n");
}
else
{
printf("查无此人!\n");
}
}
void DeletePeople(Book *book)//删除一个人
{
char n[10];
int m=0;
int x,i;
printf("你要删除谁: ");
scanf("%s",n);
x=Find_M(book,n);
if (x!=-1)
{
for (i=x;i<book->size;i++)
{
book->people[i]=book->people[i+1];
}
--(book->size);
printf("\n删除成功!!!");
}
else
{
printf("没有找到此人,删除失败!!!\n");
}
}
void Change(Book *book)//改变一个人的信息
{
char name[10];
int x;
printf("请输入你所要修改的姓名:");
scanf("%s",name);
x=Find_M(book,name);
if (x!=-1)
{
printf("电话号码修改为:");
scanf("%s",book->people[x].telphone);
printf("\n修改成功!!!");
}
else
{
printf("没有找到修改的人!!\n");
}
}
void save1(Book *book)//fwrite函数是以二进制方式进行储存
{
int i;
FILE *fp;
fp=fopen("zx.txt","wt ");
for(i = 0 ; i < book->size; i++)
fwrite(&(book->people[i]),sizeof(struct People),1,fp);
fclose(fp);
}
void load1(Book *book)//读取文件里的信息写入结构体
{
int i=0;
FILE *fp=fopen("zx.txt","rt");
struct People MM={0};
fread(&(MM),sizeof(struct People),1,fp);
while(!feof(fp))
{
if (book->size==book->capacity)
{
CheckFull(book);
}
book->people[i]=MM;
book->size++;
i++;
fread(&(MM),sizeof(struct People),1,fp);
}
fclose(fp);
}
int main()
{
int a;
Book book;
Init(&book);
do
{
menu();
printf("请选择:");
scanf("%d",&a);
switch (a)
{
case 1:
InsertPeople(&book);
Sleep(2000);
system("cls");
break;
case 2:
Change(&book);
Sleep(2000);
system("cls");
break;
case 3:
DeletePeople(&book);
Sleep(2000);
system("cls");
break;
case 4:
FindPeople(&book);
system("pause");
system("cls");
break;
case 5:PeoplePrintf(&book);
system("pause");
system("cls");
break;
case 6:load1(&book);
printf("导入成功!!!");
system("pause");
system("cls");
break;
case 7:save1(&book);
printf("导出成功!!!");
system("pause");
system("cls");
break;
case 8:
return;
break;
default:printf("请输入真确的序号!!!\n");
}
} while (1);
system("pause");
return 0;
}
fread 是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
本通讯录fread(&(MM),sizeof(structPeople),1,fp);
MM:是首先创建的结构体用于存储文件里的数据。
sizeof(struct
People):计算原结构体的大小
1:每次取一个
fp:指针所指的文件
fwrite() 是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。
本通讯录fwrite(&(book->people[i]),sizeof(struct People),1,fp);book->people[i]:储存到文件的数据
sizeof(struct People):计算原结构体的大小
1:每次取一个
fp:指针所指的文件
头文件 1.h
#ifndef __1_H__
#define __1_H__
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
typedef struct People
{
char name[10];
char sex[10];
int age;
char adress[10];
char telphone[10];
}People;
typedef struct Book
{
struct People *people;
int size;//实际大小
int capacity;//容量
}Book;
void CheckFull(Book *book);//判断容量是否满
void DeletePeople(Book *book);//删除一个人
void FindPeople(Book *book);//寻找一个人
void Init(Book *book);//初始化
void PeoplePrintf(Book *book);//打印
void InsertPeople(Book *book);//添加人员
void Change(Book *book);//改变一个人的信息
void load1(Book *book);//读取文件
void save1(Book *book);//fwrite函数是以二进制方式进行储存
void menu();//菜单
#endif
源文件 test.c
#include "1.h"
void menu()
{
printf("****************************\n");
printf("******* 1. 添加联系人*******\n");
printf("******* 2. 修改联系人*******\n");
printf("******* 3. 删除联系人*******\n");
printf("******* 4. 查找联系人*******\n");
printf("******* 5. 显示联系人*******\n");
printf("******* 6. 导入联系人*******\n");
printf("******* 7. 导出联系人*******\n");
printf("******* 8. 退 出 *******\n");
printf("****************************\n");
}
void InsertPeople(Book *book)//插入联系人
{
int n;
if (book->size==book->capacity)
{
CheckFull(book);
}
printf("你要输入几个人: ");
scanf("%d",&n);
do
{
printf("\n输入姓名:");
scanf("%s",book->people[book->size].name);
printf("输入电话:");
scanf("%s",book->people[book->size].telphone);
printf("输入性别:");
scanf("%s",book->people[book->size].sex);
printf("输入年龄:");
scanf("%d
4000
",&(book->people[book->size].age));
printf("输入住址:");
scanf("%s",book->people[book->size].adress);
++(book->size);
if (book->size==book->capacity)
{
CheckFull(book);
}
} while (--n);
printf("\n添加成功!!!");
}
void PeoplePrintf(Book *book)//打印联系人
{
int i;
printf("--------------------------------------------------\n");
printf("| 通讯录管理系统 |\n");
printf("--------------------------------------------------\n");
for(i=0;i<book->size;i++)
{
printf(" 姓名:%s\t\n",book->people[i].name);
printf(" 性别:%s\t\n",book->people[i].sex);
printf(" 年龄:%d\t\n",book->people[i].age);
printf(" 地址:%s\t\n",book->people[i].adress);
printf(" 电话:%s\t\n",book->people[i].telphone);
printf("--------------------------------------------------\n");
}
}
void Init(Book *book)//初始化
{
book->size=0;
book->capacity=1;
book->people=(struct People *)malloc(book->capacity*sizeof(struct People));
}
void CheckFull(Book *book)//判断容量是否满,进行扩容
{
struct People *tem=(struct People *)realloc(book->people,sizeof(struct People)*book->capacity*2);
book->capacity*=2;
book->people=tem;
}
int Find_M(Book *book,char *name)//判断是否有这个人
{
int i;
for (i=0;i<book->size;i++)
{
if (strcmp(name,book->people[i].name)==0)
{
return i;
}
}
return -1;
}
void FindPeople(Book *book)//寻找一个人
{
char n[10];
int x;
printf("你所查找的人:");
scanf("%s",n);
x=Find_M(book,n);
if (x!=-1)
{
printf("--------------------------------------------------\n");
printf("| 通讯录管理系统 |\n");
printf("--------------------------------------------------\n");
printf(" 姓名:%s\t\n",book->people[x].name);
printf(" 性别:%s\t\n",book->people[x].sex);
printf(" 年龄:%d\t\n",book->people[x].age);
printf(" 地址:%s\t\n",book->people[x].adress);
printf(" 电话:%s\t\n",book->people[x].telphone);
printf("--------------------------------------------------\n");
}
else
{
printf("查无此人!\n");
}
}
void DeletePeople(Book *book)//删除一个人
{
char n[10];
int m=0;
int x,i;
printf("你要删除谁: ");
scanf("%s",n);
x=Find_M(book,n);
if (x!=-1)
{
for (i=x;i<book->size;i++)
{
book->people[i]=book->people[i+1];
}
--(book->size);
printf("\n删除成功!!!");
}
else
{
printf("没有找到此人,删除失败!!!\n");
}
}
void Change(Book *book)//改变一个人的信息
{
char name[10];
int x;
printf("请输入你所要修改的姓名:");
scanf("%s",name);
x=Find_M(book,name);
if (x!=-1)
{
printf("电话号码修改为:");
scanf("%s",book->people[x].telphone);
printf("\n修改成功!!!");
}
else
{
printf("没有找到修改的人!!\n");
}
}
void save1(Book *book)//fwrite函数是以二进制方式进行储存
{
int i;
FILE *fp;
fp=fopen("zx.txt","wt ");
for(i = 0 ; i < book->size; i++)
fwrite(&(book->people[i]),sizeof(struct People),1,fp);
fclose(fp);
}
void load1(Book *book)//读取文件里的信息写入结构体
{
int i=0;
FILE *fp=fopen("zx.txt","rt");
struct People MM={0};
fread(&(MM),sizeof(struct People),1,fp);
while(!feof(fp))
{
if (book->size==book->capacity)
{
CheckFull(book);
}
book->people[i]=MM;
book->size++;
i++;
fread(&(MM),sizeof(struct People),1,fp);
}
fclose(fp);
}
int main()
{
int a;
Book book;
Init(&book);
do
{
menu();
printf("请选择:");
scanf("%d",&a);
switch (a)
{
case 1:
InsertPeople(&book);
Sleep(2000);
system("cls");
break;
case 2:
Change(&book);
Sleep(2000);
system("cls");
break;
case 3:
DeletePeople(&book);
Sleep(2000);
system("cls");
break;
case 4:
FindPeople(&book);
system("pause");
system("cls");
break;
case 5:PeoplePrintf(&book);
system("pause");
system("cls");
break;
case 6:load1(&book);
printf("导入成功!!!");
system("pause");
system("cls");
break;
case 7:save1(&book);
printf("导出成功!!!");
system("pause");
system("cls");
break;
case 8:
return;
break;
default:printf("请输入真确的序号!!!\n");
}
} while (1);
system("pause");
return 0;
}
相关文章推荐
- fgetc()/fputc()/fgets()/fputs()/fread()/fwrite()/fopen()/fclose() 等C语言文件操作函数
- c语言学生信息管理系统(链表、文件)
- 大一课设---C语言--通讯录管理系统
- 使用C语言打造通讯录管理系统和教学安排系统的代码示例
- Linux环境下C语言实现简单的基于文件的学生信息管理系统
- 就C语言的指针、链表的原理和各类操作撰写一篇技术博客,说说自己学习C语言指针和链表的体会,并将学生信息管理系统进行修改,使能完成其他的功能,并撰写体会,附加源代码。
- 利用HydroCMS水利设计成果管理系统进行资源整理和项目策划
- VPS服务器利用WINSCP软件进行SFTP管理服务器文件
- C实现通讯录管理系统(亮点:纯链表实现、子串匹配,文件读写)
- 学生信息管理系统V0.3(优化文件存取、增加修改删除功能)
- C语言利用结构体数组实现学生成绩管理系统
- 文件编程中的两套操作:标准C库(fread, fwrite,fclose,fopen...)和 系统调用(open, read, write...)
- 图文介绍Windows系统下使用 Github账户 + msysgit + TortoiseGit 进行文件管理的方法。
- Linux磁盘及文件系统管理 2---- 使用fdisk进行磁盘管理
- C语言:通讯录管理系统
- 二叉树的应用:利用C语言编写简单的家谱管理系统
- IE浏览器利用ActiveXObject对象对文件系统进行操作
- c语言中所有文件操作函数详解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函数
- C语言通讯录管理系统
- 用C语言写的一个控制台界面的通讯录管理系统