C语言实战小项目——通讯录1.0

静态通讯录的实现


一.通讯录的各项功能及主体框架


1.通讯录的要求实现功能


0.退出菜单
1.添加联系人信息
2.删除指定名字的联系人信息
3.修改联系人的信息
4.查找好友的信息
5.展示通讯录联系人信息

  我们根据通讯录的各项功能进行编写页面菜单

2.页面菜单


void menu()
{

	//打印通讯录菜单
	//0.退出菜单
	//1.添加联系人信息
	//2.删除指定名字的联系人信息
	//3.修改联系人的信息
	//4.查找好友的信息
	//5.展示通讯录联系人信息
	//6.对通讯录指定信息进行排序


	printf("*************************************************\n");
	printf("**********  ——欢迎来到通讯录菜单——  *********\n");
	printf("**********      0.退出菜单              *********\n");
	printf("**********      1.添加联系人信息        *********\n");
	printf("*********       2.删除联系人信息        *********\n");
	printf("*********       3.修改联系人信息        *********\n");
	printf("*********       4.查找联系人信息        *********\n");
	printf("*********       5.展示联系人信息        *********\n");
	printf("*************************************************\n");
}


3.通讯录的主体框架实现


//将菜单的功能一一列举出来,以枚举的类型呈现
enum
{
	EXIT,
	ADD,
	DEL,
	MODIFY,
	SEARCH,
	SHOW,
};

int main()
{
	int input = 0;
	//创建通讯录
	struct Contact con;  //Con就是通讯录,里面包含1000个人的信息,及size

	InitContact(&con);

	do
	{
		menu();
		printf("请选择功能:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case DEL:
			DelContact(&con);
			break;
		case MODIFY :
			MotifyContact(&con);
			break;
		case SEARCH :
			SearchContact(&con);
			break;
		case SHOW:
			ShowContact(con);
			break;
		case EXIT:
			break;
		default:
			printf("选择错误,请重新输入!!\n");
			break;
		}

	} while(input);

	return 0;
}


  我们用枚举类型将功能一一列举出来,同时每一个枚举成员也代表着对应的数字,我们在switch ...case 语句中也不用 case 1,case 2来记录每一功能对应的数字了,直接以case ADD,case DEL表示,更加直接了当。

4.通讯录初始化及个人信息的表示


#define MAX 1000
#define MAX_name 20
#define MAX_tel 20
#define MAX_sex 5
#define MAX_addr 30

struct  PeoInfor
{
	char name[MAX_name];
	int age;
	char sex[MAX_sex];
	char tel[MAX_tel];
	char addr[MAX_addr];
};


struct  Contact
{
	struct  PeoInfor date[MAX];  //  存放个人信息
	int size;                   //记录当前已有的元素个数
};

void InitContact(struct  Contact* ps)
{
	memset(ps->date, 0, sizeof(ps->date));
	ps->size = 0;   //设置通讯录的元素有0个
}

二、功能函数的具体实现


1.增加联系人的信息


void AddContact(struct Contact* ps)
{
	if (ps->size == MAX)
	{
		printf("该通讯录空间已满,无法储存\n");
	}
	else
	{
		printf("请输入姓名:>");
		scanf("%s", ps->date[ps->size].name);
		printf("请输入年龄:>");
		scanf("%d", &(ps->date[ps->size].age));
		printf("请输入性别:>");
		scanf("%s", ps->date[ps->size].sex);
		printf("请输入电话:>");
		scanf("%s", ps->date[ps->size].tel );
		printf("请输入地址:>");
		scanf("%s", ps->date[ps->size].addr);
		ps->size++;
		printf("添加成功\n");
	}

}



2.删除联系人的信息


void DelContact(struct Contact *ps)
{

     //  查找要删除的人在什么位置,根据名字

	char  name[MAX_name];
	printf("请输入要删除的联系人名字:>");
	scanf("%s", name);
	int i = 0;
	int j = 0;
	//查找名字
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(name, ps->date[j].name))
		{
			break;
		}
	}
	
	 if (i==ps->size)   // i从循环里出来,strcmp还是不等于0
	{
		printf("未找到该联系人的信息\n");
	}
	 else
	 {
		 for (j = i; j < ps->size; j++)
		 {
			 ps->date[j] = ps->date[j + 1];
			 
		 }
	 }
	 ps->size--;
	 printf("删除成功\n");
}



3.修改联系人的信息


void MotifyContact(struct Contact *ps)
{
	char  name[MAX_name];
	printf("请输入要删除的联系人名字:>");
	scanf("%s", name);
	int i = 0;
	//查找名字
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(name, ps->date[i].name))
		{
			break;
		}
	}

	if (i == ps->size)   // i从循环里出来,strcmp还是不等于0
	{
		printf("未找到该联系人的信息\n");
	}
		//表示找到该联系人
		//对下标为i的联系人信息进行修改
	else
	{
		printf("请输入姓名:>");
		scanf("%s", ps->date[i].name);
		printf("请输入年龄:>");
		scanf("%d", &(ps->date[i].age));
		printf("请输入性别:>");
		scanf("%s", ps->date[i].sex);
		printf("请输入电话:>");
		scanf("%s", ps->date[i].tel);
		printf("请输入地址:>");
		scanf("%s", ps->date[i].addr);

	}
	
		printf("修改成功\n");
	}
	

4.查找联系人的信息


void SearchContact(struct Contact *ps)
{
	char  name[MAX_name];
	printf("请输入要查找的联系人名字:>");
	scanf("%s", name);
	int i = 0;
	//查找名字
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(name, ps->date[i].name))
		{
			break;
		}
	}

	if (i == ps->size)   // i从循环里出来,strcmp还是不等于0
	{
		printf("未找到该联系人的信息\n");
	}
	//表示找到该联系人
	//对下标为i的联系人信息进行显示
	else
	{
		printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
		printf("%10s\t%4d\t%5s\t%12s\t%20s\n",
			ps->date[i].name,
			ps->date[i].age,
			ps->date[i].sex,
			ps->date[i].tel,
			ps->date[i].addr);
	}
}


5.展示通讯录联系人信息



void ShowContact(struct Contact ps)
{
	if (ps.size == 0)
	{
		printf("通讯录为空,无法展示\n");
	}
	else
	{
		printf("%10s\t%4s\t%5s\t%12s\t%20s\n","名字","年龄","性别","电话","地址");
		int i = 0;
		for (i = 0; i < ps.size; i++)
		{
			printf("%10s\t%4d\t%5s\t%12s\t%20s\n", 
				ps.date[i].name, 
				ps.date[i].age,
				ps.date[i].sex,
				ps.date[i].tel,
				ps.date[i].addr);
		}
	}
}


整体代码展示


1.test.c 通讯录主体框架测试文件


#include <stdio.h>
#include "contact.h"
#include <string.h>

void menu()
{

	//打印通讯录菜单
	//0.退出菜单
	//1.添加联系人信息
	//2.删除指定名字的联系人信息
	//3.修改联系人的信息
	//4.查找好友的信息
	//5.展示通讯录联系人信息
	//6.对通讯录指定信息进行排序


	printf("*************************************************\n");
	printf("**********  ——欢迎来到通讯录菜单——  *********\n");
	printf("**********      0.退出菜单              *********\n");
	printf("**********      1.添加联系人信息        *********\n");
	printf("*********       2.删除联系人信息        *********\n");
	printf("*********       3.修改联系人信息        *********\n");
	printf("*********       4.查找联系人信息        *********\n");
	printf("*********       5.展示联系人信息        *********\n");
	printf("*************************************************\n");
}

//将菜单的功能一一列举出来,以枚举的类型呈现
enum
{
	EXIT,
	ADD,
	DEL,
	MODIFY,
	SEARCH,
	SHOW,
};

int main()
{
	int input = 0;
	//创建通讯录
	struct Contact con;  //Con就是通讯录,里面包含1000个人的信息,及size

	InitContact(&con);

	do
	{
		menu();
		printf("请选择功能:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case DEL:
			DelContact(&con);
			break;
		case MODIFY :
			MotifyContact(&con);
			break;
		case SEARCH :
			SearchContact(&con);
			break;
		case SHOW:
			ShowContact(con);
			break;
		case EXIT:
			break;
		default:
			printf("选择错误,请重新输入!!\n");
			break;
		}

	} while(input);

	return 0;
}



2.contact.c 通讯录函数文件


#include <stdio.h>
#include <string.h>
#include "contact.h"

void InitContact(struct  Contact* ps)
{
	memset(ps->date, 0, sizeof(ps->date));
	ps->size = 0;   //设置通讯录的元素有0个
}

 

void AddContact(struct Contact* ps)
{
	if (ps->size == MAX)
	{
		printf("该通讯录空间已满,无法储存\n");
	}
	else
	{
		printf("请输入姓名:>");
		scanf("%s", ps->date[ps->size].name);
		printf("请输入年龄:>");
		scanf("%d", &(ps->date[ps->size].age));
		printf("请输入性别:>");
		scanf("%s", ps->date[ps->size].sex);
		printf("请输入电话:>");
		scanf("%s", ps->date[ps->size].tel );
		printf("请输入地址:>");
		scanf("%s", ps->date[ps->size].addr);
		ps->size++;
		printf("添加成功\n");
	}

}

void ShowContact(struct Contact ps)
{
	if (ps.size == 0)
	{
		printf("通讯录为空,无法展示\n");
	}
	else
	{
		printf("%10s\t%4s\t%5s\t%12s\t%20s\n","名字","年龄","性别","电话","地址");
		int i = 0;
		for (i = 0; i < ps.size; i++)
		{
			printf("%10s\t%4d\t%5s\t%12s\t%20s\n", 
				ps.date[i].name, 
				ps.date[i].age,
				ps.date[i].sex,
				ps.date[i].tel,
				ps.date[i].addr);
		}
	}
}

void DelContact(struct Contact *ps)
{

     //  查找要删除的人在什么位置,根据名字

	char  name[MAX_name];
	printf("请输入要删除的联系人名字:>");
	scanf("%s", name);
	int i = 0;
	int j = 0;
	//查找名字
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(name, ps->date[j].name))
		{
			break;
		}
	}
	
	 if (i==ps->size)   // i从循环里出来,strcmp还是不等于0
	{
		printf("未找到该联系人的信息\n");
	}
	 else
	 {
		 for (j = i; j < ps->size; j++)
		 {
			 ps->date[j] = ps->date[j + 1];
			 
		 }
	 }
	 ps->size--;
	 printf("删除成功\n");
}


void MotifyContact(struct Contact *ps)
{
	char  name[MAX_name];
	printf("请输入要删除的联系人名字:>");
	scanf("%s", name);
	int i = 0;
	//查找名字
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(name, ps->date[i].name))
		{
			break;
		}
	}

	if (i == ps->size)   // i从循环里出来,strcmp还是不等于0
	{
		printf("未找到该联系人的信息\n");
	}
		//表示找到该联系人
		//对下标为i的联系人信息进行修改
	else
	{
		printf("请输入姓名:>");
		scanf("%s", ps->date[i].name);
		printf("请输入年龄:>");
		scanf("%d", &(ps->date[i].age));
		printf("请输入性别:>");
		scanf("%s", ps->date[i].sex);
		printf("请输入电话:>");
		scanf("%s", ps->date[i].tel);
		printf("请输入地址:>");
		scanf("%s", ps->date[i].addr);

	}
	
		printf("修改成功\n");
	}
		
void SearchContact(struct Contact *ps)
{
	char  name[MAX_name];
	printf("请输入要查找的联系人名字:>");
	scanf("%s", name);
	int i = 0;
	//查找名字
	for (i = 0; i < ps->size; i++)
	{
		if (0 == strcmp(name, ps->date[i].name))
		{
			break;
		}
	}

	if (i == ps->size)   // i从循环里出来,strcmp还是不等于0
	{
		printf("未找到该联系人的信息\n");
	}
	//表示找到该联系人
	//对下标为i的联系人信息进行显示
	else
	{
		printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
		printf("%10s\t%4d\t%5s\t%12s\t%20s\n",
			ps->date[i].name,
			ps->date[i].age,
			ps->date[i].sex,
			ps->date[i].tel,
			ps->date[i].addr);
	}
}


3.contact.h 宏定义及函数声明文件



#define MAX 1000
#define MAX_name 20
#define MAX_tel 20
#define MAX_sex 5
#define MAX_addr 30

struct  PeoInfor
{
	char name[MAX_name];
	int age;
	char sex[MAX_sex];
	char tel[MAX_tel];
	char addr[MAX_addr];
};


struct  Contact
{
	struct  PeoInfor date[MAX];  //  存放个人信息
	int size;                   //记录当前已有的元素个数
};

// 声明函数
void InitContact(struct  Contact* ps);

void AddContact(struct Contact* ps);

void ShowContact(struct Contact ps);

void DelContact(struct Contact *ps);

void MotifyContact(struct Contact *ps);

void SearchContact(struct Contact *ps);


小结


  由于我们写的通讯录是有一定空间的,我们定义的通讯录空间是一定的,所以仍然存在限制和缺点。

#define MAX 1000

struct  Contact
{
	struct  PeoInfor date[MAX];  //  存放个人信息
	int size;                   //记录当前已有的元素个数
};

  这就是通讯录的1.0版本,后续将持续更新,我们将在2.0版本升级为拥有动态内存空间的通讯录,在3.0版本将升级为拥有文件操作保存功能的通讯录版本。


  欢迎大家的关注与欣赏!!



未完待续…



C语言实战项目——动态通讯录2.0

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RAIN 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值