C语言通讯录1.1

/**************************************

电子通讯录:

  内容:序号,姓名,电话,住址。

  功能:添加好友、删除好友、清空联系人、好友排序、搜索好友、显示所有联系人。

    添加好友:如果重名,可选择覆盖或新建。

    好友排序:可选择按姓氏正序排或逆序排。

    删除好友:若遇到重名好友,则按序号删除。

****************************************/

#include<stdio.h>

#include<stdlib.h>

 

typedef structPeople{

    int ID;         //序号

    char name[10];  //姓名

    char phone[20]; //号码

    char add[20];   //住址

    struct People *next;

}List;

 

/********主界面**********/

int menu()

{

    int choice;

   

    printf("\n");

    printf("0----添加好友    1----显示好友列表  2----搜索好友    3----删除好友\n");

    printf("4----好友正排序  5----好友逆排序(无)6----清空联系人  7----退出\n");    

    scanf("%d",&choice);       

 

    return choice;

}

 

void Add(List*people)

{

    List *p,*r;

   

    r = people;

    p = (List *)malloc(sizeof(List));

    printf("请输入序号:\n");

    scanf("%d",&p->ID);

    printf("请输入姓名:\n");

    scanf("%s",p->name);

    printf("请输入电话:\n");

    scanf("%s",p->phone);

    printf("请输入地址:\n");

    scanf("%s",p->add);

    while(r->next != NULL)

    {

        r = r->next;

    }

    r->next = p;

    p->next = NULL;

    printf("\n添加成功!\n");

}

 

//显示

void Display(List*people)

{

    List *p;   

 

    p = people->next;

    printf("好友列表:\n");

    printf(" 序号     姓名     电话     住址\n ");

    while(p != NULL)

    {

        printf("%d",p->ID);

        printf("%11s  ",p->name);

        printf("     %s ",p->phone);

        printf("     %s ",p->add);

        p = p->next;

        printf("\n");

    }

}

 

void Search(List*people)

{

    List *p;

    char name[10];     //搜索人的姓名

   

    printf("请输入要搜索人的姓名:\n");

    p = people->next;

    scanf("%s",name);

    while(p != NULL)

    {

        if(strcmp(p->name,name) == 0)

        {

            printf("%d  ",p->ID);

            printf("%s  ",p->name);

            printf("%s  ",p->phone);

            printf("%s  ",p->add);

            printf("\n");

        }

        p = p->next;

    }

}

 

void Delete(List*people)

{

    char name[10];

    List *p,*r;

    int count = 0;

    int ID;

  

    p = people->next;

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

    scanf("%s",name);

    while(p != NULL)

    {

        if(strcmp(p->name,name) == 0)

        {

            count++;

        }

        p = p->next;

    }

    if(count == 1)

    {

        p = people;

        r = people->next;

        while(r != NULL)

        {

            if(strcmp(r->name,name) == 0)

            {

                p->next = r->next;

                break;

            }

            p = p->next;

            r = r->next;

        }

    }

    if(count > 1)

    {

        r = people->next;

        while(r != NULL)

        {

            if(strcmp(r->name,name) == 0)

            {

                printf("%d %s %s%s\n",r->ID,r->name,r->phone,r->add);

            }

            r = r->next;

        }

        printf("请选择序号删除;\n");

        scanf("%d",&ID);

        p = people;

        r = people->next;

        while(r != NULL)

        {

            if(r->ID == ID)

            {

                p->next = r->next;

                r = p->next;

            }

            else

            {

                p = p->next;

                r = r->next;

            }

        }

       

    }

}

 

void Sort(List*people)

{

    List *pre,*p,*tail,*temp;

  

    tail = NULL;

    p = people->next;

    while(tail != people->next->next)

    {

        pre = people;

        p = people->next;

        while(p->next != tail)

        {

    if(strcmp(p->name,p->next->name)== 1)

            {

                pre->next = p->next;

                p->next =pre->next->next;

                pre->next->next = p;

                p = pre->next;

            }

            pre = pre->next;

            p = p->next;

        }

        tail = p;

    }

}

 

void Clear(List*people)

{

    List *p,*q;

   

    p = people->next;

    while(p != NULL)

    {

        q = p->next;

        free(p);

        p = q;

    }

    people->next = NULL;

}

 

int main()

{

    int choice;

    List people;

 

    people.next = NULL;

    while(1)

    {

        choice = menu();

        switch(choice)

        {

            case 0: Add(&people);

                   break;

            case 1: Display(&people);

                   break;

            case 2: Search(&people);

                   break;

            case 3: Delete(&people);

                   break;

            case 4: Sort(&people);

                   break;

            case 5:     ;

                   break;

            case 6: Clear(&people);

                   break;

            case 7:exit(1);

                   break;

            default: printf("\n无效指令,请重新输入!\n");

                   break;

        } 

    }

 

    return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值