#include<bits/stdc++.h>
using namespace std;
class stu
{
public:
string number; //学号
string name; //姓名
string Class; //班级
double chinese; //语文成绩
double math; //数学成绩
double english; //英语成绩
stu() {}
friend istream &operator >> ( istream &in, stu &s ) //重载输入流运算符>>,从输入流中读取stu对象的数据。
{
in>>s.number>>s.name>>s.Class>>s.chinese>>s.math>>s.english;
return in;
}
friend ostream &operator << ( ostream &out, stu &s ) //重载输出流运算符<<,将stu对象的数据输出到输出流中。
{
out<<s.number<<' '<<s.name<<' '<<s.Class<<' '<<s.chinese<<' '<<s.math<<' '<<s.english;
return out;
}//重载>>和<<方便地对stu对象进行输入和输出操作
~stu() {}
};
class sys
{
public:
vectorvecStu;// vector数组
void Create(); //创建
void Add(); //添加
void Show(); //显示学生基本信息
void Searchnews(); //查找学生信息
void Sort(); //按总分降序排序
void Getnews(); //文件的导出,获取文件学生信息
void Savenews(); //文件导入,保存为文件数据
};
void sys::Create()//创建
{
double d1,d2,d3;
cout<<"学生人数:";
int n;
cin>>n;
int i;
string str;
cout<<"请输入学生的基本信息:"<<endl;
for( i=0; i<n; i++ )
{
stu cs; //定义stu类对象
while(1)
{
cout<<"学号: ";
cin>>str;
int flag = 1;
for( vector::iterator it=vecStu.begin(); it != vecStu.end(); it++ )
{
if( it->number == str )
{
flag = 0;
}
}
if( flag == 1 )
{
cs.number = str;
break;
}
else
{
cout<<"学号重复,请重新输入!"<<endl;
}
}
cout<<"姓名: ";
cin>>cs.name;
cout<<"班级: ";
cin>>cs.Class;
while(1)
{
cout<<"语文成绩: ";
cin>>d1;
if( d1>=0 && d1<=100)
{
cs.chinese = d1;
break;
}
else
{
cout<<"成绩错误,请重新输入!"<<endl;
}
}
while(1)
{
cout<<"数学成绩: ";
cin>>d2;
if( d2>=0 && d2<=100)
{
cs.math = d2;
break;
}
else
{
cout<<"成绩错误,请重新输入!"<<endl;
}
}
while(1)
{
cout<<"英语成绩: ";
cin>>d3;
if( d3>=0 && d3<=100)
{
cs.english = d3;
break;
}
else
{
cout<<"成绩错误,请重新输入!"<<endl;
}
}
vecStu.push_back(cs);
cout<<endl;
}
cout<<"学生信息管理程序创建成功"<<endl;
}
void sys::Add()//添加学生信息
{
cout<<"请输入待添加学生的基本信息:"<<endl;
stu cs; //定义stu类对象
double d1,d2,d3;
string str;
while(1)
{
cout<<"学号: ";
cin>>str;
int flag = 1;
for( vector::iterator it=vecStu.begin(); it != vecStu.end(); it++ )
{
if( it->number == str )
{
flag = 0;
}
}
if( flag == 1 )
{
cs.number = str;
break;
}
else
{
cout<<"学号重复,请重新输入!"<<endl;
}
}
cout<<"姓名: ";
cin>>cs.name;
cout<<"班级: ";
cin>>cs.Class;
while(1)
{
cout<<"语文成绩: ";
cin>>d1;
if( d1>=0 && d1<=100)
{
cs.chinese = d1;
break;
}
else
{
cout<<"成绩错误,请重新输入!"<<endl;
}
}
while(1)
{
cout<<"数学成绩: ";
cin>>d2;
if( d2>=0 && d2<=100)
{
cs.math = d2;
break;
}
else
{
cout<<"成绩错误,请重新输入!"<<endl;
}
}
while(1)
{
cout<<"英语成绩: ";
cin>>d3;
if( d3>=0 && d3<=100)
{
cs.english = d3;
break;
}
else
{
cout<<"成绩错误,请重新输入!"<<endl;
}
}
cout<<"请输入学生信息添加位置(第几个):";
int n;
cin>>n;
vecStu.insert( vecStu.begin()+(n-1),cs );
cout<<"学生信息添加成功"<<endl;
}
void sys::Show()//显示学生基本信息
{
for( vector::iterator it = this->vecStu.begin(); it != vecStu.end(); it++ )
{
cout<<"学号: "<number;
cout<<" 姓名: "<name;
cout<<" 班级: "<Class;
cout<<" 语文成绩: "<chinese;
cout<<" 数学成绩: "<math;
cout<<" 英语成绩: "<english;
double dsum = it->chinese + it->math + it->english;
cout<<" 总分: "<<dsum;
cout<<" 平均分: "<<dsum/3<<endl;
}
}
void sys::Searchnews()//查找学生信息
{
if(vecStu.empty()) //判断vector数组是否有学生信息
{
cout<<"暂无学生信息,无法查找"<<endl;
return ;
}
cout<<"请输入要查找的学号: ";
string strnumber;
cin>>strnumber;
for( vector::iterator it = vecStu.begin(); it != vecStu.end(); it++ )
{
if( it->number == strnumber )
{
cout<<"学号: "<number;
cout<<" 姓名: "<name;
cout<<" 班级: "<Class;
cout<<" 语文成绩: "<chinese;
cout<<" 数学成绩: "<math;
cout<<" 英语成绩: "<english;
double dsum = it->chinese + it->math + it->english;
cout<<" 总分: "<<dsum;
cout<<" 平均分: "<<dsum/3<<endl;
}
}
}
bool operator < ( stu &A, stu &B )//定义排序的顺序
{
return ( A.chinese+A.math+A.english > B.chinese+B.math+B.english );
}
void sys::Sort()//按总分降序排序
{
sort( vecStu.begin(), vecStu.end() ); //调用库函数sort
cout<<"按总分降序排序如下:"<<endl;
for( vector::iterator it = vecStu.begin(); it != vecStu.end(); it++ )
{
cout<<"学号: "<number;
cout<<" 姓名: "<name;
cout<<" 班级: "<Class;
cout<<" 语文成绩: "<chinese;
cout<<" 数学成绩: "<math;
cout<<" 英语成绩: "<english;
double dsum = it->chinese + it->math + it->english;
cout<<" 总分: "<<dsum;
cout<<" 平均分: "<<dsum/3<<endl;
}
}
void sys::Getnews()//文件的导出,获取文件学生信息
{
ifstream file2( "成绩.txt", ios_base::in | ios_base::binary );
stu cst;
if(!(file2.is_open()))
{
cout<<"文件打开失败"<<endl;
return ;
}
while(!(file2.eof()))
{
file2>>cst;
vecStu.push_back(cst);
}
file2.close();
}
void sys::Savenews()//文件导入,保存为文件数据
{
ofstream file1( "成绩.txt", ios_base::out | ios_base::binary );
if(!(file1.is_open()))
{
cout<<"文件打开失败"<<endl;
return ;
}
for( vector::iterator it = vecStu.begin(); it != vecStu.end(); it++ )
{
file1<<*it;
if( it != vecStu.end()-1 )
{
file1<<endl;
}
}
cout<<"学生信息已存入文件"<<endl;
file1.close();
}
void menu()//主菜单
{
cout<<" 学生成绩管理系统 "<<endl;
cout<<" 1创建 "<<endl;
cout<<" 2添加 "<<endl;
cout<<" 3汇总 "<<endl;
cout<<" 4排序 "<<endl;
cout<<" 5查询 "<<endl;
cout<<" 6显示 "<<endl;
cout<<" 7文件导入 "<<endl;
cout<<" 8文件导出 "<<endl;
cout<<" 9退出 "<<endl;
}
int main()
{
menu();
int im;
int iz = 1;
cout<<"\n请选择: ";
cin>>im;
if(im==1)
{
sys p;
p.Create();
while(iz==1)
{
cout<<"\n请选择: ";
cin>>im;
switch(im)
{
case 2:
p.Add();
break;
case 3:
p.Show();
break;
case 4:
p.Sort();
break;
case 5:
p.Searchnews();
break;
case 6:
p.Show();
break;
case 7:
p.Savenews();
break;
case 8:
p.Getnews();
break;
case 9:
iz=0;
break;
}
}
}
return 0;
}
上述代码中
for( i=0; i<n; i++ )
{
stu cs; //定义stu类对象
while(1)
{
cout<<"学号: ";
cin>>str;
int flag = 1;
for( vector::iterator it=vecStu.begin(); it != vecStu.end(); it++ )
{
if( it->number == str )
{
flag = 0;
}
}
if( flag == 1 )
{
cs.number = str;
break;
}
else
{
cout<<"学号重复,请重新输入!"<<endl;
}
}
是干嘛的,怎么个思路、过程内容:这段代码是用来创建学生信息的。具体过程如下:
-
首先定义了一个stu类的对象cs,用来存储每个学生的信息。
-
进入一个循环,循环次数为输入的学生人数n。
-
在循环中,首先要求输入学生的学号,并进行重复判断。如果输入的学号在已有的学生信息中不存在,则将输入的学号赋值给cs对象的number属性,并跳出循环;如果学号重复,则输出错误信息。
-
接下来要求输入学生的姓名、班级和语文、数学、英语成绩,并进行成绩的范围判断。如果成绩在0到100之间,则将输入的成绩赋值给cs对象的相应属性,否则输出错误信息。
-
将cs对象添加到vecStu的末尾。
-
循环结束后,所有学生的信息都被添加到了vecStu中。
总结来说,这段代码是通过循环输入学生的基本信息,并进行重复判断和成绩范围判断,然后将每个学生的信息添加到vecStu中,完成学生信息的创建过程。