c语言实现简单的通讯录功能

c语言实现简单的通讯录功能,第1张

c语言实现简单的通讯录功能 c语言实现的简单的通讯录功能

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

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
typedef struct Personinfo {
	char name[2048];
	char num[2048];
	char sex[2048];
	char age[2048];
	char home[2048];
}Personinfo;

typedef struct Addressbook {
	Personinfo persons[1024];
	int size;
}Addressbook;
Addressbook addressbook;//全局变量
void init(Addressbook* addressbook) {//初始化通讯录
	addressbook->size = 0;
}
void Add(Addressbook* addressbook) {
	assert(addressbook != NULL);
	printf("添加联系人n");
	Personinfo person = { 0 };
	printf("请输入联系人的姓名、性别、年龄、电话、住址:n");
	scanf("%s %s %s %s %s", person.name, person.sex, person.age, person.num, person.home);
	addressbook->persons[addressbook->size] = person;//把person结构体放到Addressbook中,数组为空的时候size为0,将新增元素放到下表为size的地方即可
	addressbook->size++;//size++之后下次插入仍然是把新增元素放到下标为size的地方
	printf("新增联系人成功n");
}
void Del(Addressbook* addressbook) {
	printf("删除联系人n");
	printf("请输入要删除的联系人的序号n");
	int id = 0;
	scanf("%d", &id);
	if (id < 0 || id >= addressbook->size) {
		printf("输入有误n");
		return;
	}
	if (id == addressbook->size - 1) {
		addressbook->size--;
		return;
	}
	Personinfo* lastperson = &addressbook->persons[addressbook->size - 1];
	addressbook->persons[id] = *lastperson;
	addressbook->size--;
	printf("删除完成n");
}
void Find(Addressbook* addressbook) {
	printf("查找联系人n");
	int id;
	printf("请输入要查找的联系人序号n");
	scanf("%d", &id);
	if (id < 0 || id >= addressbook->size) {
		printf("输入有误n");
		return;
	}
	for (int i = 0; i < addressbook->size; i++) {
		if (i == id) {
			Personinfo* p = &addressbook->persons[i];
			printf("(%d) %s %s %s %s %sn", i, p->name, p->sex, p->age, p->num, p->home);
			break;
		}
	}
	printf("查找完成n");
}
void Update(Addressbook* addressbook) {
	printf("修改联系人n");
	printf("请输入要修改的联系人序号:");
	int id;
	scanf("%d", &id);
	if (id < 0 || id >= addressbook->size) {
		printf("您输入的id有误,修改失败");
		return;
	}
	Personinfo* p = &addressbook->persons[id];
	char name[2048] = { 0 };
	char num[2048] = { 0 };
	char sex[2048] = { 0 };
	char age[2048] = { 0 };
	char home[2048] = { 0 };
	printf("输入*表示该选项不可修改n");
	printf("请输入新的姓名、性别、年龄、电话、住址n");
	scanf("%s %s %s %s %s", name, sex, age, num, home);
	if (strcmp(name, "*") != 0) {
		strcpy(p->name, name);

	}
	if (strcmp(sex, "*") != 0) {
		strcpy(p->sex, sex);

	}
	if (strcmp(age, "*") != 0) {
		strcpy(p->age, age);

	}
	if (strcmp(num, "*") != 0) {
		strcpy(p->num, num);
	}
	if (strcmp(home, "*") != 0) {
		strcpy(p->home, home);

	}
	printf("修改成功!n");
}
void Show(Addressbook* addressbook) {
	printf("查看所有联系人n");
	int i;
	for ( i = 0; i < addressbook->size; i++) {
		Personinfo* p = &addressbook->persons[i];
		printf("(%d) %s %s %s %s %sn",i,p->name,p->sex,p->age,p->num,p->home);
	}
	printf("查看联系人完成,共有%d个联系人n", i);
}
void Clean(Addressbook* addressbook) {
	printf("清空所有联系人n");
	addressbook->size = 0;
	printf("清空完成n");
}
int cmp(const void* a, const void* b) {//按字典qsort
	return strcmp((char*)a, (char*)b);
}
void Sort(Addressbook* addressbook) {
	printf("以名字排序所有联系人n");
	qsort(&addressbook->persons[0], addressbook->size, sizeof( addressbook->persons[0]),cmp );
	printf("排序完成n");
}
int Menu() {
	int choice;
	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");
	scanf("%d", &choice);
	return choice;
}
typedef void(*Func)(Addressbook*);//
int main() {
	init(&addressbook);//初始化
	Func func[] = {
	NULL,
	Add,
	Del,
	Find,
	Update,
	Show,
	Clean,
	Sort
	};
	while (1) {
		int choice = Menu();
		if (choice < 0 || choice >= sizeof(func) / sizeof(func[0])) {
			printf("输入错误");
			break;
		}
		if (choice == 0) {
			printf("感谢使用");
			break;
		}
		func[choice](&addressbook);
		Sleep(1000);
		system("cls");
		
	}
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5116058.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存