identification division.
program-id.
movie-practice.
environment
division.
input-output
section.
file-control.
select
movie-data assign to "moviein.dat"
organization is line sequential.
select
movie-listing assign to "movieout.dat"
organization is line sequential.
data division.
*
file
section.
fd movie-data.
01 movie-record.
05
movie-title-in pic x(18).
05
prod-company-in pic x(12).
05
movie-rating-in pic x(5).
05
date-rel-in pic 9(8).
05
box-office-ratings.
10
box-wk-one-in pic 99.
10
box-wk-two-in pic 99.
10
box-wk-three-in pic 99.
10
box-wk-four-in pic 99.
05 gross-earnings-in pic 9(9)V99.
fd movie-listing.
01 print-rec pic x(90).
*
working-storage section.
77 are-there-more-records pic xxx value "yes".
77 cbval-rating pic x(5) value "nada".
77 num-cb-recs pic 99 value 0.
77 total-box pic 9(5) value 0.
77 total-rating-gross pic 9(11)v99.
77 total-num-movies pic 99 value 0.
01
current-date.
05 cd-yy
pic 99.
05 cd-mm
pic 99.
05 cd-dd
pic 99.
01
current-time.
05 ct-hh
pic 99.
05 ct-mm
pic 99.
05 ct-ss
pic 99.
01 page-header.
05 page-header-date.
10 ph-date-mm pic 99.
10 pic x value
"/".
10 ph-date-dd pic 99.
10 pic x value
"/".
10 ph-date-yy pic 99.
05 pic x(18) value spaces.
05 pic
x(24) value "Mom and Dad's Movie List".
05 pic
x(18) value spaces.
05
page-header-time.
10
ph-time-hh pic 99.
10 pic x value
":".
10 ph-time-mm pic 99.
10 pic x value
":".
10
ph-time-ss pic 99.
10 pic x value space.
10
ph-time-ampm pic xx.
01 column-header1.
05 pic x(5) value spaces.
05 pic
x(19) value spaces.
05 pic
x(13) value "Production".
05 pic
x(11) value "Date".
05 pic
x(31) value "****** At the Box Office ******".
01 column-header2.
05 pic x(5) value spaces.
05 pic
x(11) value "Movie Title".
05 pic
x(8) value spaces.
05 pic
x(7) value "Company".
05 pic
x(6) value spaces.
05 pic
x(8) value "Released".
05 pic
x(3) value spaces.
05 pic
x(16) value "Wk1 Wk2 Wk3 Wk4 ".
05 pic
x(14) value "Gross Earnings".
01 under-line.
05 pic x(5) value spaces.
05 pic
x(11) value all "_".
05 pic
x(8) value spaces.
05 pic
x(7) value all "_".
05 pic
x(6) value spaces.
05 pic
x(8) value all "_".
05 pic
xxx value spaces.
05 pic
x(16) value "___ ___ ___ ___ ".
05 pic
x(14) value all "_".
01 Rating-Label.
05 pic x(8) value
"Rating: ".
05
movie-rating-out pic x(5).
01 Rating-Description.
05 pic x(13) value
"Description: ".
05
rating-desc-out pic x(77).
01 Rating-Description-Messages.
05
g-desc pic x(8) value
"everyone".
05
pg-desc pic x(27) value
"parental guidance suggested".
05
pg13-desc pic x(49) value
"parental guidance for children under 13 suggested".
05
r-desc.
10
r-desc1 pic x(47) value
"restricted; children over 17 years of age only ".
10
r-desc2 pic x(30) value
"unless accompanied by an adult".
01 ws-print-rec.
05 pic x(5) value spaces.
05
movie-title-out pic x(18).
05 pic x value spaces.
05
prod-company-out pic x(12).
05 pic x value spaces.
05
date-rel-out pic xx/xx/xxxx.
* 10 dr-mm-out pic 99.
* 10 pic x value "/".
* 10 dr-dd-out pic 99.
* 10 pic x value "/".
* 10 dr-yyyy-out pic 9999.
05 pic x value space.
05
box-wk-one-out pic z9.
05 pic xx value space.
05
box-wk-two-out pic z9.
05 pic xx value space.
05
box-wk-three-out pic z9.
05 pic xx value space.
05
box-wk-four-out pic z9.
05 pic xx value space.
05
gross-earnings-out pic $$$$,$$$,$$9.99.
01
Average-Rating-Label.
05 pic
x(5) value spaces.
05 pic
x(16) value "Average Rating: ".
05
average-cbnum-rating pic z9.99.
01
Total-CB-Movies-Label.
05 pic
x(5) value spaces.
05 pic
x(24) value "Total Number of Movies: ".
05 total-cbnum-movies pic z9.
01
Total-Gross-Earnings-Label.
05 pic
x(5) value spaces.
05 pic
x(22) value "Total Gross Earnings: ".
05
total-cbnum-earnings pic
$$$,$$$,$$$,$$9.99.
01
Total-file-Movies-Label.
05 pic
x(24) value "Total Number of Movies: ".
05 total-num-movies-out pic z9.
01
High-avg-rate-label.
05 pic
x(48) value
"Movie Category with the highest average rating: ".
05
high-avg-rate-out pic x(5).
77
high-avg-value pic 99v99 value
0.
77
high-avg-rating pic x(5) value
"nada".
77
avg-cbnum-rate pic 99v99.
77
prev-avg-cbnum-rate pic 99v99 value
0.
procedure division.
100-main-module.
open
input movie-data
open
output movie-listing
perform
150-page-header
read
movie-data
at
end
move "no" to are-there-more-records
end-read
if
are-there-more-records = "yes"
move
movie-rating-in to cbval-rating
perform 175-column-headers
end-if
perform
200-movie-routine
until are-there-more-records = "no"
perform
300-rating-totals
move
total-num-movies to total-num-movies-out
write
print-rec from total-file-movies-label
after advancing 2 lines
move high-avg-rating to
high-avg-rate-out
write
print-rec from high-avg-rate-label
after advancing 1 line.
move
"END OF REPORT" to print-rec
write
print-rec after advancing 2 lines
close
movie-data
close
movie-listing
* accept omitted
stop
run.
150-page-header.
accept
current-date from date.
move
cd-yy to ph-date-yy.
move
cd-mm to ph-date-mm.
move
cd-dd to ph-date-dd.
accept
current-time from time.
move
ct-mm to ph-time-mm.
move
ct-ss to ph-time-ss.
if ct-hh
= 0
move
12 to ph-time-hh
move
"AM" to ph-time-ampm
else if
ct-hh < 12
move
ct-hh to ph-time-hh
move
"AM" to ph-time-ampm
else if
ct-hh = 12
move
ct-hh to ph-time-hh
move
"PM" to ph-time-ampm
else
subtract
12 from ct-hh giving ph-time-hh
move
"PM" to ph-time-ampm
end-if.
* if no
period above, does not print out page header!
write
print-rec from page-header
before advancing 0 lines.
175-column-headers.
move
movie-rating-in to movie-rating-out.
write
print-rec from rating-label
after advancing 2 lines.
* notice that
input case is important!
* could also
put "G" or "g"
* good to use
else for data validation purposes
if
movie-rating-in = "G"
move
g-desc to rating-desc-out
else if
movie-rating-in = "PG"
move
pg-desc to rating-desc-out
else if
movie-rating-in = "PG-13"
move
pg13-desc to rating-desc-out
else if
movie-rating-in = "R"
move
r-desc to rating-desc-out
else
move
"invalid movie rating" to rating-desc-out.
write
print-rec from rating-description
after
advancing 1 line.
write
print-rec from column-header1
after advancing 2 line.
write
print-rec from column-header2
after advancing 1 line.
write
print-rec from under-line
after advancing 0 lines.
200-movie-routine.
if
cbval-rating not = movie-rating-in
perform 300-rating-totals
move
movie-rating-in to cbval-rating
perform 175-column-headers
end-if
add 1 to
num-cb-recs total-num-movies.
add
box-wk-one-in box-wk-two-in box-wk-three-in
box-wk-four-in to total-box giving total-box
add
gross-earnings-in to total-rating-gross
perform
250-output-data-line.
read
movie-data
at
end move "no" to are-there-more-records.
250-output-data-line.
move
spaces to print-rec.
move
movie-title-in to movie-title-out
move
prod-company-in to prod-company-out
move
date-rel-in to date-rel-out
move
box-wk-one-in to box-wk-one-out
move
box-wk-two-in to box-wk-two-out
move
box-wk-three-in to box-wk-three-out
move
box-wk-four-in to box-wk-four-out
move
gross-earnings-in to gross-earnings-out
write
print-rec from ws-print-rec.
300-rating-totals.
compute
average-cbnum-rating avg-cbnum-rate =
total-box / (num-cb-recs*4)
write
print-rec from average-rating-label
after advancing 2 lines.
move 0
to total-box
move
num-cb-recs to total-cbnum-movies
write
print-rec from total-cb-movies-label
after advancing 1 line
move 0
to num-cb-recs
move
total-rating-gross to total-cbnum-earnings
write
print-rec from total-gross-earnings-label
after advancing 1 line
move 0
to total-rating-gross
if
avg-cbnum-rate > prev-avg-cbnum-rate
move
cbval-rating to high-avg-rating
move
avg-cbnum-rate to prev-avg-cbnum-rate
end-if.