C语言实战项目:简易通讯录

本篇用C语言实现了一个简易的通讯录。

代码演示:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define MAX 1000

typedef struct People {
	char name[20];
	char sex[10];
	char age[4];
	char telephone[20];
	char address[20];
}People;

typedef struct Contact {
	People data[MAX];
	int count;
}Contact;

enum operate {
	EXIT,
	ADD,
	DELETE,
	FIND,
	UPDATE,
	SHOW,
	CLEAR,
	SORT
};

void ContactInit(Contact* con) {
	assert(con);
	memset(con, 0, sizeof(Contact));
}

void ContactInsert(Contact* con) {
	assert(con);
	if (con->count >= MAX) {
		printf("通讯录已满,无法再添加!\n");
		return;
	}
	//添加
	printf("请输入需要添加的人的姓名:>");
	scanf("%s", con->data[con->count].name);
	printf("请输入需要添加的人的性别:>");
	scanf("%s", con->data[con->count].sex);
	printf("请输入需要添加的人的年龄:>");
	scanf("%s", con->data[con->count].age);
	printf("请输入需要添加的人的电话号码:>");
	scanf("%s", con->data[con->count].telephone);
	printf("请输入需要添加的人的家庭住址:>");
	scanf("%s", con->data[con->count].address);
	con->count++;
	printf("添加成功!\n");
}

void ContactShow(Contact* con) {
	assert(con);
	if (con->count == 0) {
		printf("通讯录中无用户!\n");
		return;
	}
	printf("   %5s %5s %5s %15s %15s \n", "姓名", "性别", "年龄", "电话号码", "家庭住址");
	for (int i = 0;i < con->count;++i) {
		printf("   %-6s %-5s %-9s %-17s %-15s \n", con->data[i].name, con->data[i].sex,
			con->data[i].age, con->data[i].telephone, con->data[i].address);
	}
}

void ContactDelete(Contact* con) {
	assert(con);
	if (con->count == 0) {
		printf("通讯录中无用户!\n");
		return;
	}
	printf("请输入需要删除的人的姓名:>");
	char name[20] = { 0 };
	scanf("%s", name);
	int i = 0;
	for (;i < con->count;++i) {
		if (strcmp(con->data[i].name, name) == 0) {
			for (int j = i;j < con->count - 1;++j) {
				memcpy(con->data[j], con->data[j + 1], sizeof(People));
			}
			break;
		}
	}
	if (i < con->count)
		printf("删除成功!\n");
	else
		printf("通讯录中没有此人!\n");
}

void ContactFind(Contact* con) {
	assert(con);
	if (con->count == 0) {
		printf("通讯录中无用户!\n");
		return;
	}
	printf("请输入需要查询的人的姓名:>");
	char name[20] = { 0 };
	scanf("%s", name);
	int i = 0;
	for (;i < con->count;++i) {
		if (strcmp(con->data[i].name, name) == 0) {
			break;
		}
	}
	if (i < con->count) {
		printf("   %5s %5s %5s %15s %15s \n", "姓名", "性别", "年龄", "电话号码", "家庭住址");
		printf("   %-6s %-5s %-9s %-17s %-15s \n", con->data[i].name, con->data[i].sex,
			con->data[i].age, con->data[i].telephone, con->data[i].address);
	}
	else
		printf("通讯录中没有此人!\n");
}

void ContactUpdate(Contact* con) {
	assert(con);
	if (con->count == 0) {
		printf("通讯录中无用户!\n");
		return;
	}
	printf("请输入需要更新的人的姓名:>");
	char name[20] = { 0 };
	scanf("%s", name);
	int i = 0;
	for (;i < con->count;++i) {
		if (strcmp(con->data[i].name, name) == 0) {
			break;
		}
	}
	if (i < con->count) {
		printf("请输入新的人的姓名:>");
		scanf("%s", con->data[i].name);
		printf("请输入新的的性别:>");
		scanf("%s", con->data[i].sex);
		printf("请输入新的的年龄:>");
		scanf("%s", con->data[i].age);
		printf("请输入新的电话号码:>");
		scanf("%s", con->data[i].telephone);
		printf("请输入新的的家庭住址:>");
		scanf("%s", con->data[i].address);
		printf("更新成功!\n");
	}
	else
		printf("通讯录中没有此人!\n");
}

void ContactClear(Contact* con) {
	assert(con);
	con->count = 0;
	printf("已清空!\n");
}

void ContactSort(Contact* con) {
	assert(con);
	if (con->count == 0) {
		printf("通讯录中无用户!\n");
		return;
	}
	for (int i = 0;i < con->count;++i) {
		int flag = 0;
		for (int j = 0;j < con->count - 1 - i;++j) {
			if (strcmp(con->data[j].name, con->data[j + 1].name) > 0) {
				People p = con->data[j];
				con->data[j] = con->data[j + 1];
				con->data[j + 1] = p;
				flag = 1;
			}
		}
		if (flag == 0)
			break;
	}
	printf("排序完成!\n");
}

void run() {

	Contact contact;
	ContactInit(&contact);

	int select = 0;
	do {
		printf("*******************************************\n");
		printf("*                简易通讯录               *\n");
		printf("*            1.添加      2.删除           *\n");
		printf("*            3.查找      4.修改           *\n");
		printf("*             5.显示所有联系人            *\n");
		printf("*             6.清空所有联系人            *\n");
		printf("*             7.排序所有联系人            *\n");
		printf("*             0.退出                      *\n");
		printf("*******************************************\n");

		printf("请输入你的选择:>");
		scanf("%d", &select);
		system("cls");
		switch (select) {
		case EXIT:
			printf("已退出。\n");
			return 0;
		case ADD:
			ContactInsert(&contact);
			break;
		case DELETE:
			ContactDelete(&contact);
			break;
		case FIND:
			ContactFind(&contact);
			break;
		case UPDATE:
			ContactUpdate(&contact);
			break;
		case SHOW:
			ContactShow(&contact);
			break;
		case CLEAR:
			ContactClear(&contact);
			break;
		case SORT:
			ContactSort(&contact);
			break;
		default:
			printf("选择出现错误,请重新输入。\n");
		}
	} while (select);
}

int main() {

	//运行
	run();

	return 0;
}

运行显示:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木木是木木

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

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

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

打赏作者

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

抵扣说明:

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

余额充值