第九章_编译和运行COBOL程序--CICS 技术文档09
- 格式:ppt
- 大小:186.50 KB
- 文档页数:37
COBOL+CICS文件操作1.输入输出数据非CICS:ACCEPT数据来源:终端输入和系统接收。
一般系统接收数据为日期或者时间。
DA TE--YYMMDD.DAY---YYDDD.DAY-OF-WEEK--- PIC 9. 范围1-7.TIME---HHMMSSHH,最后HH表示hundredths from midnigth.如:DA TA DIVISION.WORKING-STORAGE SECTION.01 INPUT-DATE.05 INPUT-YEAR PIC 99.05 INPUT-MONTH PIC 99.05 INPUT-DAY PIC 99.*PROCEDURE DIVISION....ACCEPT TEST-DA TE.DISPLAY TEST-DATE. ---终端输入的数据ACCEPT TEST-DA TE FROM DA TE. --系统产生的数据DISPLAY TEST-DATE. --输出CICS下:如:DA TA DIVISION.WORKING-STORAGE SECTION.01 INFLDS.05 INLEN PIC 9(4) COMP.01 INPUT-NAME.05 INPUT-FIRST PIC X(10).05 INPUT-MIDDLE PIC X(10).05 INPUT-LAST PIC X(10).*PROCEDURE DIVISION....MOVE 15 TO INLEN.EXEC CICS RECEIVE INTO(INPUT-NAME)LENGTH(INLEN) --所接收的最大长度,小于为实际,大于为异常END-EXEC.EXEC CICS SEND FROM(INPUT-NAME)LENGTH(20) --为实际长度,并非变量。
输出位置为当前光标位置END-EXEC....GOBACK.2.文件操作普通文件非CICS:如:ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROLSELECT CUSTOMER-FILE ASSIGN TO S-SYSIN. --定义对应到COBOL文件名SELECT PRINT-FILE ASSIGN TO S-SYSOUT.*DATA DIVISION.FILE SECTION.FD CUSTOMER-FILE --定义FD记录RECORD MODE IS F.01 CUSTOMER-RECORD.05 CUST-NO PIC 9(5).05 CUST-NAME PIC X(10).FD PRINT-FILE.RECORD MODE IS F.LABEL RECORDS ARE OMITTEDRECORD CONTAINS 132 CHARACTERSDATA RECORD IS PRINT-LINE. --定义数据记录在程序中的名称01 PRINT-LINE PIC X(132).WORKING-STORAGE SECTION.01 EOF-FLAG PIC X V ALUE 'N'.01 HEADING-LINE.05 FILLER PIC X(5) V ALUE SPACES.05 FILLER PIC X(15) V ALUE 'CUSTOMER NO'.05 FILLER PIC X(7) V ALUE SPACE.05 FILLER PIC X(15) V ALUE 'CUSTOMER NAME'.05 FILLER PIC X(90).01 OUTPUT-FILE.05 FILLER PIC X(10) V ALUE SPACES.05 PRT-NO PIC X(5).05 FILLER PIC X(15) V ALUE SPACES.05 PRT-NAME PIC X(10).05 FILLER PIC X(92).*PROCEDURE DIVISION.OPEN INPUT CUSTOMER-FILE ---OPEN语句可以指出该文件时输入还是输出文件。
实验五 COBOL程序的编译与运行实验所属系列:操作系统高级试验实验对象:本科相关课程及专业:大型机系统管理,计算机专业实验类型:课程设计实验时数: 2●实验目的熟悉PCOM及ISPF环境;熟悉在大机系统编译连接与运行基本COBOL 程序的方法。
●实验内容与要求1.首先使用由老师分配的IBM的主机用户名和密码登陆大型机2.建立相应数据集:1)建立分区数据集<用户名>.COBOL.SOURCE,根据下图初始化数据集的参数,该参数只是参考,需要根据系统实际或者指导老师要求进行调整。
2)用同样方法建立分区数据集<用户名>.COBOL.JCL3)建立名为<用户名>.COBOL.LOAD的数据集,参数Record format改为U。
3.在数据集<用户名>.COBOL.SOURCE中建立一个member,并输入一下COBOL程序:4.输入编译JCL程序,并编译源程序为目标文件1)在<用户名>.COBOL.JCL中建立名为CTEST1的MEMBER,然后在其中输入如下JCL程序:注意,程序中的斜体部分应该换成实验者的用户名。
2)然后输入SUB提交该JCL程序,返回值如果不是0,请检查JCL程序是否有错。
若有错,修改后重新提交。
输出结果可以在SDSF的H里面看见。
5.输入运行的JCL程序,并运行编译结果1)在<用户名>.COBOL.JCL中建立名为CTEST1的MEMBER,然后在其中输入如下JCL程序:注意,程序中的斜体部分应该换成实验者的用户名。
2)然后输入SUB提交该JCL程序,返回值如果不是0,请检查JCL程序是否有错。
若有错,修改后重新提交。
输出结果可以在SDSF的H里面看见。
如果输出不是想要的结果,请检查COBOL源程序。
6.控制台方式运行编译程序1)在ISPF首页选6,输入如下命令:allocate fi(sysout) fi(sysin) da('*')并运行。
第一步:在SYSPRG1.COBOL.SRC里创建一个member(做为COBOL程序),member名尽量和COBOL程序名相同。
如:我的member名为TEST1,里面写如下代码:IDENTIFICATION DIVISION.PROGRAM-ID. TEST1.ENVIRONMENT DIVISION.DATA DIVISION.PROCEDURE DIVISION.S.DISPLAY "HELLO WORLD" .STOP RUN.第二步:写编译程序的JCL。
在SYSPRG1.COBOL.JCL里创建一个member,当然也可以不必自己写。
一般的在这个PDS里有一个名为COB2LINK的member,我们只要敲 E 进去,修改两个地方就可以编译自己的COBOL程序了。
//COB2LNK JOB (PLS,81038),'PETER SOPER',CLASS=A,REGION=4096K,// MSGLEVEL=(1,1),MSGCLASS=A,NOTIFY=&SYSUID//*************************************************************//* JOB TO COMPILE AND LINK A COBOL PROGRAM//*************************************************************//COMP EXEC PGM=IGYCRCTL//STEPLIB DD DSN=COBOL.V2R1M0.SIGYCOMP,DISP=SHR//SYSIN DD DSN=SYSPRG1.COBOL.SRC(TEST1),DISP=SHR//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR//SYSLIN DD DSN=&OBJ,SPACE=(3040,(40,40),,,ROUND),UNIT=VIO,// DISP=(MOD,PASS),// DCB=(BLKSIZE=3040,LRECL=80,RECFM=FBS,BUFNO=1)//SYSUT1 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT2 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT3 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT4 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT5 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT6 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT7 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSPRINT DD SYSOUT=*//SYSUDUMP DD SYSOUT=*/*//***************************************************//LKED EXEC PGM=IEWL,COND=(4,LT,COMP),// PARM='LIST,LET,XREF,MAP'//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR//SYSLIN DD DSN=&OBJ,DISP=(OLD,DELETE)// DD DDNAME=SYSIN//SYSLMOD DD DSN=SYSPRG1.COBOL.LOADLIB,DISP=SHR//SYSUT1 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSPRINT DD SYSOUT=*NAME TEST1(R)/*红色标出的两部分,是我的修改的。
COBOL语言的发展概述• COBOL是Common Business Oriented Language(商业通用语言)的缩写。
• COBOL不仅是商业数据处理的理想语言,而且广泛应用于数据管理领域,因此COBOL也被称为“用于管理的语言”。
• 在计算机的应用领域中,数据处理(data processing)是应用最为广泛的一个领域。
数据处理的日益广泛应用要求人们设计出能满足实际数据处理工作中各种要求的一种计算机语言。
COBOL就是在这种形势下应运而生的。
COBOL语言的特点• 最适于数据处理领域。
• COBOL比较接近于自然语言(英语)。
• 通用性强。
• COBOL的结构严谨,层次分明。
• COBOL的缺点是比较繁琐。
COBOL程序的结构• COBOL源程序的结构• 标识部 环境部 数据部 过程部段 段 段 节 节 节 节 节 节 节 节 节 段 …… 描述体 …… 段 ……句子 …… 句子 …… 语句 ……动词 ……COBOL的四部标识部(IDENTIFICATION DIVISION)主要用来指定源程序名字,也可以写入其它用作备忘的某些信息(如日期、作者等)。
环境部 (ENVIRONMENT DIVISION)指出程序中用到的数据文件名与计算机系统的设备的对应关系,即把某一文件名与某一外部设备联系起来。
数据部(DATA DIVISION)程序中所用到的全部变量都应在数据部中说明它们的类型和所占的内存。
过程部(PROCEDURE DIVISION)编写相应的程序语句来实现源程序需要实现的相应功能。
COBOL源程序的书写格式• ANSI书写格式标号区续行区 A 区 B 区(正文区)注释1 6 7 8 11 12 72 73 80• 终端格式• COBOL字符和COBOL字• COBOL字符 COBOL字• 系统字符集保留字• COBOL字符集例如:DIVISION,SECTION • 包括以下字符:用户字(非保留字)・数字:0〜9・大写字母:A〜Z・小写字母:a〜z・ 专用字符: + ,-,*,/等数据名的命名规则• 每个数据名的长度为1〜30个字符之间。
//IBMUSERC JOB 'COMP BA TCH',CLASS=A,MSGCLASS=H,// NOTIFY=IBMUSER,MSGLEVEL=(1,1)//******************************************************************** // SET SRC=HELLO//******************************************************************** //* JOB TO COMPILE AND LINK-EDIT COBOL PROGRAM//******************************************************************** //COBOL EXEC PGM=IGYCRCTL,REGION=2048K,// PARM='NODYNAM,LIB,OBJECT,RENT,RES,APOST,MAP,XREF,OFFSET' //STEPLIB DD DSNAME=IGY410.SIGYCOMP,// DISP=SHR//SYSPRINT DD SYSOUT=*//SYSLIN DD DSNAME=&&LOADSET,UNIT=SYSDA,// DISP=(MOD,PASS),SPACE=(TRK,(3,3)),// DCB=(BLKSIZE=3200)//SYSIN DD DSN=IBMUSER.TEST.COBOL(&SRC),DISP=SHR//SYSLIB DD DSN=IBMUSER.TEST.COPY,DISP=SHR//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(1,1))//LKED EXEC PGM=HEWL,COND=(8,LT,COBOL),REGION=1024K,// PARM='LIST,XREF'//SYSLIB DD DSNAME=CEE.SCEELKED,DISP=SHR// DD DSN=IBMUSER.TEST.LOAD,DISP=SHR//SYSPRINT DD SYSOUT=*//SYSLIN DD DSNAME=&&LOADSET,DISP=(OLD,DELETE)//SYSLMOD DD DSNAME=IBMUSER.TEST.LOAD(&SRC),DISP=SHR//SYSUT1 DD UNIT=SYSDA,SPACE=(TRK,(10,10))//********************************************************//* RUN THE COMBOL PROGRAM//********************************************************//STEP020 EXEC PGM=HELLO//STEPLIB DD DSN=IBMUSER.TEST.LOAD(HELLO),DISP=SHR//SYSOUT DD SYSOUT=*//。
COBOL+CICS子程序子程序操作1.非CICS平台:静态和动态用于传递的参数必须在01或者77层。
主调用程序通常在工作单元节(除非也被其他调用在连接节),被调用程序参数要定义在连接节中。
参数在主调用程序中分配内存,通常只要求内存空间大小一致,其他不做要求。
参数引用的顺序必须和主程序定义的参数与其顺序和位置一致。
CALL调用和ENTER选择入口地址两种方式。
静态:在调用之前就已经加载,和主程序在同一加载模块,费内存,效率高。
通常情况下都是引用上一次调用后的状态。
除非单独对参数再次初始化。
一个程序改变,所有程序都要进行改动。
如:DA TA DIVISION. --------主程序WORKING-STORAGE SECTION.77 TEST-NUM PIC 99.*PROCEDURE DIVISION.PERFORM INIT-TEST-NUM.CALL 'STATIC-SUB' USING TEST-NUM.DISPLAY TEST-NUM. ---第一次调用25PERFORM INIT-TEST-NUM.CALL 'STATIC-ENTRY' USING TEST-NUM.--对应于子程序的ENTER调用DISPLAY TEST-NUM. ---第二次调用35(子程序数值在内存中没有被释放)PERFORM INIT-TEST-NUM.CALL 'STATIC-SUB' USING TEST-NUM.DISPLAY TEST-NUM. ---第三次调用25(子程序数据已被初始化)STOP RUN.INIT-TEST-NUM.MOVE 10 TO TEST-NUM.DATA DIVISION. --------子程序WORKING-STORAGE SECTION.01 PLUS-NUM PIC 99 V ALUE 15.LINKAGE SECTION.77 MAIN-NUM PIC 99. ---被调用程序参数要定义在连接节中。
子程序1、在数据集SYSPRG1.COBOL.SOURCE中编辑子程序MAINPR2、编辑JCL文件用于编译、连接//COMPBATS JOB (PLS,81038),'VICTOR',CLASS=A,REGION=4096K,// MSGLEVEL=(1,1),MSGCLASS=A,NOTIFY=&SYSUID//*************************************************************//* JOB TO COMPILE AND LINK A COBOL PROGRAM//*****************COMPILE PROGRAM***************************** //COMP EXEC PGM=IGYCRCTL//STEPLIB DD DSN=COBOL.V2R1M0.SIGYCOMP,DISP=SHR//SYSIN DD DSN=SYSPRG1.COBOL.MYSUB(MY A VG),DISP=SHR//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR//SYSLIN DD DSN=&OBJ,SPACE=(3040,(40,40),,,ROUND),UNIT=VIO,// DISP=(MOD,PASS),// DCB=(BLKSIZE=3040,LRECL=80,RECFM=FBS,BUFNO=1)//SYSUT1 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT2 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT3 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT4 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT5 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT6 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSUT7 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSPRINT DD SYSOUT=*//SYSUDUMP DD SYSOUT=*/*//*************LINKED PROGRAM*********************************** //LKED EXEC PGM=IEWL,COND=(4,LT,COMP),// PARM='LIST,LET,XREF,MAP'//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR//SYSLIN DD DSN=&OBJ,DISP=(OLD,DELETE)// DD DDNAME=SYSIN//SYSLMOD DD DSN=SYSPRG1.COBOL.LOAD,DISP=SHR//SYSUT1 DD UNIT=VIO,SPACE=(1024,(120,120),,,ROUND)//SYSPRINT DD SYSOUT=*NAME MYA VG(R)/*//3、编译连接完成之后提交JOB提交后在数据集SYSPRG1.COBOL.LOAD就会生成子程序的可执行程序MY A VG.4、编辑主程序MAINPR:5、编辑主程序的JCL文件用于编译、连接。