Write the following program using COBOL programming language:

Grade Report

This is a program designed to hit you where you live! This program will compute your current average in a class, the minimum average that you could earn from this point forward, and the maximum average that you can earn. In addition to this, it prints the relative weights of each assignment category.

This program assumes that grades are computed out a fixed pool of points. For example, the course in which you currently find yourself has 1000 points. Your total average is computed by the formula:

`grade = (points_earned * 100) / points_possible`

So at any given point in the semester, you could compute your current average by totaling the points you have earned and dividing by the possible points on your assignments so far.

The minimum grade is what you would earn if you stopped handing in work. That is, you would forfeit all remaining possible points in the semester (not a good idea, usually!)

The maximum grade is what you would earn if you earned all remaining possible points in the semester.

This program will take as its input the name of a file. The file is a flat-format file of the following form:

- The total number of points for the entire semester on a line by itself.
- Zero or more assignment records, with each field being a fixed width. The format of these records are as follows:
- Assignment Name (20 characters)
- Category (20 characters)
- Possible Points (14 characters)
- Earned Points (14 characters)

Consider the file generated by a student whom we will call “Bill”. Bill has recorded his first few as shown:

```
1000
MS 1 - Join Grps Group Project 5 5
Four Programs Programming 15 9
Quiz 1 Quizzes 10 7
FORTRAN Programming 25 18
Quiz 2 Quizzes 10 9
HW 1 - Looplang Homework 20 15
```

Note that there is no separator between these fields! If they use the full width of the field, they run right up to the next one:

`HW 3 - Struct & VarsHomework 20 20 `

When Bill runs the program, it generates the following output:

```
File: Bill
Group Project (5%)
==================================
MS 1 - Join Grps 5/5 100%
==================================
5/5 100%
Homework (23%)
==================================
HW 1 - Looplang 15/20 75%
==================================
15/20 75%
Programming (47%)
==================================
Four Programs 9/15 60%
FORTRAN 18/25 72%
==================================
27/40 67%
Quizzes (23%)
==================================
Quiz 1 7/10 70%
Quiz 2 9/10 90%
==================================
16/20 80%
Current Grade: 74%
Minimum Total Grade: 6%
Maximum Total Grade: 97%
```

Here, neatness counts! Make the output line up in nice neat tables. Also note that category weights are the weight of how much the category counts toward the current average. At the end of the course, these would match the weights in the syllabus. Also, note that while Bill is earning a C, if he buckles down he can still get that A. Perhaps you could use this program to help you in your courses!

The contents of sample data files are given below:

File bill:

1000

MS 1 – Join Grps Group Project 5 5

Four Programs Programming 15 9

Quiz 1 Quizzes 10 7

FORTRAN Programming 25 18

Quiz 2 Quizzes 10 9

HW 1 – Looplang Homework 20 15

File cs-390 assignments:

1000

MS 1 – Join Grps Group Project 5 0

Four Programs Programming 15 0

Quiz 1 Quizzes 10 0

FORTRAN Programming 25 0

Quiz 2 Quizzes 10 0

HW 1 – Looplang Homework 20 0

COBOL Programming 25 0

Quiz 3 Quizzes 10 0

Mid Mid 200 0

HW 2 – LL Enhanced Homework 20 0

ALGOL 68 Programming 25 0

MS 2 – Descr. Lang. Group Project 50 0

HW 3 – Struct & VarsHomework 20 0

Lua Programming 25 0

Quiz 4 Quizzes 10 0

HW 4 – Variable Typ.Homework 20 0

MS 3 – Example ProgsGroup Project 45 0

JavaScript Programming 25 0

Quiz 5 Quizzes 10 0

HW 5 – Smalltalk Homework 20 0

MS 4 – Interpreter Group Project 100 0

Ms 5 – Presentation Group Project 50 0

Scheme Programming 25 0

Quiz 6 Quizzes 10 0

Prolog Programming 25 0

Final Final test 200 0