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.
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);
}
}