程序设计教案VB版第一章第二章.docx
《程序设计教案VB版第一章第二章.docx》由会员分享,可在线阅读,更多相关《程序设计教案VB版第一章第二章.docx(21页珍藏版)》请在冰豆网上搜索。
![程序设计教案VB版第一章第二章.docx](https://file1.bdocx.com/fileroot1/2023-1/23/00ef7014-fe41-40e5-a30a-0d7db57feacf/00ef7014-fe41-40e5-a30a-0d7db57feacf1.gif)
程序设计教案VB版第一章第二章
第一章绪论
本书的任务是启迪读者应用某种计算机语言,对于内业平差计算,按照测量平差基本理论,通过编程来处理各种测量控制网的数据,最后输出控制网基本信息(网形码、已知点数、未知点数、路线条数等)、起算数据表、观测数据表、平差计算中间重要过程数据、平差计算结果(含精度评定指标)及控制网形图、误差椭圆图、误差曲线图等;对于外业观测记录手簿,按照相应的电子记录标准通过编程来实现外业自动记录计算;对于专业测绘部门的测绘资料管理,通过编程来实现控制点的坐标、高程、点之记、地形图等的自动查询。
书中编程示例采用的计算机语言是VisualBasic6.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、软件安装
需要安装WindowsXP操作系统、OfficeXP办公软件及VB6.0编程语言系统。
§1-2测量程序功能简介
一、测量程序整体演示
1、菜单
2、外业数据采集程序
⑴、普通水准测量记录计算
⑵、三等水准测量记录计算
⑶、四等水准测量记录计算
⑷、水平方向观测记录计算(方向观测法)
⑸、水平角观测记录计算(测回法)
·
·
·
3、内业平差计算程序
⑴、导线近似平差计算
⑵、单三角锁近似平差计算
⑶、测角、测边交会计算
⑷、导线网严密平差计算
⑸、三角网严密平差计算
·
·
·
4、Gauss投影计算程序
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集成与测试(ComputerSoftwareConfiguration,计算机软件配置)。
⑹、CSCI级测试(ComputerSoftwareConfigurationItem)。
⑺、运行与维护。
二、软件工程目标
软件工程的目标是以较低的投资而获得高质量的软件。
那么,如何来评价软件质量的高低呢?
一般地讲,不同的人会有不同的观点,不同的设计课题所要求的标准也不会一样。
所以,对软件质量的评价很难有一个统一的标准。
但就大多数的软件来讲,对其质量还是可以找出一些共性标准来衡量,例如:
可以从如下的几个方面得到共同的认识:
1、可靠性
软件的可靠性是指软件本身没有错误,在预期的环境条件下能正确地完成期望的功能,而在意外的情况下,也能作出适当的处理不致造成严重的损害。
所以,软件的可靠性应包括程序的正确性和健壮性两个方面。
⑴、正确性
编制程序的目的是为了完成某些特定的功能,如果一个程序不具有所要求的功能,则这个程序是毫无价值的。
正确性应是程序的一个最基本的要求,它是通过对算法的精心设计和详尽的检查来实现的。
⑵、健壮性
程序的健壮性和正确性是同样重要的。
一个可靠的程序应该具有一定的纠错能力。
一个完全正确的程序,若根本不检查输入的数据是否合理,就可能造成严重的后果,这样的程序显然是不可靠的。
一个正确的程序还应该具有查核输入数据的正确性和合理性的能力,要经得起长时间及大批量数据的考验。
2、易修改性
软件开发是根据用户的需求进行的。
用户往往会因时、因地提出一些新的要求。
另外,一个较大的软件经测试后还可能会有错误,这些错误要在运行阶段才会逐步暴露出来。
所以,软件需要不断修改、扩充。
为了能有效地修改程序,可在尊重程序原有结构的情况下,修改某一部分,而不影响其它部分,以取得所期望的新结果。
3、易理解性
易理解性是指程序的内部结构清晰,易于阅读和理解(为了测试、排错、修改等),在系统中人机界面简明、清晰,使用户乐于使用。
为此,一个好的软件应层次分明,其最低层应采用好的编码风格,而较高层应是数据和算法的合理映射,使测试维护人员能从中容易地分离出其中的数据结构和算法。
4、有效性
有效性是指软件系统是否能以最佳方式,有效地使用计算机资源。
在现今硬件价格下降,性能、速度不断提高,而软件开发费用不断上升的情况下,人们宁可牺牲一点机上运行的效率也要获得较好的易修改性和可靠性。
§2-2程序设计的基本概念
一、程序和程序设计
计算机程序是指计算机一组指令的有序集合,或者说是一组语句的有序集合。
换言之,一个程序是用程序设计语言对处理过程的描述,而描述的对象不外乎是对处理对象──数据和处理方式──算法的描述。
所以,程序结构应包括数据结构和控制结构两个方面,即:
程序=数据结构+算法
实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。
因此,程序可以这样表示:
程序=数据结构+算法+程序设计方法+语言工具和环境
也就是说,以上四个方面是一个程序设计人员所应具备的知识。
本书将兼顾这四个方面介绍测量程序的编写方法。
程序设计是指构造具有某种指定功能的指令序列的过程。
这是一项技术性很强的工作,它是模仿性和创造性的统一。
所谓模仿性,是指程序设计必须严格遵循程序设计语言的有关语法规则,模仿它的格式来编写。
创造性是指在符合程序设计语言所规定的语法规则的前提下,如何描述计算过程,采用什么计算方法,程序设计人员可以针对各自的课题尽情地发挥。
这里赋予程序员以极大的灵活性和创造性。
因此,对同一课题,由不同人员设计出来的程序往往是不同的。
例如编程求下面数列的前
项和:
其中
,且
为整数。
针对这个问题,可采用以下两个不同的算法:
1、方法一:
设
,则:
…………
方法一程序:
A=8(即a=8)
I=1(I为循环变量)
N=10(N为数列的总项数)
T=0
DO
IFI>NTHENEXITDO
J=1(J为内层循环变量)
TT=0
TT0=0
DO
TT0=10^J-(10-A)*10^(J-1)
TT=TT+TT0
J=J+1
IFJ>ITHENEXITDO
LOOP
T=T+TT
I=I+1
LOOP
PRINT“数列前N项之和=”;T(T为结果)
2、方法二:
设
则:
方法二程序:
A=8
TT=0
N=10
ForR=0ToN-1
J=0
ForI=0ToR
k=A*(10^I)
J=J+k
NextI
TT=TT+J
NextR
Print"数列前N项之和=";TT
又如给定三点坐标,据此作三角形之前,判断这三点是否共线。
可采用如下两种方法:
1、先计算1点与2点之间、2点与3点之间的坐标方位角
;然后,判断这三点是否共线。
若
则说此三点共线;否则,说明这三点不共线。
2、如图2-1所示有三种可能情况,先计算平距
;然后,判断这三点是否共线。
若
or
or
则说明三点共线;否则,说明三点不共线。
——该问题可用于根据碎部点构造三角网,以便自动内插等高线;也可用于根据三点绘制三角形外接圆等问题图2-1三点共线
二、程序设计的一般过程
在实际工作中,人们所开发的软件项目,多数是只需一、二人参加就足够的小项目。
像这类项目可根据“小”的特点,采用适当简化的方法,比如,小项目规模小,对问题的理解比较容易,一般可以不进行可行性研究。
但对开发的软件,先进行分析制定计划还是必要的。
有的编程设计人员有一接受任务不制定计划就着手开发的坏习惯,应克服。
又如在设计、编码阶段,由于一、二人进行,对程序的复查工作带来困难,开发者提供文档资料,帮助复审人员更好地理解所开发的软件是必要的。
但是,小的软件项目可以使用简化了的软件工程方法进行,对某些阶段和文档资料,根据具体情况进行简化。
对程序设计的一般过程可归纳为:
1、分析任务、定义功能。
对任务和给定的数据进行分析,明确需要完成的功能和输出的要求,概括地、明确地用文字整理成文。
2、根据定义的功能,设计一个体现总任务的“抽象程序”。
3、将总任务分解成若干子任务,并对每个子任务进行再分解,直到不能再分解为止。
4、对每个子任务进行算法和数据结构设计,绘制N─S流程图及进行相应的文字说明。
5、选择适当的程序设计语言和进行结构化编码,并写出使用说明。
6、程序的测试和调试工作。
三、程序设计的基本原则
软件工程的最终目标是以较少的投资获得具有可靠性、易修改、易理解和有效性的软件产品。
因而,进行程序设计应遵循如下基本原则:
1、抽象与隐蔽
由于人的能力所存在的固有的局限性,一般不可能一下子就能触及到问题的全部细节。
总是先从分析问题入手,抽取基本的性质忽略非基本的细节,提出一个总的抽象算法。
将一些能影响系统的细节隐蔽起来成为不可访问的,这是应付复杂问题的重要手段。
抽象只考虑应“做什么”,“如何做”则隐蔽起来。
抽象是有层次的,人们可在抽象的不同层次上认识和处理问题。
比如一个学校主要考虑要办几个系,系则关心的是本系要设几个专业,专业教研室则关心的是本专业的建设问题。
人们就可利用抽象这一重要的属性,实现对复杂问题的分解,使它简化。
又如程序使用说明书,作为用户和程序员的界面,用户从中只看到程序可以“做什么”,看不到程序是“如何做”的技术细节,这就简化了用户应掌握的内容,而集中精力抓住问题的本质。
应用抽象和隐蔽的原则,实现复杂问题的分解和不同功能软件的叠加,从而改善了程序设计环境,使程序设计变得简单而方便。
2、模块和模块化
模块和模块化是对一个复杂问题的“分解”与“综合”,是应付复杂问题的重要手段。
所谓分解,就是将一个总任务分解成一系列相互联系而又相对独立的基本元素(子模块);所谓综合,是从总任务的完整性和每个元素功能特征出发,进行综合分析,以确定它们之间的联系,形成整体结构。
模块和模块化的原则,直接支持了易修改性、可靠性和易理解性的目标。
3、反复与复审
程序在开发过程不可能总是直线式进行,在研制过程中,免不了要发生各种各样的错误,这些错误往往要在后期才能发现。
这就决定了程序的研制工作必然存在重复交错进行的现象,各阶段甚至要反复进行几次才能达到目的。
复审制度的建立,是减少反复次数的保障措施。
在研制过程的每一阶段都应坚持复审。
做到这点,也是实现软件工程目标的有力保证。
4、一致性和确定性
一项稍大软件的开发常由多人合作完成,研制过程做到统一化、规范化是开发成功的必要条件。
一致性就是要求在步调上、命令方式、文档格式做到一致,使开发工作走上规范化轨道。
确定性也是保证软件质量的前提。
它要求将人们的一些直觉变成明确的说明。
比如将“软件质量要好”具体化成“正确可靠、易修改、易理解”;将用户心目中想的“响应时间很快”明确地表达成“响应时间小于x秒”等都是确定性的体现。
§2-3结构化程序设计技术
70年代,荷兰著名计算机科学家EdsgarW.Dijkctra(迪克特拉)提出了结构化程序设计的思想。
结构化程序设计规定:
一个程序由“顺序、选择和循环(重复)”三种基本结构组成,要求结构化程序设计的高级计算机语言中应该具有直接实现这三种基本结构的语句,而且要求程序实现模块化(即主程序和子程序分别属于不同的模块)。
具有代表性的结构化程序设计的计算机编程语言有:
BASIC:
TrueBASIC
QuickBASIC
TurboBASIC
C:
TurboC
C++
PASCAL
VB60也具有结构化程序设计的计算机编程语言的功能。
现在,已经把程序“具有良好的结构,容易阅读和理解”作为衡量程序质量的首要条件。
一个好的程序应该具备以下条件:
①、运行结果正确(这是最起码的条件)。
②、有良好的结构,清楚易懂。
③、尽可能少的运行时间。
④、运行时所占内存应压缩到合理的范围之内。
也就是说,按照现在的标准,易读性好是第一位的,其次才是效率。
因为从根本上说,只有程序具有良好的结构,才易于设计和维护,减少软件成本,从整体来说才是真正的效率。
人们看程序总是从上往下看下去的,在程序中无限制地使用GOTO语句,跳转太多,思路就乱了。
像这样的程序,如同一团乱麻,使人无从下手。
人们把这种程序称作面条式程序(如同一碗面条,互相绞缠在一起),或称BS型程序(BS是aBowlofSpaghetti的缩写,意为“一碗面条”)。
这种程序无任何规律而言,令人望而生畏。
它造成程序设计和检查程序时的困难,增加程序出错的可能,降低程序的质量。
为了提高程序的易读性(容易理解),保证程序质量,降低软件成本,荷兰学者迪克特拉等提出了“结构化程序设计方法”的概念。
它的要点是:
1、程序的质量标准是“清晰第一、效率第二”。
2、要求程序设计者按一定规范书写程序,而不能随心所欲地设计程序。
应当按照“工程化”生产方式来组织软件生产,每个人都必须按照同一规则、同一方法进行工作,使生产的软件有统一的标准、统一的风格,成为“标准产品”,便于推广,便于生产和维护。
3、结构化程序设计方法规定了三种具有良好特性的“基本结构”(顺序结构、选择结构和循环结构),用它们作为构成程序的基本单元,如同建筑房屋用的标准预制件一样。
每一种基本结构完成一种类型的操作序列。
由这些小单元顺序组成一个大结构,这种结构可以避免上述“任意转向”的缺点。
4、一个大程序开发应当采取“自顶向下、逐步细化和模块化”的方法。
即将一个大任务先分成若干个子任务,每一个子任务就是一个模块。
如果某一个子任务还是太复杂,还可以再分解为若干子任务,如此逐层分解。
对每一个模块的设计也是采取这种“自顶向下、逐步细化”的方法,直到将它分解为上述的基本结构为止。
这如同写文章一样,有人不订提纲,想到哪里写到哪里,而有人则先拟出总题目和中心内容,再确定分为几大部分,每一大部分又分为哪几节,每一节分为哪几段,每一段包含哪些内容。
有了这样通盘考虑的提纲后,文章的结构一般来说是比较清楚的,考虑是周全的,不易发生遗漏。
这就是“自顶向下、逐步细化”的方法。
5、“具有良好特性的基本结构”应具有如下特点:
①、只有一个入口。
②、只有一个出口。
③、无“死语句”(没有永远