c++ 学生成绩管理系统

设计一个学生成绩管理系统,对本班的学习成绩进行管理,可以用数组来设计这个程序。
一、设计内容:
1) 每一条记录包括一个学生的学号、班级、姓名、性别、两门课的成绩(包括英语和数学)、平均成绩。
2) 输入功能:可以一次完成若干条记录的输入,输入的信息要求用数组存放。
3) 显示功能:完成全部学生记录的显示。
4) 查找功能:完成按姓名或学号查找学生记录,并显示该学生的所有信息。
5) 排序功能:按学生平均成绩进行排序。
6) 插入功能:按平均成绩高低插入一条学生记录。 (该功能选做)
7) 提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观

这是我刚改过的代码,还添加了求平均分的功能
#include<iostream.h>
#include<string.h>
#include<fstream.h>
class stu
{
char name[20];
int ba;
double math,number,chinese,english,average,sum;
public:
stu()
{
}
stu(char n[20],int ban,double nu,double ma,double chin,double eng)
{
strcpy(name,n);
ba=ban;
number=nu;
math=ma;
chinese=chin;
english=eng;
}
double getsum()
{
sum=chinese+english+math;
return sum;
}
double getaver()
{
average=getsum()/3;
return average;
}
friend void main();
};

void main()
{
cout<<"(0)数据录入 (1)增加人员"<<endl;
cout<<"(2)删除人员 (3)修改数据"<<endl;
cout<<"(4)按学号查询 (5)按姓名查询"<<endl;
cout<<"(6)输出所有学生的数据 (7)按总分查询排名"<<endl;
cout<<"(8)按语文查询排名 (9)按数学查询排名"<<endl;
cout<<"(y)按英语查询排名 "<<endl;
cout<<"选择相关操作请输入相对的括号里的阿拉伯数字或字母!"<<endl;
char p;char w;
stu *s[50];
ofstream *file[50];
int i=0;
int j=0;
bool flag2=0;
do
{
cin>>p;
if((p>='0'&&p<='9'))
flag2=1;
else
cout<<"指令错误!请重新输入:"<<endl;
}while(flag2==0);
do{
switch(p)
{
case '0':
{
char c;
char name[20];int ba ;double number, math,chinese,english;
do{
cout<<"请输入姓名"<<endl;
cin>>name;
cout<<"请输入班级:"<<endl;
cin>>ba;
cout<<"请输入您要增加的学生的学号:"<<endl;
cin>>number;
cout<<"请输入数学成绩:"<<endl;
cin>>math;
cout<<"请输入语文成绩:"<<endl;
cin>>chinese;
cout<<"请输入外语成绩:"<<endl;
cin>>english;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"班级"<<ba<<"学号"<<number<<"数学成绩"<<math<<"语文成绩"<<chinese<<"外语成绩"<<english<<endl;
j++;
s[i]=new stu(name,ba,number, math, chinese, english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
do
{
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break;
}
case '1':
{
char name[20];int ba;double number,math,chinese,english;
char c;
do
{
cout<<"请输入您要增加的学生的姓名:"<<endl;
cin>>name;
cout<<"请输入要增加的学生的班级:"<<endl;
cin>>ba;
cout<<"请输入您要增加的学生的学号:"<<endl;
cin>>number;
cout<<"请输入数学成绩:"<<endl;
cin>>math;
cout<<"请输入语文成绩:"<<endl;
cin>>chinese;
cout<<"请输入外语成绩:"<<endl;
cin>>english;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"班级"<<ba<<"学号"<<number<<"数学成绩"<<math<<"语文成绩"<<chinese<<"外语成绩"<<english<<endl;
j++;
s[i]=new stu(name, ba,number,math, chinese, english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '2':
{
char name[20];bool flag3=0;char c;
do{
cout<<"请输入您要删除的学生姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do{
s[h]=s[h+1];
h++;
}while(h<=i);
}
}
if(flag3==0)
cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
cout<<"要继续删除吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '3':
{
char name[20];double mat,chin,eng;flag2=0;
char c;
do
{
cout<<"请输入您要修改的学生的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入新的数学成绩:"<<endl;
cin>>mat;
cout<<"请输入新的语文成绩:"<<endl;
cin>>chin;
cout<<"请输入新的外语成绩:"<<endl;
cin>>eng;
s[h]->chinese=chin;
s[h]->math=mat;
s[h]->english=eng;
cout<<"数据修改成功!";
}
}
if(flag2==0)
{
cout<<"您要修改的学生本来就不存在!请检查重新输入!"<<endl;
}
cout<<"想继续修改吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}

case '4':
{
double t;char c;
do
{
int flag1=0;
cout<<"请输入你要查询学生的学号"<<endl;
cin>>t;
for(int q=0;q<i;q++)
{
if(s[q]->number==t)
{
flag1=1;
cout<<"您要查询的学生是:"<<(*s[q]).name
<<"数学成绩为:"<<s[q]->math
<<"语文成绩为:"<<s[q]->chinese
<<"英语成绩为:"<<s[q]->english
<<"总分为:"<<s[q]->getsum()
<<endl;
}
}
if(flag1==0)
cout<<"对不起!您要查询的学生不存在!"<<endl;
cout<<"您想继续查询吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}

case '5':
{
char n[20];int j=0;char c;
do{
int flag=0;
cout<<"请输入你要查询的学生姓名"<<endl;
cin>>n;
for(int j=0;j<i;j++)
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1;
cout<<"您要查询的学生是:"<<(*s[j]).name
<<endl;
cout<<(*s[j]).name<<"的总成绩成绩是"<<(*s[j]).getsum()
<<"班级:"<<" "<<s[j]->ba
<<"语文:"<<" "<<s[j]->chinese
<<"数学:"<<" "<<s[j]->math
<<"外语:"<<" "<<s[j]->english
<<"平均成绩是:"<<(*s[j]).getaver()
<<endl;
}
}
if(flag==0)
cout<<"对不起!您要查询的学生不存在!"<<endl;
cout<<"您想继续查询吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}

case '6':
{
cout<<"本系统所有学生数据如下:"<<endl;
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese<<"数学:"
<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<(*s[k]).getsum()
<<"平均分:"<<" "<<(*s[k]).getaver()
<<endl;
}
break;
}
case '7':
{
int t;stu b;

cout<<"本系统所有学生总分排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->getsum())<(s[y]->getsum()))
t=y;
if(t!=x)
{
b=*s[x];
*s[x]=*s[t];
*s[t]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->sum;
o2=s[0]->sum;
}
cout<<"总分最高分"<<o2<<endl
<<"总分最低分"<<o1<<endl
<<endl;
break;
}
case '8':
{
int t;stu b;

cout<<"本系统所有学生语文排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->chinese)<(s[y]->chinese))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}

if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1 ,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->chinese;
o2=s[0]->chinese;
}
int v1=0,v2=0;double v3;
for(v2=0;v2<=i-1;v2++)
{
if(s[v2]->english>=60)
v1++;
}
v3=(v1*100)/v2;
cout<<"语文最高分"<<o2<<endl
<<"语文最低分"<<o1<<endl
<<"语文及格率"<<v3<<"%"
<<endl;
break;
}
case '9':
{
int t;stu b;

cout<<"本系统所有学生数学排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->math)<(s[y]->math))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}

if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->math;
o2=s[0]->math;
}
int v1=0,v2=0;double v3;
for(v2=0;v2<=i-1;v2++)
{
if(s[v2]->english>=60)
v1++;
}
v3=(v1*100)/v2;
cout<<"数学最高分"<<o2<<endl
<<"数学最低分"<<o1<<endl
<<"数学及格率"<<v3<<"%"
<<endl;
break;
}
case 'y':
{
int t;stu b;

cout<<"本系统所有学生英语排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->english)<(s[y]->english))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}

if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<< "语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->english;
o2=s[0]->english;
}
int v1=0,v2=0;double v3;
for(v2=0;v2<=i-1;v2++)
{
if(s[v2]->english>=60)
v1++;
}
v3=(v1*100)/v2;
cout<<"英语最高分"<<o2<<endl
<<"英语最低分"<<o1<<endl
<<"英语及格率"<<v3<<"%"
<<endl;
}
break;
}

cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
bool flag4=0;
do
{
cin>>w;
if(w!='y'&&w!='n')
cout<<"指令错误!请重新输入!"<<endl;
else
flag4=1;
}while(flag4==0);
if(w=='y')
cout<<" 请输入操作代码: "<<endl;
cout<<"0 录入 1 增加人员 2 删除人员"<<endl;
cout<<"3 修改数据 4 按学号查询 5 按姓名查询"<<endl;
cout<<"6 显示所有成员数据 7 按总分排名 8 按语文排名"<<endl;
cout<<"9 按数学排名 y按英语排名"<<endl;
cin>>p;
}while(w=='y');
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-16
好是好,可是答案不对问题啊,差太多了
相似回答