C语言实现简易通讯录

  • 文章目录
  • 前言
  • 一、通讯录的总体思路。
    • 模块化编程
      • 1."tcst.c"
      • 2."contact.h"
      • 3."contact.c"
  • 二、通讯录功能的实现
    • 1.添加一位联系人
    • 2.删除一位联系人
    • 3.修改联系人
    • 4.在屏幕上打印联系人
    • 5.寻找联系人
    • 6.通讯录初始化
  • 总结


前言

在c语言的学习中,我们学习了结构体。结构体,是C语言学习过程中重要的部分,常用于实现对数据库的管理。学完结构体后,相信大家对结构体有了一定的了解,下面就用C语言实现简易的通讯录吧!


、通讯录的总体思路

模块化编程

此次的通讯录我用了3大模块实现,分别是"test.c","contact.c",以及"contact.h"。

 1."tcst.c"

          包括简易菜单以及主函数的实现思路,整体是这样:

 

            (1).简易菜单

//打印菜单
void menu()
{
	printf("****************************\n");
	printf("*****0.Exit the program*****\n");
	printf("*****1. Add   a contact*****\n");
	printf("*****2. Del   a contact*****\n");
	printf("*****3.Modife a contact*****\n");
	printf("*****4.printf a contact*****\n");
	printf("****************************\n");

}

        (2).主函数   

int main()
{
	int input = 0;//输入数组
	contact con;  //创建对象
	ContactInit(&con);
	do 
	{
		menu();               //打印菜单
		scanf("%d", &input);  //输入选项
		switch (input)        //选择功能
		{
		case ADD:             //增加一位联系人
			Add(&con); break;
		case DEL:             //删除一位联系人
			Del(&con); break;
		case MODIFE:          //修改联系人
			Modife(&con); break;
		case EXIT:            //退出程序 
			printf("退出程序");
			return 0;
		case PRINT:           //打印联系人
			print(&con); break;
		default:
			printf("输入错误,请重新输入!\n"); break;
		}
	} while (input);
	return 0;
}

2."contact.h"

创建结构体,通讯录中每个人都有不一样的数据类型,信息种类多样,使用结构体来存放联系人的信息。创建枚举类型,在主函数便以代码的理解。整体是这样:

(1).枚举

//枚举,方便代码阅读
enum option
{
	EXIT,
	ADD,
	DEL,
	MODIFE,
	PRINT,
};

(2).创建结构体

//创建结构体
typedef struct PeoInfo
{
	char nane[NAME_MAX];     //名字
	char sex[SEX_MAX];       //性别
	int age;                 //年龄
	char tele[TELE_MAX];     //电话号码
	char addr[ADDR_MAX];     //地址
}People;

//将1000个联系人的信息存入contact
typedef struct contact
{
	People data[MAX];  //存1000人的信息
	int sz;             //记录通讯录中保存的信息个数
}contact;

(3).声明函数

//初始化函数
void ContactInit(contact* p);

//增加一位联系人
void Add(contact* ps);

//删除一位联系人
void Del(contact* ps);

//打印联系人
void print(contact* ps);

3."contact.c"

各个功能的实现,包含通讯录菜单需要的功能。整体是这样:


 

 

 

二、通讯录功能的实现

具体实现我用注释标明了哈~~

1.添加一位联系人

void Add(contact* ps)
{
	assert(ps);
	if (ps->sz == MAX)
	{
		printf("存储已满");
		return;
	}
	printf("请输入名字:");
	scanf("%s",(ps->data)[ps->sz].nane);
	printf("请输入性别:");
	scanf("%s",(ps->data)[ps->sz].sex);
	printf("请输入年龄:");
	scanf("%d", &(ps->data)[ps->sz].age);
	printf("请输入电话:");
	scanf("%s", &(ps->data)[ps->sz].tele);
	printf("请输入地址:");
	scanf("%s",(ps->data)[ps->sz].addr);
	ps->sz++;
	printf("添加成功!\n");
}

2.删除一位联系人

//删除一位联系人
void Del(contact* ps)
{
	assert(ps);
	char arr[20];
	printf("请输入要删除的联系人的名字:");
	scanf("%s", arr);
	int tmp = Fine_contact(ps,arr);
	if (tmp == -1)
	{
		printf("没有找到,返回\n");
		return;
	}
	int i = 0;
	for (i = tmp; i < ps->sz; i++)
	{
		ps->data[i] = ps->data[i + 1];
	}
	ps->sz--;
	printf("删除成功!\n");
}

3.修改联系人

//修改联系人
void Modife(contact* ps)
{
	assert(ps);
	int arr[20] = { 0 };
	printf("请输入需要修改的联系人:\n");
	scanf("%s", arr);
	int tmp = Fine_contact(ps,arr);
	if (tmp == -1)
	{
		printf("没有找到联系人!\n");
		return;
	}
	printf("请输入名字:");
	scanf("%s", (ps->data)[tmp].nane);
	printf("请输入性别:");
	scanf("%s", (ps->data)[tmp].sex);
	printf("请输入年龄:");
	scanf("%d", &(ps->data)[tmp].age);
	printf("请输入电话:");
	scanf("%s", &(ps->data)[ps->sz].tele);
	printf("请输入地址:");
	scanf("%s", (ps->data)[tmp].addr);
	printf("修改成功!\n");
}

4.在屏幕上打印联系人


//打印联系人
void print(contact* ps)
{
	printf("%-12s %-5s %-5s %-12s %-12s \n","姓名","性别","年龄","电话号码","地址");
	for (int i = 0; i < ps->sz; i++)
	{
		printf("%-12s %-5s %-5d %-12s %-12s\n", (ps->data)[i].nane, (ps->data)[i].sex, (ps->data)[i].age,( ps->data)[i].tele,(ps->data)[i].addr );
	}
}

5.寻找联系人

//寻找联系人
int Fine_contact(contact* ps,char* arr)
{
	assert(ps);
	int i = 0;
	for (i = 0; i < ps->sz; i++)
	{
		if (0==strcmp(arr,(ps->data)[i].nane))
		{
			return i;
		}
	}
	return -1;
}

6.通讯录初始化

//初始化函数
void ContactInit(contact* p)
{
	p->sz = 0;
	memset(p->data, 0, sizeof(p->data));
}

总结

 

  • 29
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天雨~流芳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值