【C语言】从零开始写出通讯录。

开门见山的说:

目录

创建菜单 

通过switch实现菜单,并使用do-while循环。

 定义通讯录变量

 使用枚举类型代表功能按键

 初始化通讯录

 通讯录增加联系人:           

 为了实现查找和删除功能,我们要创建一个查找函数

 删除联系人

 查找联系人,并打印:

 修改联系人


确定通讯录的功能

//通讯录增加联系人--------1

//删除联系人           --------2

//查找联系人,并打印-----3

//修改联系人           --------4

//打印通讯录           --------5

//退出程序               --------0

 头文件:

#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

 因为每个函数都需要使用指针,需使用assert() 来保证程序稳定性。

创建菜单 

void menu()
{
	printf("---------------------------------\n");
	printf("---------------------------------\n");
	printf("--------1.增加联系人-------------\n");
	printf("--------2.删除联系人-------------\n");
	printf("--------3.查找联系人-------------\n");
	printf("--------4.修改联系人数据---------\n");
	printf("--------5.打印联系人数据---------\n");
	printf("--------0.退出-------------------\n");
	printf("---------------------------------\n");
	printf("---------------------------------\n");

	
}

 

 通过switch实现菜单,并使用do-while循环。

int bh = 0;

	do
	{
		scanf("%d", &bh);
		switch (bh)
		{

		case ADD:
			//通讯录增加联系人
			add_contact(&con);
			break;
		case DEL:
			//删除联系人
			delete_contact(&con);
			break;
		case FIND:
			//查找联系人,并打印
			lookup_contact(&con);
			break;
		case MODIFY:
			//修改联系人
			modify_contact(&con);
			break;
		case PRINT:
			//打印通讯录
		print_contact(&con);
			break;

		case EXT:
			//退出程序
			printf("退出通讯录\n");
			break;
		default:

			printf("输入错误,请重新输入:\n");
			break;
		}

	} while (bh != 0);

 

 定义通讯录变量

使用typedef 方便后期使用

//定义联系人变量
typedef struct data
{
    char name[20];//名字
    int age;//年龄
    char sex[10];//性别
    char tele[15];//电话
    char address[30];//地址

}data;

typedef struct contact//增加序号sz
{
    data da[1000];
    int sz;
}contact;

 使用枚举类型代表功能按键

//使用枚举类型代表功能按键
enum initial
{
	EXT,
	ADD,
	DEL,
	FIND,
	MODIFY,
	PRINT,
};

 

 初始化通讯录

void initial_contact(contact*con)
{
	assert(con);

	//序号初始化为0
	con->sz = 0;

	//memset初始化为0
	memset(con->da, 0, sizeof(con->da));
}

 

 通讯录增加联系人:
            add_contact(&con)

通过变量sz记录序号,每次添加完成sz++;

结构体访问形式->  和. 

void add_contact(contact* con)
{

	assert(con);

	printf("请输入名字:\n");
	scanf("%s", con->da[con->sz].name);

	printf("请输入年龄:\n");
	scanf("%d",  &(con->da[con->sz].age) );

	printf("请输入性别:\n");
	scanf("%s",con->da[con->sz].sex);

	printf("请输入电话号码:\n");
	scanf("%s", con->da[con->sz].tele);

	printf("请输入地址:\n");
	scanf("%s", con->da[con->sz].address);


	printf("输入完毕,添加成功\n");

	con->sz++;
}

 为了实现查找和删除功能,我们要创建一个查找函数

来判断通讯录中是否有该联系人。

将输入的值传到形参arr[]中,使用strcmp函数在循环下,一一进行比较。

并返回下标,没有找到返回-1。

//查找函数
int  look_contact(contact* con,char arr[])
{
	assert(con);

	int i = 0;
	int ho = con->sz + 1;
	for(i = 0; i < ho; i++)
	{	

		int ko = strcmp(con->da[i].name, arr);
		if (0 == ko)
		{
			return i;
		}
	}
	return -1;
}

 删除联系人

查找函数的返回值赋给put,并打印出该联系人。

con->da[h] = con->da[h + 1];使用数组覆盖的方式

并将sz--;

//删除联系人
void delete_contact(contact* con)
{
	assert(con);

	int put = -1;
	while (put == -1)
	{
		printf("请输入要删除的人姓名:\n");
		char name[25] = { "0" };
		scanf("%s", name);
		put = look_contact(con, name);

		if (put > -1)
		{
			printf("%-20s %-5s %-5s %-10s %-15s\n", "姓名", "年龄", "性别", "电话", "地址");
			printf("%-15s %-5d %-5s %-15s %-15s\n", con->da[put].name, con->da[put].age,
				con->da[put].sex, con->da[put].tele, con->da[put].address);
		}
		else
		{
			printf("找不到请重新输入:\n");
		}
	}

	int h = 0;
	for (h = put;h < con->sz - 1; h++)
	{
		con->da[h] = con->da[h + 1];
	}
	printf("删除成功\n");

	con->sz--;
}

 

 查找联系人,并打印:

 使用查找函数找到后进行打印


//查找联系人,并打印
void lookup_contact(contact* con)
{
	assert(con);

	int put = -1;
	while(put==-1)
	{
		printf("请输入要查找的人姓名:\n");
		char name[25] = { "0" };
		scanf("%s", name);
		put = look_contact(con, name);

		if (put > -1)
		{
			printf("%-20s %-5s %-5s %-10s %-15s\n", "姓名", "年龄", "性别", "电话", "地址");
			printf("%-15s %-5d %-5s %-15s %-15s\n", con->da[put].name, con->da[put].age,
				con->da[put].sex, con->da[put].tele, con->da[put].address);
		}
		else
		{
			printf("找不到请重新输入:\n");
		}
	}

}

 


 修改联系人

同样使用查找函数找到后,重新对该结构体进行赋值。

//修改联系人
void modify_contact(contact* con)
{

	assert(con);

	int put = -1;
	while (put == -1)
	{
		printf("请输入要修改的人姓名:\n");
		char name[25] = { "0" };
		scanf("%s", name);
		put = look_contact(con, name);

		if (put > -1)
		{
			printf("%-20s %-5s %-5s %-10s %-15s\n", "姓名", "年龄", "性别", "电话", "地址");
			printf("%-15s %-5d %-5s %-15s %-15s\n", con->da[put].name, con->da[put].age,
				con->da[put].sex, con->da[put].tele, con->da[put].address);
		}
		else
		{
			printf("找不到请重新输入:\n");
		}
	}

	printf("开始修改-请输入名字:\n");
	scanf("%s", con->da[put].name);

	printf("请输入年龄:\n");
	scanf("%d", &(con->da[put].age));

	printf("请输入性别:\n");
	scanf("%s", con->da[put].sex);

	printf("请输入电话号码:\n");
	scanf("%s", con->da[put].tele);

	printf("请输入地址:\n");
	scanf("%s", con->da[put].address);


	printf("输入完毕,修改成功\n");


}

将所有段函数整合起来后便可以得到通讯录

 

 


 

 

哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞吧

    Thanks♪(・ω・)ノ

(期待一下,要是有分享和收藏更好啦

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值