千家信息网

编程开发中如何实现文件版本通讯录

发表于:2024-10-28 作者:千家信息网编辑
千家信息网最后更新 2024年10月28日,小编给大家分享一下编程开发中如何实现文件版本通讯录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!源码:"Contact.h
千家信息网最后更新 2024年10月28日编程开发中如何实现文件版本通讯录

小编给大家分享一下编程开发中如何实现文件版本通讯录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

源码:

"Contact.h"

#ifndef __CONTACT_H__#define __CONTACT_H__#include #include #includeenum OP{    EXIT,      ADD,      DELE,      SER,      MODIFY,      DISPLAY,      CLEAR,      SORT  };#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 12#define ADDR_MAX 25#define MAX 1000#define DEFAULT 2    //通讯录首次的默认大小#define MAX_INIT 2typedef struct PerInfo{char name[NAME_MAX];int age;char sex[SEX_MAX];char tele[TELE_MAX];char addr[ADDR_MAX];}PeoInfo;typedef struct Contact{PeoInfo *data;int size;int i;int temp;int capacity;}Contact,*Pcon;void init(Pcon pcon);void _add(Pcon pcon);void _display(Pcon pcon);void _del(Pcon pcon);void _search(Pcon pcon);void _modify(Pcon pcon);void _sort(Pcon pcon);void _clear(Pcon pcon);void _destory(Pcon pcon);void _save(Pcon pcon); void _load(Pcon pcon); #endif //__CONTACT_H__

"Contact.c"

#include "Contact.h"void init(Pcon pcon){pcon->size = 0;pcon->capacity = DEFAULT; pcon->data=(PeoInfo *)malloc(MAX_INIT*sizeof(PeoInfo));      if(pcon->data == NULL)      {          printf("out of menory");          exit(EXIT_FAILURE);      }      memset(pcon->data,0,pcon->capacity*sizeof(PeoInfo));      _load(pcon);  }void _rise(Pcon pcon)        //增大容量  {      PeoInfo *temp = (PeoInfo *)realloc(pcon->data,(pcon->capacity+MAX_INIT)*sizeof(PeoInfo));      if(temp == NULL)      {          printf("out of memory!\n");          exit(0);      }      else          pcon->data = temp;  }void _dela(Pcon pcon)       //减小容量  {      PeoInfo *temp = (PeoInfo *)realloc(pcon->data,(pcon->capacity-MAX_INIT)*sizeof(PeoInfo));      if(temp == NULL)      {          printf("电话本已空!\n");          return ;      }      else           pcon->data = temp;  }  void _destory(Pcon pcon)  {      if(pcon->data != NULL)      {          free(pcon->data);          pcon->data = NULL;      }  }  void _add(Pcon pcon){ PeoInfo *temp = NULL;      if(pcon->size == pcon->capacity)    {          _rise(pcon);      }  printf("请输入名字:>");scanf("%s",pcon->data[pcon->size].name);printf("请输入年龄:>");scanf("%d",&(pcon->data[pcon->size].age));printf("请输入性别:>");scanf("%s",pcon->data[pcon->size].sex);printf("请输入电话:>");scanf("%s",pcon->data[pcon->size].tele);printf("请输入地址:>");scanf("%s",pcon->data[pcon->size].addr);pcon->size++;printf("添加成功\n");}void _display(Pcon pcon){int i = 0;printf("%9s\t%3s\t%4s\ts\ts\n","name","age","sex","tele","addr");for(i = 0;isize;i++){printf("%9s\t%3d\t%4s\ts\ts\n",pcon->data[i].name,pcon->data[i].age,pcon->data[i].sex,pcon->data[i].tele,pcon->data[i].addr);}}static int find(Pcon pcon, char *name){int i = 0;for(i = 0;isize; i++){if(strcmp(pcon->data[i].name,name) == 0){return i;}}return -1;}void _del(Pcon pcon){int pos = 0;int index = 0;char name[NAME_MAX];if(pcon->size == 0){printf("电话本空\n");return;}printf("请输入要删除人的名字:>");scanf("%s",name);pos = find(pcon, name);if(pos == -1){printf("找不到要删除的人\n");return;}//for(index = pos; index < pcon->size; index++){pcon->data[index] = pcon->data[index+1];}pcon->size--;printf("删除成功\n");_dela(pcon);}void _search(Pcon pcon){char  name[NAME_MAX] = {0};int pos = 0;printf("请输入要查找人的名字:>");scanf("%s",name);pos = find(pcon, name);if(pos == -1){printf("指定联系人不存在\n");return;}else{printf("%9s\t%3s\t%4s\ts\ts\n","name","age","sex","tele","addr");printf("%9s\t%3d\t%4s\ts\ts\n",pcon->data[pos].name,pcon->data[pos].age,pcon->data[pos].sex,pcon->data[pos].tele,pcon->data[pos].addr);}}void _modify(Pcon pcon){char  name[NAME_MAX] = {0};int pos = 0;printf("请输入要修改人的名字:>");scanf("%s",name);pos = find(pcon, name);if(pos == -1){printf("指定联系人不存在\n");return;}else{printf("请输入名字:>");scanf("%s",pcon->data[pos].name);printf("请输入年龄:>");scanf("%d",&(pcon->data[pos].age));printf("请输入性别:>");scanf("%s",pcon->data[pos].sex);printf("请输入电话:>");scanf("%s",pcon->data[pos].tele);printf("请输入地址:>");scanf("%s",pcon->data[pos].addr);}}void _sort(Pcon pcon){int i = 0;int j = 0;PeoInfo temp = {0};for(i = 0;isize-1; i++)//控制排序趟数{for(j = 0; jsize-1-i; j++){if(strcmp(pcon->data[j].name,pcon->data[j+1].name) > 0){temp = pcon->data[j];pcon->data[j] = pcon->data[j+1];pcon->data[j+1] = temp;}}}}void _clear(Pcon pcon){pcon->size = 0;}void _save(Pcon pcon)                            //写入文件  {      int i = 0;      FILE *pfWrite = fopen("contact.txt","w");     //打开一个文件      if(pfWrite == NULL)      {          perror("open file for write");          exit(0);      }      else       {          for(i=0; isize; i++)          {              fwrite(&(pcon->data[i]),sizeof(PeoInfo),1,pfWrite);          }          fclose(pfWrite);      }  }    void _load(Pcon pcon)                    //加载文件内容  {  int i = 0;    PeoInfo temp = {0};            FILE *pfRead = fopen("contact.txt","r");      if(pfRead == NULL)      {          perror("open file for read");          exit(0);      }      while(fread(&temp,sizeof(PeoInfo),1,pfRead))      {          _rise(pcon);          pcon->data[i] = temp;          i++;          pcon->size++;      }  }

"test.c"

#include "Contact.h"void menu(){printf("***************************\n");printf("********* 1.add ***********\n");printf("********* 2.del  **********\n");printf("********* 3.search ********\n");printf("********* 4.modify ********\n");printf("********* 5.display *******\n");printf("********* 6.clear *********\n");printf("********* 7.sort **********\n");printf("********* 0.exit **********\n");printf("***************************\n");}int main(){int input = 1;Contact pcon;init(&pcon);while(input){menu();printf("请选择要操作的数字:");scanf("%d",&input);printf("\n");{switch(input){case ADD:_add(&pcon);break;case DELE:_del(&pcon);break;case SER:_search(&pcon);break;case MODIFY:_modify(&pcon);break;case DISPLAY:_display(&pcon);break;case CLEAR:_clear(&pcon);break;case SORT:_sort(&pcon);break;case EXIT:_save(&pcon);_destory(&pcon);break;default:printf("无效选择!");break;}}}system("pause");return 0;}

以上是"编程开发中如何实现文件版本通讯录"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0