当前位置:首页 » 《资源分享》 » 正文

C语言小项目------通讯录实现_lingxu6的博客

16 人参与  2022年01月08日 15:07  分类 : 《资源分享》  评论

点击全文阅读


今天我们来实现一个练习性质的小项目,通讯录。通讯录我们大家都不会陌生。它是我们手机上的一种具有储存查找功能的信息集合软件。

今天我们要实现的通讯录主要有以下几个功能:1.添加联系人信息(姓名,性别,年龄,电话,地址)2.修改联系人信息。3.查找联系人。4.打印显示联系人列表。5.删除联系人。

下面我们就开始实现它:

1.项目主体的创建:函数主体使用do---while结构,首先创建一个输入变量input,循环进入条件为while(input),那么每次循环开始都可以根据用户的选择来进入不同的功能模块,而用户选择0的时候我们就可以退出循环,从而结束对通讯录的操作。结合我们想要实现的功能,while循环内嵌套switch从而实现各个功能的分支。

以上为函数主体的创建。

while循环内嵌套使用switch。

值得注意的是,一般情况下我们使用switch语句的时候,内部分支的case一般都是用数字划分,而这一次我们直接使用自定义字符,下面是实现方法:

我们首先创建一个枚举变量:

 

 我们将我们所期望的代号在枚举中一一列举,从上至下,首字符代表的是0。

创建完成以后我们就开以直接在switch中使用了。相较于之前只用数字,这样会使代码拥有更强的可读性,易于理解。

2.信息储存变量创建

我们创建一个结构体,以便存放成员的个人信息:

其名字,性别,电话以及家庭住址都为char类型变量,为了方便我们修改其开辟空间的大小,我们创建他们对应数组输入的元素个数全部使用宏定义:

创建完储存成员信息的结构体,我们的通讯录不可能只储存一个人的信息,那么我们就需要创建第二个结构体,该结构体包括两个元素,第一个是一个结构体数组,用来储存我们第一次创建的成员信息结构体,那么通过这个数组我们就可以将所有的成员信息储存在同一个类型的数组之中方便我们后期读取调用。

数组元素个数同样使用宏定义:

该结构体的第二个成员为一个整形sz,用来统计我们储存的通讯录成员的个数。

 3.结构体主函数调用和初始化

在创建完两个结构体后,我们要在主函数调用它们并对他们进行初始化:

创建结构体struct contact con,其为我们创建的第一个结构体类型,用来存放成员信息,下面的就是初始化函数,我们下面来实现初始化函数:

 该函数不需要任何返回值,故返回类型为void,参数为结构体类型指针。

我们首先初始化的参数为储存的成员个数:使用指针地址,由con指向sz,将它初始化为0;第二个初始化的参数为成员信息,我们在这里使用到一个函数:memset。该函数的功能是可以指向性的进行修改参数,在我们以这一次调用为例:第一个参数为我们要初始化的对象:con->date,第二个参数为我们想要赋予的值,第三个参数为我们想要初始化的范围。因为我们是要对所有成员进行初始化,所以范围为整个成员信息结构体。

4.添加通讯录成员信息的功能实现

我们首先在主函数添加成员信息的模块创建添加函数:

下面是函数的实现:

进入函数,我们首先对通讯录成员个数进行判断,使用一个if语句即可,当sz等于我们之前设置的MAX值时即提示:通讯录满了!

如果还有空间储存,我们就可以对新成员的信息进行录入。录入完成以后,成员个数即sz应该增加一个。

5.成员列表打印

 下面是打印函数的实现:

跟上一个模块一样,我们首先创建该函数:

下面是该函数的实现:

我们首先打印表头:

%-15s代表左对齐,如果需要右对齐去掉-即可。

打印信息时我们使用同样的对齐方式,那么对应的信息就可以与表头对应整齐。

我们使用一个for循环,循环的次数取决于sz也就是已储存的成员个数的大小。

下面我们看一下打印效果:

我们首先添加两个联系人信息:

下面进行打印: 

6.寻找联系人功能实现

下面我们来实现寻找联系人功能的函数:该函数的功能是确定联系人列表里有无我们想要找的那个成员,如果存在,将对那个成员的信息进行打印

下面为函数实现:

首先我们在函数内部创建一个字符数组并对它初始化,用以存放我们搜寻的联系人的名字,数组大小与之前创建的一致。

首先我们要先判断一下联系人列表里有无联系人,如果人数为0,那么也就没有搜寻的必要,我们直接返回一个-1结束函数。

当联系人大于0的时候,我们用scanf接收姓名之后,我们将它与data结构体中的元素name进行一一比较,因此我们创建了一个for循环。循环的次数为sz,也就是联系人的个数。

如果找到了该联系人,那么我们就返回它所在数组的下标。

若循环结束也没找到相同的联系人姓名,则返回-1并说明联系人不存在。

返回值回到主函数:

 

这时,若找到了则返回值大于等于0,我们对此进行判断,假若找到了,我们对其进行打印:

 

 下面我们看一下运行效果:

可以看到我们的函数很好的实现了我们想要的功能。

7.删除功能 

下面是删除功能:

与之前一样,我们先判断一下是否有联系人。然后我们调用之前写的寻人函数,根据它不同的返回值我们设置不一样的命令和提示。如果联系人存在,那么我们就可以对它进行打印并询问:是否删除。

确认删除后我们开始编写删除动作的代码:

 

 假使我们想要删除下标为i的元素,那么我们只需要将i+1赋值到i之上,以此类推。需要注意的是赋值应从前往后,否则前面的值在被赋予之前会被修改。这个动作一个需要执行sz-i次,sz为元素总个数。

下面是运行情况:

删除前:

删除后:

 

8.修改功能

此功能大体与之前相似,故不再赘述,下面是实现代码:

 

以上就是简易版通讯录的实现,谢谢大家的支持! 


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/32926.html

函数  成员  联系人  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1