来源参考:https://blog.csdn.net/qq_43512497/article/details/89200330
几点说明:
1、我稍微精简了一下,而且改正了一些错误。
2、代码其实仍旧不完善,由于对文件的操作还不是很熟,一开始如果contact.txt中没有内容的话,一开始读取记录的时候会出现一个无用的联系人记录。
3、代码是可以编译运行的
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
long id; //编号
char name[10]; //姓名
char telenum[15]; //电话
char address[20]; //住址
}Person;
Person p[30];
static int n = 0;
void Menu();
void AddPerson(Person * p); //添加联系人,结构体指针
void Display(Person * p);
void DelePerson(Person * p);
void ModifyPerson(Person * p);
void SearchPerson(Person * p);
void ReadFile(Person*p);
void WriteFile(Person* p);
void Menu(){
int c;
ReadFile(p);
printf("欢迎进入通讯录系统\n");
printf("1.显示所有联系人\n");
printf("2.添加联系人\n");
printf("3.删除联系人\n");
printf("4.修改联系人\n");
printf("5.查询联系人\n");
printf("6.退出\n");
int choice;
for(;;)
{
printf("请输入您的选择:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:Display(p);
break;
case 2:AddPerson(p);
break;
case 3:DelePerson(p);
break;
case 4:ModifyPerson(p);
break;
case 5:SearchPerson(p);
break;
case 6:
WriteFile(p);
exit(0);
}
}
}
int main(void)
{
Menu();
return 0;
}
void AddPerson(Person *p)
{
printf("ID:\n");
scanf("%ld",&p[n].id);
printf("姓名:\n");
scanf("%s",&p[n].name);
printf("电话:\n");
scanf("%s",&p[n].telenum);
printf("地址:\n");
scanf("%s",&p[n].address);
n++;
}
void Display(Person* p)
{
printf("----------------展示所有的联系人信息----------------\n");
int i;
for(i=0;i<n;i++)
{
printf("%d.\n",i+1);
printf("ID:%ld\n姓名:%s\n电话号码:%s\n家庭住址:%s\n\n"\
,p[i].id, p[i].name, p[i].telenum, p[i].address);
}
printf("----------------------------------------------------\n");
}
void DelePerson(Person * p)
{
int num;
printf("请输入联系人的编号:");
scanf("%d",&num);
if((num-1) >= n)
printf("超出通讯录范围。");
int j;
for(j=(num-1);j<n-1;j++)
{
p[j].id = p[j+1].id;
strcpy(p[j].name, p[j+1].name);
strcpy(p[j].telenum, p[j+1].telenum);
strcpy(p[j].address, p[j+1].address);
}
printf("删除成功!\n");
n--;
}
void ModifyPerson(Person * p)
{
int i;
printf("请输入要修改的联系人编号:\n");
scanf("%d",&i);
printf("请输入修改后的ID:\n");
scanf("%ld",&p[i-1].id);
printf("请输入修改后的名字:\n");
scanf("%s",&p[i-1].name);
printf("请输入修改后的电话号码:\n");
scanf("%s",&p[i-1].telenum);
printf("请输入修改后的地址:\n");
scanf("%s",&p[i-1].address);
printf("修改完成!\n\n");
}
void SearchPerson(Person * p)
{
char name[20];
printf("请输入你要查询的名字:\n");
scanf("%s", name);
int i =0;
while(strcmp(p[i].name, name)!=0 && i<n)
i++;
if(i==n)
printf("无此人在通讯录。");
else
{
printf("\n查询成功!\n\n");
printf("ID:%ld\n姓名:%s\n电话号码:%s\n家庭住址:%s\n\n"\
,p[i].id, p[i].name, p[i].telenum, p[i].address);
}
}
void ReadFile(Person*p)
{
FILE *fp;
int i = 0;
char ch;
fp=fopen("contact.txt","r");
if (fp == NULL)
{
printf("Cannot open the file!\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%ld%s%s%s", &p[i].id, p[i].name,p[i].telenum,p[i].address);
i++;
n++;
}
fclose(fp);
}
void WriteFile(Person* p)
{
FILE * fp;
int i;
fp = fopen("contact.txt", "w");
for(i = 0; i < n-1; i++)
{
fprintf(fp,"%ld\n%s\n%s\n%s\n", p[i].id, p[i].name, p[i].telenum, p[i].address);
}
fprintf(fp,"%ld\n%s\n%s\n%s", p[n-1].id, p[n-1].name, p[n-1].telenum, p[n-1].address);
fclose(fp);
}
我的第一篇博客,继续努力 !