通讯录管理文件升级版怎么下载,修改通讯录管理

  通讯录管理文件升级版怎么下载,修改通讯录管理

  Yyds干货库存

  是的,它又来了,通讯录管理文件的升级版,已经是我们的第三个版本了。让我们考虑一下。前两个版本虽然没有问题,但是不能保存我们输入的信息,每次都要重新输入。今天的文件版本可以完美实现这个功能。我们这次升级的部分不多,只有几个部分。让我们看一看。

  注意:本次升级涉及到文件操作的相关知识。如果你不了解文件操作,可以看我下一篇博客详细讲解文件操作。

  1.fwrite文件写入函数和fread文件读取函数在解释通讯录之前,我们需要知道两个函数:fwrite文件写入函数和fread文件读取函数。请首先参考它们。

  1.1演示fwrite函数。首先,我们创建一个结构S,然后给该结构赋值,并使用fopen打开文件test.txt。这里说明一下,因为我们写的是“wb”,所以test.txt文件不需要在文件夹里新建。只要在这里给出名称,系统就会自动创建,然后判断文件是否可以成功打开,避免打开失败和错误。然后我们使用fwrite函数。我们一次写入两条信息将结构中S中的信息写入pf指向的文件test.txt,最后关闭文件。

  //以二进制形式编写文件

  结构S

  {

  char name[20];

  int age

  双倍积分;

  };

  int main()

  {

  struct S[2]={ { 张三,20,55.6},{ 李四,18,99.9 } };

  FILE* pf=fopen(test.txt , WB );

  if (pf==NULL)

  {

  返回0;

  }

  //以二进制形式编写文件

  fwrite( s,sizeof(struct S),2,pf);

  fclose(pf);

  pf=NULL

  返回0;

  }1.2说明fread函数的文件读取操作,创建一个与文件写入结构一致的结构tmp来存储读取的信息。“rb”和“wb”不一样。请注意不同之处。“rb”读取test.txt中的数据,fread函数将pf指向的test.txt中的数据读入tmp,然后打印出来。

  结构S

  {

  char name[20];

  int age

  双倍积分;

  };

  int main()

  {

  //struct S s={ 张三,20,55.6 };

  struct S tmp[2]={ 0 };

  FILE* pf=fopen(test.txt , Rb );

  if (pf==NULL)

  {

  返回0;

  }

  //以二进制形式读取文件

  fread( tmp,sizeof(struct S),2,pf);

  printf(%s %d %lf\n ,tmp[0]。名称,tmp[0]。年龄,tmp[0]。分数);

  printf(%s %d %lf\n ,tmp[1]。名称,tmp[1]。年龄,tmp[1]。分数);

  fclose(pf);

  pf=NULL

  返回0;

  }2.将信息写入文件并添加保存功能。首先,使用fopen将pfwrite指向contact.txt文件并打开它。(随便写contact.txt的文件名),判断打开是否成功。如果打开失败,printf(%s\n ,strerror(errno));提示打开失败消息。注意,strerror打印错误代码函数,而(errno)是错误代码变量。这里不是重点(strerror需要引用头文件# includerrno.h)。我会放在文件操作博客里详细讲解,然后用fwrite函数把通讯录里的数据写入pfwrite指向的contact.txt文件,一次一个。

  voids avecontact(struct contact * PS)//保存到文件函数

  {

  FILE * pf write=fopen( contact . txt , WB );

  if (pfwrite==NULL)

  {

  printf(%s\n ,strerror(errno));

  返回;

  }

  //将通讯簿中的数据写入文件。

  int I=0;

  for(I=0;I PS-size;我)

  {

  fwrite( (ps- data[i]),sizeof(struct peoinfo),1,pf write);

  }

  Printf(成功保存\ n );

  fclose(pf write);

  pfwrite=NULL

  }3.从文件中读取地址簿。我们现在只是把数据写入文件,但还没有显示出来。这需要fread函数。我们来分析一下代码,因为每次打开通讯录都会初始化,所以我们会在通讯录初始化的时候将数据读入通讯录,并写一个loadcontact函数(函数:将文件中已经存储的文件信息加载到通讯录中)。同样,打开pfread指向的文件contact.txt,注意“rb”。哦,我们创建一个新的struct peoinfo结构tmp,用来存放读取的数据,然后判断这个loadcontact:%s\n,没有任何意义,只是对错误的位置做一个具体的提醒,根据习惯可以添加也可以不添加,然后开始我们真正的文件读取操作。将pfread指向的contact.txt文件中的数据读入tmp,一次一个。fread函数有一个返回值。详情见图。

  在这个问题中,我们一次读取一个数据,最后当我们读完它时,我们将返回0。我们使用while循环读取数据,数据被读取,但不在tmp中的通讯录中。还有一个问题,就是通讯录有没有容量把这些数据放下来,我们还要再检查一下容量。如果不够,我们需要增加容量。只需在加载信息loadcontact之前放入容量增加函数cheakcontact,然后将信息放入下标size的数据元素中即可。

  void init contact(struct contact * PS)//地址簿初始化函数

  {

  PS-data=(struct peo info *)malloc(default _ SZ * sizeof(struct peo info));

  if (ps- data==NULL)

  {

  返回;

  }

  PS-size=0;

  PS-capacity=default _ SZ;

  //将文件中已经存储的文件信息加载到通讯录中

  load contact(PS);

  }

  void cheak capacity(struct contact * PS);//声明容量增加函数

  void load contact(struct contact * PS)//将文件信息加载到地址簿的函数

  {

  struct peo info tmp={ 0 };

  FILE* pfread=fopen(contact.txt , Rb );

  if (pfread==NULL)

  {

  printf(loadcontact:%s\n ,strerror(errno));

  返回;

  }

  //读取文件并存储在通讯簿中。

  While (fread ((tmp),sizeof (structpeo info),1,pfread))//fread的返回值是它实际读取的数据的个数。

  {

  cheak capacity(PS);//检查容量是否足够。

  PS-data[PS-size]=tmp;//将信息放在带有下标大小的数据元素上

  PS-size;

  }

  fclose(pfread);

  pfread=NULL

  }效果显示

  4.提示其实我们还可以在exit函数out中加入savecontact( con) save函数,这样更方便。

  案例分析:

  //销毁通讯录:释放动态打开的空间。

  save contact(con);

  destroy contact(con);

  Printf(退出通讯簿\ n );

  打破;5.请留言。如果你还不了解你的朋友,可以私信评论我。如果喜欢,请喜欢收藏,支持收藏。

  6.完整的代码课程-22 . c # define _ CRT _ secure _ no _ warnings 1

  #包含stdio.h

  #包含字符串. h

  #包含“contact.h”

  //通讯簿实现

  无效菜单()

  {

  printf( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n );

  printf( * * * * * * 1 . add 2 . del * * * * * \ n );

  printf( * * * * * * 3 . search 4 . modify * * * * * \ n );

  printf( * * * * * * 5 . show 6 . sort * * * * * \ n );

  printf( * * * * * * 7 . save 0 . out * * * * * \ n );

  printf( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n );

  }

  int main()

  {

  int input=0;

  //创建通讯簿

  结构接触孔;//通讯录,包括:数据指针大小,容量

  //初始化通讯簿

  init contact(con);

  做

  {

  menu();

  Printf(请选择:);

  scanf(%d ,输入);

  开关(输入)

  {

  案例添加:

  add contact(con);//添加消息

  打破;

  案例编号:

  del contact(con);//删除信息

  打破;

  案例搜索:

  search contact(con);//查找信息

  打破;

  案例修改:

  modify contact(con);//修改信息

  打破;

  案例展示:

  show contact(con);//打印通讯簿

  打破;

  案例排序:

  sort contact(con);//对通讯簿进行排序

  打破;

  案例分析:

  //销毁通讯录:释放动态打开的空间。

  save contact(con);

  destroy contact(con);

  Printf(退出通讯簿\ n );

  打破;

  案例保存:

  save contact(con);

  打破;

  默认值:

  Printf(选择错误,请重新选择\ n );

  打破;

  }

  } while(输入);

  返回0;

  } contact . h # define _ CRT _ SECURE _ NO _ WARNINGS 1

  //#定义最大1000

  #定义默认值_sz 3

  #定义MAX_NAME 20

  #定义MAX_SEX 5

  #定义MAX_TELE 12

  #定义马克斯_ADDR 30

  #包含标准库

  #包含错误号h

  枚举选项//枚举,用于替换开关盒语句中的0 1 2 3 ,增强代码的可读性

  {

  出去,

  添加,

  德尔,

  搜索,

  修改,

  秀,

  排序,

  救援

  };

  结构peoinfo

  {

  char NAME[MAX _ NAME];

  年龄

  char SEX[MAX _ SEX];

  char TELE[MAX _ TELE];

  char addr[MAX _ ADDR];

  };

  //通讯录类型

  结构接触

  {

  结构peoinfo *数据;//存放信息

  (同Internationalorganizations)国际组织大小;//记录当前已经有的元素个数

  (同Internationalorganizations)国际组织容量;//当前通讯录的最大容量

  };

  //函数声明

  void init contact(struct contact * PS);//初始化

  void add contact(struct contact * PS);//增加一个信息

  void show contact(const struct contact * PS);//打印通讯录中的信息

  void del contact(struct contact * PS);//删除信息

  void搜索contact(const struct contact * PS);//查找信息

  void修改触点(struct contact * PS);//修改信息

  void sort contact(struct contact * PS);//排序信息

  void destroy contact(struct contact * PS);//销毁通讯录

  void save contact(struct contact * PS);//保存到文件

  空载荷接触(结构接触* PS);//加载文件中的信息到通讯录接触。c# define _ CRT _ SECURE _ NO _ WARNINGS 1

  #包含"联系人. h "

  #包含标准视频

  #包含字符串。h

  void initcontact(结构接触* ps)//通讯录初始化函数

  {

  PS-data=(struct peo info *)malloc(default _ SZ * size of(struct peo info));

  if (ps- data==NULL)

  {

  返回;

  }

  PS-size=0;

  PS-capacity=default _ SZ;

  //把文件中已经存放的文件信息加载到通讯录中

  负载触点(PS);

  }

  void cheak容量(结构触点* PS);//声明增容函数

  无效负载接触(结构触点* ps)//将文件信息加载到通讯录中函数

  {

  结构peo信息tmp={ 0 };

  FILE* pfread=fopen(contact.txt , Rb );

  if (pfread==NULL)

  {

  printf(loadcontact:%s\n ,strerror(errno));

  返回;

  }

  //读文件存放到通讯录中

  while (fread( (tmp),sizeof(struct peoinfo),1,pfread))//fread的返回值是其真实读到的数据的个数

  {

  cheak容量(PS);//检查容量够不够,不够增容

  PS-data[PS-size]=tmp;//把信息放入下标为大小的数据元素上

  PS-size;

  }

  fclose(pfread);

  pfread=NULL

  }

  void cheak容量(结构触点* PS)//增容函数

  {

  如果(ps大小==ps容量)

  {

  //给ps-数据增容,每次增2

  struct peo info * ptr=realloc(PS-data,(PS-capacity 2)* sizeof(struct peo info));

  如果(ptr!=NULL)//增容成功

  {

  PS-data=ptr;

  ps-容量=2;//容量2

  printf(增容成功\ n’);

  }

  其他

  {

  printf(增容失败\ n’);

  }

  }

  }

  void add contact(struct contact * PS)//增加函数

  {

  //检测通讯录容量

  //1.如果满了增容

  //2.没满啥也不干

  cheak容量(PS);

  //添加数据

  printf(请输入名字:);

  scanf(%s ,ps- data[ps- size].姓名);//将信息放入下标为大小的空间

  printf(请输入年龄:);

  scanf(%d ,(ps- data[ps- size]).年龄));

  printf(请输入性别:);

  scanf(%s ,ps- data[ps- size].性);

  printf(请输入电话:);

  scanf(%s ,ps- data[ps- size].tele);

  printf(请输入地址:);

  scanf(%s ,ps- data[ps- size].addr);

  PS-size;

  printf(添加成功\ n’);

  //if (ps- size==MAX)

  //{

  //printf(通讯录以满,无法增加\ n’);

  //}

  //否则

  //{

  //printf(请输入名字:);

  //scanf(%s ,ps- data[ps- size].姓名);//将信息放入下标为大小的空间

  //printf(请输入年龄:);

  //scanf(%d ,(ps- data[ps- size]).年龄));

  //printf(请输入性别:);

  //scanf(%s ,ps- data[ps- size].性);

  //printf(请输入电话:);

  //scanf(%s ,ps- data[ps- size].tele);

  //printf(请输入地址:);

  //scanf(%s ,ps- data[ps- size].addr);

  //PS-size;

  //printf(添加成功\ n’);

  //}

  }

  void显示联系人(const struct contact * PS)//打印函数

  {

  如果(ps- size==0)

  {

  printf(通讯录为空\ n’);

  }

  其他

  {

  int I=0;

  //打印标题

  printf( %-20s \ t %-4s \ t %-5s \ t %-12s \ t %-20s \ n ,名字,年龄,性别,电话,地址);

  //打印数据

  for(I=0;I PS-size;我)

  {

  printf( %-20s \ t %-4d \ t %-5s \ t %-12s \ t %-20s \ n ,

  ps- data[i].姓名,

  ps- data[i].年龄,

  ps- data[i].性,

  ps- data[i].电话,

  ps- data[i].addr);

  }

  }

  }

  static int find by NAME(const struct contact * PS,char name[MAX_NAME])//static修饰函数,使此函数今在本文件(联系人:c)中起作用

  {

  int I=0;

  for(I=0;I PS-size;我)

  {

  if (strcmp(ps- data[i]).name,name)==0)

  {

  返回我;//找到返回下标

  }

  }

  return-1;//没找到

  }

  无效delcontact(结构接触* ps)//删除函数

  {

  char NAME[MAX _ NAME];

  printf(请输入要删除的人的姓名:);

  scanf(%s ,名称);

  //查找要删除的人在什么位置

  int pos=findbyname(ps,name);//这里把查找名字写成一个函数,找到返回1,找不到返回-1

  //删除

  if (pos==-1)//没找到的情况

  {

  printf(要删除的人不存在\ n’);

  }

  其他

  {

  int j=0;

  for(j=pos;j PS-size-1;j)

  {

  PS-data[j]=PS-data[j 1];

  }

  PS-size-;

  printf(删除成功\ n’);

  }

  }

  void搜索联系人(const struct contact * PS)//查找函数

  {

  char NAME[MAX _ NAME];

  printf(请输入要查找人的姓名:);

  scanf(%s ,名称);

  int pos=findbyname(ps,name);

  if (pos==-1) //没找到的情况

  {

  printf(要查找的人不存在\ n’);

  }

  else//找到了

  {

  printf( %-20s \ t %-4s \ t %-5s \ t %-12s \ t %-20s \ n ,名字, 年龄, 性别, 电话, 地址);//打印标题

  printf( %-20s \ t %-4d \ t %-5s \ t %-12s \ t %-20s \ n ,

  ps-数据[位置]。姓名,

  ps-数据[位置]。年龄,

  ps-数据[位置]。性,

  ps-数据[位置]。电话,

  ps-数据[位置]。addr);

  }

  }

  void modifycontact(结构接触* ps)//修改函数

  {

  char NAME[MAX _ NAME];

  printf(请输入要修改人的名字:);

  scanf(%s ,名称);

  int pos=findbyname(ps,name);

  if (pos==-1)

  {

  printf(要修改人的信息不存在\ n’);

  }

  其他

  {

  printf(请输入名字:);

  scanf(%s ,ps- data[pos].姓名);//将信息放入下标为刷卡机的空间

  printf(请输入年龄:);

  scanf(%d ,(ps- data[pos].年龄));

  printf(请输入性别:);

  scanf(%s ,ps- data[pos].性);

  printf(请输入电话:);

  scanf(%s ,ps- data[pos].tele);

  printf(请输入地址:);

  scanf(%s ,ps- data[pos].addr);

  printf(修改成功\ n’);

  }

  }

  int int_name(const void*e1,const void*e2)//比较函数

  {

  返回strcmp(((结构peo信息*)E1)-名称,((结构peo信息*)E2)-名称);

  }

  void sortcontact(结构接触* ps)//排序函数,用库函数编译器函数库自带的快速排序函数实现

  {

  如果(ps- size==0)

  {

  printf(通讯录中无联系人,不可排序\ n’);

  }

  其他

  {

  qsort(ps- data,ps- size,sizeof(ps- data[0]),int _ name);

  printf(排序成功\ n’);

  }

  }

  //void sort contact(struct contact * PS)//排序函数,冒泡排序

  //{

  //if (ps- size==0)

  //{

  //printf(通讯录中无联系人,不可排序\ n’);

  //}

  //否则

  //{

  //int I=0;

  //for(I=0;I PS-size-1;i )//一趟

  //{

  //int j=0;

  //for(j=0;j PS-size-1-j;j )//一趟交换次数

  //{

  //if (strcmp(ps- data[j]).名称ps- data[j 1].姓名)0)

  //{

  //struct peo info tmp=PS-data[j];

  //PS-data[j]=PS-data[j 1];

  //PS-data[j 1]=tmp;

  //}

  //}

  //}

  //printf(排序成功\ n’);

  //}

  //}

  void destroycontact(结构接触* ps)//销毁通讯录函数

  {

  免费(PS-data);

  PS-data=NULL;

  }

  void保存联系人(结构触点* ps)//保存到文件函数

  {

  FILE * pf write=fopen( contact。txt , WB );

  if (pfwrite==NULL)

  {

  printf(%s\n ,strerror(errno));

  返回;

  }

  //写通讯录中的数据到文件中

  int I=0;

  for(I=0;I PS-size;我)

  {

  fwrite( (ps- data[i]),sizeof(struct peoinfo),1,pf write);

  }

  printf(保存成功\ n’);

  fclose(pf写);

  pfwrite=NULL

  }

  评论0 发布评论

  wx63413e8871069

  2022-10-08 17:10

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: