交流群:462197261站长百科站长论坛热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
点击这里给我发消息
  • 当前位置:
  • C语言实现简单电子通讯录

    北冥有鱼 教程大全 2020-06-28 ,

    本文实例为大家分享了C语言实现电子通讯录的具体代码,供大家参考,具体内容如下

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

    /*******************************************************************
    需求:制作一个电子通讯录,通过该通讯录能录入好友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;
     }
    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼。


    广而告之:
    热门推荐:
    详解ASP.NET MVC 解析模板生成静态页(RazorEngine)

    简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项。在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目。 我们在很多项目开发中会常常用到页面静态化···

    JS闭包可被利用的常见场景小结

    场景一:采用函数引用方式的setTimeout调用 闭包的一个通常的用法是为一个在某一函数执行前先执行的函数提供参数。例如,在web环境中,一个函数作为setTimeout函数调用的第一个参数,是一种很常见的应用。 setTimeout将要执行的函数(或者一段JavaScript代码,但这不是我们要讨···

    jQuery实现的一个tab切换效果内部还嵌有切换

    大致效果如图 下面是代码:自己导入jQuery包。 样式: <style type="text/css"> body,ul,li,div,a{margin:0px;padding:0px;} body{margin-top:10px;margin-left:15px;} #all{border-left:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc···

    比file

    分享一个实际在用的函数: 复制代码 代码如下: /*比file_get_contents稳定的多!$timeout为超时时间,单位是秒,默认为1s。*/ function curl_get_contents($url,$timeout=1) { $curlHandle = curl_init(); curl_setopt( $curlHandle , CURLOPT_URL, $url ); curl_setopt(···

    JS匹配日期和时间的正则表达式示例

    本文实例讲述了JS匹配日期和时间的正则表达式。分享给大家供大家参考,具体如下: //日期的正则表达式 var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/; var regExp = new RegExp(reg); if(!regExp.test(value)){   alert("日期格式不正确,正确格式···

    MongoDB在PHP中的常用操作小结

    $mongodb = new Mongo(); //$connection = new Mongo( "$dburl:$port" ); // connect to a remote host (default port) $mydb = $mongodb->mydb;  //隐性创建数据库mydb $mydb = $mongodb->selectDB("mydb");  //直接选择已经存在的数据库 $collection =···

    织梦dedecms列表页显示顺序,根据个别字段值实现重新排列

    织梦文章列表中,比如我要求显示最新文章,并按id降序排列,但是,附加表中有一个字段,就叫结束时间的endtime字段,要求按这个字段的值重新排序.比如要求,如果结束时间的值小于系统当前时间,则这个字段值对应的文档自动放到文章列表的最结尾显示. 在文章列表中.要求结束的活动自···

    php中防止SQL注入的最佳解决方法

    如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子:复制代码 代码如下:$unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')");这是因为用户可以输入类似···

    记Asp.Net Core Swagger使用并带域接口处理的方法

    引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升。但是使用Swagger时如果只是一般的控制器直接放到Controller下就可以了,而如果因不同的业务需求而需要分类或者有同名的类名时时则没办法很好的···

    jQuery validate插件submitHandler提交导致死循环解决方法

    本文实例讲述了jQuery validate插件submitHandler提交导致死循环解决方法。分享给大家供大家参考,具体如下: dom对像的提交form.submit();和jquery对像的提交$('').submit();功能上是没有什么区别的。但是如果用了jquery validate插件,提交时这二个就区别大了。$('').submit(···