Lab 12 Be sure to put each class in its own file. Replace the constant values in the grade array with random numbers (integers) from 0 to 100. Accept the number of students and number of tests from the user. Put the whole thing in a loop. Quit when a negative number of students is entered.
// Fig. 8.21: GradeBookTest.cs
// Create GradeBook object using a rectangular array of grades.
using System;
public class GradeBookTest
{
// Main method begins application execution
public static void Main( string[] args )
{
// rectangular array of student grades
int[,] gradesArray;
int studentnumber;
int size=0;
Random randomNumbers = new Random();
do
{
Console.WriteLine("How many students are there");
studentnumber = Convert.ToInt32(Console.ReadLine());
if ((studentnumber >0))
{
Console.WriteLine("How many tests?");
size = Convert.ToInt32(Console.ReadLine());
}
if ((studentnumber>0) && (size>0))
{
gradesArray = new int[studentnumber, size];
for (int x = 0; x < studentnumber; x++)
for (int i = 0; i < size; i++)
gradesArray[x, i] = randomNumbers.Next(0, 100);
GradeBook myGradeBook = new GradeBook(
"CS101 Introduction to C# Programming", gradesArray);
myGradeBook.DisplayMessage();
myGradeBook.ProcessGrades();
}
} while (studentnumber > 0);
} // end Main
} // end class GradeBookTest
// Fig. 8.20: GradeBook.cs
// Grade book using rectangular array to store grades.
using System;
public class GradeBook
{
private string courseName; // name of course this grade book represents
private int[ , ] grades; // rectangular array of student grades
// two-parameter constructor initializes courseName and grades array
public GradeBook( string name, int[ , ] gradesArray )
{
CourseName = name; // initialize courseName
grades = gradesArray; // initialize grades array
} // end two-parameter GradeBook constructor
// property that gets and sets the course name
public string CourseName
{
get
{
return courseName;
} // end get
set
{
courseName = value;
} // end set
} // end property CourseName
// display a welcome message to the GradeBook user
public void DisplayMessage()
{
Console.WriteLine( "Welcome to the grade book for\n{0}!\n",
CourseName );
} // end method DisplayMessage
// perform various operations on the data
public void ProcessGrades()
{
// output grades array
OutputGrades();
// call methods GetMinimum and GetMaximum
Console.WriteLine( "\n{0} {1}\n{2} {3}\n",
"Lowest grade in the grade book is", GetMinimum(),
"Highest grade in the grade book is", GetMaximum() );
// output grade distribution chart of all grades on all tests
OutputBarChart();
} // end method ProcessGrades
// find minimum grade
public int GetMinimum()
{
// assume first element of grades array is smallest
int lowGrade = grades[ 0, 0 ];
// loop through elements of rectangular grades array
foreach ( int grade in grades )
{
// if grade less than lowGrade, assign it to lowGrade
if ( grade < lowGrade )
lowGrade = grade;
} // end foreach
return lowGrade; // return lowest grade
} // end method GetMinimum
// find maximum grade
public int GetMaximum()
{
// assume first element of grades array is largest
int highGrade = grades[ 0, 0 ];
// loop through elements of rectangular grades array
foreach ( int grade in grades )
{
// if grade greater than highGrade, assign it to highGrade
if ( grade > highGrade )
highGrade = grade;
} // end foreach
return highGrade; // return highest grade
} // end method GetMaximum
// determine average grade for particular student
public double GetAverage( int student )
{
// get the number of grades per student
int amount = grades.GetLength( 1 );
int total = 0; // initialize total
// sum grades for one student
for ( int exam = 0; exam < amount; exam++ )
total += grades[ student, exam ];
// return average of grades
return ( double ) total / amount;
} // end method GetAverage
// output bar chart displaying overall grade distribution
public void OutputBarChart()
{
Console.WriteLine( "Overall grade distribution:" );
// stores frequency of grades in each range of 10 grades
int[] frequency = new int[ 11 ];
// for each grade in GradeBook, increment the appropriate frequency
foreach ( int grade in grades )
{
++frequency[ grade / 10 ];
} // end foreach
// for each grade frequency, print bar in chart
for ( int count = 0; count < frequency.Length; count++ )
{
// output bar label ( "00-09: ", ..., "90-99: ", "100: " )
if ( count == 10 )
Console.Write( " 100: " );
else
Console.Write( "{0:D2}-{1:D2}: ",
count * 10, count * 10 + 9 );
// print bar of asterisks
for ( int stars = 0; stars < frequency[ count ]; stars++ )
Console.Write( "*" );
Console.WriteLine(); // start a new line of output
} // end outer for
} // end method OutputBarChart
// output the contents of the grades array
public void OutputGrades()
{
Console.WriteLine( "The grades are:\n" );
Console.Write( " " ); // align column heads
// create a column heading for each of the tests
for ( int test = 0; test < grades.GetLength( 1 ); test++ )
Console.Write( "Test {0} ", test + 1 );
Console.WriteLine( "Average" ); // student average column heading
// create rows/columns of text representing array grades
for ( int student = 0; student < grades.GetLength( 0 ); student++ )
{
Console.Write( "Student {0,2}", student + 1 );
// output student's grades
for ( int grade = 0; grade < grades.GetLength( 1 ); grade++ )
Console.Write( "{0,8}", grades[ student, grade ] );
// call method GetAverage to calculate student's average grade;
// pass row number as the argument to GetAverage
Console.WriteLine( "{0,9:F2}",GetAverage( student ) );
} // end outer for
} // end method OutputGrades
} // end class GradeBook
Wednesday, May 13, 2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment