C++大学基础教程_7_6实例-利用数组存放成绩的GradeBook类

//_7_6_main.cpp
#include "GradeBook.h"
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
	const int gradesArraySize = 10;
	int gradesArray[gradesArraySize];

	//随机产生学生成绩
	srand((unsigned)time(NULL));
	for(int i=0;i<gradesArraySize;i++)
	{
		gradesArray[i] = rand()%101 ;
	}

	GradeBook myGradeBook("C++",gradesArray);
	myGradeBook.displayMessage();
	myGradeBook.processGrades();

	system("pause >> cout");
	return 0;
}
//GradeBook.h

#include <string>
using namespace std;

class GradeBook
{
public:
	//要设置成静态的const常量,,,
	static const int students = 10;//参加考试的学生

	GradeBook(string,const int[]);
	void setCourseName(string);
	string getCourseName();
	void displayMessage();//打印一条欢迎信息!
	void processGrades();//综合下面函数的功能,,,,
	int getMaximum();//得到学生成绩中的最大值
	int getMinimum();//得到学生成绩中的最小值
	double getAverage();//计算该门课程学生成绩的平均值
	void outputBarChart();//输出学生成绩的柱状图
	void outputGrades();//输出学生的成绩
private:
	string courseName;//专业名称
	int grades[students];//学生成绩的数组
};
//GradeBook.cpp

#include "GradeBook.h"
#include <iostream>
#include <iomanip>
using namespace std;

GradeBook::GradeBook(string name,const int a[])
{
	setCourseName(name);
	for(int i=0;i<students;i++)//将调用的数组信息复制到类的对象的数组中
		grades[i] = a[i] ;
}

void GradeBook::setCourseName(string name)
{
	courseName = name;
}

string GradeBook::getCourseName()
{
	return courseName;
}
void GradeBook::displayMessage()//打印一条欢迎信息!
{
	cout << "Welcome to the grade book for\n" 
		   << getCourseName() << " !" << endl;
}

void GradeBook::processGrades()//综合下面函数的功能,,,,
{
	outputGrades();//先输出学生成绩:
	cout << "Class average is " << setprecision(2) << fixed <<getAverage() << endl;
	cout << "Lowest grade is " << getMinimum() << endl;
	cout << "Highest grade is " << getMaximum() << endl;
	outputBarChart();
}

int GradeBook::getMaximum()//得到学生成绩中的最大值
{
	int max = 0;
	for(int k=0;k<students;k++)
	{
		if(max<grades[k])
			max = grades[k];
	}
	return max;
}
	
int GradeBook::getMinimum()//得到学生成绩中的最小值
{
	int min = 100;
	for(int k=0;k<students;k++)
	{
		if(min>grades[k])
			min = grades[k];
	}
	return min;
}

double GradeBook::getAverage()//计算该门课程学生成绩的平均值
{
	int sum = 0;
	for(int k=0;k<students;k++)
		sum+=grades[k];
	return (static_cast<double>(sum))/students ;
}
	
void GradeBook::outputBarChart()//输出学生成绩的柱状图
{
	cout << "\nGrades distribution:" << endl;//学生的成绩分布
	const int frequencySize = 11;
	int frequency[frequencySize] = {0};
	for(int i=0;i<students;i++)
		frequency[grades[i]/10] ++ ;
	for(int count=0;count<frequencySize;count++)
	{
		if(count == 0)
			cout << "  0-9:" ;
		else if(count == 10)
			cout << " 100:" ;
		else
			cout << count*10 << "-" << count*10 + 9 << ":" ;
		for(int star=0;star<frequency[count];star++)
			cout << "*" ;
		cout << endl;
	}
}

void GradeBook::outputGrades()//输出学生的成绩
{
	cout << "\nThe grades are :" << endl;
	for(int student=0;student<students;student++)
		cout << "Student" << setw(2) << (student+1)
			   << " : " << setw(4) << grades[student] 
	           << endl;
	cout << endl;
}

 程序运行结果:



 

猜你喜欢

转载自jia-shun.iteye.com/blog/2067715