1、COBOL程序设计课程简介v授课时间:16学时v上机时间:16学时v教材:COBOL语言(上上下册)修订本 谭浩强 清华大学,1994主机(大型机)系统v主机系统Mainframe:大型机(mainframe)这个词,最初是指装在非常大的带框铁盒子里的大型计算机系统,以用来同小一些的迷你机和微型机有所区别。大多数时候它却是指system/360 开始的一系列的IBM计算机。这个词也可以用来指由其他厂商,如Amdahl, Hitachi Data Systems (HDS) 制造的兼容的系统。IBM大型机目前多直接称为主机主机系统得以长盛不衰的主要原因 vRAS,I/O处理能力以及ISA RAS
2、(Reliability, Availability, Serviceability 高可靠性、高可用性、高服务性)是一个IBM常用来描绘它的大型机的词。 目前型号为Z900的大型机的I/O吞吐能力是最低每秒24GB(这是字节数,不是“位”数。) ISA (IBM System Architecture)虽然IBM大型机的整体指令集有了显著改进,IBM保持了惊人的对应用程序的向后兼容。许多最为显著的构架上的变化已经影响了一些只能直接被操作系统调用,而不能被应用程序调用的设备(如I/O子系统)。IBM已经花费了巨大的努力来保证它的客户们不必重写或重编译他们的程序来在新系统上运行。这样,客户要采用
3、新的硬件就更为容易,客户只需要拔下旧系统,换上新系统,而不需要做额外的软件测试工作。 大型机的编程语言COBOLv大型机技术上有很多领先的地方,积累了很多行业应用,一大堆非关系(关系)数据库/Cobol程序之类,这些东东没法移植,成为大型机可以吃的老本、继续辉煌的资本。 vIBM的大型机概念强调的是IO和RAS,追求的是稳定、可靠,主要用于商业管理系统;典型编程语言是Cobol。 第一章 COBOL语言概述1.1 COBOL发展概况vCOBOL是一个高级程序设计语言,1960由 CODASYL 委员会 (Conference on Data Systems Languages)提出。以后,新的
4、COBOL标准由美国国家标准组织(ANSI)负责vANSI推出的3个COBOL标准: 1968, 1974和1985.目前,关于面向对象的COBOL标准正在制定.vCOBOL是如下单词的简写(COmmon Business Oriented Language).COBOL设计来主要是进行事务处理,多应用于商业领域,典型的诸如文件导向的应用。v而不是设计来进行系统编程。一般来说,没人用COBOL来写操作系统或者编译器.vCOBOL商业计算首选语言。v40年里,它曾经的对手:PLI, Algol60, Algol68, Pascal, Modula, Ada, C, C+v目前的强大对手:JAVA
5、、C#为代表的新一代语言Gartner group 的关于COBOL优势的调查报告:v在1997年他们估计全世界有3千亿行的计算机代码正在使用。其中80的是COBOL程序,而其他程序总计只占20。v在1999年,他们报告说,超过50的关键事务应用程序仍然会用COBOL语言编写,他们最近估计表明在20042005年度所有新程序(50亿行)的15将用COBOL开发,同时,80的部署在计算机里面的程序将包括以前遗留的COBOL程序。v该集团估计,在2002年全世界有大约200万COBOL程序员,而JAVA和C+程序员各自只有100万v这个数字正以每年5%的速度递减。未来10年,Cobol程序员数目将
6、很快走下坡路,随着二战生育高峰人群的退休,人口补充严重不足。 v2007年,Micro Focus 对客户的调查显示,75%的 CIO (Chief Information Officer) 声称他们在未5年需要更多 Cobol 程序员,73%的 CIO 发现要找到一个训练有素的 Cobol 程序员越来越难。 vMicroFocus也指出,不管你信不信,每个美国人每每个美国人每天至少都会有天至少都会有13次接触到次接触到COBOL,而且就在看似,而且就在看似最平凡的打电话、刷信用卡、通信联络等日常生活最平凡的打电话、刷信用卡、通信联络等日常生活中。中。当然这很大程度上都是在COBOL雄厚的商业
7、领域基础惯性,因为银行和网络运营商的内部系统很早就在使用COBOL,而且运行良好,没必要也不方便更换。v根据英国伦敦国际调研公司Datamonitor的报告,目目前全球仍有多达前全球仍有多达2000亿行亿行COBOL语言代码正在执语言代码正在执行,而且每年都会增加行,而且每年都会增加50亿行,全球亿行,全球75的商业数的商业数据和据和90的金融交易都由的金融交易都由COBOL处理,全球处理,全球500强强企业中有企业中有492家家(包括全部前包括全部前100强强)都使用了都使用了COBOL,目前在,目前在COBOL方面的投资已经超过方面的投资已经超过2万万亿美元,亿美元,150-200万名开发
8、人员还在使用这种这种万名开发人员还在使用这种这种已经走过了半个世纪的编程语言。已经走过了半个世纪的编程语言。v有人预测说,即使到了2050年,很多现在广泛使用的编程语言都将消失得无影无踪,但COBOL很可能依然会在服役。vIT 服务公司 Murphy International 的 Nate Murphy 说,我们对 Cobol 程序员和使用 Cobol 的公司做了调查,发现目前 Cobol 就业市场包含以下两种类型:第一,在旧的 Cobol 代码和新程序之间充当桥梁,这种工作要求人们懂 Cobol,懂那些老 Cobol 程序员所依赖的商业逻辑,同时懂新的编程语言,如 Java。第二是维护旧的
9、 Cobol 代码,并编写新的 Cobol 代码。是不是很神奇? 神奇的COBOLv你是不是对上面的材料感到很惊奇?v古老的COBOL在流行的JAVA、C+、VB、C一点都不落下风v到底是什么原因呢? 软件的两种类型“垂直”软件(定制软件)“水平”软件(通用软件)v“垂直”软件价值上百万美金的程序被开发、或者根据某些特别公司的需要被裁剪、或者按照特殊事务规则进行调整。但是,却只有很少的拷贝被使用。一个例子:美国国防部的MRP II系统,该系统管理着550,000种零件和部件,储备价值高达280亿美金。该系统运行在Amdahl主机系统上,部署在全美国不同的地方,由4百万行COBOL程序构成v“水
10、平”软件像微软的Office一样,功能可能也很强大,代码也很多,但是会有很多个拷贝。因此,每个拷贝的成本并不高。此种软件竞争激烈,一般用C+、JAVA等新语言进行开发,软件利润很高而且更新很快v“垂直”软件一般说来利润并不高,每个拷贝的成本却很高。因此,替换成本很高,因此这种软件生命周期一般都很长。例如对MRP II的用其他语言改写的估价为1亿美金。因此,对现有COBOL程序的维护需要大量COBOL程序员1.2 COBOL语言的特点v最适于事务处理(商业计算)领域 事务处理的特点是:算术计算量少而逻辑处理多;输入输出量大;数据间存在着一定的逻辑关系(数据项间有清晰的层次关系),大量的分类排序,
11、数据结果将用于报表打印,对打印报表要求较高、多样化等等。 COBOL所处理的问题具有数据繁多而运算简单的持点。v COBOL比较接近于自然语言(英语)。 COBOL程序看起来很像一篇用英语写的文章。例如:vADD A TO B来表示ABB(A加B,结果故在B中)vMOVE C TO D表示将变量C的值传送到变量D中COBOL大量采用普通英语词汇和句型,学过英语的人看程序感到通俗易懂。v通用性强由于COBOL语言的标准化程度较高。不同厂家生产的计算机系统所提供的COBOL,是COBOL标准的全集或一个子集。一个计算机上的COBOL程序向另一计算机系统上移植,是比较容易实现的。目前主机系统上面的C
12、OBOL可移植更好vCOBOL的结构严谨,层次分明。每个程序分为四大部分(称为部,division),每个部下面又分为若干节(section),节下面又分为若干段(paragraph)。每一部分都有固定的程式。这个特点使初学者比较容易通过摹仿别人程序中的有关部分,从而较快地写出自己的程序。vCOBOL的缺点是比较繁琐。程序无论大小简繁,一律都要写齐四大部分,对每个部进行必要的定义和说明。因此源程序显得比较冗长。关键字高达300多个,很难记忆。而且很多关键字并不“关键”,可以省略。v不过请记住:COBOL世界上(曾经)使用最多的一种计算机语言1.3 最简单的COBOL程序000100 IDENT
13、IFICATION DIVISION. 000200 PROGRAM-ID. EXAM1A1. 000300 ENVIRONMENT DIVISION. 000400 DATA DIVISION. 000500 PROCEDURE DIVISION. 000600 S. 000700 DISPLAY THIS IS A COBOL PROGRAM. 000800 STOP RUN. 1.4 COBOL程序的结构v部 IDENTIFICATION DIVISION.v(标识部)主要用来指定源程序名字。也可以写入其它用作备忘的某些信息(如日期、作者等)。ENVIRONMENT DIVISION.v
14、(环境部)指出程序中用到的数据文件名与计算机系统的设备的对应关系,即把某一文件名与一外部设备联系起来。此外还指定目标程序中使列的专门控制方法及程序所用内存区的大小等DATA DIVISION.v(数据部)程序中所用到的全部数据(包括输入输出的数据和中间数据)都应在数据中说明它们的类型和所占内存的情况。PROCEDURE DIVISION.v(过程都)用来给出程序要执行的指令,使计算机产生相应的操作。例如进行运算或其它处理。v节和段 除标识部以外,在每一个部的“部头”的下面,可以有若干个节(SECTION),每一个节以“节头”作标识。每一节下面又可包括若干段(PARAGRAPH)。每一个段都有自
15、己的名字(即段名)。在标识部下面不设节直接设段v句子、语句和子句 在过程部中,每一段由若干个句子(Sentence)组成。一个句子是以句号加一个以上的空格束结束的。句子又由语句(Statement)组成。 一个句子可以只由一个语句组成,一个语句加一个句点后跟一个(多个)空格就成为一个句子。 在一个语句中又可以包含若干个子句(clause)每一于句也有一个动词,它指定某一方面特定的功能。过程部中程序的结构:v部(Division) 部可以包含若干节节(Section) 节可以包含若干段v段(Paragraph) 段可以包含若干句子 句子(Sentence) 句子可以包含若干语句 语句(State
16、ment) 指定计算机完成一定的操作 子句(Clause) 指定完成某一方面的特定功能v描述体 在数据部中有若干节,每个节中有若干个描述体(Description entry),亦译作描述款目或描述款),每个描述体义由若干个子句构成。1.5 COBOL源程序书写格式v自由格式和固定格式vvoid main(void)int a,b,c;a=10;b=20;c=a+b;vCOBOL则不同,必须严格按照规定的格式书写。vANSI源程序书写格式见图v1. 16列,为“标号区”。可以填写6个数字。标号由程序编写者自定,标号应按由小到大的顺序,但不一定连续。标号区内可以写标号也可以不写标号(标号区空白)
17、。标号对源程序的执行结果没有任何影响。在程序编译时是按程序书写的顺讯进行的,而不是按标号大小顺序进行的。v 2第7列,是“续行标志区”。如果在第7列上写上连接符“-”,则表示本行是紧接在上一行的后面。如果在第7列写“*”,则表示此行是注解行,即此行可由程序员任意写上自己所需的内容,以对程序(或程序的一部分)作说明。它对程序的执行不起任何影响v 3第811列,称为“A 区”,第8列称“A区边界”。COBOL规定,程序中有些内容,例如部头、节头、段头、层号01,层号77以及文件描述符FD等应从A区开始书写v 41272列,称“B区”。写程序中的正文部分,例如过程部中的句子只能从B区开始,而不能写到
18、A区去。v 57380列为“注释区”。程序员如想对源程序的某些行作些简单说明,可写在这8列中,因此写源程厅时注意个应超过第72列,超过的部分在编译时将被舍弃。v写程序的注意事项:1.每个字符占一格。2.较早的COBOL版本规定所有源代码字母都应大写,但现在使用的COBOL编译系统允许使用大写或小写字母,二者等价。不过习惯都用大写字母,主机系统一般都用大写字母。3.相邻的两个字(如COBOL的保留字或用户自己定义的名字)之间必须留一个以上的空格。4.运算符(如加、减、乘、除、乘方)和等号左右两边必须各留一个空格。在过程部中左括号的左侧和右括号的右侧要留一空格,而内侧不必留空格。5.逗号、句号、分
19、号的左边不能留空格,而右边应有空格。6.一个空格和多个空格作用相同1.6 COBOL字符和COBOL字vCOBOL字符v系统字符集指的是在输入输出操作中允许出现的字符的集合。v COBOL字符集指的是COBOL程序中允许出现的字符(用引号括起来的字符串户的字符除外)。COBOL字符集:数字:09大写字母:AB小写字母:ab专用字符:+ 加号- 减号或连接号* 乘号或星号/ 除号= 等号, 逗号. 句号或小数点; 分号 引号(有的用”)( 左括号) 右括号 大于号 空格 $ 美元号COBOL字vCOBOL字是出COBOL字符组成vCOBOL字不允许超过30个字符v保留字v用户字1.7 数据名v数
20、据名的概念:数据名(Data name)可以认为是由程序设计者定义的某一片内存区的符号地址,即用一个符号代表一个地址。 数据名相当于其它语言中的变量名,它代表一个具体的数据项。COBOL中指的数据是广义的,即下仅指数值,也可以是字符。v数据名的定名规则1.每个数据名的长度为130个字符之间。2.只能由字母、数字和连接符“-”组成,而且其中至少应有一个字母。连字符只能出现在数据名的中间,不能出现在数据名的两端(最前或最后)。如:ABC,RATEOF-PAY3DG 4,A1-2-3,1234ABCWANG-LI都是合法的数据名。而:123、JOKN.HENRY,WANG-,-ABC, ATEJ,
21、ABC*DEF,1999-9-9都是不合法的数据名。3.数据名中不能出现空格4.不应该选择COBOL的保留字作为用户定义的数据名(300多个保留字,当心!)5.数据名最好采用有意义的英文名或者拼音等1.8 常量常量常数v1、数值常量(Numerical literal) 数值常量即数学上的常数。如+12300、451.67、 -51.635 数值常量是由正负号、小数点、数字09所组成的字符序列注意:小数点不能多于一个,而且不能出现在常数的最右边数值常量长度不能超过18位数字。至少要有一个数字,不能有多于一个符号。数字之间不能有空格,空格是分界符。v2 非数值常量(Nonnumerical li
22、teral)用引号括起来的字符串:vABCD、“$123,456.789”、“我是电子科大软件学院的学生”如果想把引号也包括在非数值常量中,例如想显示出ABCD六个字符组成的字符串,按以下方式进行:vDISPLAY QUOTE “ABCD” QUOTE注意QUOTE只能在这种情况下使用,不能代替一般意义的引号。非数值常量有120个字符的限制,但不同系统有不同规定。v3、表意常量(Figurative Constant)1.9 COBOL所处理的数据的特点v1、层次的概念v01 GZTJ02 ZGM02 SRv04 JBGZv04 FJGZv04 YBBZ02 KCv04 BSJv04 FZFv
23、04 SDFv04 TEF02 SFGZv 为了反映某数据在一个层次结构中的层次,我们引进层次的概念,层号用二位整数来表示。用不同的层号表示它们之间的从属关系。v初等项v组合项v2、记录和文件记录(record)是具有一定层次关系的一组数据项的最大集合。是内存中具有独卞逻辑含义的最大可存取项,具有最高的层次,即层号为01。多个记录可以组成一个文件(file)多个记录可以保存在数据库的表中作业v1、COBOL是一种高级程序设计语言,首先是由_委员会在1960年提出,是_的高级程序设计语言之一。自从COBOL语言诞生其开发新的COBOL标准的职责由美国国家标准学会(ANSI)承担v2、在过去的近5
24、0年里,_成了事务处理领域的具有统治地位的程序设计语言。v3、在互联网上用GOOGLE搜索COBOL,然后再用百度搜索,阅读相关网页v4、请谈一下您对COBOL这种古老的成功语言的看法v5、简述COBOL编制的应用系统的特点v6、简述COBOL语言成功的一些特点v7、第七列位于什么区?811列是什么区?1272列是什么区?v8、简述四大部及其作用?v9、尝试举出几个正确的COBOL字v10、常量分几类,判断下面的常量是否合法,并指出其类别:3.14, -234, 345., $77, “234.56”, “你好”, ABC, SPACE, ZEROES, QUOTEv11、尝试设计一个COBOL程序,让其输出显示一个“HELLO WORLD!”