Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
97
Добавлен:
10.12.2013
Размер:
42.5 Кб
Скачать

Министерство Образования Российской Федерации

Пермский Государственный Технический Университет

Кафедра ИТАС

Лабораторная работа № 7

ПОТОКОВЫЕ КЛАССЫ

Выполнил: Студент

группы АСУ 04-2

Заколодкин К.А.

Проверил: Ноткин А.М.

Пермь 2005

Постановка задания

1. Определить пользовательский тип данных (класс). Определить и реализовать в нем конструкторы, деструктор, операции присваивания, ввода и вывода для стандартных потоков.

2. Написать программу № 1 для создания объектов пользова-тельского класса (ввод исходной информации с клавиатуры с использованием перегруженной операции “>>) и сохранения их в потоке (файле). Предусмотреть в программе вывод сообщения о количестве сохраненных объектов и о длине полученного файла в байтах.

3. Выполнить тестирование программы.

4. Реализовать для вывода в поток свой манипулятор с параметрами.

5. Написать программу № 2 для чтения объектов из потока, сохранения их в массиве и просмотра массива. Для просмотра объектов использовать перегруженную для cout операцию << и свой манипулятор. Предусмотреть в программе вывод сообщения о количестве прочитанных объектов и байтов.

6. Выполнить программу для чтения из файла сохраненных предыдущей программой объектов и их просмотра.

7. Написать программу № 3 для добавления объектов в поток.

8. Выполнить программу, добавив в поток несколько объектов и просмотреть полученный файл.

9. Написать программу № 4 для удаления объектов из файла.

10. Выполнить программу, удалив из потока несколько объектов и просмотреть полученный файл.

11. Написать программу № 5 для корректировки (т.е. замены) записей в файле.

12. Выполнить программу и просмотреть полученный файл.

Определение пользовательского класса:

//Bibl.h

#ifndef CLASS

#define CLASS

//-----------------------------------------------------------------------

#include<iostream.h>

#include<fstream.h>

#include<afx.h>

//-----------------------------------------------------------------------

class BIBL

{

char name[30];

char autor[30];

float price;

public:

BIBL ();

BIBL (char*,char*,float);

BIBL (const BIBL&);

~BIBL ();

char* GetName();

void Input();

void Show();

friend istream& operator>>(istream&,BIBL&);

friend ostream& operator<<(ostream&,BIBL&);

};

//-----------------------------------------------------------------------

#endif

Реализация манипулятора

#ifndef MANIP

#define MANIP

typedef far ostream&(far *point)(ostream&, int n, char c,int mclass mnp

{

int w;//ширина

char fill;// заполнитель

int prec;//точность

point f

public:

mnp( point F, int W, char FILL,int PREC){w=W; fill=FILL;prec=PREC; f=F;}

friend ostream& operator<<(ostream&, mnp);

};

ostream& operator<<(ostream& out, mnp x)

{ return x.f(out, x.w, x.fill, x.prec ); }

ostream& func(ostream& out, int w, char fill, int prec)

{

out.width(w);

out.precision(prec);

out.fill(fill);

out.flags(ios::left);

return out;

}

mnp mm(int w, char fill,int prec=2)

{ return mnp ( func, w, fill ,prec); }

#endif

Реализация функций find(),del() и repl().

#include<string.h>

#include<stdio.h>

CString Oem(char* );

char* tempname="..\\temp";

char* filename="..\\f.txt";

int find(ifstream& f,char* s)

{

int Size;

BIBL a;

f.seekg(0,ios::end);

Size=f.tellg();

f.seekg(0,ios::beg);

for(int i=0;i<(Size/64);i++)

{

f>>a;

if(strcmp(a.GetName(),s)==0)return i*64;

}

return -1;

}

void del(ifstream& f,char* name)

{

int Pos=find(f,name);

int Size;

BIBL b;

if(Pos==-1)

{

cout<<Oem("\n Нет такого элемента \n");

return;

}

f.seekg(0,ios::end);

Size=f.tellg();

f.seekg(0,ios::beg);

fstream NewFile(tempname,ios::out | ios::binary);

for(int i=0;i<Pos/64;i++)

{

f>>b;

NewFile<<b;

}

f>>b;

for(i=0;i<((Size-Pos)/64-1);i++)

{

f>>b;

NewFile<<b;

}

NewFile.close();

f.close();

remove(filename);

rename(tempname,filename);

}

void repl(ifstream& f,char* name)

{

int Pos=find(f,name);

int Size;

BIBL b;

if(Pos==-1)

{

cout<<Oem("\n Нет такого элемента \n");

return;

}

f.seekg(0,ios::end);

Size=f.tellg();

f.seekg(0,ios::beg);

fstream NewFile(tempname,ios::out | ios::binary);

for(int i=0;i<Pos/64;i++)

{

f>>b;

NewFile<<b;

}

f>>b;

b.Input();

for(i=0;i<((Size-Pos)/64-1);i++)

{

f>>b;

NewFile<<b;

}

NewFile.close();

f.close();

remove(filename);

rename(tempname,filename);

}

Соседние файлы в папке Lab_7