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

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

}

while(ch==13);

}

void potr::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_potr.eof())

{

formecran("Просмотр");

vyvod();

}

else

{

cout<<'\a';

gotoxy(45,23);

cout<<"Конец файла";

delay(1000);

i--;

p_potr.clear(0);

}

break;

case 75: i--;

if (i>=pr)

{

chtenie_zap(i);

formecran("Просмотр");

vyvod();

}

else

{

cout<<'\a';

gotoxy(45,23);

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

delay  (1000);

i++;

}

break;

}

    }

}

return;

}

void potr::correct(int x)

{

char kodizd[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>>kodizd;

for(int ind=0;(ind=poisk_ind(kodizd,ind,nomer))!=-1;ind++)

{

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

{

izd[0]='\0';

nizd[0]='\0';

potreb=0;

}

zapis_zap(nomer);

cor_ind(ind,kodizd);

}

formecran(cor);

do

{

gotoxy(1,23);

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

ch=getch();

}

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

}

while(ch==13);

}

Рассмотрим производный класс itog, имеющий несколько базовых классов: index, post, potr.

ВЕДОМОСТЬ ПОТРЕБНОСТЕЙ      Расчет

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

Наименование    Наименование    Превышение

изделия                 поставщика

#############     ###########       #########

#############    ###########        #########

itog.hpp

#ifndef itog_hpp

#define itog_hpp

#include <fstream.h>

#include <iomanip.h>

#include <stdlib.h>

#include <dos.h>

#include "post.hpp"

#include "potr.hpp"

class itog: public post,public potr  // определение производного класса itog,

{                                                         // множественное наследование

private:

float itog;

public:

itog(char*im1,char*im2):post(im1),potr(im2) ) // конструктор

  {                                                       // вызывает конструкторы базовых классов

mosh=potreb=itog=0; // post и potr инициализируют собственные элементы

   }                         // прототипы элементов-функций

void sozdanie();

private:

void formecran(char*);

};

#endif

itog.cpp

#include "itog.hpp"

void itog::formecran(char*podmenu)

{

window(10,3,70,20);

textattr(15+(1<<4));

clrscr();

gotoxy(10,2);

cputs("ВЕДОМОСТЬ ПОТРЕБНОСТЕЙ");

gotoxy(40,2);

cputs(podmenu);

gotoxy(4,4);

cputs("Код изделия:                    Наим.изделия                       \r\n");

cputs("-------------------------------------------------------------------\r\n");

cputs("Наим.поставщика:                   Превышение:                \r\n");

cputs(" -------------------------------------------------------------------\r\n");

window(1,1,80,25);

textattr(15+(0<<4));

gotoxy(1,23);

clreol();

}

void itog::sozdanie()

{

char ch;

char tab[max_pole];

int nomer;

do

{

formecran("Расчет");

gotoxy(1,23);

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

cin>>tab;

int pr=0,k=0;

for (int nomer1=0;(nomer1=post::poisk_ind(tab,nomer1,nomer))!=-1;nomer1++)

{

post::chtenie_zap(nomer);

gotoxy(25,6);

cout<<tab;

gotoxy(54,6);

cout<<nizd;

int nomer2=0;

if ((nomer2=potr::poisk_ind(post::izd,nomer2,nomer))!=-1)

{

potr::chtenie_zap(nomer);

pr=1;

if(mosh<potreb)

{

itog=potreb-mosh;

}

k++;

gotoxy(27,k+9);

cout<<naim;

if(k==10)

{

gotoxy(1,23);

clreol();

cout<<"Нажмите <Enter>";

getch();

k=0;

formecran("Расчет");}

}

else

{

gotoxy(1,23);

clreol();

cout<<"Код изделия "<<post::izd<<" не найден в файле "<<potr::imf;

gotoxy(1,24);

cout<<"Расчет остановлен, нажмите <Enter>";

getch();

return;}

}

if ((nomer1==-1)&&!pr)

{

gotoxy(1,23);

clreol();

cout<<"Код изделия "<<tab<<" не найден в файле "<<post::imf<<", нажмите <Enter>\n";

getch();

return;

}

gotoxy(55,10);

cout<<itog;

gotoxy(1,23);

cout<<"Конец вывода, нажмите <Enter>";

getch();

do

{

gotoxy(1,23);

clreol();

cout<<"Продолжить расчет для следующего Кода изделия?:""<Enter> Да, <Esc> Нет";

ch=getch();

}

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

}

while(ch==13);

}

Для функционирования  нашей системы надо создать файл управления,  содержащий главную функцию и меню, которое имеет вид:

Справочник поставщиков   Справочник потребности   Расчет   Выход