#include <iostream.h>
//---------------------------------------------------------------------------
#define CLASS_COUNT 4//4个班级
#define CLASS_STUDENT_COUNT 40   //每班最多40个学员
//定义一个全局二维数组变量,用于存储多班成绩:
int cj[CLASS_COUNT][CLASS_STUDENT_COUNT];
//提示:全局变量会被自动初始化为全0。
//所以一开始该cj数组中每个成绩均为0。
#pragma argsused
int SelectFunc();
int SelectClass();
int SelectStudent();
void TotalScore(int classNumber);
void FindScore(int classNumber, int studentNumber);
void OutputScore(int classNumber);
void ClearScore(int classNumber);
void InputScore(int classNumber);
int main(int argc, char* argv[])
{
   int selected;
   do
   {  //用户选择要执行的功能:
       selected = SelectFunc();
       //如果选择0,则退出:
       if(selected == 0)
           break;
       //根据selected来执行相应功能:
       switch(selected)
       {
           //1、输入成绩:
           case 1 :
           {
                int classNumber = SelectClass();
                InputScore(classNumber); //两行代码可以合为:InputScore(SelectClass());
                break;
           }
            //2、清空成绩:
           case 2 :
           {
                int classNumber = SelectClass();
                ClearScore(classNumber);
                break;
           }
           //3、输出成绩:
           case 3 :
           {
                int classNumber = SelectClass();
                OutputScore(classNumber);
                break;
           }
           //4、查询成绩:
           case 4 :
           {
                int classNumber = SelectClass();
                int studentNumber = SelectStudent();
                FindScore(classNumber,studentNumber);
                //以上三行也可合为:FindScore(SelectClass(),SelectStudent());
                break;
           }
           //5、统计成绩:
           case 5 :
           {
                int classNumber = SelectClass();
                TotalScore(classNumber);
                break;
           }
       }
   }
  while(true); //一直循环,直到前面用户输入0跳出。
  return 0;
}
//---------------------------------------------------------------------------
//函数:提供一个界面,让用户选择功能
//返回值:1~5, 待执行的功能,0:退出程序
int SelectFunc()
{
   int selected;
   do
   {
      cout << "请选择:(0~5)"   << endl;
      cout << "<<<1、录入成绩" << endl
           << "<<<2、清空成绩" << endl
           << "<<<3、输出成绩" << endl
           << "<<<4、查询成绩" << endl
           << "<<<5、统计成绩" << endl
           << "<<<0、退出" << endl<<"请输入你的选择:";
      cin >> selected;
  }
  while(selected < 0 || selected > 5); //如果用户输入0~5范围之外的数字,则重复输入。 
  return selected;
} 
//---------------------------------------------------------------------
int SelectClass()
{
   int classNumber; //班级编号
   do
   {
           cout << "请输入班级编号:(1~4)";
           cin >> classNumber;
   }
   while(classNumber < 1 || classNumber > CLASS_COUNT);
   return classNumber - 1;
}
//---------------------------------------------------------------------
int SelectStudent()
{
   int studentNumber; //班级编号
   do
   {
           cout << "请输入学生编号:(1~40)";
           cin >> studentNumber;
   }
   while(studentNumber < 1 || studentNumber > CLASS_STUDENT_COUNT);
   return studentNumber - 1;
}
//--------------------------------------------------------------------
//录入成绩 参数 classNumber: 班级编号
void InputScore(int classNumber)
{
/*
一个班级最多40个学员,但也可以少于40个,所以我们规定,当用户输入-1时,表示已经输入完毕。
*/
//判断classNumber是否在合法的范围内:
  if(classNumber < 0 || classNumber >= CLASS_COUNT)  return;
  //提示字串:
  cout << "请输入" << classNumber + 1 << "班的学生成绩。" << endl;
  cout << "输入-1表示结束。" << endl;
  for(int i=0; i < CLASS_STUDENT_COUNT; i++)
  {
     cout << "请输入" << i+1 << "号学员成绩:";
     cin >> cj[classNumber][i];   //cj 是全局变量,所以这里可以直接用。
     //判断是否为-1,若是,跳出循环:
     if( -1 == cj[classNumber][i]) break;
  }
}
//---------------------------------------------------- 
//清空成绩:
void ClearScore(int classNumber)
{  //判断classNumber是否在合法的范围内:
  if(classNumber < 0 || classNumber >= CLASS_COUNT)
     return;
  for(int i=0; i < CLASS_STUDENT_COUNT; i++)
  {
    cj[classNumber][i] = 0;
  }
  cout << classNumber + 1 << "班学生成绩清空完毕" << endl;
}
//---------------------------------------------------- 
//输出成绩:
void OutputScore(int classNumber)
{
   //判断classNumber是否在合法的范围内:
   if(classNumber < 0 || classNumber >= CLASS_COUNT)
      return;
   cout << "============================" << endl;
   cout << classNumber + 1 << "班成绩" << endl;
   /*
       有两点要注意:
       1、要求每行输出5个成绩
       2、每个班级并不一定是40个成绩,所以只要遇到-1,则停止输出。当然,如果该班 
        成绩尚未录入,则输出的是40个0。
   */ 
   for(int i = 0; i < CLASS_STUDENT_COUNT; i++)
   {
      if(i % 5 == 0)  //因为每行输出5个,所以i被5 整除,表示是一新行
          cout << endl;
      if(-1 == cj[classNumber][i]) //遇到成绩为-1...
         break;
      cout << cj[classNumber][i] << ",";
   }
   cout << "============================" << endl;
}
//---------------------------------------------------- 
//查询成绩:
void FindScore(int classNumber, int studentNumber)
{
  //判断classNumber是否在合法的范围内:
  if(classNumber < 0 || classNumber >= CLASS_COUNT)
     return;
  //判断学生编号是否在合法范围内:
  if(studentNumber < 0 || studentNumber >= CLASS_STUDENT_COUNT)
     return;
  cout << classNumber + 1 << "班," << studentNumber + 1 << "号成绩:"<<
           cj[classNumber][studentNumber] << endl;
}
//----------------------------------------------------
//统计成绩:
void TotalScore(int classNumber)
{
  //判断classNumber是否在合法的范围内:
  if(classNumber < 0 || classNumber >= CLASS_COUNT)
     return;
  int totalScore = 0; //总分
  int scoreCount = 0; //个数
   //同样要注意遇到-1结束。
   for(int i = 0; i < CLASS_STUDENT_COUNT; i++)
   {
       if(cj[classNumber][i] != -1)
       {
           totalScore += cj[classNumber][i];
           scoreCount++;
        }
       else
       {
           break;
        }
   }
   //还要注意,如果第一个成绩就是-1,则个数为0,此时无法求平均值(因为除数不能为0)
   if(scoreCount == 0)
   {
       cout << "该班学员个数为0" << endl;
        return;
    }
    cout << "总分:" << totalScore << "平均:" << totalScore / scoreCount << endl;
}



 
											





 
	    

 
	

 
										
					
	


