电话本(通讯录)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//通讯录,需要在代码中表示若干个人
typedef struct PersonInfo
{
	char name[1024];
	char phone[1024];
}PersonInfo;

#define SIZE 1000

typedef struct AddrBook
{
	//SIZE 表示的是通讯录中信息的上限
	PersonInfo person_info[SIZE];
	//需要标注出那些信息是有意义的,那些信息是没有意义的
	//通讯录并不是程序已启动,里面的 1000 条数据都是有意义的
	//[0,size) 有意义的区间
	int size;
}AddeBook;

AddrBook g_addr_book;

enum
{
	EXIT = 0,      //退出
	ADD,    //增加一条记录
	DEL,    //删除某个记录
	MODIFY, //改动某个记录
	FIND,   //查找某个记录 
	PRINT,  //打印所有内容
	CLEAR,  //清空所有内容
};

//初始化
void Init()
{
	g_addr_book.size = 0;
	//for(int i = 0; i<SIZE; ++i)
	//{
	//	strcpy(g_addr_book.person_info[i].name,"");
	//	strcpy(g_addr_book.person_info[i].phone,"");
	//}
	memset(g_addr_book.person_info,0x0,
		sizeof(g_addr_book.person_info));
}

int Menu()
{
	//并且提示用户进行输入,
	//把用户输入的结果返回出来
	printf("*****************************\n");
	printf("*****  1.添加        ********\n");
	printf("*****  2.删除        ********\n");
	printf("*****  3.修改        ********\n");
	printf("*****  4.查找        ********\n");
	printf("*****  5.显示        ********\n");
	printf("*****  6.清除        ********\n");
	printf("*****  0.退出        ********\n");
	printf("*****************************\n");
	printf("请输入您的选择:");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

//插入一个用户
void AddPersonInfo()
{
	//添加一个用户信息到通讯录中
	//提示用户输入相关的信息,然后把对应的数据更新到数组中
	if(g_addr_book.size >= SIZE)
	{
		printf("当前通讯录已满,插入失败!\n");
		return;
	}
	printf("添加一个新用户!\n");
	printf("请输入用户名:");
	//下标为 size 的位置就是我们需要放置新元素的位置
	scanf("%s",g_addr_book.person_info[g_addr_book.size].name);
	printf("请输入电话号码:");
	scanf("%s",g_addr_book.person_info[g_addr_book.size].phone);
	++g_addr_book.size;
	printf("插入成功!\n");
	return ;
}

//用编号删除一个用户
void DelPersonInfo()
{
	//按照用户编号进行删除
	printf("删除指定记录!\n");
	printf("请输入要删除用户的编号:");
	int num = 0;
	scanf("%d",&num);
	if(num < 0 || num >= g_addr_book.size)
	{
		printf("输入的编号不合法,删除失败!\n");
		return;
	}
	if(num != g_addr_book.size-1)
	{
		strcpy(g_addr_book.person_info[num].name,
			g_addr_book.person_info[g_addr_book.size-1].name);
		strcpy(g_addr_book.person_info[num].phone,
			g_addr_book.person_info[g_addr_book.size-1].phone);
	}
	--g_addr_book.size;
	printf("删除成功!\n");
	return;
}
//用编号修改用户信息
void ModifyPersonInfo()
{
	printf("修改某个用户信息!\n");
	printf("请输入修改用户信息的编号:\n");
	int num = 0;
	scanf("%d",&num);
	if(num < 0 || num >= g_addr_book.size)
	{
		printf("输入的编号不合法,修改失败!\n");
		return;
	}
	printf("请输入新的用户名:");
	scanf("%s",g_addr_book.person_info[num].name);
	printf("请输入新的电话号码:");
	scanf("%s",g_addr_book.person_info[num].phone);
	printf("修改成功!\n");
}

//根据用户查找
void FindPersonInfo()
{
	printf("查找电话号码!\n");
	printf("请输入要查找的姓名:");
	char name[1024] = { 0 };
	scanf("%s",name);
	int count = 0;
	for(int i = 0; i < g_addr_book.size; ++i)
	{
		if(strcmp(name,g_addr_book.person_info[i].name) == 0)
		{
			printf("找到一条结果,电话号码为:%s\n",
				g_addr_book.person_info[i].phone);
			++count;
		}
		if(count == 0)
		{
			printf("未找到指定的姓名,请重新查找!\n");
		}
		else
		{
			printf("查找成功!找到%d条结果!\n",count);
		}
	}
}
//打印所有用户信息
void PrintPersonInfo()
{
	printf("打印所有用户信息!\n");
	for(int i = 0; i < g_addr_book.size; ++i)
	{
		printf("[%d] %s %s\n",i,g_addr_book.person_info[i].name,
			g_addr_book.person_info[i].phone);
	}
	printf("打印完成,共打印了%d条记录.\n",g_addr_book.size);
	return ;
}

void ClearPersonInfo()
{
	printf("清除所有用户信息!\n");
	printf("确定删除所有用户信息(y/n)?\n");
	char input[1024] = { 0 };
	scanf("%s",input);
	if(strcmp(input, "y") != 0)
	{
		printf("已经取消删除操作!\n");
		return;
	}
	g_addr_book.size = 0;
	printf("清除成功!\n");

}


int main()
{
	//1.先创建一个通讯录的变量,并且也需要对这个变量进行初始化
	Init();
	while(1)
	{
		//2.进入循环,打印一个用户菜单,并且提示用户进行操作
		//增删查改
		int choice = Menu();
		//3.用户输入了相应的编号之后,就调用相应的函数操作,完成具体的增删查改操作
		switch(choice)
		{
		case ADD:
			AddPersonInfo();
			break;
		case DEL:
			DelPersonInfo();
			break;
		case MODIFY:
			ModifyPersonInfo();
			break;
		case FIND:
			FindPersonInfo();
			break;
		case PRINT:
			PrintPersonInfo();
			break;
		case CLEAR:
			ClearPersonInfo();
			break;
		case EXIT:
			printf("Good bey!\n");
			system("pause");
			return 0;
		default:
			break;
		}
	}

	system("pause");
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值