当前位置: 首页 > news >正文

数据结构(二)顺序表应用:通讯录

功能要求

 能够保存联系人信息:名字、性别、年龄、电话、地址等

增加联系人信息

删除指定联系人

查找制定联系人

修改指定联系人

显示联系人信息

代码实现

头文件

seqlist.h

要包含上“contact.h”,否则不能使用contact.h里定义的好的结构

#include"contact.h"

修改数据类型

//typedef int SLDataType;
typedef peoInfo SLDataType;
//方便后续类型的替换
//给int取别名,方便修改数组存储的数据类型
//例如将int类型修改为char类型,在.c文件中的int都要一一替换成chartypedef struct SeqList
{SLDataType* arr;int size;//有效数据个数int capacity;//空间大小   
}SL;

contact.h
定义联系人结构体
#define NAME_MAX 20
#define GENDER_MAX 10
#define TEL_MAX 20
#define ADDR_MAX 100
//定义联系人数据
// 姓名 性别 年龄 电话 地址
typedef struct personInfo 
{char name[NAME_MAX];char gender[GENDER_MAX];int age;char tel[TEL_MAX];char addr[ADDR_MAX];
}peoInfo;
前置声明

contact.h文件中需要用到seqlist中定义的结构体,但头文件不能互相包含,所以需要前置声明

struct SeqList;
//前置声明,不能用SL,要用最开始的名字
//SL是在seqlist.h文件定义好结构体之后取的别名,在这里只是前置声明不能直接使用
typedef struct SeqList  Contact;
//给顺序表改个名,方便区分
通讯录的相关方法
//通讯录的相关方法
//通讯录的初始化
void ContactInit(Contact* con);
//通讯录的销毁
void ContactDesTroy(Contact* con);
//通讯录添加数据
void ContactAdd(Contact* con);
//通讯录删除数据
void ContactDel(Contact* con);
//通讯录的修改
void ContactModify(Contact* con);
//通讯录的查找
void ContactFind(Contact* con);
//展示通讯录数据
void ContactShow(Contact* con);

源文件

seqlist.c

顺序表的查找要注释掉

结构体和结构体的判断不能直接 ==

//查找
//int SLFind(SL* ps, SLDataType x)
//{
//	assert(ps);
//	for (int i = 0; i < ps->size; i++)
//	{
//		if (  ps->arr[i] == x)
//		{
//			return i;
//		}
//	}
//	return -1;
//}

contact.c
#include "Contact.h"
#include "SeqList.h"
//通讯录的初始化
void ContactInit(Contact* con)
{//实际上是顺序表的初始化SLInit(con);
}
//通讯录的销毁
void ContactDesTroy(Contact* con)
{SLDestroy(con);
}
//通讯录添加数据
void ContactAdd(Contact* con)
{//peoInfo info;printf("请输入要添加的联系人姓名:\n");scanf("%s", info.name);printf("请输入要添加的联系人性别:\n");scanf("%s", info.gender);printf("请输入要添加的联系人年龄:\n");scanf("%d", &info.age);printf("请输入要添加的联系人电话:\n");scanf("%s", info.tel);printf("请输入要添加的联系人住址:\n");scanf("%s", info.addr);//往通讯录里插入数据SLPushBack(con, info);
}int FindByName(Contact* con, char name[])
{for (int i = 0; i < con->size; i++){if (0 == strcmp(con->arr[i].name, name)){//找到了return i;}}//没找到return -1;
}
//通讯录删除数据
void ContactDel(Contact* con)
{//要删除的数据必须要存在//查找char name[NAME_MAX];printf("请输入要删除的联系人姓名:\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("要删除的联系人不存在!\n");return;}//要知道要删除的联系人对应的下标SLErase(con, find);printf("删除成功!\n");
}
//通讯录的修改
void ContactModify(Contact* con)
{//要修改的联系人数据存在char name[NAME_MAX];printf("请输入你要修改的联系人姓名\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("要修改的联系人数据不存在!\n");return;}//直接修改peoInfo info;printf("请输入新的姓名:\n");scanf("%s", con->arr[find].name);printf("请输入新的性别:\n");scanf("%s", con->arr[find].gender);printf("请输入新的年龄:\n");scanf("%d", &con->arr[find].age);printf("请输入新的电话:\n");scanf("%s", con->arr[find].tel);printf("请输入新的住址:\n");scanf("%s", con->arr[find].addr);printf("修改成功!\n");
}
//通讯录的查找
void ContactFind(Contact* con)
{char name[NAME_MAX];printf("请输入要查找的联系人姓名\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("要查找的联系人数据不存在!\n");return;}printf("查找成功!\n");printf("%s %s %s %s %s\n", "姓名" ,"性别", "年龄", "电话", "地址");printf("%3s %3s %3d %3s %3s\n",con->arr[find].name,con->arr[find].gender,con->arr[find].age,con->arr[find].tel,con->arr[find].addr);
}//展示通讯录数据
void ContactShow(Contact* con)
{//表头:姓名 性别 年龄 电话 地址printf("%s %s %s %s %s\n", "姓名" ,"性别", "年龄" ,"电话" ,"地址");//遍历通讯录,按照格式打印每个联系人数据for (int i = 0; i < con->size; i++){printf("%3s %3s %3d %3s %3s\n",//手动调整格式con->arr[i].name,con->arr[i].gender,con->arr[i].age,con->arr[i].tel,con->arr[i].addr);}
}
test.c
#include"SeqList.h"
void menu()
{printf("*****************通讯录*****************\n");printf("******1.增加联系人  2.删除联系人********\n");printf("******3.修改联系人  4.查找联系人********\n");printf("******5.展示联系人  0.退出通讯录********\n");printf("****************************************\n");
}
int main()
{int op = -1;Contact con;ContactInit(&con);do {menu();printf("请选择你的操作:\n");scanf("%d", &op);//根据不同的op执行不同的操作switch (op){case 1:ContactAdd(&con);break;case 2:ContactDel(&con);break;case 3:ContactModify(&con);break;case 4:ContactFind(&con);break;case 5:ContactShow(&con);break;case 0:printf("退出通讯录...\n");break;default:printf("输入错误,请重新输入\n");break;}} while (op != 0);ContactDesTroy(&con);return 0;
}


http://www.mrgr.cn/news/49497.html

相关文章:

  • Gin框架教程02:AsciiJSON
  • 13.梯度下降法的代码实战——举足轻重的模型优化算法
  • 【JavaScript】JavaScript开篇基础(3)
  • Mac 备忘录妙用
  • TensorRT-LLM七日谈 Day2
  • 数据结构(线性表)
  • 在深圳宝安石岩路过一座关帝宫
  • HTML+CSS+JS实现多张图片点击放大查看的功能
  • 使用docker搭建lnmp运行WordPress
  • 【Linux】Linux下进程Vs线程
  • 【conda】创建、激活、删除虚拟环境
  • 【数据结构】关于环形队列库的改进办法
  • MySQL数据库管理
  • SQL基础练习题一
  • 【踩坑随笔】Failed to build pycocotools
  • k8s-资源管理、实战入门
  • 大数据治理:构建数据驱动的智能决策体系
  • 后端参数校验方式
  • vue的动态组件 keep-alive
  • Informer: Beyond Efficient Transformer for Long SequenceTime-Series Forecasting