This page provides a side-by-side comparison of a small COBOL program and the Java code generated by SoftwareMining's COBOL Refactoring tool.
Our primary goal with this example is to showcase the readability and maintainability of the generated code. Please note that this straightforward example does not delve into addressing complex issues like the removal of GO TO statements, elimination of dead code, handling REDEFINEs, CICS, Pointers, and more.
For a comprehensive understanding of addressing these complex challenges, please refer to our guide on Essential Features for Successful COBOL to Java Conversion Projects.
Alternatively, Download and try COBOL to Java Conversion tool to see what your organization's code looks like in Java.
PROGRAM-ID. LOAN. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 WS-DATA. 05 PRINCIPAL PIC 9(9) VALUE 0. 05 INTEREST-RATE PIC 99V99 VALUE 0. 05 LOAN-LENGTH PIC 99 VALUE 0. 05 NEXT-INTEREST PIC 99V99. 05 NEXT-YEAR PIC 99. 01 CLIENT-RECORD. 05 NAME PIC X(20). 05 ADDRESS PIC X(20) OCCURS 3 TIMES. 05 ID PIC 9(4) COMP. ...
// Sample COBOL to Java translated code public class Loan extends BaseService { // Notes: 01 level WS-DATA name is simplified (Optional) // and converted to a DAO // The DAO handles REDEFINES, COMP, OCCURS-DEPENDING, ... private WsData data = new WsData(this); // Client-RECORD has been translated to ClientRecord DAO, // but since the program does not reference ClientRecord, // it will automatically be commented out. // private ClientRecord clientRecord = new ClientRecord(this); ...
* Main entry point to program LOAN-MAIN-001. * - * CLEAR SCREEN AND READ DATA * - IF LOAN-LENGTH > 4 THEN COMPUTE START-YEAR = LOAN-LENGTH - 4 ELSE COMPUTE START-YEAR = 0. IF INTEREST-RATE > 0.4 THEN COMPUTE START-INTEREST = INTEREST-RATE - 0.4 ELSE COMPUTE START-INTEREST = 0 END-IF MOVE 1 TO YEAR-ROW. * - * GO THRU THE NUMBER OF YEARS * - MOVE "% Rate->" TO DSP-NO-YRS(1). MOVE START-YEAR TO NEXT-YEAR PERFORM VARYING YEAR-ROW FROM 2 BY 1 UNTIL YEAR-ROW = 11 PERFORM DO-NEXT-ROW ADD 1 TO NEXT-YEAR END-PERFORM. * - * AND EXIT * - STOP RUN.
/** * Main Entrance to program */ protected void loanMain () { // - // CLEAR SCREEN AND READ DATA // - if (data.getLoanLength() > 4) { data.setStartYear(data.getLoanLength() - 4); } else { data.setStartYear(0); } if (data.getInterestRate() > 0.4) { data.setStartInterest(data.getInterestRate() - 0.4); } else { data.setStartInterest(0.0); } data.setYearRow(1); // - // GO THRU THE NUMBER OF YEARS // - displayResult.setNoYrs(0, "% Rate->"); data.setNextYear(data.getStartYear()); // initialise loop variable data.setYearRow(2); while (data.getYearRow() != 11) { doNextRow (); data.setNextYear(data.getNextYear() + 1); data.setYearRow(data.getYearRow() + 1); } // - // AND EXIT // - stop(); }
* * Calculates values for individual rows * DO-NEXT-ROW. MOVE START-INTEREST TO NEXT-INTEREST PERFORM VARYING INTEREST-COL FROM 1 BY 1 UNTIL INTEREST-COL = 10 MOVE NEXT-INTEREST TO DSP-RESULT(1, INTEREST-COL) PERFORM CALCULATE MOVE NEXT-RESULT TO DSP-RESULT(YEAR-ROW, INTEREST-COL) ADD 0.1 TO NEXT-INTEREST END-PERFORM.
/** * Calculates values for individual rows */ protected void doNextRow () { data.setNextInterest(data.getStartInterest()); data.setInterestCol(1); while (data.getInterestCol() != 10) { displayResult.setResult(0, data.getInterestCol() - 1 , data.getNextInterest()); calculate(); displayResult.setResult(data.getYearRow() - 1 , data.getInterestCol() - 1, data.getNextResult()); data.setNextInterest(data.getNextInterest() + 0.1); data.setInterestCol(data.getInterestCol() + 1); } }
* * The next paragraph calculates CELL values * CALCULATE. COMPUTE INTDEC = NEXT-INTEREST / (12.0 * 100.0) COMPUTE NUMMONTHS = NEXT-YEAR * 12.0 ...
/** * The next paragraph calculates CELL values */ protected void calculate () { data.setIntdec(data.getNextInterest() / (12.0 * 100.0)); data.setNummonths((double)data.getNextYear() * 12.0); ... }
© 2024 SoftwareMining is a trademark of Software Modernization Technologies Ltd (UK). Registered in England company no: 07300248. Reg Offices: 79 Stevens House, Jerome Place, Kingston Upon Thames, KT1 1HX, United Kingdom.