通讯录1.0(C语言版)

###实现一个通讯录的基本增删查改功能。
###代码实现
contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

#define MAX  1000
typedef struct PeInfo
{
	char name[20];
	int age;
	char sex[10];
	char tele[20];
	char addr[30];
}PeInfo;

typedef struct Contact
{ 
	PeInfo data[MAX];
	int sz;
}Contact, *pContact;

void init_con(pContact p);//初始化通讯录
void Add_con(pContact p);// 添加联系人信息
void Dele_con(pContact p);//删除指定联系人信息
void Find_con(pContact p);//查找指定联系人信息
void Revise_con(pContact p);//修改指定联系人信息
void Display_con(pContact p);//显示所有联系人信息
void Empty_con(pContact p);//清空所有联系人 
void Sort_con(pContact p);//以名字排序所有联系人


void adj(pContact p, int i);//写入数据

contact.c

#include"contact.h"
void adj(pContact p, int i)//写入数据
{
	printf("请输入姓名:\n");
	scanf("%s", p->data[i].name);
	printf("请输入年龄:\n");
	scanf("%d", &(p->data[i].age));
	printf("请输入性别:\n");
	scanf("%s", p->data[i].sex);
	printf("请输入电话:\n");
	scanf("%s", p->data[i].tele);
	printf("请输入住址:\n");
	scanf("%s", p->data[i].addr);
}
void init_con(pContact p)
{
	int sz = sizeof(p->data);
	p->sz = 0;
	memset(p->data, 0, sz);
}

void Add_con(pContact p)// 添加联系人信息
{
	if(p->sz == MAX )
	{
		printf("通讯录已满!\n");
		return ;
	}
	adj(p, p->sz);//写入数据
	p->sz++;
}

void Dele_con(pContact p)//删除指定联系人信息
{
	int i=0;
	int j=0;
	char ch=0;
	char name[20]={0};
	if(p->sz==0)
	{
		printf("通讯录为空\n");
		return;
	}
	while(1)
		{
			printf("输入删除对象姓名:");
			scanf("%s", name);
			for(i=0; i<p->sz; i++)
			{
				if(strcmp(name, p->data[i].name)==0)
					break;
			}
			if(i==p->sz)
			{
				printf("不存在\n");
				return;
			}
			printf("确认是否删除?y/n\n");
			scanf("%c", &ch);
			if(ch=='y')
			{
				for(j=i; j<(p->sz-1); j++)
				{
					p->data[j]=p->data[j+1];
				}
				p->sz--;
				return;
			}
			else
				return;
		}
}

void Find_con(pContact p)//查找指定联系人信息
{
	int i=0;
	char name[20]={0};
	printf("所查找人姓名:");
	scanf("%s", name);
	for(i=0; i<p->sz; i++)
	{
		if(strcmp(name, p->data[i].name)==0)
		{
			printf("%15s%10s%10s%20s%20s\n","name","age","sex","tele","addr");
			printf("%15s%10d%10s%20s%20s\n",p->data[i].name, p->data[i].age, p->data[i].sex,
				p->data[i].tele, p->data[i].addr);
			return;
		}
	}
	if(i==p->sz)
		printf("不存在\n");
	return;
}

void Revise_con(pContact p)//修改指定联系人信息
{
	int i=0;
	char name[20]={0};
	if(p->sz==0)
	{
		printf("通讯录为空");
		return;
	}
	printf("输入修改对象姓名:");
	scanf("%s", name);
	for(i=0; i<p->sz; i++)
	{
		if(strcmp(name, p->data[i].name)==0)
		{
			printf("要修改人信息:\n");
			printf("%15s%10s%10s%20s%20s\n","name","age","sex","tele","addr");
			printf("%15s%10d%10s%20s%20s\n",p->data[i].name, 
				p->data[i].age, p->data[i].sex,
				p->data[i].tele, p->data[i].addr);
			printf("修改为:\n");
			adj(p, i);
			printf("修改完成\n");
			return;
		}
	}
	if(i==p->sz)
		printf("不存在\n");
	return;
}

void Display_con(pContact p)//显示所有联系人信息
{
	int i=0;
	printf("%15s%10s%10s%20s%20s\n","name","age","sex","tele","addr");
	if(p->sz==0)
	{
		printf("空\n ");
	}
	for(i=0; i<p->sz; i++)
	{
		printf("%15s%10d%10s%20s%20s\n",p->data[i].name, p->data[i].age, p->data[i].sex,
			p->data[i].tele, p->data[i].addr);
	}
}

void Empty_con(pContact p)//清空所有联系人 
{
	while (1)
	{
		char ch=0;
		printf("确认删除?y/n\n");
		scanf("%c", &ch);
		if(ch=='y')
		{
			p->sz=0;
			break;
		}
		else if(ch=='n')
			break;
		else
			continue;
	}
	return;
}

void Sort_con(pContact p)//按字母排序所有联系人
{
	int i = 0;
	int j = 0;
	for(i=0;i<p->sz-1;i++)
	{
		for(j=0;j<p->sz-1-i;j++)
		{
			if(strcmp(p->data[j].name,p->data[j+1].name)>0)
			{
				PeInfo temp;
				temp = p->data[j];
				p->data[j] = p->data[j+1];
				p->data[j+1] = temp;
			}
		}
	}
	printf("排序完成\n");
	return;
}

test.c//测试部分

#include"contact.h"

void menu()//菜单打印
{
	printf("**************************\n");
	printf("*****   通  讯  录   *****\n");
	printf("**************************\n");
	printf("***** 1.添加  2.删除 *****\n");
	printf("***** 3.查找  4.修改 *****\n");
	printf("***** 5.列表  6.清空 *****\n");
	printf("***** 7.排序  8.退出 *****\n");
	printf("**************************\n");
}

int main()
{
	Contact con;
	int input = 0;
	init_con(&con);
	do{
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add_con(&con);
			break;
		case 2:
			Dele_con(&con);
			break;
		case 3:
			Find_con(&con);
			break;
		case 4:
			Revise_con(&con);
			break;
		case 5:
			Display_con(&con);
			break;
		case 6:
			Empty_con(&con);
			break;
		case 7:
			Sort_con(&con);
			break;
		case 0:
			exit(1);
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	}while(1);
	return 0;
}

###以下为通讯录界面,以及部分功能的实现界面
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述
若有不正之处恳请请留言指正

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值