题目具体要求: (老师出的题目,可能有那么不太完美)
请用面向对象的思想实现学生信息管理:
学生信息包括:学号、姓名、数学成绩、英语成绩,建立一个学生类Student。依次从文件调入学生信息以对象的形式存在vector中,按学号顺序依次存放。如果需要,请增加必要的其他类及异常处理及运算符重载。
1)根据学号查询学生的单科分和总分;
2)根据学号修改某科成绩;
3)按学号输出所有学生的成绩单(文件存放),含学号、姓名、数学成绩、英语成绩、总分、排名(能力足的同学实现)
4)输出有挂科学生的学号、姓名和对应的科目。
txt文件内容如下图:姓名 学号 数学成绩 英语成绩

完整代码如下:
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
class Student //学生类
{
public:
Student(string name, long long id, float Math, float English)
{
this->name = name;
this->id = id;
this->Math = Math;
this->English = English;
Sum = (Math + English);
}
string name;
long long id;
float Math;
float English;
float Sum;
};
class stusystem
{
public:
stusystem() //打开文件
{
system("cls");
ifstream ifs("score.txt", ios::in);
if (ifs.is_open() != NULL)
{
string name;
long long id;
float Math;
float English;
while (ifs >> name >> id >> Math >> English )
{
Student s(name, id, Math,English);
a.push_back(s);
}
}
else
{
cout << "不存在该文件" << endl;
}
}
vector<Student>a;
void Save();//保存
void Findid(); //查找学号
void Remake();//修改成绩
void Sort();//按学号排名
void M_Sort();//按总分排名
void guake();//输出挂科
void mainmenu() //主菜单
{
system("cls");
cout << "1.按学号查询"<<endl;
cout << "2.根据学号修改某科成绩"<<endl;
cout << "3.按学号输出所有学生成绩单--文件存放"<<endl;
cout << "4.按总分排名--文件存放" << endl;
cout << "5.输出有挂科的学生" << endl;
int x;
cin >> x;
switch (x)
{
case 1:Findid(); break;
case 2:Remake(); break;
case 3:Sort(); break;
case 4:M_Sort(); break;
case 5:guake(); break;
default:cout << "输入错误,请重新输入\n";
mainmenu(); break;
}
}
};
void stusystem::Save() //保存文件
{
ofstream ofs("score.txt", ios::out);
for (vector<Student>::iterator i = a.begin(); i != a.end(); i++)
{
ofs << (*i).name << "\t" << (*i).id << "\t" << (*i).Math << "\t" << (*i).English << "\t" << (*i).Sum << endl;
}
ofs.close();
}
void stusystem::Findid()
{
long long y; //输入查找的学号
bool flag = false; //异常解决方案
cout << "请输入需查找的学生学号:";
cin >> y;
for (vector<Student>::iterator i = a.begin(); i != a.end(); i++)
{
if ((*i).id == y)
{
flag = true;
cout << (*i).name << " " << (*i).id << " " << (*i).Math << " " << (*i).English << "\t" <<(*i).Sum << endl;
cout << "\n按任意键返回主菜单";
char ch;
cin >> ch;
mainmenu();
}
if (flag == false)
{
cout << "查无此人!" << endl;
Findid();
}
}
}
void stusystem::Remake()
{
system("cls");
cout << "修改学生成绩:" << endl;
cout << "请输入要修改的学生学号:";
long long id;
cin >> id;
for (vector<Student>::iterator i = a.begin(); i != a.end(); i++)
{
if ((*i).id == id)
{
cout << "已找到该学生,请重新输入该学生的信息" << endl;
cout << "修改数学成绩输入 1 ,修改英语成绩输入 2 ";
float math, english;
int c;
cin >> c;
switch (c)
{
case 1:cin >> math; (*i).Math = math; break;
case 2:cin >> english; (*i).English = english; break;
default:cout << "输入错误,将返回主菜单\n"; mainmenu(); break;
}
}
}
Save();
cout << "\n按任意键返回主菜单"; char ch;
cin >> ch; return;
}
bool mysort(Student a, Student b)//自定义排序规则
{
return a.id < b.id ; //学号从小到大排
}
void stusystem::Sort()//按学号排名
{
system("cls");
if (a.size() == 0)
cout << "文件不存在" << endl;
else {
sort(a.begin(), a.end(),mysort); //排序函数从向量表头至表尾使用自定义mysort规则
Save();
cout << "\n按任意键返回主菜单"; char ch;
cin >> ch; return;
}
}
bool M_mysort(Student a, Student b)//自定义排序规则
{
return a.Sum > b.Sum ; //总分从大到小排
}
void stusystem::M_Sort()//按学号排名
{
system("cls");
if (a.size() == 0)
cout << "文件不存在" << endl;
else {
sort(a.begin(), a.end(), M_mysort); //排序函数从向量表头至表尾使用自定义mysort规则
Save();
cout << "\n按任意键返回主菜单";
char ch;
cin >> ch;
return;
}
}
void stusystem::guake()
{
cout << "数学挂科:" << endl;
for (vector<Student>::iterator it = a.begin(); it != a.end(); it++)
{
if ((*it).Math < 60)
{
cout << (*it).name << " " << (*it).id << " " << (*it).Math<< endl;
}
}
cout << "英语挂科:" << endl;
for (vector<Student>::iterator it = a.begin(); it != a.end(); it++)
{
if ((*it).English < 60)
{
cout << (*it).name << " " << (*it).id << " " << (*it).English << endl;
}
}
cout << "\n按任意键返回主菜单";
char ch;
cin >> ch;
return;
}
int main()
{
stusystem stu;
while (1)
{
stu.mainmenu();
}
system("pause");
return 0;
}运行截图:

版权声明:本文为zhaoshiwei66原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。