基于静态顺序表实现通讯录项目

本文详细介绍了如何在C++中使用静态数组实现一个简单的通讯录数据结构,包括初始化、销毁、添加联系人、删除联系人、查找联系人以及查看通讯录的操作方法。
摘要由CSDN通过智能技术生成

与前面用动态顺序表相比,区别在使用的是静态数组:

 实现过程大差不差,具体代码如下:

//Sta_Contact.h


#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#define NAME_MAX 20
#define GENDER_MAX 20
#define TEL_MAX 20
#define ASSR_MAX 20
#define ARR_MAX 100

typedef struct per_infor
{
	char name[NAME_MAX];
	char gender[GENDER_MAX];
	int age;
	char tel[TEL_MAX];
	char addr[ASSR_MAX];
}SLDataType;


//静态顺序表
typedef struct Contact
{
	SLDataType arr[ARR_MAX];
	int size;
}Con;


//初始化与销毁
void ConInit(Con* pcon);
void ConDestroy(Con* pcon);

//打印验证
void Print(Con* pcon);

//增加联系人--尾插
void ConAdd(Con* pcon);

//删除联系人--指定姓名删除
void ConDel(Con* pcon);

//寻找是否存在该联系人--通过名字查找
int FindByName(Con* pcon,char* name);

//查找联系人
void ConFind(Con* pcon);

//变更联系人
void ConChange(Con* pcon);

//查看通讯录
void ConCheck(Con* pcon);
// Sta_Contact.c


#include "Sta_Contact.h"


//初始化与销毁
void ConInit(Con* pcon)
{
	assert(pcon);
	pcon->size = 0;
}
void ConDestroy(Con* pcon)
{
	assert(pcon);
	pcon->size = 0;
}


//增加联系人--尾插
void ConAdd(Con* pcon)
{
	SLDataType info;
	assert(pcon);
	assert(pcon->size <= ARR_MAX);

	printf("请输入联系人姓名:\n");
	scanf("%s", info.name);
	printf("请输入联系人年龄:\n");
	scanf("%d", &info.age);
	printf("请输入联系人性别:\n");
	scanf("%s", info.gender);
	printf("请输入联系人电话:\n");
	scanf("%s", info.tel);
	printf("请输入联系人住址:\n");
	scanf("%s", info.addr);
	printf("\n");

	pcon->arr[pcon->size] = info;
	pcon->size++;
}


//打印验证
void Print(Con* pcon)
{
	assert(pcon);
	printf("姓名\t性别\t年龄\t电话\t住址\n");
	for (int i = 0; i < pcon->size; i++)
	{
		printf("%s\t", pcon->arr[i].name);
		printf("%s\t", pcon->arr[i].gender);
		printf("%d\t", pcon->arr[i].age);
		printf("%s\t", pcon->arr[i].tel);
		printf("%s\t", pcon->arr[i].addr);
		printf("\n");
	}
	printf("\n");
}


//寻找是否存在该联系人--通过名字查找
int FindByName(Con* pcon,char name[])
{
	assert(pcon);
	for (int i = 0; i < pcon->size; i++)
	{
		if (strcmp(pcon->arr[i].name, name) == 0)
			return i;//返回下标
	}
	return -1;//不存在该联系人
}


//删除联系人--指定姓名删除
void ConDel(Con* pcon)
{
	//先判断是否存在该联系人
	//存在就删除
	//不存在就不能删除并给出提示
	char name[NAME_MAX];
	printf("请输入需要删除的联系人:");
	scanf("%s", name);
	int n = FindByName(pcon, name);
	if (n != -1)
	{
		for (int i = n; i < pcon->size - 1; i++)
		{
			pcon->arr[i] = pcon->arr[i + 1];
		}
		pcon->size--;
		printf("该联系人删除成功\n\n");
	}
	else
	{
		printf("该联系人不存在\n\n");
		return;
	}
}


//查看通讯录
void ConCheck(Con* pcon)
{
	assert(pcon);
	printf("姓名\t性别\t年龄\t电话\t住址\n");
	for (int i = 0; i < pcon->size; i++)
	{
		printf("%s\t", pcon->arr[i].name);
		printf("%s\t", pcon->arr[i].gender);
		printf("%d\t", pcon->arr[i].age);
		printf("%s\t", pcon->arr[i].tel);
		printf("%s\t", pcon->arr[i].addr);
		printf("\n");
	}
	printf("\n");
}


//查找联系人
void ConFind(Con* pcon)
{
	assert(pcon);
	char name[NAME_MAX];
	printf("请输入需要查找的联系人:");
	scanf("%s", name);
	int n = FindByName(pcon,name);
	if (n != -1)
	{
		printf("姓名\t性别\t年龄\t电话\t住址\n");
		printf("%s\t", pcon->arr[n].name);
		printf("%s\t", pcon->arr[n].gender);
		printf("%d\t", pcon->arr[n].age);
		printf("%s\t", pcon->arr[n].tel);
		printf("%s\t", pcon->arr[n].addr);
		printf("\n\n");
	}
	else
	{
		printf("该联系人不存在\n\n");
	}
}


//变更联系人
void ConChange(Con* pcon)
{
	assert(pcon);
	//查找是否存在该联系人
	char name[NAME_MAX];
	printf("请输入需要变更的联系人:");
	scanf("%s", name);
	int n = FindByName(pcon, name);
	if (n != -1)
	{
		SLDataType info;
		printf("请输入联系人姓名:\n");
		scanf("%s", info.name);
		printf("请输入联系人年龄:\n");
		scanf("%d", &info.age);
		printf("请输入联系人性别:\n");
		scanf("%s", info.gender);
		printf("请输入联系人电话:\n");
		scanf("%s", info.tel);
		printf("请输入联系人住址:\n");
		scanf("%s", info.addr);
		printf("\n");

		pcon->arr[n] = info;
	}
	else
	{
		printf("该联系人不存在\n\n");
	}
}
//Test.c


#include "Sta_Contact.h"
#define CASE break; case
void menu()
{
	printf("************************************\n");
	printf("****1.增加联系人   2.删除联系人*****\n");
	printf("****3.变更联系人   4.查找联系人*****\n");
	printf("****5.查看通讯录   0.退出通讯录*****\n");
	printf("************************************\n");
}

int main()
{
	Con pcon;
	ConInit(&pcon);
	int op = -1;
	do
	{
		menu();
		printf("请输入操作:");
		scanf("%d", &op);
		switch (op)
		{
		        case 1:
			   	//增加联系人
				ConAdd(&pcon);
				//Print(&pcon);
				CASE 2 :
				//删除联系人
				ConDel(&pcon);
				//Print(&pcon);
				CASE 3 :
				//变更联系人
				ConChange(&pcon);
				CASE 4 :
				//查找联系人
				ConFind(&pcon);
				CASE 5 :
				//查看通讯录
			    ConCheck(&pcon);
				CASE 0 :
			    //退出通讯录
				printf("退出通讯录中...\n");
				break;
				default:
				{
					printf("输入错误,请重新输入!\n");
					break; 
				}

		}
	} while (op != 0);
	//销毁通讯录
	ConDestroy(&pcon);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_Nemophila

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

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

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

打赏作者

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

抵扣说明:

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

余额充值