프로그램의 용도는 JULIAN DATE 비슷한것 ㅠㅠ(이왕이면 JULIAN DATE를 짜던가 퍽!)
78901234567890123456789012345678901234567890123456789012345678901234567890
*---------------------------------------------------------
IDENTIFICATION DIVISION.
PROGRAM-ID. JULDATE.
*---------------------------------------------------------
ENVIRONMENT DIVISION.
*---------------------------------------------------------
DATA DIVISION.
WORKING-STORAGE SECTION.
77 WK-MOK PIC 9(4) VALUE ZERO.
77 WK-NAM PIC 9(2) VALUE ZERO.
77 WK-II PIC 9(2) VALUE ZERO.
01 WK-DATE.
10 WK-YYYY PIC 9(4) VALUE ZERO.
10 WK-MM PIC 9(2) VALUE ZERO.
10 WK-DD PIC 9(2) VALUE ZERO.
01 WK-MM1 OCCURS 12.
10 MON-DAY PIC 9(2).
LINKAGE SECTION.
01 DATE-INPUT.
10 IN-YYYY PIC 9(4).
10 IN-MM PIC 9(2).
10 IN-DD PIC 9(2).
01 JLAN-OUTPUT.
10 RESULT.
20 RE-YYYY PIC 9(4) VALUE ZERO.
20 RE-JULIAN PIC 9(3) VALUE ZERO.
10 CHECK PIC X(1) VALUE SPACE.
10 ERRMSG PIC X(30) VALUE SPACE.
*---------------------------------------------------------
PROCEDURE DIVISION USING DATE-INPUT JLAN-OUTPUT.
00000-JULDATE-START.
PERFORM 10000-STR.
PERFORM 20000-MID.
PERFORM 30000-END.
*---------------------------------------------------------
10000-STR.
MOVE IN-YYYY TO WK-YYYY.
MOVE IN-MM TO WK-MM.
MOVE IN-DD TO WK-DD.
MOVE ZERO TO RESULT.
MOVE SPACE TO CHECK.
MOVE SPACE TO ERRMSG.
* 월의 최대 날짜
MOVE 31 TO MON-DAY(01).
MOVE 28 TO MON-DAY(02).
MOVE 31 TO MON-DAY(03).
MOVE 30 TO MON-DAY(04).
MOVE 31 TO MON-DAY(05).
MOVE 30 TO MON-DAY(06).
MOVE 31 TO MON-DAY(07).
MOVE 31 TO MON-DAY(08).
MOVE 30 TO MON-DAY(09).
MOVE 31 TO MON-DAY(10).
MOVE 30 TO MON-DAY(11).
MOVE 31 TO MON-DAY(12).
* 2월달 윤달체크
DIVIDE WK-YYYY BY 4 GIVING WK-MOK
REMAINDER WK-NAM.
IF WK-NAM = 0
MOVE 29 TO MON-DAY(2)
END-IF.
DIVIDE WK-YYYY BY 100 GIVING WK-MOK
REMAINDER WK-NAM.
IF WK-NAM = 0
MOVE 28 TO MON-DAY(2)
END-IF.
DIVIDE WK-YYYY BY 400 GIVING WK-MOK
REMAINDER WK-NAM.
IF WK-NAM = 0
MOVE 29 TO MON-DAY(2)
END-IF.
* 월 체크
IF WK-MM > 12 OR WK-MM < 1 OR WK-MM NOT NUMERIC
MOVE "E" TO CHECK
MOVE "해당 월이 비정상입니다." TO ERRMSG
PERFORM 30000-END
END-IF.
* 날짜 체크
IF WK-DD > MON-DAY(WK-MM) OR WK-DD < 1 OR WK-DD NOT NUMERIC
MOVE "E" TO CHECK
MOVE "해당 날짜가 비정상입니다." TO ERRMSG
PERFORM 30000-END
END-IF.
20000-MID.
MOVE WK-YYYY TO RE-YYYY.
MOVE 0 TO RE-JULIAN.
INITIALIZE WK-II.
PERFORM WK-II FROM 1 BY +1 UNTIL WK-II >= WK-MM
ADD MON-DAY(WK-II) TO RE-JULIAN
END-PERFORM.
ADD WK-DD TO RE-JULIAN.
30000-END.
EXIT PROGRAM.
0 개의 댓글:
댓글 쓰기