大型机COBOL程序之简易报表打印
大型机COBOL程序之简易报表打印

COBOL实验报告2一,实验目的1,能够利用cobol程序实现一个报表的编辑和制作。
2,能够对文件进行操作,比如说:打开,关闭,读和写 3,了解COBOL的常用语句和一些常用的数据类型,能够利用编辑型数据实现数据的友好输出。
4,能够运用sdsf修改程序中的错误5,学会编写稍微复杂的COBOL程序。
二,实验原理和内容1,修改UTE20.COBOL.MURACH.EXERCISE(RPT1000X) 使之正常运行。
2,在RPT1000原有基础上改进成增强的报表打印程序。
3,利用给定的数据和格式独立的制作一个报表三,实验环境PC机和TSO下的ISPF环境四,实验步骤1,步骤1和步骤2:修改UTE20.COBOL.MURACH.EXERCISE(RPT1000X) 使之正常运行,并在此基础上改进成增强型的报表打印程序。
1.1 代码:000100 IDENTIFICATION DIVISION.000200000300 PROGRAM-ID. RPT1000.000400000500 ENVIRONMENT DIVISION.000600000700 INPUT-OUTPUT SECTION.000800000900 FILE-CONTROL.001000001100 SELECT CUSTMAST ASSIGN TO CUSTMAST.001200 SELECT SALESRPT ASSIGN TO SALESRPT.001300001400 DATA DIVISION.001500001600 FILE SECTION.001700001800 FD CUSTMAST.001900002000 01 CUSTOMER-MASTER-RECORD.002100 05 CM-BRANCH-NUMBER PIC 9(2).002200 05 CM-SALESREP-NUMBER PIC 9(2).002300 05 CM-CUSTOMER-NUMBER PIC 9(5).002400 05 CM-CUSTOMER-NAME PIC X(20).002500 05 CM-SALES-THIS-YTD PIC S9(5)V9(2).002600 05 CM-SALES-LAST-YTD PIC S9(5)V9(2).002700002800 FD SALESRPT.002900003000 01 PRINT-AREA PIC X(132).003100003200 WORKING-STORAGE SECTION.003300003400 01 SWITCHES.003500 05 CUSTMAST-EOF-SWITCH PIC X VALUE "N".003600003700 01 PRINT-FIELDS.003800 05 PAGE-COUNT PIC S9(3) V ALUE ZERO.003900 05 LINES-ON-PAGE PIC S9(3) V ALUE +55.004000 05 LINE-COUNT PIC S9(3) V ALUE +99.004100 05 SPACE-CONTROL PIC S9.004200004300 01 TOTAL-FIELDS.004400 05 GRAND-TOTAL-THIS-YTD PIC S9(7)V99 VALUE ZERO.004500 05 GRAND-TOTAL-LAST-YTD PIC S9(7)V99 VALUE ZERO.00460001 CALCULATED-FILEDS.05 CHANGE-AMOUNT PIC S9(5)V99.004700 01 CURRENT-DATE-AND-TIME.004800 05 CD-YEAR PIC 9999.004900 05 CD-MONTH PIC 99.005000 05 CD-DAY PIC 99.005100 05 CD-HOURS PIC 99.005200 05 CD-MINUTES PIC 99.005300 05 FILLER PIC X(9).005400005500 01 HEADING-LINE-1.005600 05 FILLER PIC X(7) VALUE "DA TE: ".005700 05 HL1-MONTH PIC 9(2).005800 05 FILLER PIC X(1) VALUE "/".005900 05 HL1-DAY PIC 9(2).006000 05 FILLER PIC X(1) VALUE "/".006100 05 HL1-YEAR PIC 9(4).006200 05 FILLER PIC X(11) VALUE SPACE.006300 05 FILLER PIC X(20) V ALUE "YEAR-TO-DATE SALES R".006400 05 FILLER PIC X(20) VALUE "EPORT ". 006500 05 FILLER PIC X(8) VALUE " PAGE: ".006600 05 Hl1-PAGE-NUMBER PIC ZZZ9.006700 05 FILLER PIC X(52) VALUE SPACE.006800006900 01 HEADING-LINE-2.007000 05 FILLER PIC X(7) VALUE "TIME: ".007100 05 HL2-HOURS PIC 9(2).007200 05 FILLER PIC X(1) VALUE ":".007300 05 HL2-MINUTES PIC 9(2).007400 05 FILLER PIC X(58) VALUE SPACE.007500 05 FILLER PIC X(10) VALUE "RPT1000".007600 05 FILLER PIC X(52) VALUE SPACE.007700007800 01 HEADING-LINE-3.007900 05 FILLER PIC X(20) VALUE "CUST ". 008000 05 FILLER PIC X(20) VALUE " SALES ". 008100 05 FILLER PIC X(20) VALUE " SALES ".05 FILLER PIC X(20) VALUE "CHANGE CHANGE ". 008200 05 FILLER PIC X(52) VALUE SPACE.008300008400 01 HEADING-LINE-4.008500 05 FILLER PIC X(20) VALUE "NUM CUSTOMER NAME". 008600 05 FILLER PIC X(20) VALUE " THIS YTD ". 008700 05 FILLER PIC X(20) VALUE " LAST YTD ".05 FILLER PIC X(20) VALUE "AMOUNT PERCENT ". 008800 05 FILLER PIC X(52) VALUE SPACE.008900009000 01 CUSTOMER-LINE.009100 05 CL-CUSTOMER-NUMBER PIC 9(5).009200 05 FILLER PIC X(2) VALUE SPACE. 009300 05 CL-CUSTOMER-NAME PIC X(20).009400 05 FILLER PIC X(3) VALUE SPACE. 009500 05 CL-SALES-THIS-YTD PIC ZZ,ZZ9.99-.009600 05 FILLER PIC X(4) VALUE SPACE. 009700 05 CL-SALES-LAST-YTD PIC ZZ,ZZ9.99-.05 FILLER PIC X(4) VALUE SPACE.05 CL-CHANGE-AMOUNT PIC ZZ,ZZ9.99-.05 FILLER PIC X(3) VALUE SPACE.05 CL-CHANGE-PERCENT PIC ZZ9.9-.009800 05 FILLER PIC X(55) VALUE SPACE. 009900010000 01 GRAND-TOTAL-LINE.010100 05 FILLER PIC X(27) VALUE SPACE. 010200 05 GTL-SALES-THIS-YTD PIC Z,ZZZ,ZZ9.99-.010300 05 FILLER PIC X(1) VALUE SPACE. 010400 05 GTL-SALES-LAST-YTD PIC Z,ZZZ,ZZ9.99-.05 FILLER PIC X(1) VALUE SPACE.05 GTL-CHANGE-AMOUNT PIC Z,ZZZ,ZZ9.99-.05 FILLER PIC X(3) VALUE SPACE.05 GTL-CHANGE-PERCENT PIC ZZ9.9-.010500 05 FILLER PIC X(55) VALUE SPACE. 010600010700 PROCEDURE DIVISION.010800010900 000-PREPARE-SALES-REPORT.011000011100 OPEN INPUT CUSTMAST011200 OUTPUT SALESRPT.011300 PERFORM 100-FORMA T-REPORT-HEADING.011400 PERFORM 200-PREPARE-SALES-LINES011500 UNTIL CUSTMAST-EOF-SWITCH = "Y".011600 PERFORM 300-PRINT-GRAND-TOTALS.011700 CLOSE CUSTMAST011800 SALESRPT.011900 STOP RUN.012000012100 100-FORMA T-REPORT-HEADING.012200012300 MOVE FUNCTION CURRENT-DATE TOCURRENT-DATE-AND-TIME.012400 MOVE CD-MONTH TO HL1-MONTH.012500 MOVE CD-DAY TO HL1-DAY.012600 MOVE CD-YEAR TO HL1-YEAR.012700 MOVE CD-HOURS TO HL2-HOURS.012800 MOVE CD-MINUTES TO HL2-MINUTES.012900013000 200-PREPARE-SALES-LINES.013100013200 PERFORM 210-READ-CUSTOMER-RECORD.013300 IF CUSTMAST-EOF-SWITCH = "N"IF CM-SALES-THIS-YTD >= 10000013400 PERFORM 220-PRINT-CUSTOMER-LINE.013500013600 210-READ-CUSTOMER-RECORD.013700013800 READ CUSTMAST013900 A T END014000 MOVE "Y" TO CUSTMAST-EOF-SWITCH.014100014200 220-PRINT-CUSTOMER-LINE.014300014400 IF LINE-COUNT >= LINES-ON-PAGE014500 PERFORM 230-PRINT-HEADING-LINES.014600 MOVE CM-CUSTOMER-NUMBER TO CL-CUSTOMER-NUMBER. 014700 MOVE CM-CUSTOMER-NAME TO CL-CUSTOMER-NAME. 014800 MOVE CM-SALES-THIS-YTD TO CL-SALES-THIS-YTD. 014900 MOVE CM-SALES-LAST-YTD TO CL-SALES-LAST-YTD.COMPUTE CHANGE-AMOUNT =CM-SALES-THIS-YTD - CM-SALES-LAST-YTD.MOVE CHANGE-AMOUNT TO CL-CHANGE-AMOUNT.IF CM-SALES-LAST-YTD = ZEROMOVE 999.9 TO CL-CHANGE-PERCENTELSECOMPUTE CL-CHANGE-PERCENT ROUNDED =CHANGE-AMOUNT * 100 / CM-SALES-LAST-YTDON SIZE ERRORMOVE 999.9 TO CL-CHANGE-PERCENT.015000 MOVE CUSTOMER-LINE TO PRINT-AREA.015100 WRITE PRINT-AREA AFTER ADVANCING SPACE-CONTROL LINES.015200 ADD 1 TO LINE-COUNT.015300 ADD CM-SALES-THIS-YTD TO GRAND-TOTAL-THIS-YTD. 015400 ADD CM-SALES-LAST-YTD TO GRAND-TOTAL-LAST-YTD. 015500 MOVE 1 TO SPACE-CONTROL.015600015700 230-PRINT-HEADING-LINES.015800015900 ADD 1 TO PAGE-COUNT.016000 MOVE PAGE-COUNT TO HL1-PAGE-NUMBER.016100 MOVE HEADING-LINE-1 TO PRINT-AREA.016200 WRITE PRINT-AREA AFTER ADVANCING PAGE.016300 MOVE HEADING-LINE-2 TO PRINT-AREA.016400 WRITE PRINT-AREA AFTER ADVANCING 1 LINES.016500 MOVE HEADING-LINE-3 TO PRINT-AREA.016600 WRITE PRINT-AREA AFTER ADVANCING 2 LINES.016700 MOVE HEADING-LINE-4 TO PRINT-AREA.016800 WRITE PRINT-AREA AFTER ADVANCING 1 LINES.016900 MOVE ZERO TO LINE-COUNT.017000 MOVE 2 TO SPACE-CONTROL.017100017200 300-PRINT-GRAND-TOTALS.017300017400 MOVE GRAND-TOTAL-THIS-YTD TO GTL-SALES-THIS-YTD. 017500 MOVE GRAND-TOTAL-LAST-YTD TO GTL-SALES-LAST-YTD.COMPUTE CHANGE-AMOUNT =GRAND-TOTAL-THIS-YTD - GRAND-TOTAL-LAST-YTD.MOVE CHANGE-AMOUNT TO GTL-CHANGE-AMOUNT.IF GRAND-TOTAL-LAST-YTD = ZEROMOVE 999.9 TO GTL-CHANGE-PERCENTELSECOMPUTE GTL-CHANGE-PERCENT ROUNDED =CHANGE-AMOUNT * 100 / GRAND-TOTAL-LAST-YTDON SIZE ERRORMOVE 999.9 TO GTL-CHANGE-PERCENT 017600 MOVE GRAND-TOTAL-LINE TO PRINT-AREA. 017700 WRITE PRINT-AREA AFTER ADVANCING 2 LINES.1.2 输入与输出。
报表打印

第六章打印第六章打印6.1报表打印当需要打印多户单位的报表时,为了简化打印操作,提高打印效率,系统采用了“报表打印”功能,可对多户单位的多张报表进行连续打印,具体操作如下:1、单击【打印/报表打印】,弹出选择单位窗口;2、选择要进行打印的单位,单击“确定”按钮,进入“多表打印”窗口,如图 6.1-1,在其中选择要打印的报表(如果打印全部报表,则此窗口不必改动设置);图 6.1-1 选择要打印的报表3、选择使用的打印机,在“打印份数”的编辑框中确定需打印的份数;4、如要打印报表金额转换后的数据,可选中“转换金额单位”前的复选框;5、在打印套表的过程中,如果遇到没有数据的空表,也想要同时打印,可选中“没有数据也打印空表”复选框;6、6.2打印方案选择系统提供几种常用打印方案:默认打印方案、1600K针式打印方案、B4纸打印方案、A4纸打印方案等。
在没有进行选择的情况下,系统自动选择为“默认打印方案”。
6.3 户数核对打印6.3户数核对打印打印户数变动分析表,表中包含的内容有:项目(名称)和户数。
操作如下:1、完成户数核对后,单击主菜单“打印”的下拉菜单“户数核对打印”,进入户数核对打印预览界面:2、单击“打印”按钮,弹出打印对话框,选择打印机、打印范围及打印份数,单击“确定”按钮进行打印输出;3、单击“关闭”按钮退出户数核对打印窗口。
操作过程中,可使用工具对打印内容进行编辑、修改。
6.4封面打印设置封面作为一套报表的首页,在打印时可能会有特殊要求,系统将封面打印内容的设置单独提出,设置或修改封面代码打印输出的样式。
操作如下:1、选择【高级/其他参数设置/封面打印设置】菜单,进入打印设置窗口,如图 6.4-1所示:图 6.4-1 封面打印设置2、在窗口左侧,系统列出了字段名(封面代码定义中定义的所有字段名称)、字段值(该代码字段所对应的当前企业填写的内容)、字段值含义(只有枚举字段才有此项,即为当前单位根据该枚举字段所填报的内容),供用户选择、编排;系统还提供了工具栏,可帮助用户设置满意的打印封面。
COBOL语言基础教程

cobol语言基础培训教程2009年04月23日| 5:23 下午分类:大型机|Mainframe| 标签:cobol 数据类型、COBOL 程序举例、cobol入门、cobol教程、cobol语言、大型机培训|CHAPTER 1 COBOL 概述COBOL 就是mon Business Oriented Language 得缩写。
它不仅就是商业数据处理得理想语言,而且广泛用于数据管理领域,因此COBOL 语言也被称为”用于管理得语言”。
一。
COBOL 语言得特点最适于数据处理领域:算数计算量少而逻辑处理量多,输入输出量大,数据间存在着一定得逻辑关系,大量得分类排序;COBOL比较接近英语,容易懂;通用性强,易移植,COBOL结构严谨,层次分明。
二。
COBOL得组成部分:1。
标识部(IDENTIFICATION DIVISION):用于标识程序名。
2。
环境部(ENVIRONMENT DIVISION):用于说明程序运行得环境。
3。
数据部(DATA DIVISION):用于说明程序中涉及得所有数据。
4。
过程部(PROCEDURE DIVISION):就是程序得核心部分,它决定计算机应进行什么操作。
三。
最简单得COBOL 程序举例:COL 1 —6 7 8 12—72 73—80 IDENTIFICATION DIVISION。
PROGRAM-ID。
PSAMPLE1。
ENVIRONMENT DIVISION。
DATA DIVISION。
PROCEURE DIVISION。
DISPLAY ’THIS IS A COBOL PROGRAM、’STOP RUN。
四。
COBOL 源程序得书写格式:第1 至 6 列为”标号区”。
第7列为”续行标志区”第8至此11列,称为”A区”。
程序中有些内容如部头,节头,段头,层号01,层号77 及文件描述符FD等应从A区开始写。
第12至此72列,称为”B区”。
写程序中得正文部分。
大型机COBOL大作业

PIC X(20).
002792 05 C-SALES-THIS-YTD
PIC S9(5)V9(2).
002793 05 C-SALES-LAST-YTD
PIC S9(5)V9(2).
002794 05 FILLER
PIC X(30).
002795
002800 FD ERREPT.
002900
003000 01 ERREPT-MESSAGE.
COBOL 程序设计大作业
学院(系): 专 业: 班 级: 学 号: 姓 名:
大连理工大学
Dalian University of Technology
1 程序功能描述
(1) 程序分为 3 个部分,分别是 IBMUSER.COBOL.RPTCH、IBMUSER.RPT.DEAL、 IBMUSER.RPT.SORT。其中 IBMUSER.COBOL.RPTCH 是主程序,调用 IBMUSER.RPT.DEAL 子程序,IBMUSER.RPT.DEAL 又调用 IBMUSER.RPT.SORT 子程序。 (2) 存在一个新的交易数据表,其中有添加交易操作、更新交易操作、删除交易 操作、增开一个分公司及其交易操作信息。对其进行合法性验证,错误的信息输入 到错误文件中,正确的信息和原来老的交易信息合并并且排序后生成新的交易信 息。 (3) 分公司信息表中记录分公司编号和分公司名字的对应情况,销售代表信息表 中记录销售代表编号和姓名的对应情况,另外还有新生成的交易信息表,将 3 个表 的信息同时按分公司和销售代表统计信息,生成统计报表。
PIC X(1).
002103 05 S-BRANCH-NUMBER
PIC 9(2).
002104 05 S-BRANCH-NAME
cobol课件大型机基本操作

对文件进行读取和写入操作。
打开文件
使用适当的命令或函数打开已存在的文件。
关闭文件
完成文件操作后,使用命令或函数关闭文件。
数据传
对数据进行格式转换以满 足特定需求。
将数据从大型机导出到外 部目的地。
将数据从外部源导入到大 型机中。
数据导入
数据导出
数据转换
程序执行与调试
编译程序
01
将源代码编译成可执行程序。
解决方案
使用编译器提供的错误信息,定位问题所在,并 逐一修正。
数据处理错误
总结词
数据处理错误通常是由于数据类 型不匹配、数据范围超出限制或 数据操作不当引起的。
详细描述
检查数据类型是否匹配,数据范 围是否在允许的范围内,以及数 据操作是否正确。
解决方案
根据数据类型和范围要求,对数 据进行适当的转换和验证,确保 数据操作的正确性。
执行程序
02
运行编译后的程序并查看输出结果。
调试程序
03
使用调试工具检查程序中的错误并进行修复。
04 常见问题与解决方案
程序编译错误
1 2 3
总结词
编译错误通常是由于语法错误、拼写错误或结构 问题引起的。
详细描述
检查代码中的拼写错误、语法错误和结构问题, 确保所有语句都符合COBOL语法规则,并且程 序结构清晰。
系统运行错误
总结词
系统运行错误通常是由于系统资源不足、系统故障或外部因素引 起的。
详细描述
检查系统资源是否充足,系统是否正常运行,以及是否存在外部干 扰因素。
解决方案
合理分配系统资源,确保系统正常运行,同时采取措施避免外部干 扰因素对系统的影响。
COBOL 概述PART 12

报表编制功能一、概述COBOL的报表编制功能很强,规定也比较多,根据所记录信息的不同类型可分为以下七种报表栏:1.报表头栏:整个报表的封面或标题。
2.报表尾栏:报表的“封底”,输出报表的结尾信息。
3.页头栏:输出每一页的标题。
4.页尾栏:输出本页的结束信息。
5.控制头栏:输出统计单位信息。
6.控制尾栏:输出本单位统计数字的小计。
7.明细栏:报表的具体统计数字。
例:生产月报表 (报表头 REPORT HEADING)1994年10月 (总控制头 CONTROL HEADING FINAL) 单位产品编号产品名数量单价金额 (页头 PAGE HEADING)1车间 (控制头 CONTROL HEADING)A-01 W-12 100 20 2000A-02 P-12 20 200 4000 (细目 DETAIL)……小计 6000 (控制尾 CONTROL FOOTING)2车间 B-01 F-12 25 400 10000……小计: 10000--01-- (页尾 PAGE FOOTING) ……全部金额: 234000 (总控制尾 COMTROL FOOTING FINAL)工厂生产科制表 (报表尾 REPORT FOOTING)二、报表编制功能在COBOL程序中的描述1.在数据部中的描述(1)文件节:在本节中对报表所在的文件进行描述,一般格式为RECORDS ARELABEL STANDARDRECORD ISRECORDSBLOCK CONTAINS [整数1 TO ] 整数2CHARACTERS[RECORD CONTAINS [整数3 TO ] 整数4 CHARACTERS]RECORDS AREDATA 数据名1 [,数据名2]…RECORD IS数据名4 数据名5VALUE OF数据名3 IS ,数据名4 IS常量1 常量2 [CODE CHARACTERS]REPORT IS报表名1 [,报表名2]…REPORTS ARE(2)报表节:在本节中对报表编制功能进行详细描述,一般格式为REPORT SECTION[ RD 报表名CODE 字符串CONTROL IS 数据名1 , [数据名2] ……CONTROLS ARE FINAL, [数据名1] , [数据名2] ……LIMIT IS LINEPAGE 整数1 [ , HEADING整数2 ] LIMITS ARE LINES[FIRST DETAIL整数3] [, LAST DETAIL整数4][ , FOOTING整数5] ]{ 报表描述体 } …… ] …2.在过程部中的描述(1)INITIATE语句(初始化语句)INITIATE 报表名1 [,报表名2]…此语句的作用是是这些报表的求和计数器和行计数器置零。
COBOL基础操作

AHEADETP MF4组1班COBOL上机实验报告姓名:编号:CN0001日期: 2011.02.XXListCOBOL Exercise (3)1. HELLO (3)2. ACCEPT1 (5)3. READ1 (12)4. WRITE (14)5. SIGN1 (21)6. STRING (25)7. DATE1 (29)8. PARM1 (32)9. COPY1 (36)10. SUBPROGRAM (38)11. TABLE1 (45)12. SEARCH1 (52)13. SORT1 (54)14. SEQ1000 (57)15. SEQ2000 (60)16. RPT1000 (63)COBOL Exercise1.HELLO这是一个入门程序,功能是显示:“HELLO WORLD”创建CN0001.COBLE.LOADLIB 的PDS数据集文件:COBOL语言编译的HELLO源程序代码,源代码如图:文件名为COMPILE的JCL文件源代码如图:文件名为GOHELLO的JCL文件源代码如图:2.ACCEPT1这个程序主要是学习ACCEPT语句,该语句主要用于接收数据,当用户从终端上输入数据时,这些数据将通过ACCEPT语句保存到相应变量中。
文件名为ACCEPT1的COBOL文件源代码如图:运行后结果如图:运行文件名为GACCEPT1的JCL文件源代码如图:运行结果如图:COMPUTE1和COMPUTE2利用ACCEPT语句接受数据,然后进行简单的运算。
COMPUTE1:COBOL代码如图:把文件名为COMPILE 的JCL文件SUB,使相应的COBOL变为可执行文件,运行后如图:编写Gcompute1的JCL源程序代码文件,它可调用上步生成的可执行文件,源代码如图:运行后结果如下图:COBOL代码如图:把文件名为COMPILE 的JCL文件SUB,使相应的COBOL变为可执行文件,运行后如图:编写文件名为Gcompute2的JCL源程序代码文件,它可调用上步生成的可执行文件,源代码如图:对接收的值N.的一系列运算过程参照相应的COBOL程序,如下图:运行后值=【(12+3)/5 – 2 】* 8=08,下图为运行结果:3.READ1这个程序主要是学习READ语句,该语句用于从文件中读取数据。
大型机-COBOL大作业-COBOL练习汇总

Cobol大作业班级姓名学号2011-4-25实验目的1.学会编写COBOL程序对输入数据按指定的要求处理,得到符合要求的规范的报表。
2.熟练掌握COBOL中文件处理的方式,使用READ和WRITE对文件中的记录进行读取和处理。
3.会使用SORT和MERGE对文件及其数据进行处理,实现文件中数据的排序以及多个文件的合并操作。
4.会使用TABLE对数据进行处理,掌握对TABLE中的数据的访问。
5.掌握PERFORM语句的使用,包括对数据的访问核对循环的处理。
6.了解系统函数的使用方法及其功能,在必要的时候调用系统函数,实现对应的功能。
7.学会对数据进行正确处理,包括怎样定义数据及处理异常数据等。
实验内容1.编辑一个关于公司销售情况输入文件,输入文件包含的数据记录有分公司号、销售代表号、分公司名、当年销售情况、去年销售情况,将公司的销售情况按指定格式做一个统计然后输出到指定文件中。
2.更新数据时,将原来的输入文件与更新的数据进行合并,得到一个新的输入文件,仍旧按指定的格式处理输入数据后输出到指定文件中。
3.使用表处理,将文件中相似的记录用表实现,使处理的过程更加方便。
4.处理数据的异常情况,包括数据错误、溢出的情况。
设计过程1.在编辑数据的过程,使用了READ和WRITE对文件进行了操作,读取输入文件中的数据并进行处理。
2.编辑数据时,使用了表对文件中的记录进行存储和处理,并按指定格式输出编辑后的结果。
3.在数据处理的过程中,会检测数据的合法性,对于不合法的数据报错或进行相应的其它处理。
4.更新数据时,创建一个用于存放更新数据的文件COBOL.UPDATE、一个中间文件COBOL.MERGE和一个用于存放输出结果COBOL.UPINPUT的文件,将输入文件中的数据进行更新后结果存放在创建的新文件COBOL.UPINPUT 中。
实验步骤1.编写代码,实现对输入文件COBOL.INPUT的处理,输入文件中的数据如下:2.程序的主要处理过程如下:3.编译程序,运行成功后,在COBOL.OUTPUT中查看输出结果,得到处理后的报表,如下:3.创建数据集COBOL.UPDATE、COBOL.UPINPUT,分别存放需要更新的数据和更新后得到的数据,COBOL.UPDATE中的数据如下:4.将输入数据集更新后得到一个新的数据集,更新的数据存放在COBOL.UPINPUT中,在源程序中需要对输入数据集进行处理,以得到更新后的数据,处理的过程如下:5.更新后运行程序,在COBOL.UPINPUT中便得到了一个新的输入文件,内容如下,可以看到,输入数据中增加了更新后的内容。
cobol 与 大型机应用

从事以上行业如何和大型主机系统打交道?很多因素都会影响一个公司交易处理的工
作负荷的设计,包括:
任何时刻与系统交涉的用户数量
每秒交易数量(TPS)
应用程序的有效性需求(譬如,应用程序必须是每天24小时、一周7天运行,每周一个晚上暂时中断?)
不同的安装程序用户的交互界面不同。在设计应用程序时,安装程序会重新配置大型主机现有的程序,加入用户网页浏览器接口,这就需要新的应用程序,只要购买软件便可实现.可是终端用户往往意识不到大型主机的存在。本书将不会介绍如何通过网络浏览器来实现与
大型机的应用
大型主机的工作一般分为两类:批处理和在线交易处理,其中包括基于网站的应用。 一:批处理
大型主机的一个主要优点是其处理来自高速外存设备的万亿数据并正确输出的能力。例如,大型主机可以帮助银行等金融机构处理季度报告并且客户公开(例如公民季度股票或养老金,政府的财政结算等);大型主机系统还可以帮助零售店核算每日销售报告,供零售商参考。
批处理有如下特点:
处理大量的输入数据,记录存储访问并产生大量输出。
虽然对响应时间要求不高,但是批处理经常要求在批窗口中完成,并且这段时间在线活动不怎么多并且服务标准协议来描述。
产生大量的用户信息。
一个事先预订的批处理包括预先建立的一系列的执行任务。
二:在线交易处理
大型主机为大量的在线交易处理系统提供服务。这些是商业核心运作所依赖的极其关键
的应用程序。使用在线系统的行业如下:
银行业-ATMs,客户服务的出纳员系统
保险业-政策管理和受理保险的代理系统
旅游和运输业-航空订票系统
制造业-库存管理、生产进度安排
政府-税收处理、响应时间,通常一秒内完成。
大型机学习002--大型机介绍及COBOL(1)

大型机是一种计算机(personal computer/minicomputer/mainframe/supercomputer)大型机的优点:高速(皮秒级,10^-12 )专注于大型数据的处理和数据存储高度的安全性批处理(BA TCH PROCESS)我们要学的:/COBOL(Common Business-Oriented Language 面向商业的通用语言)/JCL (Job Control Language工作控制语言)/VSAM (VIRTUAL STORAGE ACCESS METHOD 虚拟数据存取方法)/DB2 (IBM Database II IBM 数据库)/CICS (CUSTOMER INFORMA TION CONTROL SYSTEM 客户信息控制系统)COBOL(1)历史1957---ANSI-COBOL-----COBOL68-----74----85------98(面向对象的)特性高级语言(high level)、用户友好性(user friendly)、移植性(translation)、结构化语言(structered language)编程过程一般过程:程序开始(类似于头文件)、变量定义、写处理指令(输入、计算、输出)、结束编程COBOL:IDENTIFICATION DIVISION(识别部)、ENVIRONMENT DIVISION环境部、DA TA DIVISION数据部、PROCEDURE DIVISION过程部部的细分:divisions→sections→ paragraphs→sentences→statements编程格式:1-6 序列列:为“标号区”(sequence area)。
可以填写6个数字。
标号由程序编写者自定,标号应按由小到大的顺序,但不一定连续。
标号区内可以写标号也可以不写标号(标号区空白)。
标号对源程序的执行结果没有任何影响。
COBOL常用操作

四。COBOL 源程序的书写格式: 第 1 至 6 列为 “标号区”。 77 及文件 描述符 FD 等应从 A 区开始写。 第 12 至此 72 列,称为“B 区”。写程序中的正文部分。如过程部中的句子只能从 B 区 开始写。 第 73 至 80 列,称为“注释区”。 第 7 列为“续行标志区” 第 8 至此 11 列,称为“A 区”。程序中有些内容如部头,节头,段头,层号 01,层号
。。。GIVING 标识符 m [,标识符 n]。。。 2。SUBTRACT 语句: 格式 1:SUBTRACT 标识符 1 ,标识符 2 。。。 FROM 标识符 m [,标识符 n]。 。 。
常量 1 ,常量 2 格式 2:SUBTRACT 标识符 1 ,标识符 2 。。。 FROM 常量 标识符
五。COBOL 字符集包括: 数字 0 --- 9 ,字母 A--- Z ,a --- z , 专用字符:+ - * / = , . ; ‘ ( ) < > $ 及 空格。属于系统字符集而不属于 COBOL 字符集的字符只能出现 符串里。 在 COBOL 程序中的字
六。常量: COBOL 常量分为数值常量(如 100,-29),非数值常量(如 ‘ABC’ )和表意常量 (如 ZERO,SPACE,HIGH-VALUE,LOW-VALUE ,QUOTE ,ALL 常量)。 七。COBOL 所处理的数据的特点 层次的概念:数据间存在的从属关系。 文件的概念:多个记录可以组成一个文件。
DIVIDE
C GIVING C
5。COMPUTE 语句: COMPUTE 标识符 1 [,标识符 2 ]。。。= 算术表达式 ,+ 或 运算的优先级由高到低顺序为:(),正负号 ,** ,* 或 / 如:C = 3 ,D = 5 ,E = 2 , F = 1 则: COMPUT A,B = -(C + D)* 2 / E ** 3 - F = -3 三。传送语句 (MOVE) MOVE 语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。 MOVE 语句的一般格式为: MOVE 标识符 1 常量 1 MOVE 语句的传送规则: 1,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。 2,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。 3,对字母或字符数据(非数值型数据)的传送,按左对齐处理。 4,初等项和组合项之间可以相互传送。 关于各类数据之间的传送规则将在第五章中介绍。 四。转移语句(GO TO) 当需要使程序改变正常执行的顺序时,可以使用无条件转移语句 GO TO 。其一般 格式为: 格式 1: GO 格式 2: ON 标识符 GO TO 过程名 TO 过程名 1 [,过程名 2]。。过程名 n DEPENDING TO 标识符 2 [,标识符 3]。。。
大型机 Cobol Mainframe jcl.

1 将文件内容在系统中输出//CN001000 JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID//STEP1 EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=CN0010.XCY.JCL3,DISP=SHR//SYSUT2 DD SYSOUT=*//SYSIN DD DUMMY2 cond的用法,设置判断返回参数以决定是否执行本作业步//CN001000 JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID //STEP1 EXECPGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * SET MAXCC=8 /*//**************************************************************//STEP2 EXEC PGM=IEBGENER,COND=(8,NE,STEP1) //SYSPRINT DD SYSOUT=* //SYSUT1 DD * XCY IS A GOOD BOY! /* //SYSUT2 DD SYSOUT=* //SYSIN DD DUMMY//******************************************************************* //STEP3 EXEC PGM=IEBGENER,COND=(8,EQ,STEP1) //SYSPRINT DD SYSOUT=*//SYSUT1 DD *YES HE IS./*//SYSUT2 DD SYSOUT=*//SYSIN DD DUMMY3 将两个sds文件复制到一个已有的文件当中//CN001009 JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID//STEP1 EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=CN0010.XCY.JCL1,DISP=SHR// DD DSN=CN0010.XCY.JCL2,DISP=SHR//SYSUT2 DD DSN=CN0010.XCY.JCL3,DISP=SHR//SYSIN DD DUMMY4 将一个sds中的数据一部分复制到一个新建立的sds当中,record选择范围//CN001000 JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID //COPY EXECPGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DDDSN=CN0010.XCY.JCL1,DISP=SHR //SYSUT2 DDDSN=CN0010.XCY.JCL5,DISP=(NEW,CATLG), //UNIT=SYSDA,SPACE=(CYL,(1,1)), //DCB=(RECFM=FB,LRECL=40,BLKSIZE=800) //SYSIN DD * GENERATE MAXFLDS=5,MAXLITS=4RECORD FIELD=(5,1,,1),FIELD=(20,21,,6),FIELD=(9,61,ZP,26),FIELD=(9,70,ZP,31),FIELD=(4,'TEST',,36)/*5 临时数据集的应用//CN001000 JOB NOTIFY=&SYSUID,MSGLEVEL=(1,1)//BUILD EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD *XCY IS A GOOD BOY//SYSUT2 DD DSN=&&TEMP1,DISP=(,PASS),// SPACE=(TRK,(1,1)),DCB=(LRECL=80,RECFM=FB),// UNIT=SYSDA//SYSIN DD DUMMY//**************************************************************** //BUILD2 EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=&&TEMP1,DISP=(OLD,DELETE)//SYSUT2 DD DSN=CN0010.XCY.DATA,DISP=(,CATLG,DELETE),// SPACE=(TRK,(1,1)),DCB=(LRECL=80,RECFM=FB),// UNIT=SYSDA//SYSIN DD DUMMY6 将一个sds内容复制到新建立的pds的一个member中//CN001027 JOB NOTIFY=&SYSUID,MSGLEVEL=(1,1)//STEP1 EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=CN0010.XCY727.SDS,DISP=SHR//SYSUT2 DD DSN=CN0010.XCY727.XCC(XCY1),DISP=(NEW,CATLG),// SPACE=(TRK,(1,1,1)),VOL=SER=SUER01,UNIT=SYSDA//SYSIN DD DUMMY X7 将sds排序输出到另一个sds中,sort field选择排序范围//CN001027 JOB NOTIFY=&SYSUID,MSGLEVEL=(1,1)//STEP1 EXEC PGM=SORT//SYSOUT DD SYSOUT=*//SORTIN DD DSN=CN0010.XCY727.SDS,DISP=SHR//SORTOUT DD DSN=CN0010.XCY727.SDS2,DISP=SHR//SYSIN DD *SORT FIELDS=(1,2,CH,A,9,3,CH,A)/*8将sds排序并去除重复项,输出到另一个sds中//CN001027 JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID//STEP1 EXEC PGM=SORT//SYSOUT DD SYSOUT=*//SORTIN DD DSN=CN0010.XCY727.SDS,DISP=SHR//SORTOUT DD DSN=CN0010.XCY727.SDS2,DISP=SHR//SYSIN DD *SORT FIELDS=(1,3,CH,A)SUM FIELDS=NONE/*8 根据排序情况将sds内容分为三个sds,去除重复//CN001027 JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID //STEP1 EXECPGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DDDSN=CN0010.XCY727.SDS,DISP=SHR //SORTOF01 DDDSN=CN0010.XCY727.SDS3,DISP=(NEW,CATLG), //SPACE=(CYL,(1,4),RLSE),DCB=(LRECL=80,RECFM=FB,BLKSIZE=80)//SORTOF02 DD DSN=CN0010.XCY727.SDS4,DISP=(NEW,CATLG), //SPACE=(CYL,(1,4),RLSE),DCB=(LRECL=80,RECFM=FB,BLKSIZE=80)//SORTOF03 DD DSN=CN0010.XCY727.SDS5,DISP=(NEW,CATLG), //SPACE=(CYL,(1,4),RLSE),DCB=(LRECL=80,RECFM=FB,BLKSIZE=80) //SYSIN DD * SORT FIELDS=COPY OUTFILFILES=01,INCLUDE=(1,6,CH,EQ,C'MOHANK') OUTFILFILES=02,INCLUDE=(1,6,CH,EQ,C'SURESH') OUTFILFILES=03,INCLUDE=(1,6,CH,EQ,C'KRISHN') /*9 创建gdg//CN001027 JOB NOTIFY=CN0010 //******************************** //* CREATE A GDG * //********************************//GDGCREAT EXEC PGM=IDCAMS //GDGMODEL DDDSN=CN0010.XCY27.GDGMDL,DISP=(NEW,CATLG,DELETE), //SPACE=(TRK,(0)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=8000,DSORG=PS)//SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE GDG(NAME(CN0010.XCY27.GDG) LIMIT(100) /*10 在gdg中创建两个数据集//CN001027 JOB NOTIFY=CN0010//**********************************//* CREATE 2 DATASETS IN A GDG *//**********************************//CDS1 EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD *THIS LINE IS WRITTEN INTO DATASET IN GDG.//SYSUT2 DD DSN=CN0010.XCY27.GDG(+1),DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1)),DCB=CN0010.XCY27.GDGMDL//SYSIN DD DUMMY//CDS2 EXEC PGM=IEFBR14//GDG DD DSN=CN0010.XCY27.GDG(+2),DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(5,5)),DCB=CN0010.XCY27.GDGMDL11 删除gdg//CN001027 JOB NOTIFY=CN0010//************************************//* BEFORE DELETING A GDG,WE MUST *//* DELETE ALL DATASET IN IT. *//************************************//DELDS EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSIN DD *DELETE CN0010.XCY27.GDG.*DELETE CN0010.XCY27.GDGMDL//**************************************//DELGDG EXEC PGM=IDCAMS,COND=(0,NE)//SYSPRINT DD SYSOUT=*//SYSIN DD *DELETE CN0010.XCY27.GDG GDG/*12 将两组数据排序进两个sds,再用merge合并排序//CN001000 JOB NOTIFY=CN0010 //STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD * MOHANK 23423423434534344 KIRAN MOHANK 13342345345345345 RAJEEV ARAMES 34535345325354324 SURESH SURESH 98347385385933987 PULI //SORTOUT DD DSN=CN0010.XCY727.SDS,DISP=SHR //SYSIN DD * SORT FIELDS=(1,5,CH,A) //STEP2 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD *RAMESH 67575789769876785 MADHU KRISHN 50830948530859340 OIIED KRISHN 30495849572938495 MADHUSURESH 98347385385933987 PULI//SORTOUT DD DSN=CN0010.XCY727.SDS3,DISP=SHR//SYSIN DD *SORT FIELDS=(1,5,CH,A)//STEP3 EXEC PGM=ICEMAN,COND=(0,NE)//SYSOUT DD SYSOUT=*//SORTIN01 DD DSN=CN0010.XCY727.SDS,DISP=SHR//SORTIN02 DD DSN=CN0010.XCY727.SDS3,DISP=SHR//SORTOUT DD DSN=CN0010.XCY727.SDS4,DISP=SHR//SYSIN DD *MERGE FIELDS=(1,5,CH,A)/*13 根据局部数据条件(大于400)对数据排序存储//CN001027 JOB NOTIFY=CN0010//STEP1 EXEC PGM=SORT//SYSOUT DD SYSOUT=*//SORTIN DD DSN=CN0010.XCY727.SDS,DISP=SHR//SORTOUT DD DSN=CN0010.XCY727.SDS2,DISP=SHR//SYSIN DD *SORT FIELDS=COPYINCLUDE COND=(9,3,CH,GT,C'400')/*14 定义一个vsam esds//CN000928 JOB NOTIFY=CN0001,MSGLEVEL=(1,1) //DELDEF EXECPGM=IDCAMS //SYSPRINT DD SYSOUT=H //SYSIN DD * DELETECN0009.EXAMPLE.ESDS1 SET MAXCC=0 DEFINE CLUSTER(NAME(CN0009.EXAMPLE.ESDS1) RECORDS(100 500) RECORDSIZE(70 70)NONINDEXED) DATA (NAME(CN0009.EXAMPLE.ESDS1.DATA) CONTROLINETERVALSIZE(32760)) /*//REPROT1 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //IN1 DD DSN=INVMASTS.DATBIN,DISP=SHR //SYSIN DD *REPRO INFILE(IN1) OUTFILE(OUT1)PRINT INFILE(OUT1) CHARACTER/*15 定义一个vsam ksds//CN000928 JOB NOTIFY=CN0009//STEP1 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSIN DD *DELETE CN0009.VSAM.KSDS1SET MAXCC=0DEFINE CLUSTER-(NAME(CN0009.VSAM.KSDS1)-VOLUME(USER02)-RECORDS(100,10)-RECORDSIZE(10 20)-CONTROLINTERVALSIZE(4096)-KEYS(1,1))//16 定义一个rrds//CN000928 JOB NOTIFY=CN0009//SETP1 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSIN DD *DELETE CN0009.VSAM.RRDS1SET MAXCC=0DEFINE CLUSTER(NAME(CN0009.VSAM.RRDS1)-NUMBERED-VOLUME(USER02)-RECORDS(50000,1000)-RECORDSIZE(20 20)-CONTROLINTERVALSIZE(4096))//17 copy 一个pds所有members,到另一个pds//CN000929 JOB NOTIFY=&SYSUID //STEP1 EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=CN0009.XCY28.XCY,DISP=SHR //SYSUT2 DD DSN=CN0009.XCY.XCY,DISP=(NEW,CATLG),SPACE=(TRK,(5,1,2))18 调用流内过程copy//CN000929 JOB NOTIFY=CN0009 //MYPROC PROC INDD=,OUTDD= //CPY EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DDDSN=&INDD.,DISP=SHR //SYSUT2 DDDSN=&OUTDD.,DISP=(NEW,CATLG),SPACE=(TRK,(1,1)), //DCB=(LRECL=80,RECFM=FB,BLKSIZE=8000) //SYSIN DD DUMMY //MYEND PEND//CPYLOAD EXEC MYPROC,INDD=CN0009.XCY.XCY(XCY), //OUTDD=CN0009.XCY.XCY419 创建一个过程(pds的number)//MYPROC PROC INDD=,OUTDD= //CPY EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&INDD.,DISP=SHR //SYSUT2 DDDSN=&OUTDD.,DISP=(NEW,CATLG,DELETE), //SPACE=(TRK,(2,1)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=240) //SYSIN DD DUMMY20 cobol显示hello worldIDENTIFICATION DIVISION.PROGRAM-ID. XCY1ENVIRONMENT DIVISION.DATA DIVISION.PROCEDURE DIVISION.DISPLAY "HELLO WORLD!"STOP RUN.21 cobol实现简单运算(两数相加)IDENTIFICATION DIVISION.PROGRAM-ID. XCY3.ENVIRONMENT DIVISION.DATA DIVISION.WORKING-STORAGE SECTION.77 C PIC 9(3).77 D PIC 9(3).PROCEDURE DIVISION.ACCEPT C.ACCEPT D.ADD C TO D.DISPLAY D.STOP RUN.22 cobol的混合运算(变量有点混乱)IDENTIFICATION DIVISION. PROGRAM-ID. XCY5. ENVIRONMENT DIVISION.DATA DIVISION.WORKING-STORAGE SECTION.01 A PIC 999 VALUE 100.01 B PIC 999 VALUE 100.01 C PIC 999 VALUE 400.01 D PIC 999 VALUE 100.01 E PIC 999 VALUE 200.01 Y PIC 999 VALUE 100.01 F PIC 999 VALUE 500.01 Z PIC 999 VALUE 000.01 X PIC 999 VALUE 300.01 T PIC 999 VALUE 500. PROCEDURE DIVISION.A1.ACCEPT A.ACCEPT B.ACCEPT C.ACCEPT D.ACCEPT E.ACCEPT Y.ACCEPT F.ACCEPT T.ACCEPT X.ACCEPT Z.A2.ADD 3 TO A.ADD 101, A TO B.ADD 9, 6, 7 GIVING Y.SUBTRACT B FROM F.SUBTRACT Y FROM X GIVING Z.SUBTRACT D, E FROM C.SUBTRACT D, E FROM T.A3. DISPLAY "PRIMARY VALUES:". DISPLAY "A=100", ",B=100", ",C=400", ",D=100", ",E=200". DISPLAY "Y=100", ",F=500", ",Z=000", ",X=300", ",T=500".* DISPLAY "**********************************************". DISPLAY "THE REASULTS:". DISPLAY "A=3+A=", A. DISPLAY "B=101+A+B=", B. DISPLAY "Y=9+6+7=", Y. DISPLAY "F=F-B=", F. DISPLAY "Z=X-Y=", Z. DISPLAY "C=C-D-E=", C. DISPLAY "T=T-D-E=", T. STOP RUN.22 cobol混合运算,接着算。
cobol的编程实例[精华]
![cobol的编程实例[精华]](https://img.taocdn.com/s3/m/e34ffa9ba1116c175f0e7cd184254b35eefd1afa.png)
一个COBOL的编程实例通常一个程序分为几个处理过程,然后有序地组合起来使用,以实现我们所希望的处理结果。
这里,给出一个销售公司对销售数据处理的范例,通过实际的编程,掌握COBOL编程的技巧和步骤。
销售数据处理系统简介用户需求(1)某销售公司有若干个销售商店,公司想获得每个商品的销售去向和每个商店的销售额等信息。
(2)商品的库存管理在一个固定地方进行管理。
经营者为掌握库存销售情况,想及时获得有关定货信息。
为满足上述(1)和(2)的需求,首先:①需要具体地确定什么样的信息,采用什么样的手段来获取。
例如,定货信息包含什么内容、日处理做什么、月处理做什么等。
②需要搞清为获取①中所需信息,什么样的数据适合作为输入数据来使用。
③决定②中数据文件格式,讨论处理顺序,进而决定程序处理所用的文件。
(过程设计、文件设计)④处理过程中,如果需要进行数据合并、排序的话,必须进行数据代码化处理(代码设计)根据上述思考,决定编程的具体工作。
此例题是一个批处理例题。
既将每周一次从销售店收集到的销售数据进行汇总合计,作成销售额统计表,然后根据销售额统计表获取库存主文件、供货商主文件信息后打印定货清单。
注:此程序的部分编程技巧不是最优,但可以分为如下四个处理步骤来实现。
●处理步骤1:数据合法性检查和排序处理从商店获取的数据可能有非法数据,所以必须进行数据合法性检查。
对查出的错误数据,将其打印到“错误数据清单”上并要求修改这些错误数据。
对检查无误(正确)的数据,按商品代码进行排序,以便进行后续处理。
●处理步骤2:统计报表的制作将输入的销售信息作成统计表。
统计表上要打印出各商店按商品代码汇总的销售额,并把商店总销售额用‖*‖表示出来。
●处理步骤3:更新处理库存主文件把按商品代码排序的销售文件作为交易,更新库存主文件的当前库存量。
由于在销售文件中,可能存在同一商品代码的多条数据记录,所以需要做N:1的数据合并处理。
●处理步骤4:制作定货清单在处理步骤3中,当新库存主文件产生的同时,要将当前库存量与最低库存量进行比较后,将需要定货的商品代码清单打印出来。
17.9.1 输出商品报表实例_精通COBOL——大型机商业编程技术详解(修订版)_[共2页]
![17.9.1 输出商品报表实例_精通COBOL——大型机商业编程技术详解(修订版)_[共2页]](https://img.taocdn.com/s3/m/33229dd876c66137ef0619ad.png)
COBOLDSORG:指定数据集的组织形式。
通常为顺序数据集,故使用PS表示。
MACRF:指定访问数据集记录的宏命令的类型。
通常用于输入的数据集为GM(Get Macro),用于输出的数据集为PM(Put Macro)。
EODAD:指定文件读取结束后的地址标号。
该参数只在用于输入的数据集中存在。
BLKSIZE:指定物理记录的长度。
该参数在用于输入的数据集中默认,在用于输出的数据集中通常为6650。
以下为汇编语言程序之后的两条JCL语句。
可以看到,第一条JCL语句中的“SYSIN”与INFILE文件的DCB参数DDNAME中的内容对应,第二条JCL语句中的“SYSPRINT”与OUTFILE文件的DCB参数DDNAME中的内容对应。
相应JCL语句如下。
//G.SYSIN DD DSN = ADCDA.ASM.DATA, DISP = SHR//G.SYSPRINT DD SYSOUT = *结合以上两段DCB宏命令,程序实际上将数据集ADCDA.ASM.DATA作为输入文件。
而显示屏则为输出文件,数据直接输出到显示屏上。
由此可见,DCB的功能实际上同COBOL 语言中环境部的功能相类似。
在z/OS环境下的汇编语言程序基本结构通常都包含有程序模块化代码和DCB参数。
其中程序模块化代码在程序逻辑部分之前编写,DCB参数在数据定义部分之后指定。
具体形式可参照本章第1节的最后一个小节中程序基本结构的示例。
17.9 综合实例前面分别对大型机汇编语言各方面的知识进行了讲解。
下面通过两个汇编语言程序的综合实例,以加深对于汇编语言的掌握,增强实际应用能力。
17.9.1 输出商品报表实例该程序实现的功能是读取商品信息输入文件的每条记录,并按指定格式生成商品信息报表。
其中输入文件的商品记录数据存放在数据集ADCDA.ASM.DATA01中。
每条商品记录为80列,每列数据占用1个字节。
记录内容分别如下。
1~5列:商品编号。
cobol-example

二.程序举例:例1:读入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价).然后打印出该产品的全部数据.数据形式如下:19921231 000001 AAAA 0100 500019931231 100001 BBBB 0200 6000DATE PRODCODE CUST AMT PRICE程序如下:IDENTIFICATION DIVISION.PROGRAM-ID. PEXAM1ENVIRONMENT DIVISION.CONFIGRATION SECTION.INPUT-OUTPUT SECTION.FILE-CONTROL.SELECT INPUT-FILE ASSIGN TO FILE1ORGANIZATION IS SEQUENCIALACCESS MODE IS SEQUENCIALFILE-STATUS IS WS-INPUT-FILE-STATUS.SELECT OUTPUT-FILE ASSIGN TO P-FILEORGANIZATION IS SEQUENCIALACCESS MODE IS SEQUENCIALFILE-STATUS IS WS-OUTPUT-FILE-STATUS.DATA DIVISION.FILLE SECTION.FD INPUT-FILE LABEL RECORD IS STANDARD.01 IN-REC.05 DATE PIC 9(8).05 PROD-CODE PIC 9(6).05 CUSTOMER-CODE PIC X(4).05 QUANTITY PIC 9(4).05 UNIT-PRICE PIC 9(4).FD OUTPUT-FILE LABEL RECORD IS STANDARD.01 OUT-REC.05 DATE PIC 9999B99B99.05 FILLER PIC X(5).05 PROD-CODE PIC 9(6).05 FILLER PIC X(5).05 CUSTOMER-CODE PIC X(4).05 FILLER PIC X(5).05 QUANTITY PIC ZZZ9.05 FILLER PIC X(5).05 UNIT-PRICE PIC $(5).05 FILLER PIC X(5).05 SALES-VALUE PIC $(8).WORKING-STORAGE SECTION.01 WS-VARIBLES.05 WS-INPUT-FILE-STATUS PIC 9(2).88 WS-INPUT-FILE-SUCCESSFUL VALUE 0.88 WS-INPUT-FILE-EOF VALUE 23.05 WS-OUTPUT-FILE-STATUS PIC 9(2).88 WS-OUTPUT-FILE-SUCCESSFUL VALUE 0. PROCEDURE DIVISION.A000-MAIN.PERFORM A100-OPEN-FILESPERFORM R000-READ-FILEPERFORM A200-PROCESS-RECORD UNTIL WS-INPUT-FILE-EOFPERFORM A300-CLOSE-FILESSTOP RUN.A000-EXIT.EXIT.A100-OPEN-FILES.OPEN INPUT INPUT-FILEOUTPUT OUTPUT-FILEIF NOT WS-INPUT-FILE-SUCCESSFULDISPLAY ‘INPUT-FILE OPEN NOT SUCCESSFUL’UPON CONSOLE PERFORM Z000-ABENDEND-IFIF NOT WS-OUTPUT-FILE-SUCCESSFULDISPLAY ‘OUTPUT-FILE OPEN NOT SU CCESSFUL’UPON CONSOLE PERFORM Z000-ABENDEND-IF.A200-PROCESS-RECORD.INITIALIZE OUT-RECMOVE CORR IN-REC TO OUT-RECCOMPUTE SALES-VALUE = QUANTITY OF IN-REC * UNIT-PRICE O F OUT-RECPERFORM W000-WRITE-FILEPERFORM R000-READ-FILE.A300-CLOSE-FILE.CLOSE INPUT-FILEOUTPUT-FILE.R000-READ-FILE.READ INPUT-FILEIF NOT WS-INPUT-FILE-SUCCESSFUL AND NOT WS-INPUT-FILE-EO FDISPLAY ‘INPUT-FILE READ NOT SUCCESSFUL’UPON CONSOLEPERFORM Z000-ABEND THRU Z000-EXITEND-IF.W000-WRITE-FILE.WRITE OUT-REC AFTER 1IF NOT WS-OUTPUT-FILE-SUCCESSFULDISPLAY ‘OUTPUT-FILE WRITE NOT SUCCESSFUL’UPON CONSOLEPERFORM Z000-ABENDEND-IF.Z000-ABEND.DISPLAY ‘PROGRAM ABEND !’UPON CONSOLEPERFORM A300-CLOSE-FILES THRU A300-EXITProcess specificationsThis program updates an inventory master file (INVMAST) based on the data in a sequentialfile of valid inventory transaction records (VALTRAN). The inventory master file is indexed by item number and updated randomly.If the program finds a master record with the same item number as a transaction, it uses thetransaction data to update the master record .It does this by increasing the on hand quantityin the master record by the receipt quantity in the transaction record.If the program cannot find a master record for a transaction, it writes the transaction record onthe file of error transactions (ERRTRAN). The record format format for ERRTRAN is same asfor VALTRAN.The basic processing requirements are:1. Read a transaction record.2. Read the master record with the same item number as in the transaction record.3. If the master record is found , update and rewrite the matching master record.4. If the transaction is not found , write the transaction record on the file of error transactions.程序如下:IDENTIFICATION DIVISION.PROGRAM-ID. INV1300.ENVIRONENT DIVISON.INPUT-OUTPUT SECTION.FILE-CONTROL.SELECT VALTRAN ASSIGN TO SYS020-AS-VALTRAN.SELECT INVMAST ASSIGN TO SYS021-INVMATORGANIZATION IS INDEXEDACCESS IS RANDOMRECORD KEY IS MR-ITEM-NOFILE STATUS IS INVMAST-ERROR-CODE.SELECT ERRTRAN ASSIGN TO SYS022-AS-ERRTRAN.DATA DIVISION.FILE SECTION.FD VALTRANLABEL RECORDS ARE STANDARD.01 VALID-TRANSACTION-AREA PIC X(21).FD INVMASTLABEL RECORDS ARE STANDARD.01 MASTER-RECORD-AREA.05 MR-ITEM-NO PIC X(5).05 FILLER PIC X(45).FD ERRTRANLABEL RECORDS ARE STANDARD.01 ERROR-TRANSACTION PIC X(21).WORKING-STORAGE SECTION.01 SWITCHES.05 VALTRAN-EOF-SWITCH PIC X VALUE ‘N’.88 VALTRAN-EOF VALUE ‘Y’.05 MASTER-FOUND-SWITCH PIC X.88 MASTER-FOUND VALUE ‘Y’.01 FILE-STATUS-FIELD.05 INVMAST-ERROR-CODE PIC X(2).01 INVENTROY-TRANSACTION-RECORD.05 IT-ITEM-NO PIC X(5).05 IT-VENOR-NO PIC X(5).05 IT-RECEIPT-DATE PIC X(6).05 IT-RECEIPT-QUANTITY PIC S9(5).01 INVENTORY-MASTER-RECORD.05 IM-DESCRIPTIVE-DATA.10 IM-ITEM-NO PIC X(5).10 IM-ITEM-DESC PIC X(20).10 IM-UNIT-COST PIC S9(3)V9(2).10 IM-UNIT-PRICE PIC S9(3)V9(2).05 IM-INVENTORY-DATA.10 IM-REORDER-POINT PIC S9(5).10 IM-ON-HAND PIC S9(5).10 IM-ON-ORDER PIC S9(5).PROCEDURE DIVISION.A000-UPDATE-INVENTORY-FILE.OPEN INPUT VALTRANI-O INVMASTOUTPUT ERRTRANPERFORM B000-PROCESS-INVENTORY-TRAN THRU B000-EXITUNTIL VALTRAN-EOFCLOSE VALTRANINVMASTERRTRANDISPLAY ‘PROGRAM INV1300 NORMAL END’GOBACK.B000-PROCESS-INVENTORY-TRAN.PERFORM B100-READ-INVENTORY-TRANIF NOT VALTRAN-EOFPERFORM B200-READ-INVENTORY-MASTERIF MASTER-FOUNDPERFORM B300-UPDATE-INVENTORY-MASTERELSEPERFORM B400-WRITE-ERROR-TRANEND-IFEND-IF.B000-EXIT.EXIT.B100-READ-INVENTRORY-TRAN.READ VALTRAN INTO INVENTORY-TRANSACTION-RECORDAT END MOVE ‘Y’ TO VALTRAN-EO F-SWITCH.B100-EXIT.EXIT.B200-READ-INVENTORY-MASTER.MOVE IT-ITEM-NO TO MR-ITEM-NOREAD INVMASST INTO INVENTORY-MASTER-RECORDIF INVMAST-ERROR-CODE = ‘00’MOVE ‘Y’ TO MASTER-FOUND-SWITCHELSEMOVE ‘N’ TO MASTER-FOUND-SWITCHEND-IF.B300-UPDATE-INVENTORY-MASTER.ADD IT-RECEIPT-QUANTITY TO IM-ON-HANDREWRITE MASTER-RECORD-AREA FROM INVENTORY-MASTER-RECORDIF INVMAST-ERROR-CODE NOT = ‘00’DISPLAY ‘ INV1300 REWRITE INVMAST ERROR . ITEM NUMBER = ’ IM-ITEM-NODISPLAY ‘ FILE STATUS = ’ INVMAST-ERROR-CODEMOVE ‘Y’ TO VALTRAN-EOF-SWITHEND-IF.B300-EXIT.EXIT.B400-WRITE-ERROR-TRAN.WRITE ERROR-TRANSACTION FROM INVENTORY-TRANSACTION-RE CORD.B400-EXIT.EXIT.IDENTIFICATION DIVISION.PROGRAM-ID. PROGRAM3.ENVIRONMENT DIVISION.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-RESP PIC S9(8) COMP.88 WS-RESP-NORMAL VALUE 0.01 PGM3COM.05 CUST-NO PIC 9(8).05 PGM3-OUT.10 PGM3-RETURN-CODE PIC X(2).88 PGM3-SUCCESSFUL VALUE ' '.88 PGM3-CUST-NBR-ERR VALUE '01'.88 PGM3-CUST-NOT-FND VALUE '02'.10 PGM3-AC PIC 9(5).10 PGM3-BAL PIC 9(11).01 MASTER-RECORD.05 MASTER-KEY PIC 9(8).05 CUST-NAME PIC X(20).05 CHECK-AC PIC 9(5).05 BAL PIC 9(11).LINKAGE SECTION.01 DFHCOMMAREA PIC X(26). PROCEDURE DIVISION.A000-MAIN-PROCESS.MOVE DFHCOMMAREA TO PGM3COMINITIALIZE PGM3-OUTPERFORM B000-VALIDATION THRU B000-EXITIF PGM3-SUCCESSFULPERFORM C000-PROCESS THRU C000-EXIT END-IF.A999-RETURN.MOVE PGM3COM TO DFHCOMMAREA. EXEC CICS RETURN END-EXEC.GOBACK.*B000-VALIDATION.IF CUST-NO NOT NUMERICSET PGM3-CUST-NBR-ERR TO TRUEEND-IF.B000-EXIT.EXIT.*C000-PROCESS.MOVE CUST-NO TO MASTER-KEYEXEC CICS READ FILE ('VMASTER')RIDFLD(MASTER-KEY)INTO (MASTER-RECORD)LENGTH(LENGTH OF MASTER-RECORD)RESP (WS-RESP)END-EXECIF WS-RESP NOT = DFHRESP(NORMAL) IF WS-RESP = DFHRESP(NOTFND)SET PGM3-CUST-NOT-FND TO TRUEELSEEXEC CICS ABEND ABCODE('ABCD') END-EXECEND-IFELSEMOVE CHECK-AC TO PGM3-ACMOVE BAL TO PGM3-BALEND-IF.C000-EXIT.EXIT.。
COBOL报表程序自动生成系统

COBOL报表程序自动生成系统
丁忠俊;邓军
【期刊名称】《计算机应用研究》
【年(卷),期】1991(008)006
【摘要】本文叙述一个在IBM/PC机上用PASCAL语言实现的VAX/COBOL报表程序自动生成系统,该系统具有比较强的表格绘制功能,同时生成COBOL报表程序中嵌套有对关系数据库RDB操纵语言RDO语句,能够实现对数据库中多个关系,多个字段同时交叉提取数据的操作。
【总页数】4页(P9-12)
【作者】丁忠俊;邓军
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP311.13
【相关文献】
1.报表输出程序的自动生成系统 [J], 张银明
2.COBOL程序2000年问题的解决方法 [J], 朱萍
3.COBOL源程序自动生成系统 [J], 郜荣春;张清绵
4.dBASEⅢ报表程序自动生成系统 [J], 乔中南
5.报表程序自动生成系统 [J], 叶孙民
因版权原因,仅展示原文概要,查看原文内容请购买。
COBOL中的表

cobol中的表简介表是COBOL语言所特有的一个概念。
表最基本的用途是方便程序员的开发工作,提高程序执行效率,同时方便数据的查找。
在cobol中使用表的原因COBOL语言主要应用于大型高端领域的开发,如国内的金融银行业。
因此,需要用到对于大量数据的处理。
然而在实际应用中,这些大量的数据中往往很多都是有联系性和相似性的。
将这些有着联系性和相似性的数据作为一个整体来进行处理,主要有以下两大好处:1.减少代码编写量,极大地方便程序员的开发工作。
2.优化数据操作,提高程序执行效率。
将有着相似属性的数据作为一个整体来进行处理的方式,实际上正是引入表这样一个机制的初衷。
在实际应用中,基于以上概念所产生的表最主要的用途是对数据的查找。
表的基本概念表就是一组存储在连续空间上的相似数据的集合。
所有这些数据被指定为一个名称,即表的一个条目名。
以下是一个表的典型结构。
01EXAMPLE-TABLE-ONE./*表的名称*/05TABLE-COL OCCURS5TIMES./*表的一列,共重复5列*/10TABLE-ITEM-1PICX(1)./*表的第一个条目*/……/*省略表的其他条目*/10TABLE-ITEM-N PICX(3)./*表的最后一个条目*/由以上代码可看出,表这种数据结构主要是通过OCCURS语句创建的。
表的一列包含了表的所有条目。
当表中仅有一个条目时,则不需要定义表的列,而直接由条目取代。
在该情况下表的定义如下。
01EXAMPLE-TABLE-TWO./*表的名称*/05TABLE-ITEM PICX(5)./*表的条目*/OCCURES3TIMES./*该条目重复3次*/表的基本用途表的基本用途是减少代码编写量,优化数据操作,便于数据查找。
下面将通过一个简单实例进行具体讲解。
在银行系统的应用软件中,一个类似于零存整取的系统是十分常见的。
为突出讨论的问题,可以对此进行一个抽象模型的提取。
具体做法就以最单纯的零存整取系统为基本模型,不考虑利率和税率等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
COBOL实验报告2一,实验目的1,能够利用cobol程序实现一个报表的编辑和制作。
2,能够对文件进行操作,比如说:打开,关闭,读和写3,了解COBOL的常用语句和一些常用的数据类型,能够利用编辑型数据实现数据的友好输出。
4,能够运用sdsf修改程序中的错误5,学会编写稍微复杂的COBOL程序。
二,实验原理和内容1,修改UTE20.COBOL.MURACH.EXERCISE(RPT1000X) 使之正常运行。
2,在RPT1000原有基础上改进成增强的报表打印程序。
3,利用给定的数据和格式独立的制作一个报表三,实验环境PC机和TSO下的ISPF环境四,实验步骤1,步骤1和步骤2:修改UTE20.COBOL.MURACH.EXERCISE(RPT1000X) 使之正常运行,并在此基础上改进成增强型的报表打印程序。
1.1 代码:000100 IDENTIFICATION DIVISION.000200000300 PROGRAM-ID. RPT1000.000400000500 ENVIRONMENT DIVISION.000600000700 INPUT-OUTPUT SECTION.000800000900 FILE-CONTROL.001000001100 SELECT CUSTMAST ASSIGN TO CUSTMAST.001200 SELECT SALESRPT ASSIGN TO SALESRPT.001300001400 DATA DIVISION.001500001600 FILE SECTION.001700001800 FD CUSTMAST.001900002000 01 CUSTOMER-MASTER-RECORD.002100 05 CM-BRANCH-NUMBER PIC 9(2).002200 05 CM-SALESREP-NUMBER PIC 9(2).002300 05 CM-CUSTOMER-NUMBER PIC 9(5).002400 05 CM-CUSTOMER-NAME PIC X(20). 002500 05 CM-SALES-THIS-YTD PIC S9(5)V9(2). 002600 05 CM-SALES-LAST-YTD PIC S9(5)V9(2). 002700002800 FD SALESRPT.002900003000 01 PRINT-AREA PIC X(132).003100003200 WORKING-STORAGE SECTION.003300003400 01 SWITCHES.003500 05 CUSTMAST-EOF-SWITCH PIC X VALUE "N". 003600003700 01 PRINT-FIELDS.003800 05 PAGE-COUNT PIC S9(3) VALUE ZERO. 003900 05 LINES-ON-PAGE PIC S9(3) VALUE +55.004000 05 LINE-COUNT PIC S9(3) VALUE +99.004100 05 SPACE-CONTROL PIC S9.004200004300 01 TOTAL-FIELDS.004400 05 GRAND-TOTAL-THIS-YTD PIC S9(7)V99 VALUE ZERO.004500 05 GRAND-TOTAL-LAST-YTD PIC S9(7)V99 VALUE ZERO.00460001 CALCULATED-FILEDS.05 CHANGE-AMOUNT PIC S9(5)V99.004700 01 CURRENT-DATE-AND-TIME.004800 05 CD-YEAR PIC 9999.004900 05 CD-MONTH PIC 99.005000 05 CD-DAY PIC 99.005100 05 CD-HOURS PIC 99.005200 05 CD-MINUTES PIC 99.005300 05 FILLER PIC X(9).005400005500 01 HEADING-LINE-1.005600 05 FILLER PIC X(7) VALUE "DATE: ". 005700 05 HL1-MONTH PIC 9(2).005800 05 FILLER PIC X(1) VALUE "/".005900 05 HL1-DAY PIC 9(2).006000 05 FILLER PIC X(1) VALUE "/".006100 05 HL1-YEAR PIC 9(4).006200 05 FILLER PIC X(11) VALUE SPACE.006300 05 FILLER PIC X(20) VALUE "YEAR-TO-DATE SALES R".006400 05 FILLER PIC X(20) VALUE "EPORT ".006500 05 FILLER PIC X(8) VALUE " PAGE: ". 006600 05 Hl1-PAGE-NUMBER PIC ZZZ9.006700 05 FILLER PIC X(52) VALUE SPACE.006800006900 01 HEADING-LINE-2.007000 05 FILLER PIC X(7) VALUE "TIME: ". 007100 05 HL2-HOURS PIC 9(2).007200 05 FILLER PIC X(1) VALUE ":".007300 05 HL2-MINUTES PIC 9(2).007400 05 FILLER PIC X(58) VALUE SPACE.007500 05 FILLER PIC X(10) VALUE "RPT1000". 007600 05 FILLER PIC X(52) VALUE SPACE.007700007800 01 HEADING-LINE-3.007900 05 FILLER PIC X(20) VALUE "CUST ". 008000 05 FILLER PIC X(20) VALUE " SALES ". 008100 05 FILLER PIC X(20) VALUE " SALES ".05 FILLER PIC X(20) VALUE "CHANGE CHANGE ". 008200 05 FILLER PIC X(52) VALUE SPACE.008300008400 01 HEADING-LINE-4.008500 05 FILLER PIC X(20) VALUE "NUM CUSTOMER NAME".008600 05 FILLER PIC X(20) VALUE " THIS YTD ".008700 05 FILLER PIC X(20) VALUE " LAST YTD ".05 FILLER PIC X(20) VALUE "AMOUNT PERCENT ". 008800 05 FILLER PIC X(52) VALUE SPACE.008900009000 01 CUSTOMER-LINE.009100 05 CL-CUSTOMER-NUMBER PIC 9(5).009200 05 FILLER PIC X(2) VALUE SPACE. 009300 05 CL-CUSTOMER-NAME PIC X(20).009400 05 FILLER PIC X(3) VALUE SPACE.009500 05 CL-SALES-THIS-YTD PIC ZZ,ZZ9.99-. 009600 05 FILLER PIC X(4) VALUE SPACE. 009700 05 CL-SALES-LAST-YTD PIC ZZ,ZZ9.99-.05 FILLER PIC X(4) VALUE SPACE.05 CL-CHANGE-AMOUNT PIC ZZ,ZZ9.99-.05 FILLER PIC X(3) VALUE SPACE.05 CL-CHANGE-PERCENT PIC ZZ9.9-.009800 05 FILLER PIC X(55) VALUE SPACE. 009900010000 01 GRAND-TOTAL-LINE.010100 05 FILLER PIC X(27) VALUE SPACE. 010200 05 GTL-SALES-THIS-YTD PIC Z,ZZZ,ZZ9.99-. 010300 05 FILLER PIC X(1) VALUE SPACE. 010400 05 GTL-SALES-LAST-YTD PIC Z,ZZZ,ZZ9.99-.05 FILLER PIC X(1) VALUE SPACE.05 GTL-CHANGE-AMOUNT PIC Z,ZZZ,ZZ9.99-.05 FILLER PIC X(3) VALUE SPACE.05 GTL-CHANGE-PERCENT PIC ZZ9.9-.010500 05 FILLER PIC X(55) VALUE SPACE. 010600010700 PROCEDURE DIVISION.010800010900 000-PREPARE-SALES-REPORT.011000011100 OPEN INPUT CUSTMAST011200 OUTPUT SALESRPT.011300 PERFORM 100-FORMAT-REPORT-HEADING.011400 PERFORM 200-PREPARE-SALES-LINES011500 UNTIL CUSTMAST-EOF-SWITCH = "Y".011600 PERFORM 300-PRINT-GRAND-TOTALS.011700 CLOSE CUSTMAST011800 SALESRPT.011900 STOP RUN.012000012100 100-FORMAT-REPORT-HEADING.012200012300 MOVE FUNCTION CURRENT-DATE TOCURRENT-DATE-AND-TIME.012400 MOVE CD-MONTH TO HL1-MONTH.012500 MOVE CD-DAY TO HL1-DAY.012600 MOVE CD-YEAR TO HL1-YEAR.012700 MOVE CD-HOURS TO HL2-HOURS.012800 MOVE CD-MINUTES TO HL2-MINUTES.012900013000 200-PREPARE-SALES-LINES.013100013200 PERFORM 210-READ-CUSTOMER-RECORD.013300 IF CUSTMAST-EOF-SWITCH = "N"IF CM-SALES-THIS-YTD >= 10000013400 PERFORM 220-PRINT-CUSTOMER-LINE.013500013600 210-READ-CUSTOMER-RECORD.013700013800 READ CUSTMAST013900 AT END014000 MOVE "Y" TO CUSTMAST-EOF-SWITCH.014100014200 220-PRINT-CUSTOMER-LINE.014300014400 IF LINE-COUNT >= LINES-ON-PAGE014500 PERFORM 230-PRINT-HEADING-LINES.014600 MOVE CM-CUSTOMER-NUMBER TO CL-CUSTOMER-NUMBER.014700 MOVE CM-CUSTOMER-NAME TO CL-CUSTOMER-NAME.014800 MOVE CM-SALES-THIS-YTD TO CL-SALES-THIS-YTD.014900 MOVE CM-SALES-LAST-YTD TO CL-SALES-LAST-YTD.COMPUTE CHANGE-AMOUNT =CM-SALES-THIS-YTD - CM-SALES-LAST-YTD.MOVE CHANGE-AMOUNT TO CL-CHANGE-AMOUNT.IF CM-SALES-LAST-YTD = ZEROMOVE 999.9 TO CL-CHANGE-PERCENTELSECOMPUTE CL-CHANGE-PERCENT ROUNDED =CHANGE-AMOUNT * 100 / CM-SALES-LAST-YTDON SIZE ERRORMOVE 999.9 TO CL-CHANGE-PERCENT.015000 MOVE CUSTOMER-LINE TO PRINT-AREA.015100 WRITE PRINT-AREA AFTER ADVANCING SPACE-CONTROL LINES.015200 ADD 1 TO LINE-COUNT.015300 ADD CM-SALES-THIS-YTD TO GRAND-TOTAL-THIS-YTD. 015400 ADD CM-SALES-LAST-YTD TO GRAND-TOTAL-LAST-YTD. 015500 MOVE 1 TO SPACE-CONTROL.015600015700 230-PRINT-HEADING-LINES.015800015900 ADD 1 TO PAGE-COUNT.016000 MOVE PAGE-COUNT TO HL1-PAGE-NUMBER. 016100 MOVE HEADING-LINE-1 TO PRINT-AREA.016200 WRITE PRINT-AREA AFTER ADVANCING PAGE.016300 MOVE HEADING-LINE-2 TO PRINT-AREA.016400 WRITE PRINT-AREA AFTER ADVANCING 1 LINES. 016500 MOVE HEADING-LINE-3 TO PRINT-AREA.016600 WRITE PRINT-AREA AFTER ADVANCING 2 LINES. 016700 MOVE HEADING-LINE-4 TO PRINT-AREA.016800 WRITE PRINT-AREA AFTER ADVANCING 1 LINES. 016900 MOVE ZERO TO LINE-COUNT.017000 MOVE 2 TO SPACE-CONTROL.017100017200 300-PRINT-GRAND-TOTALS.017300017400 MOVE GRAND-TOTAL-THIS-YTD TO GTL-SALES-THIS-YTD. 017500 MOVE GRAND-TOTAL-LAST-YTD TO GTL-SALES-LAST-YTD.COMPUTE CHANGE-AMOUNT =GRAND-TOTAL-THIS-YTD - GRAND-TOTAL-LAST-YTD.MOVE CHANGE-AMOUNT TO GTL-CHANGE-AMOUNT.IF GRAND-TOTAL-LAST-YTD = ZEROMOVE 999.9 TO GTL-CHANGE-PERCENTELSECOMPUTE GTL-CHANGE-PERCENT ROUNDED =CHANGE-AMOUNT * 100 / GRAND-TOTAL-LAST-YTDON SIZE ERRORMOVE 999.9 TO GTL-CHANGE-PERCENT 017600 MOVE GRAND-TOTAL-LINE TO PRINT-AREA. 017700 WRITE PRINT-AREA AFTER ADVANCING 2 LINES.1.2 输入与输出。