1.01k likes | 1.34k Views
课程编号:. 培训课程名称 COBOL 语言 Version 1.0. 目标. 通过讲座与练习,使培训者熟练掌握 COBOL 语法,规范、以及 COBOL 语言的一些高级应用 熟悉开发环境,能够完成一般难度的编程需求。培养受训者解决问题的能力,以及解决问题的方法 本课程以面授和上机实践为主,中间穿插进行讨论。其中理论授课时间占 50% ,上机时间占 50% 考核采用百分制记录方式。考核内容为:理论闭卷考试 + 平时练习. 学时分配. 开发环境说明. 服务器: Windows XP Professional 日文版 Oracle 9i 服务器端 客户端:
E N D
课程编号: 培训课程名称COBOL语言Version 1.0
目标 • 通过讲座与练习,使培训者熟练掌握COBOL语法,规范、以及COBOL语言的一些高级应用 • 熟悉开发环境,能够完成一般难度的编程需求。培养受训者解决问题的能力,以及解决问题的方法 • 本课程以面授和上机实践为主,中间穿插进行讨论。其中理论授课时间占50%,上机时间占50% • 考核采用百分制记录方式。考核内容为:理论闭卷考试+平时练习
开发环境说明 服务器: • Windows XP Professional 日文版 • Oracle 9i 服务器端 客户端: • 操作系统:Windows XP Professional日本版 • COBOL开发环境:NetCOBOL • 编辑工具:EditPlus • 翻译工具:ChineseWriter • 数据库:Oralce9i客户端 • 数据库开发工具:PL/SQL • 文件比较工具:Beycond Compare
COBOL语言概述 COBOL是Common Business Oriented Language(通用商业语言,或称管理语言)的缩写 • 最适用于数据处理 • 比较接近于自然语言(英语) • COBOL的结构严谨,层次分明 • COBOL的缺点是比较烦琐
第一个程序例子 IDENTIFICATION DIVISION. PROGRAM-ID. EXAM. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. S. DISPLAY “THE FIRST PROGRAM”. STOP RUN.
每个程序包含四个部 • IDENTIFICATION DIVISION (标识部) 主要用来指定源程序名字,也可以写入其他用作备忘的某些信息(如日期、作者等)。 • ENVIROMENT DIVISION(环境部) 主要用于指出程序中用到的数据文件名与计算机系统的设备的对 应关系,即把某一文件名与一个外部设备联系起来。 • DATA DIVISION(数据部〕 程序中所用到的全部数据(包括输入输出的数据和中间数据)都应在数据部中说明它们的类型和所占内存情况。 • PROCEDURE DIVISION(过程部〕 用来给出程序要执行的指令,使计算机产生相应的操作,例如进行数学运算。
COBOL程序的书写格式 1-6列 标号区 7列 续行区(-)及注释行(*) 8~11列 A区 部头,节头,段头,层号01,层号77以及文件描述符FD应从A 区开写。 12-72列 B区 正文过程部的句子只能从B区开始写,而不能写到A区去。 73-80列 注释区 编译时被舍弃
写程序时注意的问题 • ⑴COBOL 编译系统允许使用大写或小写字母。认为字母大小写相等,但引号内的字符串中字母大小写有区别。写程序时习惯上多用大写。 • ⑵相邻的两个COBOL 字之间必须留一个以上空格。 • ⑶运算符和等号左右两边必须各留一个空格(需要的话,可以留一个以上空格)。左括号的左侧和右括号的右侧要留一个空格(需要的话,可以留一个以上空格),而内侧不必留空格。如:A + (B + C) / D. • ⑷逗号、句号、分号的左边不能留空格。 • ⑸一个空格和多个空格作用相同。 • ⑹一个语句或句子可以任意写在一行或几行上。一行可以写多个语句或句子。
COBOL字符 • 数字:0~9 • 大写字母:A~Z • 小写字母:a~z • 专用字符共15 个: + - * / = ,. ;’ ( ) < > 空格 $ • “#”、”!”、”?”、“%“等字符属于系统字符集,只能在COBOL 程序中的字符串(用引号括起来)中出现
COBOL常量 • 数值常量 • 非数值常量 • 表意常量 *不象其他的语言,COBOL不支持自己定义的常量
数值常量与非数值常量 数值常量是由正负号,小数点,数字组成 • 小数点不能多于一个,而且不能出现在常数最右边,因为句号加空格 代表一个句子的结束。(123.和123.45.6) • 长度不能超过18 位。 非数值常量 • 至少要有一个数字,不能多于一个符号。(+123.6-) • 数字之间不能有空格。(12 34 代表两个常量12 和34) • 指用引号括起来的字符串(“CHINA”,’JAPAN’)。 • 如果想把引号也包括在非数值常量中,可以使用QUOTE 保留字。但是QUOTE 不能代替引号,只有在引号外再使用QUOTE 保留字,它才能起到字符串的定界作用。 • 例子:DISPLAY QUOTE ’ABCD ’ QUOTE 正确。
表意常量 • ZERO,ZEROS,ZEROES 表示一个或多个零字符(16进制‘F0’) • SPACE,SPACES 表示一个或多个空格字符(16进制‘40’) • HIGH-VALUE,HIGH-VALUES 表示一个或多个字符具有最高值(16进制‘FF’, 2进制‘11’) • LOW-VALUE,LOW-VALUES 表示一个或多个字符具有最小值(16进制‘00’,2进制‘00’) • QUOTE,QUOTES 表示一个或多个引号字符(16进制‘7F’) • ALL 常量表示一个或多个该常量组成的字符串
COBOL变量 数据名相当于其它语言中的变量名。代表内存中某段存储单元。通过数据名从内存取出数据或者将数据存放到内存中。数据名的命名规则 • 数据名的长度为1~30 个字符之间。 • 能由字母、数字和连字符组成,而且其中至少应有一个字母。第一个和最后一个字符不能用连字符。COBOL 并不一定要求数据名是有意义的英文字,但由于COBOL 具有成文自明的特点,习惯上把数据名定义成有意义的COBOL 字(用户定义字)。 • 数据名中不能出现空格,空格表示一个COBOL 字的结束。 • 保留字不能作为用户定义的数据名。
标识部 标识部的作用是标识一个COBOL源程序,即为程序加上标志以便识别。 标识部必写部分: • IDENTIFICATION DIVISION.(部头) • PROGRAM-ID. 程序名.(程序标识段) 标识部任选部分: • AUTHOR. 作者姓名 • INSTALLATION. 计算机设置的场所. • DATE-WRITTEN. 源程序编写日期. • DATE-COMPILED. 源程序编译日期. • SECURITY. 保密程度.
环境部 • 环境部的作用是说明程序运行的环境,即程序是在什么软硬件环境下运行的。要说明程序用到哪些设备,哪些文件,将程序中用到的内部文件与外部文件(或外部设备)之间建立联系,这种联系是通过SELECT 子句实现的。 • 语法 ENVIRONMENT DIVISION. (环境部) CONFIGURATION SECTION. (配置节) SOURCE-COMPUTER. 源计算机名. OBJECT-COMPUTER. 目标计算机名. [SPECIAL-NAMES. 专用名描述项] [INPUT-OUTPUT SECTION. (输入输出节) FILE-CONTROL. 文件控制描述体 [I-O-CONTROL. 输入输出控制描述体]]
配置节 • 源计算机指的是编译源程序时使用的计算机。 • 目标计算机指的是编译后的目标程序运行时使用的计算机。 • 专用名段把系统中原规定的一些设备名或功能名或符号改为用户自己指定的名字或符号。专用名段的一般格式: SPECIAL-NAMES. [DECIMAL-POINT IS COMMA.] [CURRENCY SIGN IS 非数值常量.] [专用名 IS 助忆名.] CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-AS400. OBJECT-COMPUTER. IBM-AS400.
输入输出节 • 输入输出节包括两个段:文件控制段和输入输出控制段(I-O-CONTROL,几个文件共用一段内存,不常用)。 • 文件控制段的主要功能是给程序中使用的文件命名。指出存放该文件的外部设备及其其它有关文件控制的信息。文件控制段的一般格式: INPUT-OUTPUT SECTION. FILE-CONTROL.(段名写在A 区) SELECT 文件名 ASSIGN TO 外部文件名.(正文写在B 区)
文件的组织形式 文件的组织形式是指记录在文件中的排列的方式。 • 顺序文件(sequential file) 。在建立文件时,先送入文件的记录排在前面,后送入的记录排在后面。顺序文件的记录从头至尾按顺序列出。现有记录之间不能删除记录和插入新记录,只能在末尾增加新记录。记录在文件中的排列顺序,读出的顺序和建立时的顺序三者是一致的(先入先出)。 • 相对文件(relative file) 。在建立文件时,除了送入记录本身之外,还要对记录的顺序编号,相对文件记录按逻辑记录号引用,记录可以通过指定相对关键字按任意顺序处理。 • 索引文件(indexed file) 。在建立文件时,在存储设备上除了开辟一个区域存放记录外,还建立一个”目录”以便查找,这个目录表称为索引。 • 直接文件(direct file) 。又叫随机文件,在建立文件时,记录不必顺序存放,由程序指定某一地址直接存放。读取记录时,先计算地址再读取记录。
数据部的作用 数据部是整个COBOL 源程序中唯一描述数据的部分,数据部的作用 是定义数据项属性,描述数据结构。过程部中出现的所有数据项(输入 数据,输出数据,中间数据)都应当在数据部中对它们的属性进行说明。 包括: • 每一个数据项的类型(是数值型或字符型...),它们在内存中的存储形式, 它们的长度。 • 数据项间的相互关系(用层号表示)。 • 描述记录与文件的关系,即内存中的数据输入输出记录区是与哪一个文件有关的。 • 文件的属性(FD 描述体:由多少个记录组成一个物理块,一个记录包含多少个字节,文件有无标号记录等)。
数据的特点-层次的概念 数据有两种,一种是孤立数据项,一种是组合数据
层次的规定 结构:记录组合项初等项 层次下:从01开始,到49, 外层的层号小,里层的层号大。 66层用于重命名 77层一般用于定义无层次的变量 88层用于定义条件名 例子: 01 GZTJ. 05 ZGXM PIC X(20). 05 SR. 10 JBSR PIC 9(07). 10 BTSR PIC 9(07). 05 KC. 10 BX PIC 9(07). 10 SDS PIC 9(07). 05 SFGZ PIC 9(08).
数据部的结构 • 文件节(FILE SECTION)用来描述程序中用到的输入文件和输出文件及其记录中各数据项的属性。 • 工作单元节(WORKING-STORAGE SECTION) 用来描述程序中用到的非输入输出数据项(中间数据项)。 • 联接节(LINKAGE SECTION) 用来描述与调用程序间发生数据传递的数据项。在子程序中设定该节。 • 报表节(REPORT SECTION),设计报表栏的打印形式和方法。 • 通信节(COMMUNICATION SECTION),用于前后台数据之间的通信。
文件节(FILE SECTION) 文件描述体的通常格式:(花括号的作用是表示在花括号中的各项中选择其一) FD 文件名 LABEL {RECORD IS } {STANDARD} {RECORDS ARE } {STANDARD} [ BLOCK CONTAINS [整数-1 TO ] 整数-2 { RECORDS } { CHARACTERS }] [ RECORD CONTAINS [整数-3 TO ] 整数-4 CHARACTERS ] [ VALUE OF LABEL IS [字符常量-1 ] ] [ DATA {RECORD IS } 数名-1 [,数据名-2 ] ...] 例子:FD S0-FILE RECORD CONTAINS 36 CHARACTERS. 01 S0-REC. 03 S0-KEY-VAN. 05 S0-TCD PIC 9(02). 05 S0-NM-VAN PIC X(30). 03 S0-KEY-SYS. 05 S0-SCD PIC 9(04).
字型子句(PIC子句) • 数据项是什么类型的,如果数据项是数值型的,还要描述数据的符号和小数位数。 • 数据项占据多大内存。 • 是否需要按照打印的要求准备有关字符。(输出数据的编辑形式) PICTURE IS 描述字符串 PIC
数值型数据 - “9” 描述符 表示可以放入一个0~9之间的数字 02 X PIC 9999. 02 Y PIC 9(5). 描述数值在内存中表示 02 X PIC 9999 1234 1234 02 Y PIC 9(5) 467 00467 02 Z PIC 99 86 86 02 T PIC 9(6) 11011 011011 若 MOVE 1.25 TO Z, Z中的内容为 01,小数点后的舍弃 若 MOVE -1.25 TO Z, Z中的内容为 01,小数点后的舍弃,负号也舍弃
数值型数据 - “V” 描述符 指出在数值数据结构中隐含的小数点的位置 02 M PIC 999V99. 说明: 1. V隐含小数点的位置,占5个字节,传送时按小数点对齐,向两边延伸 MOVE 215.63 TO M -> M=213.63 MOVE 1215.637 TO M -> M= 215.63 2. 只能出现一个V 3. 按隐含的小数点位置对准进行运算 A PIC 9(3)V9. A=010.0 B PIC 9(2)V9(2). B=02.00 C PIC 9(2)V9(2). COMPUTE C=A+B => C=12.00 4. 显示时,不显示小数点(用编辑型显示小数点) 描述数值在内存中表示 02 A PIC 99V99 87.58750 02 T PIC 999V99498.549850 02 W PIC 9(3)V9(2)78178100 03 N PIC 9(4)1245.61245 03 H PIC V999 1.234234
数值型数据 - “P” 描述符 • 为了节省内存,对低位上有若干个零的数和小数点后若干位后才有非零数字的数,可以用P 描述符。如:表示10000000 和0.000023 1. 01 A PIC 9PPPPPPPPPP. 用9999999999来描述,占10个字节。为了节省内存,低位上有若干个0的数,可以用“P”来描述。A在内存中只占1个字节,表示1x109,也可以写成:01 A PIC 9P(9). 2. 01 A PIC PPPP99. 表示0.000099 3.描述 内存中数字等价的算术量 03 AMOUNT PIC 9(4)PPPP180218020000 03 WAT PIC 9(3)P(3)015 15000 03 WAT PIC P(3)9(2)11 0.00011 03 WAN PIC VPP99870.0087 4. P 描述符在COBOL中不常用
数值型数据 - “S” 描述符 在数据项中放入一个带符号的数,可以用S 描述符。 02 D PIC S99. (S不计数据项长度,表示负号,只能在99最前面) 描述数值内存中的表示 02 B PIC S9(4)V9(2)126.89012689 02 C PIC S9(4)V9(2)-1112.34111234 02 D PIC S9(4)V99-0.25000025 02 E PIC S9(4)V99-727.18072718
字母型数据 - “A” 描述符 字母型数据用A 描述符,只能存放字母和空格。 02 A2 PIC AAAA. 02 A2 PIC A(4). MOVE “ABCD” TO T T内存中的表示 ABCD 不只能存放字母和空格以外的字符,也可以用X描述
字符型数据 - “X” 描述符 由任意的COBOL 字符组成的数据称字符型数据,字符型数据用X 描述符 01 A PIC X(2). 描述 送入的数据 内存中的情况 02 R1 PIC X(4) BOOK BOOK 02 R2 PIC X(8) SIN(X) SIN(X)_ _ 02 R3 PIC X(7) COBOL-74COBOL-7 02 R4 PIC X(12) DATA-NAMEDATA-NAME _ _ _
编辑型数据 编辑型数据项仅仅是为了输出的需要,不能用来运算 插入小数点 “.”,用“.”描述符 例:PIC 99.99. • 插入小数点 “,”, 用“,”描述符 例:PIC 999,99.99. • 插入“0”,用“0”描述符 例:PIC 9990000 (显示的事1230000,后面带0的). • 插入空格用”B”描述符 例:PIC B999B. • 插入正负号,用”+”或”-”描述符 例:PIC +99. • 插入”$” 例:01 A PIC $99. MOVE 12 TO A. DISPLAY A.结果是$12. • 若为MOVE 5 TO A.他的结果是$05. • 浮动插入正负号和$ 例:PIC $$$.99. • MOVE 12 TO A. DISPLAY A.结果是$12.00.若为MOVE 5 TO A.他的结果是$5.00. • 取消高位0,用“Z”和“*”描述符 例:PIC Z999. • 插入:”DB”和”CR”字符
赋初值子句(VALUE 子句) COBOL 中允许直接对工作单元节中数据赋以初值。 • 只能对工作单元节中的数据项赋初值。不能对文件节中输入输出文件中的数据项赋初值。 • 如果在组合项的描述体中使用VALUE 子句,初值只能是表意常量或非数值型常量。如: 01 A VALUE ‘1234’. 03 A1 PIC 99. 03 A2 PIC 99. • 当用一个带符号的数值作初值时,相应的PIC 子句中应该有S 描述符。 • 赋初值时应注意类型的一致性。 • VALUE 子句给出的值应适合PIC 子句描述的范围,否则会出现截断或产生错误。
USAGE子句-1 USAGE子句用于指定子句是用来指定数据项在内存中的存储形式,一般格式为: [USAGE IS] {DISPLAY, COMPUTATIONAL, COMP} USAGE IS DISPLAY 是“显示型用法”,适用于显示、打印 COMPUTATIONAL(COMP)是“计算型的用法”,适用与计算 DISPLAY 标准数据形式,一个字节放一个字符 COMPUTATIONAL定点二进制形式 COMP COMPUTATIONAL-1内部短浮点形式COMP-1 COMPUTATIONAL-2 内部长浮点形式COMP-2 COMPUTATIONAL-3 内部十进制形式COMP-3(用得多)
USAGE子句-2 例如:02 A PIC 9(4) USAGE IS COMP. 或:02 A PIC 9(4) COMP. 用DISPLAY显示的结果仍同原样。 例如:02 B PIC 9(6) USAGE IS DISPLAY. 02 B PIC 9(6) DISPLAY. 02 B PIC 9(6). 如不写DISPLAY,则表示隐含。 例如:01 T. 02 T1 USAGE COMP. 03 X PIC S9(3). 03 Y PIC S9(3). 组合项的全部初等项为COMP.
数据在计算机内的表示形式 • 字符数据在内存中的存取形式: 字符型、字母型和数值编辑型、字符编辑型数据项中的数据,每一个字符都在内存中占一个字节。这种形式称为标准数据形式。 • 数值型数据在内存中的存取形式 1.外部十进制形式 按数值在机器外部的表现形式,一个数字在内存中占一个字节。 (如12,1占1个字节,2占一个字节) 2.内部十进制(缩合十进制)形式 为节省内存,可以只用四位二进制数字来代表一个十进制数。在一个字节 中放两个十进制数字。符号也占半个字节(+号为C,-号为D)。这种存放形式称为内部十进制。在 COBOL 中用COMP-3 表示。例如: 03 R2A-DEN PIC 9(06) (USAGE IS可以省略) COMP-3. 03 R2A-GYO PIC 9(02) COMP-3. 内部十进制占用内存的计算方法:ROUND((N+1)/2)个字节。(比如上面的9(06) 占ROUND((6+1)/2)=4个字节,即如下所示,数字占3个字节,符号占半个字节)
数据在计算机内的表示形式 3.定点二进制形式(COMP) 先把十进制数化成定点二进制数形式,然后放在内存中。COBOL 规定在内存中根据数据 项的长度分别用二字节,四字节或八字节来存放一个以定点二进制形式存放的数。 1~4->2 5~9->4 10~18->8 4.外部浮点数形式 例如:01 A PIC +9.99999E+99. 01 B PIC +9V99999E-99. A 在内存占12 个字节,B 在内存占11 个字节(因为V在内存中不占字节)。 5.内部浮点形式 它以内部的指数形式来表示一个数,以固定长度的内存单元来存放一个数,以四个字 节表示一个数,称为短浮点形式(COMP-1)(第一个字节放指数,后三个字节放数字,如:3.999*10^3,就是第一个字节放10^3 ,后三个字节放3.999 ) 。以八个字节表示一个数,称为长浮点形式(COMP-2)。(第一个字节放指数,后7个字节放数字)
过程部概述 • 以部头PROCEDURE DIVISION 开头。部头从A 区开始书写。过程部的层次结构是:节、段、句子、语句。 • 过程部的语句都以一个动词开始,它表示计算机应执行的操作。 • 语句中的动词后面一般要跟以一个操作的对象。操作对象可以是数据名或文件名。 • 过程部的语句一律从B 区开始书写。一个语句可以任意写在一行或几行上。续行也应从B 区开始。
语句列表 • 4.1 输入输出语句 • 4.1.1 接收语句(ACCEPT 语句) • 4.1.2 显示语句(DISPLAY 语句) • 4.1.3 复写语句(COPY 语句) • 4.1.4 读语句(READ 语句) • 4.1.5 写语句(WRITE 语句) • 4.1.6 打开语句(OPEN 语句) • 4.1.7 关闭语句(CLOSE 语句) • 4.2 算术运算语句 • 4.2.1 加法语句(ADD 语句) • 4.2.2 减法语句(SUBTRACT 语句) • 4.2.3 乘法语句(MULTIPLY 语句) • 4.2.4 除法语句(DIVIDE 语句) • 4.2.5 计算语句(COMPUTE 语句) • 4.3 传送语句(MOVE 语句) • 4.4 转移语句(GO TO 语句) • 4.5 条件语句(IF 语句) • 4.6 停止语句(STOP 语句) • 4.7 执行语句(PERFORM 语句) (复杂)
接收语句(ACCEPT 语句) • 使用ACCEPT 语句直接从终端键盘或系统指定的输入设备上输入少量的数据。 • ACCEPT 语句的一般格式: ACCEPT 标识符 [FROM 助忆名(助忆名与环境部专用名段有关)] • 说明: • 标识符指的是能唯一地标识一个数据项的数据名。 • 助忆名是一个用来代表一个外部设备的名字。需要在环境部中的专用名段事先说明助忆名和哪种外部设备想联系。如果不写FROM 部分,则表示从系统隐含指定的设备上读入一个数据。每种计算机系统都分别规定隐含的输入设备。一般指定为控制台。 • ACCEPT 后面只能跟一个标识符,不能在一个ACCEPT 语句中写两个以上标识符。但是,如果两个标识符(W-NUM, W-CHAR) 属于同一组合项(W-NUMCHAR),则可以通过ACCEPT W-NUMCHAR 使W-NUM, W-CHAR 接收到数据。W-NUMCHAR 被认为是字符型变量,如果输入数据长度大于变量所占内存,遵循左对齐原则。 • ACCEPT 对于调试程序比较方便,但是由于人工干预,会影响计算机效率。 • 例子: • ACCEPT A • ACCEPT A FROM DATE
显示语句(DISPLAY 语句) • 将少量数据从计算机内存中输出到某一指定的外设上,可用DISPLAY 语句。 • DISPLAY 语句的一般格式 DISPLAY 标识符1(或者常量) [标识符2(或者常量) ] [UPON 助忆名] • 如果没有UPON 可选项,在计算机系统隐含指定的输出设备上显示数据。每执行一个DISPLAY 语句,总是从一个新行开始显示的。多用于调试程序时使用。
复写语句(COPY 语句) • 利用COPY 语句可以使某些记录描述和数据描述为不同的程序共用。为此 要建立一个源程序库,将上述这些共同使用的源程序中的某一部分事先存入库 中。编码人员用COPY 语句就可以将这些源程序体插入到自己的源程序中。 • COPY 语句一般格式: COPY 库名 REPLACING 标识符1 BY 标识符2 • 标识符的含义为不超过30 个字符组成的字符序列。 例如: COPY IN-FILE REPLACING ==IN== BY ==A==.( COPY进来的 IN-FILE文件只要有IN ,就用A 替换IN) COPY 语句不仅可用于数据部,而且也可用于其它部分。使用COPY 语句可以减少写程序的工作量,便于程序的保存和修改。
读语句(READ 语句) • 用于从外部数据文件上读入数据输入到程序的数据项。存取操作以文件为对象,以记录为单位。文件是按名字存取的。 • READ 语句最简单的格式为: READ 内部文件名(不直接使用外部文件名,是为了便于移植) • 每执行一次READ 语句,就从内部文件名对应的外部文件中读入一个记录,而不是整个文件。并将读入的记录放入到内存(程序为存储 • 记录在内存区专门开辟一片存储单元)。