본문 바로가기
프로그래밍/RM-COBOL

[COBOL 기초] 종합 프로젝트: 실전 성적 시스템 구축으로 마스터하는 COBOL code

by 오!쎈세! 2026. 6. 22.
그동안 배웠던 디비전 구조, 칼럼 규칙, 파일 제어, 반복/조건문, 서브 프로그램 연동까지 모든 문법을 하나로 총망라하여 실제 현업 배치(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대 아키텍처 규칙
이 종합 프로젝트에 담긴 코볼 비즈니스 로직의 설계 사상은 현대 대용량 금융/제조 시스템 백엔드 프레임워크와 정확히 일치함.
  1. 스트림형 데이터 루프(Looping)
    • 대량 데이터를 처리할 때는 메모리 과부하를 막기 위해 파일을 처음부터 끝까지 한 줄씩 READ -> 가공 -> WRITE 순으로 밀어내는 흐름이 기본 원칙임.
  2. 비즈니스 로직의 공통 모듈화(Decoupling)
    • 화면 출력 및 파일 제어는 메인(MAINPROG)이 전담하고, 세금 계산이나 신용 등급 산출 같은 순수 수학적 비즈니스 연산은 서브 모듈(SUBPROG)로 완벽히 격리하여 유지보수 효율성을 극대화함.
  3. 가독성(Formatting)의 분리
    • 컴퓨터가 덧셈 뺄셈 연산을 수행하는 변수(PIC 9V99)와 실제 최종 사용자가 모니터나 영수증으로 읽는 변수(PIC ZZ9.99)를 이원화하여 선언 및 변환 매핑 처리를 수행함.