您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C实训电子通讯管理系统演示
《程序设计基础》课程设计模块化程序设计步骤问题定义算法设计流程图设计编写程序代码测试与调试1问题定义根据用户提出的问题,认真分析,并明确需要做什么,然后给出清晰、准确的问题描述和功能要求。在问题描述中还需要给出解决问题中的输入、结果的输出等问题。问题定义本系统应具备以下功能:创建通讯录显示通讯录内容按字段查询通讯录修改通讯录中的指定记录添加通讯录记录删除通讯录中的指定记录对通讯录中的记录按字段进行排序(升序、降序)2算法设计算法:为了解决某一个问题而建立的计算机求解的步骤。在设计一个较大问题的算法时,应采用模块化的程序设计方法,即将较大的任务按照一定的原则分为较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,而且容易理解。模块图一般从上到下进行,而且最上面一层的模块是主模块,下面的各层模块是其上一层模块的逐步细化2.1算法设计---模块图2.2算法设计—数据结构根据用户以及通讯录的一般情况,可以假定通讯录中每条记录包括以下三项:学号姓名电话号码算法设计为实现上述记录的存储,必须定义一种数据结构来完成任务。可以使用结构体数组来实现。structstudent{charnum[10];charname[10];chartel[10];};2.3算法设计-菜单设计2.4算法设计-各功能模块(函数)设计创建通讯录函数-mycreat()算法步骤:输入学生的学号、姓名和电话,并将这些信息保存在结构体数组中。每输入一组数据,记录数加1。算法设计-各功能模块(函数)设计根据实际记录条数,使用循环将结构体数组中的各个元素按照一定的格式依次输出到屏幕。显示通讯录函数-mydisplay()算法设计-各功能模块(函数)设计按学号查询按姓名查询if(按学号查询)调用按学号查询函数-sch_num()elseif(按姓名查询)调用按姓名查询函数-sch_name()else显示非法选项的信息查询通讯录函数-mysearch()输入需修改记录的学号;使用循环在结构体数组中查找到该学号的元素;将输入的新数据替代原有数据。算法设计-各功能模块(函数)设计修改通讯录函数-mymodify()输入一个新学号及其它相关信息;判断输入的学号在数组中是否存在;若不存在,再将输入的信息添加到结构体数组中,记录数加1;若存在,则需重新输入学号。算法设计-各功能模块(函数)设计添加通讯记录函数-myadd()按学号删除按姓名删除if(按学号删除)调用按学号删除的del_num函数elseif(按姓名删除)调用按姓名删除的del_name函数else显示非法选项的信息算法设计-各功能模块(函数)设计删除通讯录记录函数-mydelete()按学号排序按姓名排序if(按学号排序)调用按学号排序的sort_num函数elseif(按姓名排序)调用按姓名排序的sort_name函数else显示非法选项的信息算法设计-各功能模块(函数)设计通讯录记录排序函数-mysort()3流程图设计流程图常用符号流程图设计-主函数()流程图设计流程图设计-mycerat()与mydisplay()函数流程图设计-mysearch()函数流程图设计sch_num()的流程sch_nam()的流程流程图设计-mymodify()函数流程图设计-myadd()函数流程图设计-mydelete()函数流程图设计–del_num()函数流程图设计–mysort()函数流程图设计–sort_name()函数4编写程序代码使程序具有良好的程序设计风格。合理安排各成分的位置。一般#include命令行在程序的最前面,接着依次为#define命令行、类型声明(如结构体类型声明)、函数原型、各函数等。适当加注释。一般在程序的开头加注释解释本程序的功能和一些说明,在函数或程序段的开头加注释解释其要实现的功能、算法、参数等,在变量的定义行后面解释该变量的用途等。程序中适当加上空行。在命令行和类型声明之间、类型声明和函数原型之间、函数原型与函数定义之间、函数内部变量定义与其下执行语句之间均空一行,有些地方视情况可空两行。编写程序代码使程序具有良好的程序设计风格。采用缩进格式。一般用Tab键将某些行向右缩格,这样可使程序的逻辑结构更加清晰,层次分明,显著提高程序的可读性。标识符要见名知意。可用英文单词、拼音或缩写作为标识符的一部分。一般标识符的第一个字符用小写字母,其余的字符用小写字母、数字或下划线。一行写一条语句。算法简单明了。尽量采用简单易懂的算法,不使用过分复杂的算法。编写程序代码用户界面友好。一般使用计算机解决问题时,采用人机对话形式。当要求用户输入数据时,给出提示信息,而且输入格式要一致,如果用户误操作,输入的数据有错误,则应进行相应的处理,保证软件不崩溃(即使程序具有健壮性)。输出数据时适当控制输出格式,使显示的数据清晰、美观,当然可以设计图形用户界面。风格好的程序清晰、易懂,对程序的调试和维护将带来很大方便。需要注意的是在编写代码时,应时刻注意程序设计风格。编写程序-主函数一般情况下,都是在主函数中调用其他功能函数。为了能够测试主函数,可在调用函数的位置处先用空函数占位。每编写好一个函数,再用相应的调用语句取代对应的空函数。编写程序-myprint()函数此函数不需要传递参数,也不需要再定义任何变量。函数首部:voidmyprint()编写程序-mycreat()函数该函数需要个参数:2structstudent类型的指针,指向存放学号、姓名、电话号码的数组;int型指针,用于统计记录个数。voidmydisplay(structstudent*p,intn)编写程序-mydisplay()函数structstudent类型的指针,指向存放学号、姓名、电话号码的数组。int型变量,用于接受实参传递的记录个数。该函数需要个参数:2编写程序-mysearch()函数该函数需要个参数:2structstudent类型的指针,指向存放学号、姓名、电话号码的数组;int型变量,用于接受实参传递的记录个数。voidmysearch(structstudent*p,intn);voidsch_num(structstudent*p,intn);voidsch_name(structstudent*p,intn);编写程序-mymodify()函数该函数需要个参数:2structstudent类型的指针,指向存放学号、姓名、电话号码的数组;int型变量,用于接受实参传递的记录个数。voidmymodify(structstudent*p,intn);编写程序-myadd()函数该函数需要个参数:2structstudent类型的指针,指向存放学号、姓名、电话号码的数组;int型指针,用于统计记录个数。voidmyadd(structstudent*p,int*n);编写程序-mydelete()函数该函数需要个参数:2structstudent类型的指针,指向存放学号、姓名、电话号码的数组;int型指针,用于统计记录个数。voidmydelete(structstudent*p,int*n);voiddel_num(structstudent*p,int*n);voiddel_name(structstudent*p,int*n);编写程序-mysort()函数该函数需要个参数:2structstudent类型的指针,指向存放学号、姓名、电话号码的数组;int型变量,用于接受实参传递的记录个数。voidmysort(structstudent*p,intn);voidsort_num(structstudent*p,intn);voidsort_name(structstudent*p,intn);5测试与调试测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、顺手多加“;”或粗心少加“{}”等,而调试则是确定测试中找到的错误性质,并改正错误的过程。测试与调试通常交替进行。测试——调试——再测试——再调试。测试与调试能暴露出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序需要测试用例,测试用例可用如下公式表示:测试用例=测试数据+预期结果测试与调试程序测试与调试的首要工作是,用合适的测试用例检查程序的正确性和完整性。按照题目的具体情况,在需要输入数据的地方,选定两大类的测试数据:一类为合法数据,用来测试程序的正确性和完整性。一类为非法数据,用来测试程序的容错能力和健壮性。测试步骤模块测试:就是分别对各个模块进行的测试的过程。在编写一个模块后应立即对其进行测试,因为这时对该模块记忆深刻,而且一个模块相对小,所以容易构造测试数据,能方便地检查和改正错误。组装测试:就是把所有模块(应该是已通过模块测试的模块)按预先制定的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控制信息,因此组装测试的主要任务是发现模块接口中的错误。确认测试:是测试的最后一个步骤,一般将软件交付用户之前,确认是否确实满足用户要求,通常使用接近实际的用例。通讯录程序中的菜单需要输出主菜单选择界面;菜单应根据用户的选择做出不同反应;具有重复选择主菜单选项的功能(使用循环结构);为用户提供程序正常结束的出口。附:主菜单的制作方法主菜单的制作本例需要输出主菜单界面,简单菜单的制作可使用printf函数实现。用printf函数将菜单项逐一打印到屏幕上,界面中的边框可通过printf函数输出的“|”和“-”拼接起来。菜单应根据用户的选项做出不同的反应,因此,需要使用分支结构实现选择的功能。本例使用switch语句最为合适。主菜单的制作因为本例具有重复选择主菜单选项的功能,所以一定要使用循环结构。☻由于主菜单至少要显示1次,所以使用do-while循环较好。菜单还要给用户一个正常的出口,即满足一定条件时退出循环。☻当用户选择某一菜单后,系统立即完成相应的操作,然后询问是否需要继续,并根据用户输入的信息(Y/y,N/n),使主菜单反复出现或退出主菜单。getchar()、getch()与getche()调用getchar()时,用户输入的字符显示在屏幕上,而且要等待用户输入回车符后才运行。调用getch()时,用户输入的字符不显示在屏幕上,而且不等待用户输入回车就运行。调用getche()时,用户输入的字符显示在屏幕上,也不等待用户输入回车就运行。基本语句的使用一般情况下,菜单都是分级嵌套在一起的。在菜单设计中除了要考虑怎样从主菜单进入子菜单,还要考虑如何从子菜单逐级返回主菜单。菜单的制作
本文标题:C实训电子通讯管理系统演示
链接地址:https://www.777doc.com/doc-60741 .html