通讯录项目(完善版)

学完链表写了一个通讯录的项目,具体要求如下:

  • 语言:c语言

  • 格式:

    • 编号
    • 姓名
    • 手机号码 :11位数
    • 住宅电话 :8位数
  • 要求:使用结构体形式对数据存储

  • 功能:使用链表实现增加(在增加人员的过程中有一 个自动排序功能,比如按姓名排序)、删除、修改、查找(比如:工号查找、电话查找)的功能;
    (1)添加用户信息(号码长度 号码是否重复)
    (2)列出用户信息(按姓名排序)
    (3)查找用户信息(按姓名查找)
    (4)修改用户信息
    (5)删除用户
    (6)退出

注意事项:在增、删、改、查过程中,如果姓名相同怎么进行选择操作。

下面给出完整代码


头文件:


#ifndef _ADDRES_H_
#define _ADDRES_H_

#define color_none      "\033[0m"
#define color_red       "\033[1;5;7;31m"
#define color_purple    "\033[1;5;7;35m"

struct list_node
{
    char id[20];
    char name[50];
    char addres[50];
    char tel[20];
    char homephone[20];
    struct list_node *next;
};

typedef struct list_node Node;
typedef Node *link_list;

void show();
void PrintInfo();
int list_init(link_list *list);
int add_list(link_list *list);
int traversal_list(link_list list);
int search_list(link_list list);
int change_list(link_list list);
int delete_list(link_list list);

#endif

主函数:

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


int main()
{
    link_list list;
    int ret;
    char num[10];
    char enter[10];

    ret = list_init(&list);
    if(ret == 0)
    {
        printf(color_red"\t\t\t\t\t初始化失败!!!\n"color_none);
    }

    show();
    while(1)
    {
        PrintInfo();
        fgets(num, 2, stdin);

        switch(num[0])
        {
            case '1':
            {
                ret = add_list(&list);
                if(ret == 1)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**添加成功!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }

                }

                if(ret == 2)
                {
                    ret = change_list(list);
                    if(1 == ret)
                    {
                        printf("color_red\t\t\t\t\t**修改成功!!!\n"color_none);
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                        fgets(enter, 2, stdin);
                        if (enter[0] == 10)
                        {
                        system("clear");
                        }
                    }
                }
                break;
            }
            case '2':
            {
                getchar();
                ret = traversal_list(list);
                if(0 == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有用户信息!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                break;
            }
            case '3':
            {
                ret = search_list(list);
                if(0 == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有这个用户!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                    system("clear");
                    }
                }
                break;
            }
            case '4':
            {
                getchar();
                ret = change_list(list);
                if(0 == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有这个用户!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                if(1 == ret)
                {
                    printf(color_red"\t\t\t\t\t**修改成功!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                break;
            }
            case '5':
            {
                ret = delete_list(list);
                if(0 == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有这个用户!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else if(1 == ret)
                {
                    printf(color_red"\t\t\t\t\t**删除成功!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                break;
            }
            case '6':
            {
                exit(1);
            }
            case 10:  //回车键
            {
                system("clear");
                break;
            }
            default:
            {
                printf(color_red"\t\t\t\t\t**Unkown Input!\n"color_none);
                printf("\t\t\t\t\t                                            \n");
                printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                fgets(enter, 2, stdin);
                if (enter[0] == 10)
                {
                    system("clear");
                }
                break;
            }
        }
    }

    return 0;
}

调用接口:


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

void show()
{
    char enter[10];
    system("clear");

    printf("\t\t\t\t\t                                              \n");
    printf("\t\t\t\t\t                                              \n");
    printf("\t\t\t\t\t                                              \n");
    printf("\t\t\t\t\t##############################################\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#***************");  
    printf(color_red"欢迎进入通讯录"color_none);
    printf("***************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#*************");
    printf(color_purple"请按回车键进入界面"color_none);                   
    printf("*************#\n")  ;
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t##############################################\n");
    fgets(enter, 2, stdin);
    if (enter[0] == 10)
    {
        system("clear");
    }
}

void PrintInfo()
{
    printf("\t\t\t\t\t##############################################\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#  1.添加用户信息            2.列出用户信息  #\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#  3.查找用户信息            4.修改用户信息  #\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#  5.删除用户信息            6.退出          #\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#****************");  
    printf(color_red"按回车键清屏"color_none);
    printf("****************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#请输入选项:");
}

int list_init(link_list *list)
{
    (*list) = (link_list)malloc(sizeof(Node));
    if(NULL == (*list))
    {
        return 0;
    }
    (*list)->next = NULL;
    return 1;
}

int add_list(link_list *list)
{
    system("clear");
    link_list p = *list;
    link_list n = (link_list)malloc(sizeof(Node));
    char ch[10];
    char enter[10];

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t*请输入用户编号:\t");
    scanf("%s", n->id);
    getchar();

    while(p != NULL)
    {
        if(p->id == n->id)
        {
            printf("\t\t\t\t\t                                            \n");
            printf(color_red"\t\t\t\t\t**编号重复!!!\n"color_none);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t**请重新输入编号:    ");
            scanf("%s", n->id);
            getchar();
            continue;
        }
        p = p->next;
    }
    p = (*list);

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t*请输入用户姓名:\t");
    scanf("%s", n->name);
    getchar();
    while (p != NULL)
    {   
        if(strcmp(p->name, n->name) == 0)
        {
            printf(color_red"\t\t\t\t\t**姓名重复!!!\n"color_none);
            printf("\t\t\t\t\t**若想修改该用户信息请按q键!!!\n");
            printf("\t\t\t\t\t**若想重新输入请按r键!!!\n");
            printf("\t\t\t\t\t**请输入:");
            scanf("%s", ch);
            getchar();
            if(ch[0] ==  'q')
            {
                free(n);
                return 2;
            }
            else if(ch[0] == 'r')
            {
                printf("\t\t\t\t\t*请重新输入姓名: ");
                scanf("%s", n->name);
                getchar();
                continue;
            }
            else
            {
                printf(color_red"\t\t\t\t\t**未知命令\n"color_none);
                continue;
            }
        }
        p = p->next;
    }
    p = (*list);

    printf("\t\t\t\t\t                                            \n");

    printf("\t\t\t\t\t*请输入用户住址:\t");
    scanf("%s", n->addres);
    getchar();

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t*请输入用户手机号:\t");
    scanf("%s", n->tel);
    getchar();
    while(strlen(n->tel) != 11)
    {
        printf(color_red"\t\t\t\t\t**号码长度错误,请重新输入:  "color_none);
        scanf("%s", n->tel);
        getchar();
    }
    while(p != NULL)
    {
        if(strcmp(p->tel, n->tel) == 0)
        {
            printf(color_red"\t\t\t\t\t**号码重复,请重新输入:    "color_none);
            scanf("%s", n->tel);
            getchar();
            continue;
        }
        p = p->next;
    }
    p = (*list);

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t*请输入用户住宅电话:\t");
    scanf("%s", n->homephone);
    getchar();
    while(strlen(n->homephone) != 8)
    {
        printf(color_red"\t\t\t\t\t**号码长度错误,请重新输入:  "color_none);
        scanf("%s", n->homephone);
        getchar();
    }
    while(p != NULL)
    {
        if(strcmp(p->homephone, n->homephone) == 0)
        {
            printf(color_red"\t\t\t\t\t**号码重复,请重新输入:    "color_none);
            scanf("%s", n->homephone);
            getchar();
            continue;
        }
        p = p->next;
    }
    p = (*list);


    while (p->next != NULL)
    {
        if(strcmp((p->next)->name, n->name) > 0)
        {   
            n->next = p->next;
            p->next = n;
            return 1;
        }
        p = p->next;
    }


    n->next = p->next;
    p->next = n;

    return 1;


}

int traversal_list(link_list list)
{
    system("clear");
    link_list p = list->next;

    if(p == NULL)
    {
        return 0;
    }
    while(p != NULL)
    {
        printf("\t\t\t\t\t############################################\n");
        printf("\t\t\t\t\t                                            \n");
        printf("\t\t\t\t\t编号:       %d\n", p->id);
        printf("\t\t\t\t\t                                            \n");
        printf("\t\t\t\t\t姓名:           %s\n", p->name);
        printf("\t\t\t\t\t                                            \n");
        printf("\t\t\t\t\t地址:           %s\n", p->addres);
        printf("\t\t\t\t\t                                            \n");
        printf("\t\t\t\t\t手机号码:     %s\n", p->tel);
        printf("\t\t\t\t\t                                            \n");
        printf("\t\t\t\t\t住宅电话:     %s\n", p->homephone);
        printf("\t\t\t\t\t                                            \n");
        printf("\t\t\t\t\t############################################\n");
        p = p->next;
    }
    return 1;
}

int search_list(link_list list)
{
    system("clear");
    link_list p = list;
    char a[20];

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t*请输入你想查找的名字:");
    scanf("%s", a);
    getchar();
    while(p != NULL)
    {
        if(strcmp(p->name, a) == 0)
        {
            printf("\t\t\t\t\t############################################\n");
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t编号:       %d\n", p->id);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t姓名:           %s\n", p->name);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t地址:           %s\n", p->addres);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t手机号码:     %s\n", p->tel);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t住宅电话:     %s\n", p->homephone);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t############################################\n");
            return 1;
        }
        p = p->next;
    }
    return 0;
}

int change_list(link_list list)
{
    system("clear");
    link_list p = list;
    link_list m = list;
    char a[20];
    char b[10];
    char c[20];  //存输入的电话号码

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t*请输入你想修改信息的名字:");
    scanf("%s", a);
    getchar();
    while(p != NULL)
    {
        if(strcmp(p->name, a) == 0)
        {
            while(1)
            {
                printf("\t\t\t\t\t                                            \n");
                printf("\t\t\t\t\t############################################\n");
                printf("\t\t\t\t\t 1.地址  2.手机号码  3.住宅电话  4.退出修改 \n");
                printf("\t\t\t\t\t                                            \n");
                printf("\t\t\t\t\t *请输入你想修改的信息的编号:");
                fgets(b, 2, stdin);

                switch(b[0])
                {
                    case '1':
                    {
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t*请输入新地址:");
                        scanf("%s", p->addres);
                        printf(color_red"\t\t\t\t\t**修改成功!!!\n"color_none);
                        break;
                    }
                    case '2':
                    {
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t*请输入新手机号码:");
                        scanf("%s", c);
                        getchar();
                        while(strlen(c) != 11)
                        {
                            printf(color_red"\t\t\t\t\t**号码长度错误,请重新输入:  "color_none);
                            scanf("%s", c);
                            getchar();
                        }

                        while(m != NULL)
                        {

                            if(strcmp(m->tel, c) == 0)
                            {
                                printf(color_red"\t\t\t\t\t**号码重复,请重新输入:    "color_none);
                                scanf("%s", c);
                                getchar();
                                continue;
                            }
                            m = m->next;
                        }
                        strcpy(p->tel, c);
                        printf(color_red"\t\t\t\t\t**修改成功!!!\n"color_none);
                        break;
                    }
                    case '3':
                    {
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t*请输入新住宅号码:");
                        scanf("%s", c);
                        getchar();

                        while(strlen(c) != 8)
                        {
                            printf(color_red"\t\t\t\t\t**号码长度错误,请重新输入:  "color_none);
                            scanf("%s", c);
                            getchar();
                        }

                        while(m != NULL)
                        {
                            if(strcmp(m->homephone, c) == 0)
                            {
                                printf(color_red"\t\t\t\t\t**号码重复,请重新输入:    "color_none);
                                scanf("%s", c);
                                getchar();
                                continue;
                            }
                            m = m->next;
                        }
                        strcpy(p->homephone, c);
                        printf(color_red"\t\t\t\t\t**修改成功!!!\n"color_none);
                        break;
                    }
                    case '4':
                    {
                        return 1;
                    }
                }
            }
        }
        p = p->next;
    }
    return 0;
}

int delete_list(link_list list)
{
    system("clear");
    link_list p = list;
    link_list tmp;
    char a[20];


    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t*请输入你想删除信息的名字:");
    scanf("%s", a);
    getchar();

    while(p->next != NULL)
    {
        if(strcmp(p->next->name, a) == 0)
        {
            tmp = p->next;
            p->next = tmp->next;
            free(tmp);
            return 1;
        }
        p = p->next;
    }
    return 0;   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值