欢迎各位点赞👍 评论**✍收藏⭐**
目录
[1. 功能实现](#1. 功能实现)
[2. 前置准备](#2. 前置准备)
[2.1 文件调整](#2.1 文件调整)
[2.2 定义通讯录结构](#2.2 定义通讯录结构)
[2.3 更改自定义类型和更改名字](#2.3 更改自定义类型和更改名字)
[3. 代码实现](#3. 代码实现)
[3.1 通讯录初始化和销毁](#3.1 通讯录初始化和销毁)
[3.1.1 初始化](#3.1.1 初始化)
[3.1.2 销毁](#3.1.2 销毁)
[3.2 通讯录名字查找和打印](#3.2 通讯录名字查找和打印)
[3.2.1 通讯录名字查找](#3.2.1 通讯录名字查找)
[3.2.2 通讯录打印](#3.2.2 通讯录打印)
[3.3 通讯录添加联系人和删除](#3.3 通讯录添加联系人和删除)
[3.3.1 添加联系人](#3.3.1 添加联系人)
[3.3.2 通讯录删除联系人](#3.3.2 通讯录删除联系人)
[3.4 通讯录修改和查找联系人](#3.4 通讯录修改和查找联系人)
[3.4.1 通讯录修改](#3.4.1 通讯录修改)
[3.4.2 通讯录查找联系人](#3.4.2 通讯录查找联系人)
[3.5 通讯录菜单](#3.5 通讯录菜单)
[4. 全部码源](#4. 全部码源)
[4.1 文件](#4.1 文件)
[4.2 文件](#4.2 文件)
[4.3 文件](#4.3 文件)
[4.4 文件](#4.4 文件)
[4.5 文件](#4.5 文件)
[5. 运行结果](#5. 运行结果)
1. 功能实现
- 至少能够存储100个⼈的通讯信息
- 能够保存⽤⼾信息:名字、性别、年龄、电话、地址等
- 增加联系⼈信息
- 删除指定联系⼈
- 查找制定联系⼈
- 修改指定联系⼈
- 显⽰联系⼈信息
2. 前置准备
基于上一篇博客-->点击这里(顺序表专题)
2.1 文件调整
我们在这里有增添两个文件
<Contact.h> ----> 通讯录结构声明
<Contact.c> ----> 通讯录函数实现
2.2 定义通讯录结构
cs
#define NAME_MAX 20
#define GENDER_MAX 20
#define TEL_MAX 20
#define ADDR_MAX 20
//定义通讯录结构
//姓名 性别 年龄 电话 住址
typedef struct PersonInfo
{
char name[NAME_MAX];
char gender[GENDER_MAX];
int age;
char tel[TEL_MAX];
char addr[ADDR_MAX];
}PeoInfo;
2.3 更改自定义类型和更改名字
cs
typedef PeoInfo SLDataType;
cs
typedef struct SeqList Contact;
3. 代码实现
3.1 通讯录初始化和销毁
3.1.1 初始化
cs
//通讯录初始化
void ContactInit(Contact* con);
cs
//通讯录初始化实现
void ContactInit(Contact* con)
{
SLInit(con);
}
3.1.2 销毁
cs
//通讯录的销毁
void ContactDesTroy(Contact* con);
cs
//通讯录的销毁实现
void ContactDesTroy(Contact* con)
{
SLDestroy(con);
}
3.2 通讯录名字查找和打印
3.2.1 通讯录名字查找
cs
//通讯录名字查找
int Findbyname(Contact* con, char name[]);
cs
//通讯录名字查找实现
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;
}
3.2.2 通讯录打印
cs
//通讯录打印
void ContactShow(Contact* con);
cs
//通讯录打印实现
void ContactShow(Contact* con)
{
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "住址");
for (int i = 0; i < con->size; i++)
{
printf("%s %s %d %s %s\n", con->arr[i].name,
con->arr[i].gender,
con->arr[i].age,
con->arr[i].tel,
con->arr[i].addr );
}
}
3.3 通讯录添加联系人和删除
3.3.1 添加联系人
cs
//通讯录添加
void ContactAdd(Contact* con);
cs
//通讯录添加实现
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); //插入通讯录中
}
3.3.2 通讯录删除联系人
cs
//通讯录删除数据实现
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");
}
3.4 通讯录修改和查找联系人
3.4.1 通讯录修改
cs
//通讯录的修改
void ContactModify(Contact* con);
cs
//通讯录的修改
void ContactModify(Contact* con)
{
char name[NAME_MAX];
printf("请输入要修改的用户姓名:\n");
scanf("%s", name);
int find= Findbyname(con, name);
if (find < 0)
{
printf("要修改的联系人数据不存在!\n");
return;
}
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");
}
3.4.2 通讯录查找联系人
cs
//通讯录查找
void ContactFind(Contact* con);
cs
//通讯录查找
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("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "住址");
printf("%s %s %d %s %s\n", con->arr[find].name,
con->arr[find].gender,
con->arr[find].age,
con->arr[find].tel,
con->arr[find].addr);
}
3.5 通讯录菜单
cs
void menu()
{
printf("******************通讯录******************\n");
printf("*******1.增加联系人 2.删除联系人********\n");
printf("*******3.修改联系人 4.查找联系人********\n");
printf("*******5.展示联系人 0. 退出 *********\n");
printf("******************************************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择你的操作:\n");
scanf("%d", &input);
switch (input)
{
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 (input);
ContactDesTroy(&con);
return 0;
}
4. 全部码源
有5个文件
4.1 <SeqList.h>文件
<SeqList.h>文件
cs
#pragma once
#include "Contact.h"
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS 1
//定义类型
typedef PeoInfo SLDataType;
//定义动态顺序表结构
typedef struct SeqList
{
SLDataType* arr; //指针
int size; //有效个数
int capacity; //空间容量
}SL;
//动态顺序表初始化
void SLInit(SL* ps);
//动态顺序表的销毁
void SLDestroy(SL* ps);
//判断容量空间是否足够
void SLCheckCapacity(SL* ps);
//动态顺序表插入(尾部)
void SLPushBack(SL* ps,SLDataType x);
//动态顺序表插入(头部)
void SLPushFront(SL* ps);
//指定位置插入(之前)
void SLInsret(SL* ps, int pos, SLDataType x); //pos-->代表数组的下标
//打印顺序表
void SLPrint(SL s);
//动态顺序表删除(尾部)
void SLPopBack(SL* ps);
//动态顺序表删除(头部)
void SLPopFront(SL* ps);
//指定位置删除
void SLErase(SL* ps, int pos);
4.2 <SeqList.c>文件
<SeqList.c>文件
cs
#include "SeqList.h"
//动态顺序表初始化的实现
void SLInit(SL* ps)
{
ps->arr = NULL;
ps->size = ps->capacity = 0;
}
//动态顺序表销毁的实现
void SLDestroy(SL* ps)
{
assert(ps);
free(ps->arr);
ps->arr = NULL;
ps->size = ps->capacity = 0;
}
//判断容量空间是否足够
void SLCheckCapacity(SL* ps)
{
if (ps->capacity == ps->size)
{
int newcapacity = (ps->capacity == 0 ? 4 : ps->capacity * 2);
SLDataType* tmp = (SLDataType*)realloc(ps->arr, newcapacity * sizeof(SLDataType));
assert(tmp);
ps->arr = tmp;
ps->capacity = newcapacity;
}
}
//动态顺序表插入(尾部)实现
void SLPushBack(SL* ps,SLDataType x)
{
assert(ps);
SLCheckCapacity(ps);
ps->arr[ps->size] = x;
ps->size++;
}
//动态顺序表插入(头部)实现
void SLPushFront(SL* ps,SLDataType x)
{
assert(ps);
SLCheckCapacity(ps);
for (int i = ps->size;i>0; i--)
{
ps->arr[i] = ps->arr[i-1];
}
ps->arr[0] = x;
ps->size++;
}
//指定位置插入(之前)实现
void SLInsret(SL* ps, int pos, SLDataType x)
{
assert(ps);
assert(pos >= 0 && pos <= ps->size);
for (int i = ps->size;i>pos; i--)
{
ps->arr[i] = ps->arr[i - 1];
}
ps->arr[pos] = x;
ps->size++;
}
打印顺序表实现
//void SLPrint(SL s)
//{
// for (int i = 0; i < s.size; i++)
// {
//
// printf("%d ", s.arr[i]);
// }
// printf("\n");
//}
//动态顺序表删除(尾部)实现
void SLPopBack(SL* ps)
{
ps->size--;
}
//动态顺序表删除(头部)实现
void SLPopFront(SL* ps)
{
assert(ps);
for (int i = 0;i<ps->size-1; i++)
{
ps->arr[i] = ps->arr[i + 1];
}
ps->size--;
}
//指定位置删除实现
void SLErase(SL* ps, int pos)
{
assert(ps);
assert(pos >= 0 && pos < ps->size);
for (int i = pos;i<ps->size-1; i++)
{
ps->arr[i] = ps->arr[i + 1];
}
ps->size--;
}
4.3 <Contact.h>文件
<Contact.h>文件
cs
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define NAME_MAX 20
#define GENDER_MAX 20
#define TEL_MAX 20
#define ADDR_MAX 20
//定义通讯录结构
//姓名 性别 年龄 电话 住址
typedef struct PersonInfo
{
char name[NAME_MAX];
char gender[GENDER_MAX];
int age;
char tel[TEL_MAX];
char addr[ADDR_MAX];
}PeoInfo;
typedef struct SeqList Contact;
//通讯录初始化
void ContactInit(Contact* con);
//通讯录的销毁
void ContactDesTroy(Contact* con);
//通讯录添加
void ContactAdd(Contact* con);
//通讯录打印
void ContactShow(Contact* con);
//通讯录名字查找
int Findbyname(Contact* con, char name[]);
//通讯录删除数据
void ContactDel(Contact* con);
//通讯录的修改
void ContactModify(Contact* con);
//通讯录查找
void ContactFind(Contact* con);
4.4 <Contact.c>文件
<Contact.c>文件
cs
#include "Contact.h"
#include "SeqList.h"
#define _CRT_SECURE_NO_WARNINGS 1
//通讯录初始化实现
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);
}
//通讯录打印实现
void ContactShow(Contact* con)
{
printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "住址");
for (int i = 0; i < con->size; i++)
{
printf("%s %s %d %s %s\n", con->arr[i].name,
con->arr[i].gender,
con->arr[i].age,
con->arr[i].tel,
con->arr[i].addr );
}
}
//通讯录名字查找实现
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;
}
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("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "住址");
printf("%s %s %d %s %s\n", con->arr[find].name,
con->arr[find].gender,
con->arr[find].age,
con->arr[find].tel,
con->arr[find].addr);
}
4.5 <test.c>文件
<test_测试通讯录_.c>文件
cs
#include "SeqList.h"
#include "Contact.h"
#define _CRT_SECURE_NO_WARNINGS 1
Contact con;
void ContactCheck01()
{
Contact con;
//初始化
ContactInit(&con);
//添加
ContactAdd(&con);
ContactAdd(&con);
//删除
ContactDel(&con);
//修改
ContactModify(&con);
//查找
ContactFind(&con);
//打印
ContactShow(&con);
//销毁
ContactDesTroy(&con);
}
void menu()
{
printf("******************通讯录******************\n");
printf("*******1.增加联系人 2.删除联系人********\n");
printf("*******3.修改联系人 4.查找联系人********\n");
printf("*******5.展示联系人 0. 退出 *********\n");
printf("******************************************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择你的操作:\n");
scanf("%d", &input);
switch (input)
{
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 (input);
ContactDesTroy(&con);
return 0;
}
5. 运行结果
添加
删除
打印
6.小结
以上就是关于通讯录的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!