1、COBOL语言程序设计,课程简介,授课时间:24学时 上机时间:8学时 教材:COBOL语言Denny Ren (任南明) 电话:718-631-4535 (USA); 15105192674 Email:,List of resources,Enterprise COBOL for z/OS Programming GuideEnterprise COBOL for z/OS Language Reference VSAM for the COBOL Programmer by Doug LoweMurachs Mainframe COBOLCOBOL Programmers Noteboo
2、k by Jim Keogh,Review,HLQ - high-level qualifier PDS & PDSE VTOC - DSCB QSAM -Queued sequential access method (QSAM) files are unkeyed files in which the records are placed one after another, according to entry order. VSAM KSDS, ESDS, RRDS, LDS SMS-Storage Management Subsystem -automated data and sp
3、ace management. Easier to convert to new device. Master Catalog DSN, VOLUME, UNIT. Alias Catalog structure RACF none, read, write, control, alloc z/VM RAS -reliability, availability, serviceability,z/OS JES, RACF, CICS, DB2, DFSMS, SDSF, TSO, VTAM, CATALOG, TCP/IP, etc Address Space - The range of v
4、irtual addresses that the operating system assigns to a user or separately running program is called an address space. IPL JCL UTILITY IEBCOPY, IEBGENER, IDCAMS,Catalog,A catalog consists of two separate kinds of data sets: a basic catalog structure (BCS); and a VSAM volume data set (VVDS). The BCS
5、can be considered the catalog, whereas the VVDS can be considered an extension of the volume table of contents (VTOC). The basic catalog structure is a VSAM key-sequenced data set. The VSAM volume data set is a VSAM entry-sequenced data set. VVDS records for VSAM data sets are called “VSAM volume re
6、cords” (VVRs). Every catalog consists of one BCS and one or more VVDSs.,Most catalog searches should be based on catalog aliases. When appropriate aliases(化名)are defined for catalogs, the high-level qualifier of a data set name is identical to a catalog alias and identifies the appropriate catalog t
7、o be used to satisfy the request. Use IDCAMS to define Master catalog, User Catalog and Alias.Each system has one active master catalog and contains aliases pointing to all the user catalogs.,DEFINE MASTERCATALOG ( NAME(VSCATLG.SYS1.MASTCAT) CYLINDERS (5 1) VOLUME (ALTVOL) -ICFCATALOG)DEFINE ALIAS (
8、NAME(PROJECTA) RELATE(VSCATLG.ICFCAT.TEST01) LISTCAT ENT(your.vsam.dataset),The Volume Table of Contents and the VTOC index are system data sets that maintain extent and allocation information for a volume. the VVDS can be considered an extension of VTOC.,A CI is a contiguous area of direct access s
9、torage that VSAM uses to store data records and control information that describes the records. A CI is the unit of information that VSAM transfers between the storage device and the processor during one I/O operation. A CA is formed by two or more CIs put together into fixed-length contiguous areas
10、 of direct accessstorage. A VSAM data set is composed of one or more CAs. CI and CA splits occur as a result of data record insertionsVSAM Share options - to implement VSAM data set integrity (read and write integrity).,LISTC ENTRY(DAWN.KSDSEXG) ALL KEYLEN-8 REC-TOTAL-321595 REC-DELETED-173530 SPLIT
11、S-CI-6466 SPLITS-CA-42 HI-A-RBA-736100352 HI-U-RBA-203685888 SHROPTNS(1,3),Index component Index set & Sequence set Data component,主机(大型机)系统,主机系统Mainframe: 大型机(mainframe)这个词,大多数时候它却是指system/360 开始的一系列的IBM计算机.。 IBM大型机目前多直接称为主机,主机系统得以长盛不衰的主要原因,RAS,I/O处理能力以及ISA RAS(Reliability, Availability, Serviceabi
12、lity) 高可靠性、高可用性、高服务性)是一个IBM常用来描绘它的大型机的词。 目前z900大型机的I/O吞吐能力是最低每秒24GB。 ISA (IBM System Architecture)虽然IBM大型机的整体指令集有了显著改进,IBM保持了惊人的对应用程序的向后兼容(downward compatible )。IBM儘最大的努力来保证它的客户们不必重写或重測試他们的程序(program)在新系统上运行。,大型机的编程语言COBOL,Today, more than 90% of all COBOL code is running on IBM mainframes. These ar
13、e used by Fortune 500 companies. IBM的大型机概念强调的是IO和RAS,追求的是稳定、可靠,主要用于商业管理系统;典型编程语言是Cobol。,第一章 COBOL语言概述,1.1 COBOL发展概况,COBOL is a high level language first introduced in 1959. ANSI COBOL standards 1968, 1974, 1985, 2002 COBOL compilers (1985 standard)VS COBOL IICOBOL for MVS & VM COBOL for OS/390 & VM
14、Enterprise COBOL for z/OS & OS/390 COBOL 不是设计来进行系统编程。一般来说,没人用COBOL来写操作系统(OS)或者编译器(compiler). COBOL是如下单词的简写(COmmon Business Oriented Language). COBOL was specifically designed for business applications.,COBOL商业计算首选语言。 40年里,它曾经的对手: PL1, Algol68, Pascal, Modula, Ada, C, C+ 目前的强大对手:JAVA、C#为代表的新一代语言,Gart
15、ner group 的关于COBOL优势的调查报告: 在1997年他们估计全世界有3千亿行的计算机代码正在使用。其中80的是COBOL程序,而其他程序总计只占20。 在1999年,他们报告说,超过50的关键事务应用程序仍然会用COBOL语言编写,他们最近估计表明在20042005年度所有新程序(50亿行)的15将用COBOL开发,同时,80的部署在计算机里面的程序将包括以前遗留的COBOL程序。 该集团估计,在2002年全世界有大约200万COBOL程序员,而JAVA和C+程序员各自只有100万,是不是很神奇? 神奇的COBOL,你是不是对上面的資料感到很惊奇? 古老的COBOL在流行的JAV
16、A、C+、VB、C一点都不落下风 到底是什么原因呢?软件的两种类型 “垂直”软件 “水平”软件,“垂直”软件价值上百万美金的程序被开发、或者根据某些特别公司的需要被裁剪、或者按照特殊事务规则进行调整。但是,却只有很少的拷贝被使用。一个例子: 美国国防部的MRP II系统,该系统管理着550,000种零件和部件,储备价值高达280亿美金。该系统运行在Amdahl主机系统上,部署在全美国不同的地方,由4百万行COBOL程序构成,“水平”软件像微软的Office一样,功能可能也很强大,代码也很多,但是会有很多个拷贝。因此,每个拷贝的成本并不高。此种软件竞争激烈,一般用C+、JAVA等新语言进行开发,
17、软件利润很高而且更新很快,“垂直”软件一般说来利润并不高,每个拷贝的成本却很高。因此,替换成本很高,因此这种软件生命周期一般都很长。例如对MRP II的用其他语言改写的估价为1亿美金。因此,对现有COBOL程序的维护需要大量COBOL程序员,1.2 COBOL语言的特点,最适于数据(Data)处理领域数据处理的特点是:算术计算量少而逻辑处理多;输入输出量大;数据间存在着一定的逻辑关系(数据项间有清晰的层次关系,大量的分类排序对打印报表要求较高、多样化等等。COBOL所处理的问题具有数据繁多而运算简单的持点。,COBOL比较接近于自然语言(英语)。 COBOL程序看起来很像一篇用英语写的文章。例
18、如: ADD A TO B来表示ABB(A加B,结果故在B中) MOVE C TO D表示将变量C的值传送到变量D中 COBOL大量采用普通英语词汇和句型,学过英语的人看程序感到通俗易懂。,通用性强 由于COBOL语言的标准化程度较高。不同厂家生产的计算机系统所提供的COBOL,是COBOL标准的全集或一个子集。一个计算机上的COBOL程序向另一计算机系统上移植,是比较容易实现的。 目前主机系统上面的COBOL可移植更好,COBOL的结构严谨,层次分明。 每个程序(program)分为四大部分(称为部,division),每个部下面又分为若干节(section),节下面又分为若干段(parag
19、raph)。每一部分都有固定的程式。这个特点使初学者比较容易通过摹仿别人程序中的有关部分,从而较快地写出自己的程序。,COBOL的缺点是比较繁琐。 程序无论大小简繁,一律都要写齐四大部分,对每个部进行必要的定义和说明。因此源程序(source program)显得比较冗长。关键字(Reserved word)高达300多个,很难记忆。而且很多关键字并不“关键”,可以省略。不过请记住:COBOL世界上使用最多的一种计算机语言,1.3 最简单的COBOL程序,1.4 COBOL程序的结构,部IDENTIFICATION DIVISION. (标识部)主要用来指定源程序(source program
20、)名字。也可以写入其它用作备忘的某些信息(如日期、作者等)。 ENVIRONMENT DIVISION. (环境部)指出程序中用到的数据文件名与计算机系统的设备的对应关系,即把某一文件名与一外部设备联系起来。(此外还指定目标程序中使列的专门控制方法及程序所用内存区的大小等, 一般都己不用) Divided into two sections Configuration (輪廓; 外形) & Input-Output section.,DATA DIVISION. (数据部)程序中所用到的全部数据(包括输入输出的数据和中间数据)都应在数据中说明它们的类型和所占内存(storage)的情况。 PR
21、OCEDURE DIVISION. (过程都)用来给出程序要执行的指令,使计算机产生相应的操作。例如进行运算或其它处理。,DATA DIVISION.,Define data elements (in working-storage section) and data files (in file section) will be used in your program.DATA DIVIDION. FILE SECTION. FD ERRTRANLABEL RECORDS ARD STANDARD. 01 ERROR-TRANSACTION PIC X(21). WORKING-STORA
22、GE SECTION. 01 AGE PIC 99.,节和段除标识部以外,在每一个部(DIVISION)的“部头”的下面,可以有若干个节(SECTION),每一个节以“节头”作标识。 每一节下面又可包括若干段(PARAGRAPH)。每一个段都有自己的名字(即段名)。 在标识部下面不设节直接设段,句子、语句和子句在过程部(PROCEDURE DIVISION)中,每一段由若干个句子(Sentence)组成。一个句子是以句号加一个以上的空格束结束的。 句子又由语句(Statement)组成。一个句子可以只由一个语句组成,一个语句加一个句点后跟一个(多个)空格就成为一个句子。在一个语句中又可以包含若
23、干个子句(clause)每一子句也有一个动词,它指定某一方面特定的功能。,过程部(Procedure Division)中程序的结构: 部(Division) 部可以包含若干节 节(Section) 节可以包含若干段 段(Paragraph) 段可以包含若干句子句子(Sentence) 句子可以包含若干语句语句(Statement) 指定计算机完成一定的操作子句(Clause) 指定完成某一方面的特定功能,描述体在数据部(Data Division)中有若干节,每个节中有若干个描述体(Description entry),亦译作描述款目或描述款),每个描述体义由若干个子句构成。,1.5 COB
24、OL源程序书写格式,自由格式和固定格式 COBOL必须严格按照规定的格式书写。,ANSI源程序书写格式见图,1. 16列,为“标号区”(sequence area)。可以填写6个数字。标号由程序编写者自定,标号应按由小到大的顺序,但不一定连续。标号区内可以写标号也可以不写标号(标号区空白)。标号对源程序的执行结果没有任何影响。在程序编译时是按程序书写的顺讯进行的,而不是按标号大小顺序进行的。2第7列,是“续行标志区”(indicator area)。如果在第7列上写上连接符“-”,则表示本行是紧接在上一行的后面。如果在第7列写“*”,则表示此行是注解行(comment),即此行可由程序员任意写
25、上自己所需的内容,以对程序(或程序的一部分)作说明。它对程序的执行不起任何影响,3第811列,称为“A 区”(area A),第8列称“A区边界”。COBOL规定,程序中有些内容,例如部头、节头、段头、层号01,层号77以及文件描述符FD等应从A区开始书写41272列,称“B区”。写程序中的正文部分,例如过程部(Procedure Division)中的句子只能从B区开始,而不能写到A区去。57380列为“注释区”。程序员如想对源程序的某些行作些简单说明,可写在这8列中,因此写源程序时注意不应超过第72列,超过的部分在编译(Compile)时将被舍弃。,写程序的注意事项: 每个字符占一格。 较
26、早的COBOL版本规定所有字母都应大写,但现在使用的COBOL编译系统允许使用大写或小写字母,二者等价。不过习惯都用大写字母,主机系统一般都用大写字母。 相邻的两个字(如COBOL的保留字或用户自己定义的名字)之间必须留一个以上的空格。 运算符(如加、减、乘、除、乘方)和等号左右两边必须各留一个空格。在过程部中左括号的左侧和右括号的右侧要留一空格,而内侧不必留空格。 逗号、句号、分号的左边不能留空格,而右边应有一个空格。 一个空格和多个空格作用相同,1.6 COBOL字符和COBOL字,COBOL字符 (Character) 系统字符集指(character set)的是在输入输出操作中允许出
27、现的字符的集合。COBOL字符集指的是COBOL程序中允许出现的字符(用引号括起来的字符串户的字符除外)。,COBOL字符集:,数字:09 大写字母:AB 小写字母:ab 专用字符:,+ 加号 - 减号或连接号 * 乘号或星号 / 除号 = 等号 , 逗号 . 句号或小数点 ; 分号 引号(有的用”) ( 左括号 ) 右括号大于号空格$ 美元号,COBOL字 (word),COBOL字是由COBOL字符组成 COBOL字不允许超过30个字符(character) 保留字 (Reserved word) 用户字 (User defined word) Information is stored
28、in your program as a Constant or as a Variable,1.7 数据名,数据名的概念: 数据名(Data name)可以认为是由程序设计者定义的某一片内存区(storage)的符号地址,即用一个符号代表一个地址。数据名相当于其它语言中的变量名(variable),它代表一个具体的数据项。You can refer data name as a variable name.,数据名的定名规则 每个数据名的长度为130个字符之间。 只能由字母、数字和连接符“-”组成,而且其中至少应有一个字母。连字符只能出现在数据名的中间,不能出现在数据名的两端(最前或最后)。
29、如: ABC,RATEOF-PAY3DG4,A1-2-3,1234ABCWANG-LI 都是合法的数据名。而: 123、JOKN.HENRY,WANG-,-ABC, ATEJ, ABC*DEF,1999-9-9 都是不合法的数据名。,数据名中不能出现空格 不应该选择COBOL的保留字(reserved word)作为用户定义的数据名(300多个保留字,当心!) 数据名最好采用有意义的英文名或者拼音等,1.8 常量,常量常数 1、数值常量(Numerical Constant)数值常量即数学上的常数。如+12300、451.67、 -51.635数值常量是由正负号、小数点、数字09所组成的字符序
30、列 注意: 小数点不能多于一个,而且不能出现在常数的最右边 数值常量长度不能超过18位数字。 至少要有一个数字,不能有多于一个符号。 数字之间不能有空格,空格是分界符。,2 非数值常量(Non-numerical Constant) 用引号括起来的字符串: ABCD、“$123,456.789”、“我是软件学院的学生” 如果想把引号也包括在非数值常量中,例如想显示出ABCD六个字符组成的字符串,按以下方式进行: DISPLAY QUOTEABCDQUOTE (“ABCD”) 注意QUOTE只能在这种情况下使用,不能代替一般意义的引号。 非数值常量有120个字符的限制,但不同系统有不同规定。,A
31、 variable is a data item whose value can change during a program. A literal (直譯,照字面的) is a character string whose value is given by the characters themselves.Ex. display “Part number was found” A constant (常量) is a data item that has only one value.,3、表意常量(Figurative Constant),1.9 COBOL所处理的数据的特点,1、层次(level)的概念,01 GZTJ 02 ZGM 02 SR 04 JBGZ 04 FJGZ 04 YBBZ 02 KC 04 BSJ 04 FZF 04 SDF 04 TEF 02 SFGZ,为了反映某数据在一个层次结构中的层次,我们引进层次的概念,层号用二位整数来表示。用不同的层号表示它们之间的从属关系。 初等项 组合项,2、记录和文件 记录(record)是具有一定层次关系的一组数据项的最大集合。是内存中具有独立逻辑含义的最大可存取(read write)项,具有最高的层次,即层号为01。 多个记录可以组成一个文件(file) 多个记录可以保存在数据库的表中,