问题及代码:
运行结果:
一个简单的学生成绩管理系统。
/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:grades.cpp
*作 者:单昕昕
*完成日期:2014年12月9日
*版 本 号:v1.0
*
*问题描述:输入学生姓名和各科成绩,输出各项统计数据并完成检索。
*程序输出:各项统计数据。
*/
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
void input(string name[100],double s[][4],int n); //输入成绩及人名
void output(string name[100],double s[][4],int n); //输出成绩及人名
double max(double s[][4],int n,int i); //求第i门课的最高成绩,i=3时是总分
double min(double s[][4],int n,int i); //求第i门课的最低成绩
double avg(double s[][4],int n,int i); //求第i门课的平均成绩
int main()
{
int i,num;
string name[100]; //定义一个保存学生姓名的数组
double score[100][4]; //设一个班最多100人,实际按输入来
string course[4]= {"高等数学","英语","C++","总分"};
cout<<"输入学生人数:";
cin>>num;
//输入成绩并求出总分
input(name,score,num);
//输出成绩
output(name,score,num);
//输出各门课及总分的最高成绩、最低成绩、平均成绩
for(i=0; i<4; ++i)
{
cout<<course[i]<<"的最高成绩是"<<max(score,num,i)<<", ";
cout<<"最低成绩是"<<min(score,num,i)<<", ";
cout<<"平均成绩是"<<avg(score,num,i)<<", ";
cout<<endl;
}
return 0;
}
void input(string name[100],double s[][4],int n) //输入成绩
{
cout<<"请输入学生的姓名及学生的各科成绩(中间用空格隔开而且每输入一组按一次回车键):"<<endl; //说明输入要求
int i,j,sum;
for(i=0; i<n; ++i)
{
cin>>name[i]; //输入学生姓名
sum=0;
for(j=0; j<3; ++j)
{
cin>>s[i][j]; //输入三科成绩
sum+=s[i][j];
s[i][3]=sum; //i=3时是总分
}
}
}
void output(string name[100],double s[][4],int n) //以类似表格的形式输出成绩及学生姓名
{
int i,j;
cout<<"学生的成绩如下:"<<endl;
cout<<"————————————————————————————————————————"<<endl;
cout<<setiosflags(ios::right)<<setw(12)<<"姓名"<<setw(8)<<"学号";
cout<<'\t'<<"高等数学"<<'\t'<<"英语"<<setw(15)<<"C++";
cout<<setw(16)<<"总分"<<endl;
cout<<"————————————————————————————————————————"<<endl;
for(i=0; i<n; ++i)
{
cout<<setiosflags(ios::right)<<'\t'<<name[i]<<'\t'<<i; //输出学生姓名及其对应的学号
for(j=0; j<4; ++j)
cout<<'\t'<<s[i][j]<<'\t';
cout<<"————————————————————————————————————————"<<endl;
}
cout<<"请输入学号完成检索该生成绩(输入1234时退出查找):"<<endl;
int id;
while(cin>>id&&id!=1234) //输入1234时退出程序
{
cout<<name[id]<<endl; //输出学号对应的姓名
for(j=0; j<4; ++j)
{
cout<<'\t'<<s[id][j]<<'\t'; //输出各科成绩
}
cout<<endl;
}
}
double max(double s[][4],int n,int i) //求第i门课的最高成绩,i=3时是总分
{
int k,max=-1;
for(k=0; k<n; ++k)
{
if(s[k][i]>max)
max=s[k][i];
}
return (max);
}
double min(double s[][4],int n,int i) //求第i门课的最低成绩
{
int k,min=999;
for(k=0; k<n; ++k)
{
if(s[k][i]<min)
min=s[k][i];
}
return (min);
}
double avg(double s[][4],int n,int i) //求第i门课的平均成绩
{
int k,ave,sum=0;
for(k=0; k<n; ++k)
{
sum+=s[k][i];
}
s[k][3]=sum;
ave=sum/n;
return (ave);
}
运行结果:
一个简单的学生成绩管理系统。
学习心得:
同时输入姓名及成绩,检索也可以用字符型结束。