그동안 배웠던 디비전 구조, 칼럼 규칙, 파일 제어, 반복/조건문, 서브 프로그램 연동까지 모든 문법을 하나로 총망라하여 실제 현업 배치(Batch) 프로그램과 동일한 종합 성적 처리 시스템을 최종 완성해 본다.
🟦 1. 전체 아키텍처 및 메인 프로그램 (SCOREMGT.CBL)
외부 학생 명부 파일(input_names.txt)을 읽어와 가상의 성적 연산을 수행하고, 학점 판별 및 가독성 소수점 처리를 거쳐 최종 성적표 파일(report_out.txt)을 만들어내는 거대한 메인 프로세스 빌드 단계임.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
IDENTIFICATION DIVISION.
PROGRAM-ID. SCOREMGT.
* =================================================================
* [최종화] 모든 디비전과 섹션을 조합한 토탈 종합 프로젝트 시스템 코딩
* =================================================================
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* [장치 연결] 입력 파일과 최종 결과 리포트 파일 매핑 (B영역 시작)
SELECT STUDENT-FILE ASSIGN TO "input_names.txt".
SELECT REPORT-FILE ASSIGN TO "report_out.txt".
DATA DIVISION.
FILE SECTION.
FD STUD STUDENT-FILE.
01 STUD-RECORD.
* [B영역] 외부 파일에서 읽어올 10바이트 크기의 학생 이름 변수
05 STU-NAME PIC X(10).
FD REPORT-FILE.
01 RPT-RECORD.
* [B영역] 성적표 파일에 기록될 최종 한 줄의 버퍼 레이아웃 정의
05 RPT-LINE PIC X(60).
WORKING-STORAGE SECTION.
* =================================================================
* [메인 메모리 설계] 연산 변수, 상태 스위치, 출력 마스크 버퍼 총집합
* =================================================================
01 SYSTEM-SWITCHES.
05 EOF-SW PIC X(01) VALUE "N".
88 END-OF-FILE VALUE "Y".
01 SCORE-VARIABLES.
05 KOR-SCORE PIC 9(03) VALUE 095.
05 ENG-SCORE PIC 9(03) VALUE 080.
05 MAT-SCORE PIC 9(03) VALUE 090.
05 TOTAL-SUM PIC 9(04) VALUE ZERO.
05 AVG-CALC PIC 9(03)V99 VALUE ZERO.
01 SUB-MOD-BLOCK.
* [모듈 전송용] 서브 프로그램에 던져서 판별해 올 결과 공유 변수
05 SUB-INPUT-AVG PIC 9(03)V99 VALUE ZERO.
05 SUB-OUT-GRADE PIC X(01) VALUE SPACE.
01 PRINT-FORMATS.
* [출력 마스크 변수] 소수점 형식을 맞추고 맨 앞자리 0은 공백 처리함
05 AVG-PRINT PIC ZZ9.99.
01 STRING-OUTPUT-BUFFER.
* [문자열 결합 버퍼] 한 줄의 텍스트 리포트를 조립할 임시 보관소
05 BUFF-NAME PIC X(10).
05 BUFF-AVG PIC X(06).
05 BUFF-GRADE PIC X(01).
PROCEDURE DIVISION.
MAIN-LOGIC SECTION.
A000-START.
DISPLAY "--- SCORE MANAGEMENT BATCH START ---".
* [파일 개방] 대량 처리를 위해 입출력 통로를 열어줌
OPEN INPUT STUDENT-FILE.
OPEN OUTPUT REPORT-FILE.
* [첫 줄 데이터 적재] 루프 진입 전 프리 오픈 READ 수행
READ STUDENT-FILE
AT END SET END-OF-FILE TO TRUE
END-READ.
* -------------------------------------------------------------
* [대량 배치 루프] 파일 끝까지 반복 회전 제어 실행 (PERFORM UNTIL)
* -------------------------------------------------------------
PERFORM UNTIL END-OF-FILE
* [1단계: 사칙 연산] 국영수 총점 및 평균 계산
COMPUTE TOTAL-SUM = KOR-SCORE + ENG-SCORE + MAT-SCORE
COMPUTE AVG-CALC = TOTAL-SUM / 3
* [2단계: 서브 모듈 호출] 평균 데이터를 던져서 학점(A~F) 받아오기
MOVE AVG-CALC TO SUB-INPUT-AVG
CALL "GRADEMOD" USING SUB-MOD-BLOCK
* [3단계: 소수점 마스크 변환] 가상 소수점을 실제 화면용 점으로 포맷팅
MOVE AVG-CALC TO AVG-PRINT
* [4단계: 리포트 문자열 조립] STRING 구문으로 한 줄의 라인 생성
MOVE STU-NAME TO BUFF-NAME
MOVE AVG-PRINT TO BUFF-AVG
MOVE SUB-OUT-GRADE TO BUFF-GRADE
STRING "NAME:" DELIMITED BY SIZE
BUFF-NAME DELIMITED BY SIZE
" AVG:" DELIMITED BY SIZE
BUFF-AVG DELIMITED BY SIZE
" GRADE:" DELIMITED BY SIZE
BUFF-GRADE DELIMITED BY SIZE
INTO RPT-LINE
END-STRING
* [5단계: 파일 기록] 조립 완료된 리포트 레코드를 결과 파일에 저장
WRITE RPT-RECORD
* [가상 데이터 변경 및 다음 줄 읽기] 연속 처리를 위한 변수 차감 및 READ
COMPUTE KOR-SCORE = KOR-SCORE - 5
READ STUDENT-FILE
AT END SET END-OF-FILE TO TRUE
END-READ
END-PERFORM.
* [자원 반납] 안전하게 파일을 닫고 프로세스를 파괴함
CLOSE STUDENT-FILE.
CLOSE REPORT-FILE.
DISPLAY "--- SCORE MANAGEMENT BATCH END ---".
STOP RUN.
🟪 2. 공통 학점 계산 서브 모듈 프로그램 (GRADEMOD.CBL)
메인 프로그램의 통제를 받아 평균 점수를 수신한 뒤, EVALUATE 다중 조건문으로 정밀하게 등급 학점을 평가하여 돌려주는 공통 서브 연산 유닛 코드임.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
IDENTIFICATION DIVISION.
PROGRAM-ID. GRADEMOD.
DATA DIVISION.
LINKAGE SECTION.
* =================================================================
* [연결 저장소] 메인과 주소 영역을 공유할 파라미터 구조체 동기화 선언 (8칸)
* =================================================================
01 LINK-MOD-BLOCK.
05 LNK-AVG PIC 9(03)V99.
05 LNK-GRADE PIC X(01).
* =================================================================
* [인터페이스 개방] 디비전 선언부 우측에 USING 매핑 변수를 적어줌 (8칸)
* =================================================================
PROCEDURE DIVISION USING LINK-MOD-BLOCK.
SUB-LOGIC SECTION.
B000-EVAL-PROCESS.
* -------------------------------------------------------------
* [다중 복합 조건문] 중첩 IF 없이 가독성 높게 범위를 지정하여 학점 판별
* -------------------------------------------------------------
EVALUATE LNK-AVG
WHEN 90.00 THRU 100.00
MOVE "A" TO LNK-GRADE
WHEN 80.00 THRU 89.99
MOVE "B" TO LNK-GRADE
WHEN 70.00 THRU 79.99
MOVE "C" TO LNK-GRADE
WHEN OTHER
MOVE "F" TO LNK-GRADE
END-EVALUATE.
* -------------------------------------------------------------
* [프로세스 반환] 제어권을 메인 프로그램으로 양도하며 리턴함 (12칸 시작)
* -------------------------------------------------------------
EXIT PROGRAM.
💡 [최종화 총정리] 코볼 대규모 배치를 관통하는 3대 아키텍처 규칙
이 종합 프로젝트에 담긴 코볼 비즈니스 로직의 설계 사상은 현대 대용량 금융/제조 시스템 백엔드 프레임워크와 정확히 일치함.
- 스트림형 데이터 루프(Looping)
- 대량 데이터를 처리할 때는 메모리 과부하를 막기 위해 파일을 처음부터 끝까지 한 줄씩 READ -> 가공 -> WRITE 순으로 밀어내는 흐름이 기본 원칙임.
- 비즈니스 로직의 공통 모듈화(Decoupling)
- 화면 출력 및 파일 제어는 메인(MAINPROG)이 전담하고, 세금 계산이나 신용 등급 산출 같은 순수 수학적 비즈니스 연산은 서브 모듈(SUBPROG)로 완벽히 격리하여 유지보수 효율성을 극대화함.
- 가독성(Formatting)의 분리
- 컴퓨터가 덧셈 뺄셈 연산을 수행하는 변수(PIC 9V99)와 실제 최종 사용자가 모니터나 영수증으로 읽는 변수(PIC ZZ9.99)를 이원화하여 선언 및 변환 매핑 처리를 수행함.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 알고리즘 2편: 피보나치 수열과 팩토리얼 계산 COBOL code (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 알고리즘 1편: 1에서 100까지 합 구하기 기본 COBOL code (0) | 2026.06.22 |
| [COBOL 기초] 특수 제어문(STRING, EVALUATE)으로 가독성을 높이는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 서브 프로그램 호출(CALL ~ USING)과 데이터 연동 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 대량 데이터 정렬(SORT)과 병합(MERGE) 처리를 위한 COBOL code 작성법 (0) | 2026.06.22 |