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

  gotoxy(col,14);

  cout<<zap.oklad;

  return;

}

void sozd_kart()

{

  fstream f;

  int ch;

  int nomer;

  f.open(imf_k,ios::in|ios::out|ios::nocreate|ios::binary);

  if (!f)

  {

    gotoxy(2,23);

    clreol();

    cerr<<"Ошибка открытия файла "<<imf_k

            <<" на добавление,нажмите <Enter>\n";

    getch();

    return;

  }

  do

  {

    gotoxy(2,23);

    clreol();

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

    vvod_kart();

    nomer=dob_ind(zap.tabn,kol_k,index_k);

    f.seekp((long)(nomer*sizeof(zap)),ios::beg);

    f.write((char *)&zap,sizeof(zap));

    form_kart("");

    do

    {

      gotoxy(2,23);

      clreol();

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

      ch=getch();

    }

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

  }

  while (ch==13);

  sort(kol_k,index_k);

  f.close();

  return;

}

void prosm_kart()

{

  int ch,pr;

  ifstream f(imf_k,ios::in|ios::nocreate|ios::binary);

  if (!f)

  {

    gotoxy(2,23);

    clreol();

    cerr<<"Ошибка открытия файла "<<imf_k

    <<" на чтение,нажмите <Enter>\n";

    getch();

    return;

  }

  for (int i=0;i<kol_k;i++)

  if (index_k[i].kluch[0]!='\0')

  {

   pr=i;

   break;

  }

  if (i==kol_k)

  {

    gotoxy(2,23);

    clreol();

    cout<<"Файл "<<imf_k

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

    return;

  }

  f.seekg((long)(index_k[i].nomer*sizeof(zap)),ios::beg);

  f.read((char *)&zap,sizeof(zap));

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

  vyvod_kart();

  do

  {

    gotoxy(2,23);

    clreol();

    cout<<"<- Предыдущая, -> Следующая,<Esc> Выход";

    ch=getch();

    if (ch==0 && kbhit()) ch=getch();

    if (ch==27) break;

    switch (ch)

    {

      case 77:i++;

                  if (i<kol_k)

                  {

          f.seekg((long)(index_k[i].nomer*sizeof(zap)),ios::beg);

          f.read((char *)&zap,sizeof(zap));

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

                        vyvod_kart();

                  } else

                  {

                        cout<<'\a';

                        gotoxy(45,23);

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

                        delay(1000);

                        i--;

                  }

                  break;

      case 75:i--;

                  if (i>=pr)

                  {

              f.seekg((long)(index_k[i].nomer*sizeof(zap)),ios::beg);

              f.read((char *)&zap,sizeof(zap));

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

                        vyvod_kart();

                  } else

                  {

                        cout<<'\a';

                        gotoxy(45,23);

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

                        delay(1000);

                        i++;

                  }

                  break;

    }

  }

  while (ch!=27);

  f.close();

  return;

}

void poisk_kart()

{

  char tab[10];

  int ch;

  const int col=25;

  fstream f(imf_k,ios::in|ios::binary);

  if (!f)

  {

    gotoxy(2,23);

    clreol();

    cerr<<"Ошибка открытия файла "<<imf_k

    <<" на чтение,нажмите <Enter>\n";

    getch();

    return;

  }

  do

  {

    gotoxy(2,23);

    clreol();

    cout<<"Введите таб.номер искомой записи:";

    cin>>tab;

    for (int ind=0;

    (ind=poisk_ind(tab,ind,kol_k,index_k))!=-1;

     ind++)

    {

  f.seekg((long)(index_k[ind].nomer*sizeof(zap)),ios::beg);

  f.read((char *)&zap,sizeof(zap));

      form_kart("Поиск");

      vyvod_kart();

      do

      {

            gotoxy(2,23);

            clreol();

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

                <<"поиск еще записи с таб.номером "<<tab<<'\n';

            ch=getch();

      }

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

      if (ch==13) break;

    }

    form_kart("");

    if (ind==-1)

    {

      gotoxy(2,23);

      clreol();

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

      getch();

      return;

    }

     do

     {

       gotoxy(2,23);

       clreol();

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

       ch=getch();

      }

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

  }

  while (ch==13);

  f.close();

  return;

}

void ud_kart()

{ zaglushka("Вызвана функция ud_kart, нажмите <Enter>"); }

void zam_kart()

{ zaglushka("Вызвана функция zam_kart, нажмите <Enter>"); }

//файл кодов mainkart без изменений

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

Отладить и  выполнить  вторую  версию  программы,  используя пункты лабораторной работы №1.

2.3. Программирование корректировки базы данных

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

//конечная  версия программы

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

//файл кодов ind.cpp, добавлены функции ud_ind и zam_ind

//функции dob_ind,sort,poisk_ind без изменений

void ud_ind(int ind,tip_index index[])

{

  index[ind].kluch[0]='\0';

  return;

}

void zam_ind(int ind,char kl[max_pole],tip_index index[])

{

  strcpy(index[ind].kluch,kl);

  return;

}

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

//файл кодов fkart.cpp с новыми функциями ud _kart,zam_kart

#include "fkart.hpp"

static struct t_k zap;

static struct t_k zap_null={"","","",0};

tip_index index_k[100];

int kol_k;

//функции init_kart,form_kart,vvod_kart,vyvod_kart,

//sozd_kart,prosm_kart,poisk_kart без изменений

void ud_kart()

{

  char tab[10];

  int ch;

  const int col=25;

  fstream f(imf_k,ios::in|ios::out|ios::binary);