Program In \'\'COBOL COBOL COBOL COBOL\'\' For this assignment you will produce
ID: 3690562 • Letter: P
Question
Program In ''COBOL COBOL COBOL COBOL''
For this assignment you will produce a sequential maintenance program using techniques similar to those in SS3. You are given two files, a "master" file with dealer information called Account-Master-File-In.txt with record specification of:
01 ACCOUNT-MASTER-RECORD.
05 OM-ACCOUNT-NUMBER PIC X(05).
05 OM-ACCOUNT-NAME PIC X(20).
05 OM-DATE-OF-LAST-DEPOSIT PIC X(8).
05 OM-ACCOUNT-BALANCE PIC S9(6)V99.
and a transaction file called Transaction-File-In.txt with record specification of:
01 MAINTENANCE-TRANSACTION-RECORD.
05 MT-TRANSACTION-CODE PIC X.
88 MT-NEW-ACCOUNT VALUE "1".
88 MT-DEPOSIT VALUE "2".
88 MT-WITHDRAWAL VALUE "3".
88 MT-NAME-CHANGE VALUE "4".
88 MT-DELETION VALUE "5".
05 MT-ACCOUNT-NUMBER PIC X(5).
05 MT-DEPOSIT-AMOUNT PIC 9(6)v99.
05 MT-WITHDRAWAL-AMOUNT
REDEFINES MT-DEPOSIT-AMOUNT
PIC 9(6)V99.
05 MT-DEPOSITOR-NAME-FOR-ADD PIC X(20).
88 MT-DEPOSITOR-NAME-MISSING VALUE SPACES.
01 NAME-CHANGE-RECORD
REDEFINES MAINTENANCE-TRANSACTION-RECORD.
05 PIC X(6).
05 MT-DEPOSITOR-NEW-NAME PIC X(20).
05 PIC X(8).
Your task is to apply the transactions in the transaction file Transaction-File-In.txt to produce a "new master" called Account-Master-File-Out.txt. Error transactions
should be copied intact to Error-File.txt.
You should use the posted sequential maintenance cobol file discussed in the slides for all "control" needed. You should use the same name for switches and the control variables.
One change is required in the "control" part of the program in the slides. You should detect when multiple adds for the same record are attempted. Examination of the old master will reveal that this occurs for record 371.
With the exception of the multiple add detection, the only modification you should make is in the data manipulation part of the program.
Note that the Maintenance-Transaction-Record has "formats", i.e. the record can have multiple structures depending on the type of transaction record it is. There are 5 types of transactions:
adding an account (MT-TRANSACTION-CODE = 1)
deposit into an account (MT-TRANSACTION-CODE = 2)
withdrawal from an account (MT-TRANSACTION-CODE = 3)
changing the name on an account (MT-TRANSACTION-CODE = 4)
deleting an account (MT-TRANSACTION-CODE = 5)
All of the formats have MT-TRANSACTION-CODE and MT-ACCOUNT-NUMBER.
For deposits, the amount deposited is MT-DEPOSIT-AMOUNT.
The REDEFINES MT-DEPOSIT-AMOUNT redefines the storage space for MT-DEPOSIT-AMOUNT to be called MT-WITHDRAWAL-AMOUNT when the transaction is a withdrawal.
The MT-DEPOSITOR-FOR-ADD is present only for an add transaction, otherwise it is spaces (because the name for the account does not change for a deposit or withdrawal).
If the transaction is a name change, then the storage space beyond the transaction code and account number becomes the new name associated with an existing account. 8 spaces is added after the new name to make the record size 34 characters. This is indicated by NAME-CHANGE-RECORD which redefines the entire (34 characters) of the MAINTENANCE-TRANSACTION-RECORD.
Note that all formats end up being 34 characters total.
Note that in the context of the terminology used in the slides, deposits, withdrawals, and name changes are all "changes", adding an account is an "add", and deleting an account is a "delete".
Note also, that a withdrawal may end up causing an account to have a negative balance. This will cause strange characters to be printed for the last digit of the balance in the output file because the negative sign is stored in the same byte as the last digit.
Account-Master-File-In.txt
Transaction-File-In.txt
IDENTIFICATION DIVISION.
PROGRAM-ID. FILEMNT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MNTTRAN ASSIGN TO "MNTTRAN.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OLDMAST ASSIGN TO "OLDMAST.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT NEWMAST ASSIGN TO "NEWMAST.DAT"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS NEWMAST-FILE-STATUS.
SELECT ERRTRAN ASSIGN TO "ERRTRAN.DAT"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS ERRTRAN-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD MNTTRAN.
01 TRANSACTION-RECORD PIC X(61).
FD OLDMAST.
01 OLD-MASTER-RECORD PIC X(70).
FD NEWMAST.
01 NEW-MASTER-RECORD.
05 NM-ITEM-NO PIC X(5).
05 NM-DESCRIPTIVE-DATA.
10 NM-ITEM-DESC PIC X(40).
10 NM-UNIT-COST PIC S9(3)V99.
10 NM-UNIT-PRICE PIC S9(3)V99.
05 NM-INVENTORY-DATA.
10 NM-REORDER-POINT PIC S9(5).
10 NM-ON-HAND PIC S9(5).
10 NM-ON-ORDER PIC S9(5).
FD ERRTRAN.
01 ERROR-TRANSACTION PIC X(61).
WORKING-STORAGE SECTION.
01 SWITCHES.
05 ALL-RECORDS-PROCESSED-SWITCH PIC X VALUE "N".
88 ALL-RECORDS-PROCESSED VALUE "Y".
05 NEED-TRANSACTION-SWITCH PIC X VALUE "Y".
88 NEED-TRANSACTION VALUE "Y".
05 NEED-MASTER-SWITCH PIC X VALUE "Y".
88 NEED-MASTER VALUE "Y".
05 WRITE-MASTER-SWITCH PIC X VALUE "N".
88 WRITE-MASTER VALUE "Y".
01 FILE-STATUS-FIELDS.
05 NEWMAST-FILE-STATUS PIC XX.
88 NEWMAST-SUCCESSFUL VALUE "00".
05 ERRTRAN-FILE-STATUS PIC XX.
88 ERRTRAN-SUCCESSFUL VALUE "00".
01 MAINTENANCE-TRANSACTION.
05 MT-TRANSACTION-CODE PIC X.
88 DELETE-RECORD VALUE "1".
88 ADD-RECORD VALUE "2".
88 CHANGE-RECORD VALUE "3".
05 MT-MASTER-DATA.
10 MT-ITEM-NO PIC X(5).
10 MT-ITEM-DESC PIC X(40).
10 MT-UNIT-COST PIC S9(3)V99.
10 MT-UNIT-PRICE PIC S9(3)V99.
10 MT-REORDER-POINT PIC S9(5).
01 INVENTORY-MASTER-RECORD.
05 IM-ITEM-NO PIC X(5).
05 IM-DESCRIPTIVE-DATA.
10 IM-ITEM-DESC PIC X(40).
10 IM-UNIT-COST PIC S9(3)V99.
10 IM-UNIT-PRICE PIC S9(3)V99.
05 IM-INVENTORY-DATA.
10 IM-REORDER-POINT PIC S9(5).
10 IM-ON-HAND PIC S9(5).
10 IM-ON-ORDER PIC S9(5).
PROCEDURE DIVISION.
000-MAINTAIN-INVENTORY-FILE.
OPEN INPUT OLDMAST
MNTTRAN
OUTPUT NEWMAST
ERRTRAN.
PERFORM 300-MAINTAIN-INVENTORY-RECORD
UNTIL ALL-RECORDS-PROCESSED.
CLOSE MNTTRAN
OLDMAST
NEWMAST
ERRTRAN.
STOP RUN.
300-MAINTAIN-INVENTORY-RECORD.
IF NEED-TRANSACTION
PERFORM 310-READ-INVENTORY-TRANSACTION
MOVE "N" TO NEED-TRANSACTION-SWITCH.
IF NEED-MASTER
PERFORM 320-READ-OLD-MASTER
MOVE "N" TO NEED-MASTER-SWITCH.
PERFORM 330-MATCH-MASTER-TRAN.
IF WRITE-MASTER
PERFORM 340-WRITE-NEW-MASTER
MOVE "N" TO WRITE-MASTER-SWITCH.
310-READ-INVENTORY-TRANSACTION.
READ MNTTRAN INTO MAINTENANCE-TRANSACTION
AT END
MOVE HIGH-VALUE TO MT-ITEM-NO.
320-READ-OLD-MASTER.
READ OLDMAST INTO INVENTORY-MASTER-RECORD
AT END
MOVE HIGH-VALUE TO IM-ITEM-NO.
330-MATCH-MASTER-TRAN.
IF IM-ITEM-NO > MT-ITEM-NO
PERFORM 350-PROCESS-HI-MASTER
ELSE IF IM-ITEM-NO < MT-ITEM-NO
PERFORM 360-PROCESS-LO-MASTER
ELSE
PERFORM 370-PROCESS-MAST-TRAN-EQUAL.
340-WRITE-NEW-MASTER.
WRITE NEW-MASTER-RECORD.
IF NOT NEWMAST-SUCCESSFUL
DISPLAY "WRITE ERROR ON NEWMAST FOR ITEM NUMBER "
IM-ITEM-NO
DISPLAY "FILE STATUS CODE IS " NEWMAST-FILE-STATUS
SET ALL-RECORDS-PROCESSED TO TRUE.
350-PROCESS-HI-MASTER.
IF ADD-RECORD
PERFORM 380-APPLY-ADD-TRANSACTION
ELSE
PERFORM 390-WRITE-ERROR-TRANSACTION.
360-PROCESS-LO-MASTER.
MOVE INVENTORY-MASTER-RECORD TO NEW-MASTER-RECORD.
SET WRITE-MASTER TO TRUE.
SET NEED-MASTER TO TRUE.
370-PROCESS-MAST-TRAN-EQUAL.
IF IM-ITEM-NO = HIGH-VALUES
SET ALL-RECORDS-PROCESSED TO TRUE
ELSE
IF DELETE-RECORD
PERFORM 400-APPLY-DELETE-TRANSACTION
ELSE
IF CHANGE-RECORD
PERFORM 410-APPLY-CHANGE-TRANSACTION
ELSE
PERFORM 390-WRITE-ERROR-TRANSACTION.
380-APPLY-ADD-TRANSACTION.
MOVE MT-ITEM-NO TO NM-ITEM-NO.
MOVE MT-ITEM-DESC TO NM-ITEM-DESC.
MOVE MT-UNIT-COST TO NM-UNIT-COST.
MOVE MT-UNIT-PRICE TO NM-UNIT-PRICE.
MOVE MT-REORDER-POINT TO NM-REORDER-POINT.
MOVE ZERO TO NM-ON-HAND
NM-ON-ORDER.
SET WRITE-MASTER TO TRUE.
SET NEED-TRANSACTION TO TRUE.
390-WRITE-ERROR-TRANSACTION.
WRITE ERROR-TRANSACTION FROM MAINTENANCE-TRANSACTION.
IF NOT ERRTRAN-SUCCESSFUL
DISPLAY "WRITE ERROR ON ERRTRAN FOR ITEM NUMBER "
MT-ITEM-NO
DISPLAY "FILE STATUS CODE IS " ERRTRAN-FILE-STATUS
SET ALL-RECORDS-PROCESSED TO TRUE
ELSE
SET NEED-TRANSACTION TO TRUE.
400-APPLY-DELETE-TRANSACTION.
SET NEED-MASTER TO TRUE.
SET NEED-TRANSACTION TO TRUE.
410-APPLY-CHANGE-TRANSACTION.
IF MT-ITEM-DESC NOT = SPACE
MOVE MT-ITEM-DESC TO IM-ITEM-DESC.
IF MT-UNIT-COST NOT = ZERO
MOVE MT-UNIT-COST TO IM-UNIT-COST.
IF MT-UNIT-PRICE NOT = ZERO
MOVE MT-UNIT-PRICE TO IM-UNIT-PRICE.
IF MT-REORDER-POINT NOT = ZERO
MOVE MT-REORDER-POINT TO IM-REORDER-POINT.
SET NEED-TRANSACTION TO TRUE.
Explanation / Answer
01 ACCOUNT-MASTER-RECORD.
05 OM-ACCOUNT-NUMBER PIC X(05).
05 OM-ACCOUNT-NAME PIC X(20).
05 OM-DATE-OF-LAST-DEPOSIT PIC X(8).
05 OM-ACCOUNT-BALANCE PIC S9(6)V99.
05 MT-TRANSACTION-CODE PIC X.
88 MT-NEW-ACCOUNT VALUE "1".
88 MT-DEPOSIT VALUE "2".
88 MT-WITHDRAWAL VALUE "3".
88 MT-NAME-CHANGE VALUE "4".
88 MT-DELETION VALUE "5".
05 MT-ACCOUNT-NUMBER PIC X(5).
05 MT-DEPOSIT-AMOUNT PIC 9(6)v99.
05 MT-WITHDRAWAL-AMOUNT REDEFINES MT-DEPOSIT-AMOUNT PIC 9(6)V99.
05 MT-DEPOSITOR-NAME-FOR-ADD PIC X(20).
88 MT-DEPOSITOR-NAME-MISSING VALUE SPACES.
01 NAME-CHANGE-RECORD
REDEFINES MAINTENANCE-TRANSACTION-RECORD.
05 PIC X(6).
05 MT-DEPOSITOR-NEW-NAME PIC X(20).
05 PIC X(8).
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.