简单的静态通讯录

//实现一个通讯录;
//通讯录可以用来存储1000个人的信息,每个人的信息包括:
//姓名、性别、年龄、电话、住址
//提供方法:
//1.	添加联系人信息      已完成
//2.	删除指定联系人信息  已完成
//3.	查找指定联系人信息  已完成
//4.	修改指定联系人信息  已完成
//5.	显示所有联系人信息  已完成
//6.	清空所有联系人      已完成
//7.	以名字排序所有联系人 已完成            
#define _CRT_SECURE_NO_WARNINGS
#define _warn_unused_result
#define max_Person 1000

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
 
 typedef struct Member_Information {
	char name[1024];
	char sex[20];
	char phone[100];
	char address[1024];
	int age;
}Member_Information;
typedef struct Address_Book {
	Member_Information person[max_Person];
	int size;  //当前有效成员数
}Address_Book;
//初始化
void Init(Address_Book* Address) {
	assert(Address != NULL);
	Address->size = 0;
	for (int i = 0; i < 1000; i++) {
		memset(Address->person[i].name, 0, 1024);
		memset(Address->person[i].sex, 0, 20);
		memset(Address->person[i].phone, 0, 100);
		memset(Address->person[i].address, 0, 1024);
		Address->person[i].age = 0;
	}
}
//附属菜单
void find_menu() {
	printf("========================\n");
	printf("1.姓名\n");
	printf("2.性别\n");
	printf("3.电话号\n");
	printf("4.住址\n");
	printf("5.年龄\n");
	printf("0.退出\n");
	printf("========================\n");
}
//主菜单
void menu() {
	printf("\n");
	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");
}
//1.增加联系人
void Add(Address_Book* Address) {
	assert(Address != NULL);
	/*Address->capacity = 3;
	if (Address->size==Address->capacity){
		Member_Information* tmp = (Member_Information*)realloc(Address->person,
			(Address->capacity + 3) * sizeof(Member_Information));*/
		if (Address->size ==max_Person ) {
			printf("内存空间不足!\n");
		}
	int choice = 0;
	while (1) {
		int a = (Address->size);
		if (Address->size == 1000) {
			printf("联系人已满,需删除之后才可继续添加新的联系人!\n");
			return;
		}else {
			printf("请输入姓名:");
			scanf("%s", (Address->person[a].name));
			printf("\n");
			printf("请输入性别:");
			scanf("%s",(Address->person[a].sex));
			printf("\n");
			printf("请输入电话号:");
			scanf("%s",(Address->person[a].phone));
			printf("\n");
			printf("请输入住址:");
			scanf("%s",(Address->person[a].address));
			printf("\n");
			printf("请输入年龄:");
			scanf("%d",&(Address->person[a].age));
			printf("\n");
			(Address->size)++;
			printf("是否继续添加下一个联系人信息?,1表示继续添加,0表示退出添加\n");
			scanf("%d", &choice);
			if (choice==0) {
				break;
			}
		}
	}
	
}
//2.	删除指定联系人信息
void Delete(Address_Book* Address) {
	assert(Address != NULL);
	if (Address->size == 0) {
		printf("无联系人信息可删!\n");
		return;
	}
	int a = 0;
	printf("所有联系人信息如下\n");
	for (int i = 0; i < Address->size; i++) {
		printf("序号%3d: 姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%3d\n",
			i + 1, Address->person[i].name, Address->person[i].sex
			, Address->person[i].phone, Address->person[i].address, Address->person[i].age);
	}
	while (1) {
		printf("你想删除谁的信息?请输入它的序号");
		scanf("%d", &a);
		if (a<1 || a>Address->size) {
			printf("你的输入有误!请重新输入\n");
			continue;
		}else {
			break;
		}
	}
		memset(Address->person[a - 1].name, 0, 1024);   //memset函数可以简单实现赋0操作
		memset(Address->person[a - 1].sex, 0, 20);
		memset(Address->person[a - 1].phone, 0, 100);
		memset(Address->person[a - 1].address, 0, 1024);
		Address->person[a - 1].age = 0;
		for (int i = a - 1; i < Address->size; i++) {
			strcpy(Address->person[i].name, Address->person[i + 1].name);
			strcpy(Address->person[i].name, Address->person[i + 1].name);
			strcpy(Address->person[i].name, Address->person[i + 1].name);
			strcpy(Address->person[i].name, Address->person[i + 1].name);
			Address->person[i].age = Address->person[i + 1].age;
		}
		printf("删除成功!\n");
		(Address->size)--;
}
//3.	查找指定联系人信息
void Find(Address_Book* Address) {
	assert(Address != NULL);
	if (Address->size == 0) {
		printf("无联系人信息可查\n");
		return;
	}
	char name1[20], sex1[20], phone1[20], address1[20];
	int age1;
	int choice = 0,count=0,choice1=0;
	while (1){
	count = 0;
	find_menu();
	printf("你想按那种方式查找?\n");
	scanf("%d", &choice);
	system("cls");
	if (choice == 0) {
		return;
	}else if (choice < 0 || choice>5) {
		printf("你的输入有误!\n");
		continue;
	}else if (choice == 1) {
		printf("请输入姓名:");
		scanf("%s", name1);
		for (int i = 0; i < (Address->size); i++) {
			if (strcmp(Address->person[i].name,name1 )==0){
	        printf("姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%5d\n", Address->person[i].name, 
			Address->person[i].sex, Address->person[i].phone, Address->person[i].address, 
			Address->person[i].age);
			count++;
			}
		}
		if (count == 0) {
			printf("无此人\n");
			continue;
		}
	}else if (choice == 2) {
		printf("请输入性别:");
		scanf("%s", sex1);
		for (int i = 0; i < (Address->size); i++) {
			if (strcmp(Address->person[i].sex, sex1) == 0) {
				printf("姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%5d\n", Address->person[i].name,
					Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
					Address->person[i].age);
				count++;
			}
		}
		if (count == 0) {
			printf("无此人\n");
			continue;
		}
	}else if (choice == 3) {
		printf("请输入电话号:");
		scanf("%s", &phone1);
		for (int i = 0; i < (Address->size); i++) {
			if (strcmp(Address->person[i].phone,phone1) == 0) {
				printf("姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%5d\n", Address->person[i].name,
					Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
					Address->person[i].age);
				count++;
			}
		}
		if (count == 0) {
			printf("无此人\n");
			continue;
		}
	}else if(choice==4){
		printf("请输入住址:");
		scanf("%s", &address1);
		for (int i = 0; i < (Address->size); i++) {
			if (strcmp(Address->person[i].address, address1) == 0) {
				printf("姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%5d\n", Address->person[i].name,
					Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
					Address->person[i].age);
				count++;
			}
		}
		if (count == 0) {
			printf("无此人\n");
			continue;
		}
	}else if (choice == 5) {
		printf("请输入年龄:");
		scanf("%d", &age1);
		for (int i = 0; i < (Address->size); i++) {
			if ((Address->person[i].age)==age1) {
				printf("姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%5d\n", Address->person[i].name,
					Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
					Address->person[i].age);
				count++;
			}
		}
		if (count == 0) {
			printf("无此人\n");
			continue;
		}
	}
	printf("是否继续查找,1继续,0退出");
	scanf("%d", &choice1);
	if (choice1 == 0) {
		return;
	}
}
}
//4.	修改指定联系人信息
void Modification(Address_Book* Address) {
	assert(Address != NULL);
	if (Address->size == 0) {
		printf("无联系人信息!\n");
		return;
	}
	//char name1[100] = { 0 };
	int a = 0;
	printf("所有联系人信息如下\n");
	for (int i = 0; i < Address->size; i++) {
		printf("序号%3d: 姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%3d\n",
		    	i+1, Address->person[i].name, Address->person[i].sex
			, Address->person[i].phone, Address->person[i].address, Address->person[i].age);
	}
	while (1) {
		printf("请输入你想修改的联系人的编号:");
		scanf("%d", &a);
		if (a<1 || a>Address->size) {
			printf("你的输入有误,请重新输入:\n");
			continue;
		}else {
			break;
		}
	}
	while(1){
		int choice = 0;
		printf("你想修改他(她)的什么信息,1全部,2姓名,3性别,4电话号,5住址,6年龄,0退出\n");
		scanf("%d", &choice);
		if (choice < 0 || choice>6) {
			printf("你的输入有误请重新输入:");
			continue;
		}else if (choice == 1) {
			memset(Address->person[a-1].name, 0, 1024);
			memset(Address->person[a-1].sex, 0, 20);
			memset(Address->person[a-1].phone, 0, 100);
			memset(Address->person[a-1].address, 0, 1024);
			Address->person[a-1].age = 0;
			printf("请输入姓名:");
			scanf("%s", (Address->person[a-1].name));
			printf("\n");
			printf("请输入性别:");
			scanf("%s", (Address->person[a-1].sex));
			printf("\n");
			printf("请输入电话号:");
			scanf("%s", (Address->person[a-1].phone));
			printf("\n");
			printf("请输入住址:");
			scanf("%s", (Address->person[a-1].address));
			printf("\n");
			printf("请输入年龄:");
			scanf("%d", &(Address->person[a-1].age));
			printf("\n");
		}else if (choice == 2) {
			memset(Address->person[a-1].name, 0, 1024);
			printf("请输入姓名:");
			scanf("%s", (Address->person[a-1].name));
			printf("\n");
		}else if (choice == 3) {
			memset(Address->person[a-1].sex, 0, 1024);
			printf("请输入性别:");
			scanf("%s", (Address->person[a-1].sex));
			printf("\n");
		}else if (choice == 4) {
			memset(Address->person[a-1].phone, 0, 1024);
			printf("请输入电话号:");
			scanf("%s", (Address->person[a-1].phone));
			printf("\n");
		}else if (choice == 5) {
			memset(Address->person[a-1].address, 0, 1024);
			printf("请输入住址:");
			scanf("%s", (Address->person[a-1].address));
			printf("\n");
		}else if (choice == 6) {
			Address->person[a-1].age = 0;
			printf("请输入年龄:");
			scanf("%d", &(Address->person[a-1].age));
			printf("\n");
		}else if (choice == 0) {
			printf("已退出\n");
			return;
		}
		int choice1 = 0;
		printf("是否继续修改其他联系人信息,1是,0否\n");
		scanf("%d", &choice1);
		if (choice1 == 1) {
			while (1) {
				printf("请输入你想修改的联系人的编号:");
				scanf("%d", &a);
				if (a<1 || a>Address->size) {
					printf("你的输入有误,请重新输入:\n");
					continue;
				}else {
					break;
				}
			}
		}else {
			return;
		}
	}

}
//5.	显示所有联系人信息
void Show_everyone(Address_Book* Address) {
	if (Address->size == 0) {
		printf("无联系人\n");
		return;
	}
	for (int i = 0; i < Address->size; i++) {
	printf("姓名:%5s  性别%5s  电话号%5s  住址%5s  年龄%5d\n", Address->person[i].name,Address->person[i].sex
	,Address->person[i].phone,Address->person[i].address,Address->person[i].age);
	}
}
//6.清空所有联系人
void Delete_every(Address_Book* Address) {
	assert(Address != NULL);
	Init(Address);
	return;
}
//7.以名字排序所有联系人
void Name_sort(Address_Book* Address) {
	assert(Address != NULL);
	if (Address->size == 0) {
		printf("无联系人!");
		return;
	}
	Member_Information temp;
	for (int i = 0; i < (Address->size)-1; i++) {
		for (int j = 0; j < (Address->size) - 1 - i; j++) {
			if (strcmp(Address->person[j].name, Address->person[j + 1].name)>0) {
				temp = Address->person[j];
				Address->person[j] = Address->person[j + 1];
				Address->person[j + 1] = temp;
			}
		}
	}
}
Address_Book Address;
typedef void(*func)(Address_Book*);
int main() {
	Init(&Address);
	int choice = 0;
	//转移表
	func func_table[] = { NULL,Add,Delete,Find,Modification,Show_everyone,Delete_every,Name_sort };
	while (1) {
		menu();
		printf("请输入你的选择:");
		scanf("%d", &choice);
		if (choice == 0) {
			printf("已退出\n");
			return;
		}else if(choice<0||choice>9){
			printf("你的输入有误!\n");
			continue;
		}else {
			system("cls");
			func_table[choice](&Address);
		}
		
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值