<pre class="cpp" name="code">#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SEEK_SET
struct person
{
char name[10];
char sex[4];
int age;
char tel[11];
char addr[20];
};
char filename[20];
FILE * fp;
void add();
void show();
void insert();
void search();
void modify();
void delet();
int main()
{
int ch;
add();
while(1)
{
printf("***********************************************************\n");
printf("1.添加联系人信息 2.查找联系人信息 3.修改联系人信息 \n");
printf("4. 删除联系人信息5.显示所有联系人信息 6.插入联系人信息 0.退出 \n");
printf("***********************************************************\n");
printf("输入你的选择:\n");
scanf("%d",&ch);
if(ch<7&&ch>=0)
{
switch(ch)
{
case 1:add();
break;
case 2:search();
break;
case 3: modify();
break;
case 4:delet();
break;
case 5:show();
break;
case 6:insert();
break;
case 0:exit(0);
}
}
printf("选择错误,请再次选择\n");
}
return 0;
}
void add()
{
struct person p;
printf("请输入文件名:");
scanf("%s",filename);
if((fp=(FILE *)fopen(filename,"w+"))==NULL)
{
printf("打开文件失败无法创建通讯录!\n");
exit(0);
}
else
fprintf(fp,"%-10s%-20s%-25s%-30s%-40s\r\n","姓名","性别","年龄","电话","住址");
printf("请输入姓名、性别、年龄、电话、家庭住址(以0结束)\n");
while(strcmp(p.name,"0")!=0)
{
scanf("%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
fprintf(fp,"%-10s%-20s%-25d%-30s%-40s\n",p.name,p.sex,p.age,p.tel,p.addr);
scanf("%s",p.name);
}
fclose(fp);
}
void show()
{
struct person p;
if((fp=fopen(filename,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
printf("%35s\n\n","通讯薄");
fseek(fp,128,SEEK_SET);
fprintf(fp,"%c",'b');
fscanf(fp,"%s%s%d%s%s\n",p.name,p.sex,&p.age,p.tel,p.addr); printf("%-10s%-15s%-20s%-25s%-30s\n","姓名","性别","年龄","电话","住址");
printf("%-10s%-15s%-20d%-25s%-30s\n",p.name,p.sex,p.age,p.tel,p.addr);
fclose(fp);
}
void insert()
{
struct person p;
if((fp=fopen(filename,"a"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
printf("请输入要添加的姓名、性别、年龄、电话、家庭住址\n");
scanf("%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
fprintf(fp,"%-10s%-20s%25d%-30s%-40s\n",p.name,p.sex,p.age,p.tel,p.addr);
fclose(fp);
}
void search()
{
struct person p;
int k=0;
char namekey[10];
printf("请输入姓名\n");
scanf("%s",namekey);
if((fp=fopen(filename,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
if(strcmp(p.name ,namekey)==0)
{
printf("%-10s%-20s%-25d%-30s%-40s\n",p.name,p.sex,p.age,p.tel,p.addr);
k=1;
break;
}
}
if(!k)
printf("通讯录中无此人的记录\n");
fclose(fp);
}
void modify()
{
struct person p;
int k=0;
long offset;
char namekey[11];
printf("请输入你要修改的联系人的姓名:\n");
scanf("%s",p.name);
if((fp=(FILE *)fopen(filename,"r+"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
while(feof(fp==0))
{
offset=ftell(fp);
fscanf(fp,"%s%s%d%s%s",p.name,p.sex,&p.age,p.tel.p.addr);
if(strcmp(namekey,p.name)==0)
{
k=1;
break;
}
}
if(k)
{
printf("已找到,记录为:\n");
printf("%-10s%-20s%30d%-40s%-50s\n",p.name,p.sex,p.age,p.tel,p.addr);
printf("请输入新的联系人信息:\n");
printf("请输入你要修改的姓名、性别、年龄、电话、家庭住址\n");
scanf("%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%30d%-40s%-50s\n",p.name,p.sex,p.age,p.tel,p.addr);
}
else
printf("通讯录中没有此人的记录\n");
fclose(fp);
}
void delet()
{
struct person p;
int k=0;
long offset;
char namekey[10];
printf("请输入姓名:\n");
scanf("%s",namekey);
if((fp=fopen(filename,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
if(strcmp(namekey,p.name)==0)
{
k=1;
break;
}
}
if(k)
{
printf("%-10s%-20s%30d%-40s%-50s\n",p.name,p.sex,&p.age,p.tel,p.addr);
fseek(fp,offset,SEEK_SET);
fprintf(fp,"%-10s%-20s%30d%-40s%-50s\n"," "," "," "," "," ");
}
else
printf("通讯录中没有找到此人的记录\n");
fclose(fp);
}
用读写文件方式实现通讯录
最新推荐文章于 2023-03-07 21:19:23 发布