C语言学习笔记Day16

C语言学习笔记Day16,第1张

练习:通讯录 功能:

1.通讯录中可以存放1000个人的信息
每个人的信息:名字,年龄,性别,电话,地址
2.增加人的信息
3.删除指定人的信息
4.修改指定人的信息
5.查找指定人的信息
6.排序指定人的信息

架构:

test.c 测试通讯录的模块
contact.h 类型定义 函数声明
contact.c 函数的实现

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "contact.h"

//test.c 测试通讯录的模块
// contact.h 类型定义 函数声明
// contact.c 函数的实现

//通讯录
//1.通讯录中可以存放1000个人的信息
//每个人的信息:名字,年龄,性别,电话,地址
//2.增加人的信息
//3.删除指定人的信息
//4.修改指定人的信息
//5.查找指定人的信息
//6.排序指定人的信息

void menu()
{
	printf("**************************************************************\n");
	printf("*************      1.add            2.del       **************\n");
	printf("*************      3.search        4.modify     **************\n");
	printf("*************      5.sort            6.print    **************\n");
	printf("*************      0.exit                       **************\n");
	printf("**************************************************************\n");
}

enum Option
{
	Exit,
	Add,
	Del,
	Search,
	Modify,
	Sort,
	Print
};

int main()
{
	int input = 0;
	//创建通讯录
	Contact con;
	//初始化通讯录
	InitContact(&con);

	do
	{
		menu();
		printf("Please select.");
		scanf("%d", &input);
		switch (input)
		{
		//增加人的信息
		case Add:
			AddContact(&con);
			break;
		//删除指定人的信息
		case Del:
	    	DelContact(&con);
			break;
		//查找指定人的信息
		case Search:
			SearchContact(&con);
			break;
		//修改指定人的信息
		case Modify:
		    ModifyContact(&con);
			break;
		//排序指定人的信息
		case Sort:
		//	SortContact(&con);
			break;
		//打印指定人的信息
		case Print:
			PrintContact(&con);
			break;
		//退出
		case Exit:
			printf("退出通讯录\n");
			break;
		defult:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

contact.h

#pragma once

#define Max_Name 20
#define Max_Sex 10
#define Max_Tele 12
#define Max_Addr 12
#define Max 1000

//类型的定义
typedef struct PeoInfo
{
	char name[Max_Name];
	char sex[Max_Name];
	int age;
	char tele[Max_Tele];
	char addr[Max_Addr];
}PeoInfo;

//通讯录
typedef struct Contact
{
	PeoInfo data[Max];//存放添加进来人的信息
	int sz;//通讯录中当前有效信息的个数
}Contact;

//初始化通讯录
void InitContact(Contact* pc);

//增加人的信息
void AddContact(Contact* pc);

//打印指定人的信息
void PrintContact(const Contact* pc);

//删除指定人的信息
void DelContact(Contact* pc);

//查找指定人的信息
void SearchContact(Contact* pc);

//修改指定人的信息
void ModifyContact(Contact* pc);

contact.c

#include "contact.h"

//初始化通讯录
void InitContact(Contact* pc)
{
	pc->sz = 0;
	//memset(); 内存设置
	memset(pc->data, 0, sizeof(pc->data));
}

//增加人的信息
void AddContact(Contact* pc)
{
	if (pc->sz == Max)
	{
		printf("通讯录已满,无法添加\n");
		return;
	}
	//增加一个人的信息
	printf("请输入名字:\n");
	scanf("%s", pc->data[pc->sz].name);
	printf("请输入年龄:\n");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("请输入性别:\n");
	scanf("%s", pc->data[pc->sz].sex);
	printf("请输入电话:\n");
	scanf("%s", pc->data[pc->sz].tele);
	printf("请输入地址:\n");
	scanf("%s", pc->data[pc->sz].addr);

	pc->sz++;
	printf("增加成功\n");
}

//打印指定人的信息
void PrintContact(const Contact* pc)
{
	int i = 0;
	//打印标题
	printf("%-20s\t%-10s\t%-10s\t%-15s\t%-20s", "名字", "年龄", "性别", "电话", "地址");
	//打印数据
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s\t%-10d\t%-10s\t%-15s\t%-20s", 
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

static int FindByName(Contact* pc, char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	//找不到
	return -1;
}

//删除指定人的信息
void DelContact(Contact* pc)
{
	char name[Max_Name] = { 0 };
	if (pc->sz == 0)
	{
		printf("通讯录为空,无需删除\n");
		return;
	}

	printf("请输入要删除人的名字\n");
	scanf("%s", name);
	//删除一个人的信息
	
	//1.查找要删除的人 有/没有
	int pos=FindByName(pc, name);
	if (pos == -1)
	{
		printf("要删除的人不存在\n");
		return;
	}

	//2.删除
	int i = 0;
	for (i = pos; i < pc->sz-1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("删除成功\n");
}

//查找指定人的信息
void SearchContact(const Contact* pc)
{
	char name[Max_Name] = { 0 };
	printf("请输入要查找人的名字\n");
	scanf("%s", name);

	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else
	{
		//打印标题
		printf("%-20s\t%-10s\t%-10s\t%-15s\t%-20s", "名字", "年龄", "性别", "电话", "地址");
		//打印数据
			printf("%-20s\t%-10d\t%-10s\t%-15s\t%-20s",
				pc->data[pos].name,
				pc->data[pos].age,
				pc->data[pos].sex,
				pc->data[pos].tele,
				pc->data[pos].addr);
	}
}

//修改指定人的信息
void ModifyContact(Contact* pc)
{
	char name[Max_Name] = { 0 };
	printf("请输入要修改人的名字\n");
	scanf("%s", name);

	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else
	{
		//增加一个人的信息
		printf("请输入名字:\n");
		scanf("%s", pc->data[pos].name);
		printf("请输入年龄:\n");
		scanf("%d", &(pc->data[pos].age));
		printf("请输入性别:\n");
		scanf("%s", pc->data[pos].sex);
		printf("请输入电话:\n");
		scanf("%s", pc->data[pos].tele);
		printf("请输入地址:\n");
		scanf("%s", pc->data[pos].addr);

		printf("增加成功\n");
	}
}

(欢迎大家批评指正,侵权即删)

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

原文地址: http://outofmemory.cn/langs/738032.html

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

发表评论

登录后才能评论

评论列表(0条)

保存