1.2.1 计算机求解问题的步骤
计算机可以快速地完成各种复杂的任务,并且可以存储大量信息。使用计算机作为工具,人们可以完成许多人力无法完成或很难完成的任务。计算机是在软件的控制下来完成各种任务的,换言之,如果我们想用计算机系统来实现对图书馆的管理工作,就需要编制一个软件(例如图书管理系统)来控制计算机的运行,从而实现图书管理系统的各种功能,实现图书馆工作高效有序可靠地进行。
利用计算机解决问题的软件开发方法通常包括以下几个步骤,如图1.2.1所示。整个过程由四个阶段组成。
图1.2.1 软件开发步骤
阶段1:确定程序的要求。
阶段2:设计和开发,该阶段包括分析问题、选择一个完整的解决方案的算法、编写程序、测试和修正程序几个步骤。
阶段3:文档编制。
阶段4:维护。
如图1.2.1所示,前三个阶段经常改进并相互影响,直到最终设计和程序被开发出来为止。而且在设计和开发阶段,你可能会发现需要解决的问题没有被完全地分析,需要在初期的步骤上进一步地分析和工作,才可完成程序。
1.确定程序的要求(阶段1)
这一阶段的任务是确保程序的要求被明确地表述,并且明白程序需要达到的目标(即得到一份对问题进行精确说明的报告,确定软件的功能需求和性能需求)是什么。例如,图书馆是大学生学习的资源宝库,书的种类数目、用户数目众多,如何编制一个软件来实现图书自动管理,提高图书的利用率呢?下边我们来熟悉一下借阅一本图书的过程,首先我们使用图书管理系统先查阅感兴趣的图书资料;其次,找到需要的图书时,办理相应的借阅手续;最后一个过程是图书的归还。此外,还需要图书馆工作人员对图书进行管理,比如新进图书的分类编号以及整理存放等。
由前述的流程可以看出,一个基本的图书管理系统包括借阅管理和图书管理两部分功能,其基本的功能结构图如图1.2.2所示。
图1.2.2 图书管理系统
其中,查阅图书部分实现根据用户输入信息查询相关图书信息和馆存情况的功能,从而便于读者找到所需要的图书;借阅图书部分主要记录读者借阅图书的信息,比如所借阅的图书书名、价格和借阅日期等;还书部分实现读者所借书籍的归还情况;退出指退出图书管理系统程序的运行,较为简单;系统管理主要实现对图书和用户的管理,功能较为复杂,其详细的功能结构图如图1.2.3所示。
图书管理包括新进图书资料的添加、过期书刊资料的删除、已有图书资料的修改以及图书资料信息统计等功能。
职工管理指图书馆员工的管理,包括员工增加、离岗员工资料删除和员工信息编辑,员工统计等功能。
学生管理包括学生读者办理借阅卡、离校学生卡号的删除、借书情况统计和卡号统计等功能。
错误!
图1.2.3 系统管理功能结构图
通过对图书管理系统功能的描述,C语言初学者,可能觉得功能复杂,感觉实现难度很大,但是通过上述的功能结构图,我们把整个系统复杂的功能分解成了多个功能模块,从而将复杂的任务分解成多个简单的任务,对每个简单的任务我们可以用后续课程中的一部分程序(函数)来实现,从而化繁为简,实现整个系统程序。
2.设计和开发(阶段2)
一旦程序的详细需求说明已经完成,作为程序设计过程核心的设计和开发阶段就可以开始了,这个阶段包括以下四个重要步骤。
步骤1:分析问题
这一步骤的目的是清楚地定义问题。主要包括下述三项:
必须产生的输出;
产生预期的输出所要求的输入数据;
体现输入与输出之间的联系的公式。
实例:对于图书管理系统的借书问题,相应的三项为:
输出:记录此次借书的情况,比如,200101(借书卡号)借出TP3892(图书编号)1册,时间2007-3-20,该借书卡已借书4册。
所要求的输入数据:借书卡号、图书编号、册数1。
输入与输出之间的联系:借书卡号=200101 ,图书编号=TP3892,已借书数目=已借书数目+1。
步骤2:选择一个完整的解决方案的算法
这一步骤是确定和选择一个解决问题的算法,有时候确定完整的解决方案的算法相当容易,有时候可能是很复杂的。例如,确定一个人口袋里零钱的数量或者确定一个矩形的面积的算法比较简单,但是,制造业公司的库存跟踪和控制系统的设计就比较复杂。在复杂的解决方案的算法设计时,需要将算法逐步地改进和细化,直到这个算法比较详细地指明了全部的解决方案为止。
在程序设计语言中,对问题解决方案的算法形式是:
获得问题的输入;
计算期望的输出;
报告计算的结果。
例如,如果要求用一个给定的半径计算圆的面积,这个问题的计算机算法为:
设置半径值r;
使用公式2S r=π;
显示S的值。
一个合理的算法具有以下特点:
(1)有输入:算法可以有零个或多个输入。输入是用来在一个算法的执行过程中,向它提供处理对象(数据)或控制算法执行过程的信息。
(2)有输出:算法必须具有一个或多个输出。它是算法执行结果的输出。没有输出的算法是一个无效的算法。
(3)有穷性:任何算法都应该在执行有穷步骤之后结束。
(4)确定性:算法不能具有二义性。也就是说,算法中每一步的语义都应该是清晰明了的,明确指出应该执行什么操作,如何执行操作。
(5)高效性:根据算法编写出来的程序应具有较高的执行效率。其主要含义有:一是执行时间短,二是不占用过多内存。
步骤3:编写程序
这个步骤是将选定的解决方案的算法用C语言计算机程序去实现,该过程也称为算法编码,编写程序的过程必须按算法的要求进行。在设计良好的程序中,组成程序的语句应该遵守已经在解决方案步骤中定义的某些定义良好的结构,这些程序结构控制程序的运行并由下列类型组成。
1.顺序:定义了程序按序执行的次序。
2.选择:提供了根据某个条件表达式的结果在不同的路径中选择执行路径的能力。
3.循环:提供根据某个条件表达式的值重复地执行某些操作的能力,例如重复输入各个学生的各门课成绩,并计算其平均成绩。
4.调用:即在需要时运行指定的代码段。
步骤4:测试和完善程序
测试的目的是验证程序是否运行正确并实际达到它的要求,理论上,测试应该可以发现程序中存在的所有错误(在计算机中,程序的错误称为bug),但在实际中,由于各种因素的干扰,几乎无法发现程序中所有的错误,除非非常简单的程序。
如果在测试过程中发现了错误(bug)就必须着手调试程序,包括定位、纠错和验证纠错。为了捕捉和修正程序中的错误,首要的是开发一组确定这个程序是否给出正确答案的数据(也称为测试用例)。事实上,在正式的软件测试中,一个可接受的步骤是在编写代码之前拟定测试方式和建立有意义的测试数据。
3.文档编制(阶段3)
实践中,大多数程序员在完成编程工作几个月后会忘记程序中的许多细节。为了方便以后对程序的修改,编写良好的开发文档是一项必须完成的工作。近来,开发的软件应包括以下六个关键的文档。
功能需求说明书。
算法描述(也称详细设计文档)。
程序代码及注释。
按时间所做的修改和更改描述。
测试报告(程序测试运行记录,包括每次运行使用的输入和获得的输出)。
用户手册,关于程序使用的详细说明。
4.维护(阶段4)
这个阶段的重点是问题更正、修改程序以满足变化的需求以及增加新的功能,维护阶段一般是一个持久的阶段,软件开发可能花几天或几个月的时间,但软件维护可能要进行几年或几十年。文档编制得越好,维护阶段的工作效率就越高,客户就会越满意。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。