addressbook.c
来自「用C语言编写的通讯录。实现个人信息的输入、删除、插入、保存、读入、显示、查找、按」· C语言 代码 · 共 226 行
C
226 行
#include<stdio.h>
struct person
{
char name[8];
char comp[30];
char tel[15];
char email[20];
char addr[50];
};
char filename[20];
FILE *fp;
//定义函数
void creat(); //创建
void output(); //输出
void search(); //查找
void append(); //添加
void modify(); //修改
void delete(); //删除
main()
{
int m;
creat();
while(1)
{
printf("\n");
printf("\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();
}
printf("\n\n操作完毕,请再次选择!");
}
else
printf("\n\n选择错误,请再次选择!");
}
}
//建立
void creat()
{
struct person one;
long s1;
printf("\n请输入通讯簿名:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n不能建立通讯簿!");
exit();
}
fprintf(fp,"%-10s%-20s%-10s%-20s%-30s\n","姓名","单位","电话号码","email","住址");
printf("\n请输入联系人信息:\n姓名、单位、电话号码、email及住址(以#结束)\n");
scanf("%s",one.name);
while(strcmp(one.name,"#"))
{
scanf("%s%s%s%s",one.comp,one.tel,one.email,one.addr);
fprintf(fp,"%-10s%-20s%-10s%-20s%-30s\n\n",one.name,one.comp,one.tel,one.email,one.addr);
scanf("%s",one.name);
}
fclose(fp);
}
//输出
void output()
{
struct person one;
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打开通讯簿!");
exit();
}
printf("\n\n%20s\n","通 讯 簿");
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s\n",one.name,one.comp,one.tel,one.email,one.addr);
printf("\n%-10s%-20s%-10s%-20s%-30s",one.name,one.comp,one.tel,one.email,one.addr);
}
fclose(fp);
}
//添加
void append()
{
struct person one;
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打开通讯簿!");
exit();
}
printf("\n请输入添加的姓名、单位、电话号码、email及住址\n");
scanf("%s%s%s%s%s",one.name,one.comp,one.tel,one.email,one.addr);
fprintf(fp,"%-10s%-20s%-20s%-20s%-30s\n",one.name,one.comp,one.tel,one.email,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();
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s\n",one.name,one.comp,one.tel,one.email,one.addr);
if(!strcmp(namekey,one.name))
{
printf("\n\n已查到,记录为:");
printf("\n%-10s%-20s%-20s%-20s%-30s",one.name,one.comp,one.tel,one.email,one.addr);
k=1;
}
}
if(!k)
printf("\n\n对不起,通讯簿中没有此人的记录。");
fclose(fp);
}
//修改
void modify()
{
int m=0,k=0;
long offset;
char namekey[8];
struct person one;
printf("\n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯簿!");
exit();
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s\n",one.name,one.comp,one.tel,one.email,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为:");
printf("\n%-10s%-20s%-20s%-20s%-30s",one.name,one.comp,one.tel,one.email,one.addr);
printf("\n请输入新姓名、单位、电话号码、email及住址:");
scanf("%s%s%s%s%s",one.name,one.comp,one.tel,one.email,one.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-20s%-20s%-30s\n",one.name,one.comp,one.tel,one.email,one.addr);
}
else
printf("\n对不起,通讯簿中没有此人的记录。");
fclose(fp);
}
//删除
void delete()
{
int m,k=0,flag;
long offset1,offset2;
char namekey[8];
struct person one;
printf("\n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯簿!");
exit();
}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s%s%s\n",one.name,one.comp,one.tel,one.email,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为");
printf("\n%-10s%-20s%-20s%-20s%-30s",one.name,one.comp,one.tel,one.email,one.addr);
printf("\n确实要删除,按1;不删除,按0:");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-20s%-20s%-20s%-30s\n","","","","","");
}
}
else
printf("\n对不起,通讯簿中没有此人的记录。");
fclose(fp);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?