了解使用Call语句的想法

时间:2012-05-05 15:04:33

标签: cobol

当我打电话给另一个程序时,我需要问一下这个菜单程序中的问题是什么

点击1或2,当名为i的程序无法返回我的菜单程序时,

你可以帮助我,当我按下Esc键时,我怎么能回到我的菜单,或者

我的通话声明错误。

这是我的菜单程序的代码。

LINKAGE SECTION.
   01 MY-PROG1 PIC X.
   01 MY-PROG2 PIC X.

......
......
......

MAIN.

       DISPLAY MENU-HEADER ERROR-MESSAGE.
       PERFORM ENTRY-MENU UNTIL CHOICE = 3.     
       STOP RUN.

   ENTRY-MENU.
       ACCEPT MENU-SELECT.
       PERFORM INPUT-CHOICE UNTIL CHOICE = 3.
       STOP RUN.

   INPUT-CHOICE.
       IF CHOICE = 1
         CALL  'MY-PROGRAM1' USING MY-PROG1 
       ELSE IF CHOICE =2
         CALL 'MY-PROGRAM2' USING MY-PROG2
       ELSE 
          MOVE "INVALID INPUT....." TO ERRMSG
          DISPLAY ERROR-MESSAGE.

这是MY-PROGRAM1.COB这是我按Esc键时回调菜单程序的方式

LINKAGE SECTION.
   01   MY-PROG1 PIC X.
   01   MY-MENU  PIC X.

......
......
......


MAIN.

 .......
 .......
 STOP RUN.

ENTER-BIRTHDATE.

  ACCEPT...
  .......

  IF ESC-KEY
     DISPLAY CLEAR-SCREEN
     CALL 'MENU'

  ELSE IF F10
    .....
    .....       

1 个答案:

答案 0 :(得分:4)

您应该使用STOP RUN替换被叫程序中的GOBACK语句。

这是使用STOP RUNGOBACK的一般规则:

  

GOBACK语句标记被调用程序的逻辑结束。

     

一般规则   如果在受调用运行时元素控制的程序中执行GOBACK语句,则目标程序的操作就像执行与GOBACK语句具有相同子句的EXIT PROGRAM语句一样。请参阅EXIT语句主题。   如果在不受调用运行时元素控制的程序中执行没有ADDRESS OF子句的GOBACK语句,则对象程序的操作就像执行与GOBACK语句具有相同子句的STOP RUN语句一样。   如果在不受调用运行时元素控制的程序中执行带有ADDRESS OF子句的GOBACK语句,则对象程序的操作就像执行STOP RUN语句一样,只不过在系统区域中设置了任意返回值。与等效的EXIT PROGRAM和STOP RUN语句相比,GOBACK语句可能会产生更紧凑的代码。   在执行指定GLOBAL短语的声明性过程时,不得执行GOBACK语句,但执行该声明性过程时调用的程序除外。   如果在函数中执行GOBACK语句,则该函数的操作就像执行EXIT FUNCTION语句一样。   如果在方法中执行GOBACK语句,则该方法的操作就像执行EXIT METHOD语句一样。   如果在迭代器中执行GOBACK语句,则迭代器的操作就像执行EXIT ITERATOR语句一样。

     

停止运行。这取决于您的系统。   大多数编译器上的STOP RUN终止程序,如果它被另一个cobol程序调用,则整个过程终止。

在这个link的末尾,您可以找到代表所有这些关系的漂亮模式。

编辑:(来自旧的Microsoft Cobol文档)

  

退出计划声明:   EXIT PROGRAM语句出现在一个被调用的语句中   子程序,导致控制返回到   调用CALL后的下一个可执行语句   程序。   该声明必须是段落   本身。