通讯录管理系统设计报告_第1页
通讯录管理系统设计报告_第2页
通讯录管理系统设计报告_第3页
通讯录管理系统设计报告_第4页
通讯录管理系统设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE3-《C语言通讯录管理系统》通讯录管理系统学生姓名:学院:计算机与通信工程学院班级:班学号:摘要本课程设计主要是一个简单的通讯录管理系统。通过程序中的菜单编号实现对数据的添加、修改、删除等操作。在本课程设计中,系统开发平台为Windows2000,程序设计语言为C语言,程序运行平台为Windws98/2000/XP。在程序设计中采用了结构体、链表的方法实现对数据的操作。程序通过调试运行,初步实现了设计目标,不过还需要很多的完善。关键词程序设计;通讯录;C语言;1引言对于日常生活中的人们来说,通讯录管理系统是一个非常重要,并且非常实用的工具。有了通讯录系统,人们就不用再为记不住熟人们的号码等联系方式而烦恼了,增进了人们之间的联系,让人们更加方便与朋友亲人联系了。1.1课题背景通讯管理系统是一个很实用的系统,不仅在人们用的手机中扮演着重要的角色,在各大商业与企业的运作中也起着非常大的作用。想当初没有电子通讯录系统,人们要花很多时间去记住联系人的联系方式,而且有时候还会弄错,导致一些不必要的尴尬,有了电子通讯录系统自然记不住的问题迎刃而解了。本系统只是实现了一个简单的通讯管理,通过对数组,结构体,链表,以及各个模块的应用达到一个管理的功能。1.2课程设计目的C语言现在是一个应用比较广泛的语言,通过对程序的设计让我们能更好的学习和了解它的各个方面的应用,对我们今后的学习有很大的帮助。同时,在做程序的过程中锻炼了我们对程序的分析与编写能力,更锻炼了我们的实战能力,为我们以后在自己的专业取得更好的成就做了一个好的铺垫。1.3课程设计内容本课程设计是一个通讯录管理系统,可以实现简单的插入、删除、添加等功能。通讯录管理系统通讯录管理系统信息的输入修改数据出添加数据删除数据图1-3通讯录管理系统2设计思路与方案2.1设计思路该个人通讯录管理系统是一个对数据进行管理修改的简单系统,首先做出一个主菜单界面供用户选择需要的操作,再用各个模块来实现菜单中各单独功能的实现,例如修改数据、插入数据、添加数据等。最后写一个主函数调用模块和函数实现通讯录菜单中的各功能。2.2操作流程图输入界面的相应操作序号添加通讯录数据显示新增完成图2-1输入界面的相应操作序号添加通讯录数据显示新增完成3详细实现3.1查看联系人选择查看联系人的序号选择查看联系人所属类型显示所选类型的所有联系人选择查看联系人的序号选择查看联系人所属类型显示所选类型的所有联系人图3-1查看联系人实现此功能的代码如下:voidoutput(structphone_info*head){ structphone_info*p1=head,*p2; system("cls"); //清屏 if(head==NULL) //如果当前链表头指针为空 { printf("当前没有任何联系人信息\n\n"); system("pause"); return; //返回 } printf("电话联系薄(共%d条信息)\n\n",n); for(;;) { p2=p1->next; printf("姓名:%s\n",p1->name); printf("电话:%s\n",p1->phone); if(p1->type=='A'||p1->type=='a') printf("类别:办公类\n"); elseif(p1->type=='B'||p1->type=='b') printf("类别:个人类\n"); else printf("类别:商务类\n"); printf("邮箱:%s\n",p1->email); printf("\n"); if(p1->next==NULL) //如果当前指针所指向的结构体中next指向空则链表输出完毕 break; //返回 p1=p2; }}3.2新增联系人进入菜单后选择添加序号按要求依次输入姓名、电话、类别、电子邮箱。如图3-2所示。选择新增联系人序号选择新增联系人序号按照提示依次输入要求的内容显示添加联系人成功图3-2新增联系人实现此功能的代码如下:structphone_info*new_info(structphone_info*head)//新增{ structphone_info*p1,*p2,*p; charc; intflag; system("cls"); //清屏 for(;;) { if(n==15) //判断当前联系人数目是否超过系统限制 { printf("存储空间已满,不能再录入新数据!\n\n"); system("pause"); returnhead; } if(n==0) //判断当前联系人数目是否为0 { head=p1=p2=(structphone_info*)malloc(sizeof(structphone_info)); //新建结构体并将结构体指针赋予链表头指针 p1->next=NULL; } else { p1=head; p2=(structphone_info*)malloc(sizeof(structphone_info)); //新建结构体 } printf("请输入要新增的联系人姓名:\n(如果输入“0” scanf("%s",p2->name); if(strcmp(p2->name,"0")==0) //判断输入的姓名是否为“0 { free(p2); //为“0” returnhead; //返回 } printf("\n请输入联系人的电话号码:\n"); scanf("%s",p2->phone); for(flag=1,p=head;n!=0&&p!=NULL;) //判断是否输入了相同的联系人电话 { if(strcmp(p2->phone,p->phone)==0) { printf("\n录入了相同的联系人电话\n\n"); system("pause"); flag=0; //标志位赋“0 free(p2); system("cls"); break; //退出循环 } p=p->next; } if(flag==0) //判断标志位是否为“0 continue; //如果为“0” printf("\n请输入联系人的类别:\n(\"A\"为办公类\"B\"为个人类\"C\"为商务类)\n"); scanf("%c",&c); //保存上一次输入的回车键 scanf("%c",&p2->type); printf("\n请输入联系人的电子邮箱:\n"); scanf("%s",p2->email); while(p1->next!=NULL) p1=p1->next; //找到链表的尾部 p1->next=p2; //将链表的尾部指向新添加的联系人 p2->next=NULL; //新的链表尾部赋结束标记 system("cls"); printf("新增成功\n\n"); n++; //保存的联系人数目加1 } returnhead;}3.3拨号联系人进入菜单后选择拨号联系人,然后输入要拨号的姓名,会提示拨号成功,即实现了对联系人的拨号。选择拨号联系人序号选择拨号联系人序号输入要拨号联系人的名字显示拨号成功图3-3拨号联系人实现此功能的代码如下:voiddiag(structphone_info*head){ charname[20]; structphone_info*p1; system("cls"); for(;;) { if(n==0) //判断当前联系人数目是否为0 { printf("当前没有任何联系人信息\n\n"); system("pause"); return; } system("cls"); output(head); //调用输出函数显示当前所有联系人的信息 printf("请输入要拨号的联系人姓名:\n(如果输入“0” scanf("%s",name); if(strcmp(name,"0")==0) //判断输入的姓名是否为0 return; //返回 else { p1=head; for(;;) { if(strcmp(name,p1->name)==0) //找到指定联系人所在节点 { printf("\n拨号成功\n\n"); system("pause"); break; } p1=p1->next; //找到下一节点 if(p1==NULL) //指针为空 { printf("\n姓名为%s的联系人不存在!\n\n",name); system("pause"); break; } } } }}4运行环境与结果4.1运行环境在本课程设计中,系统开发平台为WindowsXP,程序设计语言为VisualC++6.0,程序的运行环境为VisualC++6.0。VisualC++一般分为三个版本:学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种,在本课程设计中,以VisualC++6.0为编程环境。MicrosoftVisualC++6.0是Microsoft公司的MicrosoftVisualStudio6.0开发工具箱中的一个C++程序开发包。VisualC++包中除包括C++编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。VisualC++从最早期的1.0版本,发展到最新的7.0版本,VisualC++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。最新的7.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。VisualC++6.0是Microsoft公司推出的目前使用最广泛的基于Windows平台的可视化编程环境。VisualC++6.0是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好,完全课扩展以及具有强大的Internet支持,因而在各种C++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。VisualC++6.0秉承VisualC++以前版本的优异特性,为用户提供了一套良好的可视化开发环境:主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等等。用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文件、编译、链接、运行、调试应用程序。4.2运行结果主操作界面在执行程序的时候会看到如下的操作界面,输入相应的序号即可进入下一步操作。如图所示:图4-1主操作界面查看联系人。结果如图所示:图4-2查看联系人增加联系人。结果如图所示:图4-3增加联系人拨号联系人。图4-4拨号联系人5结束语这次课程设计是大学入学以来的第一次专业实践性的课程,从此次的实践中让我深深的体会到“从实践中学习”这句话的重要性。从设计中可以学到很多课本上学不到的东西,尽管这次设计中遇到了很多的阻碍,但是看到自己设计出来的成果还是值得的。设计的过程不仅复习巩固了学过的知识,同时也接受到了更多的新知识,让自己更加的充实。从此次设计中让我充分的认识到课本知识必须要有,但仅仅知道课本上的知识不去运用也是枉然。如今这个飞速发展的社会需要的不是那种理论人才,而是理论能与实践相结合的人,这样才能从中得到更多。通过本次设计我发现现在对专业知识掌握的还不很好,有很多方面需要进一步的提高,在今后的学习中一定要好好的努力,认真的去体会知识的内涵再正确的加以运用,这样才会达到学习的最佳效果。参考文献[1]杨路明.《C语言程序设计教程》.北京:北京邮电大学出版社,2000.1[2]谭浩强.《C程序设计》.北京:北京清华大学出版社,1999.1[3]向南平.《实用C语言程序设计》.长沙中南工业大学出版社,1994.4[4]北京金洪恩电脑有限公司.《C/C++程序设计入门》.天津:天津电子出版社,2003.4[5]王志雄,田小梅.《数据结构-C语言描述》.北京:北京工业大学出版社,2002.3附录:源程序代码#include<stdio.h>#include<string.h>#include<malloc.h>#include<windows.h>intn=0; //定义全局变量存储电话联系人个数structphone_info //定义结构体存储联系人信息{ charname[20]; //姓名 charphone[20]; //电话 chartype; //分类 charemail[20]; //邮箱 structphone_info*next; //指向下一个节点的指针};/*错误函数*///所需参数:无//函数功能:显示错误信息//返回参数:无voiderror(){ printf("代码错误\n\n"); system("pause");}/*输出函数*///所需参数:链表头指针//函数功能:输出链表中的联系人信息//返回参数:无voidoutput(structphone_info*head){ structphone_info*p1=head,*p2; system("cls"); //清屏 if(head==NULL) //如果当前链表头指针为空 { printf("当前没有任何联系人信息\n\n"); system("pause"); return; //返回 } printf("电话联系薄(共%d条信息)\n\n",n); for(;;) { p2=p1->next; printf("姓名:%s\n",p1->name); printf("电话:%s\n",p1->phone); if(p1->type=='A'||p1->type=='a') printf("类别:办公类\n"); elseif(p1->type=='B'||p1->type=='b') printf("类别:个人类\n"); else printf("类别:商务类\n"); printf("邮箱:%s\n",p1->email); printf("\n"); if(p1->next==NULL) //如果当前指针所指向的结构体中next指向空则链表输出完毕 break; //返回 p1=p2; }}/*新增函数*///所需参数:链表头指针//函数功能:新增联系人信息并自动添加到链表末尾//返回参数:链表头指针structphone_info*new_info(structphone_info*head)//新增{ structphone_info*p1,*p2,*p; charc; intflag; system("cls"); //清屏 for(;;) { if(n==15) //判断当前联系人数目是否超过系统限制 { printf("存储空间已满,不能再录入新数据!\n\n"); system("pause"); returnhead; } if(n==0) //判断当前联系人数目是否为0 { head=p1=p2=(structphone_info*)malloc(sizeof(structphone_info)); //新建结构体并将结构体指针赋予链表头指针 p1->next=NULL; } else { p1=head; p2=(structphone_info*)malloc(sizeof(structphone_info)); //新建结构体 } printf("请输入要新增的联系人姓名:\n(如果输入“0” scanf("%s",p2->name); if(strcmp(p2->name,"0")==0) //判断输入的姓名是否为“0 { free(p2); //为“0” returnhead; //返回 } printf("\n请输入联系人的电话号码:\n"); scanf("%s",p2->phone); for(flag=1,p=head;n!=0&&p!=NULL;) //判断是否输入了相同的联系人电话 { if(strcmp(p2->phone,p->phone)==0) { printf("\n录入了相同的联系人电话\n\n"); system("pause"); flag=0; //标志位赋“0 free(p2); system("cls"); break; //退出循环 } p=p->next; } if(flag==0) //判断标志位是否为“0 continue; //如果为“0” printf("\n请输入联系人的类别:\n(\"A\"为办公类\"B\"为个人类\"C\"为商务类)\n"); scanf("%c",&c); //保存上一次输入的回车键 scanf("%c",&p2->type); printf("\n请输入联系人的电子邮箱:\n"); scanf("%s",p2->email); while(p1->next!=NULL) p1=p1->next; //找到链表的尾部 p1->next=p2; //将链表的尾部指向新添加的联系人 p2->next=NULL; //新的链表尾部赋结束标记 system("cls"); printf("新增成功\n\n"); n++; //保存的联系人数目加1 } returnhead;}/*拨号函数*///所需参数:链表头指针//函数功能:在链表中查找指定的联系人并模拟拨号效果//返回参数:无voiddiag(structphone_info*head){ charname[20]; structphone_info*p1; system("cls"); for(;;) { if(n==0) //判断当前联系人数目是否为0 { printf("当前没有任何联系人信息\n\n"); system("pause"); return; } system("cls"); output(head); //调用输出函数显示当前所有联系人的信息 printf("请输入要拨号的联系人姓名:\n(如果输入“0” scanf("%s",name); if(strcmp(name,"0")==0) //判断输入的姓名是否为0 return; //返回 else { p1=head; for(;;) { if(strcmp(name,p1->name)==0) //找到指定联系人所在节点 { printf("\n拨号成功\n\n"); system("pause"); break; } p1=p1->next; //找到下一节点 if(p1==NULL) //指针为空 { printf("\n姓名为%s的联系人不存在!\n\n",name); system("pause"); break; } } } }}/*释放函数*///所需参数:链表头指针//函数功能:释放链表存储空间的内容//返回参数:无voidfreelist(structphone_info*head){ structphone_info*p1=head,*p2; for(;;) { if(p1->next==NULL) { free(p1); break; } else { p2=p1->next; free(p1); p1=p2; } }}/*查看函数*///所需参数:链表头指针//函数功能:显示指定类别的联系人信息//返回参数:无voidlook(structphone_info*head){ structphone_info*p; intc; intflag; chartype; system("cls"); if(n==0) //判断当前联系人数目是否为0 { printf("当前没有任何联系人信息\n\n"); system("pause"); return; //返回 } for(;;) { system("cls"); printf("1.查看办公类联系人\n"); printf("2.查看个人类联系人\n"); printf("3.查看商务类联系人\n"); printf("0.返回\n"); printf("\n请输入操作步骤的代码:"); scanf("%d",&c); switch(c) { case1:type='a';break; case2:type='b';break; case3:type='c';break; case0:return; default:error(); } flag=0; //标志位赋予0 p=head; while(p!=NULL) { if(p->type==type||p->type==type-32) { if(flag==0) { system("cls"); if(type=='a') pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论