通讯录(添加,删除,查找,修改,显示,清空)功能实现 附 注释

18 篇文章 0 订阅
5 篇文章 0 订阅
#pragma once
#include<string.h>//memset所包含的头文件需要引用才可使用
#include<stdio.h>
#define  NAME_MAX 30//定义下方的数值
#define  SEX_MAX   5
#define  TELE_MAX 12
#define  ADDR_MAX 30

#define MAX 1000
struct peoinfo //定义通讯录里人的信息//struct结构体
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];//结构体中被定义的变量
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
};
struct contact
{//最多可放1000个人
	struct peoinfo data[MAX];
	int sz;//当前通讯录有效信息

};
//初始化当前通讯录
void Initcontact(struct contact* pc);
//增加联系人
void Addcontact(struct contact* pc);
//显示联系人
void Showcontact(struct contact* pc);
//删除联系人
void Delcontact(struct contact* pc);
//查找指定联系人
void searchContact(const struct contact* pc);

定义的头文件

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>//引头文件stdio.h
#include"contact.h"//自己定义的引用则需要加上“”双引号引用
void menu()//打印一个菜单
{
	printf("*******************************************\n");
	printf("*****1.增加联系人      2.删除联系人********\n");
	printf("*****3.查找联系人      4.修改联系人********\n");
	printf("*****5.打印信息        6.排序联系人********\n");
	printf("*************  0.退出  ********************\n");
	printf("*******************************************\n");
	printf("*******************************************\n");
}
enum option
{
	EXIT,//退出
	ADD,//增加
	DEL,//删除
	SEARCH,//查找
	MODIFY,//修改
	SHOW,//打印
	SORT//排序
};
int main()//定义主函数
{
	int input = 0;
	struct contact con;
	Initcontact(&con); //初始化init con
	do   //实现dowile循环
	{
		menu();
		printf("请选择:>");
		scanf("%d",&input);
		switch (input)//SWITCH循环调用input
		{
			case	ADD://增加

				Addcontact(&con);
			    break;
			case    DEL://删除
				Delcontact(&con);
				break;
			case SEARCH://查找
				searchContact(&con);
				break;
			case   SHOW://打印
				Showcontact(&con);
				break;

			case   EXIT://退出
				printf("退出\n");

				break;

			default:  //如果上述语句都不成立则default
				printf("选择错误从新选择\n");

				break;
		}
		
	} while (input);//执行结束循环回dowile开头
		
	return 0;//返回0
}

打印菜单

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
#include<stdio.h>
void Initcontact(struct contact* pc)
{

	pc->sz = 0;//将sz初始化为0	
	//    memset(pc->data,0,MAX*sizeof(struct peoinfo));
	memset(pc->data, 0,sizeof(pc->data));//使用memest将pc指向的date初始化为0,设置为peoinfo大小

}
void Addcontact(struct contact* pc)
{
	if(pc->sz==MAX)//当pc->sz满时提示已满
	{
		printf("通讯录溢出\n");
	}
	else
	{
		printf("请输入名字:>");
		scanf("%s", pc->data[pc->sz].name);
		printf("请输入年龄:>");
		scanf("%d",&(pc->data[pc->sz].age));
		printf("请输入性别:>");
		scanf("%s", pc->data[pc->sz].sex);
		printf("请输入电话:>");
		scanf("%s", pc->data[pc->sz].tele);
		printf("请输入地址:>");
		scanf("%s", pc->data[pc->sz].addr);
		//
		printf("增加成功\n");
		pc->sz++;
	}

}
void Showcontact(struct contact* pc)
{
	int i = 0;
	printf("%15s\t5s\t%8s\t%15s\t%30s\n\n",
		"name", "age", "sex", "tele", "addr");
	for (i = 0; i < pc->sz; i++)
	{

		printf("%15s\t5d\t%8s\t%15s\t%30s\n",
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
		//打印每一个数组
	}
}
int FindContactByName(const struct contact* pc,const char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name)==0)
		{
			return i;

        }
		return -1;

	}

}

void Delcontact(struct contact* pc)
{
	if (pc->sz == 0)
	{
		printf("通讯录为空\n");
			return;
	}
	char name[NAME_MAX] = {0};
	printf("请输入删除的联系人:>\n");
	scanf("%s", name);//查找
	int pos = FindContactByName(pc, name);
	if(pos==-1)
	{
		printf("指定联系人不存在\n");//如果查找不到则显示不存在
	}
	else
	{
		int j = 0;
		for (j = pos; j < pc->sz-1; j++)
		{

			pc->data[j] = pc->data[j + 1];
		}
		pc->sz--;
		printf("删除成功\n");                   //删除
	}
}
void searchContact(const struct contact* pc)
{
	char name[NAME_MAX] = {0};
	printf("请输入要查找人的:>");
	scanf("%s", name);
	int pos = FindContactByName(pc, name);
	if (-1 == pos)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("%15s\t5s\t%8s\t%15s\t%30s\n\n",
			"name", "age", "sex", "tele", "addr");

		printf("%15s\t5d\t%8s\t%15s\t%30s\n",
			pc->data[pos].name,
			pc->data[pos].age,
			pc->data[pos].sex,
			pc->data[pos].tele,
			pc->data[pos].addr);

	}
}

 具体实现的代码段功能已注释

如有错误欢迎指出

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值