用结构体实现一个 可以用来存储1000个人的信息的通讯录,每个人的信息包括:

姓名、性别、年龄、电话、住址

程序如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>  struct People
{  char name[20];  char sex[5];  int  age;  char tel[15];  char addr[50];
};                          //定义人的信息结构体(包含各种信息)  struct Contact
{  struct People person[1000];  //定义通讯录结构体int n;                        //(包含人的信息的结构体和用户个数n)
};                            typedef struct Contact * p;  void menu();
int add(p q);      //p是一个结构体指针类型,q是一个指向struct Contact的一个指针
int delete(p q);    //例如:typedef int *  int 即 int *p  ==> int p
int find(p q);
int modify(p q);
int show(p q);
int clear(p q);   //函数的声明  void menu()                                                                          //目录格式
{  printf("====================欢迎来到苏嵌154通讯录==================\n");  printf("----------------------1.添加联系人信息---------------------\n");  printf("----------------------2.删除指定联系人信息-----------------\n");  printf("----------------------3.查找指定联系人信息-----------------\n");  printf("----------------------4.修改指定联系人信息-----------------\n");  printf("----------------------5.显示所有联系人信息-----------------\n");  printf("----------------------6.清空所有联系人---------------------\n");  printf("----------------------0.谢谢使用---------------------------\n");  printf("====================欢迎来到苏嵌154通讯录==================\n");
}  int add(p q)     //添加联系人
{  if((*q).n >= 1000)  {  printf("contact is full!\n");  return -1;  }  else  {  printf("输入姓名:\n");  scanf("%s",(*q).person[(*q).n].name);  printf("输入性别:\n");  scanf("%s",(*q).person[(*q).n].sex);  printf("输入年龄:\n");  scanf("%d",&(*q).person[(*q).n].age);        printf("输入电话:\n");  scanf("%s",(*q).person[(*q).n].tel);  printf("输入地址:\n");  scanf("%s",(*q).person[(*q).n].addr);  ((*q).n)++;  }  return 0;
}                                                    int delete(p q)        //删除联系人
{  int ret = find(q);                   //调用查找函数并保存其值  if(ret != -1)  {  int i = 0;  i = ret;                        //这里要用另一个变量来保存输入的姓名  for(i = 0;i < (*q).n-1;i++)  {  (*q).person[i] = (*q).person[i+1];         //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤  }  (*q).n --;                    //直接减去最后一个即count--  }  return 0;
}  int find(p q)        //查找联系人
{  int i = 0;  char ret[20];                       //用另一个数组来保存姓名  printf("输入姓名:\n");  scanf("%s",ret);  while(i <= (*q).n)  {  if(strcmp(ret,(*q).person[i].name)== 0)         //比较输入的姓名和通讯录中已有的姓名  {  printf("姓名\t性别\t年龄\t电话\t地址\4t\n");           //制表符来制作表头  printf("%s\t",(*q).person[i].name);  printf("%s\t",(*q).person[i].sex);  printf("%d\t",(*q).person[i].age);  printf("%s\t",(*q).person[i].tel);  printf("%s\4t\n",(*q).person[i].addr);     return i;  }  i++;  }  printf("你丫的我班没这个人\n");  return -1;
}  int modify(p q)                   //修改函数,首先找到如要修改的姓名,然后重新输入
{  int ret = find(q);  if(ret != -1)  {  printf("输入修改的姓名:\n");  scanf("%s",(*q).person[ret].name);  printf("输入修改的性别:\n");  scanf("%s",(*q).person[ret].sex);  printf("输入修改的年龄:\n");  scanf("%d",&((*q).person[ret].age));  printf("输入修改的电话:\n");  scanf("%s",(*q).person[ret].tel);  printf("输入修改的地址:\n");  scanf("%s",(*q).person[ret].addr);  }  else  {  printf("你丫的我班没这个人\n");  }  return 0;
}  int show(p q)        //显示全部联系人
{  int i = 0;  printf("姓名\t性别\t年龄\t电话\t地址\4t\n");     for(i = 0;i < (*q).n;i++)  {  printf("%s\t",(*q).person[i].name);  printf("%s\t",(*q).person[i].sex);  printf("%d\t",(*q).person[i].age);  printf("%s\t",(*q).person[i].tel);  printf("%s\4t\n",(*q).person[i].addr);  }  printf("\n");  return 0;
}  int clear(p q)       //清除所有人,直接让成员个数变为0
{  (*q).n = 0 ;  return 0;
}                                int main()
{     int n=1;  struct Contact people;      //调用通讯录结构体  people.n = 0;                 //初始化n  while(n)  {  menu();   printf("请选择你的骚操作:\n");scanf("%d",&n);  switch(n)                  //switch  case语句分支选择不同函数实现不同作用 {  case 1:{  add(&people);  break;  }  case 2:  {  delete(&people);  break;  }  case 3:  {  find(&people);  break;  }     case 4:  {  modify(&people);  break;  }  case 5:  {  show(&people);  break;  }  case 6:  {  clear(&people);  break;  }  default:  {  return 0;  break;  }                   }  }  return 0;
}  

这样就实现了一个简单的通讯录。

注意:文章部分语句只为使得程序不那么枯燥而写,不喜勿怪。

利用c语言结构体实现通讯录相关推荐

  1. 利用C语言结构体实现学生成绩录入系统

    利用C语言结构体实现学生成绩录入系统 ##功能介绍 密码功能嵌入于主函数中,初始密码为:123456(可根据需要修改) 输入1可以调用add函数对学生的基本信息以及成绩进行输入 输入2则调用print ...

  2. 利用c语言结构体和union实现类似c++的public,private的实现

    最近在看strongswan源代码,看到strongswan的代码框架很有意思,用C语言实现类的思想.当我们编写完一个模块,我们需要提供的是H的文件给其他模块使用,我们希望H文件中就只能包含一些公有函 ...

  3. c语言结构体实现存储信息,用C语言结构体实现通讯录

    实现一个通讯录: 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1.    添加联系人信息 2.    删除指定联系人信息 3.    查找指定联 ...

  4. 利用C语言结构体解决“各个国家体育竞赛获奖排名”问题

    一.题目描述:      输入一个正整数N代表国家个数,紧接着输入国家名称,该国家获得金牌数目,获得银牌数目,获得铜牌数目.然后根据输入输出国家获奖排名,排名规则是首先按金牌排名,如果金牌相同则比较银 ...

  5. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  6. ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据

    前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...

  7. 关于c语言结构体偏移的一点思考

    注:此处只是利用了编译器的特性来计算结构体偏移 这句话就一笔带过,说得有点牵强附会.以后有时间自己再详细了解一下编译器的特性... more exceptional c++ 中文版 26页 https ...

  8. C语言结构体对齐的不足

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105065657 C ...

  9. c语言结构体单元测试,C语言结构体单元练习.doc

    C语言结构体单元练习 1.有以下定义和语句: struct student { int age; int num; }; struct student stu[3]={{1001,20},{1002, ...

最新文章

  1. QCon上海2015 架构实战热点前瞻
  2. 【数字信号处理】傅里叶变换性质 ( 频域函数的共轭对称分解 | 序列的傅里叶变换 | 傅里叶变换的共轭对称 | 傅里叶变换的共轭反对称 )
  3. Apache CXF实现WebService发布和调用
  4. Python连接字符串用join还是+
  5. VS如何更改项目类型?
  6. Linux下安装VMware Tools 的方法
  7. 在Heroku上部署(托管)Rails项目
  8. Python练习-从小就背不下来的99乘法表
  9. 推荐系统(3)-协同过滤2-矩阵分解算法
  10. linux 查看是否安装perl模块
  11. 【node内存泄漏耗尽之解决方法】
  12. jQuery Mobile中导航栏navbar的data-*选项
  13. 3月15日 卡尔曼与多元传感器融合
  14. 纯js实现下载功能【附上js代码】
  15. 小米出品的最干净的APP,浏览器界的一股“清流”!
  16. Simscape/Fluids液压元件 -- Pressure Reducing Valve(减压阀)
  17. Lenovo ThinkPad SL400安装克隆版的XP
  18. 比赛介绍评委的pp咋做_播音主持专业如何做自我介绍?
  19. oracle rac实现,炼数成金Oracle 12C RAC集群原理与管理实战 16课
  20. 孙溟㠭20载艺术之路

热门文章

  1. wifi热点创建和自动连接
  2. Docker 使用快速入门
  3. ubuntu 20.04 安装ibus-rime输入法
  4. 斐波拉契数列前n项和 斐波拉契数列第n项
  5. 混合高斯模型去除背景
  6. 【矩阵论】线性空间与线性变换(6)
  7. 2019 My excel
  8. python excel表格排序_Python实现EXCEL表格的排序功能
  9. 行人reid ,多个开源地址数据变成 market1501格式合并,附代码,数据地址
  10. 【系统维护篇】 之 从零开始