151 lines
6.9 KiB
COBOL
151 lines
6.9 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. SUB05TIM.
|
|
*****************************************************************
|
|
* システム名 : 残業統計管理システム *
|
|
* プログラムID : SUB05TIM *
|
|
* プログラム名 : 時刻丸め計算サブ *
|
|
* 作成日 : 2026-06-14 *
|
|
* 処理概要 : 時間値を指定単位で丸め計算する *
|
|
* *
|
|
*****************************************************************
|
|
* 更新履歴 *
|
|
*---------------------------------------------------------------*
|
|
* 更新日付 担当者 更新内容 *
|
|
*---------------------------------------------------------------*
|
|
* 26-06-14 @@@ 新規作成 *
|
|
* *
|
|
*****************************************************************
|
|
ENVIRONMENT DIVISION.
|
|
CONFIGURATION SECTION.
|
|
SOURCE-COMPUTER. IBM-ZSERIES.
|
|
OBJECT-COMPUTER. IBM-ZSERIES.
|
|
*
|
|
DATA DIVISION.
|
|
*****************************************************************
|
|
WORKING-STORAGE SECTION.
|
|
*****************************************************************
|
|
01 WRKARA.
|
|
03 WRK-MINUTES PIC S9(005).
|
|
03 WRK-HOURS PIC S9(005)V9(001).
|
|
03 WRK-REMAINDER PIC S9(005).
|
|
*
|
|
*****************************************************************
|
|
* リンケージエリア *
|
|
*****************************************************************
|
|
LINKAGE SECTION.
|
|
*
|
|
COPY ZANTIMAC.
|
|
*
|
|
PROCEDURE DIVISION USING T01TIMPAR.
|
|
*****************************************************************
|
|
* サブモジュールNO: (0.0) *
|
|
* サブモジュール名: 制御処理 *
|
|
* 処理概要 : メインコントロール処理 *
|
|
*****************************************************************
|
|
0000MAINSOR SECTION.
|
|
*
|
|
*** 丸めモードにより分岐する
|
|
EVALUATE T01TIMRRC
|
|
*** モード0: 0.5時間単位・切上
|
|
WHEN 0
|
|
PERFORM 1000RNDHALF
|
|
*** モード1: 0.1時間単位・切上
|
|
WHEN 1
|
|
PERFORM 2000RNDUP
|
|
*** モード2: 0.1時間単位・切捨
|
|
WHEN 2
|
|
PERFORM 3000RNDDOWN
|
|
*** モード3: 単純四捨五入(0.1h単位)
|
|
WHEN 3
|
|
PERFORM 4000RNDNORMAL
|
|
WHEN OTHER
|
|
*** モード指定なし→そのまま出力
|
|
MOVE T01TIMHRS TO T01TIMOUT
|
|
END-EVALUATE.
|
|
*
|
|
0000MAINSOR-EXT.
|
|
GOBACK.
|
|
*****************************************************************
|
|
* サブモジュールNO: (1.0) *
|
|
* サブモジュール名: 0.5時間単位・切上 *
|
|
* 処理概要 : 30分単位で切り上げる *
|
|
*****************************************************************
|
|
1000RNDHALF SECTION.
|
|
*
|
|
*** 時間→分変換
|
|
COMPUTE WRK-MINUTES =
|
|
T01TIMHRS * 60.
|
|
*** 30分単位で切り上げ
|
|
DIVIDE WRK-MINUTES BY 30
|
|
GIVING WRK-HOURS
|
|
REMAINDER WRK-REMAINDER.
|
|
IF WRK-REMAINDER > 0 THEN
|
|
COMPUTE WRK-HOURS =
|
|
WRK-HOURS + 1
|
|
END-IF.
|
|
*** 分→時間変換
|
|
COMPUTE T01TIMOUT =
|
|
WRK-HOURS * 0.5.
|
|
*
|
|
1000RNDHALF-EXT.
|
|
EXIT.
|
|
*****************************************************************
|
|
* サブモジュールNO: (2.0) *
|
|
* サブモジュール名: 0.1時間単位・切上 *
|
|
* 処理概要 : 6分単位で切り上げる *
|
|
*****************************************************************
|
|
2000RNDUP SECTION.
|
|
*
|
|
*** 時間→分変換
|
|
COMPUTE WRK-MINUTES =
|
|
T01TIMHRS * 60.
|
|
*** 6分単位で切り上げ
|
|
DIVIDE WRK-MINUTES BY 6
|
|
GIVING WRK-HOURS
|
|
REMAINDER WRK-REMAINDER.
|
|
IF WRK-REMAINDER > 0 THEN
|
|
COMPUTE WRK-HOURS =
|
|
WRK-HOURS + 1
|
|
END-IF.
|
|
*** 分→時間変換
|
|
COMPUTE T01TIMOUT =
|
|
WRK-HOURS * 0.1.
|
|
*
|
|
2000RNDUP-EXT.
|
|
EXIT.
|
|
*****************************************************************
|
|
* サブモジュールNO: (3.0) *
|
|
* サブモジュール名: 0.1時間単位・切捨 *
|
|
* 処理概要 : 6分単位で切り捨てる *
|
|
*****************************************************************
|
|
3000RNDDOWN SECTION.
|
|
*
|
|
*** 時間→分変換
|
|
COMPUTE WRK-MINUTES =
|
|
T01TIMHRS * 60.
|
|
*** 6分単位で切り捨て
|
|
DIVIDE WRK-MINUTES BY 6
|
|
GIVING WRK-HOURS
|
|
REMAINDER WRK-REMAINDER.
|
|
*** 分→時間変換
|
|
COMPUTE T01TIMOUT =
|
|
WRK-HOURS * 0.1.
|
|
*
|
|
3000RNDDOWN-EXT.
|
|
EXIT.
|
|
*****************************************************************
|
|
* サブモジュールNO: (4.0) *
|
|
* サブモジュール名: 単純四捨五入(0.1h単位) *
|
|
* 処理概要 : 0.05を加算して切捨 *
|
|
*****************************************************************
|
|
4000RNDNORMAL SECTION.
|
|
*
|
|
*** 0.05を加算してV9(1)に収める
|
|
COMPUTE WRK-HOURS =
|
|
T01TIMHRS + 0.05.
|
|
*** V9(1)への代入で小数点第2位以下切捨
|
|
MOVE WRK-HOURS TO T01TIMOUT.
|
|
*
|
|
4000RNDNORMAL-EXT.
|
|
EXIT.
|