通讯录(静态版)(C语言)(VS)


前言

通讯录(文件版)
通讯录(静态版)
通讯录(动态版)


一、Main.c

#include"AddressList.h"

enum Usage
{
	ALEXIT,
	ALPLUS,
	ALDELETE,
	ALFSHOW,
	ALREPLACE,
	ALSHOW,
	ALDESTORY,
	ALSORT
};

void menu()
{
	printf("\n");
	printf("        1.添加联系人信息         2.删除指定联系人信息\n");
	printf("        3.查找指定联系人信息     4.修改指定联系人信息\n");
	printf("        5.显示所有联系人信息     6.清空所有联系人\n");
	printf("        7.以名字排序所有联系人   0.退出\n");
	printf("\n");
}

void Play()
{
	AL address_list;
	AL* pal = &address_list;
	ALInIt(pal);
	printf("欢迎进入通信录。\n");
	int n;
	do
	{
		menu();
		printf("请输入:");
		scanf("%d", &n);
		switch (n)
		{
			//退出通讯录
		case ALEXIT:
			printf("退出通讯录中...\n");
			break;
			//添加联系人信息
		case ALPLUS:
			ALPlus(pal);
			break;
			//删除指定联系人信息
		case ALDELETE:
			ALDelete(pal);
			break;
			//查找指定联系人信息
		case ALFSHOW:
			ALFShow(pal);
			break;
			//修改指定联系人信息
		case ALREPLACE:
			ALReplace(pal);
			break;
			//显示所有联系人信息
		case ALSHOW:
			ALShow(pal);
			break;
			//清空所有联系人
		case ALDESTORY:
			ALDestory(pal);
			break;
			//以名字排序所有联系人
		case ALSORT:
			ALSort(pal);
			break;
			//选择错误
		default:
			printf("选择错误。");
			break;
		}
	} while (n);
	printf("退出通讯录成功。\n");
}


int main()
{
	Play();
	return 0;
}

二、AddressList.h

#pragma once

#define _CRT_SECURE_NO_WARNINGS 1
//_CRT_SECURE_NO_WARNINGS

//包含头文件
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>

//定义
#define MAX 1000
#define MAX_NAME 10
#define MAX_GENDER 5
#define MAX_PHONE 12
#define MAX_ADDRESS 30

//人的信息包括:姓名、性别、年龄、电话、住址
typedef struct People
{
	char name[MAX_NAME];//姓名
	char gender[MAX_GENDER];//性别
	char age;//年龄
	char phone[MAX_PHONE];//电话
	char address[MAX_ADDRESS];//住址
}P;

//通讯录可以用来存储1000个人的信息
typedef struct AddressList
{
	P persons[MAX];
	int count;
}AL;

//通讯录初始化
void ALInIt(AL* pal);

//添加联系人信息
void ALPlus(AL* pal);

//删除指定联系人信息
void ALDelete(AL* pal);

//查找指定联系人信息
void ALFShow(const AL* pal);

//修改指定联系人信息
void ALReplace(AL* pal);

//显示所有联系人信息
void ALShow(const AL* pal);

//清空所有联系人
void ALDestory(AL* pal);

//以名字排序所有联系人
void ALSort(AL* pal);

三、AddressList.c

#include"AddressList.h"

//通讯录初始化
void ALInIt(AL* pal)
{
	assert(pal);
	pal->count = 0;
	memset(pal->persons, 0, sizeof(pal->persons));
}

static int ALFindName(const AL* pal,const char* name)
{
	assert(pal);
	int i;
	for (i = 0;i < pal->count;i++)
	{
		if (!(strcmp(name, pal->persons[i].name)))
			return i;
	}
	return -1;
}

//添加联系人信息
void ALPlus(AL* pal)
{
	assert(pal);
	if (pal->count == MAX)
	{
		printf("通讯录已达上限,无法添加。\n");
		return;
	}
	else
	{
		printf("请添加联系人的姓名:");
		scanf("%s",pal->persons[pal->count].name);
		printf("请添加联系人的性别:");
		scanf("%s", pal->persons[pal->count].gender);
		printf("请添加联系人的年龄:");
		scanf("%hhd", &pal->persons[pal->count].age);
		printf("请添加联系人的电话号码:");
		scanf("%s", pal->persons[pal->count].phone);
		printf("请添加联系人的地址:");
		scanf("%s", pal->persons[pal->count].address);
		printf("添加联系人%s信息成功!\n", pal->persons[pal->count].name);
		pal->count++;
	}
}

//删除指定联系人信息
void ALDelete(AL* pal)
{
	assert(pal);
	char tmp_name[MAX_NAME];
	printf("请输入您要删除的联系人:");
	scanf("%s", tmp_name);
	int n = ALFindName(pal, tmp_name);
	if (n == -1)
	{
		printf("查无此人。\n");
		return;
	}
	else
	{
		int i;
		for (i = n;i <= pal->count - 1;i++)
			pal->persons[i] = pal->persons[i + 1];
		pal->count--;
		printf("删除联系人%s成功!\n", tmp_name);
	}
}

//查找指定联系人信息
void ALFShow(const AL* pal)
{
	assert(pal);
	char tmp_name[MAX_NAME];
	printf("请输入您要查找的联系人:");
	scanf("%s", tmp_name);
	int n = ALFindName(pal, tmp_name);
	if (n == -1)
	{
		printf("查无此人。\n");
		return;
	}
	else
	{
		printf("%3s%21s\t%5s\t%3s\t%12s\t%30s\n", "序列", "名字", "性别", "年龄", "电话", "地址");
		printf("%3d:%20s\t%5s\t%4d\t%12s\t%30s\n", n + 1,
			pal->persons[n].name,
			pal->persons[n].gender,
			pal->persons[n].age,
			pal->persons[n].phone,
			pal->persons[n].address);
	}
}

//修改指定联系人信息
void ALReplace(AL* pal)
{
	assert(pal);
	char tmp_name[MAX_NAME];
	printf("请输入您要修改的联系人的信息:");
	scanf("%s", tmp_name);
	int n = ALFindName(pal, tmp_name);
	if (n == -1)
	{
		printf("查无此人。\n");
		return;
	}
	else
	{
		printf("请修改联系人的姓名:");
		scanf("%s", pal->persons[n].name);
		printf("请修改联系人的性别:");
		scanf("%s", pal->persons[n].gender);
		printf("请修改联系人的年龄:");
		scanf("%hhd", &pal->persons[n].age);
		printf("请修改联系人的电话号码:");
		scanf("%s", pal->persons[n].phone);
		printf("请修改联系人的地址:");
		scanf("%s", pal->persons[n].address);
		printf("以成功修改联系人%s的信息为联系人%s的信息!\n", tmp_name, pal->persons[n].name);
	}
}

//显示所有联系人信息
void ALShow(const AL* pal)
{
	assert(pal);
	int i;
	printf("%3s%21s\t%5s\t%3s\t%12s\t%30s\n","序列", "名字", "性别", "年龄", "电话", "地址");
	for (i = 0;i < pal->count;i++)
	{
		printf("%3d:%20s\t%5s\t%4hhd\t%12s\t%30s\n",   i + 1,
														pal->persons[i].name, 
														pal->persons[i].gender, 
														pal->persons[i].age, 
														pal->persons[i].phone, 
														pal->persons[i].address);
	}
}

//清空所有联系人
void ALDestory(AL* pal)
{
	assert(pal);
	pal->count = 0;
	printf("清空所有联系人成功!\n");
}

//以名字排序
int NameSort(const void* e1, const void* e2)
{
	return strcmp(((P*)e1)->name, ((P*)e2)->name);
}

//以名字排序所有联系人
void ALSort(AL* pal)
{
	assert(pal);
	qsort(pal->persons,pal->count , sizeof(P), NameSort);
	printf("以名字排序所有联系人成功!\n");
}

总结与效果

刚开始:

在这里插入图片描述


添加联系人信息:

在这里插入图片描述
在这里插入图片描述


删除指定联系人信息:

在这里插入图片描述
在这里插入图片描述


查找指定联系人信息:

在这里插入图片描述


修改指定联系人信息:

在这里插入图片描述


显示所有联系人信息:

在这里插入图片描述


以名字排序所有联系人:

在这里插入图片描述


清空所有联系人:

在这里插入图片描述


退出:

在这里插入图片描述


看完给个关注,多谢了!!!

在这里插入图片描述

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值