程序设计教案VB版第一章、第二章_vb程序设计第二章
程序设计教案VB版第一章、第二章由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“vb程序设计第二章”。
第一章
绪
论
本书的任务是启迪读者应用某种计算机语言,对于内业平差计算,按照测量平差基本理论,通过编程来处理各种测量控制网的数据,最后输出控制网基本信息(网形码、已知点数、未知点数、路线条数等)、起算数据表、观测数据表、平差计算中间重要过程数据、平差计算结果(含精度评定指标)及控制网形图、误差椭圆图、误差曲线图等;对于外业观测记录手簿,按照相应的电子记录标准通过编程来实现外业自动记录计算;对于专业测绘部门的测绘资料管理,通过编程来实现控制点的坐标、高程、点之记、地形图等的自动查询。书中编程示例采用的计算机语言是Visual Basic 6.0版(以下简称VB6.0)。
§1-1 学习本书需注意的几个问题
一、本书的主要内容
1、程序设计基本原理(含软件工程、程序设计的基本概念及原则)。
2、VB6.0的基本用法。
3、用VB6.0制作测量程序图形界面、菜单的方法。
4、VB6.0数据输入方法。
测量程序设计中,必须含有数据输入功能。用VB6.0进行数据输入的方法,根据具体问题的不同,可采用对话框输入方法(也称为键盘输入方式),也可采用数据文件输入方式。
5、数据处理方法。
不同的控制网形,具体的数据处理方法不尽相同,有的时候技术难度还较大,或者必须采用特殊方法,需要读者在后续章节内容的学习中给予注意,细心研读。
6、VB6.0数据输出方法。
测量程序设计中,必须含有数据输出功能。用VB6.0进行数据输出的方法,根据具体问题的不同,可采用屏幕直接输出,也可采用数据文件输出,还可通过打印机打印输出。
7、图形输出方法。
控制网平差计算后,应输出与实地方位一致、按一定比例尺缩小的控制网形图。具体的输出方法,可采用屏幕直接输出,也可通过打印机打印输出。
二、本书的学习方法提示
1、读者应具有一定的VB6.0的基本知识。学习VB6.0的基本知识过程中,针对一些问题应上机试验,以便准确掌握。例如SUB、FUNCTION过程传递数据的用法、返回数据的用法;特别应注意传递数组的方法、各个字符串函数的用法等。
读者应掌握如下VB6.0的基本知识:
⑴、建立窗体模块的方法。
⑵、建立菜单的方法。
⑶、基本控件的用法。
⑷、简单数据输入方法(对话框方式)。
⑸、简单数据输出方法(屏幕直接输出方式或对话框方式)。⑹、SUB、FUNCTION过程传递数据的用法,返回数据的用法。⑺、数组的不同用法。
⑻、各个字符串函数的用法。⑼、绘图“方法”的用法。
⑽、输入、输出数据文件的用法。
2、读者应有较为系统的测量专业知识。
3、边学边练。练习时,必须按所要求的基本规则进行编程,充分进行调试(需考虑到各种特殊情况)。
三、学习本书对计算机软、硬件的基本要求
1、硬件配置
CPU:奔Ⅲ(或赛扬Ⅱ800)(不要毒龙或雷鸟系列的任何物品)
内存:256M 硬盘:20G 显示器、显示卡分辨率:1024*768 主板:带USB口。
主板、显示卡、声卡非一体化。
光驱:48速
鼠标:罗技光电鼠标
2、软件安装
需要安装Windows XP操作系统、Office XP办公软件及VB6.0编程语言系统。
§1-2 测量程序功能简介
一、测量程序整体演示
1、菜单
2、外业数据采集程序
⑴、普通水准测量记录计算
⑵、三等水准测量记录计算
⑶、四等水准测量记录计算
⑷、水平方向观测记录计算(方向观测法)
⑸、水平角观测记录计算(测回法)
·
·
·
3、内业平差计算程序
⑴、导线近似平差计算
⑵、单三角锁近似平差计算
⑶、测角、测边交会计算
⑷、导线网严密平差计算
⑸、三角网严密平差计算
·
·
·
4、Gau投影计算程序
5、地形图分幅编号程序
二、测量程序子功能演示
1、测量程序菜单
2、多重窗体的转换
3、数据文件的读写
4、奇进偶舍
5、Degree与Radian的互化及输入、输出
6、坐标正算
7、坐标反算
8、推算坐标方位角
9、建立测量控制点符号库
10、绘制测量专用线段(单虚线、双虚线、半实半虚单线、半实半虚双线等)
11、绘制等高线(三次样条曲线,二阶导数连续)
12、绘制误差椭圆、误差曲线
13、自动显示控制网形图并打印
第二章
程序设计基本原理
§2-1 概 述
一、软件工程的概念
在计算机迅猛发展的短暂历史中,软件的发展,和计算机硬件技术的发展、计算机的推广应用紧密相关,至今为止,已经历了程序设计、软件、软件工程三个阶段的演化:
1、程序设计阶段——单人编制模式
在计算机发展的初期(1946年 ── 1954年),为了有效地利用计算机,程序设计人员采用个体手工方式开发编制了一些具有单一实际用途的程序。这个阶段的程序只是作为硬件的附属品,还没有作为商品进入营销市场,其开发的工作效率很低,属于手工生产方式。
2、软件阶段(又称程序系统阶段)——小组编制模式
这阶段是指1955年──1970年一段时间。这个阶段的软件生产方式已由个体手工进入作坊生产方式,采取由程序员小组进行编程(个体分工合作)的方法。
由于计算机硬件功能和质量的不断发展,而整机价格大幅度地下降 ── 这意味着计算机可以更广泛地应用于生产和社会生活的各个领域,软件的社会需求迅速上升。但是,软件是一种包含算法、思想等密集知识型的非物理实体,其整个研制开发过程是一个“思考”过程。在写出代码并在计算机上试运行之前,对开发过程的进展情况很难控制,质量也难于评价,而且,往往还会潜存着错误 ── 编写的源程序必须经过机上运行、各种可能数据(含非数字的数据,例如代表某种意义的字符串)测试均通过,才算告捷!
软件这一性质随着其在计算机系统中所占地位的日益重要和复杂度的增加,使软件开发人员越来越满足不了需要,因而,软件的供需矛盾加剧,出现了软件成本高、质量低,常不能按期完成开发计划,软件可靠性差,生产效率低等现象。对此,人们称之为“软件危机”。所以,有人将这一阶段称为“软件危机时期”。
3、软件工程阶段——企业生产模式
这阶段是指自1970至现在的时间。针对“软件危机”的现象,人们逐渐认识到:要经济地研制出功能强、应用面宽、可靠性高的软件,单凭经验和直觉、采用作坊式小组编程是不行的,有必要采取良好的技术措施(方法和工具 ── 软件工具)和科学的组织管理形式。于是,提出了用系统工程学的原理和方法来管理软件生产过程的设想。1968年,在“北大西洋公约”(简称“北约”)组织的一次学术会议上,第一次正式提出了“软件工程”这个术语。
经过各国软件业人员三十余年的悉心研究,目前已创造了许多适用于软件生产各阶段的方法和技术,确立了软件研制的各个阶段的生产模式和组织管理形式(制度),使整个软件研制过程“有章可循”。“工程化”的思想为软件研制指出了新的途径,逐渐形成了软件生产的规范化和自动化,推动了软件研制走向自动化的进程。在此基础上,形成了一门独立的学科──软件工程学。(参见《计算机应用与软件》1995年第三期、第四期)
这个阶段,软件已作为一种社会产品进行批量生产和标准化生产。在生产方式上,出现了大批软件公司、软件工厂等集体生产方式,并以软件作为计算机的中心,提出了一整套软件生产过程的基础理论、方法和工具系统。
经验证明:采用软件工程理论指导软件开发,可以大大地提高软件开发的成功率和生产率,例如美国的IBM公司从70年代初开始运用软件工程系统,研制了“纽约时报情报检索”和“空间实验室的飞行模拟”两个大型系统软件;微软公司、我国的“希望电脑公司”等研制的一些软件,均取得了满意的结果。
因此,研制软件就不再仅仅是“编程序”的单一问题,而是像其它产品一样,应包括计划、分析、设计、加工(编写源代码)、拼装(集成)、测试、生产运营(进入营销市场,由客户应用于实际工作中)、维护等阶段,达到以较少的投资获得“优质、高产”的软件产品的目的。
计算机软件的概念:与计算机系统操作有关的程序(源代码)、过程及任何有关的文档资料的总称。
计算机软件按其功能的不同可分为系统软件和应用软件两类。
系统软件是指用于管理计算机各种资源及协调各种装置正常工作的有关程序,以及为用户编制程序服务的程序。例如:计算机操作系统(DOS、WINDOWS)、设备安装系统(光驱驱动程序、打印机驱动程序、显示卡驱动程序、声卡驱动程序)、语言处理系统(BASIC语言、C语言、PASCAL语言)、文字编辑系统(WPS、WORD等)数据库管理系统、诊断程序等。
应用软件是指与具体用途关系密切、应用针对性强的软件。例如:税务统计软件、大地测量平差计算软件、地籍管理地理信息系统、题库综合操作系统、学生工作管理系统等。
根据生命周期方法学原理,可知软件的生命期包含如下几个阶段:
⑴、计划
⑵、分析
⑶、设计
⑷、编码
⑸、测试
⑹、运行
⑺、维护
⑻、废弃
软件工程的概念是:根据生命周期方法学原理,将一个(套)软件自其生命期的起点至终点所包含的各个阶段的系统工作,称为软件工程。
软件生命周期阶段的划分,按我国软件设计开发规范(GB8566-88),分成如下八个阶段: ⑴、可行性研究与计划:确定要开发软件项目的总项目,从技术、经济和社会条件诸方面调查研究并确定要开发的软件系统是否可行,制定完成开发任务的实施计划。(参见《白山发电厂大坝变形观测数据采集及处理项目的可行性研究》,1997年11月)
⑵、需求分析:对将开发的软件进行详细定义。详细说明被开发系统与其它硬件、软件的接口,以及人机的界面;描述功能细节及性能要求,说明功能之间及功能与数据之间的关系,确定设计性能和测试准则,并编写初步的用户手册和配置管理计划。
⑶、概要设计:又称系统设计。主要任务是决定系统的模块结构,确定目标系统的功能模块之间的关系,定义各功能模块间的数据接口,对模块划分的评价等。
⑷、详细设计:对概要设计的功能模块进行过程描述,确定系统的具体实现方法;写出程序的详细规格说明,提供编写实际程序代码的依据。
⑸、编码与单元测试:将详细设计说明转化为计算机可以接受的程序源代码,即用程序设计语言或数据库语言书写的源程序,并对编写好的源程序进行模块测试,验证模块接口与设计说明的一致性。
⑹、集成测试:也称组装测试。按照选定的测试策略,采用系统化的方法,将经过模块测试的模块按预先制定的测试计划逐步进行组合和测试。
⑺、确认测试:对集成后的软件全部设计功能进行全面确认测试,确认软件开发成功,并提供最终的用户手册和操作手册。
⑻、使用与维护:对投入市场运行后的软件系统不断进行修改和完善,使软件能够适应外界环境的改变,并进一步改善其性能、扩大其功能,延长其生命周期,直至该软件退役。
美国国防部所制定的软件设计开发标准(DOD-STD-2167)对软件生命周期各阶段的划分如下:
⑴、软件要求分析。
⑵、预设计。
⑶、详细设计。
⑷、编码与单元测试。
⑸、CSC集成与测试(Computer Software Configuration,计算机软件配置)。
⑹、CSCI级测试(Computer Software Configuration Item)。
⑺、运行与维护。
二、软件工程目标
软件工程的目标是以较低的投资而获得高质量的软件。那么,如何来评价软件质量的高低呢?一般地讲,不同的人会有不同的观点,不同的设计课题所要求的标准也不会一样。所以,对软件质量的评价很难有一个统一的标准。但就大多数的软件来讲,对其质量还是可以找出一些共性标准来衡量,例如:可以从如下的几个方面得到共同的认识:
1、可靠性
软件的可靠性是指软件本身没有错误,在预期的环境条件下能正确地完成期望的功能,而在意外的情况下,也能作出适当的处理不致造成严重的损害。所以,软件的可靠性应包括程序的正确性和健壮性两个方面。
⑴、正确性
编制程序的目的是为了完成某些特定的功能,如果一个程序不具有所要求的功能,则这个程序是毫无价值的。正确性应是程序的一个最基本的要求,它是通过对算法的精心设计和详尽的检查来实现的。
⑵、健壮性
程序的健壮性和正确性是同样重要的。一个可靠的程序应该具有一定的纠错能力。一个完全正确的程序,若根本不检查输入的数据是否合理,就可能造成严重的后果,这样的程序显然是不可靠的。一个正确的程序还应该具有查核输入数据的正确性和合理性的能力,要经得起长时间及大批量数据的考验。
2、易修改性
软件开发是根据用户的需求进行的。用户往往会因时、因地提出一些新的要求。另外,一个较大的软件经测试后还可能会有错误,这些错误要在运行阶段才会逐步暴露出来。所以,软件需要不断修改、扩充。为了能有效地修改程序,可在尊重程序原有结构的情况下,修改某一部分,而不影响其它部分,以取得所期望的新结果。
3、易理解性
易理解性是指程序的内部结构清晰,易于阅读和理解(为了测试、排错、修改等),在系统中人机界面简明、清晰,使用户乐于使用。为此,一个好的软件应层次分明,其最低层应采用好的编码风格,而较高层应是数据和算法的合理映射,使测试维护人员能从中容易地分离出其中的数据结构和算法。
4、有效性
有效性是指软件系统是否能以最佳方式,有效地使用计算机资源。在现今硬件价格下降,性能、速度不断提高,而软件开发费用不断上升的情况下,人们宁可牺牲一点机上运行的效率也要获得较好的易修改性和可靠性。
§2-2 程序设计的基本概念
一、程序和程序设计
计算机程序是指计算机一组指令的有序集合,或者说是一组语句的有序集合。换言之,一个程序是用程序设计语言对处理过程的描述,而描述的对象不外乎是对处理对象──数据和处理方式──算法的描述。所以,程序结构应包括数据结构和控制结构两个方面,即:
程序=数据结构+算法
实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,程序可以这样表示:
程序=数据结构+算法+程序设计方法+语言工具和环境
也就是说,以上四个方面是一个程序设计人员所应具备的知识。本书将兼顾这四个方面介绍测量程序的编写方法。
程序设计是指构造具有某种指定功能的指令序列的过程。这是一项技术性很强的工作,它是模仿性和创造性的统一。所谓模仿性,是指程序设计必须严格遵循程序设计语言的有关语法规则,模仿它的格式来编写。创造性是指在符合程序设计语言所规定的语法规则的前提下,如何描述计算过程,采用什么计算方法,程序设计人员可以针对各自的课题尽情地发挥。这里赋予程序员以极大的灵活性和创造性。因此,对同一课题,由不同人员设计出来的程序往往是不同的。例如编程求下面数列的前n项和:
a,aa ,aaa,aa,第1项第2项第3项第n项其中0a9,且a为整数。
针对这个问题,可采用以下两个不同的算法:
1、方法一:设a8,则:
8102
102*10 1088(10020)(102)
(1022*101)(1012*100)
888(1000200)(10020)(102)
(102*10)(10„„„„ 88(10n个n3222*10)(102*10)
1102*10n1)(10n12*10n2)(102*10)(10 n(108)*10n1)(10n1(108)*107
n2)(10(108)*10)10
方法一程序:
A=8
(即a=8)
I=1
(I为循环变量)
N=10
(N为数列的总项数)T=0 DO IF I>N THEN EXIT DO
J=1
(J为内层循环变量)TT=0 TT0=0 DO TT0=10^J-(10-A)*10^(J-1)TT=TT+TT0 J=J+1 IF J>I THEN EXIT DO
LOOP T=T+TT I=I+1 LOOP PRINT“数列前N项之和=”;T
(T为结果)
2、方法二:设a8,则:
88*10 0888*108*10
8888*102108*108*10
10n1n20 888*108*108*10n个n项方法二程序: A = 8 TT = 0 N = 10 For R = 0 To N-1 J = 0 For I = 0 To R k = A *(10 ^ I)J = J + k Next I TT = TT + J Next R Print “数列前N项之和=”;TT
又如给定三点坐标,据此作三角形之前,判断这三点是否共线。可采用如下两种方法:
1、先计算1点与2点之间、2点与3点之间的坐标方位角
12、23;然后,判断这三点是否共线。
or若122
3or1223180(12180,1223180(12180,23180)23180)
则说此三点共线;否则,说明这三点不共线。
2、如图2-1所示有三种可能情况,先计算平距D12、D23、D13;然后,判断这三点是否共线。
若
D13D12D23 or
D12D23D13 or
D23D12D13
则说明三点共线;否则,说明三点不共线。——该问题可用于根据碎部点构造三角网,以便自动内插等高线;也可用于根据三点绘制三角形外接圆等问题
图2-1 三点共线
二、程序设计的一般过程
在实际工作中,人们所开发的软件项目,多数是只需一、二人参加就足够的小项目。像这类项目可根据“小”的特点,采用适当简化的方法,比如,小项目规模小,对问题的理解比较容易,一般可以不进行可行性研究。但对开发的软件,先进行分析制定计划还是必要的。有的编程设计人员有一接受任务不制定计划就着手开发的坏习惯,应克服。又如在设计、编码阶段,由于一、二人进行,对程序的复查工作带来困难,开发者提供文档资料,帮助复审人员更好地理解所开发的软件是必要的。但是,小的软件项目可以使用简化了的软件工程方法进行,对某些阶段和文档资料,根据具体情况进行简化。对程序设计的一般过程可归纳为:
1、分析任务、定义功能。对任务和给定的数据进行分析,明确需要完成的功能和输出的要求,概括地、明确地用文字整理成文。
2、根据定义的功能,设计一个体现总任务的“抽象程序”。
3、将总任务分解成若干子任务,并对每个子任务进行再分解,直到不能再分解为止。
4、对每个子任务进行算法和数据结构设计,绘制N─S流程图及进行相应的文字说明。
5、选择适当的程序设计语言和进行结构化编码,并写出使用说明。
6、程序的测试和调试工作。
三、程序设计的基本原则
软件工程的最终目标是以较少的投资获得具有可靠性、易修改、易理解和有效性的软件产品。因而,进行程序设计应遵循如下基本原则:
1、抽象与隐蔽
由于人的能力所存在的固有的局限性,一般不可能一下子就能触及到问题的全部细节。总是先从分析问题入手,抽取基本的性质忽略非基本的细节,提出一个总的抽象算法。将一些能影响系统的细节隐蔽起来成为不可访问的,这是应付复杂问题的重要手段。抽象只考虑应“做什么”,“如何做”则隐蔽起来。
抽象是有层次的,人们可在抽象的不同层次上认识和处理问题。比如一个学校主要考虑要办几个系,系则关心的是本系要设几个专业,专业教研室则关心的是本专业的建设问题。人们就可利用抽象这一重要的属性,实现对复杂问题的分解,使它简化。又如程序使用说明书,作为用户和程序员的界面,用户从中只看到程序可以“做什么”,看不到程序是“如何做”的技术细节,这就简化了用户应掌握的内容,而集中精力抓住问题的本质。
应用抽象和隐蔽的原则,实现复杂问题的分解和不同功能软件的叠加,从而改善了程序设计环境,使程序设计变得简单而方便。
2、模块和模块化
模块和模块化是对一个复杂问题的“分解”与“综合”,是应付复杂问题的重要手段。所谓分解,就是将一个总任务分解成一系列相互联系而又相对独立的基本元素(子模块);所谓综合,是从总任务的完整性和每个元素功能特征出发,进行综合分析,以确定它们之间的联系,形成整体结构。
模块和模块化的原则,直接支持了易修改性、可靠性和易理解性的目标。
3、反复与复审
程序在开发过程不可能总是直线式进行,在研制过程中,免不了要发生各种各样的错误,这些错误往往要在后期才能发现。这就决定了程序的研制工作必然存在重复交错进行的现象,各阶段甚至要反复进行几次才能达到目的。
复审制度的建立,是减少反复次数的保障措施。在研制过程的每一阶段都应坚持复审。做到这点,也是实现软件工程目标的有力保证。
4、一致性和确定性
一项稍大软件的开发常由多人合作完成,研制过程做到统一化、规范化是开发成功的必要条件。一致性就是要求在步调上、命令方式、文档格式做到一致,使开发工作走上规范化轨道。
确定性也是保证软件质量的前提。它要求将人们的一些直觉变成明确的说明。比如将“软件质量要好”具体化成“正确可靠、易修改、易理解”;将用户心目中想的“响应时间很快”明确地表达成“响应时间小于x秒”等都是确定性的体现。
§2-3 结构化程序设计技术
70年代,荷兰著名计算机科学家Edsgar W.Dijkctra(迪克特拉)提出了结构化程序设计的思想。结构化程序设计规定:一个程序由“顺序、选择和循环(重复)”三种基本结构组成,要求结构化程序设计的高级计算机语言中应该具有直接实现这三种基本结构的语句,而且要求程序实现模块化(即主程序和子程序分别属于不同的模块)。
具有代表性的结构化程序设计的计算机编程语言有: BASIC:True BASIC Quick BASIC Turbo BASIC C: Turbo C C++ PASCAL VB60也具有结构化程序设计的计算机编程语言的功能。
现在,已经把程序“具有良好的结构,容易阅读和理解”作为衡量程序质量的首要条件。一个好的程序应该具备以下条件:
①、运行结果正确(这是最起码的条件)。
②、有良好的结构,清楚易懂。
③、尽可能少的运行时间。
④、运行时所占内存应压缩到合理的范围之内。
也就是说,按照现在的标准,易读性好是第一位的,其次才是效率。因为从根本上说,只有程序具有良好的结构,才易于设计和维护,减少软件成本,从整体来说才是真正的效率。
人们看程序总是从上往下看下去的,在程序中无限制地使用GOTO语句,跳转太多,思路就乱了。像这样的程序,如同一团乱麻,使人无从下手。人们把这种程序称作面条式程序(如同一碗面条,互相绞缠在一起),或称BS型程序(BS是 a Bowl of Spaghetti的缩写,意为“一碗面条”)。这种程序无任何规律而言,令人望而生畏。它造成程序设计和检查程序时的困难,增加程序出错的可能,降低程序的质量。
为了提高程序的易读性(容易理解),保证程序质量,降低软件成本,荷兰学者迪克特拉等提出了“结构化程序设计方法”的概念。它的要点是:
1、程序的质量标准是“清晰第一、效率第二”。
2、要求程序设计者按一定规范书写程序,而不能随心所欲地设计程序。应当按照“工程化”生产方式来组织软件生产,每个人都必须按照同一规则、同一方法进行工作,使生产的软件有统一的标准、统一的风格,成为“标准产品”,便于推广,便于生产和维护。
3、结构化程序设计方法规定了三种具有良好特性的“基本结构”(顺序结构、选择结构和循环结构),用它们作为构成程序的基本单元,如同建筑房屋用的标准预制件一样。每一种基本结构完成一种类型的操作序列。由这些小单元顺序组成一个大结构,这种结构可以避免上述“任意转向”的缺点。
4、一个大程序开发应当采取“自顶向下、逐步细化和模块化”的方法。即将一个大任务先分成若干个子任务,每一个子任务就是一个模块。如果某一个子任务还是太复杂,还可以再分解为若干子任务,如此逐层分解。对每一个模块的设计也是采取这种“自顶向下、逐步细化”的方法,直到将它分解为上述的基本结构为止。这如同写文章一样,有人不订提纲,想到哪里写到哪里,而有人则先拟出总题目和中心内容,再确定分为几大部分,每一大部分又分为哪几节,每一节分为哪几段,每一段包含哪些内容。有了这样通盘考虑的提纲后,文章的结构一般来说是比较清楚的,考虑是周全的,不易发生遗漏。这就是“自顶向下、逐步细化”的方法。
5、“具有良好特性的基本结构”应具有如下特点:
①、只有一个入口。
②、只有一个出口。
③、无“死语句”(没有永远执行不到的语句)。也就是说,结构中的每一部分都应当有执行到的机会,即每一部分都应当有一条从入口到出口的路径通过它(至少通过一次)。
④、没有“死循环”(“死循环”是指永远执行不完的循环,即无终止的循环)。
实践证明:顺序结构、选择结构和循环结构是具有以上特点的良好结构。
结构化程序要求每一基本结构具有单入口和单出口的性质是十分重要的。这是为了便于保证和验证程序的正确性。设计程序时一个结构一个结构地写下来,整个程序结构如同一串珠子一样次序清楚,层次分明。在修改程序时,可以将某一基本结构孤立出来进行修改,在修改一个基本结构时,不会影响到其它基本结构中的语句。
由以上三种基本结构所构成的程序可以处理任何复杂的问题。一个结构化程序是由具有以上特点的基本结构组成的,反过来说,一个结构化程序必定能分解为上述基本结构。下面以VB6.0为例说明结构化程序设计中的三种基本结构。
一、结构化程序的基本控制结构
1、顺序控制结构
顺序控制结构简称顺序结构。它是程序中最经常、最大量遇到的一种最简单、最基本的控制结构。它将程序或程序段分成若干块(一个语句或多个语句),各块在结构内执行的顺序是按照它们出现的顺序依次执行,或者说,其逻辑顺序和物理顺序是一致的。顺序控制的每一步执行是建立在上一步执行成功背道而驰基础上的,本步的执行要受到上一步的控制。结构化程序正是利用这一性质,要求整个程序由若干控制逻辑结构顺序组成。
在顺序结构处理块内的程序语句,允许是一个(组)自上至下依次执行、不产生控制转移的语句,也允许是一个调用子过程、子程序的语句 ── 因为在这样情况下整个控制流程仍可视为顺序结构。
2、选择控制结构
只用顺序结构能编写一些简单的程序,以进行简单的运算。但是,人们对计算机运算的要求并不是仅局限于一些简单的运算,经常会遇到要求计算机进行逻辑判断,即给出一个(或一组)条件,让计算机判断是否满足该条件,并按不同的情况让计算机进行不同的处理。例如:
①、从键盘输入一个数,如果它是正数,把它打印出来,否则不打印;
②、将点位误差超限的“点名”及其“点位误差”打印出来(用于精度评定);
③、比较一组横坐标,将其中数值最大与最小者打印出来(用于屏显网形图);
④、若一条边的两端点均为已知点(两个判断条件),用双实线连接。
选择控制结构简称选择结构或分支结构。它是根据给定的一个或一组条件经过分析、比较、判断后,决定按不同情况进行不同的处理(选择执行某一个或某一组语句)。
选择结构的表达式分为关系表达式(六种关系运算符)和逻辑表达式(六种逻辑表达式)。
在VB6.0中实现选择结构的语句有条件语句(IF...THEN...ELSEIF...ELSE...END IF)、情况语句(SELECT CASE...CASE...END SELECT)。关系表达式和逻辑表达式只是上述各语句实际应用中的语句体。
3、循环(重复)控制结构
在实际应用中,经常遇到一些操作并不复杂,但需要反复多次处理的问题,例如多条边坐标方位角的推算,多个点坐标的计算等,这都将用到循环控制结构。
VB6.0中循环控制结构的语句有三种不同风格的循环语句:计数循环(FOR...TO...STEP...NEXT)、当循环(WHILE...WEND)、DO循环(DO...LOOP)。
二、结构化程序的特点
所谓结构化程序,就是由上面介绍的三种基本控制结构所组成的程序。反之,任何结构化的程序应该是可以分解成上述三种基本控制结构。否则,就不是一个结构化程序。因此,一个结构化程序的结构应具备如下特点:
1、程序由基本控制结构组成。
2、程序中的各个基本控制结构都只有一个入口和一个出口。
3、通过结构的任一部分,都应存在一条从入口到出口的路径,即在结构中每一部分都存在被执行的机会。
各个基本控制结构只有一个入口和一个出口是十分重要的。做到这点可保持各结构间有简单的接口关系,从而达到相对独立地设计各个子结构,静态地分析控制关系,并验证它的正确性。比如某一个子结构需要修改,只要接口关系不变,就不会影响其它子结构和整个程序。
三、结构化程序的实现
㈠、实现结构化程序采用的技术
1、自顶向下逐步求精技术
这是结构化程序设计中的一种基本方法,它的要点是:
①、对问题作全局性分析,以确定数学模型。
②、用分解技术将问题分成若干相对独立的子块,确定各子块的相互关系。
③、对各子块逐一精细化,直到能用程序设计语言直接描述。
这项技术符合人们先整体后细节、先全局后局部、先抽象后具体的思维活动规律。坚持采用这一技术,容易达到程序结构清晰、易读、易修改的要求,从而提高程序的正确性。
2、模块化技术
模块化程序设计技术,是将求解的任务划分成几个功能相对独立的子任务。对每个子任务要求意义单
一、职责明确,各子任务间的联系简明。对每个子任务称为子模块。每个子任务还可按照逐步求精技术,继续划分为更小的任务,形成具有层次结构的整体,如图2-1所示。
图2-1 层次结构图
3、结构化的编码技术
结构化编码技术要求对程序的所有处理及程序的控制逻辑,仅由三种基本控制结构描述;所选用的控制结构应做到只有一个入口和一个出口;对复杂的程序结构仅用嵌套的三种基本控制结构实现;当选用的程序设计语言没有和基本控制结构相应的语句结构时,应采用前后一致的方法来模拟实现。
结构化编码严格限制GOTO语句的使用。因为,过多地使用GOTO语句会破坏程序的层次结构,使程序的静态结构和动态执行路径差异较大,最终导致程序质量的下降。
4、限制变量的作用域
变量的作用域指的是变量的可见性或有效性。在VB6.0程序中,根据变量的定义方式,可以分为两类,即局部变量和全局变量。其中局部变量只在程序的某一部分有效,而全局变量可用于子程序的每个部分。
限制变量的作用域,有利于更好地保障程序模块具有相对独立性,不致于干扰其它模块,保障程序的模块化编码。
㈡、子程序(过程)
在结构化程序设计中,子程序是常用的技术。现简要介绍如下。
1、子程序的概念
在设计较复杂的程序时,通常应根据程序需要实现的主要功能,划分为若干个相对独立的部分,其中每个部分都可以编写出一段程序,习惯上,把这样的一段程序称为子程序。顾名思义,子程序是整个程序的一部分,它是执行一个特定任务的程序块。
定义子程序后,就可以在程序的其它地方调用它。调用程序与被调用的子程序之间的信息交换通过参数的传送来实现。
一般来说,子程序是在程序的若干处都需要执行的相同的代码,使用子程序可以达到缩短程序长度和减少占用内存空间的目的。
在VB6.0 中,通常把子程序称为过程。其过程一般分为两类,即子程序过程和函数过 13
程,前者叫做SUB过程,后者叫做FUNCTION过程。
使用过程编写程序,主要有以下两个优点:
①、便于调试。用过程可以把程序划分为若干个独立的逻辑单元,调试一个过程比调试整个程序要容易得多。
②、节省代码。将一个程序中的某个子功能用一个过程来编写,可被整个程序的任何位置所调用,这样,便可节省整个程序的代码总量;而且,这样具有相对独立功能的过程,通常不需要修改或进行很小的修改,就能用于其它程序中。
2、子程序的结构与调用方法
一般地,SUB过程用CALL来调用;FUNCTION 过程可像函数一样直接调用。
四、结构化程序设计的基本特征
结构化程序设计具有如下基本特征:
1、用系统工程观点把一个程序视为一个大系统。
2、将大系统运用“自顶向下、逐步求精”的方法,进行程序开发。
3、用模块化的设计方法,使一个模块完成一项子功能。
4、结构化程序中的每一个模块都是由基本控制逻辑结构(或相互嵌套)顺序地组成,且各控制结构只有一个入口和一个出口。
5、结构化程序只能有限制地使用GOTO语句。
6、在结构化程序内部,应适当地使用程序功能注释(REM 语句),以提高程序的可读性。
利用VB6.0编程时,在每一个窗体模块或标准模块内由程序员编写的程序代码,即是一个相对完整的结构化程序;它调用的子过程允许不在同一个模块内。
§2-4 面向对象的程序设计技术
一、OOP(Object Oriented Programming)概述
程序包含两类基本的元素,即数据和操作数据的指令集(称为代码)。传统的程序设计语言以设计代码为核心,程序设计实际上就是指定程序指令的先后次序,数据表示必须适应代码的设计。模块化程序设计方法将完成某一功能的指令集组成一个相对独立的程序模块(即函数或过程),使得程序的结构清晰,便于有效地维护,对程序设计技术有很大的促进。但由于结构化程序设计方法并不能保证各程序模块之间真正的相互独立,程序设计者在设计一个模块时很难完全排除其它模块的影响。随着程序规模的增大,各模块之间的相互影响导致了一些难于测试、难于定位发现的错误,增加了程序开发和维护的困难。面向对象的程序设计方法就是在这种背景下出现和发展起来的。
面向对象的程序设计方法主要以数据为中心,代码是围绕着需要处理的数据而设计的。
OOP ── 面向对象的程序设计,是一种比较先进的程序设计方法。
作为Windows环境下的软件开发工具语言,VB所采用的一个关键技术是面向对象编程,简称OOP。可以将对象看作变量,与通常变量不同的是,真正的面向对象编程的对象不仅具有特征属性(变量),同时具有行为方法(函数)。一个对象知道如何管理自己,例如可能使 14
自己初始化,打印或完成其它任务。特别是对象可以响应外界触发的事件。编写面向对象的程序时,程序员并不关心所使用的对象实际如何工作,而只需知道对象的行为。一旦消除了对象中那些令人乏味的细节,程序员即可集中精力于所需功能的编程,即编写应用程序中无法替代的部分。另外,可以在程序中重复使用对象。
在VB中,窗体、控件即为具有属性、方法并可响应事件的对象。通过改变控件的属性,控制其外观和行为。例如,通过改变文本框的字体和颜色属性,可以知道(确定)如何显示其中的文本。方法是控件本身所固有的程序,例如选中文本框后,当在键盘上按下一个键时,这个键所代表的字符将在文本框编辑区内以特定格式显示。此外,每个控件还可识别特定的事件。大多数控件知道鼠标是否移动到其上,是单击,单击的是左键还是右键。而对于大多数控件,都可以编写一段对应的程序。当事件发生时,程序执行,从而完成所需的功能。
二、几个术语
1、对象(Object)
对象是OOP程序的基本单元,其属性给出其特征,其方法指定实现的任务。对象还可响应并识别事件。
2、控件(Control)对于VB而言,控件是可重复使用的对象,如文本框、按钮等。控件用于构成程序的可视化界面。
3、事件(Event)事件是用户或操作系统执行的操作,如通过键盘输入一个字符、单击、等待超时等。
4、方法(Method)方法是指对象固有的程序代码。
5、过程(Procedure)过程是用于实现一项功能的一段程序代码,通常用于响应一个事件。
6、属性(Properties)属性是对象的特征,如位置、尺寸、颜色、字符等。属性给出对象的外观,有时也用于确定目标的行为,也可用于输入数据给对象或从对象中获得数据。
三、VB6.0特点
VB6.0最大特点是大大简化了Windows应用程序的开发,是设计Windows应用程序的极好工具。VB6.0与当前各种BASIC语言在设计思想上有许多相似之处,对于已经掌握或熟悉其它版本BASIC语言的用户,可很快掌握VB6.0语言。VB6.0继承了BASIC语言的优点,同时又增加了图形用户界面,使得用户只需记住很少的命令即可使用。VB6.0中的“Visual”直译为“可视化”,是指为开发图形用户界面,不需要编写大量的程序代码,而只需用鼠标拖放窗口和控件,设置其大小、位置和属性等。
使用VB6.0设计Windows应用程序的最大方便之处是在设计阶段即可创建用户界面,从一个窗体开始,在其上添加所需的菜单和控件等;然后,编程,连接代码与对象,即可完成一个应用程序的设计。步骤如下:
1、创建窗体。
2、为每个窗体选择控件。
3、为主窗体设计菜单。
4、设计控件和窗体的属性。
5、定义事件和编写通用过程。
6、调试。
四、VB6.0快捷键
1、剪切(T)Ctrl+X
2、复制(C)Ctrl+C
3、粘贴(P)Ctrl+V
4、撤消(Z)Ctrl+Z
5、查找(F)Ctrl+F
6、打开(O)Ctrl+O
7、保存(S)Ctrl+S
§2-5 编程风格问题
为了使程序代码易于维护,在编写程序时应遵循一定的公认准则。
1、重要的程序行一般要顶格写,即该行前面不要留空格。例如,注释行。
2、语句缩进准则:书写程序应采用缩进格式,这是为了层次分明、结构清晰,便于阅读、修改,像一篇文章分段书写一样。
虽然没有任何一种计算机编程语言强制要求使用缩进准则,但在实际编程中,几乎每一个程序员都使用缩进来增强代码的可读性。使用缩进的方式是千差万别的,例如VB中可使用该语言系统所提供的Tab键缩进格式,当然也可使用SPACE键(空格键)灵活缩进。
3、注释:虽然不要求对每行语句都进行注释,但最好对每一源文件、每个函数、每一特殊操作语句(或语句段)、重要变量等都能有注释,以说明文件、函数、语句或变量等的用途和意义。
VB中所提供的注释语句是:REM......或'(撇号)。
对源文件的总体注释应放在文件(程序)的最前面,一般包括如下几部分:
①、文件名
②、文件功能、用途
③、创建时间
④、作者
⑤、修改时间
⑥、修改的目的⑦、修改人
4、源文件设置:主程序尽量简明,起到“总调度”的功能;将各子任务尽可能地分解,分别用过程(SUB或FUNCTION过程)处理;严格控制使用GOTO语句,以免破坏程序的模块化结构。
5、命名准则:编写代码时如何给常量、变量和函数取名将在很大程度上影响代码的可读性,好的命名方式,可减少编写代码的笔误和提高代码的维护效率。一般的命名准则包括:
①、使用能描述常量、变量和过程的意义或用途的词命名。
②、具有相似特征或意义的一组常量、变量和过程的名称,可分成两部分来表示:第一部分的名称相同,第二部分的名称不同,这两部分之间用下划线连接。
6、作用域问题:在设置变量时,应尽量少用全局变量及占用字节多的变量,例如双精度变量、长整型变量等;尽量通过使用过程参数来传递数据。
7、针对具体问题,不要先把注意力放在某一种语言如何使用上,而应先把注意力放在 16
程序设计的思路和方法上,即应先考虑解决具体问题的程序设计的思路和方法,然后再考虑用某一种语言的什么语句、函数、命令等解决它。
8、风格前后一致准则:在编写代码时,应注意保持所使用的编码风格的前后一致性。
作为计算机应用人员,应当建立程序设计的概念。程序设计是一个计算机应用人员应具有的基本功。无论是在学校学习期间或者是在实际工作中,一个优秀的工程技术人员,应当把程序设计作为一项基本训练。只有懂得程序设计,才能真正理解计算机是如何进行工作的,才能在工程实践中利用计算机编程有效地解决一些问题。