一、要求

实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
添加联系人信息
删除指定联系人信息
查找指定联系人信息
修改指定联系人信息
显示所有联系人信息
清空所有联系人
以名字排序所有联系人

二、程序实现

1.创建一个菜单供玩家选择和操作
这个是主函数

#include"test.h"
void menu()
{printf("*********1.add************2.search***********\n");printf("*********3.del************4.show*************\n");printf("*********5.clear**********6.Destroy**********\n");printf("*********0.exit******************************\n");
}void game()
{int input = 0;Contact con;//通讯录InitContact(&con);do{menu();       printf("请输入你的操作:  \n");scanf_s("%d", &input);int ret = 0;//定义ret的时候要放到switch的外面switch (input){case 0:printf("推出游戏");break;case 1:AddContact(&con);break;case 2:ret=SearchContact(&con);if (ret == -1){printf("查无此人\n");}break;case 3:DelContact(&con);break;case 4:ShowContact(&con);break;case 5:ClearContact(&con);break;default:break;}} while (input);
}
int main()
{game();return 0;
}

函数的声明在.h文件中

#pragma once//防止重复定义
#define MAX_NUM_PER 5 //定义最大人数为5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<string.h>
//人物的信息
typedef struct Personlnfo
{char name[10];char sex[5];int age;char tel[15];char address[20];
}Personlnfo;//定义结构体typedef struct Contact
{Personlnfo per[MAX_NUM_PER];//结构体数组int usedSize;//当前通讯录的人数
}Contact;void InitContact(Contact* pCon);//初始化通讯录void AddContact(Contact* pCon);//添加成员int SearchContact(Contact* pCon);//找到返回下标 找不到返回-1 姓名查找void DelContact(Contact* pCon);//删除成员void ShowContact(Contact* pCon);//展示成员信息void ClearContact(Contact* pCon);//清除所有成员

一个.h文件要有一个.c文件与之对应
1.初始化成员

#include"test.h"
void InitContact(Contact* pCon)
{assert(pCon != NULL);pCon->usedSize = 0;//将我们数组的内容,置为0memset(pCon->per,0,sizeof(pCon->per));
}

2.添加成员信息

void AddContact(Contact* pCon)
{assert(pCon != NULL);if (pCon->usedSize == MAX_NUM_PER){printf("通讯录已经满了");return;}printf("请输入你的姓名: ");scanf("%s",pCon->per[pCon->usedSize].name);printf("请输入你的性别: ");scanf("%s",pCon->per[pCon->usedSize].sex);printf("请输入你的年龄: ");scanf("%d",&(pCon->per[pCon->usedSize].age));printf("请输入你的电话: ");scanf("%s",pCon->per[pCon->usedSize].tel);printf("请输入你的地址: ");scanf("%s",pCon->per[pCon->usedSize].address);pCon->usedSize++;printf("插入成功\n");
}

3.展示成员信息

void ShowContact(Contact* pCon)
{printf("%-10s  %-10s  %-10s  %-20s  %-10s\n", "姓名","年龄","性别","电话","地址");for (int i = 0; i < pCon->usedSize; i++){printf("%-10s  %-10d  %-10s  %-20s  %-10s\n",pCon->per[i].name, pCon->per[i].age, pCon->per[i].sex, pCon->per[i].tel, pCon->per[i].address);}
}

左对齐,让数字更加工整

4.查找成员

//找到返回下标 找不到返回-1 姓名查找
int SearchContact(Contact* pCon)
{assert(pCon != NULL);printf("请输入你要查找的姓名: ");char name[10] = { 0 };scanf("%s", name);for (int i = 0; i < pCon->usedSize; i++){if ((strcmp(pCon->per[i].name,name))==0){ return i;}}return -1;
}


这边没有写找到会怎样,可以自己加。
找到没有显示,找不到则显示查无此人
添加的成员是哈哈

5.删除成员信息

void DelContact(Contact* pCon)
{assert(pCon != NULL);int index = SearchContact(pCon);if (index == -1){printf("没有你要删除的人\n");return;}//说明有删除的人int i = index;for (; i < pCon->usedSize -1; i++){pCon->per[i] = pCon->per[i + 1];}pCon->usedSize--;printf("删除成功\n");
}

6.清除所有

void ClearContact(Contact* pCon)
{pCon->usedSize = 0;
}

这样,就把所有函数写完,程序实现运行
有一个摧毁程序,还没有具体实施,但是前面的已经够用

全部代码

test.h

#pragma once
#define MAX_NUM_PER 5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<string.h>
//人物的信息
typedef struct Personlnfo
{char name[10];char sex[5];int age;char tel[15];char address[20];
}Personlnfo;typedef struct Contact
{Personlnfo per[MAX_NUM_PER];//结构体数组int usedSize;//当前通讯录的人数
}Contact;void InitContact(Contact* pCon);//初始化通讯录void AddContact(Contact* pCon);//找到返回下标 找不到返回-1 姓名查找
int SearchContact(Contact* pCon);void DelContact(Contact* pCon);void ShowContact(Contact* pCon);void ClearContact(Contact* pCon);

main.c

#include"test.h"
void menu()
{printf("*********1.add************2.search***********\n");printf("*********3.del************4.show*************\n");printf("*********5.clear**********6.Destroy**********\n");printf("*********0.exit******************************\n");
}void game()
{int input = 0;Contact con;//通讯录InitContact(&con);do{menu();       printf("请输入你的操作:  \n");scanf_s("%d", &input);int ret = 0;//定义ret的时候要放到switch的外面switch (input){case 0:printf("推出游戏");break;case 1:AddContact(&con);break;case 2:ret=SearchContact(&con);if (ret == -1){printf("查无此人\n");}break;case 3:DelContact(&con);break;case 4:ShowContact(&con);break;case 5:ClearContact(&con);break;default:break;}} while (input);
}
int main()
{game();return 0;
}

test.c

//实现.h的内容
#include"test.h"
void InitContact(Contact* pCon)
{assert(pCon != NULL);pCon->usedSize = 0;//将我们数组的内容,置为0memset(pCon->per,0,sizeof(pCon->per));/*for (int i = 0; i < MAX_NUM_PER; i++)
}void AddContact(Contact* pCon)
{assert(pCon != NULL);if (pCon->usedSize == MAX_NUM_PER){printf("通讯录已经满了");return;}printf("请输入你的姓名: ");scanf("%s",pCon->per[pCon->usedSize].name);printf("请输入你的性别: ");scanf("%s",pCon->per[pCon->usedSize].sex);printf("请输入你的年龄: ");scanf("%d",&(pCon->per[pCon->usedSize].age));printf("请输入你的电话: ");scanf("%s",pCon->per[pCon->usedSize].tel);printf("请输入你的地址: ");scanf("%s",pCon->per[pCon->usedSize].address);pCon->usedSize++;printf("插入成功\n");
}//找到返回下标 找不到返回-1 姓名查找
int SearchContact(Contact* pCon)
{assert(pCon != NULL);printf("请输入你要查找的姓名: ");char name[10] = { 0 };scanf("%s", name);for (int i = 0; i < pCon->usedSize; i++){if ((strcmp(pCon->per[i].name,name))==0){ return i;}}return -1;
}
void DelContact(Contact* pCon)
{assert(pCon != NULL);int index = SearchContact(pCon);if (index == -1){printf("没有你要删除的人\n");return;}//说明有删除的人int i = index;for (; i < pCon->usedSize -1; i++){pCon->per[i] = pCon->per[i + 1];}pCon->usedSize--;printf("删除成功\n");
}
void ShowContact(Contact* pCon)
{printf("%-10s  %-10s  %-10s  %-20s  %-10s\n", "姓名","年龄","性别","电话","地址");for (int i = 0; i < pCon->usedSize; i++){printf("%-10s  %-10d  %-10s  %-20s  %-10s\n",pCon->per[i].name, pCon->per[i].age, pCon->per[i].sex, pCon->per[i].tel, pCon->per[i].address);}
}
void ClearContact(Contact* pCon)
{pCon->usedSize = 0;
}

通讯录(结尾附全部代码)相关推荐

  1. 世界杯ing~这不来个实时数据可视化?(结尾附源码)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  2. 腾讯位置 - 服务端IP定位(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  3. 圣诞树的雪花飘飘(结尾附源码)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  4. Web前端:HTML最强总结 附详细代码

    Web前端基础: Web前端:HTML最强总结 附详细代码 Web前端:CSS最强总结 附详细代码 Web前端:JavaScript最强总结 附详细代码 Web前端工具: Web前端: JQuery最 ...

  5. 吴恩达机器学习python实现(6):SVM支持向量机(文末附完整代码)

    所有的数据来源:链接:https://pan.baidu.com/s/1vTaw1n77xPPfKk23KEKARA 提取码:5gl2 1 Support Vector Machines 1.1 Pr ...

  6. 初入职场-面试官都会问些什么?(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  7. Web前端:JavaScript最强总结 附详细代码 (带常用案例!)

    Web前端基础: Web前端:HTML最强总结 附详细代码 Web前端:CSS最强总结 附详细代码 Web前端:JavaScript最强总结 附详细代码 Web前端工具: Web前端: JQuery最 ...

  8. 腾讯位置 - 地址解析(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  9. 腾讯位置 - 逆地址解析(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  10. 免费好用的天气服务 - Tuya(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

最新文章

  1. 独家 | 一文读懂神经网络(附解读案例)
  2. Mac下使用svn命令
  3. UA MATH575B 数值分析下VI 统计物理的随机模拟方法2
  4. Kafka基本的概念
  5. 404. 左叶子之和
  6. Appium+python自动化2-环境搭建(windows下)
  7. 11个顶级 JavaScript 日历插件
  8. 【用户行为即时分析查询】 数据仓库实现 案例分享
  9. mysql memcached 使用场景_memcache 应用场景
  10. linux-使用xftp远程传输文件给主机
  11. skywalking 6.1 简明指南
  12. 错误及原因推测:sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S: 没有那个文件或目录
  13. H3C路由器-内/外网用户通过公网IP访问内部服务器
  14. php企鹅号_腾讯内容开放平台
  15. ES安装中文IK分词器
  16. 督查督办工作基本程序
  17. 利用IPv6的地址特性写一个攻击甩锅程序
  18. 激光三角测量物体高度
  19. myd文件 php项目,MYSQL表引擎与文件.frm,.myd,.myi
  20. “手术机器人”掀起融资潮,行业正加速打破“达芬奇”神话

热门文章

  1. 如何看懂一个c语言项目,初学者怎样看懂代码 学习代码编程的注意事项
  2. switchhosts以管理员身份运行后不显示故障处理
  3. SQL注入攻击与防御学习笔记一
  4. Hadoop_23_oozie
  5. FPGA芯片行业科普
  6. r9270公版bios_华硕R9270显卡开机不显示故障维修
  7. 陪集编码(Coset coding)
  8. c语言计算机病毒程序代码,bat电脑病毒代码
  9. tinymce 字体样式_TinyMCE-添加中文字体及修改字体大小
  10. 【Python】Python IDLE 设置清屏功能(清屏快捷键Ctrl+w,亲测通用)