C语言-手机通讯录的实现(静态版)

目录

1.通讯录需要哪些文件

2.通讯录的实现步骤

2.1 打印主界面

2.2 主函数的逻辑实现

2.3 初始化函数

2.4 增加用户信息函数

2.5 打印所有用户信息函数

2.6 查找用户信息函数

2.7 删除用户信息函数

2.8 修改用户信息函数

3.总代码

3.1 主函数文件

3.2 通讯录函数文件

3.3 头文件


1.通讯录需要哪些文件

      一共三个文件:头文件、通讯录函数源文件、主函数源文件。

           1)头文件:用来进行函数声明、以及类型的定义。

           2)通讯录函数文件:用来实现我们所需要的函数的。

           3)主函数文件:程序逻辑实现、编译执行的文件。

如下图所示:

2.通讯录的实现步骤

2.1 打印主界面

void menu()
{
	printf("****************************************");
	printf("********  1.add      2.del    **********");
	printf("********  3.search   4.modify **********");
	printf("********        0.exit        **********");
	printf("****************************************");
	printf("****************************************");
}

2.2 主函数的逻辑实现

       主函数内使用dowhile循环体来实现这样的一个循环,具体的不同功能,采用了switch语句,通过输入不同数值来进入不同的功能区。

int main()
{
	int input = 0;
	//定义通讯录
	Contact con;
	//初始化
	init_contact(&con);
	do 
	{
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch (input)
		{
		case add:
			addcontact(&con);
			print(&con);
			break;
		case del:
			delcontact(&con);
			print(&con);
			break;
		case search:
			searchcontact(&con);
			break;
		case modify:
			modifycontact(&con);
			print(&con);
			break;
		case exit:
			break;
		default:
			printf("输入错误,请重新输入:\n");
			break;
		}
	} while (input);
	return 0;
}

2.3 初始化函数

       初始化函数采用了库函数memset,memset怎么使用,见本人博客内存库函数的讲解。

void init_contact(Contact* pd) //初始化
{
	pd->sz = 0;
	memset(pd->data, 0, sizeof(pd->data));
}

2.4 增加用户信息函数

void addcontact(Contact* pa) //增加用户信息
{
	if (pa->sz >= MAX)
	{
		printf("通讯录已满");
		return;
	}
	printf("请输入名字:");
	scanf("%s", &pa->data[pa->sz].name);
	printf("请输入性别:");
	scanf("%s", &pa->data[pa->sz].sex);
	printf("请输入年龄:");
	scanf("%d", &pa->data[pa->sz].age);
	printf("请输入电话:");
	scanf("%s", &pa->data[pa->sz].tele);
	printf("请输入地址:");
	scanf("%s", &pa->data[pa->sz].address);
	pa->sz++;
	printf("输入完成\n");
}

2.5 打印所有用户信息函数

void print(const Contact* p) //打印用户
{
	int i = 0;
	//标题
	printf("%-10s\t%-5s\t%-5s\t%-8s\t%-8s\n", "名称","性别","年龄","电话","地址");
	for (i = 0; i < p->sz; i++)
	{
		printf("%-10s\t", p->data[i].name);
		printf("%-5s\t", p->data[i].sex);
		printf("%-5d\t", p->data[i].age);
		printf("%-8s\t", p->data[i].tele);
		printf("%-8s\t", p->data[i].address);
		printf("\n");
	}
}

2.6 查找用户信息函数

void searchcontact(const Contact* ps) //查找用户信息
{
	int i = 0;
	char sech[10] = { 0 };
	printf("请输入要查找的用户名称:");
	scanf("%s", &sech);
	for (i = 0; i < ps->sz; i++)
	{
		if (strcmp(sech, ps->data[i].name) == 0)
		{
			printf("找到了\n");
			break;
		}
	}
	if (i == ps->sz)
	{
		printf("没找到\n");
	}
}

2.7 删除用户信息函数

void delcontact(Contact* pd) //删除用户信息
{
	if (pd->sz == 0)
	{
		printf("通讯录内无用户\n");
	}
	char del[10] = { 0 };
	printf("请输入要删除的用户名称:");
	scanf("%s", &del);
	for (int i = 0; i < pd->sz; i++)
	{
		if (strcmp(del, pd->data[i].name) == 0)
		{
			for (; i < pd->sz; i++)
			{
				pd->data[i] = pd->data[i + 1];
			}
		}
	}
	pd->sz--;
	printf("删除成功\n");
}

2.8 修改用户信息函数

void modifycontact(Contact* pm) //修改用户信息
{
	int i = 0;
	char modify[10] = { 0 };
	printf("请输入要修改的用户名称:");
	scanf("%s", &modify);
	for (i = 0; i < pm->sz; i++)
	{
		if (strcmp(modify, pm->data[i].name) == 0)
		{
			printf("请输入名字:");
			scanf("%s", &pm->data[i].name);
			printf("请输入性别:");
			scanf("%s", &pm->data[i].sex);
			printf("请输入年龄:");
			scanf("%d", &pm->data[i].age);
			printf("请输入电话:");
			scanf("%s", &pm->data[i].tele);
			printf("请输入地址:");
			scanf("%s", &pm->data[i].address);
			printf("修改成功\n");
			break;
		}
	}
	if (i == pm->sz)
	{
		printf("无此用户\n");
	}
}

3.总代码

3.1 主函数文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"


void menu()
{
	printf("****************************************\n");
	printf("********  1.add      2.del    **********\n");
	printf("********  3.search   4.modify **********\n");
	printf("********        0.exit        **********\n");
	printf("****************************************\n");
	printf("****************************************\n");
}
enum Option
{
	exit,
	add,
	del,
	search,
	modify,
};

int main()
{
	int input = 0;
	//定义通讯录
	Contact con;
	//初始化
	init_contact(&con);
	do 
	{
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch (input)
		{
		case add:
			addcontact(&con);
			print(&con);
			break;
		case del:
			delcontact(&con);
			print(&con);
			break;
		case search:
			searchcontact(&con);
			break;
		case modify:
			modifycontact(&con);
			print(&con);
			break;
		case exit:
			break;
		default:
			printf("输入错误,请重新输入:\n");
			break;
		}
	} while (input);
	return 0;
}

3.2 通讯录函数文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"


void init_contact(Contact* pd) //初始化
{
	pd->sz = 0;
	memset(pd->data, 0, sizeof(pd->data));
}
void print(const Contact* p) //打印用户
{
	int i = 0;
	//标题
	printf("%-10s\t%-5s\t%-5s\t%-8s\t%-8s\n", "名称","性别","年龄","电话","地址");
	for (i = 0; i < p->sz; i++)
	{
		printf("%-10s\t", p->data[i].name);
		printf("%-5s\t", p->data[i].sex);
		printf("%-5d\t", p->data[i].age);
		printf("%-8s\t", p->data[i].tele);
		printf("%-8s\t", p->data[i].address);
		printf("\n");
	}
}
void addcontact(Contact* pa) //增加用户信息
{
	if (pa->sz >= MAX)
	{
		printf("通讯录已满");
		return;
	}
	printf("请输入名字:");
	scanf("%s", &pa->data[pa->sz].name);
	printf("请输入性别:");
	scanf("%s", &pa->data[pa->sz].sex);
	printf("请输入年龄:");
	scanf("%d", &pa->data[pa->sz].age);
	printf("请输入电话:");
	scanf("%s", &pa->data[pa->sz].tele);
	printf("请输入地址:");
	scanf("%s", &pa->data[pa->sz].address);
	pa->sz++;
	printf("输入完成\n");
}

void searchcontact(const Contact* ps) //查找用户信息
{
	int i = 0;
	char sech[10] = { 0 };
	printf("请输入要查找的用户名称:");
	scanf("%s", &sech);
	for (i = 0; i < ps->sz; i++)
	{
		if (strcmp(sech, ps->data[i].name) == 0)
		{
			printf("找到了\n");
			break;
		}
	}
	if (i == ps->sz)
	{
		printf("没找到\n");
	}
}

void delcontact(Contact* pd) //删除用户信息
{
	if (pd->sz == 0)
	{
		printf("通讯录内无用户\n");
	}
	char del[10] = { 0 };
	printf("请输入要删除的用户名称:");
	scanf("%s", &del);
	for (int i = 0; i < pd->sz; i++)
	{
		if (strcmp(del, pd->data[i].name) == 0)
		{
			for (; i < pd->sz; i++)
			{
				pd->data[i] = pd->data[i + 1];
			}
		}
	}
	pd->sz--;
	printf("删除成功\n");
}


void modifycontact(Contact* pm) //修改用户信息
{
	int i = 0;
	char modify[10] = { 0 };
	printf("请输入要修改的用户名称:");
	scanf("%s", &modify);
	for (i = 0; i < pm->sz; i++)
	{
		if (strcmp(modify, pm->data[i].name) == 0)
		{
			printf("请输入名字:");
			scanf("%s", &pm->data[i].name);
			printf("请输入性别:");
			scanf("%s", &pm->data[i].sex);
			printf("请输入年龄:");
			scanf("%d", &pm->data[i].age);
			printf("请输入电话:");
			scanf("%s", &pm->data[i].tele);
			printf("请输入地址:");
			scanf("%s", &pm->data[i].address);
			printf("修改成功\n");
			break;
		}
	}
	if (i == pm->sz)
	{
		printf("无此用户\n");
	}
}

3.3 头文件

#pragma once
#include<stdio.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 20
#define MAX_ADDRESS 20
#define MAX 1000

typedef struct contact
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char tele[MAX_TELE];
	char address[MAX_ADDRESS];
}contact;

typedef struct Contact //建立通讯录
{
	contact data[MAX];
	int sz;
}Contact;


void print(const Contact* p);
void init_contact(Contact* pd);
void addcontact(Contact* pa);
void searchcontact(const Contact* ps);
void delcontact(Contact* pd);
void modifycontact(Contact* pm);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值