fstream p_post; // имя потока класса post
static int razm_zap; // размер записи в байтах класса post
void post::zapis_zap(int nomer) )// функция записи в файл записи принимает
//номер записи
{
p_post.seekg((long)(nomer*razm_zap),ios::beg);
p_post.write((char*)&izd,razm_zap);
if(!p_post.good())
{
cout<<'\a';
gotoxy(1,23);
cerr<<”Ошибка записи в файл “<<imf<<”, нажмите <Enter>\n”;
getch();
exit(-1);}
}
void post::chtenie_zap(int nomer) // функция чтения записи из файла
//принимает номер записи
{
p_post.seekg((long)(nomer*razm_zap),ios::beg);
p_post.read((char*)&izd,razm_zap);
if(!p_post.good()&&!p_post.eof())
{
cout<<'\a';
gotoxy(1,23);
cerr<<"Ошибка чтения файла " <<imf<<", нажмите <Enter>\n";
getch();
exit(-1);}
}
void post::init() // функция открытия файла и создания индексного массива
{ // открытие файла и расчет размера записи
clrscr();
razm_zap=(sizeof izd)+(sizeof naim)+(sizeof mosh);
p_post.open(imf,ios::in|ios::out|ios::nocreate|ios::binary);
if(!p_post)
{
p_post.open(imf,ios::in|ios::out|ios::binary);
if (!p_post)
{
gotoxy(1,23);
clreol();
cerr<<"Ошибка открытия файла "<<imf<<", нажмите <Enter>\n";
getch();
exit(-1);
}
izd[0]='\0'; // создание пустой записи
naim[0]='\0'; // прямой доступ к собственным элементам
mosh=0;
zapis_zap(0); // прямой доступ к файлу записи пустой записи
}
int pr=0; // признак записи:0 – пустая, 1 - занятая
int i=0; // порядковый номер записи файла
chtenie_zap(i); // прямой доступ к файлу чтения записи файла
while(!p_post.eof()) // цикл создания индексного массива
{ // прямой доступ к файлу базового класса ind
init_ind(i,izd); // создание элемента индексного массива
if(izd[0]!='\0')pr=1; // установка pr=1 для занятой записи
i++;
chtenie_zap(i);
}
init_kol(i); // прямой доступ к файлу класса ind, инициализация количества элементов
p_post.clear(0); // восстановление потока, очистка бита конца файла
if(!pr) // ввод сообщения о пустом файле при pr==0
{ cout<<'\a';
gotoxy(1,23);
clreol();
cout<<"Файл "<<imf<<" пустой, нажмите <Enter> и <Создание>\n";
getch();}
}
void post::formecran(char*podmenu) // функция вывода формы документа
{ // принимает название опции подменю
const int col=4;
window(10,3,70,16); //установка окна для формы документа
textattr(15+(1<<4)); // установка цвета: символы – белые, фон - синий
clrscr(); // очистка окна (документа)
gotoxy(10,2);
cputs("СПРАВОЧНИК ПОСТАВЩИКОВ");
gotoxy(40,2);
cputs(podmenu); // вывод названия опции подменю
textattr(0+(7<<4));
gotoxy(col,6);
cputs("Наим. поставщика: ");
gotoxy(col,8);
cputs("Код изделия: ");
gotoxy(col,10);
cputs("Мощность поставщика: ");
window(1,1,80,25); // восстановление полного экрана
textattr(15+(0<<4)); // восстановление цветности экрана: символы –белые,
//фон черный
gotoxy(1,23);
clreol(); // очистка управляющей строки
}
void post::vvod() // функция ввода содержимого документа
{
const int col=37;
gotoxy(col,8);
cin>>izd;
gotoxy(col,10);
cin.seekg(0,ios::end);
cin.get(naim,sizeof(naim));
do // цикл ввода числа с контролем, повтор при ошибке
{
gotoxy(col,12);
cout<<" "; // очистка поля для ввода
gotoxy(col,12);
cin.clear(0); // восстановление потока, очистка битов ошибок
cin.seekg(0,ios::end); //очистка буфера ввода
cin>>mosh;
}
while(!cin); //исп. Перегруженная операция НЕ (!)
}
void post::vyvod() // функция вывода содержимого документа
{
const int col=37;
gotoxy(col,8);
cout<<izd;
gotoxy(col,10);
cout<<naim;
gotoxy(col,12);
cout<<mosh;
}
void post::sozdanie() // функция создания / добавления документа в базу
{ //данных
char ch;
int nomer; // номер записи
do // цикл/создания добавления документов
{
formecran("Создание/Добавление"); // вызов функции формы документа
vvod(); // прямой доступ к файлу ввода содержимого документа
nomer=dob_ind(izd); // прямой доступ к файлу ввода содержимого документа
zapis_zap(nomer); // прямой доступ к файлу записи в файл
do // цикл управления клавиатурой, только <Enter> и <Esc>
{
gotoxy(1,23);
cout<<"Продолжить добавление?: <Enter> Да, <Esc> Нет";
ch=getch();
}
while (ch!=13&&ch!=27);
}
while(ch==13); // конец цикла создания/добавления документов
return;
}
void post::prosmotr()
{
char ch;
int pr=-1; //первая непустая запись
int i=0;
chtenie_zap(i);
formecran("Просмотр");
vyvod();
for(;;)
{
gotoxy(1,23);
clreol();
cout<<"<- Предыдущая, -> Следующая, <Esc> Выход";
ch=getch();
if(ch==27) break;
if (ch==0&& kbhit())
{
ch=getch();
switch(ch)
{
case 77: i++;
chtenie_zap(i);
if (!p_post.eof())
{
formecran("Просмотр");
vyvod();
}
else
{
cout<<'\a';
gotoxy(45,23);
cout<<"Конец файла";
delay(1000);
i--;
p_post.clear(0);
}
break;
case 75: i--;
if (i>=pr)
{
chtenie_zap(i);
formecran("Просмотр");
vyvod();
}
else
{
cout<<'\a';
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.