`
_jia_shun
  • 浏览: 24716 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

C++大学基础教程_7_10实例-利用二维数组的类GradeBook

 
阅读更多
//_7_10_main.cpp
#include "GradeBook.h"
#include <ctime>
#include <cstdlib>
int main()
{
	int gradesArray[GradeBook::students][GradeBook::tests];
	
	//随机产生学生成绩
	srand((unsigned)time(NULL));
	for(int i=0;i<GradeBook::students;i++)
		for(int j=0;j<GradeBook::tests;j++)
			gradesArray[i][j] = 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;//参加考试的学生
	static const int tests = 3;//测试的次数

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

 

//GradeBook.cpp

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

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

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 << "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++)
		for(int h=0;h<tests;h++)
		{
			if(max<grades[k][h])
			max = grades[k][h];
		}
	return max;
}
	
int GradeBook::getMinimum()//得到学生成绩中的最小值
{
	int min = 100;
	for(int k=0;k<students;k++)
		for(int h=0;h<tests;h++)
		{
			if(min>grades[k][h])
			min = grades[k][h];
		}
	return min;
}

//计算该门课程学生成绩的平均值
double GradeBook::getAverage(const int setOfGrades[],const int grades)
{
	int sum = 0;
	for(int k=0;k<grades;k++)
		sum+=setOfGrades[k];		
	return (static_cast<double>(sum))/grades ;
}
	
void GradeBook::outputBarChart()//输出学生成绩的柱状图
{
	cout << "\nGrades distribution:" << endl;//学生的成绩分布
	const int frequencySize = 11;
	int frequency[frequencySize] = {0};
	for(int i=0;i<students;i++)
		for(int j=0;j<tests;j++)
		{
			frequency[grades[i][j]/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;
	cout << "             ";
	for(int i=0;i<tests;i++)
		cout << "Test" << i+1 << "   ";
	cout << "Average" << endl;
	for(int student=0;student<students;student++)
	{   
            cout << "Student" << setw(2) << student+1 ;
	    for(int test=0;test<tests;test++)
		cout << setw(8) << grades[student][test];
            double average = getAverage(grades[student],tests);
	    cout << setw(9) << setprecision(2) << fixed 
                 << average << endl;
	}//end for
}//end function

 

 

 

 

  • 大小: 147.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics