Основы алгоритмизации и языки программирования: Практикум на С++ (Система программирования С++. Процедурное программирование. Объектно-ориентированное программирование), страница 13

    }

    formecran(cor);

    do

    {

      gotoxy(2,23);

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

      ch=getch();

    }        

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

  }

  while (ch==13);

return;

}

//файл заголовков cena.hpp без изменений

//файл кодов cena.cpp

#include "cena.hpp"

fstream p_cena;

static int razm_zap;

//функция zapis_zap

void cena::zapis_zap(int nomer)

{

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

  p_cena.write((char *)&vid,razm_zap);

  if (!p_cena.good())

  {

    cout<<‘\a’;

    gotoxy(2,23);

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

    getch();

    exit(-1);

  }

  return;

}

//функция chtenie_zap

void cena::chtenie_zap(int nomer)

{

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

  p_cena.read((char *)&vid,razm_zap);

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

  {

    cout<<‘\a’;

    gotoxy(2,23);

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

    getch();

    exit(-1);

  }

  return;

}

//функция init

void cena::init()

{

  clrscr();

  razm_zap=(sizeof vid)+(sizeof naim)+(sizeof rascenka);

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

  if (!p_cena)

  {

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

    if (!p_cena)

    {

      gotoxy(2,23);

      clreol();

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

      getch();

      exit(-1);

    }

    vid[0]='\0';

    naim[0]='\0';

    rascenka=0;

   zapis_zap(0);

}

  int pr=0;

  int i=0;

 chtenie_zap(i);

while(!p_cena.eof())

  {

    init_ind(i,vid);

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

    i++;

   chtenie_zap(i);

}

  init_kol(i);

  p_cena.clear(0);

if (!pr)

  {

    cout<<'\a';

    gotoxy(2,23);

    clreol();

    cout<<"Файл "<<imf

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

    getch();

  }

  return;

}

//функция formecran

void cena::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(2,23);

  clreol();

  return;

}  

//функция vvod

void cena::vvod()

{

  const int col=28;

  gotoxy(col,8);

  cin>>vid;

  gotoxy(col,10);

  cin>>naim;

  do

  {

    gotoxy(col,12);

    cout<<"               ";

    gotoxy(col,12);

    cin.clear(0);

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

    cin>>rascenka;

  }

  while(!cin);

  return;

}

//функция vyvod

void cena::vyvod()

{

  const int col=28;

  gotoxy(col,8);

  cout<<vid;

  gotoxy(col,10);

  cout<<naim;

  gotoxy(col,12);

  cout<<rascenka;

  return;

}

//функция sozdanie

void cena::sozdanie()

{

  char ch;

  int nomer;

  do

  {

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

    vvod();

    nomer=dob_ind(vid);

    zapis_zap(nomer);

do

    {

      gotoxy(2,23);

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

      ch=getch();

    }

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

  }

  while (ch==13);

return;

}

//функция correct

void cena::correct(int x)

{

  char vid_rab[10];

  char ch;

  int nomer;

  const int col=25;

  char* cor;

  switch(x)

  {

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

                break;

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

                break;

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

                break;

  }

  do

  {

    formecran(cor);

    gotoxy(2,23);

    cout<<"Введите код работы записи:";

    cin>>vid_rab;

    for (int ind=0;

    (ind=poisk_ind(vid_rab,ind,nomer))!=-1;

     ind++)

    {

      chtenie_zap(nomer);

      formecran(cor);

      vyvod();

      do

      {

      gotoxy(2,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(2,23);

      clreol();

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

      getch();

      return;

    }

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

    {

      if (x==2)

      {

            formecran(cor);

            vvod();

      }

      else

      {

            vid[0]='\0';

            naim[0]='\0';

            rascenka=0;

      }

      zapis_zap(nomer);

    cor_ind(ind,vid);

    }

    formecran(cor);

    do

    {

      gotoxy(2,23);

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

      ch=getch();

    }

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

  }

  while (ch==13);

return;

}

//файлы vedom.hpp, vedom.cpp, upr.cpp без изменений

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

Отладить и  выполнить вторую версию программы с классами akt и cena. Проконтролировать работу с классами index,akt,cena.

3.3. Программирование классов нижнего уровня.

        Множественное наследование и полиморфизм

Множественным наследованием  называется наследование,  когда производный класс имеет  непосредственно  более  одного  базового класса.

Пример практического занятия №8_0 (продолжение)

В нашем  примере  рассмотрим производный класс ved,  имеющий несколько базовых классов: index, akt, cena.Полиморфизм проявляется  в  перегрузке операций и перегрузке функций.