C语言实现简易通讯录

目录

 1.基本框架的实现

  1.1 基本内容test.c

2. 函数的声明contact.h

3.函数的实现

3.1 初始化/清空联系人

3.2增加通讯录的联系人

3.3展示通讯录中所以联系人的信息

3.4通过名字找到指定的联系人

3.5通过名字搜索联系人

3.6删除联系人

3.7修改联系人

3.8通过选择的方式排序联系人

实现一个通讯录:

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:

1.添加联系人信息
2.删除指定联系人信息
3.查找指定联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.清空所有联系人
7.以名字排序所有联系人

 1.基本框架的实现

我们首先在vs里创建一个test.c  和 contact .c  和 contact.h

  1. 我们在test.c来实现这个通讯录的主体内容
  2. 在contact.c的内容中来完善函数的实现
  3. contact.h的内容是定义一些变量和函数

  1.1 基本内容test.c

首先我们需要打印一个菜单


void print_menu()
{
	printf("*************************************************\n");
	printf("******** 1.add           2.search          ******\n");
	printf("******** 3.del           4.modify          ******\n");
	printf("******** 5.show          6.empty           ******\n");
	printf("******** 7.sort          0.exit            ******\n");
	printf("*************************************************\n");
	


}

以上的内容就是我们需要实现的基本功能,接着我们就完善test.c中基本框架的实现

//test.c
#include"contact.h"
//实现一个通讯录;
//
//通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
//
//提供方法:
//
//添加联系人信息
//删除指定联系人信息
//查找指定联系人信息
//修改指定联系人信息
//显示所有联系人信息
//清空所有联系人
//以名字排序所有联系人

void print_menu()
{
	printf("*************************************************\n");
	printf("******** 1.add           2.search          ******\n");
	printf("******** 3.del           4.modify          ******\n");
	printf("******** 5.show          6.empty           ******\n");
	printf("******** 7.sort          0.exit            ******\n");
	printf("*************************************************\n");
	


}
void test()
{
	int input = 0;
	Contact con;
	//初始化通讯录
	init_contact(&con);
	do
	{
		//打印菜单
		print_menu();
		scanf("%d", &input);
		switch (input)
		{
		    case 1:
				//增加函数
				add_contact(&con);
				break;
			case 2:
				//寻找
				search_contact(&con);
				break;
			case 3:
				//删除联系人
				del_contact(&con);
				break;
			case 4:
				//修改联系人
				modify_contact(&con);
				break;
			case 5:
				//展示通讯录
				show_contact(&con);
			
				break;
			case 6:
				init_contact(&con);
				printf("清除成功\n");
				break;
			case 7:
				sort_contact(&con);
				break;
			case 0:
				printf("退出成功\n");
				break;
			default :
				printf("输入有误\n");
				break;
			

		}
		

	} while (input);
}


int main()
{
	test();
	return 0;
}

2. 函数的声明contact.h

然后需要我们在contact.h中声明这些函数,并创建好通讯录需要的内容,就可以用结构体来实现。

//contact.h
#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
//通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
#define NAME_MAX 20
#define SEX_MAX 8
#define TELE_MAX 15
#define ADDR_MAX 20
#define MAX 100



typedef struct Peoinfo
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}Peoinfo;

typedef struct Contact
{
	Peoinfo data[MAX];
	int sz;
}Contact;



//初始化/清空
void init_contact(Contact* pc);


//通讯录中增加
void  add_contact(Contact* pc);

//show通讯录
void show_contact( const Contact* pc);

//通讯录寻找人
int find_by_name(const Contact* pc);

//通讯录里search

void search_contact(const Contact* pc);

//删除联系人
void del_contact(Contact* pc);

//修改联系人

void modify_contact(Contact* pc);

//排序
void sort_contact(Contact* pc);

3.函数的实现

3.1 初始化/清空联系人

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

3.2增加通讯录的联系人

//add
void  add_contact(Contact* pc)
{
	assert(pc);
	if (pc->sz > MAX)
		printf("通讯录已满,无法添加\n");
	printf("请输入姓名:>\n");
	scanf("%s", pc->data[pc->sz].name);
	printf("请输入性别;>\n");
	scanf("%s", pc->data[pc->sz].sex);
	printf("请输入年龄;>\n");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("请输入电话:>\n");
	scanf("%s", pc->data[pc->sz].tele);
	printf("请输入住址:>\n");
	scanf("%s", pc->data[pc->sz].addr);
	pc->sz++;

}

3.3展示通讯录中所以联系人的信息

//show
void show_contact(const Contact* pc)
{
	assert(pc);
	int i = 0;
	printf("%-10s\t%-5s\t%-4s\t%-15s\t%-10s\n", "姓名", "性别", "年龄", "电话", "住址");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s\t%-5s\t%-4d\t%-15s\t%-10s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr);
	}
}

3.4通过名字找到指定的联系人

//通讯录找人
int find_by_name(const Contact* pc)
{
	assert(pc);
	char findPeo[20];
	printf("请输入需要搜索/删除/修改数据的名字:>");
	scanf("%s", findPeo);
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, findPeo)==0)
		{
			
			return i;
		}
		
			
	}
	return -1;
}

3.5通过名字搜索联系人

//通讯录中搜索

void search_contact(const Contact* pc)
{
	assert(pc);
	int ret = find_by_name(pc);
	if (ret == -1)
	{
		printf("不存在此人\n");
	}
	else
	{
		printf("%-10s\t%-5s\t%-4s\t%-15s\t%-10s\n", "姓名", "性别", "年龄", "电话", "住址");
		printf("%-10s\t%-5s\t%-4d\t%-15s\t%-10s\n", 
 pc->data[ret].name,
 pc->data[ret].sex, 
 pc->data[ret].age, 
 pc->data[ret].tele, 
 pc->data[ret].addr);
	}

}

3.6删除联系人

//del

void del_contact(Contact*pc)
{
	assert(pc);
	int ret=find_by_name(pc);
	if (ret == -1)
		printf("不存在此人\n");
	else
	{
		int i = 0;
		for (i = ret; i <pc->sz; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		printf("删除成功\n");
		pc->sz -= 1;
	}
}

3.7修改联系人

//modify修改

void modify_contact(Contact* pc)
{
	assert(pc);
	int ret = find_by_name(pc);
	if (ret == -1)
		printf("不存在此人\n");
	else
	{
		
		printf("请输入姓名:>\n");
		scanf("%s", pc->data[ret].name);
		printf("请输入性别;>\n");
		scanf("%s", pc->data[ret].sex);
		printf("请输入年龄;>\n");
		scanf("%d", &(pc->data[ret].age));
		printf("请输入电话:>\n");
		scanf("%s", pc->data[ret].tele);
		printf("请输入住址:>\n");
		scanf("%s", pc->data[ret].addr);
		printf("修改成功\n");
	}
}

3.8通过选择的方式排序联系人

//sort

void sort_contact( Contact* pc)
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("通讯录为空,无法排序\n");
	}
	int k = 0;
	printf("1.按名字排序 2.按年龄排序 0.退出\n");
	printf("请选择:>");
	scanf("%d", &k);
	
	if (k == 0)
		printf("退出成功\n");
	else if (k == 1)
	{
		Peoinfo tmp;
		int i = 0;
		
		for (i = 0; i < pc->sz - 1; i++)
		{
			int j = 0;
			for (j = 0; j < pc->sz -i- 1; j++)
			{
				if (strcmp(pc->data[j].name, pc->data[j + 1].name)>0)
				{
					 tmp = pc->data[j];
					 pc->data[j] = pc->data[j + 1];
					pc->data[j + 1] = tmp;
				
					

				}
			}
		}
		
		
	}

	else if (k == 2)
	{
		int i = 0;
		Peoinfo tmp;
		for (i = 0; i < pc->sz - 1; i++)
		{
			for (int j = 0; j < pc->sz - i-1; j++)
			{
				if ((pc->data[j].age - pc->data[j + 1].age) > 0)
				{
					tmp = pc->data[j];
					pc->data[j] = pc->data[j + 1];
					pc->data[j + 1] = tmp;

				}
			}
		}
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值