#include <iostream> #include <list> #include <vector> #include <string> using namespace std; struct Student { string name; unsigned number; }; struct Score { float mark; unsigned number; }; struct Manager { void InPutStudent(); void InPutScore(); void OutPut(); private: vector<Student> xueSheng; list <Score> chengJI; }; void rest(double n) { while(cin.fail()) { cin.clear(); cin.sync(); cout << "输入错误, 请重试:"; cin >> n; } } void Manager::InPutStudent() { string cName; unsigned coun = 0; while("q" != cName || "Q" != cName) { cout << "按学号输入学生姓名(q结束), 学号" <<++coun << ": " << endl; cin.sync(); getline(cin, cName); // cin >> cName; if("q" == cName || "Q" == cName) break; Student newStudent; newStudent.name = cName; newStudent.number = coun; xueSheng.push_back(newStudent); } } void Manager::InPutScore() { float cMark; unsigned cNumber; while(true) { cout << "请输入学号(-1结束):"; cin >> cNumber; rest(cNumber); if(cNumber == -1) { cout << "Done!" << endl; break; } else if(cNumber <= 0 || cNumber > xueSheng.size()) { cout << "没这人儿~~" << endl; } else { Score newScore; bool fd = false; newScore.number = cNumber; cout << "请输入学号为" << newScore.number << "的成绩 : " << endl; cin >> cMark; rest(cMark); for(list<Score>::iterator ite = chengJI.begin(); ite != chengJI.end(); ++ite) { if(cNumber == ite->number) { ite->mark = cMark; fd = true; } else fd=false; } if(!fd) { newScore.mark = cMark; chengJI.push_back(newScore); } } } } void Manager::OutPut() { unsigned cNumber = 0; while(cNumber != -1) { cout << "~~~~~成绩查询~~~~~" << endl; cout << "请输入你要查询的学号(-1结束):" << endl; cin >> cNumber; rest(cNumber); if(cNumber <= 0 || cNumber > xueSheng.size()) { cout << "没有这个学号 !" << endl; } for(unsigned i = 0; i<= xueSheng.size(); ++i) { for(list<Score>::iterator ite = chengJI.begin(); ite != chengJI.end(); ++ite ) { if(cNumber == xueSheng[i].number && cNumber == ite->number) { cout << "学号:" << ite->number <<"/n姓名:" << xueSheng[i].name << "/n成绩:" << ite->mark << endl; } } } } } int main() { Manager wish; int sel; do { cout << "___________________菜单______________________/n"; cout << "1>输入学生姓名/n2>输入成绩/n3输出成绩/n4退出>/n"; cin >> sel; rest(sel); switch(sel) { case 1: wish.InPutStudent(); break; case 2: wish.InPutScore(); break; case 3: wish.OutPut(); break; case 4: cout << "结束!"<< endl; break; default: cout << "没有这个选项!" << endl; break; } } while(sel != 4); return 0; }