二维码

[RFC] ABAP用Function封装代码,实现3个数的简单计算

Twilight发表于 2014-03-28 21:39Twilight 最后回复于 2014-03-28 21:39 [复制链接] 3553 0

用abap实现简单的计算器功能,了解function的使用。
注:se38程序中import(传出)、export(传入)和se37function的export(传出)、import(传入)相反
     exceptions  就是特殊情况的处理

选择屏幕
3个数的简单计算1.jpg
除数为0的效果:
3个数的简单计算2.jpg

程序代码:
  1. PARAMETERS: pa_int1   TYPE i,
  2.             pa_op(1)  TYPE c,
  3.             pa_int2   TYPE i,
  4.             pa_op1(1) TYPE c,
  5.             pa_int3   TYPE i.

  6. DATA result TYPE p DECIMALS 2.

  7. CALL FUNCTION 'Z_LXG_001'
  8.   EXPORTING
  9.     pa_int1 = pa_int1
  10.     pa_op   = pa_op
  11.     pa_int2 = pa_int2
  12.     pa_op1  = pa_op1
  13.     pa_int3 = pa_int3
  14.   IMPORTING
  15.     result  = result
  16.   EXCEPTIONS
  17.     error1  = 1
  18.     error2  = 2
  19.     OTHERS  = 3.
  20. IF sy-subrc = 1.
  21.   MESSAGE i001(zvino).
  22.   LEAVE LIST-PROCESSING.
  23. *   Division by zero!
  24. ELSEIF sy-subrc = 2.
  25.   MESSAGE i002(zvino).
  26.   LEAVE LIST-PROCESSING.
  27. *   Invalid operator!
  28. ELSE.
  29. * Implement suitable error handling here
  30. ENDIF.

  31. WRITE: 'Result:'(res), result.
复制代码

se37自定义function module (Z_LXG_001)
1.import
简单计算器import.jpg

2.export
简单计算器EXPORT.jpg

3.exceptions
简单计算器exceptions.jpg

4.source code

  1. *"----------------------------------------------------------------------
  2. *"*"Local Interface:
  3. *"  IMPORTING
  4. *"     VALUE(PA_INT1) TYPE  I OPTIONAL
  5. *"     VALUE(PA_OP) TYPE  C OPTIONAL
  6. *"     VALUE(PA_INT2) TYPE  I OPTIONAL
  7. *"     VALUE(PA_OP1) TYPE  C OPTIONAL
  8. *"     VALUE(PA_INT3) TYPE  I OPTIONAL
  9. *"  EXPORTING
  10. *"     VALUE(RESULT) TYPE  P
  11. *"  EXCEPTIONS
  12. *"      ERROR1
  13. *"      ERROR2
  14. *"----------------------------------------------------------------------

  15.   IF NOT ( ( pa_op = '+' OR pa_op = '-' OR pa_op = '*' OR pa_op = '/'  )
  16.           AND  ( pa_op1 = '+' OR pa_op1 = '-' OR pa_op1 = '*' OR pa_op1 = '/'  ) ).
  17.     MESSAGE E002(ZVINO) RAISING ERROR1.
  18.     "WRITE: 'Invalid operator!'(iop).
  19.   ELSEIF ( pa_op = '/' AND pa_int2 = 0 ) OR ( pa_op1 = '/' AND pa_int3 = 0 ).
  20.     MESSAGE E001(ZVINO) RAISING ERROR2.
  21.     "WRITE: 'Division by zero!'(dbz).
  22.   ELSE.
  23.     CASE pa_op.
  24.       WHEN '+'.
  25.         result = pa_int1 + pa_int2.
  26.         CASE pa_op1.
  27.           WHEN '+'.
  28.             result = RESULT + pa_int3.
  29.           WHEN '-'.
  30.             result = RESULT - pa_int3.
  31.           WHEN '*'.
  32.             result = RESULT * pa_int3.
  33.           WHEN '/'.
  34.             result = RESULT / pa_int3.
  35.         ENDCASE.
  36.       WHEN '-'.
  37.         result = pa_int1 - pa_int2.
  38.         CASE pa_op1.
  39.           WHEN '+'.
  40.             result = RESULT + pa_int3.
  41.           WHEN '-'.
  42.             result = RESULT - pa_int3.
  43.           WHEN '*'.
  44.             result = RESULT * pa_int3.
  45.           WHEN '/'.
  46.             result = RESULT / pa_int3.
  47.         ENDCASE.
  48.       WHEN '*'.
  49.         result = pa_int1 * pa_int2.
  50.         CASE pa_op1.
  51.           WHEN '+'.
  52.             result = RESULT + pa_int3.
  53.           WHEN '-'.
  54.             result = RESULT - pa_int3.
  55.           WHEN '*'.
  56.             result = RESULT * pa_int3.
  57.           WHEN '/'.
  58.             result = RESULT / pa_int3.
  59.         ENDCASE.
  60.       WHEN '/'.
  61.         result = pa_int1 / pa_int2.
  62.         CASE pa_op1.
  63.           WHEN '+'.
  64.             result = RESULT + pa_int3.
  65.           WHEN '-'.
  66.             result = RESULT - pa_int3.
  67.           WHEN '*'.
  68.             result = RESULT * pa_int3.
  69.           WHEN '/'.
  70.             result = RESULT / pa_int3.
  71.         ENDCASE.
  72.     ENDCASE.
  73.   ENDIF.
复制代码

自定义消息se91:
Message class ZVINO.jpg


回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表