您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐