个人通讯录

typedef struct peoInfo     //重定义

{

    char name[20]; //姓名

    int age ;        //年龄

    char sex[10];    //性别

    char tele[12];    //手机号

    char addr[30];     //地址

}peoInfo;

1.2通讯录名单

typedef struct Contact

{

   peoInfo data[100]; //人员名单 结构体数组

   int count;         //人员数量

}Contact;

1.3人员初始化

void InitContact(Contact* con)

{

   assert(con);

   con->count=0; //初始人数为0

   memset(con->data,0,sizeof(con->data)); //这是一个c语言的库函数把数组里面的数全部初始化为0

   

}

1.4菜单

 

void menu(void)

{

   printf("===============================\n");

   printf("====1.add  2. del  3.serch=====\n");

   printf("=====4.modify      5.show======\n");

   printf("=====6.sort        0.exit======\n");

   printf("===============================\n");

   printf("===============================\n");

   

}

1.5主函数

enum a

{

   ext, //这里用了简单的枚举的方法 枚举的初始值为0

   add,

   del,

   serch,

   modify,

   show,

   sort

};

int main()

{

   int choice; 

   Contact con; //通讯录

   do

   {

       menu();

       printf("请选择功能\n");

       scanf("%d",&choice);

       switch(choice)

       {

           case add:

               AddContact(&con); //实现增加功能的函数

               break ;

           case del:

               DelContanct(&con); //实现删除功能的函数

               break ;

           case serch:

               SerContact(&con); //实现查找功能的函数

               break ;

           case modify:            

               ModContact(& con); //实现修改功能的函数

               break ;

           case show:

               ShowContact(&con); //实现展示功能的函数

               break ;

           case sort:

               SorContact(&con);     //实现排序功能的函数

               break ;

           case ext :

               printf("程序结束\n");

               break;

           default :

               printf("输入有误请重新输入\n");

       }

   }while(choice);

   return 0;

   

}

2. 功能实现

2.1增加人数

void AddContact(Contact* con)

{

   assert(con); //指针不能为空

   if(con->count==Max)

   {

       printf("存放已满\n");

       return ;

   }

   printf("请输入名字");

   scanf("%s",con->data[con->count].name);

   printf("请输入年龄");

   scanf("%d",&(con->data[con->count].age));

   printf("请输入性别");

   scanf("%s",con->data[con->count].sex);

   printf("请输入电话");

   scanf("%s",con->data[con->count].tele);

   printf("请输入地址");

   scanf("%s",con->data[con->count].addr);

   con->count++;

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

   

}

2.2删除人数

 

static int xiaomafind(Contact* con,char name[])

{

    

    assert(con);

    int i=0;

    

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

    {

        if(0==strcmp(con->data[i].name,name))  //通过名字来查找看是否存在 ,如果有返回下标。

        {

        return i;

        }

   else 

       {

           return -1;

       }

    }

void DelContanct(Contact* con)

{

   char name[20]={0};

   printf("请输入你想删除的名字\n");

   assert(con);

   int i;

   scanf("%s",name); 

   int pos=xiaomafind(con,name);

   if(pos==-1)

   {

       printf("没有你要删除的人\n");

   }

   else

   {

       for(i=pos;i<con->count;i++)

       {

           con->data[i]=con->data[i+1]; //通过数组后一个覆盖前一个来完成删除功能

       }

       con->count--;  //删除完成后人员减一

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

   }

}

2.3查找

 

static int xiaomafind(Contact* con,char name[])

{

    

    assert(con);

    int i=0;

    

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

    {

        if(0==strcmp(con->data[i].name,name))

        {

        return i;

        }

    }

 

        return -1;      

}

void SerContact(Contact *con)

{

   char name[20]={0};

   printf("请输入你想查找的名字\n");

   assert(con);

   scanf("%s",name);

   int find =xiaomafind(con,name);

   if(find==-1)

   {

       printf("没有你要查找的用户\n");

   }

   else{

       printf("查找成功\n");

       

   }

}

2.4展示

void ShowContact( const Contact* con)

{

   assert(con);

   int i;

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

   {

       printf("%2s\t%3d\t%5s\t%12s\t%30s\n",con->data[i].name,con->data[i].age,con->data[i].sex,con->data[i].tele,con->data[i].addr);  

   }

}

2.5排序(按姓名首字母排序)

 

int cmp_stu_by_name(const void*e1,const void*e2)

{

   return strcmp(((peoInfo*)e1)->name,((peoInfo*)e2)->name); 

   }  

void SorContact(Contact* con)

{

   assert(con);

   

   qsort(con->data, con->count, sizeof(peoInfo), cmp_stu_by_name);  

}

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值