/* * files.cpp * * Created on: 17.10.2012 * Author: trifon */ #include #include #include using namespace std; void essay() { fstream f("essay.txt"); char line[100]; f.getline(line, 100); f << "DO NOT READ THIS!\n"; cout << "The line is: " << line; } class Student { private: int fn; double grade; char name[40]; public: Student(int _fn, double _grade, char const* _name) : fn(_fn), grade(_grade) { strncpy(name, _name, 39); name[39] = '\0'; } friend istream& operator>>(istream&, Student&); friend ostream& operator<<(ostream&, Student const&); }; istream& operator>>(istream& is, Student& s) { is >> s.fn >> s.grade; is.getline(s.name, 40); return is; } ostream& operator<<(ostream& os, Student const& s) { os << s.fn << " " << s.grade << " " << s.name << endl; return os; } void writeText() { Student s1(40000, 5.50, "Иван Петров"); Student s2(40001, 3.50, "Петър Иванов"); Student s3(40002, 6.00, "Петър Петров"); ofstream fo("students.txt"); fo << s1 << s2 << s3; } void readText() { Student s(0, 0, ""); ifstream fi("students.txt"); ofstream fo("students.dat", ios::out | ios::binary); while (fi >> s) { cout << "Прочетох студент: " << s; fo.write((char const*)&s, sizeof(s)); } } void readBinary() { Student s(0, 0, ""); ifstream fi("students.dat", ios::in | ios::binary); while (fi.read((char*)&s, sizeof(s))) { cout << "От students.dat: " << s; } } Student readStudent(int i) { Student s(0, 0, ""); ifstream fi("students.dat", ios::in | ios::binary); fi.seekg(i * sizeof(Student)); fi.read((char*)&s, sizeof(s)); if (!fi) { cerr << "Няма такъв студент!"; return s; } cout << "Студент с пореден номер " << i; cout << ": " << s; return s; } void writeStudent(int i, Student const& s) { fstream fo("students.dat", ios::in | ios::out | ios::binary); fo.seekp(i * sizeof(Student)); fo.write((char const*)&s, sizeof(s)); } int main() { // essay(); // writeText(); // readText(); // Student s(0, 0,""); // cin >> s; readBinary(); // writeStudent(2, readStudent(1)); // Student s(40003, 3.20, "Георги Петров"); // writeStudent(10000, s); return 0; }