2014-01-22 2 views
0

안녕하세요 stackoverflow 사람들과 나는 여기에 행복 해요. 저는 2 학년 이후 거의 모든 프로그래밍 과목에서 매우 약한 배경을 가진 졸업생입니다.COBOL74 - 실행 컴퓨팅 코드

나는 COBOL에서의 계산과 관련이 있고 오류가 발견되지 않았지만 프로그램을 실행할 수 없었습니다.

각 직원에 대한 정보를 인쇄하는 프로그램을 작성하십시오. 문제 정의는 다음과 같습니다 참고 :

  • 을 수행합니다. 각 직원의 급여는 7 % 증가합니다.
  • b. 노조 회비는 4 % 증가했습니다
  • c. 보험이 3 % 증가했습니다. 회비 및 보험 금액은 실제 소수점과 함께 인쇄되어야합니다.
    • 직원 NO 진수 점

    필드/필드 크기/종류/수. - SIZE 5 - ALPHANUMERIC

  • 직원 이름 - SIZE 20 - ALPHANUMERIC
  • UNUSED - SIZE 4 - ALPHANUMERIC
  • 연봉 - SIZE 6 - NUMERIC - 0 된 소수점
  • UNUSED WITH - SIZE 13 - ALPHANUMERIC
  • 조합비 - SIZE 5 - NUMERIC - 소수점 이하 2 POINTS WITH
  • 보험 - SIZE 5 - NUMERIC - 소수점 이하 2 점
  • UNUSED WITH - SIZE 22 - ALPHANUMERIC
012,

희망을 보내주세요. :(이 내 코드는

IDENTIFICATION DIVISION. 
    PROGRAM-ID. EXP2. 
    ENVIRONMENT DIVISION. 
    INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 
     SELECT IN-EMP-FILE ASSIGN TO DISK 
     ORGANIZATION IS LINE SEQUENTIAL. 
     SELECT OUT-PAYROLL-FILE ASSIGN TO DISK 
     ORGANIZATION IS LINE SEQUENTIAL. 

    DATA DIVISION. 
    FILE SECTION. 

    FD IN-EMP-FILE 
     LABEL RECORDS ARE STANDARD 
     RECORD CONTAINS 80 CHARACTERS 
     VALUE OF FILE-ID IS "INPUTEMP.TXT" 
     DATA RECORD IS IN-EMP-REC. 
    01 IN-EMP-REC. 
     05 IN-EMP-NUM  PIC X(5). 
     05 IN-EMP-NAME  PIC X(20). 
     05 UN1    PIC X(4). 
     05 IN-SAL   PIC 9(6). 
     05 UN2    PIC X(13). 
     05 IN-UNI   PIC 9(5). 
     05 IN-INS   PIC 9(5). 
     05 UN3    PIC X(22). 


    FD OUT-PAYROLL-FILE 
     LABEL RECORDS ARE STANDARD 
     RECORD CONTAINS 400 CHARACTERS 
     VALUE OF FILE-ID IS "PAYROLL.TXT" 
     DATA RECORD IS PRINT-REC. 

    01 PRINT-REC PIC X(400).  

    WORKING-STORAGE SECTION. 

    01 WS-WORK-AREAS. 
     05 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'. 
     05 U PIC 9(5)v99. 
     05 I PIC 9(5)v99. 
     05 WS-DATE. 
      10 WS-YEAR PIC 99. 
      10 WS-MONTH PIC 99. 
      10 WS-DAY PIC 99. 

    01 OUT-HDR1. 
     05 FILLER PIC X(30) 
     VALUE 'PAYROLL'. 
     05 FILLER PIC X(6) 
     VALUE 'DATE'. 
     05 OUT-MONTH PIC XX. 
     05 FILLER PIC X VALUE '/'. 
     05 OUT-DAY PIC XX. 
     05 FILLER PIC X VALUE '/'. 
     05 OUT-YEAR PIC XX. 



    01 OUT-HDR2. 
     05 FILLER PIC X(30). 
     05 FILLER PIC X(30) 
     VALUE 'PAYROLL FILE'. 

    01 OUT-HDR3. 

     05 FILLER PIC X(15) 
     VALUE 'ACCT NO.'. 
     05 FILLER PIC X(30) 
     VALUE 'NAME OF EMPLOYEE'. 
     05 FILLER PIC X(19) 
     VALUE 'OLD SALARY'. 
     05 FILLER PIC X(15) 
     VALUE 'NEW SALARY'. 
     05 FILLER PIC X(10) 
     VALUE 'OLD DUES'. 
     05 FILLER PIC X(10) 
     VALUE 'NEW DUES'. 
     05 FILLER PIC X(20) 
     VALUE 'OLD INSUR'. 
     05 FILLER PIC X(10) 
     VALUE 'NEW INSUR'. 



    01 OUT-PAYROLL-REC.  
     05 OUT-EMP-NUM  PIC X(5). 
     05 FILLER   PIC X(10). 
     05 OUT-EMP-NAME  PIC X(20). 
     05 FILLER   PIC X(4). 
     05 OUT-SAL   PIC Z(6). 
     05 FILLER   PIC X(20). 
     05 OUT-NSAL   PIC Z(6). 
     05 FILLER   PIC X(20). 
     05 OUT-UNI   PIC Z(5). 
     05 FILLER   PIC X(10). 
     05 OUT-NUNI   PIC Z(5).99. 
     05 FILLER   PIC X(10). 
     05 OUT-INS   PIC Z(5). 
     05 FILLER   PIC X(15). 
     05 OUT-NINS   PIC Z(5).99. 
     05 FILLER   PIC X(20). 


    PROCEDURE DIVISION. 
    100-MAIN-MODULE. 
     OPEN INPUT IN-EMP-FILE 
     OUTPUT OUT-PAYROLL-FILE. 



     ACCEPT WS-DATE FROM DATE. 
     MOVE WS-MONTH TO OUT-MONTH. 
     MOVE WS-DAY TO OUT-DAY. 
     MOVE WS-YEAR TO OUT-YEAR. 

     WRITE PRINT-REC FROM OUT-HDR1. 
     WRITE PRINT-REC FROM OUT-HDR2. 
     WRITE PRINT-REC FROM OUT-HDR3. 

     READ IN-EMP-FILE 
     AT END MOVE 'NO' TO ARE-THERE-MORE-RECORDS. 
     PERFORM 200-CALC-RTN UNTIL ARE-THERE-MORE-RECORDS = 'NO'. 
     CLOSE IN-EMP-FILE 
     CLOSE OUT-PAYROLL-FILE. 

     STOP RUN. 

    200-CALC-RTN. 

     MOVE IN-EMP-NUM TO OUT-EMP-NUM. 
     MOVE IN-EMP-NAME TO OUT-EMP-NAME. 
     MOVE IN-SAL TO OUT-SAL. 
     COMPUTE IN-SAL = IN-SAL + IN-SAL * .07. 
     MOVE IN-SAL TO OUT-NSAL. 
     MOVE IN-UNI TO OUT-UNI. 
     COMPUTE U = IN-UNI + (IN-UNI * .04). 
     MOVE U TO OUT-NUNI. 
     MOVE IN-INS TO OUT-INS. 
     COMPUTE I = IN-INS + IN-INS * .03. 
     MOVE I TO OUT-NINS. 




     WRITE PRINT-REC FROM OUT-PAYROLL-REC. 

     READ IN-EMP-FILE 
     AT END MOVE 'NO' TO ARE-THERE-MORE-RECORDS. 
+2

무엇이 당신의 질문입니까? 어떤 어려움을 겪고 있습니까? –

답변

3

우선이다 (나는 .txtfile을 가지고 가정) BTW, 당신은 당신이 txtfile가 있다고 가정하지, 또는, 당신은 다른 확인합니다. 당신은 확인해야합니다 모든 IO 작동을 위해 파일 상태 코드.이

. 리터럴 조건을 88 레벨 오타에 대한 명확하고 더 쉽게 유지 보수, 적은 경향이 사용

. 파일 상태 정의를 포함하는 SELECT 문을 개정 의미 당신이 사용하는 "priming read"(파일의 나머지 부분을 읽는 루프에 들어가기 전에 파일을 읽는 것)는 좋지만 RE를 넣을 수 있습니다 AD를 단락/SECTION에 넣고 실행하면 중복 된 코드가 없으므로 멋진 이름을 사용할 수 있습니다.

당신은 COBOL-74를 진술 했으므로 각 줄의 끝에서 완전 정지/마침표를 제거 할 수 없으므로 그대로 두겠습니다.

데이터 이름을 의미 있고 이해하기 쉽게 작성해야합니다. NewSalary = OldSalary + (OldSalary * SalaryHike)조차도 당신보다 훨씬 뚜렷합니다.

인쇄 할 수있는 소수점 이하 자릿수는 잘못된 크기입니다. 귀하의 정의는 8 바이트를 차지하고 당신은 5를 사용해야합니다. 소수점 두 자리와 소수점이 있으므로이 모든 것이 필요하므로 무엇을해야할지 생각할 수 있어야합니다.

COMPUTE에는 괄호/괄호가 혼합되어 있습니다. 모든 것을 괄호로 묶으십시오. 그런 다음 프로그램을 보는 다음 사람에게 당신의 의도가 명확합니다 (이 경우, 당신의 일을 채점하는 사람).

보고하는 경우 파일에 레코드를 쓰는 것으로 충분하지 않을 수 있습니다. 새 페이지마다 새로운 표제가 있어야합니다.

계산 된 결과를 "반올림"하지 않으려면 하위 소수점이 잘릴 수 있습니다. ROUNDED를 사용하는 방법을 찾아야합니다.

200-CALC-RTN이 (가) 이미 파일을 읽었습니다. 이름을 더 잘 어울리게하십시오.

댓글을 달았 기 때문에 실제 문제가 무엇인지 알아야합니다.