简单的通讯录

通讯录的功能

        通讯录的功能有添加、删除、搜索、修改、排序以及打印。

void menu()
{
	printf("\n");
	printf("***  1.add    2.delete  ***\n");
	printf("***  3.search 4.modify  ***\n");
	printf("***  5.sort   6.print   ***\n");
	printf("***        0.exit       ***\n");
	printf("\n");
}

通讯录结构体的定义

        通讯录需储存某人的姓名、性别、年龄、电话以及地址,并且能够存放很多人的信息

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[data_max];
	int sz;
}contact;
#define name_max 20
#define sex_max  10
#define tele_max 20
#define addr_max 20
#define data_max 1000

程序流程的模板

        根据菜单提示的信息输入相对应的数字,通过switch语句进而对通讯录进行操作

enum option
{
	exit,    //0
	add,     //1
	delete,  //2
	search,  //3
	modify,  //4
	sort,    //5
	print    //6
};

void test()
{
	
	int input;
	contact con;
	initinfo(&con);
	menu();
	do
	{
		scanf("%d", &input);
		switch(input)
		{
			case exit:                     
				return;
				break;
			case add:                      
				addinfo(&con);
				break;
			case delete:
				deleteinfo(&con);
				break;
			case search:
				searchinfo(&con);
				break;
			case modify:
				modifyinfo(&con);
				break;
			case sort:
				sort_by_name(&con);
				break;
			case print:
				printinfo(&con);
				break;
			default:
				printf("输入错误\n");
				break;
		}

	} while (input);
}

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

通讯录联系人的添加

        

void addinfo(contact* pc)
{
	if (pc->sz >= 1000)
	{
		printf("通讯录已满\n");
		return;
	}
	printf("请输入姓名:");
	scanf("%s", pc->data[pc->sz].name);
	printf("请输入性别:");
	scanf("%s", pc->data[pc->sz].sex);
	printf("请输入年龄:");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("请输入电话:");
	scanf("%s", pc->data[pc->sz].tele);
	printf("请输入地址:");
	scanf("%s", pc->data[pc->sz].addr);
	pc->sz++;
	printf("添加成功\n");
} 

通讯录联系人的删除

void deleteinfo(contact* pc)
{
	char deletename[20];
	printf("请输入想删除人的姓名:");
	scanf("%s", &deletename);
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(deletename, (pc->data[i].name)) == 0)
		{
			memset(&(pc->data[i]), 0, sizeof(pc->data[i]));
			
			for (i; i < pc->sz-1; i++)
			{
				pc->data[i] = pc->data[i + 1];
			}
			pc->sz--;
			printf("删除成功\n");
			return;
		}
	}
	printf("信息不存在\n");
}

通讯录联系人的修改

void modifyinfo(contact* pc)
{
	char modifyname[20];
	printf("请输入修改人姓名:");
	scanf("%s", modifyname);
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(modifyname, (pc->data[i].name)) == 0)
		{
			printf("请输入姓名:");
			scanf("%s", pc->data[i].name);
			printf("请输入性别:");
			scanf("%s", pc->data[i].sex);
			printf("请输入年龄:");
			scanf("%d", &(pc->data[i].age));
			printf("请输入电话:");
			scanf("%s", pc->data[i].tele);
			printf("请输入地址:");
			scanf("%s", pc->data[i].addr);
			
			printf("修改成功\n");
			return;
		}
	}
	printf("没找到\n");
}

通讯录联系人的查找

void searchinfo(contact* pc)
{
	char searchname[20];
	printf("请输入想搜索姓名:");
	scanf("%s",searchname);
	for (int i = 0; i < pc->sz; i++)
	{
		if (strcmp(searchname, (pc->data[i].name)) == 0)
		{
			printf("找到了\n");
			printf("%-20s %-5s %-5d %-12s %-30s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr);
		}
		else
		{
			printf("没找到\n");
		}
	}
}

通讯录联系人的排序(根据名字)

void sort_by_name(contact* pc)
{
	for (int i = 0; i < pc->sz; i++)
	{
		for (int j = 0; j < pc->sz - 1; j++)
		{
			if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0)
			{
				peoinfo tmp[1];
				tmp[0] = pc->data[j];
				
				pc->data[j] = pc->data[j + 1];
				pc->data[j + 1] = tmp[0];
			}
		}
	}
	printf("排序成功\n");
}

头文件的内容

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

#define name_max 20
#define sex_max  10
#define tele_max 20
#define addr_max 20
#define data_max 1000
enum option
{
	exit,    //0
	add,     //1
	delete,  //2
	search,  //3
	modify,  //4
	sort,    //5
	print    //6
};
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[data_max];
	int sz;
}contact;

void menu();

void addinfo( contact* pc);

void initinfo(contact* pc);

void printinfo(contact* pc);

void deleteinfo(contact* pc);

void searchinfo(contact* pc);

void modifyinfo(contact* pc);

void sort_by_name(contact* pc);

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值