还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
摘要为了人们对他人信息的记忆方便而设计,__的一套“通讯录管理系统“软件通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,__完成有一定工作量的程序设计任务,同时强调好的程序设计风格得到软件工程的综合训练,提高解决实际问题的能力关键字信息;管理;实用AbstractDesignedforpeopletoothersthememoryofinfor__tionconvenientdevelopedasetof__illist__nagementsystemsoftware.Throughthedesignpro__ssofthissu__ectstudentscanbestructuredprogrammingideasdeepenourunderstandingoftheadvan__dlanguagebasiclanguageelementsandcontroltheunderstandingofthestructureconducttrainingforemphasisanddifficultyinClanguageindependentlycompletetheprogramdesignhasa__rtainworktaskswhileemphasizingthegoodprogrammingstyle.Comprehensivetraininginsoftwareengineeringimprovingtheabilitytosolvepracticalproblems.Keywords:Infor__tion;__nagement;practical目录TOC\o1-2\h\z\u1概述
11.1设计目的
11.2设计要求
11.3系统功能需求分析22总体设计
32.1总体功能模块图
32.2程序的数据设计43详细设计
53.1功能及工作流程图
53.2源程序代码84调试分析
194.1测试
194.2问题思考与调试245总结25____26致谢271概述
1.1设计目的随着信息社会的高速发展,人与人之间的__越来越频繁,通讯方式越来越多样化,如何保证与朋友、同学、同事、__、亲戚等之间的__,并能方便快捷的查找、记录、修改其相关通讯信息仅靠以前单独的手工记录已远远不能满足当前的需要 __一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关人员的通讯信息,了解友人相关信息,帮助与友人保持联络 所以设计一个通讯录管理系统管理各人的通讯信息是是非必要的设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能1数据包括人名、工作单位、__号码和E-__il地址2可对记录中的姓名和__号码进行修改3可增加或删除记录4可显示所有保存的记录5可按人名或__号码进行查询
1.2设计要求建立通讯录信息,信息至少包含姓名、住址、单位、固定__、__手机、分类(如同事、朋友、同学、家人等)、E-__il、__等该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、单位、分类方式查找将通讯录保存在文件中能够输出通讯录中的信息
1.3系统功能需求分析主要包含一下多种功能添加添加通讯录记录显示显示通讯录记录删除删除通讯录记录查询查询通讯录记录修改修改通讯录记录保存将信息保存到文件本系统为通讯录管理系统,可由用户自由添加,删除和修改信息,还可以将通讯录信息导出到文本文档,极大的方便了用户的使用2总体设计思路我们首先设计出了主函数,然后根据去要实现的功能分别设计录入__人信息、浏览、查询、修改、删除功能的子函数删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环实现删除修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能
2.1总体功能模块图图
2.1总体功能模块图添加可以添加通讯录记录,依次输入编号、姓名、年龄、__号码、通讯地址、____后,会提示是否继续添加显示可以以表格形式输出所有通讯录里的记录删除输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询可以选择用姓名、__、地址三种方式查询修改输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、__号码、通讯地址、____即可完成修改保存输入文件名(带后缀名)后,即可将通讯录信息保存到文件运行所需环境win7及以下各版本windows,visualC++
6.
02.2程序的数据设计该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想下面六个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和除数据创建用fopen()建立一个文本文件,然后用fprintf向其中输入数据(例如,向文件中输入“姓名”,“地址”等),并对文件进行命名添加可以添加通讯录记录,利用C语言文件,向文件中按顺序输入姓名、住址、单位、固定__、手机号码、分类(如同事、朋友、同学、家人等)、E-__il、__,再用fclose函数关闭并保存文件输出也是用通过循环依次输出文件中的数据,即输出所有通讯录里的记录删除输入你要删除的人的姓名后,系统会自动删除他(她)的记录,在删除通过switch语句满足提示你确认删除的功能,只有等你确认删除后才会删除查找为了满足用户的实际需求,设计了三种查询方式,可以用姓名、单位、分类三种方式查找通讯录记录这里用到strcmp函数,通过比较字符串是否相同来判别是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上修改输入你要修改的那个人的姓名后,系统会查找该通讯录文件(此时用发f____函数来跟踪文件指针的指向地址,找到个人的记录后,会显示他(她)的记录,然后通过fseek函数来找到修改处的地址,然后用户再依次输入他(她)的相关信息来替代以前的记录保存用到fclose函数,每次操作成功后会自动保存到指定的文件中3详细设计
3.1功能及工作流程图
①添加添加通讯录记录,依次输入编号、姓名、年龄、__号码、通讯地址、____后,会提示是否继续添加图
3.1
(1)添加流程图
②显示以表格形式输出所有通讯录里的图
3.1
(2)显示流程图
③删除输入欲删除的那个人的名字后,会自动删除他(她)的记录内容图
3.1
(3)删除流程图
④查询可以选择用姓名、__、地址三种方式查询图
3.1
(4)查询流程图
⑤修改输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、__号码、通讯地址、____即可完成修改图
3.1
(5)修改流程图
3.2源程序代码#includestdio.h#includestdlib.h#includestring.htypedefstruct{charscore;/*编号*/charname
[10];/*姓名*/charnum
[15];/*号码*/chare__il
[20];/*邮箱*/charage
[8];/*年龄*/charadds
[20];/*住址*/}Person;Personpe
[80];intmenu_select{charc;do{systemcls;printf\t\t*****通讯录*****\n;printf\t\t┌───────┐\n;printf\t\t│
1.添加记录│\n;printf\t\t│
2.显示记录│\n;printf\t\t│
3.删除记录│\n;printf\t\t│
4.查询记录│\n;printf\t\t│
5.修改记录│\n;printf\t\t│
6.保存记录│\n;printf\t\t│
0.退出程序│\n;printf\t\t└───────┘\n;printf\t\t请您选择0-6:;c=getchar;}whilec0||c6;returnc-0;}intInputPersonper[]intn{inti=0;charsignx
[10];whilesign!=nsign!=N{printf\t编号:;scanf\t%dper[n+i].score;printf\t姓名:;scanf\t%sper[n+i].name;printf\t年龄:;scanf\t%sper[n+i].age;printf\t__号码:;scanf\t%sper[n+i].num;printf\t通讯住址:;scanf\t%sper[n+i].adds;printf\t____:;scanf\t%sper[n+i].e__il;getsx;printf\n\t是否继续添加Y/N;scanf\t%csign;i++;}returnn+i;}voidDisplayPersonper[]intn{inti;printf----------------------------------------------------------------------\n;/*格式*/printf编号姓名年龄__号码通讯地址____\n;printf----------------------------------------------------------------------\n;fori=1;in+1;i++{printf%-5d%-8s%-6s%-13s%-15s%-15s\nper[i-1].scoreper[i-1].nameper[i-1].ageper[i-1].numper[i-1].addsper[i-1].e__il;ifi1i%10==0{printf\t-----------------------------------\n;printf\t;systempause;printf\t-----------------------------------\n;}}printf----------------------------------------------------------------------\n;systempause;}intDelete_a_recordPersonper[]intn{chars
[20];inti=0j;printf\t请输入想删除记录中的名字:;scanf%ss;whilestrcmpper[i].names!=0ini++;ifi==n{printf\t通讯录中没有此人!\n;returnn;}forj=i;jn-1;j++{strcpyper[j].numper[j+1].num;strcpyper[j].nameper[j+1].name;strcpyper[j].ageper[j+1].age;strcpyper[j].addsper[j+1].adds;strcpyper[j].e__ilper[j+1].e__il;per[j].score=per[j+1].score;}printf\t\t\t已经成功删除!\n;returnn-1;}voidQuery_a_recordPersonper[]intn{intm;printf\t\n请选择查询方式:\n;printf\t┌──────┐\n;printf\t│1------姓名│\n;printf\t│2------__│\n;printf\t│3------地址│\n;printf\t│4------返回│\n;printf\t└──────┘\n;printf请选择:;scanf%dm;whilem!=1m!=2m!=3m!=4{printf输入错误,请重新选择:;scanf%dm;}ifm==1{chars
[20];inti=0;printf\t请输入想查询的姓名:;scanf\t%ss;whilestrcmpper[i].names!=0ini++;ifi==n{printf\t通讯录中没有此人!\n;return;}printf\t此人编号:%d\nper[i].score;printf\t此人年龄:%s\nper[i].age;printf\t__号码:%s\nper[i].num;printf\t通讯地址:%s\nper[i].adds;printf\t____:%s\nper[i].e__il;};ifm==2{chars
[20];inti=0;printf\t请输入想查询的__:;scanf\t%ss;whilestrcmpper[i].nums!=0ini++;ifi==n{printf\t通讯录中没有此人!\n;return;}printf\t此人编号:%d\nper[i].score;printf\t此人姓名:%s\nper[i].name;printf\t此人年龄:%s\nper[i].age;printf\t通讯地址:%s\nper[i].adds;printf\t____:%s\nper[i].e__il;};ifm==3{chars
[20];inti=0;printf\t请输入想查询的地址:;scanf\t%ss;whilestrcmpper[i].addss!=0ini++;ifi==n{printf\t通讯录中没有此人!\n;return;}printf\t此人编号:%d\nper[i].score;printf\t此人姓名:%s\nper[i].name;printf\t此人年龄:%s\nper[i].age;printf\t__号码:%s\nper[i].num;printf\t____:%s\nper[i].e__il;};}voidChangePersonper[]intn{chars
[20];inti=0;printf\t请输入想修改的记录中的名字:;scanf%ss;whilestrcmpper[i].names!=0ini++;ifi==n{printf\t通讯录中没有此人!\n;return;}printf\t编号:;scanf\t%dper[i].score;printf\t姓名:;scanf\t%sper[i].name;printf\t年龄:;scanf\t%sper[i].age;printf\t__号码:;scanf\t%sper[i].num;printf\t通讯住址:;scanf\t%sper[i].adds;printf\t____:;scanf\t%sper[i].e__il;printf\t修改成功!;}voidWritetoTextPersonper[]intn{inti=0;FILE*fp;/*定义文件指针*/charfilename
[20];/*定义文件名*/printf\t保存到文件\n;/*输入文件名*/printf\t请输入所保存的文件名:;scanf\t%sfilename;iffp=fopenfilenamew==NULL{printf\t无法打开文件\n;systempause;return;}fprintffp******************************************通讯录******************************************\n;fprintffp编号姓名年龄__号码通讯地址____\n;fprintffp------------------------------------------------------------------------------------------\n;whilein{fprintffp%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\nper[i].scoreper[i].nameper[i].ageper[i].numper[i].addsper[i].e__il;i++;}fprintffp------------------------------------------------------------------------------------------\n;fprintffp***************************************共有%d条记录****************************************\nn;fclosefp;/*关闭文件*/printf保存成功!\n;}void__in/*主函数*/{intn=0;for;;{switchmenu_select{case1:printf\n\t添加记录到通讯录\n;/*添加记录*/n=Inputpen;break;case2:printf\n\t\t\t通讯录记录表\n;/*显示记录*/Displaypen;break;case3:printf\n\t从通讯录中删除记录\n;n=Delete_a_recordpen;/*删除记录*/printf\t;systempause;break;case4:printf\n\t在通讯录中查找记录\n;Query_a_recordpen;/*查找记录*/printf\t;systempause;break;case5:printf\n\t修改通讯录中的记录\n;Changepen;/*修改数据*/printf\t;systempause;break;case6:printf\n\t保存功能\n;WritetoTextpen;/*保存数据*/printf\t;systempause;break;case0:printf\n\t\t谢谢使用,再见!\n;/*结束程序*/printf\n\t\t;systempause;exit0;}}}4调试分析调试的意义和目的:在管理信息系统的__过程中,面对着错综复杂的各种问题,人的主观认识不可能完全符合客观现实,__人员之间的思想交流也不可能十分完善所以,在管理信息系统__周期的各个阶段都不可避免地会出现差错__人员应力求在每个阶段结束之前进行认真、严格的技术审查,尽可能早的发现并纠正错误,否则等到系统投入运行后再回头来改正错误将在人力、物力上造成很大的浪费,有时甚至导致整个系统的瘫痪然而,经验表明,单凭审查并不能发现全部差错,加之在程序设计阶段也不可避免还会产生新的错误,所以,对系统进行调试是不可缺少的,是保证系统质量的关键步骤统计资料表明,对于一些较大规模的系统来说,系统调试的工作量往往占程序系统编制__总工作量的40%以上调试的目的在于发现其中的错误并及时纠正,所以在调试时应想方设法使程序的各个部分都投入运行,力图找出所有错误错误多少与程序质量有关即使这样,调试通过也不能证明系统绝对无误,只不过说明各模块、各子系统的功能和运行情况正常,相互之间连接无误,系统交付用户使用以后,在系统的维护阶段仍有可能发现少量错误并进行纠正,这也是正常的
4.1测试1).显示的主菜单界面图
4.1
(1)主菜单界面2).添加界面图
4.1
(2)添加界面3).显示界面图
4.1
(3)显示界面4).删除界面图
4.1
(4)删除前界面删除后,通讯录里的显示记录图
(4)删除后界面5).查询界面以姓名查询方式为例图
4.1
(5)查询界面6).修改界面图
4.1
(6)修改前界面修改后,通讯录里的显示记录图
4.16修改后界面7).保存界面图
4.1
(7)保存界面通讯录.___文件截图图
4.1文件截图
4.2问题思考与调试
1.当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容因此,向别人请教后,在一些地方加入了systempause;这个语言,用来对某项操作完成后进行暂停
2.现在这个程序的界面个人感觉很清爽但在最初,每次进行一项操作,运行窗口里的内容会一直保留着,感觉很杂乱,如下图(添加后,进行显示操作)图
4.2分析图之后,我去网上寻求解决办法,知道可以使用systemcls;这一语句可以解决这个问题,最后,修改成功5总结这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验自己动手,自己发现和解决问题发现了自己的许多不足平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决我相信在以后的学习能够解决好它们但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和好心人对我的帮助与支持____
[1]谭浩强,__温C语言程序设计教程第三版北京高等教育出版社,2006
[2]谭浩强,__温C语言习题集与上机指导第三版北京高等教育出版社,2006
[3]谭浩强C程序设计(第三版)北京清华大学,2005
[4]谭浩强C程序设计(第二版)北京清华大学,1999
[5]林建秋,韩静萍,等.C语言程序设计【M】.电子工业出版社,
2004.
[6]谭浩强.C语言程序设计【M】.清华大学出版社,
2006.
[10]苏小红,陈惠鹏.C语言大学实用教程【M】.电子工业出版社,
2007.致谢在这里我要感谢杨书鸿老师,她对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助在此向帮助和指导过我的各位老师表示最中心的感谢!感谢这篇论文所涉及到的各位学者,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作感谢我的同学和朋友,在我写论文的过程中给予我很多素材,还在论文的撰写和排版等过程中提供热情的帮助由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!。