c语言通讯录(完整版,超详细!!!)

实现一个通讯录,通讯录中保存人的信息:名字,年龄,性别,电话,住址

要求:1.通讯录中可以存放100个人的信息。

           2.增加联系人

           3.删除指定联系人

           4.修改指定联系人

           5.查找指定联系人

           6.显示所有联系人信息

           7.排序功能

 通过三个文件实现:test.c(主文件),contact.h(类型的声明),contact.c(函数的实现)

目录

一、test.c的实现

1、菜单(menu)

2、主函数

二、contact.h的实现

1、创建一个人的信息

2、定义一个通讯录

3、各类函数的声明

三、contact. c的实现

1、初始化通讯录函数

2、添加联系人函数

3、显示联系人函数

4、删除联系人函数

5、查找联系人函数

6、修改联系人函数

7、给联系人排序(按年龄

一、test.c的实现

1、菜单(menu)

void menu() {
	printf("***********************************");
	printf("****** 1、add     2、delete *******");
	printf("****** 3、search  4、modify *******");
	printf("****** 5、show    6、sort   *******");
	printf("****** 0、exit              *******");
	printf("***********************************");
}

2、主函数

int main() {
	int input = 0;//把input放do上面,如果定义在do里面,while里就用不了了
	contact con;//定义一个通讯录con
	initcontact(&con);//初始化通讯录,把con地址传过去
	do {
		menu();
		printf("请选择\n");
		scanf("%d", &input);
		switch (input) {
		case 1:	
			add(&con);
			break;
		case 2:		
			delete(&con);
			break;
		case 3:	
			search(&con);
			break;
		case 4:		
			modify(&con);
			break;
		case 5:	
			show(&con);
			break;
		case 6:		
			sort(&con);//按年龄排
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("错了,请重输\n");
			break;
		}
	} while (input);
	return 0;
}

二、contact.h的实现

1、创建一个人的信息

#pragma once
#include<string.h>
#include<stdio.h>

#define max 100
#define max_name 10
#define max_sex 5
#define max_telephone 12
#define max_address 30

typedef struct people {
	char name[max_name];
	int age;
	char sex[max_sex];
	char telephone[max_telephone];
	char address[max_address];
}people;

2、定义一个通讯录

typedef struct contact {
	people date[max];//把人放进去
	int sz;//计数的
}contact;

3、各类函数的声明

void initcontact(contact* pc);
void add(contact* pc);
void show(const contact* pc);//不会修改,加const修饰
void delete(contact* pc);
void search(const contact* pc);
void modify(contact* pc);
void sort(contact* pc);

三、contact. c的实现

1、初始化通讯录函数

void initcontact(contact* pc) {//把通讯录里面的值全清空
	memset(pc->date, 0, size(pc->date));
	pc->sz = 0;
}

2、添加联系人函数

void add(contact* pc) {
	if (pc->sz==max) {
		printf("通讯录满了,无法添加\n");
		return;
	}

	printf("请输入名字\n");
	scanf("%s", pc->date[pc->sz].name);
	printf("请输入年龄\n");
	scanf("%d", &(pc->date[pc->sz].age));
	printf("请输入性别\n");
	scanf("%s", pc->date[pc->sz].sex);
	printf("请输入电话\n");
	scanf("%s", pc->date[pc->sz].telephone);
	printf("请输入地址\n");
	scanf("%s", pc->date[pc->sz].address);
	pc->sz++;
	printf("成功增加该联系人\n");
}

3、显示联系人函数

void show(contact* pc) {
	int i = 0;
	printf("%-10s\t%-5s\t%-5s\t%-12s\t%-10s\n", "姓名","年龄","性别","电话","地址");
	for (i = 0; i < pc->sz; i++) {
		printf("%-10s\t%-5d\t%-5s\t%-12s\t%-10s\n", pc->date[i].name, pc->date[i].age, pc->date[i].sex, pc->date[i].telephone, pc->date[i].address);
	}
}

4、删除联系人函数

int find(contact* pc,char* name) {
	int i = 0;
	for (i = 0; i < pc->sz; i++) {
		if (strcmp(pc->date[i].name, name) == 0) {
			return i;
		}
	}
	return 0;
}
void delete(contact* pc) {
	printf("要删联系人的姓名:");
	char name[max_name] = { 0 };
	scanf("%s", name);
	int m = find(pc,name);
	
	if (m == 0) {
		printf("要找的人不存在\n");
		return;
	}
	else {
		int i = 0;
		for (i = m; i < pc->sz-1; i++) {
			pc->date[i] = pc->date[i + 1];
		}
		pc->sz--;
		printf("成功删除该联系人\n");
	}
}

5、查找联系人函数

void search(contact* pc) {
	printf("要查找联系人的姓名:");
	char name[max_name] = { 0 };
	scanf("%s", name);
	int m = find(pc, name);
	if (m == 0) {
		printf("要找的人不存在\n");
		return;
	}
	else {
		printf("%-10s\t%-5s\t%-5s\t%-12s\t%-10s\n", "姓名", "年龄", "性别", "电话", "地址");
		printf("%-10s\t%-5d\t%-5s\t%-12s\t%-10s\n", pc->date[m].name, pc->date[m].age, pc->date[m].sex, pc->date[m].telephone, pc->date[m].address);
	}
}

6、修改联系人函数

void modify(contact* pc) {
	printf("输入要修改的名字\n");
	char name[max_name] = { 0 };
	scanf("%s", name);
	int m = find(pc, name);
	if (m == 0) {
		printf("要修改的人不存在\n");
		return;
	}
	else {
		printf("输入名字\n");
		scanf("%s", pc->date[m].name);
		printf("输入年龄\n");
		scanf("%d", &(pc->date[m].age));
		printf("输入性别\n");
		scanf("%s", pc->date[m].sex);
		printf("输入电话\n");
		scanf("%s", pc->date[m].telephone);
		printf("输入地址\n");
		scanf("%s", pc->date[m].address);
		printf("修改成功\n");
	}
}

7、给联系人排序(按年龄)

void sort(contact* pc) {
	int i = 0;
	for (i = 0; i < pc->sz; i++) {
		int j = 0;
		for (j = 0; j < pc->sz - 1; j++) {
			if (pc->date[j].age > pc->date[j + 1].age) {
				people t = pc->date[j];
				pc->date[j] = pc->date[j + 1];
				pc->date[j + 1] = t;
			}
		}
	}
	show(pc);
}

这样就完成啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悦悦悦悦悦悦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值