Разработка программы задачи методом объектно-ориентированного программирования, страница 3

gotoxy(45,23);

cout<<"Начало файла";

delay(1000);

i++;

}

break;

}

    }

}

return;

}

void post::correct(int x)  //функция поиска, замены и удаления документов

{                     // х==1 – поиск, х==2 – замена, х==3 - удаление

char kizd[10];      // код изделия искомой записи, может быть несколько

//записей с одним и тем же кодом изделия

char ch;

int nomer;       // номер искомой записи в файле данных

const int col=37;

char*cor;

switch(x)         // присваивание название опции для вывода в документе

{

case 1:cor="Поиск";

break;

case 2:cor="Замена";

break;

case 3:cor="Удаление";

break;

}

do

{

formecran(cor);        // прямой доступ к файлу вывода формы документа

gotoxy(1,23);

cout<<"Введите Код изделия записи: ";

cin>>kizd;

for(int ind=0;(ind=poisk_ind(kizd,ind,nomer))!=-1;ind++)    // цикл поиска и

//вывода записей по  kizd; прямой доступ к  файлу

{      // класса ind, поиск в индексом массиве и возврат номера искомой записи

//или -1

chtenie_zap(nomer);   // прямой доступ к файлу чтения записи

formecran(cor);     // прямой доступ к файлу чтения записи

vyvod();     //прямой доступ к файлу вывода содержимого документа

do

{

gotoxy(1,23);

if(x==1)

cout<<"Запись найдена?: <Enter> Да, <Esc> Нет\n";

else

cout<<cor<<"записи?: <Enter> Да, <Esc> Нет\n";

ch=getch();

}

while (ch!=13&&ch!=27);

if(ch==13) break;

}

if (ind==-1)

{

gotoxy(1,23);

clreol();

cout<<"Запись не найдена, нажмите <Enter>\n";

getch();

return;

}

if (x==2||x==3)

{

if (x==2)

{

formecran(cor);   // прямой доступ к файлу вывода формы документа

vvod();      // прямой  доступ к файлу ввода нового содержимого заменяемого документа

}

else

{

naim[0]='\0';

izd[0]='\0';

mosh=0;

}

zapis_zap(nomer);

cor_ind(ind,kizd);

}

formecran(cor);

do

{

gotoxy(1,23);

cout<<"Продолжить "<<cor<<"?:<Enter> Да, <Esc> Нет\n";

ch=getch();

}

while(ch!=13&&ch!=27);

}

while(ch==13);

}

Документ «Справочник потребностей» имеет вид:

СПРАВОЧНИК ПОТРЕБНОСТЕЙ     Поиск

Код изделия     :##########

Наименование :#######################

Потребность    :###########

potr.hpp

#ifndef potr_hpp

#define potr_hpp

#include <fstream.h>

#include <stdlib.h>

#include <dos.h>

#include "index.hpp"

class potr: public ind

{

protected:

char izd[5];

char nizd[30];

float potreb;

public:

potr(char*im):ind(im)

{

izd[0]='\0';

nizd[0]='\0';

potreb='\0';

}

void init();

void sozdanie();

void prosmotr();

void correct(int);

protected:

void zapis_zap(int);

void chtenie_zap(int);

private:

void formecran(char*podmenu);

void vvod();

void vyvod();

};

#endif

potr.cpp

#include "potr.hpp"

fstream p_potr;

static int razm_zap;

void potr::zapis_zap(int nomer)

{

p_potr.seekg((long)(nomer*razm_zap),ios::beg);

p_potr.write((char*)&izd,razm_zap);

if(!p_potr.good())

{

cout<<'\a';

gotoxy(1,23);

cerr<<"Ошибка записи файла "<<imf<<", нажмите <Enter>\n";

getch();

exit(-1);

}

}

void potr::chtenie_zap(int nomer)

{

p_potr.seekg((long)(nomer*razm_zap),ios::beg);

p_potr.read((char*)&izd,razm_zap);

if(!p_potr.good()&&!p_potr.eof())

{

cout<<'\a';

gotoxy(1,23);

cerr<<"Ошибка чтения файла " <<imf<<", нажмите <Enter>\n";

getch();

exit(-1);}

}

void potr::init()

{

clrscr();

razm_zap=(sizeof izd)+(sizeof nizd)+(sizeof potreb);

p_potr.open(imf,ios::in|ios::out|ios::nocreate|ios::binary);

if(!p_potr)

{

p_potr.open(imf,ios::in|ios::out|ios::binary);

if (!p_potr)

{

gotoxy(1,23);

clreol();

cerr<<"Ошибка открытия файла "<<imf<<", нажмите <Enter>\n";

getch();

exit(-1);

}

izd[0]='\0';

nizd[0]='\0';

potreb=0;

zapis_zap(0);

}

int pr=0;

int i=0;

chtenie_zap(i);

while(!p_potr.eof())

{

init_ind(i,izd);

if(izd[0]!='\0')pr=1;

i++;

chtenie_zap(i);

}

init_kol(i);

p_potr.clear(0);

if(!pr)

{ cout<<'\a';

gotoxy(1,23);

clreol();

cout<<"Файл "<<imf<<" пустой, нажмите <Enter> и <Создание>\n";

getch();}

}

void potr::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 potr::vvod()

{

const int col=37;

gotoxy(col,8);

cin>>izd;

gotoxy(col,10);

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

cin.get(nizd,sizeof(izd));

do

{

gotoxy(col,12);

cout<<"        ";

gotoxy(col,12);

cin.clear(0);

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

cin>>potreb;

}

while(!cin);

}

void potr::vyvod()

{

const int col=37;

gotoxy(col,8);

cout<<izd;

gotoxy(col,10);

cout<<nizd;

gotoxy(col,12);

cout<<potreb;

}

void potr::sozdanie()

{

char ch;

int nomer;

do

{

formecran("Создание/Добавление");

vvod();

nomer=dob_ind(izd);

zapis_zap(nomer);

do

{

gotoxy(1,23);

cout<<"Продолжить добавление?: <Enter> Да, <Esc> Нет";

ch=getch();

}