#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; } } 是干嘛的,怎么个思路、过程内容:这段代码是用来创建学生信息的。具体过程如下:

  1. 首先定义了一个stu类的对象cs,用来存储每个学生的信息。

  2. 进入一个循环,循环次数为输入的学生人数n。

  3. 在循环中,首先要求输入学生的学号,并进行重复判断。如果输入的学号在已有的学生信息中不存在,则将输入的学号赋值给cs对象的number属性,并跳出循环;如果学号重复,则输出错误信息。

  4. 接下来要求输入学生的姓名、班级和语文、数学、英语成绩,并进行成绩的范围判断。如果成绩在0到100之间,则将输入的成绩赋值给cs对象的相应属性,否则输出错误信息。

  5. 将cs对象添加到vecStu的末尾。

  6. 循环结束后,所有学生的信息都被添加到了vecStu中。

总结来说,这段代码是通过循环输入学生的基本信息,并进行重复判断和成绩范围判断,然后将每个学生的信息添加到vecStu中,完成学生信息的创建过程。


原文地址: https://www.cveoy.top/t/topic/qztV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录