C语言程序设计 通讯录程序

  • 格式:doc
  • 大小:628.00 KB
  • 文档页数:28

目录:课程设计任务书 ......................................... 错误!未定义书签。

目录: (1)一、目的 (2)二、基本情况 (2)三、时间安排 (3)四、设计和调试过程规范化要求 (3)五、设计内容和设计要求 (4)六、考核方式 (5)一通讯录的主要功能: (6)一、问题描述: (6)二、功能要求: (6)三、算法提示: (6)四、测试数据: (7)二、课题的主要功能模块划分: (7)三、主要功能的实现 (8)一、按名字查找显示函数void search( ) (15)二、快速查找函数:void qseek( ) (15)四、程序调试: (16)五、总结 (18)六、源程序 (19)机械工程学院课程设计评分表 ............................. 错误!未定义书签。

前言《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。

是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,课程设计的课题比平时的习题复杂得多,也更接近实际。

课程设计着眼于理论与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养程序设计工作所需要的知识综合能力和动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。

为了达到上述目的,本课程设计安排了15个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。

学生选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。

学习委员将课程设计报告与磁盘(缺一不可)收齐后交指导老师。

一、目的全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。

二、基本情况课程类别:必修课课程学分:1学分课程学时:1周课程对象:汽服0901三、时间安排第一周周日上午 8:00—12:00 (查阅相关资料并开始编写源程序)第二周周一下午 14:00—18:00 (完成源程序编写调试运行课程设计报告)周三上午8:00—12:00 (完成课程设计报告以及答辩)四、设计和调试过程规范化要求1)需求分析分析系统功能需求以及用户操作流程。

2)概要设计在需求分析的基础上,确定系统总体框架(系统功能结构图)。

3)详细设计定义数据存储结构,并设计实现系统功能的具体算法,画出各算法的工作流程图。

4)代码设计根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后还可以返回到主菜单,继续选择其他功能执行。

源程序要求书写规范,结构清晰。

重点函数的重点变量,重点功能部分均要求给出清晰的程序注释。

5)程序调试程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。

如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和改正。

如果程序能够基本正确地运行,可考虑增加若干基本的容错功能(如避免用户操作错误时程序出现死循环等);另外尽量对现有算法给出改进方案,并比较不同算法之间的优缺点。

五、设计内容和设计要求1.设计内容:设计与开发一个通讯录管理系统,对通讯录中的姓名、单位、电话、QQ 、mail等基本信息进行管理、主要功能如下:1).输入记录;2).显示记录;3).按姓名查找显示记录;4).删除记录;5).插入记录;6).记录保存为文件;7).从文件中读记录;8).按姓名排序;9).显示单条记录;2.设计要求:1).设计正确,方案合理。

2).界面友好,使用方便。

3).程序精炼,结构清晰。

4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。

5).实际操作过程中遇到的问题及解决方法:设计总结及心得体会.6).上机演示。

附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。

正文总字数要求在5000字以上(不含程序原代码)。

六、考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。

具体考核标准包含以下几个部分:1)平时出勤(占10%)2)系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)3)程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)4)设计报告(占30%)5)独立完成情况(占10%)。

一通讯录的主要功能:一 . 问题描述:一有个通讯录,要求该系统对通讯录的姓名,单位,电话,进行输入,显示,查找,删除,插入,保存等操作的管理。

二 . 功能要求:1,本系统采用一个结构体数组,每个数据的结构应包括;姓名,单位,电话名称。

2,本系统显示这样的菜单请选择系统功能项a 输入记录;b 显示全部纪录;c 查找记录;d 删除记录;e 插入记录;f 保存文件;g 读文件:(1)按序号显示记录;(2)按姓名排序;(3)快速查找记录;(4)复制文件。

三算法提示:1.数据结构;结构体类型数组。

2.数据库结构;下表构成该系统的基本数据库。

四测试数据:二、课题的主要功能模块划分:三、主要功能的实现程序设计一般由两部分组成算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性,在通讯录管理程序中由于预计记录数相对于一个单位的学生人数或职工人数来说不会太大除了能够增加、删除、保存等外更多的情况是查询,且能够实现快速查询。

所以选用静态数组保存数据实现多种查询方式。

1 数据结构由于使用静态数组需要预先估计记录数,所以先预定义一个常数M表示记录,也就是数组的大小,记录联系人的信息至少应有姓名、单位、电话。

所以定义每个数组元素的类型为结构体。

由于数组存储是采用顺序存放在内存空间中占用连续空间,所以若干条记录通讯录的管理实质就是对顺序存储的线性表的管理结点结构如下:#define M 50 /*估计的记录数*/typedef struct{char name[20]; /*姓名*/char units[30]; /*单位*/char tele[10]; /*电话*/}ADDRESS; /*结构体类型名*/2 main()主函数程序采用模块化设计,主函数是程序的入口各模块独立。

可分块调试均由主函数控制调用控制功能的实现通过循环执行一个开关语句,该语句的条件值是通过调用主菜单函数得到的返回值,根据该值调用相应的各功能函数。

同时设置一个断点。

即当返回值为一定条件时运行e xit()函数结束程序,以免造成死循环。

10-1图输出界面3 menu_select()主菜单直接利用输出函数printf 输出字符串在屏幕上显示一个菜单并显示一个提示输入选项输入0~11 之间的数字,将此数字作为菜单函数的返回值返回主函数,主函数根据这个数字调用相应的功能函数,制作简便,操作简单界面如图10-2 所示:图10-2主菜单界面由于程序中很多地方用到了字符串输入语句会造成下一个字符不能正确读入为了在程序调用执行了各个函数后能够清晰地看到菜单并输入新的选项。

首先写了一条输出信息printf("press any key enter menu......\n")表示按任意键继续一条读字符语句g etch() 等待输入字符,按任意键即可进入主菜单,读者可以将这两条语句加上注释不执行来体会它的功能。

按照所见即所得的方式直接设计输出函数输出字符串达到菜单效果将精力主要放在程序功能的实现上利用d o循环语句一直执行s canf("%s" ,s)语句。

让用户输入0~11 之间的数按照字符串形式输入。

然后执行c=atoi(s) 将字符串转化为数字,返回主函数。

如果输入范围不是0~11,则循环等待重新输入。

既然是数字选项为什么不用整数格式输入而要按字符串输入。

再将其转换呢,如果按照整数格式输入,当用户输入了非数字字符。

例如a和b等由于类型不同将导致程序出错。

所以对于不参与运算的数据表面上看是数字也应将其设为字符处理。

例如电话号码,千万不要设为整数类型,程序设计技巧很多。

所以读者在编程调试中应注意并仔细体会。

4 enter()输入记录输入记录时按照一条一行的格式输入,每个数据之间用空格分隔,较为清晰且能直接反映数据之间的关系,但由于scanf 函数的特性,在输入时数据用回车分隔也是可以的,但与界面设计不吻合界面.由于记录并不是一次性全部输入而是随时填加和删除的,而预先开辟的空间数往往大于实际的记录数。

所以程序设计为首先输入准备输入的记录数n,然后用for 循环语句循环n 次输入记录,通讯录的每一条记录有三个字段都是字符串类用格式输入scanf("%s%s%s",t[i].name,t[i].units,t[i].tele)完成输入三个字段用空格分隔输入完一条按回车键继续输入下一条达到规定的记录数输入停止,返回记录数到主函数。

5 list()显示所有记录通讯录建立好后更频繁的操作是显示和查找记录本函数实现显示所有记录功能输出界面如图10-3所示图10-3输出界面将主函数传递过来的数组输出用for 循环,循环次数由参数长度决定,输出时,为了格式美观清晰设计一定的样式输出,注意利用格式输出函数根据字段的长度设定输出的长度,每输出10 个记录暂停一下,按任意键继续。

6 search()和f ind()查找记录查找指定姓名的记录采用顺序查找法,首先输入要查找记录的姓名;然后顺序查找结点,如果没找到,则输出没找到信息。