通讯录
来源:互联网 发布:临床数据采集系统 编辑:程序博客网 时间:2024/04/18 18:23
/*c语言描述,wintc windows xp sp2下运行成功*/
#include<stdio.h>
struct person
{
char name[20];
char tel[15];
char addr[50];
};
char filename[20];
FILE *fp;
void create();
void output();
void search();
void append();
void modify();
void delete();
void main()
{
int m;
create();
while (1)
{
printf("/n/n添加,请按1");
printf("/n查找,请按2");
printf("/n修改,请按3");
printf("/n删除,请按4");
printf("/n输出,请按5");
printf("/n退出,请按0/n");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1:append(); break;
case 2:search(); break;
case 3:modify(); break;
case 4:delete(); break;
case 5:output(); break;
case 0:exit(0);
}
printf("/n/n操作完毕,请再次选择");
}
else
printf("/n/n选择错误,请再次选择");
}
}
/*创建一个通讯录*/
void create()
{
struct person one;
long sl;
printf("/n请输入通讯录名字:");
scanf("%s",filename);
if((fp=fopen(strcat(filename,".txt"),"w"))==NULL)
{
printf("/n不能建立通讯录");
exit(1);
}
fprintf(fp,"%-10s%-20s%-50s/n","姓名","电话号码","住址");
printf("/n请输入姓名,电话号码,及住址(以0结束)/n");
scanf("%s",one.name);
while (strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s/n",one.name,one.tel,one.addr);
scanf("%s",one.name);
}
fclose(fp);
}
/*输出整个通讯录*/
void output()
{
struct person one;
if((fp=fopen(filename,"r"))==NULL)
{
printf("/n不能打开通讯录!");
exit(2);
}
printf("/n/n%20s/n","通讯录");
while (!feof(fp))
{
fscanf(fp,"%s%s%s/n",one.name,one.tel,one.addr);
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
}
fclose(fp);
}
/*添加一个记录*/
void append()
{
struct person one;
if((fp=fopen(filename,"a"))==NULL)
{
printf("/n不能打开通讯录!");
exit(3);
}
printf("/n请输入要添加的姓名,电话及住址/n");
scanf("%s%s%s",one.name,one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s/n",one.name,one.tel,one.addr);
fclose(fp);
}
?*查找某一条记录*/
void search()
{
int k=0;
char namekey[8];
struct person one;
printf("/n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("/n不能打开通讯录!");
exit(4);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s/n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
printf("/n/n已查到,记录为 ");
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
k=1;
}
}
if(!k)
printf("/n/n对不起,通讯录中没有此人的记录");
fclose(fp);
}
/*修改某一条记录*/
void modify()
{
int m,k=0;
long offset;
char namekey[8];
struct person one;
printf("/n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("/n不能打开通讯录!");
exit(5);
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s/n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if (k)
{
printf("/n已查到,记录为:");
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
printf("/n请输入新姓名,电话号码及住址");
scanf("%s%s%s/n",one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-50s/n",one.name,one.tel,one.addr);
}
else
printf("/n对不起,通讯录中没有此人的记录");
fclose(fp);
}
/*删除一条记录*/
void delete()
{
int m,k=0,flag;
long offset1,offset2;
char namekey[8],valid[4];
struct person one;
printf("请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("/n不能打开通讯录!");
exit(6);
}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf("%s%s%s/n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("/n已查到,记录为:");
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
printf("/n确实要删除,按1,不删除,按0:");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-20s%-50s/n","","","");
}
}
else
printf("/n对不起,通讯录中没有此人的记录");
fclose(fp);
}