用头结点做通讯录(修改过的)!!!!

这篇博客介绍了如何使用头结点来构建一个通讯录系统。通过修改后的pbook.c和main.c文件,作者展示了如何利用头结点进行数据管理,提供了更高效的操作方式。
摘要由CSDN通过智能技术生成

(pbook.c前面的没有修改,后面的是修改过后的。main.c,也一样)
pbook.h文件

#ifndef __LINKLIST_H__
#define __LINKLIST_H__

#define FALSE 0
#define TRUE  1

typedef struct LinkData
{
    int id;

    char name[20];

    char tel[20];

    char address[100];

    char c_tel[20];
}data;

typedef struct _node
{
    struct LinkData data;

    struct _node * next;
}Node;
//创建链表
Node * Create_List();

//添加好友信息
int ADD_DATA(Node *h);

//打印值
void Display(Node *h);

//测长度
int Get_Len(Node * head);

//排序
void Rank_Id(Node* h);

//寻找
int Find_Name(Node* h);

//删除
int Delete_Name(Node* h,char* name);

#endif  

pbook.c文件

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

Node * Create_List ()
{
    Node *list = (Node*)malloc(sizeof(Node)/sizeof(char));
    if (list == NULL)
        return NULL;

    list->next = NULL;   //空表

    return list;

}

//头插
int ADD_DATA(Node *h)
{
    if (h == NULL)
        return FALSE;
    Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
    if (node == NULL)
    {
        return FALSE;
    }

    node->next = h->next;
    h->next = node;

    printf("请输入ID:     \n");
    scanf  ("%d", &(node->data.id));

    printf("请输入NAME(以英文输出):  \n");
    scanf  ("%s", node->data.name);

    printf("请输入TEL:     \n");
    scanf  ("%s", node->data.tel);

    printf("请输入ADDRESS:     \n");
    scanf  ("%s", node->data.address);

    printf("请输入C_TEL:     \n");
    scanf  ("%s",node->data.c_tel);

    if(node == NULL)
    {   
        printf ("创建失败\n");
        //return FALSE;
    }
    else
    {
        printf ("添加成功\n");
    }

    return TRUE;
}

void Display(Node *h)
{
    if (h == NULL)
        return;

    Node *tmp = h->next;

    while (tmp)
    {
        if (tmp == NULL)
        {   
            printf ("没有数据\n");
            break;
        }
        printf ("%8d\n", tmp->data.id);
        printf ("%8s\n", tmp->data.name);
        printf ("%8s\n", tmp->data.tel);
        printf ("%8s\n", tmp->data.address);
        printf ("%8s\n", tmp->data.c_tel);
        tmp = tmp->next;
    }
    printf ("\n");

}

int Get_Len(Node * h)
{
    if (h == NULL)
        return 0;

    Node *tmp = h;
    int count = 0;
    while (tmp->next)
    {
        count++;
        tmp = tmp->next;
    }

    return count;
}
void Rank_Id(Node* h)
{
    if (h == NULL || h->next == NULL)
        return;
    Node* tmp;
    int len = Get_Len(h);
    int i,j;
    for (i = 1; i < len; i++)
    {
        tmp = h->next;
        for(j = 1; j < len-i-1; j++)
        {
            tmp = tmp->next;
            if(tmp->data.id > tmp->next->data.id)
            {
                data tmp1;
                tmp1      = tmp->next->data;
                tmp->next->data = tmp->data;
                tmp->data = tmp1;
            }
            tmp = tmp->next;
        }
    }
    Display(h);
}

int Find_Name(Node* h)
{
    if (h == NULL)
        return FALSE;
    Node *tmp = h->next;
    char name[20];
    printf ("请输入name: ");
    scanf ("%s", &name);

    int count = 0;
    while (tmp)
    {
        if (strcmp(tmp->data.name,name) == 0)
        {
            printf ("%8d\n", tmp->data.id);
            printf ("%8s\n", tmp->data.name);
            printf ("%8s\n", tmp->data.tel);
            printf ("%8s\n", tmp->data.address);
            printf ("%8s\n", tmp->data.c_tel);

            count++;
            tmp = tmp->next;
            return TRUE;
        }
        if (count = 0)
        {
            printf ("没有找到联系人  \n");
            return FALSE;
        }
    }

}

int Delete_Name(Node *h, char* name)
{
    Node *p = h;
    Node *q = NULL;

    while (NULL != p && NULL != (p->next))
    {
        q = p->next;
        if (NULL != q && 0 == strcmp(q->data.name, name))
        {
            p->next = q->next;
            free(q);

            int j;

            printf ("\t正在删除\n");
            printf ("\t请稍候");
            fflush (stdout);            //强制刷新缓存,输出显示
            for (j = 0; j < 3; j++)
            {
                sleep (1);              //linux使用sleep,参数为秒
                printf (".");
                fflush(stdout);         //强制刷新缓存,输出显示
            }
            printf ("\n");
            printf ("\t该好友已成功删除!\n");
        }
        else if (NULL == q->next && 0 != strcmp(q->data.name, name))
        {
            printf ("\t您的通讯录没有该好友!\n");
        }
        p = p->next;
    }
}
#include <stdlib.h>
#include <stdio.h>
#include "pbook.h"
#include <string.h>

Node * Create_List ()
{
    Node *list = (Node*)malloc(sizeof(Node)/sizeof(char));
    if (list == NULL)
        return NULL;

    list->next = NULL;   //空表

    return list;

}

//头插
int ADD_DATA(Node *h)
{
    if (h == NULL)
        return FALSE;
    Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
    if (node == NULL)
    {
        return FALSE;
    }

    node->next = h->next;
    h->next = node;

    printf("\t\t请输入ID:                  ");
    scanf  ("%d", &(node->data.id));

    printf("\t\t请输入NAME(以英文输出):  ");
    scanf  ("%s", node->data.name);

    printf("\t\t请输入TEL:                 ");
    scanf  ("%s", node->data.tel);

    printf("\t\t请输入ADDRESS:             ");
    scanf  ("%s", node->data.address);

    printf("\t\t请输入C_TEL:               ");
    scanf  ("%s",node->data.c_tel);

    if(node == NULL)
    {   
        printf ("创建失败\n");
        //return FALSE;
    }

    return TRUE;
}

void Display(Node *h)
{
    if (h == NULL)
        return;

    Node *tmp = h->next;

    while (tmp)
    {
        if (tmp == NULL)
        {   
            printf ("没有数据\n");
            break;
        }
        int j;
        printf ("\t\t正在查找\n");
        printf ("\t\t请稍候");
        fflush (stdout);        // 强制刷新缓存,输出显示
        for (j = 0; j < 3; j++)
            {
                sleep (1);          // Linux 使用sleep,参数为秒
                printf (".");
                fflush (stdout);    // 强制刷新缓存,输出显示
            }
        printf ("\n");
        printf ("\t\t通讯录的ID:          %d\n", tmp->data.id);
        printf ("\t\t通讯录的姓名:        %s\n", tmp->data.name);
        printf ("\t\t通讯录的电话:        %s\n", tmp->data.tel);
        printf ("\t\t通讯录的家庭住址:    %s\n", tmp->data.address);
        printf ("\t\t通讯录的公司电话:    %s\n", tmp->data.c_tel);
        tmp = tmp->next;
    }
    printf ("\n");

}

int Get_Len(Node * h)
{
    if (h == NULL)
        return 0;

    Node *tmp = h;
    int count = 0;
    while (tmp->next)
    {
        count++;
        tmp = tmp->next;
    }

    return count;
}
void Rank_Id(Node* h)
{
    if (h == NULL || h->next == NULL)
        return;
    Node* tmp;
    int len = Get_Len(h);

    int i,j;
    for (i = 0; i < len-1; i++)
    {
        tmp = h->next;
        for(j = 0; j < len-i-1; j++)
        {
            if(tmp->data.id > tmp->next->data.id)
            {
                data tmp1;
                tmp1      = tmp->next->data;
                tmp->next->data = tmp->data;
                tmp->data = tmp1;
            }
            tmp = tmp->next;
        }
    }
    Display(h);
}

int Find_Name(Node* h)
{
    if (h == NULL)
        return FALSE;
    if(h->next == NULL)
    {
        printf("查找好友失败,为空。");
        return FALSE;
    }
    Node *tmp = h->next;
    char name[20];
    scanf ("%s", &name);

    int count = 0;
    while (tmp)
    {
        if (strcmp(tmp->data.name,name) == 0)
        {
            int j;
            printf ("\t\t正在查找\n");
            printf ("\t\t请稍候");
            fflush (stdout);        // 强制刷新缓存,输出显示
            for (j = 0; j < 3; j++)
                {
                    sleep (1);          // Linux 使用sleep,参数为秒
                    printf (".");
                    fflush (stdout);    // 强制刷新缓存,输出显示
                }
            printf ("\n");
            printf ("\t\t通讯录的ID:          %d\n", tmp->data.id);
            printf ("\t\t通讯录的姓名:        %s\n", tmp->data.name);
            printf ("\t\t通讯录的电话:        %s\n", tmp->data.tel);
            printf ("\t\t通讯录的家庭住址:    %s\n", tmp->data.address);
            printf ("\t\t通讯录的公司电话:    %s\n", tmp->data.c_tel);

            count++;
        }
        tmp = tmp->next;

    }
    if (count == 0)
        {
            printf ("没有找到联系人  \n");
            return FALSE;
        }

    return TRUE;

}

int Delete_Name(Node *h, char* name)
{
    Node *p = h;
    Node *q = NULL;

    while (NULL != p && NULL != (p->next))
    {
        q = p->next;
        //printf ("q:%p", q);
        //printf ("name: %s\n", q->data.name);
        //printf ("name: %s\n", name);
        //printf ("%d", strcmp(q->data.name, name));
        if (NULL != q && 0 == strcmp(q->data.name, name))
        {
            p->next = q->next;
            free(q);

            int j;

            printf ("\t\t正在删除\n");
            printf ("\t\t请稍候");
            fflush (stdout);            //强制刷新缓存,输出显示
            for (j = 0; j < 3; j++)
            {
                sleep (1);              //linux使用sleep,参数为秒
                printf (".");
                fflush(stdout);         //强制刷新缓存,输出显示
            }
            printf ("\n");
            printf ("\t\t该好友已成功删除!\n");
        }
        else if (NULL == q->next && 0 != strcmp(q->data.name, name))
        {
            printf ("\t\t您的通讯录没有该好友!\n");
        }
        p = p->next;
    }
}

main.c文件

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

int haha()
{
    system ("clear");
    printf ("\t**************************************** \n");
    printf ("\t~          欢迎使用通讯录               ~\n");
    printf ("\t~                                       ~\n");
    printf ("\t~      1 >>>>>>>> 添加好友信息          ~\n");
    printf ("\t~      2 >>>>>>>> 列表好友信息          ~\n");
    printf ("\t~      3 >>>>>>>> 搜索好友              ~\n");
    printf ("\t~      4 >>>>>>>> 删除好友              ~\n");
    printf ("\t~      5 >>>>>>>> 退出                  ~\n");
    printf ("\t~                                       ~\n");
    printf ("\t~                                       ~\n");
    printf ("\t~                       作者:123        ~\n");
    printf ("\t~***************************************~\n");
    printf ("                                           \n");
    printf ("                                           \n");
    printf ("\t请输入对应数字选择相应功能:");

}


int main()
{


    /* 创建链表
    Node* h = Create_List();
    if (h == NULL)
    {
        printf("创建链表失败\n");
        return -1;
    }
    */

    Node* h = (Node*) malloc(sizeof(Node)/sizeof(char));
    if (NULL == h)
    {
        return 0;
    }
    h->next = NULL;

    int Function;
    int i = 0;
    char name[20];
    int cho;
    while (1)
    {
        haha();
        scanf ("%d", &Function);
        switch (Function)               // 功能选择
        {
            case 1:                     // 添加好友
            {
                Function = 0;
                ADD_DATA(h);
                int j;

                printf ("\t正在添加\n");
                printf ("\t请稍候");
                fflush (stdout);        // 强制刷新缓存,输出显示
                for (j = 0; j < 3; j++)
                {
                    sleep (1);          // Linux 使用sleep,参数为秒
                    printf (".");
                    fflush (stdout);    // 强制刷新缓存,输出显示
                }
                printf ("\n");
                printf ("\t添加成功!\n");
                printf ("\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }           
            case 2:                 // 显示好友信息
            {
                system ("clear");
                printf ("\t*********好友信息********\n");
                printf ("\n");

                Display(h);
                Function = 0;
                printf ("\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }
            case 3:                 // 查找好友
            {
                system ("clear");
                printf ("\t*************查找好友*************\n");
                printf ("\t请输入您要查找的好友姓名:");
                scanf  ("%s", h->data.name);
                printf ("\n");

                int j;          
                printf ("\t正在查找\n");
                printf ("\t请稍候");
                fflush (stdout);        // 强制刷新缓存,输出显示
                for (j = 0; j < 3; j++)
                {
                    sleep (1);          // Linux 使用sleep,参数为秒
                    printf (".");
                    fflush (stdout);    // 强制刷新缓存,输出显示
                }
                printf ("\n");
                Find_Name(h);
                printf ("\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }
            case 4:                     //删除好友
            {
                system ("clear");
                printf ("\t*************删除好友*************\n");
                printf ("\t请输入要删除好友的姓名:");
                scanf  ("%s", h->data.name);
                printf ("\n");
                Delete_Name(h, name);
                printf ("\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }   
            case 5:                     //退出通讯录
            {
                Function = 0;
                system ("clear");
                exit (0);
            }
            default:                    //输入有误
            {
                Function = 0;
                printf ("\t对不起!您的输入有误!请重新输入:");
                scanf ("%d", &Function);
                break;
            }           
        }       
    }   
    return 0;
}
#include <stdio.h>
#include "pbook.h"
#include <stdlib.h>

int haha()
{
    system ("clear");
    printf ("\t\t**************************************** \n");
    printf ("\t\t~          欢迎使用通讯录               ~\n");
    printf ("\t\t~                                       ~\n");
    printf ("\t\t~      1 >>>>>>>> 添加好友信息          ~\n");
    printf ("\t\t~      2 >>>>>>>> 列表好友信息          ~\n");
    printf ("\t\t~      3 >>>>>>>> 搜索好友              ~\n");
    printf ("\t\t~      4 >>>>>>>> 删除好友              ~\n");
    printf ("\t\t~      5 >>>>>>>> 退出                  ~\n");
    printf ("\t\t~                                       ~\n");
    printf ("\t\t~                                       ~\n");
    printf ("\t\t~                       作者:123        ~\n");
    printf ("\t\t~***************************************~\n");
    printf ("                                           \n");
    printf ("                                           \n");
    printf ("\t\t请输入对应数字选择相应功能:");

}


int main()
{


    /* 创建链表
    Node* h = Create_List();
    if (h == NULL)
    {
        printf("创建链表失败\n");
        return -1;
    }
    */

    Node* h = (Node*) malloc(sizeof(Node)/sizeof(char));
    if (NULL == h)
    {
        return 0;
    }
    h->next = NULL;

    int Function;
    int i = 0;
    char name[20];
    int cho;
    while (1)
    {
        haha();
        scanf ("%d", &Function);
        switch (Function)               // 功能选择
        {
            case 1:                     // 添加好友
            {
                Function = 0;
                ADD_DATA(h);
                int j;

                printf ("\t\t正在添加\n");
                printf ("\t\t请稍候");
                fflush (stdout);        // 强制刷新缓存,输出显示
                for (j = 0; j < 3; j++)
                {
                    sleep (1);          // Linux 使用sleep,参数为秒
                    printf (".");
                    fflush (stdout);    // 强制刷新缓存,输出显示
                }
                printf ("\n");
                printf ("\t\t添加成功!\n");
                printf ("\t\tt返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }           
            case 2:                 // 显示好友信息
            {
                system ("clear");
                printf ("\t\t*********好友信息********\n");
                printf ("\n");

                Rank_Id(h);
                Function = 0;
                printf ("\t\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }
            case 3:                 // 查找好友
            {
                system ("clear");
                printf ("\t\t*************查找好友*************\n");
                printf ("\t\t请输入您要查找的好友姓名:");

                Find_Name(h);
                //int j;    
                /*char name[20];
                scanf ("%s", &name);*/
                /*printf ("\t\t正在查找\n");
                printf ("\t\t请稍候");
                fflush (stdout);        // 强制刷新缓存,输出显示
                for (j = 0; j < 3; j++)
                {
                    sleep (0);          // Linux 使用sleep,参数为秒
                    printf (".");
                    fflush (stdout);    // 强制刷新缓存,输出显示
                }*/


                printf ("\t\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }
            case 4:                     //删除好友
            {
                system ("clear");
                printf ("\t\t*************删除好友*************\n");
                printf ("\t\t请输入要删除好友的姓名:");
                scanf  ("%s", name);
                printf ("\n");
                Delete_Name(h, name);
                printf ("\t\t返回主菜单请输入1:");
                scanf ("%d", &cho);
                if (1 == cho)
                {
                    break;
                }
                else
                {
                    printf ("\t\t对不起!您的输入有误!请重新输入:");
                    scanf ("%d", &cho);
                    break;
                }
                break;
            }   
            case 5:                     //退出通讯录
            {
                Function = 0;
                system ("clear");
                exit (0);
            }
            default:                    //输入有误
            {
                Function = 0;
                printf ("\t\t对不起!您的输入有误!请重新输入:");
                scanf ("%d", &Function);
                break;
            }           
        }       
    }   
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值