链表实现通讯录,没文件操作

题目:用链表实现 查询 添加 删除 修改 显示 等功能 多种形式操作 操作方便 功能完善的通讯录。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node
{
    char name[20];
    char telephone[11];
    char sex[10];
    char age[15];
    char remarks[20];
    struct node *next;
};
typedef struct node Node;
typedef struct node * link;

void create_link(link * head)
{
    link p, q;
    int i;
    *head = (link)malloc(sizeof(Node));
    q = *head;
    p = NULL;

    printf("进行通讯录的输入,1 or 0?\n");
    scanf("%d",&i);
    getchar();
    while(i)
    {
        p = (link)malloc(sizeof(Node));
        printf("请输入姓名:\n");
        gets(p->name);

        printf("请输入电话号码:\n");
        gets(p->telephone);

        printf("请输入性别:\n");
        gets(p->sex);

        printf("请输入年龄:\n");
        gets(p->age);

        printf("请输入备注:\n");
        gets(p->remarks);

        p->next = q;
        q = p;
        scanf("%d",&i);
        getchar();
    }
    //q->next = NULL;
}
void display_link(link head)
{
    link p;
    p = head;

    if(p == NULL)
    {
        printf("link is empty!\n");
    }
    else
    {
        p = head->next;
        while(p != NULL)
        {
            printf("姓名:%s\t手机号:%s\t性别:%s\t年龄:%s\t备注:%s\t\n",p->name,p->telephone,p->sex,p->age,p->remarks);
            p=p->next;
        }
    }
}
void add_node(link head)
{
    link p ,q;
    p = head ;
    q = NULL;


    if( p == NULL)
    {
        printf("要先创建通讯录后才能添加用户信息!\n");
        return ;
    }

    if( p != NULL)
    {
        while(p->next != NULL)
        {
            p=p->next;
        }
    }

    int i;
    printf("进行通讯录的输入,1 or 0?\n");
    scanf("%d",&i);
    getchar();
    while(i)
    {
        q = (link)malloc(sizeof(Node));
        if(q != NULL)
        {
            printf("请输入姓名:\n");
            gets(q->name);

            printf("请输入电话号码:\n");
            gets(q->telephone);

            printf("请输入性别:\n");
            gets(q->sex);

            printf("请输入年龄:\n");
            gets(q->age);

            printf("请输入备注:\n");
            gets(q->remarks);

            q->next = NULL;
            p->next = q;
            p = q;
            scanf("%d",&i);
            getchar();
        }
    }

}
void delete_node(link head)
{
    link p, q;
    p = q = head;
    char name[20];
    getchar();
    printf("请输入要删除的姓名:\n");
    gets(name);

    if( p == NULL)
    {
        printf("mail_list is empty!\n");
    }
    else
    {
        q = p->next;
        while(q != NULL)
        {
            if(strcmp(name,q->name)==0)
                break;
            else
                p = q;
                q = q->next;
        }
        if( q != NULL)
        {
            p->next = q->next;
            free(q);
            printf("删除成功!\n");
        }
        else
        {
            printf("没有此联系人,删除失败!\n");
        }
    }
}
void search_node(link head)
{
    link p;
    char name[20];
    p = head;

    getchar();
    printf("请输入要查找的姓名:\n");
    gets(name);

    if(p == NULL)
    {
        printf("mail_list is empty!\n");
    }
    else
    {
        p = head->next;
        while( p != NULL)
        {
            if(strcmp(name,p->name)==0)
            {
                break;
            }
            else
            {
                p = p->next;
            }
        }
        if( p != NULL)
        {
            printf("姓名:%s\t手机号:%s\t性别:%s\t年龄:%s\t备注:%s\t\n",p->name,p->telephone,p->sex,p->age,p->remarks);
        }
        else
        {
            printf("查无此人!\n");
        }

    }
}
void modify_node(link head)
{
    link p;
    char name[20];
    p = head;
    getchar();
    printf("请输入要修改人的姓名:\n");
    gets(name);

    if(p == NULL)
    {
        printf("mail_list is empty!\n");
    }
    else
    {
        p = head->next;
        while( p != NULL)
        {
            if(strcmp(name,p->name)==0)
            {
                break;
            }
            else
            {
                p = p->next;
            }
        }
        if(p != NULL)
        {
            printf("请输入新的手机号码:\n");
            gets(p->telephone);

            printf("请输入新的性别:\n");
            gets(p->sex);

            printf("请输入新的年龄:\n");
            gets(p->age);

            printf("请输入新的备注:\n");
            gets(p->remarks);
        }
        else
        {
            printf("没有此人,无法修改信息!\n");
        }
    }
}
void release_link(link * head)
{
    link p;
    p = *head;

    if(p == NULL)
    {
        printf("link is empty!\n");
    }
    else
    {
        p = (*head)->next;
        while(p->next != NULL)
        {
            (*head)->next = p->next;
            free(p);
            p = (*head)->next;
        }
        free(p);
        *head = NULL;
    }
}
int main()
{
    link head = NULL;
    int sel;
    while(1)
    {
        printf("***************************************************\n");
        printf("*****************     通讯录    *******************\n");
        printf("***************************************************\n");
        printf("**********        1.通讯录的创建      *************\n");
        printf("**********        2.通讯录的显示      *************\n");
        printf("**********        3.通讯录的增加      *************\n");
        printf("**********        4.通讯录的删除      *************\n");
        printf("**********        5.通讯录的查找      *************\n");
        printf("**********        6.通讯录的修改      *************\n");
        printf("**********        0.退出系统          *************\n");
        printf("***************************************************\n");
        printf("***************************************************\n");

        printf("请选择(0--6)的命令:\n");
        scanf("%d",&sel);
        switch(sel)
        {
            case 1:create_link(&head);
                   break;
            case 2:display_link(head);
                   break;
            case 3:add_node(head);
                   break;
            case 4:delete_node(head);
                   break;
            case 5:search_node(head);
                   break;
            case 6:modify_node(head);
                   break;
            case 0:release_link(&head);return 0;
                   break;
        }

    }
    //display_link(head);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值