//вторая версия программы
//файл заголовков index.hpp без изменений
//файл кодов index.cpp
#include "index.hpp"
//функция init_ind
void ind::init_ind(int i,char* kl)
{
strcpy(index[i].kluch,kl);
index[i].nomer=i;
return;
}
//функция init_kol, инициализация количества элементов массива
void ind::init_kol(int k)
{kol=k;}
//функция dob_ind
int ind::dob_ind(char* kl)
{
int nom;
for (int i=0;i<kol;i++)
if (index[i].kluch[0]=='\0')
{
strcpy(index[i].kluch,kl);
return(index[i].nomer);
}
strcpy(index[kol].kluch,kl);
index[kol].nomer=kol;
nom=kol;
kol++;
return(nom);
}
//функция poisk_ind
int ind::poisk_ind(char* kl,int i,int& nomer)
{
while (i<kol)
{
if (index[i].kluch[0]!='\0')
{
if (!strcmp(kl,index[i].kluch))
{
nomer=index[i].nomer;
return(i);
}
}
i++;
}
return(-1);
}
//функция cor_ind
void ind::cor_ind(int i,char* kl)
{
strcpy(index[i].kluch,kl);
return;
}
//файл заголовков akt.hpp без изменений
//файл кодов akt.cpp
#include "akt.hpp"
fstream p_akt;
static int razm_zap;
//функция zapis_zap
void akt::zapis_zap(int nomer)
{
p_akt.seekg((long)(nomer*razm_zap),ios::beg);
p_akt.write((char *)&tabn,razm_zap);
if (!p_akt.good())
{
cout<<‘\a’;
gotoxy(2,23);
cerr<<“Ошибка записи в файл “<<imf<<“,нажмите <Enter>\n”;
getch();
exit(-1);
}
return;
}
//функция chtenie_zap
void akt::chtenie_zap(int nomer)
{
p_akt.seekg((long)(nomer*razm_zap),ios::beg);
p_akt.read((char *)&tabn,razm_zap);
if (!p_akt.good() && !p_akt.eof())
{
cout<<‘\a’;
gotoxy(2,23);
cerr<<“Ошибка чтения файла “<<imf<<“,нажмите <Enter>\n”;
getch();
exit(-1);
}
return;
}
//функция init
void akt::init()
{
clrscr();
razm_zap=(sizeof tabn)+(sizeof fio)+(sizeof vid)+(sizeof objem);
p_akt.open(imf,ios::in|ios::out|ios::nocreate|ios::binary);
if (!p_akt)
{
p_akt.open(imf,ios::in|ios::out|ios::binary);
if (!p_akt)
{
gotoxy(2,23);
clreol();
cerr<<"Ошибка открытия файла "<<imf<<",нажмите <Enter>\n";
getch();
exit(-1);
}
tabn[0]='\0';
fio[0]='\0';
vid[0]='\0';
objem=0;
zapis_zap(0);
}
int pr=0;
int i=0;
chtenie_zap(i);
while(!p_akt.eof())
{
init_ind(i,tabn);
if (tabn[0]!='\0') pr=1;
i++;
chtenie_zap(i);
}
init_kol(i);
p_akt.clear(0);
if (!pr)
{
cout<<'\a';
gotoxy(2,23);
clreol();
cout<<"Файл "<<imf
<<" пустой,нажмите <Enter> и <Создание>\n";
getch();
}
return;
}
//функция formecran
void akt::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(" Код работ : ");
gotoxy(col,12);
cputs(" Объем : ");
window(1,1,80,25);
textattr(15+(0<<4));
gotoxy(2,23);
clreol();
return;
}
//функция vvod
void akt::vvod()
{
const int col=25;
gotoxy(col,8);
cin>>tabn;
gotoxy(col,10);
cin.seekg(0,ios::end);
cin.get(fio,sizeof(fio));
gotoxy(col,12);
cin>>vid;
do
{
gotoxy(col,14);
cout<<" ";
gotoxy(col,14);
cin.clear(0);
cin.seekg(0,ios::end);
cin>>objem;
}
while(!cin);
return;
}
//функция vyvod
void akt::vyvod()
{
const int col=25;
gotoxy(col,8);
cout<<tabn;
gotoxy(col,10);
cout<<fio;
gotoxy(col,12);
cout<<vid;
gotoxy(col,14);
cout<<objem;
return;
}
//функция sozdanie
void akt::sozdanie()
{
char ch;
int nomer;
do
{
formecran("Создание/Добавление");
vvod();
nomer=dob_ind(tabn);
zapis_zap(nomer);
do
{
gotoxy(2,23);
cout<<"Продолжить добавление?: <Enter> Да, <Esc> Нет";
ch=getch();
}
while (ch!=13 && ch!=27);
}
while (ch==13);
return;
}
//функция correct
void akt::correct(int x)
{
char tab[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>>tab;
for (int ind=0;
(ind=poisk_ind(tab,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
{
tabn[0]='\0';
fio[0]='\0';
vid[0]='\0';
objem=0;
}
zapis_zap(nomer);
cor_ind(ind,tabn);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.