链表写的通讯录

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


struct node
{
     char name[15];
     long num;
     struct node *next;
};


typedef struct node Node;
typedef struct node * Link;


void create(Link *head)
{
     *head = NULL;
     *head = (Link)malloc(sizeof(Node));
     if(head == 0)
     {
         printf("system error\n");
         exit(0);
     }
}


void insert(Link head,Link new_node)
{
    if(head->next == NULL)
        head->next = new_node;
    else
     {
        new_node->next = head->next;
        head->next = new_node;
     }
}
 




/******插入******/


void input(Link *head)
{
     int i = 1;
     Link new_node = NULL;
     printf("请输入联系人信息,按'#'键退出 。◕ ‿ ◕。\n");
     while(i)
     {
         new_node = (Link)malloc(sizeof(Node));
         printf("输入第%d位姓名: ",i);
         scanf("%s",&new_node->name);
         if(strcmp(new_node->name,"#") == 0)
             break;
         printf("输入第%d位☏ 号码: ",i);
         scanf("%ld",&new_node->num);
         insert(*head, new_node);
         i++;
     }
}






/******显示******/


void display(Link head)
{
     Link p;
     struct tm *ptr;
     time_t now;
     now  =time(NULL);
     ptr=localtime(&now);
     p= head;
     printf("                   %4d年%02d月%02d日 ",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday);
     printf("%d:%d\n",ptr->tm_hour,ptr->tm_min);
     printf("┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳ ┳\n");
     while(p->next != NULL)
     {
        printf("╠  姓名: %-7s  ⇪  ☏ 号码:%ld ╣\n",p->next->name,p->next->num);
        p = p->next;
     }
     printf("┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻ ┻\n");
}






/******查找******/


void search(Link head)
{
    char str[15];
    long s = 0;
    int n = 0, flag = 0, flag1 = 0;
    Link p = head;
    printf("请输入要查找的信息:");
    scanf("%s",str);
    if(p->next == NULL)
        printf("这是个空通讯录!\n");
    if(str[0] <= '9' && str[0] >= '0')
    {
        while(str[n] != '\0')
        {
            s = s * 10 + str[n] - '0';
            n++;
        }
    }
    n = 1;
    while(p->next != NULL)
    {
        if(strcmp(p->next->name,str) == 0 || p->next->num == s)
        {    
            flag = 1;
            flag1 = 1;
        }
        if(flag)
        {
            printf("查询结果%d  姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
            flag = 0;
            s = 0;
            n++;
        }
        p = p->next;
    } 
    if(!flag1)
        printf("未查询到相关信息,请确认输入内容是否有误!\n");
}






/******删除******/


void delete(Link head)
{
    char str[15], confirm[5];
    long s = 0;
    int n = 0, flag = 0, flag1 = 0;
    Link p = head;
    Link p1 = NULL;
    printf("请输入要删除的信息: ");
    scanf("%s",str);
    if(p->next == NULL)
        printf("这是个空通讯录!\n");
    if(str[0] <= '9' && str[0] >= '0')
    {
        while(str[n] != '\0')
        {
            s = s * 10 + str[n] - '0';
            n++;
        }
    }
    n = 1;
    while(p->next != NULL)
    {
        if(strcmp(p->next->name,str) == 0 || p->next->num == s)
        {    
            flag = 1;
            flag1 = 1;
        }
        if(flag)
        {
            printf("查询结果%d  姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
            flag = 0;
            s = 0;
            n++;
            printf("是否确认删除( yes or no )?\n");
            scanf("%s",confirm);
            if(strcmp(confirm,"yes") == 0 || strcmp(confirm,"y") == 0)
            {
               if(p->next->next == NULL)
               {
                   p1 = p->next;
                   p->next == NULL;
                   free(p1);
                   p1 = NULL;
               }
               else
               {
                   p1 = p->next;
                   p->next == p->next->next;
                   free(p1);
                   p1 = NULL;
               }
               printf("删除成功!\n");
           }
           else
               printf("该联系人未删除。\n");
        }
        p = p->next;
    }
    if(!flag1)
        printf("未查询到相关信息,请确认输入内容是否有误!\n");
}






/******修改******/


void revise(Link head)
{
    char str[15];
    char re[15];
    long s = 0;
    int n = 0, flag = 0, flag1 = 0;
    Link p = head;
    printf("请输入要修改的信息:");
    scanf("%s",str);
    if(p->next == NULL)
        printf("这是个空通讯录!\n");
    if(str[0] <= '9' && str[0] >= '0')
    {
        while(str[n] != '\0')
        {
            s = s * 10 + str[n] - '0';
            n++;
        }
    }
    n = 1;
    while(p->next != NULL)
    {
        if(strcmp(p->next->name,str) == 0 || p->next->num == s)
        {    
            flag = 1;
            flag1 = 1;
        }
        if(flag)
        {
            printf("查询结果%d  姓名: %-6s ☏ 号码: %ld\n", n, p->next->name,p->next->num);
            flag = 0;
            s = 0;
            n++;
            printf("输入修改结果(按'*'键跳过修改)\n");
            printf("姓名: ");
            scanf("%s",re);
            if(strcmp(re,"*") == 0)
                printf("未作出修改.n");
            else
            {
                strcpy(p->next->name,re);
                printf("☏ 号码: ");
                scanf("%ld",&(p->next->num));
                printf("修改成功!\n");
            }
        }
        p = p->next;
    } 
    if(!flag1)
        printf("未查询到相关信息,请确认输入内容是否有误\n");
}






/******清空******/


void empty(Link head)
{
    Link p = head;
    Link p1 = NULL;
    char str[5];
    printf("是否确认清空( yes or no )?\n");
    scanf("%s",str);
    if(strcmp(str,"yes") == 0 || strcmp(str,"y") == 0)
    {
        while(p->next != NULL)
        {
            if (p->next->next = NULL)
            {
                p1 = p->next;
                p->next = NULL;
                free(p1);
                p1 = NULL;
            }
            else
            {
                p1 = p->next;
                p->next = p->next->next;
                free(p1);
                p1 = NULL;
            }
        }
        printf("清空通讯录成功!\n");
    }
    else
        printf("通讯录未清空!\n");
}






/******排序******/


void arrange(Link head)
{
     Link p1 = head;
     Link p2 = NULL;
     char swap[15];
     while(p1->next != NULL)
     {
         p2 = p1->next;
         while(p2->next != NULL)
         {
             if (p1->next->num > p2->next->num)
             {
                 p1->next->num = p1->next->num + p2->next->num;               
                 p2->next->num = p1->next->num - p2->next->num;               
                 p1->next->num = p1->next->num - p2->next->num;
                 strcpy(swap,p1->next->name);
                 strcpy(p1->next->name,p2->next->name);
                 strcpy(p2->next->name,swap);
             }
             p2 = p2->next;
         } 
         p1 = p1->next;
     }
      printf("排序成功!\n");
}




int main()
{
    int n;
    Link head = NULL;
    create(&head);
    while(1)
    {
        printf("╔ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ┓\n");
        printf("║ 功能1: 输入 ┃  功能2:显示┃\n");
        printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
        printf("║ 功能3: 查询 ┃  功能4:删除┃\n");
        printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
        printf("║ 功能5: 修改 ┃  功能6:排序┃\n");
        printf("┃━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━┃\n");
        printf("║ 功能7: 清空 ┃  功能8:退出┃\n");
        printf("╚ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛\n");
        printf("选择功能: ");
        scanf("%d",&n);
        switch(n)
        {
            case 1: input(&head);break;
            case 2: display(head);break;
            case 3: search(head);break;
            case 4: delete(head);break;
            case 5: revise(head);break;
            case 6: arrange(head);break;
            case 7: empty(head);break;
            case 8: return 0;
            default: printf("输入有误,请重新输入!\n");break;
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值