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 + -
显示快捷键?