fp=fopen("friend.txt,"w"); /*c以可写方式打开或创建文档friend.txt*/
for(j=1;j<=i;j )
fwrite(&friends[j],sizeof(struct friend),1,fp);
fclose(fp);
}
处理有关的文档操作,最容易忽视的就是关闭文档的操作..假如不及时关闭,容易造成
文档内容的丢失,或占用大量的内存,导至程式的执行速度下降。
从文档friend.txt读取记录的代码如下:
void Data_Load()
{
int j;
long k;
fp=fopen("friend.txt","r t); /*打开文档friend.txt*/
if(fp!=NULL)
{ for(i=1;i<50;i )
{ if(j=fgetc(fp)==EOF) /*判断是否到了文档尾*/
return;
k=i-1;
fseek(fp,k*sizeof(struct friend),SEEK_SET);
fread(&friends[i],sizeof(struct friend),1,fp); /*从文档中读一条记录*/
}
}
else /*假如文档不存在*/
{ fp=fopen(friend.txt","w");
i=1;
}
}
6.完成电子通讯录的主函数
在前面五个步聚的基础上开始进行程式主函数的设计。主函数首先调用初始化函数
Data_Load从已有文档friend.txt读取记录,假如是第一次使用,那么该文档不存在就创建
一个新文档,接下来程式进入一个无限循环,首先用一系列printf语句打印出各功能的选择
菜单,并提示按下数字键调用相应的功能。这里使用了switch分支结构来处理按键消息,这
是一种典型的用法,当选择了‘quit''''菜单后,程式给出是否存盘的提示。
/*---------全部源代码如下-------------------*/
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>
struct addr /*通讯地址结构定义*/
{ char post_num[10]; /*邮编*/
char addr[40]; /*家庭地址*/
};
struct birth /*出生年月结构定义*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct friend1 /*电子通讯录结构定义*/
{ int number; /*序号*/
char name[20]; /*姓名*/
char sex; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/




