




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计基础课程设计,电子通讯录管理系统,模块化程序设计步骤,问题定义 算法设计 流程图设计 编写程序代码 测试与调试,1 问题定义,根据用户提出的问题,认真分析,并明确需要做什么,然后给出清晰、准确的问题描述和功能要求。在问题描述中还需要给出解决问题中的输入、结果的输出等问题。,问题定义,本系统应具备以下功能: 创建通讯录 显示通讯录内容 按字段查询通讯录 修改通讯录中的指定记录 添加通讯录记录 删除通讯录中的指定记录 对通讯录中的记录按字段进行排序 (升序、降序),2 算 法 设 计,算法:为了解决某一个问题而建立的计算机求解的步骤。,在设计一个较大问题的算法时,应采用模块化的程序设计方法
2、,即将较大的任务按照一定的原则分为较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,而且容易理解。,模块图一般从上到下进行,而且最上面一层的模块是主模块,下面的各层模块是其上一层模块的逐步细化,2.1 算 法 设 计-模块图,2.2 算法设计数据结构,根据用户以及通讯录的一般情况,可以假定通讯录中每条记录包括以下三项: 学号 姓名 电话号码,算法设计,为实现上述记录的存储,必须定义一种数据结构来完成任务。 可以使用结构体数组来实现。,struct student char num10; char name10; char tel10; ;,2.3 算法设计菜单
3、设计,2.4算法设计各功能模块(函数)设计,创建通讯录函数mycreat( ),算法步骤: 输入学生的学号、姓名和电话,并将这些信息保存在结构体数组中。 每输入一组数据,记录数加1。,算法设计各功能模块(函数)设计,根据实际记录条数,使用循环将结构体数组中的各个元素按照一定的格式依次输出到屏幕。,显示通讯录函数mydisplay( ),算法设计各功能模块(函数)设计,按学号查询 按姓名查询 if(按学号查询) 调用按学号查询函数sch_num( ) else if(按姓名查询) 调用按姓名查询函数sch_name( ) else 显示非法选项的信息,查询通讯录函数mysearch( ),输入需
4、修改记录的学号; 使用循环在结构体数组中查找到该学号的元素; 将输入的新数据替代原有数据。,算法设计各功能模块(函数)设计,修改通讯录函数mymodify( ),输入一个新学号及其它相关信息; 判断输入的学号在数组中是否存在; 若不存在,再将输入的信息添加到结构体数组中,记录数加1; 若存在,则需重新输入学号。,算法设计各功能模块(函数)设计,添加通讯记录函数myadd( ),按学号删除 按姓名删除 if (按学号删除) 调用按学号删除的del_num函数 else if (按姓名删除) 调用按姓名删除的del_name函数 else 显示非法选项的信息,算法设计各功能模块(函数)设计,删除通
5、讯录记录函数mydelete( ),按学号排序 按姓名排序 if (按学号排序) 调用按学号排序的sort_num函数 else if (按姓名排序) 调用按姓名排序的sort_name函数 else 显示非法选项的信息,算法设计各功能模块(函数)设计,通讯录记录排序函数mysort( ),3 流程图设计,流程图常用符号,流程图设计-主函数( ),流程图设计,流程图设计-mycerat( )与mydisplay( ) 函数,流程图设计 - mysearch( )函数,流程图设计,sch_num()的流程,sch_nam()的流程,流程图设计 - mymodify( )函数,流程图设计 - my
6、add( )函数,流程图设计 - mydelete( )函数,流程图设计 del_num( )函数,流程图设计 mysort( )函数,流程图设计 sort_name( )函数,4 编写程序代码,使程序具有良好的程序设计风格。 合理安排各成分的位置。一般#include命令行在程序的最前面,接着依次为#define命令行、类型声明(如结构体类型声明)、函数原型、各函数等。 适当加注释。一般在程序的开头加注释解释本程序的功能和一些说明,在函数或程序段的开头加注释解释其要实现的功能、算法、参数等,在变量的定义行后面解释该变量的用途等。 程序中适当加上空行。在命令行和类型声明之间、类型声明和函数原型
7、之间、函数原型与函数定义之间、函数内部变量定义与其下执行语句之间均空一行,有些地方视情况可空两行。,编写程序代码,使程序具有良好的程序设计风格。 采用缩进格式。一般用Tab键将某些行向右缩格,这样可使程序的逻辑结构更加清晰,层次分明,显著提高程序的可读性。 标识符要见名知意。可用英文单词、拼音或缩写作为标识符的一部分。一般标识符的第一个字符用小写字母,其余的字符用小写字母、数字或下划线。 一行写一条语句。 算法简单明了。尽量采用简单易懂的算法,不使用过分复杂的算法。,编写程序代码,用户界面友好。一般使用计算机解决问题时,采用人机对话形式。当要求用户输入数据时,给出提示信息,而且输入格式要一致,
8、如果用户误操作,输入的数据有错误,则应进行相应的处理,保证软件不崩溃(即使程序具有健壮性)。输出数据时适当控制输出格式,使显示的数据清晰、美观,当然可以设计图形用户界面。 风格好的程序清晰、易懂,对程序的调试和维护将带来很大方便。需要注意的是在编写代码时,应时刻注意程序设计风格。,编写程序主函数,一般情况下,都是在主函数中调用其他功能函数。为了能够测试主函数,可在调用函数的位置处先用空函数占位。每编写好一个函数,再用相应的调用语句取代对应的空函数。,编写程序myprint( )函数,此函数不需要传递参数,也不需要再定义任何变量。,函数首部: void myprint( ),编写程序mycrea
9、t( )函数,该函数需要 个参数:,2,struct student类型的指针,指向存放学号、姓名、电话号码的数组; int型指针,用于统计记录个数。,void mydisplay( struct student *p, int n),编写程序mydisplay( )函数,struct student 类型的指针,指向存放学号、姓名、电话号码的数组。 int型变量,用于接受实参传递的记录个数。,该函数需要 个参数:,2,编写程序mysearch( )函数,该函数需要 个参数:,2,struct student类型的指针,指向存放学号、姓名、电话号码的数组; int型变量,用于接受实参传递的记录
10、个数。,void mysearch( struct student *p, int n); void sch_num( struct student *p, int n); void sch_name( struct student *p, int n);,编写程序mymodify( )函数,该函数需要 个参数:,2,struct student类型的指针,指向存放学号、姓名、电话号码的数组; int型变量,用于接受实参传递的记录个数。,void mymodify( struct student *p, int n);,编写程序myadd( )函数,该函数需要 个参数:,2,struct st
11、udent类型的指针,指向存放学号、姓名、电话号码的数组; int型指针,用于统计记录个数。,void myadd( struct student *p, int *n);,编写程序mydelete( )函数,该函数需要 个参数:,2,struct student类型的指针,指向存放学号、姓名、电话号码的数组; int型指针,用于统计记录个数。,void mydelete( struct student *p, int *n); void del_num( struct student *p, int *n); void del_name( struct student *p, int *n)
12、;,编写程序mysort( )函数,该函数需要 个参数:,2,struct student类型的指针,指向存放学号、姓名、电话号码的数组; int型变量,用于接受实参传递的记录个数。,void mysort( struct student *p, int n); void sort_num( struct student *p, int n); void sort_name( struct student *p, int n);,5 测试与调试,测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、顺手多加“;”或粗心少加“ ”等,而调试则是确定测试中找到
13、的错误性质,并改正错误的过程。测试与调试通常交替进行。 测试调试再测试再调试。,测试与调试,能暴露出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序需要测试用例,测试用例可用如下公式表示: 测试用例=测试数据+预期结果,测试与调试程序,测试与调试的首要工作是,用合适的测试用例检查程序的正确性和完整性。按照题目的具体情况,在需要输入数据的地方,选定两大类的测试数据: 一类为合法数据,用来测试程序的正确性和完整性。 一类为非法数据,用来测试程序的容错能力和健壮性。,测试步骤,模块测试:就是分别对各个模块进行的测试的过程。在编写一个模块后应立即对其进行测试,因为这时对该模块记忆深刻,而且一
14、个模块相对小,所以容易构造测试数据,能方便地检查和改正错误。,组装测试:就是把所有模块(应该是已通过模块测试的模块)按预先制定的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控制信息,因此组装测试的主要任务是发现模块接口中的错误。,确认测试:是测试的最后一个步骤,一般将软件交付用户之前,确认是否确实满足用户要求,通常使用接近实际的用例。,通讯录程序中的菜单,需要输出主菜单选择界面; 菜单应根据用户的选择做出不同反应; 具有重复选择主菜单选项的功能(使用循环结构); 为用户提供程序正常结束的出口。,附:主菜单的制作方法,主菜单的制作,本例需要输出主菜单界面,简单菜单的制作可使用printf函数实现。 用printf函数将菜单项逐一打印到屏幕上,界面中的边框可通过printf函数输出的“|” 和“-”拼接起来。 菜单应根据用户的选项做出不同的反应,因此,需要使用分支结构实现选择的功能。本例使用switch语句最为合适。,主菜单的制作,因为本例具有重复选择主菜单选项的功能,所以一定要使用循环结构。 由于主菜单至少要显示1次,所以使用do-while循环较好。 菜单还要给用户一个正常的出口,即满足一定条件时退出循环。 当用户选择某一菜单后,系统立即完成相应的操作,然后询问是否需要继续,并根据用户输入的信息(Y/y, N/n),使主菜单反复出现或退出主菜单。,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度崇明区危化品运输车辆租赁合同范本
- 2025年度房产抵押贷款买卖合同书
- 2025春国家开放大学教育教学改革研究项目合同
- 二零二五年度铜管材购销合同模板
- 2025年防雷接地施工及维护一体化服务合同
- 2025版风机租赁与销售一体化服务合同模板
- 2025版个人二手房买卖协议含房屋质量保证期限及维修责任
- 2025版葡萄酒线上线下联合促销销售合同
- 2025版柴油市场调查与分析合同模板
- 2025年度海上货物运输合同-集装箱运输管理及安全协议
- 广西田林八渡金矿 资源储量核实报告
- (2025)新《公司法》知识竞赛题库(附含参考答案)
- 2025年度旅游景区安全生产管理协议3篇
- 《旅游公路设计指南》
- 初中语文名著阅读与写作教学整合策略探究
- 知识产权保护与监测管理制度
- 新版FMEA第五版2019版FMEA:设计DFMEA全解
- 腹膜透析护理查房
- 2024年设备监理师考试题库及参考答案
- 电力增容项目施工组织设计
- 信息技术项目技术管理办法
评论
0/150
提交评论