通讯录管理系统C语言实训Linux实训.docx
- 文档编号:17258434
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:28
- 大小:679.30KB
通讯录管理系统C语言实训Linux实训.docx
《通讯录管理系统C语言实训Linux实训.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统C语言实训Linux实训.docx(28页珍藏版)》请在冰点文库上搜索。
通讯录管理系统C语言实训Linux实训
2018-2019学年第1学期
LinuxC程序设计
实训报告书
课题名称通讯录管理系统
系(部)
专业班级
学生姓名
学生学号
指导教师
完成日期
实训名称
通讯录管理系统
实训目的
熟悉通讯录管理系统的设计方法及实现原理;复习C语言的基本语法及基本结构(链表、结构体等)。
实训内容
建立通讯录信息,信息至少包含姓名、住址、单位、手机、分类(如同事、朋友、同学、家人等)、邮箱等信息。
该系统提供添加、删除、修改、查找和保存等功能,其中按姓名方式删除、修改,按姓名、单位、分类方式查找。
将通讯录的内容保存在文本文件中,可以将其调出使用。
能够输出通讯录中的信息。
实训仪器设备
实验室台式电脑、个人笔记本电脑
组长
组别
成员
实训日期
2019.1.7—1.11
指导教师
成绩
批阅
意见
指导老师:
日期:
1绪论
1.1课题简介
通讯录管理系统在实际中应用广泛,其中的很多的功能都很齐全也很强大。
它不仅是新老同学联系的桥梁,而且还是自我娱乐的好方式。
通讯录管理系统的功能一般包括:
创建、查询、更新(添加、修改、删除)、保存等功能。
实现的功能概括为供用户对其朋友及家人通讯信息进行各种操作。
用户可以对朋友的基本资料作相应的改动;用户可以对个人资料进行修改;对于用户的联系,方便同学及朋友之间的查找;此外还可实现其他一些功能。
可以说通讯录管理系统是人际交往中不可或缺的信息管理的工具,它能实现以上的种种功能,因此它也是我们朋友,同学之间不可缺少的好帮手,助手。
但有这些优点的同时它也存在着一定的缺点,就比如更新不够多样化等等。
1.2课题研究内容
本次课题主要研究怎样编写C语言程序实现简单的通讯录管理系统,允许用户创建新的通信录信息、同时该系统提供添加、删除、修改、查找和保存等功能。
该系统具体实现功能如下:
(1)创建通讯录。
创建的通讯录信息至少包括姓名、住址、单位、手机、分类(如同事、朋友、同学、家人等)、邮箱等信息。
(2)查找。
系统允许用户按姓名、单位、分类方式查找。
当用户选择某一查找方式后,输入相应的信息,系统将自动显示该信息对应的通讯录成员的全部信息。
(3)保存。
系统允许用户将创建的通讯录保存至某一自定义文件内,可以将其调出使用。
(4)打开。
系统允许用户打开其自定义创建的保存通讯录成员信息的文本文件,并输出通讯录中的信息。
(5)增加。
系统允许用户增加新的通讯录成员信息。
(6)删除。
系统允许用户按照姓名查找的方式删除对应通讯录成员的信息。
(7)修改。
系统允许用户按照姓名查找的方式修改对应通讯录成员的信息。
(8)显示。
显示通讯录内所有成员的基本信息。
1.3相关知识概述
因为通讯录系统在使用过程中有许多不定因素,需要确保其功能正常运行,且能灵活的对通讯录系统内所包含的信息进行各种实际操作,故此处决定通过创建结构体以及链表的形式,并且利用结构体指针来创建通讯录成员信息,以便通讯录系统用户针对通讯录成员的各种信息进行操作。
针对通讯录系统用到的相关知识,具体有以下三个方面。
1)结构体
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregatedatatype)的一类。
结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
2)结构体指针
结构体指针与一般指针变量在特性和方法上是相同的。
在程序中,结构体指针通过访问目标运算“*”访问他的对象。
结构体指针在程序中的一般定义形式为:
“Struct结构体名*结构体指针名”,其中的结构体名必须是上面已经定义的结构体类型。
在本次通讯录系统的设计过程中,对于结构体以及结构体指针的运用,我主要的用法如下:
structaddress_list
{
charname[30];//姓名
charaddress[30];//住址
charwork[30];//单位职业
charhandset[30];//手机号
charemail[30];//电子邮件
charclassify[30];//类别
structaddress_list*next;
};
3)链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:
一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
相比于线性表顺序结构,操作复杂。
由于不必须按顺序存储,链表在插入的时候可以达到O
(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O
(1)。
链表的一般情况及空链表如图1.3所示:
单链表链表的常见操作有:
链表的建立,链表的插入,链表的删除等操作。
4)文件的保存与打开
首先需要将通讯录的内容写入自定义文件,使用语句gets(tong);允许用户自定义文件名字,然后利用语句fp=fopen("(tong).txt","w");将系统所包含的所有成员信息写入刚刚定义的文件中。
将信息存入文件后,允许用户打开文件进行查看通讯录内所有成员的基本信息,使用语句fp=fopen("(tong).txt","r");打开指定的文件,并且在用户界面显示出文件内所包含的所有基本信息。
2系统分析
2.1系统说明
为了满足用户存取不同人员通讯信息的需求,设计了该通讯录管理系统。
该通讯录管理系统具备8项基本功能(创建通讯录、添加、删除、修改、查找、保存、打开、显示),能够更大程度上满足用户对通讯录功能的需求。
首先该系统通过含有9个菜单选择项的菜单选择自己所需执行的功能,然后系统会自动跳转到相应的程序模块执行该功能。
系统使用具体操作如下:
用户在操作界面输入数字1时,系统人为用户要创建通讯录。
然后,系统会提示用户依次输入各个通讯录信息,至少包括姓名、住址、单位、手机、分类(如同事、朋友、同学、家人等)、邮箱等信息。
用户在操作界面输入数字2时,系统允许用户按姓名、单位、分类方式查找。
当用户选择某一查找方式后,输入相应的信息,系统将自动显示该信息对应的通讯录成员的全部信息。
用户在操作界面输入数字3时,系统允许用户将创建的通讯录保存至某一自定义文件内,可以将其调出使用。
用户在操作界面输入数字4时,系统允许用户打开其自定义创建的保存通讯录成员信息的文本文件,并输出通讯录中的信息。
用户在操作界面输入数字5时,系统允许用户增加新的通讯录成员信息,系统将提示用户输入新增加成员的姓名、住址、单位、电话等基本信息。
具体操作同数字1。
用户在操作界面输入数字6时,系统允许用户按照姓名查找的方式删除对应通讯录成员的信息。
用户在操作界面输入数字7时,系统允许用户按照姓名查找的方式修改对应通讯录成员的信息。
用户在操作界面输入数字8时,系统界面将显示通讯录内所有成员的基本信息。
用户在操作界面输入数字9时,退出通讯录系统。
2.2可行性研究
1)技术可行性
由于通讯录管理系统这一类的联系记录管理系统开发已经进行了较长的时间,且现今有很多成功的实例,技术基础也已经是相当的雄厚,因而技术上的准备应该不是问题。
2)操作可行性
因为电科专业从大一开始就学习C语言,同学们对于C语言的基本用法已经较为熟悉,大学两年半以来,同学们比较注重对C语言编程的学习,且有专业老师的帮助,因此此次课题的研究子在操作上具有很强的可操作性。
对通讯录系统从两个方面进行了可行性分析,因为有着较好的C语言基础,加上较强的技术可行性和操作可行性,直接决定了本次课题设计——通讯录管理整体上具有较强的可行性。
2.3需求分析
(1)功能性需求
通讯录作为人记录其朋友、家人等相关人员信息的基本工具,需要具有较基本的功能,即一个通讯录系统需要实现创建、添加、删除、修改、查找等多项基本功能(按姓名方式删除、修改,按姓名、单位、分类方式查找)。
此处本次实训设计的通讯录管理系统除了具有以上所述的基本功能外,还应该具有将通讯录的内容保存在文本文件中,可以将其调出使用,能够输出通讯录中的信息的功能。
(2)数据需求
本通讯录可以显示用户在该系统中保存的成员个数。
(3)非功能性需求
除了以上功能性需求外,该通讯录系统还应该尽可能美化用户操作界面,使用户操作界面简单明了。
3系统总体设计
3.1架构设计
结合此次课题研究的基本内容,参考现有的通讯录管理系统的基本功能,本次实训设计的通讯录总体架构设计如图3.1所示。
图3.1系统架构图
3.2软件设计
本次设计的通讯录管理系统根据实训要求结合实际需求,编写C语言程序实现了带有9大功能的通讯录管理系统。
该系统通过设计菜单选择项的形式实现各个功能。
其中,用户进入菜单选择项2后,系统会提示用户选择查询信息的方式,该功能通过含有4个功能的菜单选择项实现。
系统设计的软件流程图如图3.2所示。
图3.2软件设计总体流程图
4系统详细设计
4.1系统数据结构设计
针对系统的主要设计结构,主要采用结构体的形式设定通讯录成员信息项,利用指针对通讯录进行各种操作。
主要的代码设定如图4.1。
图4.1系统数据结构设计代码截图
4.2系统各个子函数具体说明
(1)主函数
main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数实现目标功能。
(2)其他各子函数具体功能如表4-1所示。
表4-1各个子函数定义及具体功能
函数名
功能
structaddress_list*creat(void)
创建通讯录
structaddress_list*menu(structaddress_list*head)
定义查找菜单选择项
structaddress_list*search1(structaddress_list*head)
姓名查找
structaddress_list*search2(structaddress_list*head)
单位查找
structaddress_list*search3(structaddress_list*head)
分类查找
voidsave(structaddress_list*head)
通讯录内容写入文件
structaddress_list*load(structaddress_list*head)
文件内容读出
structaddress_list*insert(structaddress_list*head)
增加
structaddress_list*delete_txl(structaddress_list*head)
删除
structaddress_list*shift(structaddress_list*head)
修改
voidprint(structaddress_list*head)
输出信息
structaddress_list*shifang(structaddress_list*head)
释放内存
4.3系统功能界面设计
本着功能界面美观易操作的需求,在该通讯录系统的设计中充分利用各种数学符号和空格来设计功能界面。
初始功能界面如图4.2所示。
图4.2初始功能界面
4.4具体模块设计
1)主函数的设计与实现
通讯录总体上分为9大功能模块,包括通讯录信息输入、通讯录信息查询、信息保存至文件、打开文件、增加、删除、修改、显示及退出共计9大功能。
在主函数中,通过设置9个菜单选择项,分别实现系统总体的9功能。
主函数调用各个子函数实现具体功能的核心代码如下:
2)创建通讯录子函数的设计与实现
此模块通过创建通讯录链表的形式将成员信息保存至通讯录中。
首先定义链表及相应的指针变量,初始化链表生成头结点;当用户输入名字后,将指针p1指向name,针对该名字,系统将允许用户继续输入该成员的其他信息,即住址、单位及职业、手机号、电子邮件、所属类别,以上所有的信息将保存在链表中以供用户对信息进行其他操作。
第一个人的信息输入完成,系统将提示输入下一个人的信息,如果名字输入不为0,则系统用户一直创建通讯录成员信息,直至名字为0,系统结束创建通讯录功能,此时用户界面显示刚刚创建的通讯录内所有信息,创建链表,保存通讯录成员信息的核心代码如下:
3)查找子函数的设计与实现
本通讯录查找信息的方法共有三种,姓名查找、单位查找和分类查找,首先选择主程序菜单项2进入查找模块的菜单程序(含有4个菜单选项),该菜单模块执行4种具体操作。
具体功能选择项如下:
1—姓名查找;2—单位查找;3—分类查找;4—回到主程序的菜单界面。
此处以姓名查找为例说明查找功能的具体实现方法。
首先,定义两个指针变量p1和p2,将系统之前创建的链表赋给指针p1,如果链表为空,系统将提示“通讯录为空,无法分类查找”的字样,当满足条件后,系统提示用户输入需要查找的人员姓名,通过输入名字和系统已有名字计较是否相等来判断用户想要查找的信息,找到输入的姓名后,连带姓名以及该姓名对应的其他所有信息一起输出显示。
以上过程可以重复进行,输出相同关键字的不同人员信息。
实现名字查询的核心代码如下:
4)保存子函数的设计与实现
该模块子函数主要实现的功能为将通讯录内的信息保存至自定义文本文件中。
首先,对写入函数进行初始化及定义相关变量,如果通讯录不为空,系统将提示用户输入要保存的文件名字,然后利用语句fp=fopen("(tong).txt","w");打开文件将现有通讯录内的信息写入文件中,信息保存完毕后,关闭文件。
具体实现代码如下所示。
5)打开文件子函数的设计与实现
此功能建立于功能4实现的基础之上,将信息保存至文件后,可使用该模块打开并显示文件内所包含的所有信息。
具体实现方法如下:
首先输入要打开的文件名字,系统检测到该文件存在后,打开文件,获取文件内每个成员的信息,获取的信息仍旧存于链表中,信息获取完成后,输出从文件中读出的链表数据,此时用户即可看到文件内存储的所有通讯录成员信息,最后关闭文件。
打开文件操作的核心代码如下:
6)删除子函数的设计与实现
针对删除模块,主要按照名字查询的方式进行删除。
首先进行函数的初始化及各个相关变量的定义,然后系统提示用户输入名字,若链表不为空,系统将按照名字查询用户想要删除的信息,当系统找到对应名字后,直接将该名字以及对应信息所占用的链表节点删除,最后释放掉该节点占用的空间。
此时,系统便完成了信息的删除工作。
当通讯链表为空时,无法删除。
删除模块核心代码实现如下:
7)增加子函数的设计与实现
该模块实现的具体方法及原理与创建通讯录子函数的设计与实现原理大同小异,此处不再做详细介绍。
具体实现代码如下。
8)修改子函数的设计与实现
首先输入需要修改的信息对应的人员姓名,系统通过比对名字找到该名字对应的其他所有信息,然后系统提示用户选择需要修改的内容,用户修改信息后,该信息将代替原来信息存放在相应的链表中,最后将修改之后的链表返回至主程序并有选择性的输出链表内容。
如果系统没有找到相对应的名字,系统将提示用户没有找到该人的资料并允许用户重新输入信息。
该模块具体实现代码如下所示。
9)输出子函数的设计与实现
该模块主要输出通讯录现有人数以及各个人员的具体信息。
具体实现代码如下。
5系统实现与测试
5.1系统实现
经过前期的研究及参考已经做出来的通讯录管理系统,经过反复的测试与修改,最终编写出了简单的通讯录管理系统。
该系统实现了预期的所有基本功能,能够完成创建通讯录成员信息、查找、保存信息至文件、打开文件、增加、删除、修改、显示通讯录成员信息以及退出通讯录系统共计9大功能。
经过系统的调试与实践性的测验,该系统可操作性以及准确性较好,且有较好的信息显示界面。
5.2单元测试
系统完成后,通过对系统进行各单元的测试来查看系统实现的具体功能。
在软件的结果输出界面,首先系统提示用户选择相应的操作,操作选择完成后执行相应的操作并输出操作结果。
以下是通讯录管理系统9大功能的具体测试结果。
1)创建通讯录功能测试
在用户操作界面输入数字1,程序将允许用户创建通讯录信息。
当姓名输入为0时,结束该功能,并且输出刚刚建立的通讯录信息。
具体操作结果界面如图5.1所示。
图5.1功能1测试
2)查找功能测试
查找功能主要有三种实现方式,分别为按照姓名查找、按照单位查找、按照分类查找。
按照姓名方式查找测试结果如图5.2所示;按照单位方式查找测试结果如图5.3所示;按照分类方式查找测试结果如图5.4所示。
图5.2姓名方式查找测试结果
图5.3单位方式查找测试结果
图5.4分类方式查找测试结果
3)保存功能测试。
该功能主要实现将通讯录信息保存至自定义的文本文件中,若保存成功,系统能正常执行第四个功能显示通讯录成员信息。
单独的保存功能测试结果如图5.5所示。
图5.5保存功能测试结果
4)打开功能测试。
该功能实现将功能三中建立的文件打开,读出文件中的信息并直观的显示出来。
测试结果如图5.6所示。
图5.6打开功能测试结果
5)增加功能测试。
进入该功能后,用户可以向通讯录添加具体的人员信息。
此处,添加姓名为陈涵的人员信息,使用显示功能将增加后的通讯录信息显示出来,具体测试结果如图5.7所示。
6)删除功能测试。
输入相应的人员姓名,执行删除操作,然后查看通讯录人员信息,此时通讯录将不再包含被删除人员的信息。
此处以删除姓名为陈肃的人员信息为例,进行结果测试。
具体测试结果如图5.8所示。
7)修改功能测试。
首先输入需要修改信息的人员姓名,选择需要修改的信息选项;然后输入想要修改的信息。
此处以修改姓名为陈珂的人员信息为例,将姓名陈珂修改为陈天,修改后的结果在显示功能测试中具体显示。
修改功能测试结果如图5.9所示。
8)显示功能测试。
将通讯录内包含的所有信息显示在界面上。
具体测试结果如图5.10所示。
9)退出功能测试。
执行该功能,直接退出系统。
具体测试结果如图5.11所示。
图5.7增加功能测试结果
图5.8删除功能测试结果
图5.9修改功能测试结果
图5.10显示功能测试结果
图5.11退出功能测试结果
6用户手册
6.1系统功能简介
该系统实现了预期的所有基本功能,能够完成创建通讯录成员信息、查找、保存信息至文件、打开文件、增加、删除、修改、显示通讯录成员信息以及退出通讯录系统共计9大功能。
6.2系统的支持平台
该系统可在所有windows系统、Linux系统等系统平台上运行。
6.3使用说明
输入数字1,创建通讯录。
输入数字2,查询通讯录系统内信息。
输入数字3,将通讯录内容保存至文件。
输入数字4,打开保存通讯录内容的文件。
输入数字5,增加新的通讯录成员信息。
输入数字6,删除通讯录信息。
输入数字7,修改通讯录信息。
输入数字8,显示通讯录内容。
输入数字9,退出通讯录系统。
7结束语
本次实训较好的完成了通讯录管理系统的设计,实现了通讯录管理系统的8项基本功能。
拿到通讯录设计课题,我经过不断地尝试设计和辛苦的调试、修改,最终我成功的写出了通讯录管理系统的一个简易程序。
通过这一周的实训设计,我对一些专业知识和程序设计有了更深的了解,同时也尝试着将自己所掌握的知识应用到现实问题中。
经过几天的奋战我感受很深。
在设计的过程中不可避免的遇到了很多的问题,尤其是在调试过程中,会因为某些原因出不来结果,也会因为个别错误而导致系统运行错误,无法达到理想运行效果。
在系统过设计程中,遇到问题是不可避免的,但是在遇到困难时我们不退缩,在老师和同学的帮助与指导下,我顺利的完成了本次课程设计,并调试出结果,在调试结果出来时我更是无比的兴奋。
实训效果整体良好。
在实训过程中,我明白了一个简简单单的程序背后都隐含着很多人不懈的努力。
做出的程序虽然还比较简单,但是只要再加以改进并完善,我相信这样一个小软件也将得到很多用户的喜爱。
本次实训,我巩固了C语言结构体、链表、指针等相关知识,并熟练地使用和编译了通讯录管理系统的程序,完成了C语言理论到实践的过渡,总得来说,本次设计收获颇丰。
在通讯录管理系统程序的编写及调试过程中遇到了不少的困难,曾经设想了几个方案,但都因为经验不足,无法实现指定功能而失败,出现的情况是,实现了这个功能,却无法满足另外的功能。
最后我对要实现的所有操作进行重新的归类,将其总体分为几个不同的模块,先各自实现各自的功能,然后将调试好的模块代码进行组装在一起,整体进行调试,使其成为一个能够实现通讯录管理系统的完整的程序。
设计程序过程中遇到很多技术问题,参考了大量书籍。
最终实现了对通讯录的建立、修改、增加、删除等基本操作。
简而言之,通过这次实训,我对C语言的知识有了更好的学握和应用,自己脑海里的知识架构也更加清晰,在以后的学习和生活中受用终身。
谢谢老师在课堂上的教导及同学们的帮助,在以后的学习中我会把更多的精力投入到实践中,多动手,多动脑,将所学知识转化为自己独有的知识网络体系,达到更好的学习效果。
参考文献
[1]冯丽美,冯建.嵌入式LinuxC语言程序设计基础教程[M].北京:
人民邮电出版社,2016.12.
[2]朱少民.软件测试方法和技术(第二版)[M].北京:
清华大学出版社,2010.10.
[3]谭浩强.C程序设计(第三版)[M].北京:
清华大学出版社,2005.
[4]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社,2007.
[5]衡军山,邵军.C语言程序设计基础[M].北京:
航空工业出版社,2014.1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录管理系统 C语言实训 Linux实训 通讯录 管理 系统 语言 Linux 实训