学生成绩管理程序: 用面向对象的方法设计一个菜单驱动的学生成绩管理程
序。 学生的基本信息包括学生的学号、 姓名、 数学、 语文、 英语等信息。 实
现如下管理功能:
(1) 能输入并显示n 个学生的基本信息。
(2) 计算学生的平均分和总分。
(3) 按总分降序进行排序。
(4) 任意输入一个学号, 能显示该学生的基本信息。
(5) 可添加学生信息到指定位置, 亦可在最后追加一批学生信息。
(6) 文件的导入和导出(从文件中读取若干条学生信息, 或者将学生信息
输出到文件中) 。
输出菜单形式如下:
请选择下面的菜单:
1 创建
2 添加
3 汇总
4 排序
5 查询
6 显示
7 从文件导入
8 导出到文件
9 退出
请选择:
#include <iostream>
#include <fstream>
#include <string>
#include<algorithm>
using namespace std;
int n=0;//学生总数
int m=0;//课程数
int number;//功能键
class Student
{
public:
Student() {}
long int num;//学号
char name[100];//姓名
float score[7];//各科成绩
float sum;//成绩总和
float aver;//平均分
};
Student s[1000];
void menu();//菜单
void inputscore(Student s[]);//输入分数
void averofs(Student s[]);//每名学生总分和平均分
void sortbynum(Student s[]);//学生总分排行
void chose(int);//功能的选择
void findstu(Student s[]);//任意输入一个学号,能显示该学生的基本信息
void daoru(Student s[]);//文件的导入
void daochu(Student s[]);//文件的导出
void adds(Student s[]);//添加
void creat();//创建
int main()
{
while(1)
{
menu();
cin>>number;
chose(number);
}
return 0;
}
void menu()//菜单
{
cout<<"\n***********请选择下面的菜单:***********\n";
cout<<"\t 1.创建\n";//
cout<<"\t 2.添加\n";//可在最后追加一批学生信息
cout<<"\t 3.汇总\n";//输入数据
cout<<"\t 4.排序\n";// 按总分降序进行排序
cout<<"\t 5.查询\n";//任意输入一个学号,能显示该学生的基本信息。
cout<<"\t 6.显示\n";//显示n个学生的基本信息
cout<<"\t 7.从文件导入\n";//
cout<<"\t 8.导出到文件\n";//将学生信息 输出到文件中
cout<<"\t 9.退出\n";
cout<<"\t 请选择";
cout<<"\n***************************************\n";
}
void chose(int number)
{
switch(number)
{
case 1:
creat();// 创建
break;
case 2:
adds(s);//可在最后追加一批学生信息
break;
case 3:
inputscore(s);//输入数据
break;
case 4:
sortbynum(s);//排序
break;
case 5:
findstu(s);//查询
break;
case 6:
averofs(s);//显示
break;
case 7:
daoru(s);//导入
break;
case 8:
daochu(s);//导出
break;
case 9:
exit(0);//退出
break;
default:
break;
}
}
void creat()//创建
{
cout<<"请输入学生总数(n<=100):\n";
cin>>n;
cout<<"请输入课程的总数(m<=7):\n";
cin>>m;
}
void inputscore(Student s[])//录入信息
{
cout<<"请输入学生学号,姓名,及各科成绩\n";
for(int i=0; i<n; i++)
{
cout<<"学号:"<<endl;
cin>>s[i].num;
if(s[i].num==0) break;
getchar();
cout<<"姓名:"<<endl;
gets(s[i].name);
cout<<"请输入各科成绩:"<<endl;
for(int j=0; j<m; j++)
{
cin>>s[i].score[j];
s[i].sum+=s[i].score[j];
}
}
}
void averofs(Student s[])//显示
{
for(int i=0; i<n; i++)
{
s[i].sum=0;
s[i].aver=0;
for(int j=0; j<m; j++)
{
s[i].sum+=s[i].score[j];
}
s[i].aver=s[i].sum/m;
cout<<s[i].name<<" 总分:"<<s[i].sum<<" 平均分:"<<s[i].aver<<" 学号:"<<s[i].num<<endl;
}
}
bool comp1(Student a,Student b)
{
return a.sum>b.sum;
}
void sortbynum(Student s[])//从大到小排序
{
sort(s,s+n,comp1);
cout<<"按总分降序进行排序"<<endl;
for(int j=0; j<n; j++)
{
cout<<s[j].name<<" "<<s[j].sum<<endl;
}
}
void daochu(Student s[])//文件的导出
{
ofstream ofs;
ofs.open("student.txt",ios::out);
ofs<<n<<" "<<m<<" ";
for(int i=0; i<n; i++)
{
ofs<<s[i].num<<" "<<s[i].name<<" ";
for(int j=0; j<m; j++)
{
ofs<<s[i].score[j]<<" ";
}
}
cout<<"导出成功"<<endl;
ofs.close();
}
void daoru(Student s[])//文件的导入
{
ifstream ifs;
ifs.open("student.txt",ios::in);
for(int i=0;i<n;i++)
{
ifs>>n>>m>>s[i].num>>s[i].name>>s[i].score[0];
}
for(int i=0;i<n;i++)
{
cout<<n<<" "<<m<<" "<<s[i].num<<" "<<s[i].name<<" "<<s[i].score[0]<<" "<<s[i].score[1]<<" "<<s[i].score[2]<<endl;
}
cout<<"导入成功"<<endl;
ifs.close();
}
void findstu(Student s[])//根据学号查询
{
int xh,i;
cout<<"请输入要查找的学号:"<<endl;
cin>>xh;
for( i=0; i<n; i++)
{
if(s[i].num==xh)
{
cout<<s[i].name<<endl;
cout<<s[i].sum<<endl;
for(int j=0; j<m; j++)
{
cout<<s[i].score[j]<<endl;
}
}
}
}
void adds(Student s[])//添加,在最后追加一批学生信息
{
int x;
cout<<"请输入要添加的人数:"<<endl;
cin>>x;
cout<<"请输入学生学号,姓名,及各科成绩"<<endl;
for(int i=n; i<(n+x); i++)
{
cout<<"学号:"<<endl;
cin>>s[i].num;
if(s[i].num==0) break;
getchar();
cout<<"姓名:"<<endl;
gets(s[i].name);
cout<<"请输入各科成绩:"<<endl;
for(int j=0; j<m; j++)
{
cin>>s[i].score[j];
s[i].sum+=s[i].score[j];
}
}
n=n+x;
}