c语言实现一个通讯录

小周末学习了结构体,今天打算自己做一个通讯录,这个通讯录保存若干个用户信息,每个用户信息中包含姓名,电话。
我们想要这个通讯录可以实现增删改查的功能。

首先,首先我们要创建一个结构体,这个结构体保存了每个人的信息(姓名及电话)

typedef struct PersonInfo{
	char name[NAME_MAX_SIZE];
	char phone[PHONE_MAX_SIZE];
}PersonInfo;

紧接着,我们又创建一个通讯录结构体,这个结构体,包含了所有人的信息

typedef struct AddrBook{
	PersonInfo persons[PERSONS_MAX_SIZE];
	int size;//当前数组中有效元素的个数
}AddrBook;

我们需要与用户完成一个输入的交换过程,我们这里创建一个菜单函数

int Menu(){
	printf("==================\n");
	printf("欢迎使用通讯录程序\n");
	printf("1.显示所有联系人信息\n");
	printf("2.新增联系人信息\n");
	printf("3.修改联系人信息\n");
	printf("4.删除联系人信息\n");
	printf("0.退出通讯录\n");
	printf("==================\n");
	printf("请输入您的选择:\n");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

其中,1,2,3,4增删改查四个功能,都是结构体传指针传参,对象都是addr_book,我们这里可以用转移表,创建一个函数指针数组来实现四个功能

typedef void(*Func)(AddrBook*)
int main(){
//主函数代码框架
	Init(&addr_book);
	Func func_table[] = {
	    //利用转移表实现四个功能
		PrintAll,
		Add,
		Update
		Remove
	};
	while (1){
	    //与用户进行交换
		int choice = Menu();
		if (choice < 0 || choice > 4){
			printf("输入有误,请重新输入\n");
			continue;
		}
		if (choice == 0){
			printf("good bye\n");
			break;
		}
		func_table[choice - 1](&addr_book);
	}
	system("pause");
	return 0;
}

我们主函数中的每一个功能函数进行分析
我们需要将通讯录初始化
一开始通讯录的有效联系人是0,并且联系人的结构体中电话及姓名都是空字符串

void Init(AddrBook* addr_book){
	assert(addr_book != NULL);
	addr_book->size = 0;
	for (int i = 0; i < PERSONS_MAX_SIZE; ++i){
		memset(addr_book->persons[i].name, 0, NAME_MAX_SIZE)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值