欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c语言 链表 写通讯录

程序员文章站 2022-05-03 17:55:07
/* 实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系...
 
/*   实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
 
提供方法:
1.  添加联系人信息
2.  删除指定联系人信息
3.  查找指定联系人信息
4.  修改指定联系人信息
5.  显示所有联系人信息
6.  清空所有联系人  */
#include<stdio.h>
#include"phone_book.h"
#include<string.h>
#include<assert.h>
 
typedef struct phone_book
{
    char name[10];
    char sex[5];
    char addr[20];
    int year;
    int phone_num;
    struct phone_book *pnext;
}book,*pbook;
 
pbook add_linkman(pbook head)
{
    int i = 0;
    char name[10];
    char sex[5];
    char addr[20];
    int year;
    long phone_num;
    pbook pbase = head;
     
    assert(head);
     
flag:
    printf("你要添加多少个联系人:");
    scanf("%d",&i);
    if (i <= 0)
    {
        printf("输入数量错误!\n");
        goto flag;
    }
    if (head->pnext == null)
    {
        while (i--)
        {
            pbook pnew = (pbook)malloc(sizeof(book));
            assert(pnew);
            printf("请输入联系人信息:(姓名、性别、地址、年龄、电话号码)\n");
            scanf("%s", name);
            scanf("%s", sex);
            scanf("%s", addr);
            strcpy(pnew->name, name);
            strcpy(pnew->sex, sex);
            strcpy(pnew->addr, addr);
            scanf("%d", &pnew->year);
            scanf("%d", &pnew->phone_num);
            pbase->pnext = pnew;
            pnew->pnext = null;
            pbase = pnew;
        }
    }
    else
    {
        while (pbase->pnext != null)
        {
            pbase = pbase->pnext;
        }
        while (i--)
        {
            pbook pnew = (pbook)malloc(sizeof(book));
            assert(pnew);
            printf("请输入联系人信息:(姓名、性别、地址、年龄、电话号码)\n");
            scanf("%s", name);
            scanf("%s", sex);
            scanf("%s", addr);
            strcpy(pnew->name, name);
            strcpy(pnew->sex, sex);
            strcpy(pnew->addr, addr);
            scanf("%d", &pnew->year);
            scanf("%d", &pnew->phone_num);
            pbase->pnext = pnew;
            pnew->pnext = null;
        }
 
    }
    return head;
}
 
pbook remove_linkman(pbook head)
{
    pbook link_man = head;
    char name[10];
    if (!head)
    {
        printf("没有联系人,不能删除!\n");
        return null;
    }
    printf("请问你要删除哪位联系人?  ");
    scanf("%s",name);
    while (link_man->pnext!=null)
    {
        if (strcmp(link_man->pnext->name, name) == 0)
        {
             
            if (link_man->pnext->pnext == null)
            {
                free(link_man->pnext);
                link_man->pnext = null;
                printf("删除完成!\n");
                 
            }
            else
            {
                pbook ptmp = null;
                ptmp = link_man->pnext;
                link_man->pnext = link_man->pnext->pnext;
                free(ptmp);
                printf("删除完成!\n");
                 
            }
            return head;
        }
        else
        {
            link_man = link_man->pnext;
        }
    }
    printf("没有找到该联系人!\n");
    return head;
}
 
void traver_linkman(pbook head)
{
    pbook link_man = head;
    if (head->pnext == null)
    {
        printf("电话簿为空!\n");
    }
    while (link_man->pnext!=null)
    {
        printf("%s\n", link_man->pnext->name);
        printf("%s\n", link_man->pnext->sex);
        printf("%s\n", link_man->pnext->addr);
        printf("%d\n", link_man->pnext->year);
        printf("%ld\n", link_man->pnext->phone_num);
        printf("***********************************\n");
        link_man = link_man->pnext;
    }
}
 
void empty_linkman(pbook head)
{
    pbook ptmp = null;
    pbook link_man = head;
    if (head->pnext == null)
    {
        printf("电话簿为空!不用清空哦!(ˇ0ˇ) \n");
    }
    while (link_man->pnext != null)
    {
        if (link_man->pnext->pnext == null)
        {
            free(link_man->pnext);
            link_man->pnext = null;
        }
        else
        {
            ptmp = link_man->pnext;
            link_man->pnext = link_man->pnext->pnext;
            free(ptmp);
             
        }
    }
    printf("清空完成!\n");
}
 
pbook amend_linkman(pbook head)
{ 
    char name[10];
    char sex[5];
    char addr[20];
    pbook link_man = head;
 
    if (!head)
    {
        printf("没有联系人,不能修改!\n");
        return null;
    }
    printf("请问你要修改哪位联系人?  ");
    scanf("%s", name);
    while (link_man->pnext != null)
    {
        if (strcmp(link_man->pnext->name, name) == 0)
        {
            printf("请输入联系人信息:(姓名、性别、地址、年龄、电话号码)\n");
            scanf("%s", name);
            scanf("%s", sex);
            scanf("%s", addr);
            strcpy(link_man->pnext->name, name);
            strcpy(link_man->pnext->sex, sex);
            strcpy(link_man->pnext->addr, addr);
            scanf("%d", &link_man->pnext->year);
            scanf("%d", &link_man->pnext->phone_num);
            return head;
        }
        else
            link_man = link_man->pnext;
 
    }
    return head;
}
 
void search_linkman(pbook head)
{
    char name[10];
    pbook link_man = head;
     
    if (!head)
    {
        printf("没有联系人,查找失败!\n");
        return null;
    }
    printf("请问你要查找哪位联系人?  ");
    scanf("%s", name);
    while (link_man->pnext != null)
    {
        if (strcmp(link_man->pnext->name, name) == 0)
        {
            printf("%s\n", link_man->pnext->name);
            printf("%s\n", link_man->pnext->sex);
            printf("%s\n", link_man->pnext->addr);
            printf("%d\n", link_man->pnext->year);
            printf("%ld\n", link_man->pnext->phone_num);
            printf("***********************************\n");
            return 0;
        }
        else
            link_man = link_man->pnext;
 
    }
    printf("没有找到!\n");
}
void start(pbook *phead)
{
    int i = -1;
    assert(phead);
    while (1)
    {
        printf("欢迎使用电话薄系统!选择您的操作:\n\n");
        printf("*********************************************\n"
               "*1.添加联系人信息     2.删除指定联系人信息  *\n"
               "*3.查找指定联系人信息 4.修改指定联系人信息  *\n"
               "*5.显示所有联系人信息 6.清空所有联系人      *\n"
               "*0.结束系统! ————中情局专用————    *\n"
               "*********************************************\n");
        scanf("%d",&i);
        switch (i)
        {
        case 0:
            printf("*****感谢使用本系统!*****\n");
            exit(0);
        case 1:
            *phead=add_linkman( phead);
            break;
        case 2:
            *phead = remove_linkman(phead);
            break;
        case 3:
             search_linkman(phead);
            break;
        case 4:
            *phead = amend_linkman(phead);
            break;
        case 5:
            traver_linkman(phead);
            break;
        case 6:
            empty_linkman( phead);
            break;
        default:
            printf("选择有误!请重新选择\n");
            break;
        }      
    }
}
#include<stdio.h>
#include"phone_book.h"
 
int main()
{
     pbook phead = null;
    start(&phead);
    return 0;
}