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

C语言实现简单的电子通讯录

程序员文章站 2024-02-27 21:37:57
...

**制作一个电子通讯录,通过该通讯录能录入好友ID号、姓名(英文)、手
机号码,家庭住址,公司电话。**
原理:分成5个模块,将模块功能实现写入头文件中。主函数部分代码:
显示函数部分,在Markdown里对不齐,意思就这样,将就一下=。=
C语言实现简单的电子通讯录
C语言实现简单的电子通讯录

/*******************************************************************
需求:制作一个电子通讯录,通过该通讯录能录入好友ID号、姓名(英文)、手
机号码,家庭住址,公司电话。
模块:
    主界面:主要显示软件功能,A)添加好友信息 B)列表好友信息。(包含排序
    功能) C)搜索好友 D)删除好友
    A)用户输入INSERT命令后,让用户输入好友信息。添加成功或失败都需提示
    B)用户输入DISPLAY命令后,好友信息升序排列
    C)用户输入SEARCH命令后,让用户输入将要搜索好友姓名查询。如果未搜索
    到请友好提示。如果搜索到,显示处该好友信息
    D)用户输入DELETE命令后,让用户输入将要删除好友姓名删除,如果存在同
    名的多个好友,则列表出,所有同名的好友信息,让用户通过输入ID号删除
    提示用户删除成功。
**********************************************************************/
#include "head.h"

int main ()
{
    int Function;
    int i = 0;
    char Name[N];
    int cho;

    PNode head_node = (PNode) malloc(sizeof(Node)/sizeof(char));
    if (NULL == head_node)
    {
        return MALLOC_ERROR;
    }
    head_node->next = NULL;

    while (1)
    {
        Interface_Display ();
        scanf ("%d", &Function);

        switch (Function)               // 功能选择
        {
            case 1:                     // 添加好友
            {
                Function = 0;
                Add_Friend (head_node, i++);
                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");

                Friend_Information (head_node);
                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", 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");
                Search_Friend (head_node, Name);
                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", Name);
                printf ("\n");
                Delete_Friend (head_node, 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;
}

head.h部分:

#ifndef HEAD_H_
#define HEAD_H_

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>             // sleep函数头文件

#define uint unsigned int
#define OK            0
#define ERROR         -1
#define MALLOC_ERROR  -2
#define N             20 

typedef int ElementType;
typedef struct node
{
    ElementType ID;             // ID号
    char Name [N];              // 姓名
    char Mobile_Phone [N];      // 手机号码
    char Home_Address [N];      // 家庭住址
    char Company_Tell [N];      // 公司电话
    struct node* next;          // 节点指针
}Node;
typedef Node* PNode;            //重命名节点指针类型

//显示操作界面
int Interface_Display ();

//添加好友信息 (尾插法)
int Add_Friend (PNode head, ElementType num);

//显示所有好友信息
int Friend_Information (PNode head);

//查找好友
int Search_Friend (PNode head, char* Name);

//删除好友
void Delete_Friend (PNode head, char* Name);

#endif

head.c的代码:

#include "head.h"

//显示操作界面
int Interface_Display ()
{
    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~                       作者:believe  ~\n");
    printf ("\t~*************************************~\n");
    printf ("                                         \n");
    printf ("                                         \n");
    printf ("\t请输入对应数字选择相应功能:");
}

//添加好友信息 (尾插法)
int Add_Friend (PNode head, ElementType num)
{

    if (NULL == head)
    {
        return ERROR;
    }

    //创建一个新的结点
    PNode p = (PNode) malloc(sizeof(Node)/sizeof(char));
    if (NULL == p)
    {
        return MALLOC_ERROR;
    }

    //将新数据赋给新结点
    system("clear");    
    printf ("\t*************添加好友***************\n");

    p->ID = num;
    printf ("\t好友的ID为:%d\n", p->ID);
    printf ("\n");

    printf ("\t请输入好友的名字:");
    scanf  ("%s", p->Name);
    printf ("\n");

    printf ("\t请输入好友的手机号:");
    scanf  ("%s", p->Mobile_Phone);
    printf ("\n");

    printf ("\t请输入好友的家庭住址:");
    scanf  ("%s", p->Home_Address);
    printf ("\n");

    printf ("\t请输入好友的公司电话:");
    scanf  ("%s", p->Company_Tell);
    printf ("\n");

    p->next = NULL;

    //找到最后一个结点
    PNode Ptmp;                 //将头结点地址给临时指针Ptmp
    Ptmp = head;
    while (Ptmp->next)
    {
        Ptmp = Ptmp->next;
    }
    Ptmp->next = p;

    return OK;
}

//显示所有好友信息
int Friend_Information (PNode head)
{
    if (NULL == head)
    {
        return ERROR;
    }

    PNode p = head->next;

    printf ("\tID\t姓名\t\t手机号\t\t住址\t\t\t公司电话\n");

    while (p)
    {
        printf ("\t%d\t%s\t\t%s\t\t%s\t\t\t%s\n", p->ID,
              p->Name, p->Mobile_Phone, p->Home_Address, 
              p->Company_Tell);
        p = p->next;
    }
    putchar('\n');

    return OK;
}

//查找好友
int Search_Friend (PNode head, char* Name)      //通过名字查找好友
{
    PNode p = head;
    PNode q = NULL;

    if ((NULL != p) && NULL != (p->next))
    {
        while (p->next) 
        {
            q = p->next;
            if ((NULL != q) && 0 == (strcmp(q->Name, Name)))
            {
                printf ("\t好友信息: \n\tID:%d\n\t姓名: %s\n\t手机号码: %s\n\t家庭地址:%s\n\t公司电话: %s\n", q->ID, q->Name, q->Mobile_Phone, q->Home_Address, q->Company_Tell);
            }
            else
            {
                printf ("\t对不起,您的通讯录没有该好友!\n");
            }
            p = p->next;
        }
    }

    /*  另一种做法
    if (NULL == head)
    {
        return ERROR;
    }

    PNode p;
    int flag = 1;
    for (p = head->next; p != NULL; p = p->next)
    {
        if (0 == strcmp(p->Name, Name))
        {
            flag = 0;
            printf ("\t好友信息:\n\tID: %d\n\t姓名: %s\n\t手机号码: %s\n\t家庭地址: %s\n\t公司电话: %s\n", p->ID, p->Name, p->Mobile_Phone, p->Home_Address, p->Company_Tell);
        }
    }
    fi (flag)
    {
        printf ("\t对不起,您的通讯录没有该好友!\n");
    }

    putchar('\n');
    */

    return OK;
}

//删除好友
void Delete_Friend (PNode head, char* Name)
{
    PNode p = head;
    PNode q = NULL;

    while (NULL != p && NULL != (p->next))
    {
        q = p->next;
        if (NULL != q && 0 == strcmp(q->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->Name, Name))
        {
            printf ("\t您的通讯录没有该好友!\n");
        }
        p = p->next;
    }
}