本文是基于动态存储的通讯录实现中加以修改:动态存储实现通讯录
增加数据写入文件函数:
//将数据写入文件
void WriteFile(mindan* book) {
FILE* fp = fopen("test.txt", "w");
if (fp == NULL) {
perror("文件打开失败!\n");
return;
}
for (int i = 0; i < book->size; i++) {
fwrite(&(book->everyone[i]),sizeof(information),1,fp);
}
fclose(fp);
}
增加加载文件数据存储:
void LoadFile(mindan* book) {
FILE* fp = fopen("test.txt", "r");
if (fp == NULL) {
perror("文件打开失败!\n");
return;
}
information temp = { 0 };
int n;
while (1) {
n = fread(&temp, sizeof(information), 1, fp);
if (n < 1) {
break;
}
book->everyone[book->size] = temp;
book->size++;
if (book->size > book->num) {
book->num += 20;
information* newper = (information*)malloc(book->num*sizeof(information));
memcpy(newper, book->everyone, book->size*sizeof(information));
free(book->everyone);
}
}
}
只要再合适的地方调用两者即实现数据存入文件和
int main() {
mindan person_info;
Init(&person_info);
LoadFile(&person_info);
//定义函数指针func 代表void(*) (mindan*)
typedef void(*func)(mindan*);
func fun_table[] = {
NULL,
AddInformation,
DelInformation,
FindInformation,
ReInformation,
PrintInformation,
DisInformation,
SortInformation
};
while (1) {
int choose = meau();
if (choose < 0||choose > sizeof(fun_table)/sizeof(fun_table[0])) {
printf("输入无效,请重新输入\n");
continue;
}
if (choose == 0) {
printf("再见\n");
WriteFile(&person_info);
break;
}
else {
fun_table[choose](&person_info);
}
}
system("pause");
return 0;
}