C语言实现通讯录

一、通讯录要求:

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

二、代码实现

1.头文件和宏定义

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<stdlib.h>
//定义宏 MAX_PERSON 表示通讯录最多存储联系人人数为1000
#define MAX_PERSON 1000

2.定义联系人结构体和通讯录结构体

//定义联系人信息结构体
typedef struct Person
{
	char name[1024];
	char sex[1024];
	int age;
	char tel[1024];
	char address[1024];
}Person;

//定义一个通讯录结构体
typedef struct AddressBook
{
	Person Persons[MAX_PERSON];
	//size表示通讯录的已有联系人数
	int size;
}AddressBook;

3.定义一个结构体指针类型Func

定义一个AddressBook类型(因为定义结构体时使用typedef,即struct AddressBook类型)的变量addressBook

typedef void(*Func)(AddressBook*);
AddressBook addressBook;

4.main函数

int main()
{
	//定义一个函数指针数组
	Func funcs[] = { NULL, addPerson, findPerson, delPerson, updataPerson, printPerson, clearPerson,sortPerson };
	init(&addressBook);
	while (1){
		int choice = menue();
		system("cls");
		if (choice<0 || choice>(sizeof(funcs) / sizeof(funcs[0]))){
			printf("请按照提示输入!\n");
			continue;
		}
		if (choice == 0){
			printf("退出成功!\n");
			break;
		}
		funcs[choice](&addressBook);
	}
	system("pause");
	return 0;
}

5.init初始化通讯录

只需将通讯录中已有联系人数置为0即可

void init(AddressBook* addressBook)
{
	addressBook->size = 0;
}

6.menue菜单

int menue()
{
	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");
	printf("**************************\n");
	printf("请输入您的选择:");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

7.addPerson添加联系人

注意添加完联系人后size++

//添加联系人
//判断通讯录是否存满,如果通讯录满了就添加失败
void addPerson(AddressBook* addressBook)
{
	printf("添加联系人\n");
	int currentSize = addressBook->size;
	if (currentSize >= 1000){
		printf("通讯录已满,添加失败!\n");
		return;
	}
	Person* p = &addressBook->Persons[currentSize];
	printf("请输入新增联系人的姓名:\n");
	scanf("%s", p->name);
	printf("请输入增联系人的性别:\n");
	scanf("%s", p->sex);
	printf("请输入新增联系人的年龄:\n");
	scanf("%d", &p->age);
	printf("请输入新增联系人的电话:\n");
	scanf("%s", p->tel);
	printf("请输入新增联系人的地址:\n");
	scanf("%s", p->address);
	addressBook->size++;
	system("cls");
	printf("添加联系人成功!\n");
}

8.findPerson查找联系人

//查找联系人
//按照姓名查找
void findPerson(AddressBook* addressBook)
{
	printf("查找联系人!\n");
	printf("请输入要查找联系人的姓名:");
	char name[1024] = "";
	scanf("%s", name);
	for (int i = 0; i <addressBook->size; i++){
		Person* p = &addressBook->Persons[i];
		if (strcmp(p->name,name)==0){
			printf("编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t\t住址\n");
            printf("[%d]\t\t%s\t\t%s\t\t%d\t\t%s\t\t\t%s\n", i, p->name, p->sex, p->age, p->tel, p->address);
			printf("查找成功!\n");
			return;
		}
	}
	printf("查无此人!\n");
}

9.delPerson删除联系人

//删除联系人
//按照编号删除
void delPerson(AddressBook* addressBook)
{
	printf("删除联系人!\n");
	printf("请输入要删除联系人的编号:");
	int id = 0;
	scanf("%d", &id);
	int currentSize = addressBook->size;
	if (id<0 || id>currentSize){
		printf("删除失败,无此编号联系人!\n");
		return;
	}
	if (id == currentSize){
		addressBook->size--;
	}else{
		addressBook->Persons[id] = addressBook->Persons[currentSize];
		addressBook->size--;
	}
	printf("删除联系人成功!\n");
}

10.updataPerson更新联系人信息

按照编号更新

//更新联系人的信息
void updataPerson(AddressBook* addressBook)
{
	printf("更新联系人的信息!\n");
	printf("请输入要更新联系人的编号:");
	int id = 0;
	scanf("%d", &id);
	for (int i = 0; i < addressBook->size; i++){
		Person* p = &addressBook->Persons[i];
		if (i == id){
			while (1){
				system("cls");
				printf("编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t\t住址\n");
				printf("[%d]\t\t%s\t\t%s\t\t%d\t\t%s\t\t\t%s\n", i, p->name, p->sex, p->age, p->tel, p->address);
				printf("*****************\n");
				printf("1.修改姓名\n");
				printf("2.修改性别\n");
				printf("3.修改年龄\n");
				printf("4.修改电话\n");
				printf("5.修改地址\n");
				printf("0.修改完毕\n");
				printf("*****************\n");
				printf("请输入您的选择:");
				int choice = 0;
				scanf("%d", &choice);
				if (choice == 1){
					printf("请输入新的姓名:");
					scanf("%s", p->name);
				}else if (choice==2){
					printf("请输入新的性别:");
					scanf("%s", p->sex);
				}else if (choice == 3){
					printf("请输入新的年龄:");
					scanf("%d", &p->age);
				}else if (choice == 4){
					printf("请输入新的电话:");
					scanf("%s", p->tel);
				}
				else if (choice == 5){
					printf("请输入新的地址:");
					scanf("%s", p->address);
				}else if (choice == 0){
					printf("编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t\t住址\n");
					printf("[%d]\t\t%s\t\t%s\t\t%d\t\t%s\t\t\t%s\n", i, p->name, p->sex, p->age, p->tel, p->address);
					printf("更新成功!\n");
					return;
				}
				else{
					printf("输入有误!\n");
					continue;
				}
			}
		}
	}
}

11.printPerson查看所有联系人

//查看所有联系人
void printPerson(AddressBook* addressBook)
{
	printf("查看所有联系人!\n");
	printf("编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t\t住址\n");
	for (int i = 0; i < addressBook->size; i++){
		Person* p = &addressBook->Persons[i];
		printf("[%d]\t\t%s\t\t%s\t\t%d\t\t%s\t\t\t%s\n", i, p->name, p->sex, p->age, p->tel, p->address);
	}
	printf("已显示所有联系人!\n");
}

12.clearPerson清空所有联系人

//清空所有联系人
void clearPerson(AddressBook* addressBook)
{
	printf("清空所有联系人!\n");
	init(addressBook);
	printf("已清空所有联系人!\n");
}

13.sortPerson按照姓名排序联系人

void sortPerson(AddressBook* addressBook)
{
	printf("按照名字顺序排列联系人!\n");
	Person* p = addressBook->Persons;
	Person temp;
	for (int bound = 0; bound <addressBook->size; bound++){
		for (int cur = addressBook->size - 1; cur >bound; cur--){
			if (strcmp(p[cur].name, p[cur - 1].name) < 0){
				temp = p[cur];
				p[cur] =p[cur - 1];
				p[cur - 1] = temp;
			}
		}
	}
	printPerson(addressBook);
	printf("排序成功!\n");
}

三、运行结果

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值