#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;
}