【C语言】通讯录实现(上)

【C语言】通讯录实现(上)

1.通讯录功能: 实现增、删、查、改等基本功能

2.实现步骤:(1)定义一个结构体来存储联系人的基本信息例如:名字、电话、性别等;代码语言:javascript复制typedef struct PeoInfo

{

char name[MAX_NAME];

char sex[MAX_SEX];

char tele[MAX_TELE];

char addr[MAX_ADDR];

int age;

}PeoInfo;(2)定义另一个结构体来封装100个联系人及其下标;代码语言:javascript复制typedef struct Contact

{

PeoInfo data[MAX];//创建一个PeoInfo数组来储存MAX个联系人,这里的MAX使用了宏定义为100

int sz;//用来记录联系人的下标以便进行查找

}Contact;(3)初始化通讯录;代码语言:javascript复制void InitContact(Contact* pc) //传递通讯录的指针来修改通讯录

{

memset(pc->data, 0, sizeof(pc->data));//使用memset库函数来初始化

pc->sz = 0;

}(4)创建菜单栏;代码语言:javascript复制void menu()

{

printf("*******Contact******\n");

printf("*** 1.ADD 2.DEL ***\n");

printf("***** 3.SEARCH *****\n");

printf("***** 4.MODIFY *****\n");

printf("** 5.SHOE 6.SORT **\n");

printf("****** 0.EXIT ******\n");

}//后面通过case语句来进行你想要的操作(5)构造各个功能的函数;①添加联系人:代码语言:javascript复制void AddContact(Contact* pc)

{

assert(pc);

if (pc->sz == MAX)

{

printf("联系人已满\n");

return;

}

printf("请输入要添加的联系人名字、性别、年龄、电话、地址:\n");

scanf("%s%s%d%s%s",

pc->data[pc->sz].name, pc->data[pc->sz].sex,

&pc->data[pc->sz].age, pc->data[pc->sz].tele,

pc->data[pc->sz].addr);

printf("您已经成功添加%s\n", pc->data[pc->sz].name);

pc->sz++;//sz用来记录已经存在联系人个数,加一个联系人sz就加一,最开始sz初始化为0

return;

}②删除联系人:代码语言:javascript复制int Search_by_name(const Contact* pc)//查找是否存在你想找的联系人

{

char name[MAX_NAME] = { 0 };

scanf("%s", name);

int i = 0;

for (i = 0; i < pc->sz; i++)

{

if (strcmp(pc->data[i].name, name) == 0)

{

return i;//找到了返回下标

}

}

return -1;//没找到返回-1

}

void DelContact(Contact* pc)//删除找到的联系人

{

assert(pc);//assert断言来判断是否为空指针,详情可见主页“assert断言与野指针”

if (pc->sz == 0)

{

printf("您还没有加联系人哦~快选择1去添加吧~\n");

return;

}

printf("请输入要删除的联系人的名字:\n");

int flag = Search_by_name(pc);//找是否存在联系人

if (flag == -1)

{

printf("没有找到该联系人哦~\n");

return;

}

int j = 0;

for (j = flag; j < pc->sz - 1; j++)

{

pc->data[j] = pc->data[j + 1];//将后面的值覆盖你想删除的联系人

if (strcmp(pc->data[j+1].name,0)==0)//如果后面值为0则不用再覆盖

{

break;

}

}

printf("您已经成功删除该联系人\n");

pc->sz--;//删除后sz要减一

return;

}③查找联系人:代码语言:javascript复制int Search_by_name(const Contact* pc)//查找是否存在你想找的联系人

{

char name[MAX_NAME] = { 0 };

scanf("%s", name);

int i = 0;

for (i = 0; i < pc->sz; i++)

{

if (strcmp(pc->data[i].name, name) == 0)

{

return i;//找到了返回下标

}

}

return -1;//没找到返回-1

}

void SearchContact(const Contact* pc)

{

printf("请输入要查找的联系人名字:");

int i = Search_by_name(pc);

if (i == -1)

{

printf("没有找到该联系人哦~\n");

return;

}

else

{

printf("%-10s\t%-5s\t%-5d\t%-15s\t%-30s\t\n",

pc->data[i].name, pc->data[i].sex,

pc->data[i].age, pc->data[i].tele,

pc->data[i].addr);//打印查找到的联系人

}

return;

}...更多功能可关注等待后续或者私信我哦~

3.完整代码实现①contact.h--所包含的头文件以及一些定义代码语言:javascript复制//定义的的头文件contact.h

#pragma once

#include

#include

#include

#define MAX 100

#define MAX_NAME 20

#define MAX_SEX 5

#define MAX_TELE 12

#define MAX_ADDR 30

enum OPTION//用枚举来定义变量

{

EXIT,//0

ADD,//1

DEL,//2...

SEARCH,

MODIFY,

SHOW,

SORT

};

//声明类型

typedef struct PeoInfo //创建一个结构体来储存联系人相关信息

{

char name[MAX_NAME];

char sex[MAX_SEX];

char tele[MAX_TELE];

char addr[MAX_ADDR];

int age;

}PeoInfo;

//通讯录

typedef struct Contact

{

PeoInfo data[100];//创建一个PeoInfo数组来储存MAX个联系人,这里的MAX使用了宏定义为100

int sz;//用来记录联系人的下标以便进行查找

}Contact;

//函数声明

void InitContact(Contact*pc);

void AddContact(Contact* pc);

void ShowContact(const Contact* pc);

void DelContact(Contact* pc);

void SearchContact(const Contact* pc);②contact.c文件--基本功能实现的函数代码 代码语言:javascript复制//contact函数实现contact.c源文件

#define _CRT_SECURE_NO_WARNINGS 1

#include"contact.h"

int Search_by_name(const Contact* pc)//查找函数

{

char name[MAX_NAME] = { 0 };

printf("请输入联系人名字:");

scanf("%s", name);

int i = 0;

for (i = 0; i < pc->sz; i++)

{

if (strcmp(pc->data[i].name, name) == 0)

{

return i;

}

}

return -1;

}

void InitContact(Contact* pc) //初始化通讯录函数

{

memset(pc->data, 0, sizeof(pc->data));

pc->sz = 0;

}

void AddContact(Contact* pc)//增加联系人

{

assert(pc);

if (pc->sz == MAX)

{

printf("联系人已满\n");

return;

}

printf("请输入要添加的联系人名字、性别、年龄、电话、地址:\n");

scanf("%s%s%d%s%s",

pc->data[pc->sz].name, pc->data[pc->sz].sex,

&pc->data[pc->sz].age, pc->data[pc->sz].tele,

pc->data[pc->sz].addr);

printf("您已经成功添加%s\n", pc->data[pc->sz].name);

pc->sz++;

return;

}

void ShowContact(const Contact* pc)//显示联系人

{

assert(pc);

if (pc->sz == 0)

{

printf("您还未添加联系人哦~快选择1去添加吧~\n");

return ;

}

int i = 0;

printf("%-10s\t%-5s\t%-5s\t%-15s\t%-30s\t\n", "名字", "性别", "年龄", "电话", "住址");

for (i = 0; i < pc->sz; i++)

{

printf("%-10s\t%-5s\t%-5d\t%-15s\t%-30s\t\n",

pc->data[i].name, pc->data[i].sex,

pc->data[i].age, pc->data[i].tele,

pc->data[i].addr);

}

return;

}

void DelContact(Contact* pc)//删除联系人

{

assert(pc);

if (pc->sz == 0)

{

printf("您还没有加联系人哦~快选择1去添加吧~\n");

return;

}

printf("请输入要删除的联系人的名字:\n");

int flag = Search_by_name(pc);

if (flag == -1)

{

printf("没有找到该联系人哦~\n");

return;

}

int j = 0;

for (j = flag; j < pc->sz - 1; j++)

{

pc->data[j] = pc->data[j + 1];

if (strcmp(pc->data[j+1].name,0)==0)

{

break;

}

}

printf("您已经成功删除该联系人\n");

pc->sz--;

return;

}

void SearchContact(const Contact* pc)//查找联系人并打印

{

printf("请输入要查找的联系人名字:");

int i = Search_by_name(pc);

if (i == -1)

{

printf("没有找到该联系人哦~\n");

return;

}

else

{

printf("%-10s\t%-5s\t%-5d\t%-15s\t%-30s\t\n",

pc->data[i].name, pc->data[i].sex,

pc->data[i].age, pc->data[i].tele,

pc->data[i].addr);

}

return;

}③test.c文件--整个通讯录的流程框架代码语言:javascript复制//test.c文件--流程

#define _CRT_SECURE_NO_WARNINGS 1

#include"contact.h"

void menu()//菜单

{

printf("*******Contact******\n");

printf("*** 1.ADD 2.DEL ***\n");

printf("***** 3.SEARCH *****\n");

printf("***** 4.MODIFY *****\n");

printf("** 5.SHOE 6.SORT **\n");

printf("****** 0.EXIT ******\n");

}

int main()//主函数

{

int sec = 1;

PeoInfo data[100];//通讯录

Contact con;

InitContact(&con);//初始化通讯录

while (sec)

{

menu();

scanf("%d", &sec);

switch (sec)//选择不同的功能

{

case EXIT://退出

printf("您已退出\n");

break;

case ADD://加

AddContact(&con);

break;

case DEL://删

DelContact(&con);

break;

case SEARCH://查

SearchContact(&con);

break;

case MODIFY://改

break;

case SHOW://显示

ShowContact(&con);

break;

case SORT://分类

break;

default:

printf("选择错误,请重新输入\n");

}

printf("\n");

}

return 0;

}以上就是完整代码啦,后续将有更多的C语言代码分享哦~点个关注再走吧~

✧ 相关推荐 ✧

联通彩铃DIY教程,定制专属铃声,轻松设置!
365bet体育官网网址

联通彩铃DIY教程,定制专属铃声,轻松设置!

📅 08-28 👁️ 323
张信哲歌曲非常火的十首歌
Microsoft 365安卓

张信哲歌曲非常火的十首歌

📅 01-17 👁️ 1324
为什么反春野樱
365游戏盒子

为什么反春野樱

📅 06-20 👁️ 6594