需求分析说明
设计一个菜单驱动的学生成绩管理程序。输 入学生的基本信息,包括学生的学号、姓名、数学、语文、英语等 信息,实现如下管理功能:
- 能输入并显示n 个学生的基本信息。
- 计算学生的平均分和总分。
- 按总分降序进行排序。
- 任意输入一个学号,能显示该学生的基本信息。
- 可根据需要添加学生信息到指定位置,亦可在最后追加一批 学生信息。
- 文件的导入和导出(从文件中读取若干条学生信息,或者将 学生信息输出到文件中)。
- 注意:学号不能重复;有效成绩的范围为[0,100]
代码如下:
#include#include #include #include #include #include using namespace std; class CStudent { public: string m_strNumber; //学号 string m_strName; //姓名 string m_strClass; //班级 double m_dChinese; //语文成绩 double m_dMath; //数学成绩 double m_dEnglish; //英语成绩 CStudent() {} friend istream &operator >> ( istream &in, CStudent &s ) //重载>> { in>>s.m_strNumber>>s.m_strName>>s.m_strClass>>s.m_dChinese>>s.m_dMath>>s.m_dEnglish; return in; } friend ostream &operator << ( ostream &out, CStudent &s ) //重载<< { out< vecStu;// vector数组 void Create(); //创建 void Add(); //添加 void Show(); //显示学生基本信息 void Change(); //修改学生信息 void Delnews(); //删除学生信息 void Searchnews(); //查找学生信息 void Sort(); //按总分降序排序 void Getnews(); //文件的导出,获取文件学生信息 void Savenews(); //文件导入,保存为文件数据 }; void CSystem::Create() { double d1,d2,d3; cout<<"学生人数:"; int n; cin>>n; int i; string str; cout<<"请输入学生的基本信息:"< >str; int flag = 1; for( vector ::iterator it=vecStu.begin(); it != vecStu.end(); it++ ) { if( it->m_strNumber == str ) { flag = 0; } } if( flag == 1 ) { cs.m_strNumber = str; break; } else { cout<<"学号重复,请重新输入!"< >cs.m_strName; cout<<"班级: "; cin>>cs.m_strClass; while(1) { cout<<"语文成绩: "; cin>>d1; if( d1>=0 && d1<=100) { cs.m_dChinese = d1; break; } else { cout<<"成绩错误,请重新输入!"< >d2; if( d2>=0 && d2<=100) { cs.m_dMath = d2; break; } else { cout<<"成绩错误,请重新输入!"< >d3; if( d3>=0 && d3<=100) { cs.m_dEnglish = d3; break; } else { cout<<"成绩错误,请重新输入!"< >str; int flag = 1; for( vector ::iterator it=vecStu.begin(); it != vecStu.end(); it++ ) { if( it->m_strNumber == str ) { flag = 0; } } if( flag == 1 ) { cs.m_strNumber = str; break; } else { cout<<"学号重复,请重新输入!"< >cs.m_strName; cout<<"班级: "; cin>>cs.m_strClass; while(1) { cout<<"语文成绩: "; cin>>d1; if( d1>=0 && d1<=100) { cs.m_dChinese = d1; break; } else { cout<<"成绩错误,请重新输入!"< >d2; if( d2>=0 && d2<=100) { cs.m_dMath = d2; break; } else { cout<<"成绩错误,请重新输入!"< >d3; if( d3>=0 && d3<=100) { cs.m_dEnglish = d3; break; } else { cout<<"成绩错误,请重新输入!"< >n; vecStu.insert( vecStu.begin()+(n-1),cs ); cout<<"学生信息添加成功"< ::iterator it = this->vecStu.begin(); it != vecStu.end(); it++ ) { cout<<"学号: "< m_strNumber; cout<<" 姓名: "< m_strName; cout<<" 班级: "< m_strClass; cout<<" 语文成绩: "< m_dChinese; cout<<" 数学成绩: "< m_dMath; cout<<" 英语成绩: "< m_dEnglish; double dsum = it->m_dChinese + it->m_dMath + it->m_dEnglish; cout<<" 总分: "< >strname; cout<<"修改学号输入1,修改语文成绩输入2,修改数学成绩输入3,修改英语成绩输入4"< >n; cout<<"输入改后内容:"; vector ::iterator it; for( it = vecStu.begin(); it != vecStu.end(); it++ ) { if( it->m_strName == strname ) { break; } } if(n==1) { string s; cin>>s; it->m_strNumber = s; } else { int s; cin>>s; switch(n) { case 2: it->m_dChinese = s; case 3: it->m_dMath = s; case 4: it->m_dEnglish = s; } } this->Savenews(); } void CSystem::Delnews() { if(vecStu.empty()) //判断vector数组是否有学生信息 { cout<<"暂无学生信息,无法删除"< >strname; for( vector ::iterator it = vecStu.begin(); it != vecStu.end(); it++ ) { if( it->m_strName == strname ) { vecStu.erase(it); this->Savenews(); } } cout<<"已删除"< >n; switch(n) { case 1: { string strnumber; cout<<"要查找的学生学号: "; cin>>strnumber; for( vector ::iterator it = vecStu.begin(); it != vecStu.end(); it++ ) { if( it->m_strNumber == strnumber ) { cout<<"学号: "< m_strNumber; cout<<" 姓名: "< m_strName; cout<<" 班级: "< m_strClass; cout<<" 语文成绩: "< m_dChinese; cout<<" 数学成绩: "< m_dMath; cout<<" 英语成绩: "< m_dEnglish; double dsum = it->m_dChinese + it->m_dMath + it->m_dEnglish; cout<<" 总分: "< >strname; for( vector ::iterator it = vecStu.begin(); it != vecStu.end(); it++ ) { if( it->m_strName == strname ) { cout<<"学号: "< m_strNumber; cout<<" 姓名: "< m_strName; cout<<" 班级: "< m_strClass; cout<<" 语文成绩: "< m_dChinese; cout<<" 数学成绩: "< m_dMath; cout<<" 英语成绩: "< m_dEnglish; double dsum = it->m_dChinese + it->m_dMath + it->m_dEnglish; cout<<" 总分: "< B.m_dChinese+B.m_dMath+B.m_dEnglish ); } void CSystem::Sort() { sort( vecStu.begin(), vecStu.end() ); //调用库函数sort cout<<"按总分降序排序如下:"< ::iterator it = vecStu.begin(); it != vecStu.end(); it++ ) { cout<<"学号: "< m_strNumber; cout<<" 姓名: "< m_strName; cout<<" 班级: "< m_strClass; cout<<" 语文成绩: "< m_dChinese; cout<<" 数学成绩: "< m_dMath; cout<<" 英语成绩: "< m_dEnglish; double dsum = it->m_dChinese + it->m_dMath + it->m_dEnglish; cout<<" 总分: "< >cst; vecStu.push_back(cst); } file2.close(); } void CSystem::Savenews() { ofstream file1( "成绩.txt", ios_base::out | ios_base::binary ); if(!(file1.is_open())) { cout<<"文件打开失败"< ::iterator it = vecStu.begin(); it != vecStu.end(); it++ ) { file1<<*it; if( it != vecStu.end()-1 ) { file1< >im; if(im==1) { CSystem 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.Change(); break; case 6: p.Searchnews(); break; case 7: p.Show(); break; case 8: p.Savenews(); break; case 9: p.Getnews(); break; case 10: p.Delnews(); break; case 11: iz=0; break; } } } return 0; }



