定义一个学生类Student。成员有:(1)私有数据成员:ID(学号,int类型),Name(姓名,string类型)。(2)公有成员函数:GetID(),GetName()分别用于获取学生的上述信息;重载输出流运算符<<,使它能输出学生类对象的所有信息。 再编写一个主程序,主程序中定义一个对象数组,并为该对象数组赋值3个学生对象,这三个学生对象的数据可以自定。使用该输出流把这三个同学的基本信息输出到文件“sinfo1.txt”中。最后再从该文件中读取数据,把这3个学生对象信息按照学号的降序写入文件“sinfo2.txt”中。
时间: 2024-02-15 19:05:17 浏览: 92
好的,我理解了你的要求。以下是实现你要求的代码:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
class Student
{
private:
int ID;
string Name;
public:
Student(int id, string name): ID(id), Name(name) {}
int GetID() const { return ID; }
string GetName() const { return Name; }
friend ostream& operator<<(ostream& os, const Student& s)
{
os << "ID: " << s.ID << ", Name: " << s.Name;
return os;
}
};
bool cmp(const Student& s1, const Student& s2)
{
return s1.GetID() > s2.GetID();
}
int main()
{
Student students[3] = { Student(1001, "Tom"), Student(1003, "Jerry"), Student(1002, "Alice") };
ofstream fout("sinfo1.txt");
for (int i = 0; i < 3; i++)
{
fout << students[i] << endl;
}
fout.close();
ifstream fin("sinfo1.txt");
Student readStudents[3];
for (int i = 0; i < 3; i++)
{
string str;
getline(fin, str);
int idIndex = str.find("ID: ");
int commaIndex = str.find(", Name: ");
int id = stoi(str.substr(idIndex + 4, commaIndex - idIndex - 4));
string name = str.substr(commaIndex + 8);
readStudents[i] = Student(id, name);
}
fin.close();
sort(readStudents, readStudents + 3, cmp);
ofstream fout2("sinfo2.txt");
for (int i = 0; i < 3; i++)
{
fout2 << readStudents[i] << endl;
}
fout2.close();
return 0;
}
```
解释如下:
- `Student`类定义了一个学生对象,包括学号和姓名,并重载了输出流运算符,使得能够输出学生对象的所有信息。
- `cmp`函数用于在排序时比较学号大小,实现学号的降序排列。
- 在主程序中,首先定义了三个学生对象,并使用输出流运算符将它们的信息输出到文件`sinfo1.txt`中。
- 然后从文件`sinfo1.txt`中读取数据,并将读取的字符串解析为学生对象。这里使用了`substr`函数和`stoi`函数。
- 接着,使用`sort`函数对学生对象数组进行排序,按照学号的降序排列。
- 最后,使用输出流运算符将排序后的学生对象信息输出到文件`sinfo2.txt`中。
阅读全文