
模块化程序设计实例.doc
21页9 .5 模块化程序设计实例《程序设计基础》(基于C语言讲解) 石光华 编著 —北京: 清华大学出版社下面以设计一个简单的成绩管理软件为例,一步一步地按模块化程序设计方法进行设计1 .定义问题设计一个成绩管理软件,其基本功能包括:输入成绩,成绩加分,计算平均成绩,找出最高分,找出最低分,输出成绩等2 .确定组成程序的模块根据成绩管理软件的功能,确定软件的基本模块包括:输入模块,加分模块,平均分模块,最高分模块,最低分模块,输出模块等142 程序设计基础3 .绘制程序结构图成绩管理软件的结构图如图9-5所示图9-5 成绩管理软件结构图4 .流程图用流程图确定主程序的逻辑结构,如图9-6所示在流程图中,istate 的作用是记录是否已经输入成绩istate 的使用有如下两种方式1) 作为全局变量使用此时istate可以在所有模块中改变其值,主程序更简洁,但可能产生边际效应2) 作为主程序的局部变量使用此时istate只能在主程序中改变其值在主程序中可以直观地看到其变化,能够防止边际效应采用方式(2)的主程序如下include < stdio .h>#define SIZE 10void main(){int iscore[SIZE] ={0};int key= - 1;int iresult=0;float fresult=0;int istate=0;printf(″1:Input scores;\n″);第9章 模块化程序设计 143图9-6 成绩管理软件主程序流程图printf(″2:Output scores;\n″);printf(″3:Count for the max score;\n″);printf(″4:Count for the minimum score;\n″);printf(″5:Count for the total score;\n″);printf(″6:Count for theaverage score;\n″);printf(″- 1:Exit .\n″);while(1){printf(″Please input your choose:″);scanf(″%d″,&key);if (key = = - 1)144 程序设计基础break;switch(key){case1:istate=input_all_numbers(iscore,SIZE);break;case2:if (istate = =0)printf(″ERROR:You must input scoresfirst ! \n″);elseoutput_all_numbers(iscore,SIZE);break;case3:if (istate = =0)printf(″ERROR:You must input scoresfirst ! \n″);else{iresult=count_for_max(iscore,SIZE);printf(″the max score is %d\n″,iresult);}break;case4:if (istate = =0)printf(″ERROR:You must input scoresfirst ! \n″);else{iresult=count_for_min(iscore,SIZE);printf(″the min score is %d\n″,iresult);}break;case5:if (istate = =0)printf(″ERROR:You must input scoresfirst ! \n″);else第9章 模块化程序设计 145{iresult=count_for_total(iscore,SIZE);printf(″the total score is %d\n″,iresult);}break;case6:if (istate = =0)printf(″ERROR:You must input scoresfirst ! \n″);else{fresult=count_for_average(iscore,SIZE);printf(″the average score is % .2f\n″,fresult);}break;default:printf(″ERROR:Input error,please input again! \n″);}}}5 .编写算法为程序结构图中每个模块编写算法。
在前面的学习中,已经学过如何加分,计算平均分,以及查找最高、最低分,在这里就不再画出流程图了6 .审查算法最后审查整个算法,直到没有任何逻辑错误7 .编程调试审查算法后,即可进行编程调试例9-12】 成绩管理软件的完整程序/ *name:a management system about scores*// *creat:stone,2004/ 3/ 8*/146 程序设计基础/ *modify:stone,2004/ 3/ 20*// *version:1 .0#include < stdio .h>#define SIZE 5 / *定义成绩个数的符号常量*/int input_all_numbers(int iscore[],int isize);void output_all_numbers(int iscore[],int isize);int count_for_max(int iscore[],int isize);int count_for_min(int iscore[],int isize);int count_for_total(int iscore[],int isize);floatcount_for_average(int iscore[],int isize);void main(){int iscore[SIZE] ={0};int key= - 1;int iresult=0;float fresult=0;/ *用于区分是否已经输入数据的标志,0表示未输入,1表示已经输入*/int istate=0;/ *主菜单,可以选择完成不同的成绩统计功能*/printf(″**********************************************\n″);printf(″This is a management system about scores .\n\t\tWELCOME ! \n″);printf(″**********************************************\n″);printf(″1:Input scores;\n″);printf(″2:Output scores;\n″);printf(″3:Count for the max score;\n″);printf(″4:Count for the minimum score;\n″);printf(″5:Count for the total score;\n″);printf(″6:Count for theaverage score;\n″);printf(″- 1:Exit .\n″);while(1){printf(″Please input your choose:″);scanf(″%d″,&key);/ *根据输入选择的不同,分别进行不同的处理*/第9章 模块化程序设计 147if (key = = - 1)break;switch(key){case 1:istate=input_all_numbers(iscore,SIZE);break;case 2:if (istate = =0)printf(″ERROR:You must input scores first ! \n″);elseoutput_all_numbers(iscore,SIZE);break;case 3:if (istate = =0)printf(″ERROR:You must input scoresfirst ! \n″);else{iresult=count_for_max(iscore,SIZE);printf(″the max score is %d\n″,iresult);}break;case 4:if (istate = =0)printf(″ERROR:You must input scores first ! \n″);else{iresult=count_for_min(iscore,SIZE);printf(″the min score is %d\n″,iresult);}break;case 5:if (istate = =0)printf(″ERROR:You must input scores first ! \n″);148 程序设计基础else{iresult=count_for_total(iscore,SIZE);printf(″the total score is %d\n″,iresult);}break;case 6:if (istate = =0)printf(″ERROR:You must input scores first ! \n″);else{fresult=count_for_average(iscore,SIZE);printf(″the average score is % .2f\n″,fresult);}break;default:printf(″ERROR:Input error,please input again! \n″);}}}/ *功能: 输入学生成绩*/int input_all_numbers(int iscore[],int isize){int iindex=0;printf(″please input %d scores:\n″,isize);for(iindex=0; iindex {scanf(″%d″,&iscore[iindex]);}return1;}/ *功能: 输出学生成绩*/第9章 模块化程序设计 149void output_all_numbers(int iscore[],int isize){int iindex=0;for(iindex=0; iindex {printf(″iscore[%2d] = %3d\n″,iindex,iscore[iindex]);}}/ *功能: 计算最高分*/int count_for_max(int iscore[],int isize){int imax=iscore[0];int iindex=0;for(iindex=0; iindex {if (imax
