cobol的编程实例

上传人:daj****de 文档编号:119684121 上传时间:2022-07-15 格式:DOCX 页数:30 大小:387.73KB
返回 下载 相关 举报
cobol的编程实例_第1页
第1页 / 共30页
cobol的编程实例_第2页
第2页 / 共30页
cobol的编程实例_第3页
第3页 / 共30页
点击查看更多>>
资源描述
一个COBOL的编程实例处理概要通常一个程序分为几个处理过程,然后有序地组合起来使用,以实现我们所希望的处 理结果。这里,给出一个销售公司对销售数据处理的范例,通过实际的编程,掌握COBOL编 程的技巧和步骤。销售数据处理系统简介(按商品代码 排序)处理步骤3于在销售文件中,可能存在同一商品代码的多条数据记录,所以需要做N: 1的 数据合并处理。处理步骤4:制作定货清单在处理步骤3中,当新库存主文件产生的同时,要将当前库存量与最低库存 量进行比较后,将需要定货的商品代码清单打印出来。程序框图销售数据数据合法性检查、排序错误数据清单更新库存主文件销售 文件库存主文件(顺序文件)新在库主文件排序(服务程序)定货信息文件(供货商代码排序)处理步骤4(按商品代码排序)排序(服务程序)销售文 件销售文件(按商店代码、商品 代码的顺序排列)编制统计表统计表处理步骤2分两步按各商 店代码、各商 品代码汇总销 售额定货信息文件比较处理定货清单供货商主文件销售文件记录格式商品代码销售金额销售数量商店代码X (6)9 (7)9 (6)X (2)库存主文件记录格式商品代码当前库存最低库存供货商代码X (6)9 (8)9 (8)X (6)(索引文件)(随机处理)供货商代码X(6)开户银行代码X(3)供货商名X(20):其它X(31)供货商主文件记录格式处理步骤1数据合法性检查和排序处理V题一.人厂阅读如下处理内容,编制处理步骤1的流程图。处理内容处理步骤1就是先前所述的一系列处理程序的入口,它为后续处理提供必要的数据。 具体说来,就是对输入文件的数据进行合法性检查和排序处理。 数据检查项有如下3种: 销售金额的数据合法性检查 销售数量的数据合法性检查 商店代码存在与否的检查对第项加以说明,如果在商店代码参数表中无法查到所读入的商店代码,则认 为所读入的商店代码无效。检查出的所有错误数据都要输出到“错误数据清单”上。 一条数据记录有多个数据项出现错误时,要对每个数据项进行标识,并在其数据项后 打印“ 为了方便处理步骤2以后的处理,将已检查无误的数据(正确数据),以商品代码”。 处理步骤1的输入/输出数据格式如下所示,输入文件的各记录上写明了每个商店 的商店代码。销售文件的记录 销售文件的记录格式商品代码销售金额销售数量商店代码X(6)9(7)9(6)X(2)输出文件的格式与输入文件的格式相同错误数据清单的输出格式如下所示,每页打印15条记录。错误数据打印格式ERRORCHECKLIST标题AAAAAA3456001234AA空一行明细行AAAAAA000345623456AB错误标识行空一行 商店代码的格式如下,商店代码参数表按升序排列已被存储于磁盘中。商店代码参数表数据格式,AABBCCDDEEFFGGHHIIJJ为键值升序排列。排序处理过程,请使用COBOL的排序语句。e抓住程序处理特征,考虑程序处理效率在处理步骤1的数据检查处理中,当一条记录出现多个数据项错误时,为 了象差错表清单那样,在每个错误数据项下打印*”号,可以进行串行数据检查处理。通 常,如果使用了过多的改变处理流程的开关(流程图上,为检出有错误数据而设置的错误 标志)会导致程序处理流程的复杂化。开关是为了使程序处理清晰化而使用的东西。再有,查错的处理中,需要对表进行检索处理。对表的检索处理有如下两种方式: 一种是在程序中使用下标对表的元素进行控制,另一种则是使用含有索引的SEARCH 语句来检索。索引即不能用于表操作以外,也不能用于所定义的表以外,因此它对表的检 索效率最高,并且不容易引起程序错误。在这个处理中,由于商店代码参数表是按升序排 列,所以使用了检索速度比较快的对分查找方式(SEARCH ALL)。【解答例】根据解说过的流程图,编写处理步骤1的程序(过程部)。程序说明 使用下面已定义好的数据部。 使用SEARCH ALL语句对表进行检索 使用COMPUTE语句进行运算处理 使用=, ,NOT进行数据项间的比较处理数据部定义DATAFILEDIVISION oSECTION oFD IN-FLABEL RECORD STANDARD。01 IN-REC。02 SYOU-CODE PIC X(6)。定义输入文件02 URI-KINPIC 9(7)。*02 URI-SUPIC 9(6)。02 MISE-CODE PIC X(2)。FD ON-FLABEL RECORD STANDARD。01 ON-RECPIC X(21)。SD SORT-F。01 SORT-RECo02 SYOU-CODE PIC X (6)。02 URI-KINPIC 9 (7)o 定义排序用工作文件02 URI-SUPIC 9 (6)o02 MISE-CODE PIC X (2)。WORKING-STORAGESECTION。01 MIDASHI-RECPIC X (132) VALUE“差错清单”01 MEISAI-1。02 FILLERPIC X(2) VALUE SAPCE。02 SYOU-CODEPIC X(6)。02 FILLERPIC X(2) VALUE SAPCE。02 URI-KINPIC X(7)02 FILLERPIC X(2) VALUE SAPCE。02 URI-SUPIC X(6)02 FILLERPIC X(2) VALUE SAPCE。02 MISE-CODEPIC X(2)01 MEISAI-2。02 FILLERPIC X(10) VALUE SAPCE。02 EM-URI-KINPIC X(7)。02 FILLERPIC X(2) VALUE SAPCE。02 EM-URI-SUPIC X(6)。02 FILLERPIC X(2) VALUE SAPCE。02 EM-MISE-CODE PIC X(2)。01 ER-FLGPIC 9。错误标志01 LINE-CNTPIC 99 VALUE 20。行计数器01 MISE-TAB VALUE“AABBCCDDEEFFGGHHIIJJ”。02 MISE-ELTPIC X (2) OCCURS 10定义商店代码INDEXED BYI ASCENDING KEY MISE-ELT。),解说介绍并掌握排序处理的描述形式和检索表的方法 SORT语句和输入输出过程SORT语句中使用SD语句定义排序用工作文件。在排序处理前,为进行必要的处理 而使用INPUT PROCEDURE(输入过程)语句。输出时由于没有特殊的处理,所以直接使用 GIVINIG语句即可。这里可以看出,根据输入/输出过程的缺省,SORT语句的描述形式是 不一样的。SD 排序用工作文件名 01记录定义/PROCEDURE DIVISION。SEIRETU SECTION。 SORT 排序用工作文件名r ASCENDING DESCENDING 排序键 INPUT PROCEDURE输入过程名USING 输入文件1,输入文件2,。 OUTPUT PROCEDURE 输出过程名 GIVING 输出文件名 输入/输出过程名SECTION。/图1描述SORT语句的排序处理用SEARCH语句查表由于使用了 SEARCH ALL语句对表进行搜索,所以查表处理就简单多了。在这里值 得注意是,使用SEARCH语句时,对索引赋初值是必要的。对分查找表的定义顺序查找表的定义表名OCCURS。(ASCENDINGDESCENDING一找键INDEXED BY 索引名/表名 OCCURS。INDEXED BY索引名/SET索引名 TO 初始值。SEARCH表名 VARYING 索引名SEARCH ALL 查找键AT END无条件语句AT END无条件语句WHENsWHEN s图2查表的基本描述【解答例】PROCEDURESORT-ROOTDIVISION。SECTION。PROG-START oSORT SORT-F ON ASCENDING KEY SYOU-CODE OF SORT-REC 卜排序处理INPUT PROCEDURE IN-PGIVING OT-F。-STOP RUN。一IN-PSECTION。输入过程节IN-P-STRAToOPEN INPUT IN-F OUTPUT ER-F。IN-P-1 oREAD IN-F AT END GO TO IN-P-END。MOVE 0 TO ER-FLG。MOVE SPACE TO MEISAI-2。IF URI-KIN OF IN-REC NUMERICNEXT SENTENCEELSE卜检查销售金额是否为数字MOVE 1 TO ER-FLGMOVE “*” TO EM-URI-KIN。IF URI-SU OF IN-REC NUMERICNEXT SENTENCEELSE 检查销售数量是否为数字MOVE 1 TO ER-FLGMOVE “*” TO EM-URI-SU。SEARCH ALL MISE-ELT卜检查商店代码是否存在差错清单输出处理AT END MOVE 1 TO ER-FLGMOVE “(注)程序中所用的MOVE语句中出现了 CORR (corresponding),表示一个集团项间的数 据向另外一个集团中同名的数据基本项(数据项)传递数据。” TO EM-MISC-CODEWHEN MISE-ELT (I) = MISC-CODE OF IN-RECNEXT SENTENCE。IF ER-FLG = 1IF LINE-CNT 15WRITE ER-REC FROM MIDAS-RECAFTER PAGEMOVE 0 TO LINE-CNTENF-IFMOVE CORR IN-REC TO MEISAI-1WRITE ER-REC FROM MEISAI-1 AFTER 2WRITE ER-REC FROM MEISAI-2 AFTER 1COMPUTE LINE-CNT = LINE-CNT + 1ELSE向排序用工作文件传输数据MOVE IN-REC TO SORT-RECRELEASE SORT-RECEND-IFoGO TO IN-P-1 oIN-P-END oCLOSE IN-F ER-Fo阅读如下处理内容,编写处理步骤2的流程图。处理内容处理步骤2是从销售数据中收集销售信息的处理。具体的说,以销售店为单位,按商 品代码汇总各商品销售合计金额并制成报表。再依据各销售店的总合计金额,制成柱状图, 处理的前提条件如下。.输入文件是处理步骤1中输出的文件,它已按商店代码、商品代码这一顺序分别升 序排列。记录格式如下:商品代码销售金额X (6)9 (7)销售数量9 (6)商店代码X (2). 输出的销售信息格式如下1、一页打印20行,换页后要打印标题。但是,遇到以店为单位的合计数时不换 页。2、明细行的打印规定为:一个店的一个商 品打印一行。3、标题和明细行之间, 店合计行与下一个店的明细行之间要空一行。4、在表的最后打印出各店销售柱状图。.所谓柱状图,就是把各店的销售合计金额以10万日元作为1个单位,让它对应出一 个,二的表达图。如遇10万日元以下的金额要做四舍五入处理。解* 控制要素的保存和结束时的处理此问题是按组分类汇总处理的问题。分组的控制键为商店代码和商品代码这两个。做 多个控制键分组判定处理时,一般从较大的控制键(此例题为店代码)开始,一旦较大的 控制键值发生变化,即事先保存在工作区的较大控制键值与新读入记录中的较大控制键值 不相等时,小的控制键也被看作发生变化,这时,也要进行小控制键的处理。当这种控制键变化时,需要输出组合计、做总汇总、设置下一个控制键、将汇总合计 区域清零等。再有,需要考虑何时输出哪些汇总项目,以及何时必须计算这些汇总项目。再一个重要的就是文件处理结束时的处理。为了输出最后一组数据,必须把文件处理 结束处理视同控制键值发生变化来处理。为此,重要的是,必须将汇总合计处理、输出处 理等进行模块化编程处理。掌握分组合计的方法,对今后的编程应用会起到重大作用的。因此,我们一定要掌握它。按照解答范例的流程图,编制处理步骤2的程序(过程部)。程序说明. 使用下面给出的数据部定义。. 运算时使用COMPUTE语句,比较大小时,使用=,NOT。数据部定义DATADIVISION oFILESECTION oFD IN-FLABEL RECORDSTANDARD。01IN-RECo02 SYOU-CODEPIC X (6)o02 URI-KINPIC 9 (7)o定义输入文件的记录02 URI-SUPIC 9 (6)o02 MISE-CODEPIC X (2)oFDOT-RECLABEL RECORDSTANDARDo01OT-RECPIC X (132)oWORKING-STORAGESECTIONo01MIDASI-REC PICX (132) VALUE“销售合计清单”。01MIDASI-1o02 FILLERPIC X (12) VALUE SPACEo 、02 OT-SYOU-CODEPIC X (6)。02 FILLERPIC X (2) VALUE SPACEo02 OT-MISE-CODEPIC X (2)oI02 FILLERPIC X (2) VALUE SPACEo02 OT-URI-KINPIC 9 (7)o02 FILLERPIC X (2) VALUE SPACEo02 OT-URI-SUPIC 9 (6)o01GOKEI-1。02 FILLERPIC X (5) VALUE SPACEo02 GT-MSGPIC X (10)o02 FILLERPIC X (2) VALUE SPACEo02 GT-GOKEI-KINpic z (8) 9or02 FILLERPIC X (2) VALUE SPACEo02 GT-GOKEI-SUPIC Z (7) 9o02 FILLERPIC X (2) VALUE SPACEo/01LINE-CNTPIC 99 VALUE 20 o 行计数器01GOKEI-AREAUSING COMPo02 SYOU-KIN-GOKEIPIC 9 (8)VALUE0o 冏品合计02 MISE-KIN-GOKEIPIC 9 (9)VALUE0o 店合计02 SYOU-SU-GOKEIPIC 9(8)VALUE0o 商品数量合计02 MISE -SU-GOKEIPIC 9(9)VALUE0o 店数量合计01KEY-AREAo02 K-MISE-CODEPIC X (2)oV-店代码保存区域02 K-SYOU-CODEPIC X (6)o商品代码保存区域01KIN-TABLEVALUE ALLZEROor定义保存02 KIN-ELT PIC 9(9) OCCURS10 INDEXED BY I Lo 了 店合计的01NNPIC 9 (3)VALUE0o表01NPIC 9 (3)VALUE0o01AST-GYOo02 FILLERPIC X (5)VALUESPACEo为柱状图打印而02 AST-GOKEI02 FILLERPIC ZZ9oPIC X(5)VALUE准备的区域SPACEo02 AST-ELTPIC XOCCURS100o/解少关注程序构造,编写易读易懂的程序分组合计控制键值变化时的控制点分组合计处理中的控制键值发生变化时,应该注意的地方,在前边已经说过了。在这 里还需要关注的是:最初控制键值保存的时机、换页的时机。除此,为了打印柱状图,需 要把汇总数值保存在内存表中。因此,有必要掌握对该表操作的下标初始值和其变化情况。 新COBOL语法上的关注点1988年新出台的COBOL规则中,允许在含有OCCURS语句的数据项目中(甚至从 属数据项目中)用VALUE语句赋初值。此时所有用OCCURS语句重复的数据项都为同一 值。再有,PERFORM语句也使用了明确范围的(END-PERFORM)标识,这样就限制了 PERFORM语句所处理的范围,使得程序更容易按结构化编程。部分引用的方法程序中为打印柱状图(带“*”的行),需要使用MOVE语句一个“*”号,一个“*, 号地对位(数)传输,而新COBOL中使用字符的部分引用方法,简单地就可以处理了, 以下是部分引用的方法和使用部分引用的程序范例。01ASTPICX ( 100 )VALUEALL “*,01AST-GYO o02 FILLERPICX ( 5)VALUESPACE o02 AST-GOKEIPICZZ9 o02 FILLERPICX ( 5)VALUESPACE o02 AST-EL TPICX ( 100 )oJL-3MOVE SPACETOAST-GYO oCOMPUTE N=KIN-EL T ( L)/100000ROUNDED oMOVE AST (1:N)TO AST-EL T oAST (1:N)MOVE N TOAST-GOKEI oWRITE OT-RECFROM AST-GYO o文字列的长度文字列的起始位置图3 使用部分引用的例子除此之外,有关新COBOL追加、变更的其它内容,最好参照本讲座和相关参考资料 来学习。解答例PROCEDUREDIVISION oL-0.OPEN INPUT IN-FOUTPUT OT-FoSET 1 TO IoREAD IN-F AT END GO TO L-ENDoMOVE MISE-CODE TO K-MISE-CODEo 设置第一条记录的控制键MOVE SYOU-CODE TO K- SYOU -CODEoJL-1.IF MISE-CODE K-MISE-CODEPERFORM SYOU-P1店代码不一致时的处理PERFORM MISE-PELSEIF SYOU-CODE K- SYOU CODE : 商品代码不一致时的处理 PERFORM SYOU-P o.COMPUTE SYOU-KIN-GOKEI = SYOU-KIN-GOKEI + URI-KIN。汇总计算COMPUTE SYOU-SU-GOKEI = SYOU-SU-GOKEI + URI-SUo,READ IN-F AT END GO TO L-2oGO TO L-1oL-2.PERFORM SYOU-P o 文件结PERFORM MISE-PoA 束时的PERFORM L-3 VARYING L FROM 1 BY 1 UNTIL L iJ 处理L-ENDoCLOSE IN-P OT-PoSTOP RUNoMISE-PoMOVE MISE-KIN-GOKEI TO GT- GOKEI-KINo、MOVE MISE-SU-GOKEI TO GT- GOKEI-SUoCOMPUTE LINE-CNT = LINE-CNT + 1。WRITE OT-REC FROM GOKEI-1。MOVE SPACE TO OT-RECo按商店汇总合计处理WRITE OT-REC AFTER 1。MOVE MISE-CODE TO K-MISE-CODEoMOVE MISE-KIN-GOKEI TO KIN-ELT (I)。MOVE 0 TO MISE-KIN-GOKEI MISE-SU-GOKEIo jSET I UP BY 1o按商品种类汇总合计SYOU-PoMOVE SYOU -KIN-GOKEI TO OT- URI-KINoMOVE SYOU -SU-GOKEI TO OT- URI -SUoCOMPUTE MISE-KIN-GOKEI =MISE-KIN-GOKEI + SYOU -KIN-GOKEI。COMPUTE MISE-SU-GOKEI =MISE-SU-GOKEI + SYOU -SU-GOKEI。MOVE K-SYOU-CODE TO OT-SYOU-CODE。MOVE K-MISE-CODE TO OT-MISEU-CODE。IF LINE-CNT 图处理PERFORM VARYING NN FROM 1 BY 1 UNTIL NNMOVE “*” TO AST-ELT (NN)END-PERFORM。MOVE N TO AST-GOKEI。WRITE OT-REC FROM AST-GYO。阅读以下处理内容,编写处理步骤3的流程图处理内容将处理步骤1输出的销售文件作为交易,更新库存主文件的当前库存数。更新时,当 前库存量低于最低库存量时,要打印定货信息清单。再有,可能会出现销售文件内的商品 代码与商品主文件不匹配的现象。为此,需要做一致性检查。当出现不一致的情况时,要 输出错误信息。下面给出处理步骤3的前提条件。销售文件,库存主文件都是顺序文件,它已按商品代码升序排列。.销售文件中会存在多条具有同一商品代码的数据记录。库存主文件的当前库存量不能为负数。.输入/输出文件的记录格式如下: 销售文件的记录格式商品代码X (6)销售金额9 (7)销售数量9 (6)商店代码X (2) 旧库存主文件的记录格式商品代码X (6)当前库存9 (8)最低库存9 (8)供货商代码X (6) 新库存主文件的记录格式与旧库存主文件的记录格式相同 定货信息文件记录格式供货商代码X (6)商品代码X (6)当前库存9 (8)最低库存9 (8)解励 控制键的比较结果和执行处理结果间的关系匹配控制键的比较和处理结果文件的更新处理,是通过主文件与交易文件双方的匹配控制键大小来进行的。由此可 以产生三种不同的处理分支。处理步骤3的匹配控制键是商品代码,它已升序排列完毕。销售文件,旧库存主文件 的匹配控制键分别为T-KEY,M-KEY,解析其处理结果如下: M-KEY = T-KEY使用销售记录的内容更新库存主文件记录。但是,由于相同商品代码的销售记录可能会有多条记录存在,此时还不能直接向新库存主文件输出。 M-KEY T-KEY由于不存在与销售记录内的商品代码相一致的库存主记录,因此要输出“销售记录错” 信息。各项处理结束后,接着要输入后续应该处理的记录,此时。P29文件结束时的处理将所有顺序文件的库存主文件的记录输出到新库存主文件上。再有,销售文件的内容 也必须处理完。因此,处理结束的标志是这两个文件的输入操作都完成。为此,这两个文件中的其中任何一个文件处理结束后,必须等待另一个文件的正确处 理结束。为保障正常的处理,有必要对输入已结束的文件匹配控制键赋予合适的值。通常, 输入文件通过匹配控制键来排序。与此相对应,HIGH-VALUE用于升序,LOW-VALUE用 于降序。向新库存主文件的输出条件是M-KEY T-KEYo此时应该注意的是已经读取了一条 销售文件记录。解答例问#题):2根据解答例的流程图,编制处理步骤3地程序(过程部)程序说明使用下面定义好的数据部。输出的错误信息为:*商品代码不匹配(商品代码)* 运用使用COMPUTE语句,比较使用=,,,NOT定义的数据部DATADIVISION oFILESECTIONoFD URIAGE-FILEBLOCK CONTAINS 3 RECORDSLABEL RECORD STANDARDDATA RECORD URI-RECo01 URI-RECPIC X (21)oFD ZAIKO-MASTERBLOCK CONTAINS 3 RECORDSLABEL RECORD STANDARDDATA RECORD ZAIKO-REC o01 ZAIKO -RECPIC X (28)。FD NEW-ZAIKO-MASTERBLOCK CONTAINS 3 RECORDS定义输入/输出文件LABEL RECORD STANDARDDATA RECORD NEW-ZAIKO -RECo01 NEW-ZAIKO -RECPIC X (28)。FD HACHUU-FILEBLOCK CONTAINS 3 RECORDSLABEL RECORD STANDARDDATA RECORD HACHUU-REC o01HACHUU-RECo02H-SHIIRE-CODEPICX(6)o02H-SYOHIN-CODEPICX(6)o02H-GEN-ZAIKOPICX(8)o02H-SAITEI-CODEPICX(8)oWORKING-STORAGESECTIONo01URIAGE-WORKo02T-SYOHIN-CODEPICX:(6)o02T- URIAGEPIC9(7)o02T-SURYOPIC9(6)o02T-TEN-CODEPICX(2)o01 ZAIKO-WORKo定义交易记录02020202M-SYOHIN-CODEM- ZAIKOM-SAITEI-ZAIKOM-SHIIRE-CODEPICPICPICPICX (6)。9 (8)。9 (8)。X(6)。定义主文件记录解工作单元的使用方法商品代理,定货代码等,这些代码尽管都是由数字所构成,但不用于参加运算处理, 所以使用数字型X来定义。这样做,是为了避免跟数字型9的定义发生冲突。常数 HIGH-VALUE,LOW-VALUE这样的常数都不能使用数字型9。文件输入结束时,最好避免直接对输入域内的匹配控制键赋HIGH-VALUE值,这是 因为每个机器的COBOL编译器要求不同,有些机器不支持这样做的缘故。因此,最好在 输入后传送到工作单元中进行处理为好。这样就还输入区以本来的功能设计面貌了。输入后马上使用READ命令中的INTO子句把数据转移到工作单元中。READ 文件名 INTO工作单元AT END无条件命令再有,也可以使用WRITE命令把工作单元的内容向输出区传送输出。WRITE 记录名 FROM 工作单元解答例PROCEDURE DIVISION。PROGRAM-START。OPEN INPUT URIAGE-FILEZAIKO-MASTEROUTPUT NEW- ZAIKO-MASTERHACHUU-FILE。PERFORM ZAIKO-MASTER-INPUT-SYORI。PERFORM URIAGE-FILE-INPUT-SYORI。PERFORM KOUSIN-LOOPUNTIL T-SYOHIN-CODE = HIGH-VALUE 、AND M-SYOHIN-CODE = HIGH-VALUE :CLOSE URIAGE-FILEZAIKO-MASTERNEW- ZAIKO-MASTER HACHUU-FILE。STOP RUN。KOUSIN-LOOPoIF M-SYOHIN-CODE = T-SYOHIN-CODETHEN COMPUTE M-ZAIKO = M-ZAIKO + T-SURYO PERFORM URIAGE-FILE-INPUT-SYORIELSEIF M-SYOHIN-CODE M-SAITEI-ZAIKOELSETHENMOVEMOVEMOVEMOVEWRITEM-SHIIRE-CODE TO H-SHIIRE-CODEM-SYOHIN-CODE TOM-ZAIKOTOM-SAITEI-ZAIKO TOHACHUU-RECELSEEND-IFPERFORMCONTINUEZAIKO-MASTER-INPUT-SYORIH-SYOHIN -CODE ,H-GEN- ZAIKO H-SAITEI-ZAIKO输 出 定 货 信 息更 新 输 出 处理DISPLAY显示错误信息PEFORMURIAGE-FILE-INPUT-SYORIEND-IFEND-IFoZAIKO-MASTER-INPUT-SYORIoREAD ZAIKO-MASTER INTO ZAIKO-WORKAT END MOVE HIGH-VALUE TO M-SYOHIN-CODEoURIAGE-FILE-INPUT-SYORIoREAD URIAGE-FILE INTO URIAGE -WORKAT END MOVE HIGH-VALUE TO T-SYOHIN-CODEo阅读以下内容,制作处理步骤4的流程图。处理内容根据处理步骤3输出的订货信息文件,按供货商代码产生订货清单。为在订货清单上 打印出供货商的名称,需要使用供货商主文件。供货商主文件是以供货商代码为索引的索 引文件。处理步骤4的前提条件如下: 订货信息文件是按供货商代码升序排列。. 供货商主文件,依据订货信息记录条数而随便读取 一定存在与订货信息记录中的供货商代码相对应的供货商主文件记录。. 订货信息文件以及供货商主文件的记录格式如下所示。定货信息文件的记录格式供货商代码X (6)商品代码X (6)当前库存9 (8)最低库存9 (8)供货商主文件的记录格式*索引文件制作主键:供货商代码幅键:开户银行代码(可重复)供货商代码X (6)开户银行代码X (3)供货商名称X (20)其它X (31). 订货清单的输出格式如下所示。定货清单输出格式定货清单(P。1)供货商名商品当前库存最低库存XXXXXXXXXX1008,000XXXXXX10002,000/定货清单(P。2)供货商名商品当前库存最低库存XXXXXXXXXX1008,000XXXXXX10002,000/ 一页打印20条记录。但,当供货 商名称改变时,就是不满20条记 录时也要换页。 换页的同时,还要打印出标题和 页码,明细记录的第一条要打印 供货商名。索引文件的特征索引文件的处理在这里所使用的供货商主文件是索引文件。索引文件就像百科全书那样,分成索引部 分和数据部分。索引部分有识别记录的控制键,该控制键一定预先定义在记录中的相应位 置中,按键值升序排列。数据部就是记录本身。COBOL可以使用带有多个控制键的索引文件。把多个控制键中唯一能识别各记录的 控制键叫做主键(RECORD KEY),该主键只能有一个。可以使用这个主键,对索引文 件作生成、更新和检索处理。主键以外的键,叫副键(ALTERNATE RECODE KEY), 可以定义多个。副键允许键值重复。因此,只能用于检索处理。索引文件的读写方法,即可以按主键或副键的顺序读出,也可以与主键或副键顺序无 关的随机读出,还可以并用上述两种读出方法,灵动机动地读出。随机读取每次输入订货信息文件,基本上都是以供货商代码作为索引键,读取供货商主文件的。 在处理步骤4中,由于订货信息文件按供货商代码排序过,所以在处理同一供货商的订货 记录中,没必要每次都读取供货商主文件。为此,需要增加判定条件,判定与先前所读取 订货记录中的供货商代码是否一致,如果不一致就需要从供货商主文件中读取新的记录。再有,随机读取处理中,不用考虑文件的结束处理,决定文件结束处理的条件是:订 货信息文件全部输入结束。LINE-COUNT循环打印NAT END输入供货商主文件前一供货商代码:当 前供货商代码循环打印FILE-END = 1换页、打印标题PAGE-COUNT = PAGE-COUNT + 1打开文件赋初值定货信息文件输 入处理打 印尹/输入定货信/ 息文件商品代码当前库存卜编辑最低库存量当前供货商代码 一 前一供货商代码LINE-COUNT = LINE-COUNT + 1定货信息文件输入 处理编辑供货商名清除编辑区域关闭文件0 一 LINE-COUNT21 一 LINE-COUNT开始结束定货清单输出处理出口1 一 FILE-END设置索引键STOP RUN出口定货清单输出处理定货信息文件 输入处理问!:题: 2根据解答例的流程图,编写处理步骤4的程序(过程部)。程序说明. 使用下面给出的环境部和数据部的定义。 运算过程使用COMPUTE语句,比较时使用=,,,NOT环境部以及数据部的定义ENVIRONMENTDIVISION oINPUT-OUTPUTSECTION oFILE-CONTROLoSELECT HACHUU-FILE ASSIGN TO DISCoSELECT SHIIRE-MASTER ASSIGN TO DISCORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORDE KEY SHIIRE-CODE ALLKTERNAME RECORDE KEY IS TORI-GINKOU-CODE WITH DUPLICATESoSELECT HACHUU-LIST ASSIGN TO PRINTERoDATADIVISIONoFILESECTIONoFDHACHUU-FILEBLOCK CONTAINS 3 RECORDSLABEL RECORD STANDARDDATA RECORD HACHUU-REC o01HACHUU-RECo02H-SHIIRE-CODEPICX(6)o02H-SYOHIN-CODEPICX(6)o02H-GEN-ZAIKOPIC9(8)o02 H-SAITEI-ZAIKOPIC 9 (8)oFDSHIIRE-MASTERBLOCK CONTAINS 3 RECORDSLABEL RECORD STANDARDDATA RECORD SHIIRE-RECo01SHIIRE -RECo02SHIIRE-CODEPICX(6)o02TORI-GINKOU-CODEPICX (6)o02SHIIRE-SAKI-MEIPIC9(8)o02H-SAITEI-ZAIKOPIC9(8)oFDHACHUU-LISTLABEL RECORD OMITTEDDATA RECORD LIST-RECo01SHIIRE RECPIC (132)oWORKING-STORAGE01 SAGYOU-AREAo02 FILE-END02 MAE-CODE02 PAGE-COUNT02 LINE-COUNT01 PAGE-MIDASHIo02 FILLERSECTIONoPIC9 (1)oPICX (6)oPIC9 (3)oPIC 9(2)oPICX (20) VALUE SPACEo02 FILLERPIC X (16) VALUE “* 定货清单 *”。02 FILLERPIC X (24) VALUE SPACEo02 FILLERPIC X (03) VALUE (Po”。02 FILLER02 FILLERPIC ZZ9oPIC X (01)VALUE “)”。02 FILLERPIC X (65) VALUE SPACEo01MIDASHIo02 FILLERPIC X (04) VALUE SPACEo02 FILLERPIC X (08) VALUE “供货商名”。02 FILLERPIC X (12) VALUE SPACEo02 FILLERPIC X (05) VALUE “商品”。02 FILLERPIC X (07) VALUE SPACEo02 FILLERPIC X (08) VALUE 当前库存”。02 FILLERPIC X(07) VALUE SPACEo02 FILLERPIC X (08) VALUE 最低库存”。02 FILLERPIC X (73) VALUE SPACEo01HENSYUU-AREAo02 FILLER02 P-SHIIRE-SAKI02 FILLER02 P-SYOHIN-CODE02 FILLER02 P-GEN-ZAIKO02 FILLER02 P-SAITEI-ZAIKO02 FILLERPIC X (02)oPIC X (20)oPIC X (02)oPIC X(06)oPIC X (03)oPIC ZZ, ZZZ, ZZ9oPIC X (05)oPIC ZZ,ZZZ,ZZ9ooPIC X (74) VALUE SPACEo掌握索引文件的处理方法使用索引文件的关键在于主键、副键的定义。主键、副键的定义以及读取方法被描述 在环境部的文件管理节中。供货商主文件定义SELECT SHIIREMASTER ASSIGN TO DISCORGANIZATION IS INDEXED指明索引文件ACCESS MODE IS RANDOM读取方法RECORDE KEY IS SHIIRECODE指定主键ALTERNATE RECORD KEY IS TORIGINKOUCODE指定副键WITH DUPLICATESo指定可重复/FD SHIIREMASTER/01 SHIIRERECo02 SHIIRE-CODEPIC X(6)。02 TORI-GINKOU-CODEPIC X (3)。图5索引文件定义处理步骤4中,即时不使用副键,也必须要符合索引文件生成定义。主键、副键的数 据区域定义在输入区内。输入区内所处的位置必须与索引文件生成时的位置一致。随机读 取索引文件记录时要使用READ命令,此时一定要使用INVALID KEY子句,如要使用 IF语句,那么最好要使用END-READ语句。随机读取供货商主文件时,要在执行READ命令前一定要设定好想输入的供货商代码 的键值。MOVE H-SYOHIN-CODE TO SHIIRE-CODE设定索引键READ SHIIRE-MASTER KEY IS SHIIRE-CODEJ 随机读取的 READ 语句INVALIDKEY KEY STOP RUN一 按索引键读取的记录END-READ找到时的处理图6随机读取的方法. INITIALIZE 语句此命令是对满足所指定的区域内各字段的数字型进行初始化处理,具体使用例如下:INITIALIZE SAGYO-AREA HENSYUU-AREA。/01 SAGYO-AREA o02 FILE-END PIC 9。一 初值为 002 MAE-CODE PIC X (6)。 初值为空格图7 INITIALIZE语句的功能解答例PROCEDUREDIVISION。PROGRAM-STARToOPEN INPUT HACHUU-FILESHIIRE-MASTEROUTPUT HACHUU-LISToINITIALIZE SAGYOU-AREA HENSYUU-AREA。PERFORM HACHUU-FILE-INPUTo赋初值PERFORM UNTILFILE-ENDPERFORMHACHUU-LIST-OUT-SYORI卜循环打印PERFORMHACHUU-FILE-INPUTEND-PERFORMoCLOSE HACHUU-FILESHIIRE-MASTERHACHUU-LISToSTOP RUNoHACHUU-LIST-OUT-SYORIoIF H-SHIIRE-CODENOTMAE-CODETHEN MOVEH-SHIIRE-CODE TO SHIIRE-CODEEND-IFoREADSHIIREMASTER KEY IS SHIIRE-CODEINVALID KEY STOP RUNENDREADMOVE SHIIRE-CODE TO MAE-CODEMOVE 21TO LINE-COUNTIF
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!