c语言通讯录课程设计报告.docx
- 文档编号:26948300
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:31
- 大小:118.13KB
c语言通讯录课程设计报告.docx
《c语言通讯录课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言通讯录课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
c语言通讯录课程设计报告
一引言
当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理而设计的。
通讯录管理系统的建立是可以有效节省同学、朋友、客户间日常交流的投资(指时间、精力),其设计理念很简单,变传统的纸张与笔录方式为计算机自动化进行通讯录信息管理系统,既省时间又提高效率。
因此在系统构建时,只要我们本着丰富通讯录的信息资源,为用户提供最为方便的快捷的信息阅览途径和管理手段,去吸引用户,那么通讯录管理系统是完全可行的。
通讯录软件设计的灵感来源于生活和工作中的需要。
如今,随着社会的飞速发展,信息时代改变着人们的各种生活方式。
人们的联系信息,联系方式变得复杂而多样化,以前所使用的各种电话簿、通讯本等小册子由于查找不方便、功能单一等缺陷已经无法胜任它的“时代使命”,而现在各种手机,商务通内设的电话簿尽管携带方便却又挥之不去其“记录量少,界面小,浏览不方便”的缺点。
工作中看到有些人巧妙地利用excell或者word制表格来建立通讯录,每逢用时再打开,可是查找极其不便,维护起来也麻烦。
通讯录系统设计,它的内容对于计算机来说是至关重要的,通讯录系统为计算机的使用者提供充足的信息和快捷的查询手段。
用c语言构建的通讯录系统设计,通过课上学到的和查阅一些文献的一些关于结构体[1]、数组、指针、函数以及循环函数的运用[1]和字符串的处理[2]等基本知识可以初步的实现通讯录的输入、显示、查找、删除、快速查询等通讯录简单而用的一些实用的功能,给人们带来更多的方便。
本管理系统设计合理、操作方便、运行稳定、功能完备,具有较高的实用价值。
本课程设计主要运用C语言中的结构体、数组、链表、等数据结构,设计一个简单的管理系统应用程序。
本程序设计出了通讯录管理系统的基本功能,并设计了简单的界面,主要考察对自定义函数的熟悉程度,使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。
通过完成本课题进一步熟悉C语言基本知识,并掌握数据结构的一些基本算法思想,进一步熟悉指针的用法,数组的建立运用和函数调用,加深对数据结构的理解,提高算法设计的能力,锻炼编程的能力。
用C语言编程的通讯录管理系统,要求实现通讯录系统中,添加新记录、删除记录、显示记录信息、按名字查找信息和退出系统等功能。
录入人员的编号、姓名、个人邮箱、地址、联系电话。
显示所有人员的信息。
通过输入姓名查找人员信息。
通过输入姓名查找到要删除的人员信息,然后可以进行删除,回显当前通讯录信息。
通过输入姓名查找到要修改的人员信息,然后依次进行信息修改。
添加人员信息。
二系统总体设计
本系统设计的函数是由一个主函数几个子函数组成的。
首先构思大局编出一个主函数,然后根据要实现的功能逐步细分设计,分别解决输入、显示、查找、删除、修改,退出功能的子函数编程中遇到的问题。
首先通过结构体的定义,确定通讯录的项目和大小。
首先通过输入函数添加信息,然后再逐步编写和验证其它功能。
显示函数的设计利用C语言的循环功能依次输出信息。
查找是用一个字符串比较得出两个相同的字符串的方法找出用户要查找的人。
删除函数的设计是通过指定位置以后的数组下标减一实现删除目的的,for循环和while循环在这此设计中也起了很大的作用。
1概要设计
系统功能模块图如图1所示:
主菜单
输入通讯录
显示通讯录
查找通讯录
删除通讯录
添加通讯录
退出通讯录路
修改通讯录
图1系统功能模块图
2系统流程图
输入错误,重新操作
结束
menu()=6?
menu()=1?
menu()=0?
?
menu()=2?
m>=0?
menu()=5?
menu()=4?
menu()=3?
开始
intlength,m=0
调用输入函数
调用显示函数
调用输出函数
调用退出函数
调用添加函数
调用修改函数
调用查找函数
图2主函数流程图
真
假
真
假
真
假
真
假
真
假
真
假
真
真
假
假
三详细设计
1菜单函数
菜单函数首先标出欢迎使用通讯录管理系,然后给出用户可选择的项目,用户可以通过选择该项前的代码来实现想要实现的功能,其流程图如图3所示:
intm
m<0||m>6
返回m
结束
开始
输入选项0—6—666
真
假
图3菜单函数流程图
2输入通讯录
将结构体数组分成几个数组分别对每个数组赋值,用for循环对不同地址的数组分别赋值。
其流程图如图4所示:
i=0
i i++ 返回n 结束 开始 输入信息 输入数目n 真 假 图4输入函数流程图 3显示通讯录 inti i=0 i<=n-1? i++ 结束 开始 显示i位置信息 真 假 图5显示函数流程图 显示通讯录通过循环函数将全部的通讯录信息以此显示出来,其流程图如图5所示: 4find函数 find函数通过输入姓名与原通讯录中存储的姓名,两字符串的比较,找到与输入姓名相同的姓名的位置,其流程图如图6所示: i=0 i i++ returni 结束 开始 真 真 找到要找的姓名 假 假 图6find函数流程图 5删除通讯录 图7删除函数流程图 Inti,j,ch i>n-1 ch==1 returnn 调用删除函数 是否重新输入 j=i+1 j j++ n-- j位置数据存放位置前移 输出信息 结束 开始 真 真 假 假 删除通讯录通过数组中该位置之后的数据存放位置向前移一位来实现删除功能,其流程图如图7所示: 6查找通讯录 查找通讯录通过find函数找到所查通讯录的位置,再将该位置的通讯录信息显示出来,其流程图如图8所示: 7修改通讯录 修改通讯录通过find函数找到所要修改通讯录位置,显示出信息,确认修改后,即可逐项修改,其流程图如图9所示: 结束 假 真 输出要修改的信息 假 Inti,ch i>n-1? 是否要修改? 没有找到要修改的记录 是否继续修改 进行修改 调用修改函数 真 开始 真 假 图9修改函数流程图 8添加通讯录 在存储未满的情况下,用find函数找到要添加的位置后即可逐项添加通讯录信息,其流程图如图10所示: 输入插入信息 输入插入位置 真 结束 开始 假 inti,j N<=n+1? 返回n j=n-1 j>=i j-- 将该位置信息向后移一位 储存已满 返回n+1 图10添加函数流程图 假 真 9退出通讯录 在使用完通讯录后,按6键便会退出系统,其流程图如图11所示: n=-1 输出谢谢使用 结束 开始 图11退出函数流程图 返回n 10测试结果 进入系统后,系统会出现图12所示菜单 在主菜单中输入3后,输入要找的姓名。 在系统没有要找信息时,系统会给出提示,确认用户是否继续查找,如图13所示: 在确认修改后,按系统提示依次修改便可修改 在确认修改并输入修改后信息以后,系统便能按用户意愿修改的通讯录信息,如图14所示: 在主菜单中输入1后输入要删除的姓名,再按1键确定,系统便自动删除要删除的通讯录信息,如图15所示: 在主菜单中按6键,便可退出系统,如图16所示: 四总结 紧紧张张的一周实习即将过去,从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里时不时的有一种喜悦。 通过这一周的实习,我认识到书上和老师教的内容是有限的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去学习,同时我们还应向他人请教,从而了解更多自己不知道的知识。 回头看来,编写这个程序并不像原来想像的那么难,我们要相信自己,无论做什么事,只要我们仔细的思考了,认真的去做了,我们就一定能做好。 通过这周的编程我发现了自己的一些不足,在编写时经常犯一些低级错误,由于自己的马虎而浪费了不少时间。 在不知如何进行的时候有一种不自信,总想别人正在做什么,这些不足既然被发现就得在以后的做事中注意,争取改掉。 经过一周的努力我掌握了一些基本的C语言进行程序设计的技巧,更深的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,同时学会了一些调试一个较长程序的基本方法,提高了书写程序设计开发文档的能力(书写课程设计报告)。 这一周的实践让我受益匪浅,在此我要感谢孜孜不倦指导我们的老师,感谢在我困惑时给我帮助的同学,感谢学校给我们一个这样动手动脑的机会,使我们在理论与实践相结合方面又得到了一次很好的锻炼,让我们得到很大的收获。 参考文献 [1]谭浩强,张基温.C语言程序设计教程[M].第3版.高等教育出版社,2006 [2]刘振安.C语言程序设计[M].机械工业出版社,2007 附录1 #include #include #defineN80 /****************************************定义通讯录************************************/ typedefstruct { charnum[N]; charname[20]; chartele[15]; charadd[20]; charemal[15]; }STUDENT;STUDENTstu[N]; intmenu(); intshuru(STUDENTstu[N]); voidxianshi(STUDENTstu[],intn); intshanchu(STUDENTstu[],intn); voidchazhao(STUDENTstu[],intn); voidxiugai(STUDENTstu[],intn); inttianjia(STUDENTstu[],intn); inttuichu(); /***************************主函数****************************************/ intmain() {intlength,m=0; while(m>=0) {switch(menu()) {case0: length=shuru(stu);break; case1: xianshi(stu,length);break; case2: length=shanchu(stu,length);break; case3: chazhao(stu,length);break; case4: xiugai(stu,length);break; case5: length=tianjia(stu,length);break; case6: m=tuichu();break; default: printf("输入错误,请重新输入\n");}} return0;} /***********************************主菜单**********************************/ intmenu() {intm; printf("**************************欢迎使用通讯录管理系统***********************\n"); printf("*******************************主菜单**********************************\n"); printf("\t\t\t0.输入通讯录\n"); printf("\t\t\t1.显示通讯录\n"); printf("\t\t\t2.删除通讯录\n"); printf("\t\t\t3.查找通讯录\n"); printf("\t\t\t4.修改通讯录\n"); printf("\t\t\t5.添加通讯录\n"); printf("\t\t\t6.退出通讯录\n"); do{printf("\t\t\t请输入选项0-6\n"); scanf("%d",&m);} while(m<0||m>6); returnm;} /******************************输入通讯录*******************************/ intshuru(STUDENTstu[N]) { inti,n; printf("\n请输入要加入通讯录的数目\n"); scanf("%d",&n); printf("其输入信息\n"); for(i=0;i {printf("请输入编号: \n"); scanf("%s",stu[i].num); printf("\n请输入姓名\n: "); scanf("%s",stu[i].name); printf("\n请输入电话: \n"); scanf("%s",stu[i].tele); printf("\n请输入地址: \n"); scanf("%s",stu[i].add); printf("\n请输入emal: \n"); scanf("%s",stu[i].emal); printf("编号: %s\n姓名: %s\n电话: %s\n地址: %s\nemal: %s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal); } returnn;} /******************************显示通讯录********************************/ voidxianshi(STUDENTstu[],intn) {inti; for(i=0;i<=n-1 ;i++) { printf("编号: %s\n姓名: %s\n电话: %s\n地址: %s\nemal: %s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal); } } /******************************查找函数********************************/ intfind(STUDENTstu[],intn) {inti; chars[20]; printf("请输入的姓名\n"); scanf("%s",s); for(i=0;i if(strcmp(s,stu[i].name)==0) returni; returni; } /*******************************删除通讯录********************************/ intshanchu(STUDENTstu[],intn) {inti,j,ch; i=find(stu,n); if(i>n-1) {printf("没有找到要删除的记录,是否重新输入1/0\n"); scanf("%d",&ch); if(ch==1)n=shanchu(stu,n);} else { printf("编号: %s\n姓名: %s\n电话: %s\n地址: %s\nemal: %s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal); printf("是否确定要删除: %d是%2d否\n",1,0);} scanf("%d",&ch); if(ch==1) { for(j=i+1;j { strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j-1].tele,stu[j].tele); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j-1].emal,stu[j].emal); } n--; printf("删除成功\n"); }returnn; } /*******************************查找通讯录********************************/ voidchazhao(STUDENTstu[],intn) {inti,ch; i=find(stu,n); if(i>n-1) {printf("没有找到要查找的记录,是否重新输入1/0\n"); scanf("%d",&ch); if(ch==1)chazhao(stu,n);} else printf("编号: %s\n姓名: %s\n电话: %s\n地址: %s\nemal: %s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);} /*******************************修改通讯录********************************/ voidxiugai(STUDENTstu[],intn) {inti,ch; i=find(stu,n); if(i>n-1) {printf("没有找到要修改的记录,是否重新输入1/0\n"); scanf("%d",&ch); if(ch==1)xiugai(stu,n);} else { printf("编号: %s\n姓名: %s\n电话: %s\n地址: %s\nemal: %s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal); printf("是否确定要修改: %d是%2d否\n",1,0);} scanf("%d",&ch); if(ch==1) {printf("编号: \n"); scanf("%s",stu[i].num); printf("\n姓名\n: "); scanf("%s",stu[i].name); printf("\n电话: \n"); scanf("%s",stu[i].tele); printf("\n地址: \n"); scanf("%s",stu[i].add); printf("\nnemal: \n"); scanf("%s",stu[i].emal); printf("修改成功\n");}} /*******************************添加通讯录********************************/ inttianjia(STUDENTstu[],intn) {inti,j; if(N<=n+1) printf("储存已满"); else { printf("请输入要插入的位置\n"); scanf("%d",&i); for(j=n-1;j>=i;j--) { strcpy(stu[j+1].name,stu[j].name); strcpy(stu[j+1].tele,stu[j].tele); strcpy(stu[j+1].add,stu[j].add); strcpy(stu[j+1].emal,stu[j].emal); } printf("其输入要插入的信息\n"); printf("编号: \n"); scanf("%s",stu[i].num); printf("\n请输入姓名: \n"); scanf("%s",stu[i].name); printf("\n请输入电话: \n"); scanf("%s",stu[i].tele); printf("\n请输入地址: \n"); scanf("%s",stu[i].add); printf("\n请输入emal: \n"); scanf("%s",stu[i].emal); printf("添加成功"); n++;} returnn; } /*******************************退出通讯录********************************/ inttuichu() { intn; n=-1; printf("**********************************谢谢使用**************************************"); returnn;} 附录2 #include #include #include typedefstruct{ charnum[6]; charname[10]; charunit[20]; charphone[13]; charaddr[30]; }datatype; typedefstructnode{ datatypedata; structnode*next; }listnode; typedeflistnode*linklist; linklisthead; listnode*p; intmenu_select(); linklistcreatelist(void); voidinsertnode(linklisthead,listnode*p); listnode*listfind(linklisthead); voiddelnode(linklisthead); voidprintlist(linklisthead); voidmain() { for(;;){ switch(menu_select()) { case1: printf("***********************************************\n"); printf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 通讯录 课程设计 报告