《通讯录》的基本代码

本文详细描述了一个自定义通讯录程序的实现,包括头文件定义、函数实现(如初始化、添加、删除、查找、修改等)、内存管理以及文件操作。代码展示了如何创建和操作一个简单的通讯录结构,但非标准,需配合特定文件存在使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该代码能实现一个通讯录基本的功能,并不是标准的代码,请读者自知!

该通讯录代码的书写要分三个部分进行:

1,tect.c -->相关函数的调用

2,contact.c -->相关函数的定义

3,contact.h -->存放通讯录相关函数的声明


第一部分

头文件——"contact.h"内包含的内容有:

 

#include  <stdio.h>

#include  <string.h>

#include  <errno.h>

#include  <assert.h>

#include  <stdlib.h >

 

#define  NAME_MAX   20

#define   SEX_MAX     5

#define   NUMBER_MAX   12

#define   ADDER_MAX     30

#define    N     3

#define    SH    4

 

typedef struct Peo

    char name [NAME_MAX];//名字

    int   age ;                               //年龄

    char  sex[SEX_MAX];          //性别

    char  number[NUMBER_MAX]; //号码

    char  adder[ADDER_MAX];  //住址

}Peo;

 

typedef struct  Contact

{

  Peo * date;

  int  count;

  int  catacipy;

}Con;

 

//初始化通讯录

void  Contact_INIT(Con *con);

//通讯录信息增加

void  Contact_add (Con*con); 

//通讯录信息删除

void  Contact_del (Con *con);

//查找信息函数

int     C_Z(Con*con);

//通讯录信息查找

void Contact_serh(Con* con);

//通讯录信息修改

void Contact_mof(Con* con);

//通讯录信息展示

void Contact_show(Con*con);

//通讯录信息分类

void  Contact_sort(Con*con);

//销毁通讯录空间

 void Desty_Con(Con* con);

//以二进制的形式存入数据

void  Fwrite(con*con);

//以二进制的形式读入数据

void  Fread(Con *con);

 


第二部分

contact.c  中包含的代码内容有:

 

#include  "contact.h"

static int  Pan_Man(Con* con)

{

      assert(con);

     if(con—>count == con—>catacipy)

      {

         Peo* ptr =( Peo*)realloc(con—>date,                               ( N+SH)*sizeof(Peo))

           if(ptr == NULL)

          {

                printf("%s\n",strerror(errno));

                 return -1 ;

            }

          else

            {

                  con—>date = ptr ;

                   ptr = NULL ;

                  con—>catacipy +=SH ;

                   printf("增容成功\n");

            }

      }

   return 1 ;

}

 

int C_Z(Con*con)

{

     assert(con);

    char name1[NAME_MAX] ={0} ;

    int i = 0 ;

    for(i=0;i<(con—>count);i++)

    {

       if( strcmp(con—>date[i].name1,name)

                                                             == 0)

        { 

             return i ;

        }

    }

  return  -1 ;

}

 

void Contact_INIT(Con*con)

{

    assert(con);

  con—>count = 0 ;   

 con—>date =(Peo*)malloc(N*sizeof(Peo));

    if(con—>date == NULL)

  {

       printf("%s\n",strerror(errno));

       return ;

    }

    con—>catacipy = N ;

     Fread(con);

}

 

void Contact_add(Con*con)

{       

    assert(con);

    int  b = Pan_Man(con);

    if(b == 1)

     {     

                 //输入人的信息         

       printf("请输入姓名:>"); 

       scanf("%s",

              con—>date[con—>count].name);

 

       printf("请输入年龄:>");

       scanf("%d",

           &(con—>date[con—>count].age));

 

      printf("请输入性别:>");

      scanf("%s",

               con—>date[con—>conut].sex);

 

      printf("请输入号码:>");

      scanf("%s",

          con—>date[con—>count].number);

 

      printf("请输入地址:>");

      scanf("%s",

              con—>date[con—>count].adder);

 

           con—>count++;

           printf("增加成功\n");

     }   

   else 

    {     

    printf("增加失败!\n"); 

    }

}

 

void  Contact_del (Con *con)

       assert(con);

     if(con—>count == 0)

     {

        printf("通讯录为空,无数据删除\n");

         return  ;

     }

     printf("请输入要删除人的姓名:>");

     int i =  C_Z(con);

     if(i == 1)

     {

         int j =0 ;

         for(j=i;j<(con—>count)-1;j++)

         {

            con—>date[j] = con—>date[j+1];

          }

       printf("删除成功\n");

     }

    else

      { 

           printf("删除失败,通讯录中无此人信

           息\n");

      }

}

 

void Contact_serh(Con * con)

{  

      assert(con);

     printf("请输入查找人名字信息:>");

     int i =C_Z(con);

     if(i==0)

     {

        printf("通讯录中无此人信息\n");

     }

     else

     {

       printf("查找成功,信息如下:>\n");

       printf("%-20s %-5s %-6s %-12s       

         %-30s","姓名","年龄","性别",

                                   "电话","住址");

 

       printf("%-20s %-5d %-6s %-12s     

             %-30s\n",con—>date[i].name,

                         con—>date[i].age,

                         con—>date[i].sex,

                         con—>date[i].number,

                         con—>date[i].adder);

      }

}

 

void Contact_mof(Con* con)

       assert(con);

       int i = C_Z(con);

       if(i != -1)

     {

       printf("请输入要修改姓名:>"); 

       scanf("%s",  con—>date[i].name);

       printf("请输入要修改年龄:>");

       scanf("%d",  &(con—>date[i].age));

       printf("请输入要修改性别:>");

       scanf("%s", con—>date[i].sex);

       printf("请输入要修改号码:>");

       scanf("%s",  con—>date[i].number);

       printf("请输入要修改地址:>");

       scanf("%s",  con—>date[i].adder);

       printf("信息修改完成\n"); 

      }    

    else

      {

        printf("无相应的信息供修改\n");

      }

  }

 

void Contact_show(Con*con)

      assert(con);

      printf("%-20s %-5s %-6s %-12s       

         %-30s","姓名","年龄","性别",

                                   "电话","住址");

      int i = 0 ;

       for (i= 0;i<con—>count;i++)

       {

         printf("%-20s %-5d %-6s %-12s     

             %-30s\n",con—>date[i].name,

                         con—>date[i].age,

                         con—>date[i].sex,

                         con—>date[i].number,

                         con—>date[i].adder);

        }

  }

 

int camp(const void *st1,const void * st2)

{

     assert(st1&&st2);

    return  strcmp (  ((Peo*)st1—>name), 

                               ((Peo*)st2—>name) ) ;

}

 

void  Contact_sort(Con*con)

         assert(con);

        //按名字大小来分类

        qsort(con—>date,  con—>count,

        sizeof(Peo),camp);

       printf("分类成功\n");

 }

 

void Desty_Con(Con* con)

{

    assert(con);

    free(con—>date);

    con—>date = NULL;

}

 

void  Fread(Con *con)

{    

       assert(con);

      FILE*ptr=fopen("test.xy","rb");

      if(ptr==NULL)

     {

           perror("fopen");

           return ;

       }

     int i = 0 ;

     Peo tmp={0};

     while((i=fread(&tmp,sizeof(Peo),1,ptr))

                                                              ==1)

     {

             int j =0 ;

            if( (j=Pan_Man(con)) == 1)

           {

               con—>date[con—>count]= tmp;

                con—>count++;

             }

     }

    fclose(ptr);

    ptr=NULL;                                             

}

 

void  Fwrite(con*con)

      assert(con);

      FILE*ptr=fopen("test.xy","wb");

      if(ptr==NULL)

     {

           perror("fopen");

           return ;

       }

       int i= 0 ;

        for(i= 0;i<con—>count,i++)

       {

             fwrite(con—>date+i,sizeof(Peo),1,

                                                           ptr);    

         }

     fclose(ptr);

      ptr=NULL;

  }


第三部分

tect.c  中包含的代码内容有:

 

#include "contact.h"

void  menu()

//增、删、查、改、显示、分类、离开//   

   printf("XXXXXXXXXXXXXXXXXXX\n");       printf("XXXXX 1, add  XXXXXXXX\n");      printf("XXXXX 2, del   XXXXXXXX\n");       printf("XXXXX 3, serh  XXXXXXXX\n");

   printf("XXXXX 4, mof  XXXXXXXX\n");       printf("XXXXX 5, show XXXXXXXX\n");

   printf("XXXXX 6, sort XXXXXXXX\n");         printf("XXXXX 0, exit XXXXXXXX\n");

   printf("XXXXXXXXXXXXXXXXXXX\n");

}

 

int main()

{  

    int input = 0 ;

    Con  con;

    Contact_INIT(&con);

    do

    {

      menu();

      printf("请输入数字:>");

      scanf("%d",&input);

      switch(input)

        { 

          case 1:

                    Contact_add(&con);

                     break;

          case 2 :

                     Contact_del(&con);

                      break;     

          case 3:

                    Contact_serh(&con);

                     break;

          case 4 :

                     Contact_mof(&con);

                      break;     

          case 5:

                    Contact_show(&con);

                     break;

          case 6 :

                     Contact_sort(&con);

                      break;     

          case 0 :

                      Fwrite(&con);

                      Desty_Con(&con);

                      printf("离开通讯录\n");

                      break;

           default :

                      printf("请重新输入数字\n");

                      break;

        }

 

    }while(input); 

  return 0 ;

}

 


注:所有字母都是小写;

 调用函数时,要提前进行函数声明;

在运用该程序时,"tect.xy"文件要有并且在"contact.c"文件目录下,否则输入的信息无法进行保存,这样就达不到通讯录具有的保存性。

本代码难免会有些小瑕疵,

望各位博友批评指正!!

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值