C语言简易通讯录

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
通讯录所具有的功能
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人


结构体对于这个通讯录来说非常重要,我设计了两个结构体,一个是单个联系人的结构体,另外一个是通讯录集合的结构体,这个里面有当前存放容量,和联系人的集合,敲完之后充分理解了做一个交互性好的软件是非常必要的,让用户使用起来感觉方便,对程序员来说真的很有成就感得意,下面废话不多说,以下分别列出了各模块的代码

contact.h

#ifndef __CONTACT__H  
#define __CONTACT__H  
#define NAME_MAX 20
#define SEX_MAX 5
#define TEL_MAX 12
#define ADDR_MAX 30
#define MAX 1000

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


//通讯录单个元素
typedef struct PeoInfo  
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tel[TEL_MAX];
	char addr[NAME_MAX];
}PeoInfo;


//通讯录集合
typedef struct Contact
{
	PeoInfo data[MAX];
	int sz;
}*pcon;

void InitContact(pcon p);
void AddContact(pcon p);
void ShowContact(pcon p);
void DeleteContact(pcon p);
void EmptyContact(pcon p);
void SearchContact(pcon p);
void UpdateContact(pcon p);
void SortContact(pcon p);

#endif//__CONTACT__H 
contact.c
#include "contact.h"
 //初始化通讯录
void InitContact(pcon p)   
{  
	p->sz = 0;  
	memset(p->data,0,sizeof(p->data));  
}  

//当前函数内查找功能
int find(pcon p)
{
	int i = 0;
	char name[NAME_MAX];
    printf("请输入此联系人的姓名>");
	scanf("%s",name);
	for(i=0;i<p->sz;i++)
	{
	

		if(strcmp((p->data[i].name),name)==0)
			return i;//找到返回对应下标
	}
   
	return -1;//找不到返回-1

}

//按照名字对通讯录排序
void SortContact(pcon p)
{
	int i = 0;
	int j = 0;
	PeoInfo tmp;
	if(p->sz==0)
	{
		printf("通讯录为空,无法删除!\n");
		return;
	}
	for(i=0; i<p->sz-1; i++)  
	{  
		for(j=0; j<p->sz-i-1; j++)  
		{  
			if(strcmp(p->data[j].name,p->data[j+1].name)>0)  //按照名字的大小,按照从小到大冒泡排序  
			{  
				tmp = p->data[j];  
				p->data[j] = p->data[j+1];  
				p->data[j+1] = tmp;  
			}  
		}  
	}  
	printf("排序成功!\n");
	return;
	


}

//更新通讯录某一个联系人
void UpdateContact(pcon p)
{

	int ret = 0;
	ret=find(p);
	if(ret==-1)
	{
		printf("通讯录无此联系人!\n");
		return;
	}
	printf("*******请输入变更后的信息*********\n");
    printf("请输入姓名:");
	scanf("%s",p->data[ret].name);
	printf("请输入性别:");
	scanf("%s",p->data[ret].sex);
	printf("请输入年龄:");
	scanf("%d",&(p->data[ret].age));
	printf("请输入电话:");
	scanf("%s",p->data[ret].tel);
	printf("请输入住址:");
	scanf("%s",p->data[ret].addr);

	printf("更新成功!\n");
	return;

}

//根据名字查找对应联系人信息
void SearchContact(pcon p)
{
	int ret = 0;
	ret=find(p);
	if(ret==-1)
	{
		printf("通讯录无此联系人!\n");
		return;
	}
	//打印对应信息
	printf("------------------------------------------------\n");
	printf("|  姓名 |  性别 | 年龄 |    电话   |     住址  |\n");
	printf("%10s%4s%4d%12s%20s\n",
		p->data[ret].name,
		p->data[ret].sex,
		p->data[ret].age,
		p->data[ret].tel,
		p->data[ret].addr);


}

//清空通讯录
void EmptyContact(pcon p)
{
	p->sz=0;
	printf("通讯录清空成功!\n");
	return;
}

//根据名字删除某个联系人
void DeleteContact(pcon p)
{
	int ret = 0;
	int j = 0;
	if(p->sz==0)
	{
		printf("通讯录为空,无法删除!\n");
		return;
	}
	//查找
     ret = find(p); 
     if(ret==-1)
	 {

		 printf("通讯录无此联系人!\n");
		 return;
	 }
	//删除
	for(j=ret;j<(p->sz-1);j++)//这里注意是(p->sz-1),
	{
		p->data[j]=p->data[j+1];
	}
	p->sz--;//对sz减1
	printf("删除成功!\n");
	return;

	
}

//添加联系人
void AddContact(pcon p)
{
	if(p->sz==MAX)
	{
		printf("通讯录已满,无法添加!\n");

	}
     printf("请输入姓名:");
	 scanf("%s",p->data[p->sz].name);
	 printf("请输入性别:");
	 scanf("%s",p->data[p->sz].sex);
	 printf("请输入年龄:");
	 scanf("%d",&(p->data[p->sz].age));
	 printf("请输入电话:");
	 scanf("%s",p->data[p->sz].tel);
	 printf("请输入住址:");
	 scanf("%s",p->data[p->sz].addr);
	
	 p->sz++;//一定要对sz加一

	 printf("添加成功!\n");
	 return;

	
}

//打印通讯录
void ShowContact(pcon p)
{
	int i = 0;
	if(p->sz==0)
	{
		printf("通讯录中无数据,无法打印!\n");
		return;
	}
	printf("------------------------------------------------\n");
	printf("|  姓名 |  性别 | 年龄 |    电话   |     住址  |\n");
	
	for(i=0; i<(p->sz);i++)
	{
		printf("%10s%4s%4d%12s%20s\n",
			p->data[i].name,
			p->data[i].sex,
			p->data[i].age,
			p->data[i].tel,
			p->data[i].addr);

	}
	printf("------------------------------------------------\n");
    return;

	
}
test.c

#include "contact.h"
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS 

//枚举功能
enum OP
{
	Exit,
	Add,
	Delete,
	Search,
	Update,
	Show,
	Empty,
	Sort
};
//菜单
void menu()
{

	printf("**************************\n");
	printf("*****1.Add    2.Delete****\n");
	printf("*****3.Search 4.Update****\n");
	printf("*****5.Show   6.Empty*****\n");
	printf("*****7.Sort   0.Exit******\n");
}

int main()
{
	int input = 0;
    struct Contact s;
	InitContact(&s);

	do 
	{
		menu();
		printf("请选择>:");
		scanf("%d",&input);
		switch(input)
		{

		case Exit:
			break;
		case Add:
			AddContact(&s);
			break;
		case Delete:
			DeleteContact(&s);
			break;
		case Search:
			SearchContact(&s);
			break;
		case Update:
			UpdateContact(&s);
			break;
		case Show:
			ShowContact(&s);
			break;
		case Empty:
			EmptyContact(&s);
			break;
		case Sort:
			SortContact(&s);
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

测试图列:

添加功能


删除功能


查找功能


更新功能


打印功能


清空功能


排序功能


退出功能




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值