Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Class File




{ char filename[80]; // имя файла

fstream *fstr; // указатель на поток

int maxpos; // число записей в файле

public:

File(char *filename);

~File();

int Open(); // открытие нового файла

const char* GetName();

int Read(inf &); // считывание записи из файла

void Remote(); // переход в начало файла

void Add(inf); // добавление записи в файл

int Del(int pos); // удаление записи из файла

};

ostream& operator << (ostream &out, File &obj)

{ inf p;

out << "File " << obj.GetName() << endl;

obj.Remote();

while(obj.Read(p))

out<<"\nКлиент -> "<<p.cl<<' '<<p.pk<<' '<<p.sm;

return out;

}

File::File(char *_filename) // конструктор

{ strncpy(filename,_filename,80);

fstr = new fstream();

}

File::~File() // деструктор

{ fstr->close();

delete fstr;

}

int File::Open() // функция открывает новый файл для ввода−вывода

{ fstr->open(filename, ios::in | ios::out | ios::binary| ios::trunc); // бинарный

if (!fstr->is_open()) return -1;

return 0;

}

int File::Read(inf &p) // функция чтения из потока fstr в объект p

{ if(!fstr->eof() && // если не конец файла

fstr->read(reinterpret_cast<char*>(&p),sizeof(inf)))

return 1; //

fstr->clear();

return 0;

}

void File::Remote() // сдвиг указателей get и put в начало потока

{ fstr->seekg(0,ios_base::beg); // сдвиг указателя на get на начало

fstr->seekp(0,ios_base::beg); // сдвиг указателя на put на начало

fstr->clear(); // чистка состояния потока

}

const char* File::GetName() // функция возвращает имя файла

{ return this->filename; }

void File::Add(inf cldata)

{ fstr->seekp(0,ios_base::end);

fstr->write(reinterpret_cast<char*>(&cldata),sizeof(inf));

fstr->flush();

}

int File::Del(int pos) // функция удаления из потока записи с номером pos

{ Remote();

fstr->seekp(0,ios_base::end); // для вычисления maxpos

maxpos = fstr->tellp(); // позиция указателя put

maxpos/=sizeof(inf);

if(maxpos<pos) return -1;

fstr->seekg(pos*sizeof(inf),ios::beg); // сдвиг на позицию,

// следующую за pos

while(pos<maxpos)

{ fstr->read(reinterpret_cast<char*>(&cldata),sizeof(inf));

fstr->seekp(-2*sizeof(inf), ios_base::cur);

fstr->write(reinterpret_cast<char*>(&cldata),sizeof(inf));

fstr->seekg(sizeof(inf),ios_base::cur);

pos++;

}

strcpy(cldata.cl,""); // для занесения пустой записи в

cldata.pk=0; // конец файла

cldata.sm=0;

fstr->seekp(-sizeof(inf), ios_base::end);

fstr->write(reinterpret_cast<char*>(&cldata),sizeof(inf));

fstr->flush(); // выгрузка выходного потока в файл

}

int main(void)

{ int n;

File myfile("file");

if(myfile.Open() == -1)

{ cout << "Can't open the file\n";

return -1;

}

cin>>cldata.cl>>cldata.pk>>cldata.sm;

myfile.Add(cldata);

cout << myfile << endl; // просмотр файла

cout << "Введите номер клиента для удаления ";

cin>>n;

if(myfile.Del(n) == -1)

cout << "Клиент с номером "<<n<<" вне файла\n";

cout << myfile << endl; // просмотр файла

}





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 969 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2323 - | 2254 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.