Initial import: 子系统B 前三本程序 production 资源

This commit is contained in:
qiuqiuqiu
2026-06-15 08:12:54 +08:00
commit 9813dd7772
26 changed files with 2655 additions and 0 deletions
+153
View File
@@ -0,0 +1,153 @@
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.
*
01 T01TIMPAR.
03 T01TIMHRS PIC 9(004)V9(001).
03 T01TIMOUT PIC 9(004)V9(001).
03 T01TIMRRC PIC 9(004).
*
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.