Linux学习之路(番外--通讯录)

Address_Book.h

#ifndef _ADDRESS_BOOK
#define _ADDRESS_BOOK

typedef enum {TRUE, FALSE, ERROR} BOOL;

typedef struct _Address_Book
{
    int id;
    char name[20];
    long phone;
    char address[20];
    long tel;
    struct _Address_Book *next;
}Address_Book;

typedef struct _List
{
    Address_Book *head;
}List;

//创建链表
List *CreatList();   

//插入ID和姓名信息
BOOL Insert_Data(List* ls);

//删除好友
BOOL Delete_Num(List* ls);

//查找好友
BOOL Find_Data(List* ls);


//打印链表
void Display(List* ls);

//销毁链表
void Destroy(List *ls);

#endif   //_ADDRESS_BOOK

 

main.c

#include "Address_Book.h"
#include <stdio.h>

int main()
{
    int x;
    
    
    //创建链表
    List *ls = CreatList();
    
    if(NULL == ls)
    {
        printf("创建失败\n");
    }
    else
    {
        printf("创建成功\n");
    }
            
    
    int i = 1;
    while(i = 1)
    {
        system("clear");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        printf("|请选择您要进行的操作:  |\n");
        printf("|1:添加好友信息        |\n");
        printf("|2:列表好友信息        |\n");
        printf("|3:搜索好友            |\n");
        printf("|4:删除好友            |\n");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n");    
        scanf("%d",&x);
        switch(x)
        {
            case 1:
            {        
                //插入数据,尾插
                Insert_Data(ls);
                break;
            }
            case 2:
            {
                Display(ls);
                break;
            }
            case 3:
            {
                Find_Data(ls);
                break;
            }
            case 4:
            {
                //删除好友
                Delete_Num(ls);
                break;
            }
            case 0:
            {
                //结束程序
                i = 0;
                break;
            }
            default:
            {
                printf("请输入正确的值\n");
                break;
            }
        }

    }

 

 

    return 0;
}

 

 

 

 

Address_Book.c

#include "Address_Book.h"
#include <stdio.h>
#include <stdlib.h>

//创建链表
List *CreatList()
{
    List *ls = (List *)malloc(sizeof(List)/sizeof(char));
    if(NULL == ls)
        return NULL;
    
    ls->head = (Address_Book *)malloc(sizeof(Address_Book)/sizeof(char));
    if(NULL == ls->head)
    {
        free(ls);
        return NULL;
    }
    
    ls->head->next = NULL;
    
    return ls;
}


BOOL Insert_Data(List* ls)
{
    if(NULL == ls)
    {
        return ERROR;
    }
    
    Address_Book *ab = (Address_Book *)malloc(sizeof(Address_Book)/sizeof(char));
    if(NULL == ab)
    {
        return ERROR;
    }
    
    printf("新添加的好友ID为:");
    scanf("%d",&ab->id);
    printf("您要添加的好友名字为:");
    scanf("%s",ab->name);
    printf("您要添加的好友手机号码为:");
    scanf("%ld",&ab->phone);
    printf("您要添加的好友的家庭住址为:");
    scanf("%s",ab->address);
    printf("您要添加的好友公司电话号码为:");
    scanf("%ld",&ab->tel);
    ab->next = NULL;
    
    Address_Book *tmp = ls->head;
    while(tmp->next)
    {
        tmp = tmp->next;
    }
    
    tmp->next = ab;
    
    return TRUE;
}

//查找好友信息
BOOL Find_Data(List* ls)
{
    if(NULL == ls)
    {
        return ERROR;
    }
    char num[20];
    printf("您要查找的好友姓名为:");
    scanf("%s",num);
    
    Address_Book *temp = ls->head->next;
    while (temp != NULL)
    {
        if(strcmp(num,temp->name) == 0)
        {
            printf("id为:%-4d",temp->id);
            printf("姓名为:%-4s",temp->name);
            printf("手机号为:%-4ld",temp->phone);
            printf("地址为:%-4s",temp->address);
            printf("电话为:%-4ld\n",temp->tel);
        }            
        temp = temp->next;
    }
}

//删除好友信息
BOOL Delete_Num(List* ls)
{
    if(NULL == ls)
    {
        return ERROR;
    }
    
    char num[20];
    printf("您要删除的好友姓名为;");
    scanf("%s",num);
    
    Address_Book *tmp = ls->head;
    while (tmp->next != NULL)
    {
        if(strcmp(num,tmp->next->name) == 0)
        {
            Address_Book *p = tmp->next;
            tmp->next = p->next;
            free(p);
            break;
        }
        tmp = tmp->next;
    }
    
    return TRUE;
}

 

//打印或者显示链表
void Display(List* ls)
{
    if(NULL == ls)
    {
        return ;
    }
    
    Address_Book *tmp = ls->head->next;     //第一个节点
    while(tmp)
    {
        printf("id为:%-4d",tmp->id);
        printf("姓名为:%-4s",tmp->name);
        printf("手机号为:%-4ld",tmp->phone);
        printf("地址为:%-4s",tmp->address);
        printf("电话为:%-4ld\n",tmp->tel);
        tmp = tmp->next;
    }
    
    printf ("\n");
    
}

 

//销毁链表    
void Destroy(List *ls)
{
    if(NULL == ls)
        return ;
    
    free(ls->head);
    free(ls);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值