首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通讯录项目

通讯录项目

作者头像
风中的云彩
发布2024-11-07 21:47:37
发布2024-11-07 21:47:37
3450
举报
文章被收录于专栏:C/C++的自学之路C/C++的自学之路

大人们总想着去解释,可他们忘了语言本来就是误会的根源。

前言

这是我自己做的第三个小项目---通讯录项目。后期我会继续制作其他小项目并开源至博客上。 上一小项目是猜数字游戏,没看过的同学可以去看看: 有关猜数字游戏的小项目

目标

1. 通过实战项目巩固自己对数据结构中顺序表的理解。 2. 制作一个通讯录,实现增添、删减、查找、打印、修改联系人的目的。

contact.h文件

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#define name_lenth 20
#define gander_num 10
#define telephone_num 20
#define address_num 20
#define MAX 100
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//定义成员信息结构体
typedef struct PerInfo
{
	char name[name_lenth];
	char sex[gander_num];
	int age;
	char tele[telephone_num];
	char addr[address_num];
}PerInfo;
//定义顺序表结构体
typedef struct Contact
{
	PerInfo data[MAX];
	int size;
}Contact;
//打印菜单
void nume();
//创建通讯录1
void ContactInit(Contact* con);
//销毁通讯录
void ContactDestory(Contact* con);
//增添联系人1
void ContactAdd(Contact* con);
//删除联系人1
void ContactDelete(Contact* con);
//修改联系人1
void ContactChange(Contact* con);
//查找联系人1
void ContactSearch(Contact* con);
//展示通讯录所有联系人1
void ContactShow(Contact* con);

1. 在 contact.h 文件中,我们存放结构体和函数的声明,以及各种库的引用。 2. 在定义成员信息结构体时,我们使用大量宏定义,方便我们后期修改、扩容等。 3. 我们这里创建的是定容的通讯录,使用的是静态顺序表。

contact.c文件

代码语言:javascript
复制
#include "contact.h"
//菜单函数
void nume()
{
	printf("*******************************\n");
	printf("********通讯录管理系统*********\n");
	printf("***1.add************2.delete***\n");
	printf("***3.search*********4.change***\n");
	printf("***5.show**********6.destory***\n");
	printf("***********0.exit**************\n");
	printf("*******************************\n");
	return;
}
//创建通讯录
void ContactInit(Contact* con)
{
	assert(con);
	con->size = 0;
	memset(con->data, 0, sizeof(con->data));
	return;
}
//增添联系人
void ContactAdd(Contact* con)
{
	assert(con);
	if (con->size == MAX)
	{
		printf("通讯录已满,需要进一步扩容!\n");
		return;
	}
	else
	{
		printf("请输入名字:");
		scanf("%s", con->data[con->size].name);
		printf("请输入年龄:");
		scanf("%d", &(con->data[con->size].age));
		printf("请输入性别:");
		scanf("%s", con->data[con->size].sex);
		printf("请输入电话:");
		scanf("%s", con->data[con->size].tele);
		printf("请输入地址:");
		scanf("%s", con->data[con->size].addr);
		con->size++;
		printf("增加成功\n");
	}
	return;
}
//删除联系人
void ContactDelete(Contact* con)
{
	assert(con);
	if (con->size == 0)//先要看通讯录是否为空
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	printf("请输入要删除人的名字:");
	char name[100] = { 0 };
	scanf("%s", name);
	for ( int i = 0; i < con->size; i++)
	{
		if (strcmp(con->data[i].name, name) == 0)//对比数据是否相同
		{
			for (int n = i; n< con->size; n--)
			{
				con->data[n] = con->data[n - 1];
			}
			con->size--;
			printf("删除成功\n");
		}
	}
	printf("查无此人!\n");
	return;
}
//展示通讯录所有联系人
void ContactShow(Contact* con)
{
	assert(con);
	if (con->size == 0)
	{
		printf("还未存放任何通讯录成员!\n");
		return;
	}
	else
	{
		int i = 0;
		printf("%-15s%-5s%-5s%-12s%-30s%\n", "名字", "年龄", "性别", "电话", "地址");
		for (i = 0; i < con->size; i++)
		{
			printf("%-15s%-5d%-5s%-12s%-30s%\n",con->data[i].name, con->data[i].age, con->data[i].sex, con->data[i].tele, con->data[i].addr);
		}
		printf("打印完成\n");
	}
	return;
}
//查找联系人
void ContactSearch(Contact* con)
{
	assert(con);
	printf("请输入你要查找的联系人姓名!");
	char name[20] = { 0 };
	scanf("%s", name);
	int i = 0;
	for (i = 0; i < con->size; i++)
	{
		if (strcmp(con->data[i].name, name) == 0)//对比数据是否相同
		{
			printf("确实有此人!\n");
			printf("这个人在通讯录中的序号是:%d\n", i);
			printf("%-15s%-5d%-5s%-12s%-30s%\n", con->data[i].name, con->data[i].age, con->data[i].sex, con->data[i].tele, con->data[i].addr);
			return;
		}
	}
	printf("查无此人!\n");
	return;
}
//修改联系人
void ContactChange(Contact* con)
{
	assert(con);
	char name[100];
	printf("请输入要修改人的名字:");
	scanf("%s", name);
	for (int i = 0; i < con->size; i++)
	{
		if (strcmp(con->data[i].name, name) == 0)//对比数据是否相同
		{
			printf("请输入名字:");
			scanf("%s", con->data[i].name);
			printf("请输入年龄:");
			scanf("%d", &(con->data[con->size].age));
			printf("请输入性别:");
			scanf("%s", con->data[i].sex);
			printf("请输入电话:");
			scanf("%s", con->data[i].tele);
			printf("请输入地址:");
			scanf("%s", con->data[i].addr);
			printf("修改成功!\n");
		}
	}
	printf("查无此人!\n");
	return;
}
//销毁通讯录
void ContactDestory(Contact* con)
{
	assert(con);
	con->size = 0;
	memset(con->data, 0, sizeof(con->data));
}

1. 在 contact.c 文件中,我们存放各种函数的实现。 2. 我们使用指针来接受通讯录结构体,使用地址传值。 3. 在后期,我们需要不断的改进函数,使得我们的通讯录更加直接美观。

test.c文件

代码语言:javascript
复制
#include "contact.h"
int main()
{

	system("title 通讯录");
	int input = 0;
	Contact con;
	ContactInit(&con);
	printf("This is a contact list made by HSY.");
	do
	{
		Sleep(2000);
		system("cls");
		nume();
		printf("请输入你的选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			ContactAdd(&con);
			break;
		case 2:
			ContactDelete(&con);
			break;
		case 3:
			ContactSearch(&con);
			break;
		case 4:
			ContactChange(&con);
			break;
		case 5:
			ContactShow(&con);
			break;
		case 6:
			ContactDestory(&con);
			break;
		case 0:
			printf("已经退出通讯录!\n");
			break;
		default:
			printf("输入有问题,请重新输入:\n");
			break;
		}
	} while (input);
	return 0;
}

1. 在 test.c 文件中,我们存放主函数,通过switch选择结构来实现。 2. 后期我们也需要在这里补充各种小细节,如:Sleep(2000);system("cls");等,来完善这个项目。

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目标
  • contact.h文件
  • contact.c文件
  • test.c文件
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档