通讯录管理系统C语言课程设计.doc_第1页
通讯录管理系统C语言课程设计.doc_第2页
通讯录管理系统C语言课程设计.doc_第3页
通讯录管理系统C语言课程设计.doc_第4页
通讯录管理系统C语言课程设计.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 报 告课程名称 C语言课程设计 课题名称 通讯录管理系统 专 业 统计学 班 级 统计学 学 号 姓 名 指导教师 欧阳湘江 杨子华 陈桥 2010年 7 月 9 日湖南工程学院课 程 设 计 任 务 书课程名称 C语言课程设计 课 题 通讯录管理系统 专业班级 统计学 学生姓名 学 号 指导老师 欧阳湘江 杨子华 陈桥 审 批 任务书下达日期 2010年 7月 2 日任务完成日期 2010年 7月 9日一、设计内容与设计要求1设计内容:问题描述:通过该系统实现对通讯录信息进行录入、显示、修改、删除、插入、排序、保存等操作的管理。功能要求:、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:编号、姓名、电话号码、地址。、本系统显示这样的菜单:请选择系统功能项:1. 通讯信息录入 2. 通讯信息显示 a. 通讯信息保存 b. 通讯信息删除 c. 通讯信息修改 d. 通讯信息查询 、按编号查询、按姓名查询、按电话号码查询1. 退出系统 、执行一个具体的功能之后,程序将重新显示菜单。、将通讯信息保存到文件中。算法提示:、数据结构:结构体类型数组。、数据库结构:下表构成该系统的基本数据库。 编号姓名电话号码地址charchar Charchar测试数据:纪录数20其它对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。2设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。5)实际操作过程中遇到的问题及解决方法:设计总结及心得体会.6)上机演示。二、进度安排 星期一 上午熟悉这次课程设计的目的和课程设计的要求,通过图书馆或因特网查找与帧封装课题相关的资料,明确了解一些要用到的文件和调用函数等,然后再把整个程序设计的总体框架、流程图等构思出来,并进行书面程序设计。 星期一 下午机房上机,在计算机上编辑源程序。调试程序,在改正错误的同时不断完善程序,使源代码满足课程设计的要求和实现课程设计的基本功能。星期三 下午继续修改、编辑、调试程序。不断改正错误后,要保证程序能成功编译成目标文件,链接成功成为可执行文件,再运行能显示出“帧封装已完成”的信息,这样才能算已经完成了本课题的基本功能。之后,开始撰写课程设计报告。星期四 下午进一步完善程序并运行演示,完成课程设计答辩,完成并打印课程设计报告。目 录一、设计内容与设计要求3 1设计内容:3 2设计要求4 二、进度安排4 三、课题的主要功能5 四、课题的功能的模块的划分6 1、功能模块图6 2、流程图:7 五、主要功能的实现9 六、程序的调试12 七、课题设计的总结和心得体会13 八、参考资料14 九、附录15 十、课程设计评分表31 三 、课题的主要功能1、通过该系统实现对通讯录信息进行录入、显示、修改、删除、插入、排序、保存等操作的管理。按编号查询,按姓名查询,按电话查询;还有按电话删除记录,按姓名删除记录;插入记录等。2、执行一个具体的功能之后,程序将重新显示主菜单。四、课题的功能的模块的划分1、功能模块图通讯录管理系统信息的录入信息的显示信息的保存信息的删除按编号查询按姓名查询按电话查询插入记录退出系统2、流程图:结束程序menu_select()程序运行Listfind(linklist head)Inertnode(linklisthead,listnode*p)Delnode(linklist head)menu_select()Createlist()是否结束?开始Main()NOYES五、主要功能的实现1 、menu()主菜单:首先进入运行通讯录管理系统的主菜单界面,列出了所有功能选项,如下图所示:通过printf()函数在屏幕上绘制一个菜单,将菜单进行编号,并显示一个提示输入选项,输入08之间的数字。输入选项就是输入菜单编号,该输入项作为函数的返回值,带到主函数,主函数根据这个数字调用相应的功能函数。2、然后就输入1,再按回车键进行对通讯录信息的录入,按照提示语输入每项内容,分别输入姓名,电话号码,编号,地址。以下为该功能的截图:再按要求输入一些信息后得到下图:输入过程中,每输入一个数就按一下回车键,若选择Y,则继续添加信息,得到的截图为:可以再输入新的信息,如下图:此时可以再继续添加信息,也可以不添加了,如果选择N,则会出现“press any key enter menu”的提示,即按任意键就可返回主菜单。3、输入3就可以保存记录了。4、通讯录信息的显示。以下为该功能的截图:5、del()删除记录:在主菜单下输入4可以实现记录的删除,删除记录有两种方式,一个是按电话删除,另一个是按姓名删除。六、程序的调试程序的调试是将编制的程序投入实际运行之前,有手工活编译程序的方法进行测试,修正语法错误和逻辑错误的过程。在调试过程中出现了很多问题,不如经常提示说,没有识别内存,不能read这样的错误,然后就会弹出一个对话框,阻止了程序的运行。还有就是在你结束了这个阻止对话框之后,就会自动大尅一个新的VC编译器,其中源程序代码也在里面,它就要我们去修改,不过看了半天那个错误也不知道怎么修改,这是因为我们平时很少接触过像如此这次的错误,这些错误有些是我们没有学过的源代码的出错,所以就是木然了,只能呆呆的发傻的看那个错误,不过后来经过老师的帮助,终于把错误纠正了,终于又有了信心完成任务了。在连接过程中,一般不会出现连接错误,如果出现了连接错误,说明源程序中存在子程序的调用混乱或参数传递错误等问题。这时又要用编辑程序对源程序进行修改,再进行编译和连接,如此反复进行,直至没有连接错误为止。将修改后的程序进行试算,这时可以假设几个模拟数据去试运行,并把输出结果与手工处理的正确结果相比较。如有差异,就表明计算机的程序存在有逻辑错误。如果程序不大,可以用人工方法去模拟计算机对源程序的这几个数据进行修改处理;如果程序比较大,人工模拟显然行不通,这时只能将计算机设置成单步执行的方式,一步步跟踪程序的运行。一旦找到问题所在,仍然要用编辑程序来修改源程序,接着仍要编译、连接和执行,直至无逻辑错 七、课题设计的总结和心得体会 经过一周多C语言课程设计,总算把课程设计给完成了,这是一个艰苦而又漫长的过,程序调试也是比较烦人的,不过皇天不负有心人,终于让我们的付出有了收获。C语言的功能强,使用方便灵活,所以得到广泛的使用,它使程序设计人员有发挥聪明才智、显示编程技巧的机会。但是要真正学好C,用好C,并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是我们这些初学者,往往会容易出现错误,出了错误也不知是怎么回事。要调试好一个C程序,就需要我们不断积累经验,提高程序设计和调试程序水平。C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次实习时间虽然仅有一个多星期,但确实使我受益非浅。在设计的过程中,终于体会到了“天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身”这句话的意思了,自己动手做出来的东西并不是想象中的那么简单。经过这次的程序设计就知道了,程序调试时更是烦人,一般都会很容易出错,就是原本是正确的程序,只是有几个警告的,稍作修改就会出现好几个错误了,有时侯的错误连自己也不知怎么改了,可能时犯糊涂了,改不回正确的了,所以这是就是越改越烦,就郁闷了。不过还是很好的,这样才能磨练一个人的意志力嘛,这样对于我们也算是一次锻炼,一次考验,只有经历过考验,我们才会长见识,有了进步,才能促进我们成长,从无知的世界走出来。只有不断的学习,才会有进步。这次课程设计总的来说是检验了我们这个学期来,对所学C语言的知识一次小的初步检验,要求我们要不断积累经验,不断的总结经验,吸取教训,以至不断地完善自己。在此次课程设计中我也看到了我的不足,对课本知识还不够熟练,就快要考试了,也就只能查漏补缺了。希望是及时发现,能来得及补上。总之,经过这次课程设计,使我加深了对C语言的了解,更是加强了我对C语言的兴趣,因为就那不多的源代码程序,就能实现一个相当大的功能,这使我不得不佩服啊。可以认为使获益匪浅的,以后也加大努力学好C+,我并不是希望能成为一位软件工程师或是其他的什么网络编译高手,而是自己的兴趣所趋,有点这方面的好奇,想去探索。八、参考资料C程序设计 清华大学出版社 谭浩强C语言程序设计 电子工业出版社 张泽虹九、附录(源代码)/*头文件(.h)*/#include stdio.h /*I/O函数*/#include stdlib.h /*标准库函数*/#include string.h/*字符串函数*/#include ctype.h /*字符操作函数*/#define M 50 /*定义常数表示记录数*/typedef struct /*定义数据结构*/ char name20; /*姓名*/ char units30; /*单位*/ char tele10; /*电话*/ADDRESS;/*以下是函数原型*/int enter(ADDRESS t); /*输入记录*/void list(ADDRESS t,int n); /*显示记录*/void search(ADDRESS t,int n); /*按姓名查找显示记录*/int delete(ADDRESS t,int n); /*删除记录*/int add(ADDRESS t,int n); /*插入记录*/void save(ADDRESS t,int n); /*记录保存为文件*/int load(ADDRESS t); /*从文件中读记录*/void display(ADDRESS t); /*按序号查找显示记录*/void sort(ADDRESS t,int n); /*按姓名排序*/void qseek(ADDRESS t,int n); /*快速查找记录*/void copy(); /*文件复制*/void print(ADDRESS temp); /*显示单条记录*/int find(ADDRESS t,int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*/*主函数开始*/main() int i; ADDRESS adrM; /*定义结构体数组*/ int length; /*保存记录长度*/ clrscr(); /*清屏*/ for(;)/*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ case 0:length=enter(adr);break;/*输入记录*/ case 1:list(adr,length);break; /*显示全部记录*/ case 2:search(adr,length);break; /*查找记录*/ case 3:length=delete(adr,length);break; /*删除记录*/ case 4:length=add(adr,length); break; /*插入记录*/ case 5:save(adr,length);break; /*保存文件*/ case 6:length=load(adr); break; /*读文件*/ case 7:display(adr);break; /*按序号显示记录*/ case 8:sort(adr,length);break; /*按姓名排序*/ case 9:qseek(adr,length);break; /*快速查找记录*/ case 10:copy();break; /*复制文件*/ case 11:exit(0); /*如返回值为11则程序结束*/ /*菜单函数,函数返回值为整数,代表所选的菜单项*/menu_select() char s80; int c; gotoxy(1,25);/*将光标定为在第25行,第1列*/ printf(press any key enter menu.n);/*提示压任意键继续*/ getch(); /*读入任意字符*/ clrscr(); /*清屏*/ gotoxy(1,1); printf(*MENU*nn); printf( 0. Enter recordn); printf( 1. List the filen); printf( 2. Search record on namen); printf( 3. Delete a recordn); printf( 4. add record n); printf( 5. Save the filen); printf( 6. Load the filen); printf( 7. display record on ordern); printf( 8. sort to make new filen); printf( 9. Quick seek recordn); printf( 10. copy the file to new filen); printf( 11. Quitn); printf(*n); do printf(n Enter you choice(011):); /*提示输入选项*/ scanf(%s,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整型数*/ while(c11); /*选择项不在011之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/int enter(ADDRESS t) int i,n; char *s; clrscr(); /*清屏*/ printf(nplease input num n); /*提示信息*/ scanf(%d,&n); /*输入记录数*/ printf(please input record n); /*提示输入记录*/ printf(name unit telephonen); printf(-n); for(i=0;in;i+) scanf(%s%s%s,,ti.units,ti.tele); /*输入记录*/ printf(-n); return n; /*返回记录条数*/*显示记录,参数为记录数组和记录条数*/void list(ADDRESS t,int n) int i; clrscr(); printf(nn*ADDRESS*n); printf(name unit telephonen); printf(-n);/*显示所有记录*/*/* */* */* / TODO: add your code here */* */* */*/ for(i=0;in-1) /*如果整数i值大于n-1,说明没找到*/ printf(not foundn); else print(ti); /*找到,调用显示函数显示记录*/*显示指定的一条记录*/void print(ADDRESS temp) clrscr(); printf(nn*n); printf(name unit telephonen); printf(-n); printf(%-20s%-30s%-10sn,,temp.units,temp.tele); printf(*end*n);/*查找函数,参数为记录数组和记录条数以及姓名s */int find(ADDRESS t,int n,char *s) int i; for(i=0;in-1) /*如果in-1超过了数组的长度*/ printf(no found not deletedn); /*显示没找到要删除的记录*/ else print(ti); /*调用输出函数显示该条记录信息*/ printf(Are you sure delete it(1/0)n); /*确认是否要删除*/ scanf(%d,&ch); /*输入一个整数0或1*/ if(ch=1) /*如果确认删除整数为1*/ /*删除该记录,实际后续记录前移*/ /*/ /* */ /* */ /* / TODO: add your code here */ /* */ /* */ /*/ for(j=i+1;j=i;j-) /*从最后一个结点开始向后移动一条*/ strcpy(tj+1.name,); /*当前记录的姓名拷贝到后一条*/ strcpy(tj+1.units,tj.units); /*当前记录的单位拷贝到后一条*/ strcpy(tj+1.tele,tj.tele); /*当前记录的电话拷贝到后一条*/ strcpy(,); /*将新插入记录的姓名拷贝到第i个位置*/ strcpy(ti.units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/ strcpy(ti.tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/ n+; /*记录数加1*/ return n; /*返回记录数*/*保存函数,参数为结构体数组和记录数*/void save(ADDRESS t,int n) int i; FILE *fp; /*指向文件的指针*/ if(fp=fopen(record.txt,wb)=NULL) /*打开文件,并判断打开是否正常*/ printf(can not open filen);/*没打开*/ exit(1); /*退出*/ printf(nSaving filen); /*输出提示信息*/ fprintf(fp,%d,n); /*将记录数写入文件*/ fprintf(fp,rn); /*将换行符号写入文件*/ for(i=0;in;i+) fprintf(fp,%-20s%-30s%-10s,,ti.units,ti.tele);/*格式写入记录*/ fprintf(fp,rn); /*将换行符号写入文件*/ fclose(fp);/*关闭文件*/ printf(*save success*n); /*显示保存成功*/*读入函数,参数为结构体数组*/int load(ADDRESS t) int i,n; FILE *fp; /*指向文件的指针*/ if(fp=fopen(record.txt,rb)=NULL)/*打开文件*/ printf(can not open filen); /*不能打开*/ exit(1); /*退出*/ fscanf(fp,%d,&n); /*读入记录数*/ for(i=0;i=0&idn) /*判断序号是否在记录范围内*/ fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/ print(tid); /*调用输出函数显示该记录*/ printf(rn); else printf(no %d number record!n ,id); /*如果序号不合理显示信息*/ fclose(fp); /*关闭文件*/*排序函数,参数为结构体数组和记录数*/void sort(ADDRESS t,int n) int i,j,flag; ADDRESS temp; /*临时变量做交换数据用*/*根据姓名进行排序*/*/* */* */* / TODO: add your code here */* */* */*/ for(i=0;in;i+) flag=0; /*设标志判断是否发生过交换*/ for(j=0;j0) /*比较大小*/ flag=1; strcpy(,); /*交换记录*/ strcpy(temp.units,tj.units); strcpy(temp.tele,tj.tele); strcpy(,tj+1.name); strcpy(tj.units,tj+1.units); strcpy(tj.tele,tj+1.tele); strcpy(tj+1.name,); strcpy(tj+1.units,temp.units); strcpy(tj+1.tele,temp.tele); if(flag=0)break; /*如果标志为0,说明没有发生过交换循环结束*/ printf(sort sucess!n); /*显示排序成功*/*快速查找,参数为结构体数组和记录数*/void qseek(ADDRESS t,int n) char s20; int l,r,m; printf(nPlease sort before qseek!n); /*提示确认在查找之前,记录是否已排序*/ printf(please enter name for qseekn); /*提示输入*/ scanf(%s,s); /*输入待查找的姓名*/ l=0;r=n-1; /*设置左边界与右边界的初值*/ while(l=r) /*当左边界=右边界时*/ m=(l+r)/2; /*计算中间位置*/ if(strcmp(,s)=0) /*与中间结点姓名字段做比较判是否相等*/ print(tm); /*如果相等,则调用print函数显示记录信息*/ return ; /*返回*/

温馨提示

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

评论

0/150

提交评论