COBOL

       IDENTIFICATION DIVISION.

       PROGRAM-ID. FILES.

       ENVIRONMENT DIVISION.

       INPUT-OUTPUT SECTION.

       FILE-CONTROL.

 

           SELECT PROFILES ASSIGN TO DATA-FILE.

           SELECT WEDDINGS ASSIGN TO WEDDING-FILE

               ORGANIZATION IS SEQUENTIAL.

 

       DATA DIVISION.

       FILE SECTION.

 

       FD PROFILES.

       01 PROFILES-RECORD.

         05 NAME            PIC X(20).

         05 SURNAME         PIC X(20).

         05 MARITAL-STATUS  PIC X(01) VALUE 'M'.

             88 MARRIED    VALUE 'M'.

             88 SINGLE     VALUE 'S'.

 

       FD WEDDINGS.

       01 WEDDINGS-RECORD.

         05 NAME         PIC X(20).

         05 SURNAME      PIC X(20).

 

       WORKING-STORAGE SECTION.

 

       01 END-OF-FILE    PIC X(01) VALUE 'N'.

          88 EOF-Y   VALUE 'Y'.

          88 EOF-N   VALUE 'N'.

       01 MARRIED-PEOPLE PIC 9(5) COMP VALUE '0'.

 

       PROCEDURE DIVISION.

       0100-OPEN-FILES.

      * OPEN PROFILES FILE

           OPEN INPUT PROFILES.

      * OPEN WEDDINGS FILE

           OPEN OUTPUT WEDDINGS.

 

       0200-PROCESS-FILES.

      * READ RECORDS FROM PROFILES FILE AND

      * WRITE THEM INTO THE WEDDING FILE IF MARRIED

           PERFORM UNTIL EOF-Y

             READ PROFILES

                 NEXT RECORD

                 AT END SET EOF-Y TO TRUE

                 NOT AT END

                   IF SINGLE

                      PERFORM 0800-WRITE-WEDDING-RECORD

                      ADD 1 TO MARRIED-PEOPLE

                   END-IF

           END-PERFORM.

      * DISPLAY NUMBER OF MARRIED PEOPLE

           DISPLAY 'MARRIED PEOPLE:' MARRIED-PEOPLE.

 

       0700-CLOSE-FILES.

      * CLOSE FILES

           CLOSE PROFILES.

           CLOSE WEDDINGS.

           GOBACK.

 

       0800-WRITE-WEDDING-RECORD.

           MOVE CORRESPONDING PROFILES-RECORD TO WEDDINGS-RECORD.

           WRITE WEDDINGS-RECORD.

 

Java

package com.bphx.ctu.samples.files;

 

import bphx.ctu.cobol.CalledProgList;

import bphx.ctu.io.OpenMode;

import bphx.ctu.tp.ExecContext;

import bphx.ctu.util.ReturnException;

import bphx.sdf.util.ABOSystem;

 

import com.bphx.ctu.samples.files.data.fao.ProfilesDAO;

import com.bphx.ctu.samples.files.data.fao.WeddingsDAO;

import com.bphx.ctu.samples.files.data.to.ProfilesTO;

import com.bphx.ctu.samples.files.data.to.WeddingsTO;

 

public class Files {

    //==== PROPERTIES ====

    private static final String PROGRAM_ID = "FILES";

    public ProfilesTO profilesTO = new ProfilesTO();

    public ProfilesDAO profilesDAO = new ProfilesDAO();

    public WeddingsTO weddingsTO = new WeddingsTO();

    public WeddingsDAO weddingsDAO = new WeddingsDAO();

    protected boolean endOfFile = false;

    protected int marriedPeople = 0;

 

    //==== CONSTRUCTORS ====

    //==== METHODS ====

    public static Files getInstance() {

        Files iFiles = ((Files) CalledProgList.getInst("FILES"));

        if (iFiles == null) {

            // create an instance if needed

            iFiles = new Files();

            CalledProgList.addInst("FILES", iFiles);

        }

        return iFiles;

    }

 

    public void run(ExecContext execContext, byte[] commarea) {

        run();

    }

 

    public void run() {

        try {

            mainSubroutine();

        } catch (ReturnException re) {

            // normal termination of the program

        }

    }

 

    public static void main(String[] args) {

        getInstance().run();

    }

 

    private void mainSubroutine() {

        openFiles();

        processFiles();

        closeFiles();

    }

 

    private void openFiles() {

        // OPEN PROFILES FILE

        profilesDAO.open(OpenMode.READ, "Files");

        // OPEN WEDDINGS FILE

        weddingsDAO.open(OpenMode.WRITE, "Files");

    }

 

    private void processFiles() {

        // READ RECORDS FROM PROFILES FILE AND

        // WRITE THEM INTO THE WEDDING FILE IF MARRIED

        while (!endOfFile) {

            profilesTO = profilesDAO.read(profilesTO);

            if (profilesTO.getRetCode() == -1) {

                endOfFile = true;

            } else {

                if (profilesTO.maritalStatus.isSingle()) {

                    writeWeddingRecord();

                    marriedPeople = (1 + marriedPeople) % 100000;

                }

            }

        }

        // DISPLAY NUMBER OF MARRIED PEOPLE

        ABOSystem.trace("MARRIED PEOPLE:", marriedPeople);

    }

 

    private void closeFiles() {

        // CLOSE FILES

        profilesDAO.close();

        weddingsDAO.close();

        throw new ReturnException();

    }

 

    private void writeWeddingRecord() {

        weddingsTO.setName(profilesTO.getName());

        weddingsTO.setSurname(profilesTO.getSurname());

        weddingsDAO.write(weddingsTO);

    }

}