05 PHONE-LAST-NAME PIC X(20). 05 PHONE-FIRST-NAME PIC X(20).
05 PHONE-NUMBER PIC X(15).
五.基本的过程部语句
1.输入输出语句:
(1)ACCEPT语句:直接从终端键盘或系统指定的输入设备上输入数据。 ACCEPT 标识符 [FROM 助忆名]
说明:A.标识符(identifier)指的是能唯一地标识一个数据项的数据名,不能唯一地标识一个数据项的数据名不是标识符。
B.在ACCEPT语句中如不写FROM部分,如ACCEPT A ,则表示从系统隐含指定的设备上读入一个数据给A。 如果不想从指定的设 备上输入,则要用FROM 选项,
如:ACCEPT NUM-DATA 运行到这语句时,系统会等待从键盘输入一个字符赋给变量 NUM-DATA .
(2)DISPLAY语句:从计算机内存中输出到某一指定的输出设备上。
DISPLAY { 标识符1,常量1}[标识符2,常量2]。。。[UPON 助忆名] ( 标识符和助忆名的说明同上)
如:DISPLAY NUM-DATA 将NUM-DATA的值显示到屏幕上。
ACCEPT语句和DISPLAY语句不必定义文件适用于少量的数据输入输出。 2.算数运算语句:
(1)ADD语句:
①ADD 标识符1 ,标识符2。。。 TO 标识符m [,标识符n]。。。 例如:ADD A TO B. 表示:B = B + A
②ADD 标识符1 , 标识符2。。。 GIVING标识符M 例如:ADD A , B GIVING C. 表示:C = B + A
(2)SUBTRACT语句:
SUBTRACT 标识符1 ,标识符2 。。。 FROM 标识符m [,标识符n]。。。 例如:SUBTRACT A FROM B. 表示:B = B - A
(3)MULTIPLY语句:
MULTIPLY 标识符1 BY 标识符2 [,标识符3]。。。 例如:MULTIPLY A BY B. 表示:B = B * A
(4)DIVIDE语句:
DIVIDE 标识符1 INTO 标识符2 [,标识符3]。。。 例如:DIVIDE A INTO B 表示: B = B / A
6
COMPUTE 语句:
COMPUTE 标识符1 [,标识符2 ]。。。= 算术表达式 例如: COMPUTE C = A + B.
(5)除法语句中的余数语句(REMAINDER 子句):DIVIDE 语句只能求商不能求余数。如想求余数,可用 REMAINDER 子句。
如: DIVIDE A INTO B GIVING C REMAINDER D 注意:(1)商和余数的值不仅取决于除数和被除数,还取决于数据部中对商和余数的描述。 (2)如用ROUNDED子句,它只对商起作用,余数不作四舍五入处理,在计算余 数时,仍按四舍五入前的值为准。 3.传送语句 (MOVE):
MOVE 语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。 MOVE语句的一般格式为:
MOVE 标识符1 TO 标识符2 [,标识符3]。。。 MOVE语句的传送规则:
1,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。 2,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。 3,对字母或字符数据(非数值型数据)的传送,按左对齐处理。 4,初等项和组合项之间可以相互传送。 4.转移语句(GO TO):
当需要使程序改变正常执行的顺序时,可以使用无条件转移语句 GO TO 。其一般格式为: GO TO 过程名
注意:只能转移到段或节的开头,不能转移到段或节的当中某一语句。段名或节名为过程名。 5.条件语句(IF):
当需要根据给出的某些条件是否满足来决定应执行哪一部分语句时,可以使用条件语句IF。 其一般格式为:
IF 条件 语句组1 ELSE 语句组1 注意:句点在IF 语句中的特殊作用。 如:IF A > 0
DISPLAY A。
ADD A TO TOTAL。 DISPLAY TOTAL。 与 IF A > 0
DISPLAY A
ADD A TO TOTAL。 DISPLAY TOTAL。
7
COBOL关系运算符:
IS GREATER THAN (>)
IS LESS THAN (<) IS EQUAL TO (=)
NOT GREATER THAN (NOT >) (<=) NOT LESS THAN (NOT <) (>=) NOT EQUAL TO (NOT =) 6.停止语句(STOP):
其一般格式为: STOP RUN 常量
STOP RUN 执行后,程序停止运行,停止后不能再接着运行,如需要,可重新运行一次。
STOP 常量,表示程序暂时挂起不往下执行,显示出此常量。 7. 执行语句(PERFORM):
在一个COBOL程序中,过程部中往往有一部分语句需要执行多次。为了让重复的部分在程序中只出现一次,可以把重复的部分单独写成一段或一节(有一个段名或节名),每次执行这部分语句时转去该段,执行完转回来。这时候就需要用到执行语句(PERFORM )。 A. 执行语句的一般形式: PERFORM 过程名1 使用PERFORM语句实现循环:
(1). PERFORM 过程名1 整数 TIMES 例如:PERFORM PRINT 8 TIMES 说明:执行PRINT过程8次。
(2). PERFORM 过程名1 UNTIL 条件
例如:PERFORM READ-FILE UNTIL END-OF-FILE = “Y” 说明:执行READ-FILE过程直到END-OF-FILE等于Y. (3).FERFORM 过程名1
VARYING 变量名 FROM 整数 TO 整数 UNTIL 条件
例如:PERFORM PROGRAM VARYING TEMP FROM 1 BY 1 UNTIL TEMP > 10. 8.习题:
1从屏幕中输入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价),循环输入
记录直到用户中止输入,.然后打印出全部产品的统计数据。输入数据形式如下:
格式 数据类型
(1) 销售时间: YYYYMMDD 9
8
(2) 产品编号: 9999 9 (3) 产品简称: XXXX X (4) 销售总量: 9999 9 (5) 单位价格: 999.99 9
提示: 程序中的循环控制要使用7中所述的方法,不可以使用GOTO语句。
六.对文件的操作
1.COBOL中文件的定义.
在程序的ENVIRONMENT DIVISION 里对用到的文件进行物理描述 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL.
SELECT PHONE-FILE
ASSIGN TO \
ORGANIZATION IS SEQUENTIAL. 文件名: PHONE-FILE
ASSIGN TO: 将文件映射到一个具体的文件上去
ORGANIZATION IS SEQUENTIAL: 说明这个文件是有序列的
ORGANIZATION IS LINE SEQUENTIAL: 文件是有序列的,每个记录为一行 2.在程序的DATA DIVISION 里对用到的文件进行逻辑描述::
DATA DIVISION. FILE SECTION. FD PHONE-FILE
LABEL RECORDS ARE STANDARD. 01 PHONE-RECORD.
05 PHONE-LAST-NAME PIC X(20). 05 PHONE-FIRST-NAME PIC X(20).
05 PHONE-NUMBER PIC X(15).
文件名: PHONE-FILE
LABEL RECORDS ARE STANDARD.: 表明这个文件是存储在磁盘或者磁带上的 文件中的记录(RECORD)名: PHONE-RECORD
文件的记录也就是一个结构体,定义了文件的所存储的信息. 3.对STANDARD文件的操作:
(1) OPEN语句:程序中如果需要读写文件,则该文件必须先用OPEN语句打开,系统在执行READ,WRITE以前先检查该文件是否已在规定的外部设备上准备就绪。
(2)打开控制语句为: OPEN MODE FILE-NAME
9
例如:
A. OPEN OUTPUT PHONE-FILE
(如果文件不存在,自动生成文件,向里面写入记录,如果文件存在, 文件中已有的记录被删除,写入新的记录)
B. OPEN EXTEND PHONE-FILE
(如果文件不存在,自动生成文件,向里面写入记录,如果文件存在, 文件中已有的记录仍保存,并写入新的记录)
C. OPEN INPUT PHONE-FILE
(如果文件存在,会打开文件读出记录, 文件不存在会发生错误) D. OPEN I-O PHONE-FILE
(如果文件存在,会打开文件读出或写入记录, 文件不存在会发生错误)
(3)关闭控制语句为:
CLOSE FILE-NAME.
(4)COBOL中对于文件操作错误的判定:
COBOL通过2位长度的文件状态字(FILE-STATUS)来表示文件的操作结果是否成功,常见的文件状态值及意义:
(5)读取记录 控制语句:
READ FILE-NAME
READ FILE-NAME NEXT RECORD READ FILE-NAME NEXT RECORD
ANT END
DO SOMETHING
10