??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲最大在线观看,国产精品亚洲一区二区三区在线观看,亚洲熟女乱色一区二区三区http://www.tkk7.com/yeafee/category/47700.html it's usually better to solve problems with simplicity and finesse rather than muscle.zh-cnFri, 28 Jan 2011 17:09:44 GMTFri, 28 Jan 2011 17:09:44 GMT60COBOL 教程http://www.tkk7.com/yeafee/articles/129558.html@yeafee@yeafeeWed, 11 Jul 2007 03:25:00 GMThttp://www.tkk7.com/yeafee/articles/129558.htmlhttp://www.tkk7.com/yeafee/comments/129558.htmlhttp://www.tkk7.com/yeafee/articles/129558.html#Feedback0http://www.tkk7.com/yeafee/comments/commentRss/129558.htmlhttp://www.tkk7.com/yeafee/services/trackbacks/129558.html目录

CHAPTER   1 COBOL 概述
CHAPTER   2 q程部初?
CHAPTER   3 标识部和环境?
CHAPTER   4 数据部之一
CHAPTER   5 q程部之?
CHAPTER   6 q程部之?
CHAPTER   7 各部之间的关pdE序举例
CHAPTER   8 联机及批量程序的一些差?
CHAPTER   9 COBOL ~程规范

CHAPTER 1 COBOL 概述

COBOL 是Common Business Oriented Language 的羃写。它不仅是商业数据处理的理想语言Q?
而且q泛用于数据理领域Q因此COBOL 语言也被UCؓ“用于管理的语言”?

一。COBOL 语言的特?
        最适于数据处理领域Q算数计量而逻辑处理量多Q输入输出量大,数据间存在着一定的逻辑  关系Q大量的分类排序QCOBOL比较接近pQ容易懂Q通用性强Q易UL,COBOLl构严}Q层ơ分明?
 
二。COBOL的组成部分:
1。标识部QIDENTIFICATION DIVISIONQ:用于标识E序名?
2。环境部QENVIRONMENT DIVISIONQ:用于说明E序q行的环境?
3。数据部QDATA  DIVISIONQ:用于说明E序中涉及的所有数据?
4。过E部QPROCEDURE DIVISIONQ:是程序的核心部分Q它军_计算机应q行什么操作?
 
三。最单的COBOL E序举例Q?
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 源程序的书写格式Q?
       W? ?6 列ؓ “标号区”。      ?W?列ؓ“箋行标志区?
       W?x11列,UCؓ“A区”。程序中有些内容如部_节头Q段_层号 01Q层?77 及文?
描述WFD{应从A区开始写?
       W?2x72列,UCؓ“B区”。写E序中的正文部分。如q程部中的句子只能从B区开始写?
       W?3?0列,UCؓ“注释区”?
 
五。COBOL字符集包括:
 
       数字0 --- 9 Q字?A--- Z Qa --- z , 专用字符Q?  -  * / = , . ; ?( ) < > $ 及空根{属于系l字W集而不属于COBOL字符集的字符只能出现    在COBOL E序中的字符串里?
 
六。常量:
 
        COBOL 帔R分ؓ数值常量(?100Q?29Q,非数值常量(?‘ABC?Q和表意帔RQ如 ZEROQSPACEQHIGH-VALUEQLOW-VALUE QQUOTE QALL 帔RQ?
 
七。COBOL 所处理的数据的特点
       层次的概念:数据间存在的从属关系?
       文g的概念:多个记录可以l成一个文件?
 
       记录的概念:h一定层ơ关pȝ一l数据项的最大集合,它是内存中具有独立逻辑含义的最大存取项Q具有最高层ơ?

CHAPTER 2 q程部初?----最基本的过E部语句

一。输入输句?
1。ACCEPT语句Q直接从l端键盘或系l指定的输入讑֤上输入数据?
     ACCEPT   标识W?[FROM 助忆名]
注:A。标识符(identifier)指的是能唯一地标识一个数据项的数据名Q不能唯一地标识一?
              数据的数据名不是标识符。标识符可以是组合项?
        B。在ACCEPT语句中如不写FROM部分Q如ACCEPT   A  Q则表示从系l隐含指定的
               讑֤上读入一个数据给A?如果不想从指定的?备上输入Q则要用FROM 选项,
               q时“助忆名”需要在环境部中事先说明和那U外部设备相联系。如Q?
ENVIRONMENT    DIVISION。(环境部)
CONFIGRATION  SECTION。(配置节)
SPECIAL-NAMES。(专用名段Q?
CONSOLE   IS  ABC
如在q程部中?ACCEPT  T  FROM ABC?则表C从控制台接收数据
2。DISPLAY语句Q从计算机内存中输出到某一指定的输备上?
     DISPLAY  { 标识W?Q常?}[标识W?Q常?]。。。[UPON 助忆名]
                       Q?标识W和助忆名的说明同上Q?
     ACCEPT语句和DISPLAY语句不必定义文g适用于少量的数据输入输出?
3?READ语句QCOBOL语言中数据的输入输出主要是通过对外部文件的dq行的。READ 语句是从外部文件上d数据输出到程序中的数据项中。在E序中用到的所有文仉需要在环境部中指定E序中用到的文g名与实际外部文g的联pR数据部也要Ҏ件加以描q。指定数据结构各数据Ҏ占的内存单元长度以及数据形式?
     COBOL 的存取是以文件ؓ对象以记录ؓ单位的?
READ语句的最单的格式为: READ 文g名?

  ENVIRONMENT DIVISION?
  INPUT-OUTPUT SECTION?
  FILE-CONTROL?
          SELECT      IN-FILLE    ASSIGN  TO      外部文g名?
Z存储d的记录,必须在内存开辟一个与文g记录长度相等的存储区Q即‘输入文件纪录区’。每一个输入文仉有相应的‘输入文件纪录区’,与之一一对应。亦卛_数据部中描述文g的数据结构?
3。READ语句Q?

     假设   IN-FILE  文g每一记录中包含的内容为:产品代码Q品数量,产品单hQ生产日期。设某一记录的具体数?
     如下Q?  0  1  0  0  1  0  0  0  0  0  1  0  0  0  1  9  9  9  0  3  2  2
                 prodcode    quantity        price               year      mon  day
     如果我们希望d该记录ƈ对各数据进行处理,则需要在  ‘输入纪录区’中划分出各数据,以便存放相应的数据。定义输入纪录区以及划分记录Z各数据项的工作是由数据部来完成的。下面我们简单介l数据部定义记录区方法,针对上面输入数据的特点,我们可以在数据部中对记录Z如下描述Q?
 DATA DIVISION?
 FD     IN-FILE   LABLE    RECORD  IS   STANDARD?
 01      IN-RECORD。 ?Q定义记录区名ؓIN-RECORDQ?
           02     PROD-CODE PIC   9Q?Q?
           02     PROD-QUANTITY PIC   9Q?Q?
           02     PROD-PRICE PIC   9Q?Q?
           02     MANU-DATE。(生日期Zl合)
                    05   DATE-CCYY PIC   9Q?Q?
                    05   DATE-MM PIC   9Q?Q?
                    05   DATE-DD PIC   9Q?Q?

其中QFD ?FILE DESCRIPTIONQ表CZ该行h‘文件描qC’?
LABLE RECORD IS STANDARD Q所有的盘文g和磁带文仉必须写明此句?
01 层定义‘输入纪录区?的名字ؓIN-RECORDQ由?01层属于FD描述体,因此也就指定?IN-RECORD ?IN-FILE 的关pR亦即从IN-FILE d的数据存攑֜ IN-RECORD记录Z?
q样Q在执行一ơREAD语句后,文g中一个记录的数据便输入到内存记录区,按排列顺序分别送到记录Z各数据项中。注意文件的各记录中的数据是不分数据的Q只是按一定的序把数据存攑֜各字节中。所以数据部对记录区中各数据的描述应该与文件的记录中各数据排列ơ序和长度相一致?

READ 语句的一般Ş式:READ     文g名 ?RECORD [INTO  标识W]  [AT   END  执行语句] Q?例如Q?
      READ  IN-FILE   INTO TEMP-RECORD   AT  END   STOP  RUN  该语句除了将d的数据传送到IN-RECORD之外Q还传送到TEMP-RECORD中。在遇到文g时Q程序结束运行?

4。WRITE语句Q将内存中的数据输出到外部设备,主要是由WRITE 语句来完成的。WRITE语句的最单的格式为:
      WRITE        记录?Q注意WRITE语句的操作对象是记录Q所以是‘记录名’而不是‘文件名’) 
     与输入文件相D出文件也要在环境部中指定所对应的实际存在的外部文gQ?
  ENVIRONMENT DIVISION?
  INPUT-OUTPUT SECTION?
  FILE-CONTROL?
          SELECT      OUT-FILLE    ASSIGN  TO      打印机名?
也要在数据部中定义输录区Q?
 DATA DIVISION?
 FD     OUT-FILE   LABLE    RECORD  IS   OMITTED?
 01      OUT-RECORD。 ?
           02     PROD-CODE PIC   9Q?Q?
           02     PROD-QUANTITY PIC   9Q?Q?
           02     PROD-PRICE PIC   9Q?Q?
           02     MANU-DATE
                    05   DATE-CCYY PIC   9Q?Q?
                    05   DATE-MM PIC   9Q?Q?
                    05   DATE-DD PIC   9Q?Q?
LABLE RECORD IS OMITTED Q凡输出讑֤是打印机的都必须写明此句。如输出讑֤是磁盘,则仍用LABLE RECORD IS STANDARD?
01 层定义‘输出纪录区?的名字ؓOUT-RECORDQ由?01层属于FD描述体,因此也就指定?
OUT-RECORD 和OUT-FILE 的关pR?


在用WRITE 语句输出一个记录之前,应向输出记录Z送数据。如已将数据传送到上述各数据项中,则在执行 W RITE   OUT-RECORD 语句后,则记录区中的数据通过打印机打印出来?


WRITE 语句的一般Ş式:                     标识W?2 LINE
                      BEFORE                   整数  LINES
       WRITE     记录名?[FROM  标识W?1 ]       AFTER         ADVANCING          助忆名 ?
                      PAGE
5。OPEN语句Q程序中如果需要读写文Ӟ则该文g必须先用OPEN语句打开Q系l在执行READQWRITE以前先检查该文g是否已在规定的外部设备上准备qA?
      OPEN语句的一般格式ؓQ?

  INPUT 文g? [Q文件名2]。。?
  OPEN   OUTPUT 文g? [Q文件名4]。。。   ?。。?
6。CLOSE语句Q当对一个文件的L写的操作已完成,应关闭该文件?
      CLOSE语句的一般格式ؓQ?
 CLOSE 文g名?1   [Q文件名2]。。?


COBOL通过2位长度的文g状态字(FILE-STATUS)来表C文件的操作l果是否成功Q常见的文g状态值及意义:

二。算数运语?

1。ADD语句Q?
 格式1QADD     标识W? Q标识符2。。。?TO 标识Wm [Q标识符n]。。?
   帔R1 Q常?

 格式2QADD     标识W?     Q标识符2      Q标识符3
   帔R1         Q常?          Q常?

    。。。GIVING 标识Wm [Q标识符n]。。?/p>

2。SUBTRACT语句Q?
     格式1QSUBTRACT       标识W? Q标识符2 。。?FROM 标识Wm [Q标识符n]。。?
                             帔R1 Q常?

     格式2QSUBTRACT       标识W?      Q标识符2   。。。?FROM      标识W?
                                   帔R1          Q常?                                       帔R
     GIVING 标识Wn [Q标识符p]。。?

3。MULTIPLY语句Q?
     格式1QMULTIPLY        标识W?         BY 标识W? [Q标识符3]。。?
                              帔R1Q?

     格式2QMULTIPLY        标识W?         BY 标识W?  GIVING 标识W? [Q标识符4]。。?
                              帔R1 Q 常?
4。DIVIDE语句Q?
     格式1QDIVIDE              标识W?         INTO 标识W? [Q标识符3]。。?
                              帔R1  

     格式2QDIVIDE             标识W?         INTO 标识W?  GIVING 标识W? [Q标识符4]。。?
                            帔R1  BY 帔R2

     注意Q DIVIDE    A  INTO  B    是指    B/AB          
 DIVIDE   A  INTO   B   GIVING  C     是指 B/AC
                  DIVIDE    A  BY      B   GIVING  C     是指    A/BC 
5。COMPUTE 语句Q?
                 COMPUTE           标识W?  [Q标识符2 ]。。? 术表达?
                 q算的优先由高C序为:Q)Q正负号  Q?* Q? 或?/   Q? ?-
                 如:C = 3 QD = 5 QE = 2 Q?F = 1 则:
                 COMPUT   AQB = -QC + DQ? 2 /  E ** 3 -  F = -3
三。传送语?QMOVEQ?
        MOVE 语句用来实现内存中数据的传送(而不是内存和外设之间的传送)?
        MOVE语句的一般格式ؓQ?
 MOVE          标识W?        TO          标识W? [Q标识符3]。。?
                      帔R1  
MOVE语句的传送规则:
 1Q如果接攉和发送项在数据部中描q的cd和长度相同,则按字节一一对应传送?
 2Q如果接攉和发送项长度不相同,而二者都是数值数据项Q则按小数点寚w处理?
 3Q对字母或字W数据(非数值型数据Q的传送,按左寚w处理?
 4Q初{项和组合项之间可以怺传送?
        关于各类数据之间的传送规则将在第五章中介l?
四。{U语句(GO  TOQ?
        当需要ɽE序改变正常执行的顺序时Q可以用无条g转移语句 GO  TO 。其一般格式ؓQ?
        格式1Q GO         TO     q程?
        格式2Q    ?GO          TO    q程?  [Q过E名2]。。过E名n   DEPENDING    ON      标识W?
       
        注意Q只能{UdD|节的开_不能转移到段或节的当中某一语句。段名或节名E名?
五。条件语句(IFQ?
        当需要根据给出的某些条g是否满来决定应执行哪一部分语句Ӟ可以使用条g语句IF?
        其一般格式ؓQ?
          IF         条g     语句l?               ELSE       语句l?                   [END-IF]
                                NEXT  SENTENCE                      NEXT  SENTENCE
                      

         COBOL关系q算W:  IS         GREATER     THAN    (>)
   IS         LESS              THAN    (<)                                           
   IS         EQUAL          TO          (=)
   NOT    GREATER     THAN    (NOT >) (<=)
   NOT    LESS              THAN    (NOT <) (>=)
   NOT    EQUAL          TO         (NOT =)
注意Q句点在IF 语句中的Ҏ作用?
 如:IF    A >  0 
                                             DISPLAY        A。 ?
         ADD          A          TO    TOTAL。               ? 
         DISPLAY         TOTAL。             ? 
 与 ?IF    A  >  0
               DISPLAY  A
                ADD         A     TO    TOTAL?
        DISPLAY        TOTAL。就不同?
为避免出现问题应该用显式终止符QEND-IFQEND-PERFORM{)代替隐式l止W(句点“。”)
六。停止语句(STOPQ?
        其一般格式ؓQ         ?STOP          RUN
           帔R
        STOP   RUN  执行后,E序停止q行Q停止后不能再接着q行Q如需要,可重新运行一ơ?
        STOP  帔RQ表C程序暂时挂起不往下执行,昄出此帔R?
七。返回语句(GOBACKQ?
        停止q行Q将控制权返回给上一U。可用本语句代替STOP语句。子E序必须用GOBACK?
不能用STOPQ因为STOP停止的是一个RUN UNITQ运行单元)?

CHAPTER 2 q程部初?----最基本的过E部语句

一。标识部QIDENTIFICATION  DIVISIONQ?
        IDENTIFICATION       DIVISION.
        PROGRAM-ID.             E序名?
        [AUTHOR。               ?作者名?]
        [INSTALLATION。   ?计算|场所?]
        [DATE-WRITTEN。  ?源程序编写日期?]
        [DATE-COMPILED?源程序编译日期?]
        [SECURITY。            ?保密E度。]
二。环境部QENVIRONMENT  DIVISIONQ?
        ENVIRONMENT          DIVISION.
        CONFIGRATION         SECTION?
        SOURCE-COMPUTER。   ?源计机名?
        OBJECT-COMPUTER。    ?目标计算机名?
        [SPECIAL-NAMES。         ?专用名描q项?]
        [INPUT-OUTPUT         SECTION?
        FILE-CONTROL。    ?{文g控制描述体}。。?
        [I-O-CONTROL。     ?输入输出控制描述体]]
1。CONFIGRATION  SECTION?
              专有名段的一般格式:
 SPECIAL-NAMES?
        [DICIMAL-POINT      IS   COMMA。]
                                    [CURRENCY   SIGN IS   非数值常量。]    
        [专用名                     ?IS    助忆名。]     
2。INPUT-OUTPUT   SECTION?
      INPUT-OUTPUT  SECTION 包括两个D,卻IFILE-CONTROL   ?I-O-CONTROL。FILE-CONTROLD|为文件分配外部文件。I-O-CONTROLD늚作用是可以指定目标程序运行时Q几个文件共用一个内存区Q以省内存。在此暂不作介绍?
FILE-CONTROLD늚主要功能是给E序中用的文g命名。指出存放该文g的外部设备及其它有关文g控制的信息。对文g的描q是由SELECT子句实现的。FILE-CONTROLD늚一般格式:
 INPUT-OUTPUT       SECTION?
 FILE-CONTROL?
 SELECT       文g名  ?ASSIGN    TO   外部文g?
 [ORGANIZAION          IS … ?]       (SEQUENCIAL , INDEXED , RELATIVE)
 [ACCESS     MODE      IS … ?]       (SEQUENCIAL, RANDOM , DYNAMIC)
 [RECORD   KEY           IS  … ?]
 [FILE  STATUS    IS           … ?]

CHAPTER 4 数据部之一

一。数据部概述?
  1?数据部的作用是定义数据项属性,描述数据l构。所有在q程部中出现的数据项都必d数据部中对它们的属性进行说明。包括数据项的类型,数据w的关p,记录与文件的关系Q文件的属性?
2?数据的层ơ和层号QCOBOL中把有从属关pȝ数据用层ơ(levelQ关pL描述。数据的层次l构是:记录--》组合项--》初{项。如Q在前面READ语句中定义的 IN-FILE 文gh如下l构Q?
 01      IN-RECORD。  ?
           02     PROD-CODE PIC   9Q?Q?
           02     PROD-QUANTITY PIC   9Q?Q?
           02     PROD-PRICE PIC   9Q?Q?
           02     MANU-DATE。  ?
                    05   DATE-CCYY PIC   9Q?Q?
                    05   DATE-MM PIC   9Q?Q?
                    05   DATE-DD PIC   9Q?Q?
层次规定如下Q?
 Q?Q用来描q数据的层次l构的层号从01?9。记录的层次最高,定ؓ01层号?
 Q?Q从属项的层h其下属项的层号高。层号不必要求连l?
 Q?Q从属于同一l合但不互总属的数据具有相同的层号?
3。数据部的结构:  数据部中通常用到的有以下几个节:
 Q?QFILE SECTIONQ描q程序中用到的输入输出文件及其记录中各数据项的属性?
 Q?QWORKING-STORAGE SECTIONQ描q程序中用到的中间数据项?
 Q?QLINKAGE SECTIONQ描qC调用E序间发生数据传递的数据V?
 Q?QREPORT SECTIONQؓ了完成报表编制功能,此节用来规定Ʋ输出的报表?
          ‘体裁’,设计各报表栏的打印Ş式和Ҏ{?
二。文件节?
 1。文件节的作用:  E序中每一个输入或输出文g都要在文件节中加以描q。内容包括:文g名和文g属性;文g中包括的记录名字Q每个记录中数据的层ơ关p;记录中各数据的数据形式和占内存的大?
2。文件描qͼ          最单的文g描述体的一般格式ؓQ?
  FD 文g?
             LABLE      RECORD        IS           STANDARD
                      RECORDS      ARE  OMITTED
   DATA        RECORD        IS  数据?
                      RECORDS      ARE        
3。记录描qͼ记录描述体由01层号开始,后跟记录名。如果记录本w就是一个初{项Q则在记录名后描q记录长度;否则Q数据名后跟句点Q下面定义记录的数据l构。如Q?
 DATA DIVISION?
 FILE SECTION?
 FD    IN-FILE
          LABLE    RECORD IS STANDARD?
          DATA      RECORD IS IN-FILE-RECORD?
 01     IN-FILE-RECORD          PIC         XQ?0Q?
  DATA DIVISION?
 FILE SECTION?
 FD    IN-FILE
          LABLE    RECORD IS STANDARD?
          DATA      RECORD IS IN-FILE-RECORD?
 01     IN-FILE-RECORD          PIC         XQ?0Q?
或  ?Q?1     IN-FILE-RECORD?
          05     DATE  PIC   9Q?Q?
          05     PROD-CODE PIC   9Q?Q?
          05     PROD-PRICE PIC   9Q?Q。           ?Q?
4。数据项描述Q?在每一个初{项的名字后跟一个PIC子句。用它来描述数据的类型和长度。PIC子句在下面详l说明?
5。文件节的书写格式:   FD从A区开始书写,01层号也从A区开始,其它层号可以从AZ可以从B区开始。ؓ了看h层次分明Q最好从B区开始?
三。PIC 子句。PIC即PICTURE的羃写。PIC子句用来描述每一个初{项。它说明Q(1Q数据项是什么类型。(2Q数据项占多大内存域。(3Q是否需要按打印的要求准备有兛_W。PIC子句的主要作用在于描qC个初{项的一般特征和~辑要求?
1。数值型数据的描qͼ
       ?’描q符Q?表示该位|上可以攑օ一? ~ 9 之间的数字。因此:
 01          A        PIC 999。         ??
 01          A        PIC 9Q?Q?
 表示A可以存放000 ~ 999 之间的一个三位数。有几个9表示有几位数?
 注意Q(1Q在数值型数据中只能放数字不能放I格?
             Q?Q用?’描q符只能表示整数Q如输入数部分Q则数部分被舍弃?
             Q?Q如送入一个负敎ͼ则负可舍弃?

‘V’描q符Q?指出在数值数据结构中隐含的小数点的位|。小数点不占内存单元。如Q?
 03         M         PIC   9Q?QV9Q?Q?
 注意Q(1QV在描q符的最后,则等于无数炏V?
             Q?Q一个数据的描述W中只能出现一个V?
             Q?Q进行数据传送或q算Ӟ按隐含的数点位|对准进行传送或q算?
             Q?QV表示的小数点只在传送或q算时v作用Q不能被昄或打印出来。  ?

‘S’描q符Q?如果惛_数据中攑օ一个带W号的数Q可以用‘S’描q符。如Q?
 03         M         PIC   S9Q?QV9Q?Q?
 注意Q(1QS描述W必L最左边的一个描q符?
             Q?Q在内存中,S不占位数Q在传送或q算时v作用?
2。字母型数据的描qͼ字母型数据项用A描述W,在这U类型的数据中只允许存攑֭母或I格?
3。字W型数据的描qͼ׃Q意的COBOL字符l成的数据,UCؓ字符型数据,它是非数值型的,不能用于计算。用X描述W来表示字符型数据。如Q?
 03         M        PIC   XQ?Q?
 注意Q(1Q字W型数据可以用X描述W,也可以用9和A描述W来描述。如描述数据
      ‘COB-74’可以用PIC  XQ?Q,也可以用    PIC   AQ?QX9Q?Q?
             Q?Q字母型数据既可以用A描述Q也可以用X?
             Q?Q字W型数据中可以放数字?
4。编辑型描述W:~辑型数据项只是作ؓ输出数据时增加或改变某些所需的符PL辑作用,它不是作计算用的。下面分别介l编辑数据项中用到的~辑描述W?
 Q?Q。插入小数点‘。’,用‘。’描q符。如Q?
               77         T        PIC   99?9?
   (2Q。插入逗号‘,’作分位P用‘,’描q符。如Q?
               02         A        PIC  999Q?99?9?Q或PIC  9Q?Q,9Q?Q?Q?Q)
 Q?Q。插入空|用‘B’描q符。如Q?
               02         A        PIC   B9Q?QB?
 Q?Q。插入正负号Q用?’或?’描q符。如Q?
               02         A1      PIC   +9Q?Q??PIC   9Q?Q?Q?
               02         A2      PIC   -9Q?Q。(或PIC  9Q?Q?Q?
               注意Q描q符?’,一侓加W号。描q符?’只对负值加负号?
 Q?Q。插入??。如Q?
               02         A1       PIC   $999?9?
               02         A2       PIC  +$99999?
               02         A3       PIC  -$999??
 Q?Q。Q动插入正负号和??
               02         A1       PIC  $$$99.99.
               02         A2       PIC  $$$$$.$$.  
               02         A3       PIC  ++9.99.
 
 Q?Q。取消高位零Q用‘Z’和?’描q符。在高位零的位置上代以空格或?’。如Q?
               02         A1       PIC  ZQ?Q?9?
               02         A2       PIC  *Q?Q?Q?Q。 ?
               02         A3       PIC  +ZZZQZZZQZZ。ZZ?
               02         A4       PIC  -*Q?**Q?**?9?
 Q?Q。插入‘DB’和‘CR’字W。DB和CR只能用作固定插入Q当数gؓ负时Q在~辑型数               据项中最后两个字节中|DB或CRQ数gؓ正时Q此两字节留I格。如Q?
               02         A1       PIC  $9Q?Q?9DB       
                                           02         A2       PIC  $9Q?Q?9CR?
5.常用数值型数据

四。工作单元节QWORKING-STORAGE SECTIONQ?

 1。工作单元节的作用:E序中用的数据项分ؓ两部分,一部分是属于输入或输出文g的,另一部分是非输入或输出的数据。如一些中间变量或用作累计的数据项{。非输入输出的数据就应在工作单元节中描述Q还可以用工作单元节来赋初倹{?
2。VALUE子句Q用于给变量赋初倹{如Q?
 02      A        PIC       9Q?Q   ?VALUE   123?
注意Q (1Q只有对工作单元节中的数据项才能赋初|不能Ҏ件节中输入输出文件中的         ?数据赋初倹{?
 Q?Q如果在l合的描述体中使用VALUEQ初值只能是表意帔R或非数值型帔R。         ?对组合项整体而言Q一律按字符型数据项处理?
 Q?Q当用一个带W号的数g初值时Q相应的PIC子句中应有‘S’描q符?
 Q?Q赋初值时应该注意cd的一致性?
 Q?QVALUE子句l出的值应适合PIC子句的描q范_否则会出现截断或产生错误?

CHAPTER 5 q程部之?/a>

一。MOVE 语句的较高技?/p>

 1。各U类型数据之间的传送规则见下表Q(YQ表C合法传送。NQ表C非法传送。空白:表示某些时候是合法的。)
 

接收?/p>

数值型

数值型

数值编辑型

字母?/p>

字符?/p>

字符~辑?/p>

l合?/p>

发送项

整数

非整?/p>






数值型整数

Y

Y

Y

N

Y

Y

Y

数值型非整?/p>

Y

Y

Y

N

N

N

Y

数值编辑型

Y

Y

Y

N

Y

Y

Y

字母?/p>

N

N

N

Y

Y

Y

Y

字符?/p>





Y

Y

Y

字符~辑?/p>

N

N

N

N

Y

Y

Y

数值常?/p>

Y

Y

Y

N

N

N

Y

非数值常?/p>

N

N

N

Y

Y

Y

Y

ZERO

Y

Y

Y

N

Y

Y

Y

SPACE

N

N

N

Y

Y

Y

Y

l合?/p>





Y

Y

Y


2。用CORRESPONDING子句的传?—?对应传送(同名传送)
       对应传送的一般格式:
 MOVE         CORRESPONDING             标识W?       TO        标识W?
                      CORR
       说明Q(1Q如果两个组合项中包括的不同,则只传送同名的V?
                   Q?Q传送的两者间必须有成对的同名数据,而且q一对中必须臛_有一个项?
            初等V否则不能作为对应项传送?
                   Q?Q所谓同名,指的是它们有相同的全E受限,卛_E同名。       ?
 假如T1和T2的描q分别ؓQ?
 01         T1。 ?1         T2?
        02  X。      ?02    X?
              03  X1。。。            ?  03     X2。。?
              03  X3。。。                                  ?03     X1。。?
        02  Y1。      ?02    Y。     ?
              03  A1。。。             ?  03      A1。。?
 则T1中的A1与T2中的A1׃是全E同名?


4。除法语句中的余数语句(REMAINDER 子句Q:DIVIDE 语句只能求商不能求余数。如x余数Q可用     ?REMAINDER 子句?
 如:  DIVIDE        A        INTO      B            GIVING       C         REMAINDER             D
      注意Q(1Q商和余数的g仅取决于除数和被除数Q还取决于数据部中对商和余数的描q?
                  Q?Q如用ROUNDED子句Q它只对商v作用Q余C作四舍五入处理,在计余
           数时Q仍按四舍五入前的gؓ准?
   (3Q?长度溢出也只查商的值是否溢出,而不查余数?
三。IF语句的较高技?
 1。符hӞ
 数据名     ?IS  [NOT]          POSITIVE
 术表达式             ?NEGATIVE
                 ZERO
2。类型条Ӟ
 标识W IS        [NOT]    NUMERIC
           ALPHABETIC
3。条件名条gQ用来表C条件变量当前值的名字叫条件名。条件名本n是一个条Ӟ它有一个|‘真’或‘假’)Q用它来查条件变量的值是否落在条件名所代表的值的范围中,当条件变量的D在条件名所代表的值的范围中,则此条g名所表示的条件ؓ‘真’,否则为‘假’?
 条g名条件的一般格式:
 88           条g名      ?{  VALUE      IS}        帔R1        [{THRU}      帔R2]
                 [帔R3       [ [{THRU}      帔R4]] 。。。]
                如: 02      WS-FILE-STATUS       PIC      9Q?Q?
            88         WS-FILE-NORMAL          VALUE  0Q?3。     ?
            88         WS-FILE-EOF           VALUE  10?

CHAPTER 6 q程部之三——执行语句(PERFORMQ?/a>

一。执行语句的作用Q在一个COBOLE序中,q程部中往往有一部分语句需要执行多ơ。ؓ了让重复的部分在E序中只出现一ơ,可以把重复的部分单独写成一D|一节(有一个段名或节名Q,每次执行q部分语句时转去该段Q执行完转回来。这时候就需要用到执行语句(PERFORM Q?

二。执行语句的一般Ş式:
            PERFORM           q程?        [THRU]                q程?

三。用PERFORM语句实现循环Q?
  1。 PERFORM           q程?        [{THRU}                q程?   ]        整数         TIMES
                                                                                                                                         标识W?
       
 2。 PERFORM           q程?        [{THRU}                q程?   ]        UNTIL     条g

 3。 PERFORM           q程?        [{THRU}                q程?   ]       
  VARYING    标识W?        FROM   常数1        BY       常数2             UNTIL   条g
                                                                      标识W?                            标识W?

四。执行语句的多重循环形式QCOBOL 允许三重循环Q其一般格式可写ؓQ?
 PERFORM          q程?        [{THRU}                q程?   ]       
  [VARYING   参数1        FROM   初?        BY       步长1             UNTIL   条g1 ]
  [AFTER         参数2        FROM   初?        BY       步长2             UNTIL   条g2 ]
  [AFTER         参数3        FROM   初?        BY       步长3             UNTIL   条g3 ]

五。出口语句(EXITQ:EXIT语句提供了一l过E的公共出口Q即指出了被调用q程的逻辑l点?

CHAPTER 7 各部之间的关pdE序举例

一.各部之间的关p?

IDENTIFICATION   DIVISION.
PROGRAM-ID.        PROGRAM1.
l程序加上标识以便识?

ENVIRONMENT  DIVISION.
CONFIGRATION   SECTION.
INPUT-OUTPUT    SECTION.
FILE-CONTROL.
        SELECT    PRODFILE  ASSIGN  TO FILE1.
描述E序中用到的文g与外部文件的关系及控制信?br />
DATA  DIVISION.
FILE   SECTION.
FD    PRODFILE    LABEL  RECORD  IS  STANDARD.
01     PROD-REC      PIC      X(200).  
WORKING-STORAGE   SECTION.
01     WS-VARIBALES.
         05   WS-I          PIC      9(2).
描述E序中用到的所有文件及其记录中各数据项的属性及E序中用到的所有中间数据项的描q?

PROCEDURE  DIVISION.
E序的核心部?他决定计机q行什么操??文g的读写及其他处理


?E序举例:
?:
d一l品销售记?每读入一个记?计算出销售总额(数量X单h).然后打印产品的全部数?数据形式如下:

1  9  9  2  1  2  3  1  0  0  0  0  0  1  A  A  A  A  0  1  0  0  5  0  0  0
1  9  9  3  1  2  3  1  1  0  0  0  0  1  B  B  B B  0  2  0  0  6  0  0  0
-------------------------  -----------------   ------------  ------------  -----------
         DATE                PRODCODE     CUST        AMT        PRICE
E序如下:
IDENTIFICATION       DIVISION.
PROGRAM-ID.             PEXAM1
ENVIRONMENT          DIVISION.
CONFIGRATION         SECTION.
INPUT-OUTPUT          SECTION.
FILE-CONTROL.
        SELECT     INPUT-FILE         ASSIGN    TO     FILE1
                           ORGANIZATION                    IS      SEQUENCIAL
                           ACCESS    MODE                    IS      SEQUENCIAL
                           FILE-STATUS                          IS     WS-INPUT-FILE-STATUS.
        SELECT    OUTPUT-FILE        ASSIGN  TO     P-FILE
                           ORGANIZATION                    IS      SEQUENCIAL
                           ACCESS    MODE                    IS      SEQUENCIAL
                           FILE-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-FILES         
          PERFORM         R000-READ-FILE            
          PERFORM         A200-PROCESS-RECORD UNTIL WS-INPUT-FILE-EOF
          PERFORM         A300-CLOSE-FILES           
          STOP RUN
          .
A000-EXIT.
          EXIT
          .

A100-OPEN-FILES.
           OPEN INPUT        INPUT-FILE
                          OUTPUT    OUTPUT-FILE
           IF     NOT           WS-INPUT-FILE-SUCCESSFUL     
 DISPLAY   ‘INPUT-FILE              OPEN     NOT   SUCCESSFUL’  ?UPON    CONSOLE
 PERFORM  Z000-ABEND
          END-IF 
           IF     NOT            WS-OUTPUT-FILE-SUCCESSFUL     
 DISPLAY   ‘OUTPUT-FILE         OPEN      NOT   SUCCESSFUL’  ?UPON    CONSOLE
 PERFORM  Z000-ABEND      
           END-IF 
          .
A200-PROCESS-RECORD.
           INITIALIZE  OUT-REC
           MOVE           CORR         IN-REC     TO           OUT-REC
           COMPUTE   SALES-VALUE   =  QUANTITY  OF  IN-REC   *   UNIT-PRICE   OF   OUT-REC
           PERFORM   W000-WRITE-FILE 
           PERFORM    R000-READ-FILE    
           .
A300-CLOSE-FILE.
           CLOSE         INPUT-FILE          
                                 OUTPUT-FILE
           .
R000-READ-FILE.
           READ  INPUT-FILE
           IF     NOT   WS-INPUT-FILE-SUCCESSFUL   AND  NOT    WS-INPUT-FILE-EOF  
 DISPLAY   ‘INPUT-FILE  READ NOT   SUCCESSFUL’  ?UPON    CONSOLE
 PERFORM  Z000-ABEND            THRU      Z000-EXIT
           END-IF
          .

W000-WRITE-FILE.
           WRITE  OUT-REC         AFTER     1
           IF     NOT   WS-OUTPUT-FILE-SUCCESSFUL    
 DISPLAY   ‘OUTPUT-FILE  WRITE  NOT   SUCCESSFUL’  ?UPON    CONSOLE
 PERFORM  Z000-ABEND 
           END-IF
           .
Z000-ABEND.
          DISPLAY   ‘PROGRAM   ABEND !’  ?UPON    CONSOLE
          PERFORM  A300-CLOSE-FILES          THRU    A300-EXIT
          MOVE         16                                         TO         RETURN-CODE
          GOBACK
          .

输出的数据Ş式如?
1992 12 31     000001     AAAA      100      $5000      $500000

1993 12 31     100001     BBBB       200      $6000      $1200000


?:
Program : INVI300    Update  inventory   file (random)
                          

File   Description  Use 
VALTRAN  Valid inventory transaction  file Input
INVMAST Inventory  master  file Update
ERRTRAN Unmatched inventory transaction file Output
 
Process specifications
        This program updates an inventory master file (INVMAST) based on the data in a sequential
file 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 the
transaction data to update the master record .It does this by increasing the on hand quantity
in 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 on
the file of error transactions (ERRTRAN). The record format format for ERRTRAN is same as
for 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.

E序如下:
IDENTIFICATION DIVISION.
PROGRAM-ID. INV1300.

ENVIRONENT  DIVISON.
INPUT-OUTPUT  SECTION.
FILE-CONTROL.
        SELECT  VALTRAN    ASSIGN  TO   SYS020-AS-VALTRAN.
        SELECT  INVMAST     ASSIGN  TO   SYS021-INVMAT
              ORGANIZATION IS  INDEXED
              ACCESS                 IS    RANDOM
              RECORD KEY       IS   MR-ITEM-NO
              FILE STATUS        IS   INVMAST-ERROR-CODE.
         SELECT  ERRTRAN    ASSIGN  TO   SYS022-AS-ERRTRAN.

DATA  DIVISION.
FILE  SECTION.
FD    VALTRAN
         LABEL  RECORDS  ARE  STANDARD.
01     VALID-TRANSACTION-AREA  PIC  X(21).
FD    INVMAST
         LABEL RECORDS  ARE  STANDARD.
01     MASTER-RECORD-AREA.
         05   MR-ITEM-NO  PIC  X(5).
         05   FILLER   PIC  X(45).
FD    ERRTRAN
         LABEL  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        VALTRAN
                                I-O               INVMAST
                                OUTPUT     ERRTRAN
         PERFORM    B000-PROCESS-INVENTORY-TRAN      THRU     B000-EXIT
                                UNTIL         VALTRAN-EOF
         CLOSE                  VALTRAN
                   INVMAST
                   ERRTRAN
         DISPLAY      ‘PROGRAM   INV1300  NORMAL  END?
         GOBACK.
B000-PROCESS-INVENTORY-TRAN.
        PERFORM                      B100-READ-INVENTORY-TRAN              
        IF      NOT                       VALTRAN-EOF
                  PERFORM            B200-READ-INVENTORY-MASTER         
                  IF     MASTER-FOUND
                           PERFORM   B300-UPDATE-INVENTORY-MASTER    
                  ELSE
                           PERFORM   B400-WRITE-ERROR-TRAN                       
                  END-IF
        END-IF.
B000-EXIT.
        EXIT.
                  
B100-READ-INVENTRORY-TRAN.
        READ   VALTRAN        INTO    INVENTORY-TRANSACTION-RECORD
                     AT   END           MOVE  ‘Y’       ?TO        VALTRAN-EOF-SWITCH.
B100-EXIT.
        EXIT.


B200-READ-INVENTORY-MASTER.
        MOVE   IT-ITEM-NO                                    TO         MR-ITEM-NO
        READ    INVMASST                                      INTO    INVENTORY-MASTER-RECORD
        IF           INVMAST-ERROR-CODE              = ?0?
                      MOVE  ‘Y’                                      ?TO         MASTER-FOUND-SWITCH
        ELSE   
                      MOVE  ‘N’                                      ?TO         MASTER-FOUND-SWITCH
        END-IF.

B300-UPDATE-INVENTORY-MASTER.
        ADD     IT-RECEIPT-QUANTITY                TO          IM-ON-HAND
        REWRITE  MASTER-RECORD-AREA       FROM    INVENTORY-MASTER-RECORD
        IF          INVMAST-ERROR-CODE              NOT       =   ?0?
                     DISPLAY   ?INV1300  REWRITE   INVMAST ERROR . ITEM  NUMBER = ?IM-ITEM-NO
                     DISPLAY   ?FILE  STATUS    = ’  ?INVMAST-ERROR-CODE
                     MOVE  ‘Y’                                       ?TO         VALTRAN-EOF-SWITH
        END-IF.
B300-EXIT.
        EXIT.

B400-WRITE-ERROR-TRAN.
        WRITE   ERROR-TRANSACTION                FROM   INVENTORY-TRANSACTION-RECORD.
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      PGM3COM
          
         INITIALIZE PGM3-OUT

         PERFORM B000-VALIDATION      THRU B000-EXIT
         IF      PGM3-SUCCESSFUL
                  PERFORM 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  NUMERIC
                SET PGM3-CUST-NBR-ERR    TO   TRUE
           END-IF
           .
  B000-EXIT.
           EXIT.
      *
      
C000-PROCESS.
           MOVE CUST-NO                  TO   MASTER-KEY
           EXEC CICS READ FILE  ('VMASTER')
                      RIDFLD(MASTER-KEY)
                      INTO  (MASTER-RECORD)
                      LENGTH(LENGTH OF MASTER-RECORD)
     RESP  (WS-RESP)
                      END-EXEC
           IF  WS-RESP    NOT            =    DFHRESP(NORMAL)   
        IF  WS-RESP              =    DFHRESP(NOTFND)    
               SET  PGM3-CUST-NOT-FND  TO   TRUE
        ELSE
               EXEC   CICS  ABEND  ABCODE('ABCD')   END-EXEC
        END-IF 
           ELSE
        MOVE CHECK-AC            TO   PGM3-AC
        MOVE BAL   TO   PGM3-BAL    
           END-IF
           .
 C000-EXIT.
           EXIT.

CHAPTER 8 联机及批量程序的一些差?/a>

扚w联机
对大量数据的集中处理对特定的量数据操作
一般在非营业时间运?/td>一般在营业旉q行
Ҏ率要求较?/td>对实时性要求较?/td>
在操作系l中通过后台作业来调度q行在CICSq_上通过CICSȀz运?/td>
资源׃业流和程序管?/td>资源由CICS集中理Q程序对资源使用通过调用CICS提供的语?/td>
一般会使用INPUT-OUTPUT SECTION.
FILE-CONTROL. FILE SECTION.
不会使用INPUT-OUTPUT SECTION.
FILE-CONTROL. FILE SECTION.
出错处理通过文件状态字出错处理通过CICSq回状态字

CHAPTER 9 COBOL-II ~程规范

1. 使用i構化的R程Ҏ ,開發一致的、可理解的和易于E護的COBOLE序 .i構化編E應遵@“KISS”法則,卻I“Keep It Simple & Stupid?for EASY TO READ ,EASY TO DEBUG ,EASY TO MAINTAIN.
2.只用序Q@环,选择3U程序結構及i合去表C程序邏?
3.每個控制結構只有一個入口和一個出口(i構可以是一個模塊,D,Q子E序Q?
4.不要爲了時空效率而犧牲清晰性?
5.E序的清晰性首先在於邏輯的清晰Q然後才是格式的清晰?
6.清晰的格式有助於清晰的思維?
7.Z所有變量在被用時都被正確地置初倹{?
8.避免ȫ用語言特色Q應使程序簡潔易讀?
9.使用有意的、簡化的變量名及詞語標號?
10.盡量使用標準的公用子E序埯既定的程序功能?
11.避免不必要的複雜的算術和邏輯表達式?
12.避免重復的控制序列以及不必要的轉UR?
13.不要用注釋去_地重復程序代|要得注釋有價倹{?
14.嚴格控制非限制性轉U語句“GOTO”的使用Q除非下面兩E情況:當不使用時將會模p而不是澄清功能;
   在同一E序單元内正向轉UR?br />
出处...


@yeafee 2007-07-11 11:25 发表评论
]]>
վ֩ģ壺 ˳ɫ77777| Ұ¾þø| Ļ޹˾þþƷ | ûվɫƵѹۿ| ޹˳߹ۿ| ԻԻ³ҹҹѲƵ| Ļһ| 91þԭ| ޳ɵӰ߹ۿ| ŮߵƵѹۿڵ| ˾þô߽ڹ| žžƷƵ| ޳AVƬWWW| պƷƵһ| mm1313޹ƷԿ| ѴƬ߹ۿվ| һձƵѹۿ| ޾ƷӰ߲Ʒ| þѾƷƵ| Ƶۿ| Ʒ_ۿ| ˳ɴƬ߹ۿ| ղһ| 91Ʒѹۿ| Ůרhd| ѿƷ鶹| Ƭ߹ۿ| ޾Ʒþþþþþ | ޹Ʒһ| ˳ӰԺ77777| һ| ձVAҹߵӰ| av߹ۿ| aëƬѹۿ| þAV| žƷƵ| 99Ƶ߹ۿ| jlzzjlzzjzjzjz| av߹ۿ| ƷŮٸavѾþ| ɫ͵͵˵ |