c语言实现通讯录
发布日期:2022-02-24 01:06:53 浏览次数:8 分类:技术文章

本文共 4974 字,大约阅读时间需要 16 分钟。

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

通讯录菜单栏包括:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人
  7. 以名字排序所有联系人

首先创建contact.h(宏定义、类型声明、函数声明)、contact.c(主要是通讯录菜单栏函数实现)、test.c(对通讯录进行测试)文件

首先是test.c文件,设置菜单栏,通过do...while语句进行循环,switch...case语句进行菜单栏选项的选择。

#define _CRT_SECURE_NO_WARNINGS 1#include
#include"contact.h"void menu(){ printf("*******************************\n"); printf("****** 1. add 2. del * ***\n"); printf("****** 3. search 4. modify ***\n"); printf("****** 5. show 6. empty ***\n"); printf("****** 7.sort 0. exit ***\n"); printf("*******************************\n");}enum Option{ EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, EMPTY, SORT, };//first_name//FirstNamevoid test(){ //创建的通讯录 Contact con = { 0 }; int input = 0; do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case ADD: add_contact(&con); break; case DEL: del_contact(&con); break; case SORT: sort_contact(&con); break; case SHOW: show_contact(&con); break; case SEARCH: search_contact(&con); break; case MODIFY: modify_contact(&con); break; case EMPTY: empty_contact(&con); printf("通讯录已经清空\n"); case EXIT: printf("退出通讯录\n"); break; default: printf("选择错误\n"); break; } } while (input);}int main(){ test(); return 0;}

接下来是contact.h文件,首先对通讯录最大存储数、以及存储信息所占字节数进行宏定义,以便后期方便对代码进行改写

通讯录包含现有人数,以及每个人的信息,创建结构体    

#include 
#include
#define MAX 1000#define MAX_NAME 20#define MAX_TELE 12#define MAX_ADDR 100#define MAX_QQ 12#define MAX_SEX 5typedef struct PeoInfo{ char name[MAX_NAME]; char tele[MAX_TELE]; char addr[MAX_ADDR]; char qq[MAX_QQ]; char sex[MAX_SEX]; short age;}PeoInfo;//通讯录typedef struct Contact{ PeoInfo data[MAX];//数据 int sz;//有效个数}Contact;//添加一个人的信息void add_contact(Contact* pc);//显示通讯录中的信息void show_contact(Contact* pc);//删除指定的联系人void del_contact(Contact* pc);//查找指定联系人void search_contact(Contact* pc);//修改指定联系人void modify_contact(Contact* pc);//排序通讯录的数据void sort_contact(Contact* pc);//清空联系人void empty_contact(Contact* pc);

最后是通讯录菜单栏各功能的实现,contact.c

(1)添加联系人

void add_contact(Contact* pc){	if (pc->sz == MAX)	{		printf("通讯录已满\n");	}	else	{		printf("请输入名字:>");		scanf("%s", pc->data[pc->sz].name);		printf("请输入电话:>");		scanf("%s", pc->data[pc->sz].tele);		printf("请输入地址:>");		scanf("%s", pc->data[pc->sz].addr);		printf("请输入QQ:>");		scanf("%s", pc->data[pc->sz].qq);		printf("请输入性别:>");		scanf("%s", pc->data[pc->sz].sex);		printf("请输入年龄:>");		scanf("%d", &(pc->data[pc->sz].age));		pc->sz++;		printf("添加成功\n");	}}

(2)显示联系人

void show_contact(Contact* pc){	int i = 0;	printf("%10s %12s %20s %5s %12s %5s\n", "名字", "电话", "地址", "年龄", "QQ", "性别");	for (i = 0; i < pc->sz; i++)	{		printf("%10s %12s %20s %5d %12s %5s\n", pc->data[i].name,			pc->data[i].tele,			pc->data[i].addr,			pc->data[i].age,			pc->data[i].qq,			pc->data[i].sex);	}}

(3)通过名字查找联系人(删除联系人、查找联系人、对联系人信息进行修改、以及排序都是通过联系人姓名进行操作)

static int find_peo_by_name(Contact* pc, char name[]){	int i = 0;	for (i = 0; i < pc->sz; i++)	{		if (strcmp(name, pc->data[i].name) == 0)		{			return i;//找到了,返回下标		}	}	return -1;//找不到}

遍历现有联系人,对其名字(字符串)进行比较

(4)删除联系人

void del_contact(Contact* pc){	if (pc->sz == 0)	{		printf("抱歉,通讯录为空\n");	}	else	{		char name[MAX_NAME] = { 0 };		printf("请输入要删除人的名字:>");		scanf("%s", name);		//1. 找到指定的联系人的位置		int pos = find_peo_by_name(pc, name);		if (pos == -1)		{			printf("很遗憾,删除的人不存在\n");		}		else		{			//2. 删除			int j = 0;			for (j = pos; j < pc->sz - 1; j++)			{				pc->data[j] = pc->data[j + 1];			}			pc->sz--;			printf("删除成功\n");		}	}}

(5)查找联系人

void search_contact(Contact* pc){	char name[MAX_NAME] = { 0 };	printf("请输入要查找人的名字:>");	scanf("%s", name);	int pos = find_peo_by_name(pc, name);	if (pos == -1)	{		printf("查无此人\n");	}	else	{		printf("%10s %12s %20s %5s %12s %5s\n",			"名字", "电话", "地址", "年龄", "QQ", "性别");		printf("%10s %12s %20s %5d %12s %5s\n", pc->data[pos].name,			pc->data[pos].tele,			pc->data[pos].addr,			pc->data[pos].age,			pc->data[pos].qq,			pc->data[pos].sex);	}}

(6)修改联系人

void modify_contact(Contact* pc){	char name[MAX_NAME] = { 0 };	printf("请输入要修改人的名字:>");	scanf("%s", name);	int pos = find_peo_by_name(pc, name);	if (pos == -1)	{		printf("查无此人\n");	}	else	{		printf("请输入新的名字:>");		scanf("%s", pc->data[pos].name);		printf("请输入新的电话:>");		scanf("%s", pc->data[pos].tele);		printf("请输入新的地址:>");		scanf("%s", pc->data[pos].addr);		printf("请输入新的QQ:>");		scanf("%s", pc->data[pos].qq);		printf("请输入新的性别:>");		scanf("%s", pc->data[pos].sex);		printf("请输入新的年龄:>");		scanf("%d", &(pc->data[pos].age));	}}

(7)对联系人进行排序

void sort_contact(Contact* pc){	int i = 0;	int j = 0;	for (i = 0; i < pc->sz - 1; i++)	{		int flag = 1;//假设已经有序		for (j = 0; j < pc->sz - 1 - i; j++)		{			if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0)			{				PeoInfo tmp = pc->data[j];				pc->data[j] = pc->data[j + 1];				pc->data[j + 1] = tmp;				flag = 0;			}		}		if (1 == flag)		{			break;		}	}}

(8)清空联系人

void empty_contact(Contact* pc){	pc->sz = 0;	memset(pc->data, 0, MAX*sizeof(PeoInfo));}

 

转载地址:https://blog.csdn.net/weixin_45878524/article/details/109478205 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:VS2019配置Opencv3.4.11
下一篇:内存操作函数memmove库函数改写

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月23日 04时13分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php同时打开2个数据库,thinkphp3.2同时连接两个数据库的简单方法 2019-04-21
centos 开发php扩展,centos 安装php扩展redis 2019-04-21
php+跑buth,php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的 2019-04-21
cms 单点登录 php,Yii2 中实现单点登录的方法 2019-04-21
oracle自己运行,创建Oracle自动执行Job 2019-04-21
oracle报错00020,oracle启动 ORA-00020: maximum number of processes (%s) exceeded错误 2019-04-21
chmod 赋权所有_chmod 权限 命令详细用法 2019-04-21
html代码翻译_[译]您知道 HTML 的键盘标签吗? 2019-04-21
html抽奖代码_JavaScript高手之路:封装抽奖效果 2019-04-21
hadoop 3.3 一直停留在running wordcount_蛋价持续下跌,今日跌破3.3元大关!深秋季节价格还能反弹吗?... 2019-04-21
的流程图做完后如何保存_2019超火的半永久眉是哪款?做完后我们如何护理?... 2019-04-21
去除logo 高德地图api_深圳品牌logo升级如何保持原型的同时更具创新? 2019-04-21
二重积分转换成极坐标_二重积分转换极坐标r的范围如何确定? 2019-04-21
python中倒背如流_八字基础知识--倒背如流篇 2019-04-21
以太坊地址和公钥_以太坊地址是什么 2019-04-21
linux查看wifi信号命令_linux – 获取WIFI信号强度 – 寻求最佳方式(IOCTL,iwlist(iw)等)... 2019-04-21
npm 不重启 全局安装后_解决修复npm安装全局模块权限的问题 2019-04-21
vs格式化json 不生效_vs code 格式化 json 配置 2019-04-21
go 字符串反序列化成对象数组_Fastjson 1.2.24反序列化漏洞深度分析 2019-04-21
onmessage websocket 收不到信息_WebSocket断开重连解决方案,心跳重连实践 2019-04-21