50—通讯录(待完善)

50.通讯录

代码如下:

/*****************************通讯录*********************************/
/*                   ——————————————							
				    |	1. 添加联系人信息        |
					|	2. 删除指定联系人信息    |
					|	3. 查找指定联系人信息    |
					|	4. 修改指定联系人信息    |
					|	5. 显示所有联系人信息    |
					|	6. 清空所有联系人	     |
					|	7. 以名字排序所有联系人  |
					|	8. 保存联系人到文件	     |
					|	9. 加载联系人			 |				
					 ——————————————				
*********************************************************************/
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000

//定义一个联系人信息结构体,其中包含联系人姓名、性别、年龄、电话、地址,
//并为其重命名为:Contact_Info
typedef struct Contact_Info{
	char name[N];
	char sex[5];
	char age[N];
	char phone[N];
	char address[N];
}Contact_Info;

//定义一个通讯录结构体,其中包含最大联系人个数,有效联系人个数
//并为其重命名为:Address_Book
typedef struct Address_Book{
	Contact_Info* contact;
	int size;
	int capacity;
}Address_Book;

Address_Book g_address_book;//定义一个全局变量
//联系人信息初始化
void Init(){
	g_address_book.size = 0;//初始化有效联系人个数为0
	g_address_book.capacity = 1000;
	g_address_book.contact = (Contact_Info*)malloc( 
		g_address_book.capacity* sizeof(Contact_Info));
	
	for (int i = 0; i < g_address_book.capacity; ++i){
		g_address_book.contact[i].name[i] = '\0';
		g_address_book.contact[i].sex[i] = '\0';
		g_address_book.contact[i].age[i] = '\0';
		g_address_book.contact[i].phone[i] = '\0';
		g_address_book.contact[i].address[i] = '\0';
	}
}
//菜单
int Menu(){
	printf("||==========菜单===========||\n");
	printf("|| 1. 添加联系人信息       ||\n");
	printf("|| 2. 删除指定联系人信息   ||\n");
	printf("|| 3. 查找指定联系人信息   ||\n");
	printf("|| 4. 修改指定联系人信息   ||\n");
	printf("|| 5. 显示所有联系人信息   ||\n");
	printf("|| 6. 清空所有联系人       ||\n");
	printf("|| 7. 以名字排序所有联系人 ||\n");
	printf("|| 8. 保存联系人到文件     ||\n");
	printf("|| 9. 加载联系人           ||\n");
	printf("|| 0. 退出                 ||\n");
	printf("||=========================||\n");
	printf("请根据所需操作输入你的选项:\n");
	int choice;
	scanf("%d", &choice);
	return choice;
}
//该函数用来凑数,便于使用转移表
void Empty(){

}
//添加联系人
void Add_Contact_Info(){
	printf("添加联系人\n");
	if (g_address_book.size > g_address_book.capacity){
		printf("当前空间不足,需要进行扩容!\n");
		g_address_book.capacity += 1000;
		g_address_book.contact = (Contact_Info*)realloc(g_address_book.contact,
			g_address_book.capacity*sizeof(Contact_Info));
	}
	Contact_Info* contact_info = &g_address_book.contact[g_address_book.size];
	printf("请输入联系人姓名:");
	scanf("%s",contact_info->name);
	printf("请输入联系人性别:");
	scanf("%s", contact_info->sex);
	printf("请输入联系人年龄:");
	scanf("%s", contact_info->age);
	printf("请输入联系人电话:");
	scanf("%s", contact_info->phone);
	printf("请输入联系人地址:");
	scanf("%s", contact_info->address);
	++g_address_book.size;
	printf("添加联系人成功!\n");
}
//删除指定联系人信息
void Delete_Contact_Info(){
	printf("删除指定联系人!\n");
	if (g_address_book.size < 0){
		printf("删除联系人失败,通讯录为空!\n");
	}
	printf("请输入指定联系人的序号:");
	int id;
	scanf("%d",&id);
	if (id < 0 || id >= g_address_book.size){
		printf("删除联系人失败,输入序号非法!\n");
		return ;
	}
	g_address_book.contact[id] = g_address_book.contact[g_address_book.size];
	--g_address_book.size;
	
	printf("删除联系人成功!\n");
}
//查找指定联系人信息
void Find_Contact_Info(){
	printf("查找指定联系人!\n");
	if (g_address_book.size <= 0){
		printf("查找失败,通讯录为空!\n");
		return;
	}
	printf("请输入需要查找的姓名:");
	char name[1024];
	scanf("%s", &name);
	for (int i = 0; i < g_address_book.size; ++i){
		Contact_Info* ps = &g_address_book.contact[i];
		if (strcmp(ps->name, name) == 0){
			printf("[%d]\t%s\t%s\t%s\t%s\t%\t\n",
				i, ps->name, ps->sex, ps->age, ps->phone, ps->address);
		}
	}
	printf("查找联系人成功!\n");
}
//修改指定联系人信息
void Update_Contact_Info(){
	printf("修改指定联系人!\n");
	if (g_address_book.size <= 0){
		printf("修改失败,通讯录为空!\n");
		return;
	}
	printf("请输入要修改的序号:");
	int id;
	scanf("%d", &id);
	if (id<0 || id>=g_address_book.size){
		printf("修改失败,您的输入有误!\n");
		return;
	}
	Contact_Info* ps = &g_address_book.contact[id];
	
	printf("请输入新的名字:(%s)\n", ps->name);
	char name[1024] = {0};
	scanf("%s", name);
	if (strcmp(name, "*") != 0){
		strcpy(ps->name, name);
	}
	printf("请输入新的性别:(%s)\n", ps->sex);
	char sex[1024] = {0};
	scanf("%s", sex);
	if (strcmp(sex, "*") != 0){
		strcpy(ps->sex, sex);
	}
	printf("请输入新的年龄:(%s)\n", ps->age);
	char age[1024] = { 0 };
	scanf("%s", age);
	if (strcmp(age, "*") != 0){
		strcpy(ps->age, age);
	}
	printf("请输入新的电话:(%s)\n", ps->phone);
	char phone[1024] = { 0 };
	scanf("%s", phone);
	if (strcmp(phone, "*") != 0){
		strcpy(ps->phone, phone);
	}
	printf("请输入新的地址:(%s)\n", ps->address);
	char address[1024] = { 0 };
	scanf("%s", address);
	if (strcmp(address, "*") != 0){
		strcpy(ps->address, address);
	}
	
	printf("修改指定联系人成功!\n");
}
//显示全部联系人信息
void Print_Contact_Info(){
	printf("打印全部联系人\n");
	for (int i = 0; i < g_address_book.size; ++i){
		Contact_Info* info = &g_address_book.contact[i];
		printf("[%d]%s\t%s\t%s\t%s\t%s\n",
		i, info->name, info->sex, info->age, info->phone, info->address);
	}
	printf("共打印了%d条数据!\n", g_address_book.size);
	printf("打印全部联系人成功!\n");
}
//清空联系人
void Clear_Contact_Info(){
	printf("清空全部联系人!\n");
	printf("您真的要清空联系人吗?(Y/N)\n");
	char choice[1024] = { 0 };
	scanf("%s", &choice);
	if (strcmp(choice, "Y")==0){
		g_address_book.size = 0;
		printf("清空全部联系人成功!\n");
	}
	else{
		printf("清空操作取消!\n");
	}
}
//以名字排序全部联系人
void Sort_Contact_Info(){

}
//保存联系人到文件
void Preserve_Contact_Info_Into_Files(){

}
//加载联系人
void Loading_Contact_Info(){

}
typedef void(*Func)();
int main(){
    //转移表
	Func arr[] = {
		Empty,
		Add_Contact_Info,
		Delete_Contact_Info,
		Find_Contact_Info,
		Update_Contact_Info,
		Print_Contact_Info,
		Clear_Contact_Info,
		Sort_Contact_Info,
		Preserve_Contact_Info_Into_Files,
		Loading_Contact_Info
	};

	Init();

	while(1){
		int choice = Menu();
		if (choice < 0 || choice >= sizeof(arr) / sizeof(arr[0])){
			printf("您的输入有误!\n");
			continue;
		}
		if (choice == 0){
			printf("Good bye!\n");
			break;
		}
		arr[choice]();//调用转移表函数
	}
	Menu();
	system("pause");
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值