#include "Student.h"
void student1::pingjun(int s)
{
float b[4]={0};
float pingj[4],jig[4];
float ren[4]={0};//用来保存各科及格的人数
while(s==0)
{
cout<<"\t没有记录,请先输入!"<<endl;
break;
}
for(int k=0;k<s;k++)
{
b[0]=b[0]+stu[k].gs;
b[1]=b[1]+stu[k].yy;
b[2]=b[2]+stu[k].lis;
b[3]=b[3]+stu[k].cjj;
}
for(int i=0;i<4;i++)
{
pingj[i]=b[i]/s;
}
for(int j=0;j<s;j++)
{
if(stu[j].gs>=60.0)
ren[0]++;
if(stu[j].yy>=60.0)
ren[1]++;
if(stu[j].lis>=60.0)
ren[2]++;
if(stu[j].cjj>=60.0)
ren[3]++;
}
for(int m=0;m<4;m++)
{
jig[m]=float(ren[m]/s);
}
cout<<"\t科 目:"<<" "<<"平均分"<<" "<<"及格率"<<endl;
cout<<"\t高 数:"<<" "<<pingj[0]<<" "<<jig[0]*100<<"%"<<endl;
cout<<"\t英 语:"<<" "<<pingj[1]<<" "<<jig[1]*100<<"%"<<endl;
cout<<"\t离散数学:"<<" "<<pingj[2]<<" "<<jig[2]*100<<"%"<<endl;
cout<<"\t面向对象:"<<" "<<pingj[3]<<" "<<jig[3]*100<<"%"<<endl;
}
void student1::display(int s)
{
cout<<"\t\t姓 名:"<<stu[s].name<<endl;
cout<<"\t\t学 号:"<<stu[s].num<<endl;
cout<<"\t\t性 别:"<<stu[s].sex<<endl;
cout<<"\t\t高 数:"<<stu[s].gs<<endl;
cout<<"\t\t英 语:"<<stu[s].yy<<endl;
cout<<"\t\t离散数学:"<<stu[s].lis<<endl;
cout<<"\t\t面向对象:"<<stu[s].cjj<<endl;
}
void student1::input(int s)
{
cout<<"\t学号:";
cin>>stu[s].num;
while(jc(getnum(s)))
{
cout<<"\t学号输入重复,请重新输入:"<<endl;
input(s);
}
cout<<"\t姓名:";
cin>>stu[s].name;
// cin.get(stu[s].name,8,'\n');
// cin.ignore();
cout<<"\t性别(男: m,女: w):";
cin>>stu[s].sex;
while (stu[s].sex!='m'&&stu[s].sex!='M'&&stu[s].sex!='w'&&stu[s].sex!='W')
{
cout<<"\t性别输入错误!!! 请重新输入(男: m,女: w):";
cin>>stu[s].sex;
}
cout<<"\t高数:";
cin>>stu[s].gs;
while (stu[s].gs>100||stu[s].gs<0)
{
cout<<"\t数据输入错误,高数成绩范围是0-100"<<endl<<endl<<"\t请重新输入高数成绩:";
cin>>stu[s].gs;
}
cout<<"\t英语:";
cin>>stu[s].yy;
while (stu[s].yy>100||stu[s].yy<0)
{
cout<<"\t数据输入错误,英语成绩范围是0-100"<<endl<<endl<<"\t请重新输入英语成绩:";
cin>>stu[s].yy;
}
cout<<"\t离散数学:";
cin>>stu[s].lis;
while (stu[s].lis>100||stu[s].lis<0)
{
cout<<"\t数据输入错误,离散数学成绩范围是0-100"<<endl<<endl<<"\t请重新输入离散数学成绩:";
cin>>stu[s].lis;
}
cout<<"\t面向对象:";
cin>>stu[s].cjj;
while (stu[s].cjj>100||stu[s].cjj<0)
{
cout<<"\t数据输入错误,面向对象成绩范围是0-100"<<endl<<endl<<"\t请重新输入面向对象成绩:";
cin>>stu[s].cjj;
}
}
int student1::jc(string zxh)
{
int m=0;
for(m=0;m<index;m++)
{
if(zxh==stu[m].num)
break;
}
if(m+1>index)
return 0;
else return 1;
}
student1::student1(int s=0)
{
index=s;
Load();
cout<<"文件信息已成功加载……"<<endl;
};
void student1::Load()
{
open_file(index)
}
void student1::open_file(int s)
{
ifstream infile("Studentinfo.txt",ios::in|ios::binary);
if(!infile)
{
cerr<<"Studentinfo.txt can not open !"<<endl;
exit(0);
}
for(int i=0;i<s;i++)
{
infile.read((char *) &stu[i],sizeof(stu[i]));
}
infile.close();
}
void student1::save_to_file(int s)
{
fstream iofile("Studentinfo.txt",ios::binary);
if(!iofile)
{
cerr<<"\t文件Studentinfo.txt不能打开!"<<endl;
exit(0);
}
for(int i=0;i<s;i++)
{
iofile.write((char *)&stu[i],sizeof(stu[i]));
}
cout<<"学生信息已成功保存到Studentinfo.txt文件中!"<<endl;
iofile.close();
}
void student1::sc(int &s)
{
string zxh;
int p,k=1;
char da;
while(s==0)
{
cout<<"\t没有记录,请先输入!"<<endl;
break;
}
while(k!=0)
{
cout<<"\t请输入您要删除的学号:";
cin>>zxh;
while(zxh.empty())
{
cout<<"\t您输入的学号不正确,请重新输入:"<<endl;
cin>>zxh;
}
for(int i=0;i<s+1;i++)
{
if(zxh!=stu[i].num)
p=0;
else
{
cout<<"\t姓 名:"<<stu[i].name<<endl;
cout<<"\t学 号:"<<stu[i].num<<endl;
cout<<"\t性 别:"<<stu[i].sex<<endl;
cout<<"\t高 数:"<<stu[i].gs<<endl;
cout<<"\t英 语:"<<stu[i].yy <<endl;
cout<<"\t离散数学:"<<stu[i].lis<<endl;
cout<<"\t面向对象:"<<stu[i].cjj<<endl;
cout<<"\t您确定要删除该学生的吗?(y/n)";
cin>>da;
if(da=='y'||da=='Y')
{
for(int j=i;j<s;j++)
{
strcpy(stu[j].name,stu[j+1].name);
stu[j].num=stu[j+1].num;
stu[j].sex=stu[j+1].sex;
stu[j].gs=stu[j+1].gs;
stu[j].yy=stu[j+1].yy;
stu[j].lis=stu[j+1].lis;
stu[j].cjj=stu[j+1].cjj;
}
cout<<"\t该记录已删除!"<<endl;
s=s-1;
k=0;
p=1;
break;
}// // // // // // // // // //
else
{
system("cls");
cout<<"\t该记录未删除!"<<endl;
p=1;
k=0;
break;
}
}
}
if(p==0)
{
cout<<"\t对不起,没有找到您要找的学号!"<<endl;
k=0;
}
}
}
void student1::search(int s)
{
string zxh;//zxh要查找的学号
while(s==0)
{
cout<<"\t没有记录,请先输入!"<<endl;
break;
}
while(s>50)
{
cout<<"\t人数过多!"<<endl;
break;
}
if(s!=0)
{ int p;
cout<<"\t请输入您要查找的学号:";
cin>>zxh;
while(zxh.empty())
{
cout<<"\t您输入的学号不正确,请重新输入:"<<endl;
cin>>zxh;
}
for(int i=0;i<s;i++)
{
cout<<s<<endl;
if(zxh!=stu[i].num)
{
cout<<stu[i].num<<endl;
p=1;
}
else
{
p=0;
cout<<"\t姓 名:"<<stu[i].name<<endl;
cout<<"\t学 号:"<<stu[i].num<<endl;
cout<<"\t性 别:"<<stu[i].sex<<endl;
cout<<"\t高 数:"<<stu[i].gs<<endl;
cout<<"\t英 语:"<<stu[i].yy<<endl;
cout<<"\t离散数学:"<<stu[i].lis<<endl;
cout<<"\t面向对象:"<<stu[i].cjj<<endl;
break;
}
}
if(p==1)
{
cout<<"\t没有找到您要的学号!"<<endl;
}
}
}
int student1::sjc(char s)
{
if(s=='m'||s=='w')
return 0;
else return 1;
}
void student1::sum(int s)
{
float temp,b[50];
while(s==0)
{
cout<<"\t没有记录,请先输入!"<<endl;
break;
}
while(s>=50)
{
cout<<"\t人数已超过!"<<endl;
break;
}
for(int k=0;k<s;k++)
{
b[k]=stu[k].gs+stu[k].yy+stu[k].lis+stu[k].cjj;
stu[k].sum=stu[k].gs+stu[k].yy+stu[k].lis+stu[k].cjj;
}
for(int i=0;i<s;i++)//用冒泡法排序
{
for(int j=0;j<=s-i;j++)
{
if(b[j]<b[j+1])
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
for(int m=0;m<s;m++)
{
for(int n=0;n<s;n++)
{
if(b[m]==stu[n].sum)
{
cout<<"\t排 名:"<<n+1<<endl;
cout<<"\t姓 名:"<<stu[n].name<<endl;
cout<<"\t学 号:"<<stu[n].num<<endl;
cout<<"\t性 别:"<<stu[n].sex<<endl;
cout<<"\t高 数:"<<stu[n].gs<<endl;
cout<<"\t英 语:"<<stu[n].yy <<endl;
cout<<"\t离散数学:"<<stu[n].lis<<endl;
cout<<"\t面向对象:"<<stu[n].cjj<<endl;
cout<<"\t总 分:"<<stu[n].sum<<endl;
}
}
}
}
void tuichu()
{
cout<<"\t---------------------------------------------------------------"<<endl;
cout<<"\t* *"<<endl;
cout<<" \t\t谢谢使用学生成绩管理系统程序,再见! "<<endl;
cout<<"\t* *"<<endl;
cout<<"\t----------------------------------------------------------------"<<endl;
exit(1);
}
char menu_select()
{
char sel;
cout<<"\t请选择您要进行的操作:"<<endl<<endl;
cout<<" 1.输入/添加学生资料;"<<endl;
cout<<" 2.显示学生资料;"<<endl;
cout<<" 3.按学号查找;"<<endl;
cout<<" 4.删除记录;"<<endl;
cout<<" 5.按总分进行排名;"<<endl;
cout<<" 6.查询平均分和及格率;"<<endl;
cout<<" 7.保存到文件"
cout<<" 0.退出;"<<end