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

发布时间:2024年01月21日

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

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

//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;
}

文章来源:https://blog.csdn.net/cookies_s_/article/details/135724437
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。