用c语言链表实现具有增删改查功能的通讯录

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student//学生类
{    
    char num[40];    
    char name[40];   
    char qq[40];    
    char mobilephone[40];  
    struct student * next;
};
typedef struct student Node;
typedef struct student * Link;
void ui()//界面
{    
    printf("*******************************\n");   
    printf("************Welcome************\n");   
    printf("*******************************\n");   
    printf("1 输入信息\n");    
    printf("2 显示信息\n");    
    printf("3 查找信息\n");    
    printf("4 删除信息\n");    
    printf("5 修改信息\n");    
    printf("6 退出\n")
}
void create_node(Link * new_node)//输入学生信息
{       
    system("clear");    
    *new_node = (Link)malloc(sizeof(Node));    
    if (*new_node == NULL)//错误处理    
    {        
        printf("malloc error\n");        
        exit(-1);//正常退出0,非正常退出-1   
    }  
}
void create_link(Link * head)//创建链表
{    
    create_node(head);    
    (*head)->next = NULL;
}
void insert_node_head(Link head,Link new_node)
{        
    printf("请输入学号:\n");    
    scanf("%s",new_node->num);    
    if(strlen(new_node->num) !=9)    
    {        
        printf("学号长度不符!\n");        
        free(new_node);        
        return;    
    }    
    printf("请输入姓名:\n");    
    scanf("%s",new_node->name);    
    printf("请输入qq号:\n");    
    scanf("%s",new_node->qq);    
    printf("请输入手机号:\n");    
    scanf("%s",new_node->mobilephone);     
    if(strlen(new_node->mobilephone) !=11)    
    {        
        printf("手机长度不符!\n");        
        free(new_node);        
        return;    
    }    
    Link p,q;    
    p = q = head->next;    
    if(p == NULL)    
    {        
        head->next = new_node;        
        new_node->next = NULL;    
    }    
    else     
    {        
        while(p != NULL && strcmp((head->next)->name,new_node->name) < 0)        
        {            
            q = p;            
            p = p->next;        
        }        
        if(NULL == p)        
        {            
            q->next =new_node;            
            new_node->next = NULL;        
        }        
        else if(p ==q)        
        {            
            new_node->next = head->next;            
            head->next = new_node;        
        }        
        else        
        {            
            new_node->next=p;            
            q->next=new_node;        
        }    
    }    
    printf("运行成功\n"); 
}
void display(Link head)//输出
{    
    Link p;    
    p = head->next;    
    system("clear");    
    if(head == NULL)    
    {        
        printf("link is not exist\n");        
        return;    
    }    
    if(NULL == p)    
    {        
        printf("Link is empty\n");        
        return;    
    }    
    while(p != NULL)    
    {        
        printf("学号是%s ",p->num);        
        printf("姓名是%s ",p->name);        
        printf("qq号是%s ",p->qq);        p
        rintf("手机号是%s \n",p->mobilephone);        
        p = p->next;    
    }    
    printf("输出成功\n");
}
void search(Link head)
{    
    system("clear");    
    char i[40];    
    printf("请输入要查找学生的姓名:\n");    
    scanf("%s",i);    
    Link p;    
    p = head->next;    
    if(head->next == NULL)    
    {        
        printf("无学生信息!\n");    
    }    
    else    
    {        
        while(p != NULL && strcmp(p->name,i))        
        {             
            p = p->next;       
        }         
        if(NULL == p)        
        {            
            printf("不存在要查找的学生信息!\n");        
        }        
        else        
        {            
            printf("学号是%s ",p->num);            
            printf("姓名是%s ",p->name);            
            printf("qq号是%s ",p->qq);            
            printf("手机号是%s \n",p->mobilephone);        
        }    
    }
}
void delete(Link head)
{    
    system("clear");    
    char i[40];    
    printf("请输入要删除学生的姓名:\n");    
    scanf("%s",i);    
    Link p,q;    
    p = q = head->next;    
    if(p == NULL)    
    {        
        printf("无学生信息\n");    
    }    
    else     
    {        
        while(p != NULL && strcmp(p->name,i))        
        {            
            q = p;            
            p = p->next;        
        }        
        if(NULL == p)        
        {            
            printf("不存在要删除的学生信息\n");        
        }        
        else if(p == q)        
        {            
            head->next = p->next;            
            free(p);            
            printf("删除成功!\n");        
        }        
        else        
        {            
            q->next=p->next;            
            free(p);            
            printf("删除成功!\n");        
        }    
    }
}
void change(Link head)
{    
    system("clear");    
    char i[40];    
    char m[40];    
    char n[40];    
    printf("请输入要修改学生的姓名:\n");    
    scanf("%s",i);    
    Link p;    
    p = head->next;    
    if(head->next == NULL)    
    {        
        printf("无学生信息!\n");    
    }    
    else    
    {        
        while(p != NULL && strcmp(p->name,i))        
        {             
            p = p->next;        
        }         
        if(NULL == p)        
        {            
            printf("不存在要修改的学生信息!\n");        
        }        
        else        
        {            
            printf("请输入修改后的学号\n");            
            scanf("%s",m);            
            if(strlen(m) !=9)            
            {                
                printf("学号长度不符!\n");                
                return;            
            }            
            strcpy(p->num,m);            
            printf("请输入修改后的qq号\n");            
            scanf("%s",p->qq);            
            printf("请输入修改后的手机号\n");            
            scanf("%s",n);            
            if(strlen(n) !=11)            
            {                
                printf("手机长度不符!\n");                
                return;            
            }            
            strcpy(p->mobilephone,n);            
            printf("修改成功\n");        
        }    
    }
}
int main()
{    
    int i;    
    Link head;    
    Link new_node;    
    create_link(&head);    
    while(1)    
    {        
        ui();        
        printf("请输入你要进行操作的序号:\n");        
        scanf("%d",&i);        
        switch(i)        
        {            
            case 1:create_node(&new_node);
                insert_node_head(head,new_node);
                break;            
            case 2:display(head);
                break;                         
            case 3:search(head);
                break;            
            case 4:delete(head);
                break;            
            case 5:change(head);
                break;            
            case 6:exit(0);            
            default:exit(-1);        
        }     
    }    
    return 0;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值