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.