使用顺序表实现通讯录

顺序表的增删查改-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/bkmoo/article/details/137566495?spm=1001.2014.3001.5501顺序表已实现,下面借助顺序表的功能实现通讯录。

通讯录都有什么功能呢,有增加联系人,删除联系人,查找联系人,修改联系人,还有通讯录的查看,还有什么呢,还要有退出功能。

首先创建contact.h头文件,声明需要实现的功能

但是再.h文件中需要创建struct PersonInfo结构体,用来储存联系人的属性,如联系人的姓名,性别,年龄,电话,地址。

然后在顺序表中将定义arr数组的类型改为PersonInfo类型。

typedef PeoInfo SLDataType;

// 动态顺序表 -- 按需申请
typedef struct SeqList
{
    SLDataType* arr;
    int size;     // 有效数据个数
    int capacity; // 空间容量
}SL;

typedef SL contact;

使用typedef替换,这样一来就顺序表中的SLDataType类型就全替换了。

#pragma once
#define NAME_MAX 100

#define SEX_MAX 4

#define TEL_MAX 11

#define ADDR_MAX 100



//前置声明
typedef struct SeqList contact;


//用户数据
typedef struct PersonInfo
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tel[TEL_MAX];
	char addr[ADDR_MAX];
}PeoInfo;



//初始化通讯录

void InitContact(contact* con);

//添加通讯录数据

void AddContact(contact* con);

//删除通讯录数据

void DelContact(contact* con);

//展示通讯录数据

void ShowContact(contact* con);

//查找通讯录数据

void FindContact(contact* con);

//修改通讯录数据

void ModifyContact(contact* con);

//销毁通讯录数据

void DestroyContact(contact* con);

然后就是通讯录功能的实现

创建contact.c文件,用于功能的实现。

初始化跟销毁直接引用顺序表中已经实现的功能即可。

//初始化通讯录

void InitContact(contact* con)
{
    SLInit(con);
}

//销毁通讯录数据

void DestroyContact(contact* con)
{
    SLDestroy(con);
}

添加联系人操作,可以先定义 PeoInfo brr数组,用来储存数据,然后用SLPushFront(con, brr)接收,实现插入。

//添加通讯录数据

void AddContact(contact* con)
{
    assert(con);
    PeoInfo brr;
    printf("请输入姓名:\n");
    scanf("%s", brr.name);
    printf("请输入性别:\n");
    scanf("%s", brr.sex);
    printf("请输入年龄:\n");
    scanf("%d", &brr.age);
    printf("请输入电话:\n");
    scanf("%s", brr.tel);
    printf("请输入地址:\n");
    scanf("%s", brr.addr);

    SLPushFront(con, brr);
}
 

删除联系人操作,需要先找到联系人,然后使用顺序表SL.c的功能 SLErase(con, ret),任意位置删除,进行删除操作。一般查找是用联系人的名字查找,先创建一个FindContactname查找联系人,返回值就是con->arr数组中位置。找到后使用 SLErase(con, ret)函数进行删除操作。最后打印一下删除成功,提示程序员删除操作已执行。

int FindContactname(contact* con, char name[])
{
    int i = 0;
    for (i = 0; i < con->size; i++)
    {
        if (strcmp(name, con->arr[i].name) == 0)
        {
            return i;
        }
    }
    return -1;
}
//删除通讯录数据
void DelContact(contact* con)
{
    printf("请输入联系人名字:\n");
    char name[NAME_MAX];
    scanf("%s", name);
    int ret = FindContactname(con, name);
    if (ret < 0)
    {
        printf("该联系人不存在\n");
        return 1;
    }
    SLErase(con, ret);
    printf("删除成功\n");
}

查找通讯录也是用到FindContactname函数。

//查找通讯录数据

void FindContact(contact* con)
{
    char Name[NAME_MAX];
    printf("请输入你要查找的名字:\n");
    scanf("%s", Name);
    int ret = FindContactname(con, Name);
    if (ret < 0)
    {
        printf("查无此人\n");
    }
    else
    {
        printf("找到了\n");
        printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s \n",
        con->arr[ret].name, con->arr[ret].sex, con->arr[ret].age, con->arr[ret].tel, con->arr[ret].addr);
    }

}
 

展示通讯录就很好实现了,只需要挨个打印即可。

//展示通讯录数据

void ShowContact(contact* con)
{
    int i = 0;
    for (i = 0; i < con->size; i++)
    {
        printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s \n",
        con->arr[i].name, con->arr[i].sex, con->arr[i].age, con->arr[i].tel, con->arr[i].addr);
    }
}
 

一下是contact.c的代码

#include "SL.h"

int FindContactname(contact* con, char name[])
{
	int i = 0;
	for (i = 0; i < con->size; i++)
	{
		if (strcmp(name, con->arr[i].name) == 0)
		{
			return i;
		}
	}
	return -1;
}


//初始化通讯录

void InitContact(contact* con)
{
	SLInit(con);
}

//添加通讯录数据

void AddContact(contact* con)
{
	assert(con);
	PeoInfo brr;
	printf("请输入姓名:\n");
	scanf("%s", brr.name);
	printf("请输入性别:\n");
	scanf("%s", brr.sex);
	printf("请输入年龄:\n");
	scanf("%d", &brr.age);
	printf("请输入电话:\n");
	scanf("%s", brr.tel);
	printf("请输入地址:\n");
	scanf("%s", brr.addr);

	SLPushFront(con, brr);
}

//删除通讯录数据
void DelContact(contact* con)
{
	printf("请输入联系人名字:\n");
	char name[NAME_MAX];
	scanf("%s", name);
	int ret = FindContactname(con, name);
	if (ret < 0)
	{
		printf("该联系人不存在\n");
		return 1;
	}
	SLErase(con, ret);
	printf("删除成功\n");
}

//展示通讯录数据

void ShowContact(contact* con)
{
	int i = 0;
	for (i = 0; i < con->size; i++)
	{
		printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s \n",
		con->arr[i].name, con->arr[i].sex, con->arr[i].age, con->arr[i].tel, con->arr[i].addr);
	}
}


//查找通讯录数据

void FindContact(contact* con)
{
	char Name[NAME_MAX];
	printf("请输入你要查找的名字:\n");
	scanf("%s", Name);
	int ret = FindContactname(con, Name);
	if (ret < 0)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("找到了\n");
		printf("姓名:%s  性别:%s  年龄:%d  电话:%s  地址:%s \n",
		con->arr[ret].name, con->arr[ret].sex, con->arr[ret].age, con->arr[ret].tel, con->arr[ret].addr);
	}

}

//修改通讯录数据

void ModifyContact(contact* con)
{
	char Name[NAME_MAX];
	printf("请输入你要修改的名字:\n");
	scanf("%s", Name);
	int ret = FindContactname(con, Name);
	if (ret < 0)
	{
		printf("查无此人\n");
	}
	else
	{
		PeoInfo brr;
		printf("请输入姓名:\n");
		scanf("%s", brr.name);
		printf("请输入性别:\n");
		scanf("%s", brr.sex);
		printf("请输入年龄:\n");
		scanf("%d", &brr.age);
		printf("请输入电话:\n");
		scanf("%s", brr.tel);
		printf("请输入地址:\n");
		scanf("%s", brr.addr);

		SLInsert(con, ret, brr);
		printf("修改成功\n");
	}
}

//销毁通讯录数据

void DestroyContact(contact* con)
{
	SLDestroy(con);
}

最后就是在主函数使用了

这里先创建了一个菜单,用来显示操作。


void menu()
{
    printf("***************通讯录***************\n");
    printf("*****1.增加联系人  2.删除联系人*****\n");
    printf("*****3.查找联系人  4.修改联系人*****\n");
    printf("*****5.查看通讯录  0.  退  出  *****\n");
    printf("************************************\n");
}
 

一下是test.c代码实现


#include "SL.h"


void menu()
{
	printf("***************通讯录***************\n");
	printf("*****1.增加联系人  2.删除联系人*****\n");
	printf("*****3.查找联系人  4.修改联系人*****\n");
	printf("*****5.查看通讯录  0.  退  出  *****\n");
	printf("************************************\n");
}

int main()
{

	contact con;
	InitContact(&con);
	int p = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &p);
		printf("\n");
		switch (p)
		{
		case 1:
			printf("增加联系人:\n");
			AddContact(&con);
			break;
		case 2:
			printf("删除联系人:\n");
			DelContact(&con);
			break;
		case 3:
			printf("查找联系人:\n");
			char name[NAME_MAX];
			printf("请输入联系人名字:\n");
			FindContact(&con,name);
			break;
		case 4:
			printf("修改联系人:\n");
			ModifyContact(&con);
			break;
		case 5:
			printf("查看通讯录:\n");
			ShowContact(&con);
			break;
		case 0:
			printf("退出成功");
			break;
		default:
			printf("不存在此项操作! 请重新输入\n");
		}

	} while (p);

	DestroyContact(&con);
	return 0;
}

相关推荐

  1. 实现通讯录顺序

    2024-04-13 08:02:06       10 阅读
  2. 顺序应用——通讯录实现

    2024-04-13 08:02:06       16 阅读
  3. 数据结构——顺序实现通讯录

    2024-04-13 08:02:06       13 阅读
  4. 【数据结构】利用顺序实现通讯录

    2024-04-13 08:02:06       21 阅读
  5. 数据结构 - 顺序实现通讯录

    2024-04-13 08:02:06       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 08:02:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 08:02:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 08:02:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 08:02:06       18 阅读

热门阅读

  1. 漫谈:C语言 C++ 所有编程语言 =和==的麻烦

    2024-04-13 08:02:06       17 阅读
  2. day16 初始面向对象

    2024-04-13 08:02:06       12 阅读
  3. 设计模式: 行为型之访问者模式(22)

    2024-04-13 08:02:06       19 阅读
  4. 2024软考系统架构师-案例题分享2(带答案)

    2024-04-13 08:02:06       157 阅读
  5. 网络安全之反弹Shell

    2024-04-13 08:02:06       22 阅读
  6. HiveSQL基础Day04

    2024-04-13 08:02:06       13 阅读
  7. SQL Server的索引选择

    2024-04-13 08:02:06       13 阅读