通讯录--文件保存

本文是基于动态存储的通讯录实现中加以修改:动态存储实现通讯录

增加数据写入文件函数:

//将数据写入文件
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;
}
发布了40 篇原创文章 · 获赞 2 · 访问量 598

猜你喜欢

转载自blog.csdn.net/scacacac/article/details/105073363