}
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.Полиморфизм проявляется в перегрузке операций и перегрузке функций.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.