C语言程序设计课件 第12章_第1页
C语言程序设计课件 第12章_第2页
C语言程序设计课件 第12章_第3页
C语言程序设计课件 第12章_第4页
C语言程序设计课件 第12章_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第12章模块化程序设计实战12.1模块化程序设计基础12.2模块化程序设计示例本章小结

12.1模块化程序设计基础

C语言是结构化程序设计语言,它的程序设计特点就是以函数为主要模块的模块化程序设计。

1.函数和模块

在使用C语言进行模块化程序设计时,一般把逻辑功能完全独立或相对独立的程序部分设计成函数,也叫子程序,这是一段可重复使用的代码。每个函数只完成一个功能,作为程序的一个功能模块。函数的使用既符合只有一个入口和出口的结构化程序设计原则,又特别适合开发多功能大型程序。

2.文件

C程序文件按后缀分为“.c”和“.h”的两类文件。“.c”文件为包含实际程序代码的基本程序文件。“.h”文件称为头文件,一般包含类、子程序、变量和其他标识符的前置声明。

头文件内容的安排可遵循如下原则:

(1)头文件应该只包含所需的内容,例如宏定义、结构类型声明、函数声明等,而不包含具体实现。

(2)头文件可以包括各种公用的类型定义。

(3)头文件可以包括各种公用的宏定义,必要的时候可添加一些注释以解释头文件的作用、包含的内容、使用方法等。

(4)只用文件包含命令(#include)包含“.h”头文件,不用它包含“.c”程序文件。

头文件编写的注意事项如下:

(1)把所有公用的类型定义、公用的结构、联合和枚举声明、公用的宏定义放在适当的头文件中,提供给各个文件参考。

(2)如果只有一个文件需要某个标准头文件,则不要将它放在公用的头文件中,应让这个源程序文件直接包含它,以提高编译效率。

(3)避免头文件之间的循环依赖,因为头文件之间的循环依赖可能导致编译错误或者难以排查的问题。

(4)不要对头文件重复编译。

一个实用的系统一般都会由多个文件组成,文件的组织可遵循如下原则:

首先根据程序的规模和功能将程序划分为多个子模块,并建立一个或多个“.c”文件容纳这些子模块。这些文件可以包含一个或多个函数模块,如果函数模块较为复杂,则可将其单独置于一个文件中。例如,主函数通常放在一个单独的文件中,用来控制程序的流程;与输入和输出有关的功能可以放在一个文件中;同类型的功能可以放在一个文件中,如下节例12-1中的增、删、改查这类操作。

然后根据源程序的文件数量和功能,设计相应的头文件。

12.2模块化程序设计示例

例12-1编写一个小型学生成绩管理系统,该系统主要实现如下功能:

(1)存储功能:用结构类型数组存储记录。每一条记录包括一个学生的学号、姓名、课程成绩等。

(2)输入功能:可以一次完成若干条记录的输入。

(3)显示功能:显示全部学生记录。

(4)查找功能:按学号查找学生记录并显示。

(5)排序功能:按总分排序或按学号排序。

(6)插入功能:指定位置插入一条学生记录。

(7)删除功能:能删除指定记录。

(8)导入功能:能将学生数据保存到文件中,能将文件中的数据导入。

本例中要实现的功能即对程序的“需求”。在确定好需求之后,就可以开始对系统进行整体架构设计。要实现题目要求的所有功能,必须编写多个功能函数模块。系统功能模块图如图12-1所示。

图12-1系统功能模块图

1.菜单设计

2.数据存储方式及定义

学生的成绩等信息用结构类型数组进行存储。建立学生信息数据结构structstudent,该结构包括学号、姓名、成绩、总分、平均分、名次。

3.函数设计

在进行以函数为主要模块的程序设计时,需要注意以下几点:

(1)将程序按功能划分成多个模块,每个模块负责一个具体的功能。要确保模块之间的功能具有独立性和内聚性,减少模块间的耦合度。

(2)在实现模块时,遵循一致的编码风格和规范,提高代码的可读性和可维护性。函数模块的命名应该清晰,做到看见函数名即可了解大概功能。

(3)尽量避免使用全局变量,减少模块间的依赖关系。

(4)应做到“边写边测试”,在实现一个功能后,及时测试是否存在漏洞,避免在整合模块后出错却无迹可寻。

1)输入函数

输入函数原型如下

intinput(STUDENT*stud,intn);

输入函数的流程图如图12-2所示。

图12-2输入函数的流程图

2)显示函数

显示函数原型如下:

voidprint(STUDENT*stud,intn);

该函数的功能是将stud指向的n条学生记录显示出来。

3)排序函数

排序函数原型如下:

voidsort(STUDENT*stud,intn);

该函数的功能是将stud指向的n条学生记录按照学号或者总分进行排序。

排序函数的流程图如图12-3所示。

图12-3排序函数的流程图

4)查找函数

查找函数原型如下:

voidsearch(STUDENT*stud,intn);

该函数的功能是在stud指向的n条学生记录中查找指定学号的学生记录。

5)插入函数

插入函数原型如下:

intinsert(STUDENT*stud,intn);

该函数的功能是在stud指向的n条学生记录中插入一条新记录,根据学号大小将新记录排于适当位置。

插入函数的流程图如图12-4所示。

图12-4插入函数的流程图

6)删除函数

删除函数原型如下:

intDelete(STUDENT*stud,intn);

该函数的功能是在stud指向的n条学生记录中删除指定学号的学生记录。

删除函数的流程图如图12-5所示。

图12-5删除函数的流程图

7)保存数据到文件函数

保存数据到文件函数原型如下:

voidfileWrite(STUDENT*stud,intn);

该函数的功能是将stud指向的n条学生记录存入指定的文件。

保存数据到文件函数的流程图如图12-6所示。

图12-6保存数据到文件函数的流程图

8)从文件导入数据

从文件导入数据函数原型如下:

intfileRead(STUDENT*stud);

该函数的功能是将文件中的数据导入stud指向的结构类型数组中,并返回读取记录的条数。

从文件导入数据函数的流程图如图12-7所示。

图12-7从文件导入数据函数的流程图

4.文件设计

表12-1给出了程序的文件及函数组成。

1)头文件sms_struct.h

2)主函数文件sms_main.c

3)输入/输出记录文件sms_IOfunc.c

4)排序文件sms_sort.c

5)增、删、改、查记录文件sms_CRUD.c

温馨提示

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

最新文档

评论

0/150

提交评论