cobol的编程实例_第1页
cobol的编程实例_第2页
cobol的编程实例_第3页
cobol的编程实例_第4页
cobol的编程实例_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一个COBOL的编程实例处理概要通常一个程序分为几个处理过程,然后有序地组合起来使用,以实现我们所希望的处理结果。这里,给出一个销售公司对销售数据处理的范例,通过实际的编程,掌握COBOL编程的技巧和步骤。销售数据处理系统简介用户需求(1)某销售公司有若干个销售商店,公司想获得每个商品的销售去向和每个商店的销售额等信息。(2)商品的库存管理在一个固定地方进行管理。经营者为掌握库存销售情况,想及时获得有关定货信息。为满足上述(1)和(2)的需求,首先:需要具体地确定什么样的信息,采用什么样的手段来获取。例如,定货信息包含什么内容、日处理做什么、月处理做什么等。需要搞清为获取中所需信息,什么样的数

2、据适合作为输入数据来使用。决定中数据文件格式,讨论处理顺序,进而决定程序处理所用的文件。(过程设计、文件设计)处理过程中,如果需要进行数据合并、排序的话,必须进行数据代码化处理(代码设计)根据上述思考,决定编程的具体工作。此例题是一个批处理例题。既将每周一次从销售店收集到的销售数据进行汇总合计,作成销售额统计表,然后根据销售额统计表获取库存主文件、供货商主文件信息后打印定货清单。注:此程序的部分编程技巧不是最优,但可以分为如下四个处理步骤来实现。处理步骤1数据合法性检查和排序处理从商店获取的数据可能有非法数据,所以必须进行数据合法性检查。对查出的错误数据,将其打印到“错误数据清单”上并要求修改

3、这些错误数据。对检查无误(正确)的数据,按商品代码进行排序,以便进行后续处理。处理步骤2:统计报表的制作将输入的销售信息作成统计表。统计表上要打印出各商店按商品代码汇总的销售额,并把商店总销售额用”*”表示出来。处理步骤3:更新处理库存主文件把按商品代码排序的销售文件作为交易,更新库存主文件的当前库存量。由处理步骤1于在销售文件中,可能存在同一商品代码的多条数据记录,所以需要做N:1的数据合并处理。处理步骤4:制作定货清单在处理步骤3中,当新库存主文件产生的同时,要将当前库存量与最低库存量进行比较后,将需要定货的商品代码清单打印出来。程序框图销售数据(按商品代码排序)(按商品代码排序)处理步骤

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)供货商主文件记录格式阅读如下处理

5、内容,编制处理步骤1的流程图。处理内容处理步骤1就是先前所述的一系列处理程序的入口,它为后续处理提供必要的数据。具体说来,就是对输入文件的数据进行合法性检查和排序处理。数据检查项有如下3种:销售金额的数据合法性检查销售数量的数据合法性检查商店代码存在与否的检查对第项加以说明,如果在商店代码参数表中无法查到所读入的商店代码,则认为所读入的商店代码无效。检查出的所有错误数据都要输出到“错误数据清单”上。一条数据记录有多个数据项出现错误时,要对每个数据项进行标识,并在其数据项后打印“为了方便处理步骤2以后的处理,将已检查无误的数据(正确数据),以商品代码”。处理步骤1的输入/输出数据格式如下所示,输

6、入文件的各记录上写明了每个商店的商店代码。销售文件的记录商品代码销售金额销售数量商店代码X(6)9(7)9(6)X(2)输出文件的格式与输入文件的格式相同错误数据清单的输出格式如下所示,每页打印15条记录。标题空一行明细行错误标识行空一行错误数据打印格式ERRORCHECKLISTAAAAAA3456001234AAAAAAAA000345623456ABf商店代码的格式如下,商店代码参数表按升序排列已被存储于磁盘中。商店代码参数表数据格式AABBCCDDEEFFGGHHIIJJ为键值升序排列。排序处理过程,请使用COBOL的排序语句。抓住程序处理特征,考虑程序处理效率在处理步骤1的数据检查处

7、理中,当一条记录出现多个数据项错误时,为了象差错表清单那样,在每个错误数据项下打印“*”号,可以进行串行数据检查处理。通常,如果使用了过多的改变处理流程的开关(流程图上,为检出有错误数据而设置的错误标志)会导致程序处理流程的复杂化。开关是为了使程序处理清晰化而使用的东西。再有,查错的处理中,需要对表进行检索处理。对表的检索处理有如下两种方式:一种是在程序中使用下标对表的元素进行控制,另一种则是使用含有索引的SEARCH语句来检索。索引即不能用于表操作以外,也不能用于所定义的表以外,因此它对表的检索效率最高,并且不容易引起程序错误。在这个处理中,由于商店代码参数表是按升序排列,所以使用了检索速度

8、比较快的对分查找方式(SEARCHALL)。解答例】根据解说过的流程图,编写处理步骤1的程序(过程部)。程序说明使用下面已定义好的数据部。使用SEARCHALL语句对表进行检索使用COMPUTE语句进行运算处理使用=,NOT进行数据项间的比较处理数据部定义DATAFILEDIVISION。SECTION。LABELRECORDSTANDARD。01IN-REC。02SYOU-CODEPICX(6)。02URI-KINPIC97)。02URI-SUPIC96)。02MISE-CODEPICX(2)FDON-FFDIN-FLABELRECORDSTANDARD。定义输入文件01ON-RECPICX

9、(21)。01SORT-REC。02SYOU-CODEPICX(6)。02URI-KINPIC9(7)。定义排序用工作文件02URI-SUPIC9(6)。02MISE-CODEPICX(2)。WORKING-STORAGESECTION。01MIDASHI-RECPICX(132)VALUE差错清单01MEISAI-1。02FILLERPICX(2)VALUESAPCE。02SYOU-CODEPICX6)02FILLERPICX(2)VALUESAPCE。02URI-KINPICX(7)02FILLERPICX(2)VALUESAPCE。02URI-SUPICX(6)02FILLERPICX(

10、2)VALUESAPCE。02MISE-CODEPICX(2)01MEISAI-2。02FILLERPICX(10)VALUESAPCE。02EM-URI-KINPICX(7)。02FILLERPICX(2)VALUESAPCE。02EM-URI-SUPICX(6)。02FILLERPICX(2)VALUESAPCE。02EM-MISE-CODEPICX2)。01ER-FLGPIC9。错误标志01LINE-CNTPIC99VALUE20。行计数器01MISE-TABVALUE“AABBCCDDEEFFGGHHIIJJ”。02MISE-ELTPICX(2)OCCURS10INDEXEDBYIAS

11、CENDINGKEYMISE-ELT。SDSORT-F。定义商店代码介绍并掌握排序处理的描述形式和检索表的方法SORT语句和输入输出过程SORT语句中使用SD语句定义排序用工作文件。在排序处理前,为进行必要的处理而使用INPUTPROCEDURE(输入过程)语句。输出时由于没有特殊的处理,所以直接使用GIVINIG语句即可。这里可以看出,根据输入/输出过程的缺省,SORT语句的描述形式是不一样的。SD01排序用工作文件名记录定义PROCEDUREDIVISION。SEIRETUSECTION。排序用工作文件名SORTASCENDINGDESCENDING排序键输入过程名输入文件2,。PROCE

12、DURE输出过程名输出文件名INPUTPROCEDURE输入文件1,USINGOUTPUTGIVING输入/输出过程名/图1描述SORTSECTION。语句的排序处理用SEARCH语句查表由于使用了SEARCHALL语句对表进行搜索,所以查表处理就简单多了。在这里值得注意是,使用SEARCH语句时,对索引赋初值是必要的。对分查找表的定义顺序查找表的定义表名OCCURS。表名OCCURS。ASCENDING查找键INDEXEDBY索引名DESCENDING/INDEXEDBY索引名SET索引名TO初始值。/SEARCH表名VARYING索引名SEARCHALL查找键ATEND无条件语句ATEND

13、无条件语句WHENsWHENs图2查表的基本描述解答例】PROCEDURESORT-ROOTPROG-START。DIVISION。SECTION。SORTSORT-FONASCENDINGKEYSYOU-CODEOFSORT-RECINPUTPROCEDUREIN-PGIVINGOT-F。STOPRUN。IN-PSECTION。输入过程节IN-P-STRAT。OPENINPUTIN-FOUTPUTER-F。IN-P-1。READIN-FATENDGOTOIN-P-END。MOVE0TOER-FLG。MOVESPACETOMEISAI-2。IFURI-KINOFIN-RECNUMERICNEX

14、TSENTENCEELSEr检查销售金额是否为数字MOVE1TOER-FLGMOVE*”TOEM-URI-KIN。IFURI-SUOFIN-RECNUMERICNEXTSENTENCEELSE检查销售数量是否为数字MOVE1TOER-FLGMOVE*”TOEM-URI-SU。SEARCHALLMISE-ELTATENDMOVE1TOER-FLGMOVE*”TOEM-MISC-CODEWHENMISE-ELT(I)=MISC-CODEOFIN-RECNEXTSENTENCE。IFER-FLGIFLINE-CNT15WRITEER-RECFROMMIDAS-RECAFTERPAGEMOVE0TOL

15、INE-CNTENF-IF检查商店代码是否存在差错清单输出处理MOVECORRIN-RECTOMEISAI-1WRITEER-RECFROMMEISAI-1AFTERWRITEER-RECFROMMEISAI-2AFTERCOMPUTELINE-CNTLINE-CNT+1ELSEMOVEIN-RECTOSORT-REC向排序用工作文件传输数据RELEASESORT-RECEND-IF。GOTOIN-P-1。IN-P-END。CLOSEIN-FER-F。(注)程序中所用的MOVE语句中出现了CORR(corresponding),表示一个集团项间的数据向另外一个集团中同名的数据基本项(数据项)传

16、递数据。阅读如下处理内容,编写处理步骤2的流程图。处理内容处理步骤2是从销售数据中收集销售信息的处理。具体的说,以销售店为单位,按商品代码汇总各商品销售合计金额并制成报表。再依据各销售店的总合计金额,制成柱状图,处理的前提条件如下。输入文件是处理步骤1中输出的文件,它已按商店代码、商品代码这一顺序分别升序排列。记录格式如下:销商品代码X(6)销售金额9(7)销售数量9(6)商店代码X(2)输出的销售信息格式如下1、一页打印20行,换页后要打印标题。但是,遇到以店为单位的合计数时不换页。2、明细行的打印规定为:一个店的一个商品打印一行。3、标题和明细行之间,店合计行与下一个店的明细行之间要空一行

17、。4、在表的最后打印出各店销售柱状图。此问题是按组分类汇总处理的问题。分组的控制键为商店代码和商品代码这两个。做多个控制键分组判定处理时,一般从较大的控制键(此例题为店代码)开始,一旦较大的控制键值发生变化,即事先保存在工作区的较大控制键值与新读入记录中的较大控制键值不相等时,小的控制键也被看作发生变化,这时,也要进行小控制键的处理。当这种控制键变化时,需要输出组合计、做总汇总、设置下一个控制键、将汇总合计区域清零等。再有,需要考虑何时输出哪些汇总项目,以及何时必须计算这些汇总项目。再一个重要的就是文件处理结束时的处理。为了输出最后一组数据,必须把文件处理结束处理视同控制键值发生变化来处理。为

18、此,重要的是,必须将汇总合计处理、输出处理等进行模块化编程处理。掌握分组合计的方法,对今后的编程应用会起到重大作用的。因此,我们一定要掌握它。按照解答范例的流程图,编制处理步骤2的程序(过程部)。程序说明使用下面给出的数据部定义。运算时使用COMPUTE语句,比较大小时,使用=,NOT。数据部定义DATAFILEDIVISION。SECTION。FDIN-F01IN-REC。02SYOU-CODEPICX(6)。02URI-KINPIC97)。02URI-SUPIC96)。02MISE-CODEPICX(2)。FDOT-RECLABELRECORDSTANDARD。01OT-RECPICX(1

19、32)。LABELRECORDSTANDARD。WORKING-STORAGESECTION。定义输入文件的记录aMI销售合计清单”。ASI-1。02FILLERPICX(12)VALUESPACE02OT-SYOU-CODEPICX(6)。02FILLERPICX(2)VALUESPACE。02OT-MISE-CODEPICX(2)。02FILLERPICX(2)VALUESPACE。02OT-URI-KINPIC97)。02FILLERPICX(2)VALUESPACE。02OT-URI-SUPIC9(6)。01MIDASI-RECPICX(132)VALUE010102FILLERPIC

20、X(5)VALUESPACE。02GT-MSGPICX(10)。02FILLERPICX(2)VALUESPACE02GT-GOKEI-KINPICZ(8)9。02FILLERPICX(2)VALUESPACE02GT-GOKEI-SUPICZ(7)9。02FILLERPICX(2)VALUESPACELINE-CNTPIC99VALUE20。GOKEI-AREAUSINGCOMP。0101GOKEI-1。行计数器关注程序构造,编写易读易懂的程序02SYOU-KIN-GOKEIPIC9(8)VALUE0。商品合计02MISE-KIN-GOKEIPIC9(9)VALUE0。店合计02SYOU-S

21、U-GOKEIPIC9(8)VALUE0。商品数量合计02MISE-SU-GOKEIPIC9(9)VALUE0。店数量合计01KEY-AREA。02K-MISE-CODEPICX(2)。店代码保存区域02K-SYOU-CODEPICX(6)。商品代码保存区域01KIN-TABLEVALUEALLZERO。定义保存02KIN-ELTPIC9(9)OCCURS10INDEXEDBYIL。店合计的01NNPIC9(3)VALUE0。表01NPIC9(3)VALUE0。01AST-GYO。02FILLERPICX(5)VALUESPACE。为柱状图打印而02AST-GOKEIPICZZ9。准备的区域0

22、2FILLERPICX(5)VALUESPACE。02AST-ELTPICXOCCURS100。分组合计控制键值变化时的控制点分组合计处理中的控制键值发生变化时,应该注意的地方,在前边已经说过了。在这里还需要关注的是:最初控制键值保存的时机、换页的时机。除此,为了打印柱状图,需要把汇总数值保存在内存表中。因此,有必要掌握对该表操作的下标初始值和其变化情况。新COBOL语法上的关注点1988年新出台的COBOL规则中,允许在含有OCCURS语句的数据项目中(甚至从属数据项目中)用VALUE语句赋初值。此时所有用OCCURS语句重复的数据项都为同一值。再有,PERFORM语句也使用了明确范围的(E

23、ND-PERFORM)标识,这样就限制了PERFORM语句所处理的范围,使得程序更容易按结构化编程。部分引用的方法AST(1:N)文字列的长度文字列的起始位置程序中为打印柱状图(带“*”的行),需要使用MOVE语句一个“*”号,一个“*”号地对位(数)传输,而新COBOL中使用字符的部分引用方法,简单地就可以处理了,以下是部分引用的方法和使用部分引用的程序范例。01ASTPICX(100)VALUEALL“*”。01AST-GYO。02FILLERPICX(5)VALUESPACE。02AST-GOKEIPICZZ9。02FILLERPICX(5)VALUESPACE。02AST-ELTPIC

24、X(100)。L-3JMOVESPACETOAST-GYO。COMPUTEN=KIN-ELT(L)/100000ROUNDEDMOVEAST(1:N)TOAST-ELT。MOVENTOAST-GOKEI。WRITEOT-RECFROMAST-GYO。图3使用部分引用的例子除此之外,有关新COBOL追加、变更的其它内容,最好参照本讲座和相关参考资料来学习。解答例PROCEDUREDIVISION。L-0OPENINPUTIN-FOUTPUTOT-F。SET1TOI。READIN-FATENDGOTOL-END。MOVEMISE-CODETOK-MISE-CODE。设置第一条记录的控制键MOVES

25、YOU-CODETOK-SYOU-CODE。L-1IFMISE-CODEK-MISE-CODEPERFORMSYOU-P店代码不一致时的处理PERFORMMISE-PELSEIFSYOU-CODEK-SYOU-CODE商品代码不一致时的处理PERFORMSYOU-P。COMPUTESYOU-KIN-GOKEI=SYOU-KIN-GOKEI+URI-KIN。汇总计算COMPUTESYOU-SU-GOKEI=SYOU-SU-GOKEI+URI-SU。READIN-FATENDGOTOL-2。GOTOL-1。L-2PERFORMSYOU-P。文件结PERFORMMISE-P。束时的PERFORML-

26、3VARYINGLFROM1BY1UNTILLI。处理L-END。CLOSEIN-POT-P。STOPRUN。MISE-P。MOVEMISE-KIN-GOKEITOGT-GOKEI-KIN。MOVEMISE-SU-GOKEITOGT-GOKEI-SU。COMPUTELINE-CNT=LINE-CNT+1。按商店汇总合计处理按商品种类汇总合计WRITEOT-RECFROMGOKEI-1。MOVESPACETOOT-REC。WRITEOT-RECAFTER1。MOVEMISE-CODETOK-MISE-CODE。MOVEMISE-KIN-GOKEITOKIN-ELT(I)。MOVE0TOMISE-

27、KIN-GOKEIMISE-SU-GOKEISETIUPBY1。SYOU-P。MOVESYOU-KIN-GOKEITOOT-URI-KINMOVESYOU-SU-GOKEITOOT-URI-SU。COMPUTEMISE-KIN-GOKEI=、MISE-KIN-GOKEI+SYOU-KIN-GOKEI。COMPUTEMISE-SU-GOKEI=MISE-SU-GOKEI+SYOU-SU-GOKEI。MOVEK-SYOU-CODETOOT-SYOU-CODE。MOVEK-MISE-CODETOOT-MISEU-CODE。IFLINE-CNTNMOVE“*”TOAST-ELT(NN)END-PERF

28、ORM。MOVENTOAST-GOKEI。WRITEOT-RECFROMAST-GYO。阅读以下处理内容,编写处理步骤3的流程图处理内容将处理步骤1输出的销售文件作为交易,更新库存主文件的当前库存数。更新时,当前库存量低于最低库存量时,要打印定货信息清单。再有,可能会出现销售文件内的商品代码与商品主文件不匹配的现象。为此,需要做一致性检查。当出现不一致的情况时,要输出错误信息。下面给出处理步骤3的前提条件。销售文件,库存主文件都是顺序文件,它已按商品代码升序排列。销售文件中会存在多条具有同一商品代码的数据记录。库存主文件的当前库存量不能为负数。输入/输出文件的记录格式如下:销售文件的记录格式商

29、品代码销售金额销售数量商店代码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使用销售记录的内容更新库存主文

30、件记录。但是,由于相同商品代码的销售记录可能会有多条记录存在,此时还不能直接向新库存主文件输出。M-KEYT-KEY由于不存在与销售记录内的商品代码相一致的库存主记录,因此要输出“销售记录错”信息。各项处理结束后,接着要输入后续应该处理的记录,此时oooooooooooooP29文件结束时的处理将所有顺序文件的库存主文件的记录输出到新库存主文件上。再有,销售文件的内容也必须处理完。因此,处理结束的标志是这两个文件的输入操作都完成。为此,这两个文件中的其中任何一个文件处理结束后,必须等待另一个文件的正确处理结束。为保障正常的处理,有必要对输入已结束的文件匹配控制键赋予合适的值。通常,输入文件通过

31、匹配控制键来排序。与此相对应,HIGH-VALUE用于升序,LOW-VALUE用于降序。向新库存主文件的输出条件是M-KEYT-KEYo此时应该注意的是已经读取了一条销售文件记录。解答例根据解答例的流程图,编制处理步骤3地程序(过程部)程序说明使用下面定义好的数据部。输出的错误信息为:*商品代码不匹配(商品代码)*运用使用COMPUTE语句,比较使用=,NOT定义的数据部DATADIVISION。FILESECTION。FDURIAGE-FILEBLOCKCONTAINS3RECORDS01FDLABELRECORDDATARECORDURI-RECZAIKO-MASTERSTANDARDUR

32、I-REC。PICX(21)。BLOCKCONTAINS3RECORDSLABELRECORDSTANDARDDATARECORDZAIKO-REC。01ZAIKO-RECPICX(28)。FDNEW-ZAIKO-MASTERBLOCKCONTAINS3RECORDSLABELRECORDSTANDARD定义输入/输出文件DATARECORDNEW-ZAIKO-REC。01NEW-ZAIKO-RECPICX(28)。FDHACHUU-FILEBLOCKCONTAINS3RECORDSLABELRECORDSTANDARD01HACHUU-REC。02H-SHIIRE-CODEPICX(6)。0

33、2H-SYOHIN-CODEPICX(6)。02H-GEN-ZAIKOPICX8)。02H-SAITEI-CODEPICX(8)。WORKING-STORAGESECTION。01URIAGE-WORK。02T-SYOHIN-CODEPICX(6)02T-URIAGEPIC9(7)。02T-SURYOPIC9(6)。02T-TEN-CODEPICX(2)。DATARECORDHACHUU-REC。01ZAIKO-WORK。定义交易记录02M-SYOHIN-CODEPICX(6)。02M-ZAIKOPIC9(8)。定义主文件记录02M-SAITEI-ZAIKOPIC9(8)。02M-SHIIRE

34、-CODEPICX(6)。商品代理,定货代码等,这些代码尽管都是由数字所构成,但不用于参加运算处理,所以使用数字型X来定义。这样做,是为了避免跟数字型9的定义发生冲突。常数HIGH-VALUE,LOW-VALUE这样的常数都不能使用数字型9。文件输入结束时,最好避免直接对输入域内的匹配控制键赋HIGH-VALUE值,这是因为每个机器的COBOL编译器要求不同,有些机器不支持这样做的缘故。因此,最好在输入后传送到工作单元中进行处理为好。这样就还输入区以本来的功能设计面貌了。输入后马上使用READ命令中的INTO子句把数据转移到工作单元中。READ文件名INTO工作单元ATEND无条件命令再有,也

35、可以使用WRITE命令把工作单元的内容向输出区传送输出。WRITE记录名FROM工作单元解答例PROCEDUREDIVISION。PROGRAM-START。OPENINPUTURIAGE-FILEZAIKO-MASTEROUTPUTNEW-ZAIKO-MASTERHACHUU-FILE。PERFORMZAIKO-MASTER-INPUT-SYORI。PERFORMURIAGE-FILE-INPUT-SYORI。*PERFORMKOUSIN-LOOPUNTILT-SYOHIN-CODE=HIGH-VALUE、ANDM-SYOHIN-CODE=HIGH-VALUE/*CLOSEURIAGE-FI

36、LEZAIKO-MASTERNEW-ZAIKO-MASTERHACHUU-FILE。STOPRUN。KOUSIN-LOOP。IFM-SYOHIN-CODE=T-SYOHIN-CODETHENCOMPUTEM-ZAIKO=M-ZAIKO+T-SURYOPERFORMURIAGE-FILE-INPUT-SYORIELSEIFM-SYOHIN-CODEM-SAITEI-ZAIKOTHENMOVEM-SHIIRE-CODETOH-SHIIRE-CODEMOVEM-SYOHIN-CODETOH-SYOHIN-CODEMOVEM-ZAIKOTOH-GEN-ZAIKOMOVEM-SAITEI-ZAIKOTO

37、H-SAITEI-ZAIKOWRITEHACHUU-RECELSECONTINUEEND-IFPERFORMZAIKO-MASTER-INPUT-SYORI输出定更新输出处理END-IFEND-IF。ZAIKO-MASTER-INPUT-SYORI。READZAIKO-MASTERINTOZAIKO-WORKATENDMOVEHIGH-VALUETOM-SYOHIN-CODE。URIAGE-FILE-INPUT-SYORI。READURIAGE-FILEINTOURIAGE-WORKATENDMOVEHIGH-VALUETOT-SYOHIN-CODE。阅读以下内容,制作处理步骤4的流程图。处理

38、内容根据处理步骤3输出的订货信息文件,按供货商代码产生订货清单。为在订货清单上打印出供货商的名称,需要使用供货商主文件。供货商主文件是以供货商代码为索引的索引文件。处理步骤4的前提条件如下:订货信息文件是按供货商代码升序排列。供货商主文件,依据订货信息记录条数而随便读取一定存在与订货信息记录中的供货商代码相对应的供货商主文件记录订货信息文件以及供货商主文件的记录格式如下所示。定货信息文件的记录格式供货商代码X(6)商品代码X(6)当前库存9(8)最低库存9(8)供货商代码开户银行代码供货商名称其它X(6)X(3)X(20)X(31)供货商主文件的记录格式*索引文件制作主键:供货商代码幅键:开户

39、银行代码(可重复)订货清单的输出格式如下所示。定货清单输出格式定货清单(P。1)供货商名商品当前库存最低库存XXXXXXXXXX100&000XXXXXX10002,000/定货清单(P。2)供货商名商品当前库存最低库存XXXXXXXXXX100&000XXXXXX10002,000/一页打印20条记录。但,当供货商名称改变时,就是不满20条记录时也要换页。换页的同时,还要打印出标题和页码,明细记录的第一条要打印供货商名。索引文件的特征索引文件的处理在这里所使用的供货商主文件是索引文件。索引文件就像百科全书那样,分成索引部分和数据部分。索引部分有识别记录的控制键,该控制键一定预先定义在记录中的

40、相应位置中,按键值升序排列。数据部就是记录本身。COBOL可以使用带有多个控制键的索引文件。把多个控制键中唯一能识别各记录的控制键叫做主键(RECORDKEY),该主键只能有一个。可以使用这个主键,对索引文件作生成、更新和检索处理。主键以外的键,叫副键(ALTERNATERECODEKEY),可以定义多个。副键允许键值重复。因此,只能用于检索处理。索引文件的读写方法,即可以按主键或副键的顺序读出,也可以与主键或副键顺序无关的随机读出,还可以并用上述两种读出方法,灵动机动地读出。随机读取每次输入订货信息文件,基本上都是以供货商代码作为索引键,读取供货商主文件的。在处理步骤4中,由于订货信息文件按

41、供货商代码排序过,所以在处理同一供货商的订货记录中,没必要每次都读取供货商主文件。为此,需要增加判定条件,判定与先前所读取订货记录中的供货商代码是否一致,如果不一致就需要从供货商主文件中读取新的记录。再有,随机读取处理中,不用考虑文件的结束处理,决定文件结束处理的条件是:订货信息文件全部输入结束。01020304索引文件数引部A/02Aoooooooooooo01Aoooooooooooo04Boooooooooooo03Coooooooooooo/工LINE-COUNT循环打印ATEND出口出口输入供货商主文件打印循环打印FILE-END=1前一供货商代码:当前供货商代码打开文件赋初值定货信

42、息文件输入处理换页、打印标题COUNT=COUNT+1:输入定货信/息文件商品代码当前库存卜编辑最低库存量当前供货商代码一前一供货商代码LINE-COUNT=LINE-COUNT+1Z定货信息文件输入处理编辑供货商名0LINE-COUNT关闭文件清除编辑区域21LINE-COUNT开始定货清单输出处理V.结束设置索引键1FILE-ENDSTOPRUN定货清单输出处理定货信息文件输入处理根据解答例的流程图,编写处理步骤4的程序(过程部)。程序说明使用下面给出的环境部和数据部的定义。运算过程使用COMPUTE语句,比较时使用=,,,NOT环境部以及数据部的定义ENVIRONMENTDIVISION

43、。INPUT-OUTPUTSECTION。FILE-CONTROL。SELECTHACHUU-FILEASSIGNTODISC。SELECTSHIIRE-MASTERASSIGNTODISCORGANIZATIONISINDEXEDACCESSMODEISRANDOMRECORDEKEYSHIIRE-CODEALLKTERNAMERECORDEKEYISTORI-GINKOU-CODEWITHDUPLICATES。SELECTHACHUU-LISTASSIGNTOPRINTER。DATADIVISION。FILESECTION。FDHACHUU-FILEBLOCKCONTAINS3RECORD

44、SLABELRECORDSTANDARDDATARECORDHACHUU-REC。01HACHUU-REC。02H-SHIIRE-CODEPICX(6)。02H-SYOHIN-CODEPICX(6)02H-GEN-ZAIKOPIC9(8)。02H-SAITEI-ZAIKOPIC9(8)。FDSHIIRE-MASTERBLOCKCONTAINS3RECORDSLABELRECORDSTANDARDDATARECORDSHIIRE-REC。01SHIIRE-REC。02SHIIRE-CODEPICX(6)。02TORI-GINKOU-CODEPICX(6)。02SHIIRE-SAKI-MEIPIC

45、9(8)。02H-SAITEI-ZAIKOPIC9(8)FDHACHUU-LISTLABELRECORDOMITTEDDATARECORDLIST-REC。01SHIIRE-RECWORKING-STORAGEPIC(132)。SECTION。01SAGYOU-AREA。02FILE-ENDPIC02MAE-CODEPIC02COUNTPIC02LINE-COUNTPIC01MIDASHI。02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC01MIDASHI。02FILLERPIC02FIL

46、LERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC02FILLERPIC01HENSYUU-AREA。02FILLERPIC02P-SHIIRE-SAKIPIC02FILLERPIC02P-SYOHIN-CODEPIC02FILLERPIC02P-GEN-ZAIKOPIC02FILLERPIC02P-SAITEI-ZAIKOPIC02FILLERPIC9(1)。X(6)。9(3)。9(2)。X(20)VALUESPACE。X(16)VALUE“*定货清单*”X(24)VALUESPACE。X(03)V

47、ALUE“(P。”。ZZ9。X(01)VALUE“)”。X(65)VALUESPACE。X(04)VALUESPACE。X(08)VALUE“供货商名”。X(12)VALUESPACE。X(05)VALUE“商品”。X(07)VALUESPACE。X(08)VALUE“当前库存”。X(07)VALUESPACE。X(08)VALUE“最低库存”。X(73)VALUESPACE。X(02)。X(20)。X(02)。X(06)。X(03)。ZZ,ZZZ,ZZ9。X(05)。ZZ,ZZZ,ZZ9。X(74)VALUESPACE。使用索引文件的关键在于主键、副键的定义。主键、副键的定义以及读取方法被描述在环境部的文件管理节中。供货商主文件定义SELECTSHIIREMASTERASSIGNTODISCORGANIZATIONISINDEXED十指明索引文件ACCESSMODEISRANDOM读取方法RECORDEKEYISSHIIRECODE指定主键ALTERNATERE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论