C:简易电话簿(大小固定)

功能
  • 增加联系人
  • 删除联系人
  • 修改联系人
  • 查找联系人
  • 打印全部联系人
  • 按姓名排序
  • 清空所有联系人
注意
  • 使用结构体表示信息,姓名存放与编码方式有关可以strlen一下汉字字符串查看
  • 使用结构体存电话本;六度空间理论;表示有多少个元素是有效的;
  • 更多注意看代码注释
头文件
#ifndef  __CONTACT_H__
#define __CONTACT_H__

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

#define  NAMELONGTH 1024
#define  TELELONGTH     1024
#define  BOOKSIZE         200

typedef struct PersonInfr//每个人需要存储姓名和电话
{
	char name[NAMELONGTH];
	char tele[TELELONGTH];
}PersonInfr;

typedef struct PhoneBook//一个电话本至少需要200个联系人
{
	PersonInfr Book[BOOKSIZE];
	unsigned int Size;
}PhoneBook;

typedef void(*fun)(PhoneBook*);


int menu();
void PrintAll(PhoneBook* PhoneBook);
void CleanAll(PhoneBook* PhoneBook);
void InitBook(PhoneBook* PhoneBook);
void AddContact(PhoneBook* PhoneBook);
void FindContact(PhoneBook* PhoneBook);
void SortbyName(PhoneBook* PhoneBook);
void DeletContact(PhoneBook* PhoneBook);
void ChangeContact(PhoneBook* PhoneBook);


#endif
Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"

int menu()
{
	int input = 0;
	printf("\n");
	printf("***1,增加联系人***\n");
	printf("***2,删除联系人***\n");
	printf("***3,修改联系人***\n");
	printf("***4,查找联系人***\n");
	printf("***5,打印全部人***\n");
	printf("***6,按姓名排序***\n");
	printf("***7,清空联系人***\n");
	printf("***0,退出**********\n\n");
	while (1)
	{
		printf("请输入你的选择\n");
		scanf("%d", &input);
		if (input < 8 && input >= 0)
			return input;
		else
			printf("输入非法,重新输入!\n");
	}
}

void InitBook(PhoneBook* PhoneBook)
{
	PhoneBook->Size = 0;
	memset(PhoneBook->Book, 0, sizeof(PhoneBook->Book));
}

static int FindTarget(PhoneBook* PhoneBook, char*target)
{
	for (int i = 0; i < PhoneBook->Size; i++)
	{
		if (!(strcmp(PhoneBook->Book[i].name, target)))
		{
			return i;
		}
	}
	return -1;
}

void AddContact( PhoneBook* PhoneBook)
{
	printf("请输入你要添加的联系人\n");
	printf("姓名:\n");
	scanf("%s", PhoneBook->Book[PhoneBook->Size].name);
	printf("电话:\n");
	scanf("%s", PhoneBook->Book[PhoneBook->Size].tele);
	PhoneBook->Size++;
}

void DeletContact(PhoneBook* PhoneBook)
{
	char target[NAMELONGTH] = { 0 };
	printf("请输入你要删除的联系人\n");
	printf("姓名:\n");
	scanf("%s", &target);
	int FindResult = FindTarget(PhoneBook, target);
	if (FindResult != -1)
	{
		printf("删除成功!");
		for (int i = FindResult; i < PhoneBook->Size; i++)
		{
			if (i < (PhoneBook->Size - 1))
			{
				PhoneBook->Book[i] = PhoneBook->Book[i + 1];
			}
		}
		PhoneBook->Size--;
	}
	else
	{
		printf("你输入的名字我找不到==\n");
	}
}

void ChangeContact(PhoneBook* PhoneBook)
{
	char target[NAMELONGTH] = { 0 };
	int choice = 0;
	printf("请输入你要修改的联系人\n");
	printf("姓名:\n");
	scanf("%s", &target);
	int FindResult = FindTarget(PhoneBook, target);
	if (FindResult != -1)
	{
		printf("1.重命名 2.修改联系方式\n");
		scanf("%d", &choice);
		if (choice == 2)
		{
			printf("修改电话:\n");
			scanf("%s", PhoneBook->Book[FindResult].tele);
		}
		else if (choice == 1)
		{
			printf("重命名:\n");
			scanf("%s", PhoneBook->Book[FindResult].name);
		}
		else
		{
			printf("非法输入!\n");
		}
	}
	else
	{
		printf("你输入的名字我找不到==\n");
	}
}

void FindContact(PhoneBook* PhoneBook)
{
	char target[NAMELONGTH] = { 0 };
	printf("请输入你要查找的联系人\n");
	printf("姓名:\n");
	scanf("%s", &target);
	int FindResult = FindTarget(PhoneBook, target);
	if (FindResult != -1)
	{
		printf("%s:", PhoneBook->Book[FindResult].name);
		printf("%s\n", PhoneBook->Book[FindResult].tele);
	}
	else
	{
		printf("你输入的名字我找不到==\n");
	}
}

void PrintAll(PhoneBook* PhoneBook)
{
	for (int i = 0; i < PhoneBook->Size; i++)
	{
		printf("%s:",PhoneBook->Book[i].name);
		printf("%s\n",PhoneBook->Book[i].tele);
	}
}

void SortbyName(PhoneBook* PhoneBook)//快速排序,按从小到大,可英文&中文;
{
	PersonInfr temp;
	for (int i = 1; i < PhoneBook->Size; i++)
	{
		temp=PhoneBook->Book[i];
		int j = i - 1;
		while (j >= 0 && (strcmp(PhoneBook->Book[j].name, temp.name)>0))
		{
			PhoneBook->Book[j + 1] = PhoneBook->Book[j];
			j--;
		}
		PhoneBook->Book[j+1] = temp;
	}
	printf("排序成功!\n");
}

void CleanAll(PhoneBook* PhoneBook)
{
	int del = 0;
	printf("确定要删除全部联系人吗?0,是   1,否\n");
	scanf("%d", &del);
	if (!del)
	{
		PhoneBook->Size = 0;
		printf("电话簿已清空!\n");
	}
}


main.c
//实现一个电话本,使得,增加,删除,修改,查找,打印全部,按姓名排序,清空所有记录
#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"

int main()
{
	printf("%s","通话录:");
	PhoneBook FirstBook;
	InitBook(&FirstBook);
	fun ChooseFun[10] = { AddContact,DeletContact,ChangeContact,FindContact,PrintAll,SortbyName,CleanAll};
	int choice = 0;
	do
	{
		choice = menu();
		if (choice)
		{
			ChooseFun[choice - 1](&FirstBook);
			printf("\n");
			ChooseFun[4](&FirstBook);
		}
	} while (choice);
	system("pause");
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值