批注 2020-12-27 104847.png
通讯录管理系统已经有好多人写过了 但是基于文本操作大多数只有从文件中输出和输入并不是即时的 解决方法是将链表里的数据输出以结构体的方式到文本 读入应该以一样的方式
增加个人信息函数定义
void AddStu()
{
//分配存储空间
CommHma *p=(CommHma*)malloc(sizeof(CommHma));
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \n");
printf("┃ 请输入个人信息 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \n");
printf("请输入号码(最大长度为%d个字符)\n",MAX_ID-1);
scanf("%s", p->data.id);
while(FindStu(p->data.id)==1)
{
printf("\t\t\t\t\t-此人已经存在,请重新输人\n\t\t\t\t\t->");
scanf("%s", p->data.id);
}
printf("\t\t\t\t\t请输人姓名(最大长度为%d个字符)\n\t\t\t\t\t->",MAX_NAME-1);
scanf("%s", p->data.name);
printf("\t\t\t\t\t-请输人性别('男'或'女')\n\t\t\t\t\t->");
scanf("%s",p->data.sex);
printf("请输入分组",p->data.group);
scanf("%s",p->data.group);
p->next=Info;
Info=p;
printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" ┃┃ 添加成功! ┃ ┃\n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
文本读写操作 关键步骤
从文件读出通讯录信息函数定义
void ReadFile()
{
CommHma *p;
char id[MAX_ID];
FILE *pf=fopen("score.txt","r"); //以读方式打开文件
if(!pf) return; //打开文件失败
//从文件中逐一读出每一联系人信息
while(fscanf(pf,"%s",id)!=EOF)
{
p=(CommHma*)malloc(sizeof(CommHma));
strcpy(p->data.id,id);
fscanf(pf,"%s",p->data.name);
fscanf(pf,"%s",p->data.sex);
fscanf(pf,"%s",p->data.group);
//将每一学生信息(结点)加入到链表中
p->next=Info;
Info=p;
p=NULL;
}
fclose(pf); //关闭文件
}
//将信息写入文件函数定义
void WriteFile()
{
CommHma *p=Info;
FILE *pf=fopen("score.txt","w"); //以写方式打开文件
if(!pf)return; //打开文件失败
while(p) //将链表中的每一结点(联系点)写入文件
{
fprintf(pf,"%s\n",p->data.id);
fprintf(pf,"%s\n",p->data.name);
fprintf(pf,"%s\n",p->data.sex);
fprintf(pf,"%s\n",p->data.group);
p=p->next;
}
fclose(pf); //关闭文件
}
运行截图
在这里插入图片描述
在这里插入图片描述
完整程序下载链接:https://download.csdn.net/download/RONNIE_Zz/13856413