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

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

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

    这两天用C语言编写了一个简易版通讯录(学生信息管理) ,大致功能有添加信息查看信息(自动按姓名排序,printf输出带颜色字体),查找信息(按姓名查找),删除信息(输入姓名删除相关信息),修改信息(输入修改人的名字,可选择修改其任意信息)和退出

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define SIZE 100
    typedef struct student STU;
    int person = 0;
     
    struct student
    {
      char name[10];
      int num;
      int age;
    };
     
    void welcome()
    {
      system("clear");
      printf("\n\n\n\n\t\t\t========================================");
      printf("\n\n\t\t\t\t\tWelcome!\n");
      sleep(3);
    }
     
    void menu()
    {
      system("clear");
      printf("\n\n\t************************************************************************");
      printf("\n\t\t\t\t\t请选择:");
      printf("\n\t\t\t\t\t1.添加信息");
      printf("\n\t\t\t\t\t2.查看信息");
      printf("\n\t\t\t\t\t3.查找信息");
      printf("\n\t\t\t\t\t4.删除信息");
      printf("\n\t\t\t\t\t5.修改信息");
      printf("\n\t\t\t\t\t6.退出");
      printf("\n\t************************************************************************");
     
    }
     
    /*添加信息*/
    void AddInfo(STU *s[])
    {
      system("clear");
      printf("姓名 学号 年龄\n");
      printf("------------------------\n");
      printf("请输入信息:(bye结束添加)\n");
      while(1)
      {
        s[person] = (STU*)malloc(sizeof(STU));
        if(NULL == s[person])
        {
          printf("malloc failure!\n");
        }
        scanf("%s", s[person]->name);
        if(!strcmp(s[person]->name, "bye"))
        {
          break;
        }
        scanf("%d%d", &s[person]->num, &s[person]->age);
        getchar();
        person++;
      }
    }
     
    /*查看信息(按姓名排序)*/
    void ShowAll(STU *s[])
    {
      system("clear");
      int i, j;
      STU *q[1] = {0};
      q[0] = (STU *)malloc(sizeof(STU));
     
     
      printf("information:\n");
     
      for(i = 0; i < person; i++)
      {
        for(j = 0; j < person - 1 - i; j++)
        {
          if(strcmp(s[j]->name, s[j + 1]->name) > 0)
          {
            q[0] = s[j];
            s[j] = s[j + 1];
            s[j + 1] = q[0];
          }
        }
      }
     
      for(i = 0; i < person; i++)
      {
        printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", s[i]->name, s[i]->num, s[i]->age);
      }
      sleep(3);
      getchar();
    }
     
    /*查找信息*/
     
    void Search_name(char *name, STU *s[])
    {
      int i, n = 0;
      for(i = 0; i < person; i++)
      {
        if(strcmp(name, s[i]->name) == 0)
        {
          n++;
          printf("name:%s, num:%d, age:%d\n", s[i]->name, s[i]->num, s[i]->age);
        }
      }
      
      if(n == 0)
      {
        printf("不存在!\n");
      }
    }
     
    void SearchInfo(STU *s[])
    {
      system("clear");
      char *name = (char *)malloc(sizeof(char));
     
      printf("请输入要查找的人的名字:\n");
      scanf("%s", name);
     
      Search_name(name, s);
    }
     
    /*删除信息*/
     
    void DeleteInfo(STU *s[])
    {
      system("clear");
      int i, n = 0, j;
      char del_name[10];
     
      printf("请输入要删除的人的名字:\n");
      scanf("%s", del_name);
      getchar();
      getchar();
     
      for(i = 0; i < person; i++)
      {
        if(strcmp(del_name, s[i]->name) == 0)
        {
          n++;
          free(s[i]);
          for(j = i; j < person - 1; j++)
          {
            strcpy(s[j]->name, s[j + 1]->name);
            s[j]->num = s[j + 1]->num;
            s[j]->age = s[j + 1]->age;
          }
          person--;
        }
      }
     
      if(n == 0)
      {
        printf("要删除的人不存在!\n");
      }
      else
      {
        printf("删除成功!\n");
      }
    }
     
    /*修改信息*/
    void Change_name(char *name, STU *s[])
    {
      int i, n = 0, choice;
      char *new_name = (char *)malloc(sizeof(char));
      int new_num, new_age;
     
      for(i = 0; i < person; i++)
      {
        if(strcmp(name, s[i]->name) == 0)
        {
          n++;
          printf("该学生的信息如下:");
          printf("name:%s, num:%d, age:%d\n", s[i]->name, s[i]->num, s[i]->age);
          printf("----------------------------\n");
          printf("请选择要修改的内容(1.name 2.num 3.age):\n");
          scanf("%d", &choice);
          switch(choice)
          {
            case 1:
              printf("请输入新的名字:\n");
              scanf("%s", new_name);
              strcpy(s[i]->name, new_name);
              break;
            case 2:
              printf("请输入新的学号:\n");
              scanf("%d", &new_num);
              s[i]->num = new_num;
              break;
            case 3:
              printf("请输入新的年龄:\n");
              scanf("%d", &new_age);
              s[i]->age = new_age;
              break;
          }
        }
      }
      
      if(n == 0)
      {
        printf("不存在!\n");
      }
    }
     
    void ChangeInfo(STU *s[])
    {
      system("clear");
      char *name = (char *)malloc(sizeof(char));
     
      printf("请输入要修改的人的名字:\n");
      scanf("%s", name);
     
      Change_name(name, s);
     
    }
     
    int main()
    {
      struct student *s[SIZE] = {0};
      int choice;
     
      welcome();
     
      while(1)
      {
        menu();
        printf("\nPlease input choice:");
        scanf("%d", &choice);
     
        switch(choice)
        {
          case 1:
            AddInfo(s);
            break;
          case 2:
            ShowAll(s);
            break;
          case 3:
            SearchInfo(s);
            break;
          case 4:
            DeleteInfo(s);
            break;
          case 5:
            ChangeInfo(s);
            break;
          case 6:
            exit(0);
            break;
        }
      }
     
      return 0;
    }

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


    广而告之:
    热门推荐:
    javascript 单例模式详解及简单实例

    JS 单例模式 概要: 单例指一个类只有一个实例,这个类自行创建这个实例。 利用对象字面量直接生成一个单例: var singleton = { prop: 1, method: function(){ console.log(a); //1 } } 严格的说对象字面量可能不算单例模式,生成单例是对象字面量的作用(已经被···

    用JavaScript获取DOM元素位置和尺寸大小的方法

    在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScript代码,我们需要了解一些基本知识。 基础概念 为了方便理解,我们需要了解几个基···

    正则表达式与数学(方程式、线性方程)

    正则表达式如下: 复制代码 代码如下: ^1?$|^(11+?)\1+$ 可以判断素数(换成n个1的形式,n为数字的大小。比如5转换为11111;3转换为111;2转换为11。) 什么是素数? 初中学的吧。我们老师当初教我们的是“质数”。看下概念: 质数又称素数。指在一个大于1的自然数中,除···

    jQuery判断浏览器并动态调整select宽度的方法

    本文实例讲述了jQuery判断浏览器并动态调整select宽度的方法。分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1···

    php中将汉字转换成拼音的函数代码

    点击这里下载源文件复制代码 代码如下: function Pinyin($_String, $_Code='gb2312') { $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha". "|chai|chan|chang|chao|che|chen|cheng|chi|···

    js判断是否为数组的函数: isArray()

    今天刚好在学习支付宝 JS 框架 base.js 。瞄了一下,实现是这样的: 复制代码 代码如下: if (value instanceof Array || (!(value instanceof Object) && (Object.prototype.toString.call((value)) == '[object Array]') || typeof value.length == 'number' &a···

    解锁canvas导出图片跨域的N种姿势小结

    本文介绍了解锁canvas导出图片跨域的N种姿势小结,分享给大家,具体如下: Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. 上面这个错误相信大家用canvas执行 toDataUrl导出图片的时候都遇到过,图片···

    织梦移动适配PHP获取当前页面URL地址方法

    在做织梦网站开发时,会遇到获取当前URL并做PHP判断。比如地区站群PC端的移动适配功能,下面提供PHP通用移动端适配方法。 PC首页路径:www.xx.com 移动端首页路径:m.xx.com 地区PC首页路径:beijing.xx.com 地区移动端首页路径:beijing.m.xx.com ···

    全面了解link与import方式的区别

    <style type="text/css">@import url(foo.css) print;</style> <link href="../../***.css" type="text/css" rel="styleSheet"></link>; 1.加载顺序的差别: link--与网站内容同步加载; @import--网站内容全···

    Netbeans 8.2将支持PHP7 更精彩

    首先,将PHP项目的PHP版本设置为PHP 7.0。 PHP 7其中一项新特性是返回类型声明,即PHP的函数和方法可以声明指定类型的返回值: PHP 7的另一项精彩的改进就是参数的标量类型声明,Netbeans的代码自动完成功能提供了这些新类型支持。 NetBeans也支持PHP 7新出现的操作符: ···