编程题(文件操作)。定义一个学生类Student。成员有:(1)私有数据成员:ID(学号,int类型),Name(姓名,string类型)。(2)公有成员函数:GetID(),GetName()分别用于获取学生的上述信息;重载输出流运算符<<,使它能输出学生类对象的所有信息。 再编写一个主程序,主程序中定义一个对象数组,并为该对象数组赋值3个学生对象,这三个学生对象的数据可以自定。使用该输出流把这三个同学的基本信息输出到文件“sinfo1.txt”中。最后再从该文件中读取数据,把这3个学生对象信息按照学号的降序写入文件“sinfo2.txt”中。\
时间: 2024-02-15 08:05:47 浏览: 62
设计一个学生类Student(学生学号、姓名、数学、英语、计算机成绩;)
5星 · 资源好评率100%
好的,这道编程题需要我们进行文件操作和类的定义。首先,我们定义一个学生类 `Student`,成员有学号和姓名,代码如下:
```cpp
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
using namespace std;
class Student {
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);
private:
int id_;
string name_;
};
ostream& operator<<(ostream& os, const Student& s) {
os << s.id_ << " " << s.name_;
return os;
}
```
接下来,我们编写主程序,定义一个对象数组并为其赋值,然后输出到文件“sinfo1.txt”中,代码如下:
```cpp
int main() {
Student students[3] = {
{ 1001, "张三" },
{ 1002, "李四" },
{ 1003, "王五" }
};
ofstream ofs("sinfo1.txt");
for (auto s : students) {
ofs << s << endl;
}
ofs.close();
return 0;
}
```
接着,我们需要从文件“sinfo1.txt”中读取数据,并按照学号的降序写入文件“sinfo2.txt”中。代码如下:
```cpp
bool cmp(const Student& s1, const Student& s2) {
return s1.GetID() > s2.GetID();
}
int main() {
Student students[3];
ifstream ifs("sinfo1.txt");
for (int i = 0; i < 3; ++i) {
int id;
string name;
ifs >> id >> name;
students[i] = Student(id, name);
}
ifs.close();
sort(students, students + 3, cmp);
ofstream ofs("sinfo2.txt");
for (auto s : students) {
ofs << s << endl;
}
ofs.close();
return 0;
}
```
完整代码如下:
```cpp
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
using namespace std;
class Student {
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);
private:
int id_;
string name_;
};
ostream& operator<<(ostream& os, const Student& s) {
os << s.id_ << " " << s.name_;
return os;
}
bool cmp(const Student& s1, const Student& s2) {
return s1.GetID() > s2.GetID();
}
int main() {
Student students[3] = {
{ 1001, "张三" },
{ 1002, "李四" },
{ 1003, "王五" }
};
ofstream ofs("sinfo1.txt");
for (auto s : students) {
ofs << s << endl;
}
ofs.close();
Student students2[3];
ifstream ifs("sinfo1.txt");
for (int i = 0; i < 3; ++i) {
int id;
string name;
ifs >> id >> name;
students2[i] = Student(id, name);
}
ifs.close();
sort(students2, students2 + 3, cmp);
ofstream ofs2("sinfo2.txt");
for (auto s : students2) {
ofs2 << s << endl;
}
ofs2.close();
return 0;
}
```
执行完毕后,会在当前目录下生成两个文件“sinfo1.txt”和“sinfo2.txt”,分别存储了学生信息。
阅读全文