c_存储1000人信息的通讯录

实现一个通讯录


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

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

#pragma warning(disable:4996)

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

typedef struct information{
	char name[nameSize];
	char sex;
	int age;
	char tel[telSize];
	char addr[addrSize];
}Note;

void menu()
{
	printf("***************************************\n");
	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");
	printf("please input your choice:");
}

void myAdd(Note arr[], int num, int *personSum)
{
	printf("please input information<name sex age tel addr>:\n");
	Note note;
	scanf("%s %c %d %s %s", note.name, &(note.sex), &(note.age), note.tel, note.addr);
	if (num > *personSum){
		*(arr + (*personSum)++) = note;
		printf("add succeed!\n");
	}
	else{
		printf("address book is Full!\n");
	}
}

void myDelete(Note arr[], int *personSum)
{
	printf("please input the person of name you want to delete:");
	char tmp[nameSize];
	scanf("%s", tmp);
	int i = 0;
	while (i < *personSum){
		if (!strcmp(arr[i].name, tmp)){
			if (*personSum == 1){
				*personSum = 0;
				return;
			}
			//将数组添加的最后一个元素移至此覆盖当前值
			arr[i] = *(arr + (*personSum - 1));
			(*personSum)--;
			printf("delete succeed!\n");
			return;
		}
		i++;
	}
	printf("There is no this person!\n");
}

void myFind(Note arr[], int *personSum)
{
	printf("please input the person of name you want to find:");
	char tmp[nameSize];
	scanf("%s", tmp);
	int i = 0;
	while (i < *personSum){
		if (!strcmp(arr[i].name, tmp)){
			printf("name:%-10ssex:%-5cage:%-5dtel:%-15saddr:%-22s\n", arr[i].name, \
				arr[i].sex, arr[i].age, arr[i].tel, arr[i].addr);
			return;
		}
		i++;
	}
	printf("There is no this person!\n");
}

void myModify(Note arr[], int *personSum)
{
	printf("please input the person of name you want to modify:");
	char tmp[nameSize];
	scanf("%s", tmp);
	int i = 0;
	while (i < *personSum){
		if (!strcmp(arr[i].name, tmp)){
			printf("please input information<name sex age tel addr>:\n");
			scanf("%s %c %d %s %s", arr[i].name, &(arr[i].sex), &(arr[i].age), arr[i].tel, arr[i].addr);
			printf("modify succeed!\n");
			return;
		}
		i++;
	}
	printf("There is no this person!\n");
}

void myShow(Note arr[], int *personSum)
{
	int i = 0;
	if (!*personSum){
		printf("no one!\n");
	}
	while (i < *personSum){
		printf("name:%-10ssex:%-5cage:%-5dtel:%-15saddr:%-22s\n", arr[i].name, \
			arr[i].sex, arr[i].age, arr[i].tel, arr[i].addr);
		i++;
	}
}

void myClear(int *personSum)
{
	*personSum = 0;
	printf("clear succeed!\n");
}


int myCmpNote(const void * note1, const void *note2)
{
	Note *x = (Note *)note1;
	Note *y = (Note *)note2;
	int res = strcmp((*x).name, (*y).name);
	if (res > 0){
		return 1;
	}
	else if (res < 0){
		return -1;
	}
	else{
		return 0;
	}
}

void mySort(Note arr[], int *personSum)
{
	int num = *personSum;
	qsort(arr, num, sizeof(Note), myCmpNote);
	myShow(arr, personSum);
}

void branch(Note arr[], int num, int sel, int *personSum)
{
	switch (sel){
	case 1:
		myAdd(arr, num, personSum);
		break;
	case 2:
		myDelete(arr, personSum);
		break;
	case 3:
		myFind(arr, personSum);
		break;
	case 4:
		myModify(arr, personSum);
		break;
	case 5:
		myShow(arr, personSum);
		break;
	case 6:
		myClear(personSum);
		break;
	case 7:
		mySort(arr, personSum);
		break;
	default:
		perror("switch error");
	}
}

int  main()
{
	int personSum = 0;
	Note arr[size];
	int sel;
	do{
		menu();
		scanf("%d", &sel);
		system("cls");
		if (!sel){
			exit(EXIT_FAILURE);
		}
		else if (sel > 7 && sel < 0){
			printf("enter error!please try again:[0,7]");
		}
		else{
			branch(arr, size, sel, &personSum);
		}
	} while (1);

	system("pause");
	return 0;
}

 

测试结果:

运行界面:

首先,添加(1)两个联系人;

然后,显示所有联系人(5)

然后,查找指定联系人(3)

然后,修改指定联系人(4)

修改成功后,显示所有,修改成功!

以名字排序(7);

删除指定联系人(2)

删除后测试:

清空所有联系人(6)

显示所有测试,已清空!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值