Скачиваний:
61
Добавлен:
01.05.2014
Размер:
68.87 Кб
Скачать
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "fstream.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
AnsiString pathAS;
char* path;
const int Ma = 30;
char per1[Ma];
ofstream outfile;
ifstream infile;

//---------------------------------------------------------------------------
//--------------------АБК----------------------------------------------------
//---------------------------------------------------------------------------
class optic_pribor
{
  protected:
    AnsiString   model,      // Модель
         firm,       // Фирма производитель
         country,    // Страна производитель
         kachestvo;  // Качество изображения
    int  focus,      // Фокусное расстояние
         masshtab;    // Масштаб изображения
  public:
   //Конструктор по умолчанию//
    optic_pribor(){}
   //Инициирующий конструктор//
    optic_pribor(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh)
       : model(mod),
         firm(fir),
         country(coun),
         kachestvo(kach),
         focus(fok),
         masshtab(massh)
    {}
    //Конструктор копирования//
    Plotters(const optic_pribor&);
    void operator = (const optic_pribor&);  //Оператор присваивания
    bool operator == (const optic_pribor&); //Оператор "Равно"
    bool operator != (const optic_pribor&); //Оператор "Не равно"
    virtual void print(TMemo*)=0;           //Функция вывода на дисплей
    virtual void Get_vals(AnsiString*)=0;   //Функция для возврата массива со значениями полей класса
    virtual void Write_to_file() = 0;       //Функция записи в файл
    virtual void Read_from_file() = 0;      //Функция чтения из файла
    ~optic_pribor(){}                       //Деструктор
};

//--------------------Любительские----------------------------------------------
class lubitel  : public optic_pribor
{
  protected:
    AnsiString  vid_pribora;  // Вид прибора
    int optich_sila;  // Оптическая сила
  public:
    lubitel(){}
    lubitel(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString v_p,int o_s)
     : optic_pribor(mod,fir,coun,kach,fok,massh),
       vid_pribora(v_p),
       optich_sila(o_s)
    {}
    void print(TMemo* Memo)
    {
      Memo->Lines->Add("Модель                               "+model);
      Memo->Lines->Add("Страна производитель                 "+country);
      Memo->Lines->Add("Фирма производитель                  "+firm);
      Memo->Lines->Add("Качество изображения                 "+kachestvo);
      Memo->Lines->Add("Фокусное расстояние                  "+IntToStr(focus));
      Memo->Lines->Add("Масштаб                              "+IntToStr(masshtab));
      Memo->Lines->Add("Вид прибора                          "+vid_pribora);
      Memo->Lines->Add("Оптическая сила                      "+IntToStr(optich_sila));
    }
    void Get_vals(AnsiString* ptrd)
     {}
    ~lubitel(){}
};

//--------------------Профессиональные----------------------------------------------
class professional  : public optic_pribor
{
  protected:
    AnsiString    tip_pribora;  // Тип прибора
    int   kol_linz;     // Количество линз
  public:
    professional(){}
    professional(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString t_p,int k_l)
     : optic_pribor(mod,fir,coun,kach,fok,massh),
       tip_pribora(t_p),
       kol_linz(k_l)
    {}
    void print(TMemo* Memo)
    {
      Memo->Lines->Add("Модель                               "+model);
      Memo->Lines->Add("Страна производитель                 "+country);
      Memo->Lines->Add("Фирма производитель                  "+firm);
      Memo->Lines->Add("Качество изображения                 "+kachestvo);
      Memo->Lines->Add("Фокусное расстояние                  "+IntToStr(focus));
      Memo->Lines->Add("Масштаб                              "+IntToStr(masshtab));
      Memo->Lines->Add("Тип прибора                          "+tip_pribora);
      Memo->Lines->Add("Количество линз                      "+IntToStr(kol_linz));
    }
        void Get_vals(AnsiString* ptrd)
          {}
    ~professional(){}
};

//--------------------Очки----------------------------------------------
class ochki  : public lubitel
{
  protected:
    int chuvstvitelnost; // Чувствительность
  public:
    ochki(){};
    ochki(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString v_p,int o_s,int chu)
     : lubitel(mod,fir,coun,kach,fok,massh,v_p,o_s),
       chuvstvitelnost(chu)
    {}
        ochki(const ochki& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         vid_pribora = obj.vid_pribora; optich_sila = obj.optich_sila;
         chuvstvitelnost = obj.chuvstvitelnost;
        }
        void operator = (const ochki& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         vid_pribora = obj.vid_pribora; optich_sila = obj.optich_sila;
         chuvstvitelnost = obj.chuvstvitelnost;
        }
        bool operator == (const ochki& obj)
        {
         if((model == obj.model)&&(firm == obj.firm)&&
            (country == obj.country)&&(kachestvo == obj.kachestvo)&&
            (focus == obj.focus)&&(masshtab == obj.masshtab )&&
            (vid_pribora == obj.vid_pribora)&&(optich_sila == obj.optich_sila)&&
            (chuvstvitelnost == obj.chuvstvitelnost)) return true;
          else return false;
        }
        bool operator != (const ochki& obj)
        {if(*(this)==obj) return false; else return true;};

    void print(TMemo* Memo)
    {
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("================Класс очки===================");
      Memo->Lines->Add("=============================================");
      lubitel::print(Memo);
      Memo->Lines->Add("Чувствительность                     "+IntToStr(chuvstvitelnost));
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("");
      Memo->Lines->Add("");
    }
        void Get_vals(AnsiString* ptrd)
             {
              ptrd[0] = model;
              ptrd[1] = firm;
              ptrd[2] = country;
              ptrd[3] = kachestvo;
              ptrd[4] = IntToStr(focus);
              ptrd[5] = IntToStr(masshtab);
              ptrd[6] = vid_pribora;
              ptrd[7] = IntToStr(optich_sila);
              ptrd[8] = IntToStr(chuvstvitelnost);
             }
        void Write_to_file()
             {
              outfile
              <<model.c_str()<<endl
              <<firm.c_str()<<endl
              <<country.c_str()<<endl
              <<kachestvo.c_str()<<endl
              <<focus<<endl
              <<masshtab<<endl
              <<vid_pribora.c_str()<<endl
              <<optich_sila<<endl
              <<chuvstvitelnost<<endl;
             }

        void Read_from_file()
             {
              infile.getline(per1,Ma);
              model = per1;
              infile.getline(per1,Ma);
              firm = per1;
              infile.getline(per1,Ma);
              country = per1;
              infile.getline(per1,Ma);
              kachestvo = per1;
              infile.getline(per1,Ma);
              focus = StrToInt(per1);
              infile.getline(per1,Ma);
              masshtab = StrToInt(per1);
              infile.getline(per1,Ma);
              vid_pribora = per1;
              infile.getline(per1,Ma);
              optich_sila = StrToInt(per1);
              infile.getline(per1,Ma);
              chuvstvitelnost = StrToInt(per1);
             }

    ~ochki(){}
};

//--------------------Лупы----------------------------------------------
class lupa  : public lubitel
{
  protected:
    AnsiString  tip_lupi,         // Тип лупы
        character_uvel;   // Характер увеличения
  public:
    lupa(){}
    lupa(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString v_p,int o_s,AnsiString t_l,AnsiString c_u)
     : lubitel(mod,fir,coun,kach,fok,massh,v_p,o_s),
       tip_lupi(t_l),
       character_uvel(c_u)
    {}
        lupa(const lupa& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         vid_pribora = obj.vid_pribora; optich_sila = obj.optich_sila;
         tip_lupi = obj.tip_lupi; character_uvel = obj.character_uvel;
        }
        void operator = (const lupa& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         vid_pribora = obj.vid_pribora; optich_sila = obj.optich_sila;
         tip_lupi = obj.tip_lupi; character_uvel = obj.character_uvel;
        }
        bool operator == (const lupa& obj)
        {
         if((model == obj.model)&&(firm == obj.firm)&&
            (country == obj.country)&&(kachestvo == obj.kachestvo)&&
            (focus == obj.focus)&&(masshtab == obj.masshtab )&&
            (vid_pribora == obj.vid_pribora)&&(optich_sila == obj.optich_sila)&&
            (tip_lupi == obj.tip_lupi)&&(character_uvel == obj.character_uvel)) return true;
          else return false;
        }
        bool operator != (const lupa& obj)
        {if(*(this)==obj) return false; else return true;};

    void print(TMemo* Memo)
    {
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("==================Класс лупы=================");
      Memo->Lines->Add("=============================================");
      lubitel::print(Memo);
      Memo->Lines->Add("Тип лупы                             "+tip_lupi);
      Memo->Lines->Add("Характер увеличения                  "+character_uvel);
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("");
      Memo->Lines->Add("");
    }
        void Get_vals(AnsiString* ptrd)
             {
              ptrd[0] = model;
              ptrd[1] = firm;
              ptrd[2] = country;
              ptrd[3] = kachestvo;
              ptrd[4] = IntToStr(focus);
              ptrd[5] = IntToStr(masshtab);
              ptrd[6] = vid_pribora;
              ptrd[7] = IntToStr(optich_sila);
              ptrd[8] = tip_lupi;
              ptrd[9] = character_uvel;
             }
        void Write_to_file()
             {
              outfile
              <<model.c_str()<<endl
              <<firm.c_str()<<endl
              <<country.c_str()<<endl
              <<kachestvo.c_str()<<endl
              <<focus<<endl
              <<masshtab<<endl
              <<vid_pribora.c_str()<<endl
              <<optich_sila<<endl
              <<tip_lupi.c_str()<<endl
              <<character_uvel.c_str()<<endl;
             }

        void Read_from_file()
             {
              infile.getline(per1,Ma);
              model = per1;
              infile.getline(per1,Ma);
              firm = per1;
              infile.getline(per1,Ma);
              country = per1;
              infile.getline(per1,Ma);
              kachestvo = per1;
              infile.getline(per1,Ma);
              focus = StrToInt(per1);
              infile.getline(per1,Ma);
              masshtab = StrToInt(per1);
              infile.getline(per1,Ma);
              vid_pribora = per1;
              infile.getline(per1,Ma);
              optich_sila = StrToInt(per1);
              infile.getline(per1,Ma);
              tip_lupi = per1;
              infile.getline(per1,Ma);
              character_uvel = per1;
             }

    ~lupa(){}
};

//--------------------Бинокли----------------------------------------------
class binocular  : public lubitel
{
  protected:
    int radius_priblizh; // Радиус приближения
  public:
    binocular(){}
    binocular(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString v_p,int o_s,int r_p)
     : lubitel(mod,fir,coun,kach,fok,massh,v_p,o_s),
       radius_priblizh(r_p)
    {}
        binocular(const binocular& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         vid_pribora = obj.vid_pribora; optich_sila = obj.optich_sila;
         radius_priblizh = obj.radius_priblizh;
        }
        void operator = (const binocular& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         vid_pribora = obj.vid_pribora; optich_sila = obj.optich_sila;
         radius_priblizh = obj.radius_priblizh;
        }
        bool operator == (const binocular& obj)
        {
         if((model == obj.model)&&(firm == obj.firm)&&
            (country == obj.country)&&(kachestvo == obj.kachestvo)&&
            (focus == obj.focus)&&(masshtab == obj.masshtab )&&
            (vid_pribora == obj.vid_pribora)&&(optich_sila == obj.optich_sila)&&
            (radius_priblizh == obj.radius_priblizh)) return true;
          else return false;
        }
        bool operator != (const binocular& obj)
        {if(*(this)==obj) return false; else return true;};

    void print(TMemo* Memo)
    {
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("================Класс бинокли================");
      Memo->Lines->Add("=============================================");
      lubitel::print(Memo);
      Memo->Lines->Add("Радиус приближения                   "+IntToStr(radius_priblizh));
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("");
      Memo->Lines->Add("");
    }
        void Get_vals(AnsiString* ptrd)
             {
              ptrd[0] = model;
              ptrd[1] = firm;
              ptrd[2] = country;
              ptrd[3] = kachestvo;
              ptrd[4] = IntToStr(focus);
              ptrd[5] = IntToStr(masshtab);
              ptrd[6] = vid_pribora;
              ptrd[7] = IntToStr(optich_sila);
              ptrd[8] = IntToStr(radius_priblizh);
             }
        void Write_to_file()
             {
              outfile
              <<model.c_str()<<endl
              <<firm.c_str()<<endl
              <<country.c_str()<<endl
              <<kachestvo.c_str()<<endl
              <<focus<<endl
              <<masshtab<<endl
              <<vid_pribora.c_str()<<endl
              <<optich_sila<<endl
              <<radius_priblizh<<endl;
             }

        void Read_from_file()
             {
              infile.getline(per1,Ma);
              model = per1;
              infile.getline(per1,Ma);
              firm = per1;
              infile.getline(per1,Ma);
              country = per1;
              infile.getline(per1,Ma);
              kachestvo = per1;
              infile.getline(per1,Ma);
              focus = StrToInt(per1);
              infile.getline(per1,Ma);
              masshtab = StrToInt(per1);
              infile.getline(per1,Ma);
              vid_pribora = per1;
              infile.getline(per1,Ma);
              optich_sila = StrToInt(per1);
              infile.getline(per1,Ma);
              radius_priblizh = StrToInt(per1);
             }

    ~binocular(){}
};

//--------------------Телескопы----------------------------------------------
class telescop  : public professional
{
  protected:
    int max_rast_to_obj; // Максимальное расстояние до объекта
  public:
    telescop(){}
    telescop(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString t_p,int k_l,int m_r_o)
     : professional(mod,fir,coun,kach,fok,massh,t_p,k_l),
       max_rast_to_obj(m_r_o)
    {}
        telescop(const telescop& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         tip_pribora = obj.tip_pribora;  kol_linz = obj.kol_linz;
         max_rast_to_obj = obj.max_rast_to_obj;
        }
        void operator = (const telescop& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         tip_pribora = obj.tip_pribora;  kol_linz = obj.kol_linz;
         max_rast_to_obj = obj.max_rast_to_obj;
        }
        bool operator == (const telescop& obj)
        {
         if((model == obj.model)&&(firm == obj.firm)&&
            (country == obj.country)&&(kachestvo == obj.kachestvo)&&
            (focus == obj.focus)&&(masshtab == obj.masshtab )&&
            (tip_pribora == obj.tip_pribora)&&(kol_linz == obj.kol_linz)&&
            (max_rast_to_obj == obj.max_rast_to_obj)) return true;
          else return false;
        }
        bool operator != (const telescop& obj)
        {if(*(this)==obj) return false; else return true;};

    void print(TMemo* Memo)
    {
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("==============Класс телескопы================");
      Memo->Lines->Add("=============================================");
      professional::print(Memo);
      Memo->Lines->Add("Максимальное расстояние до объекта   "+IntToStr(max_rast_to_obj));
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("");
      Memo->Lines->Add("");
    }
        void Get_vals(AnsiString* ptrd)
             {
              ptrd[0] = model;
              ptrd[1] = firm;
              ptrd[2] = country;
              ptrd[3] = kachestvo;
              ptrd[4] = IntToStr(focus);
              ptrd[5] = IntToStr(masshtab);
              ptrd[6] = tip_pribora;
              ptrd[7] = IntToStr(kol_linz);
              ptrd[8] = IntToStr(max_rast_to_obj);
             }
        void Write_to_file()
             {
              outfile
              <<model.c_str()<<endl
              <<firm.c_str()<<endl
              <<country.c_str()<<endl
              <<kachestvo.c_str()<<endl
              <<focus<<endl
              <<masshtab<<endl
              <<tip_pribora.c_str()<<endl
              <<kol_linz<<endl
              <<max_rast_to_obj<<endl;
             }

        void Read_from_file()
             {
              infile.getline(per1,Ma);
              model = per1;
              infile.getline(per1,Ma);
              firm = per1;
              infile.getline(per1,Ma);
              country = per1;
              infile.getline(per1,Ma);
              kachestvo = per1;
              infile.getline(per1,Ma);
              focus = StrToInt(per1);
              infile.getline(per1,Ma);
              masshtab = StrToInt(per1);
              infile.getline(per1,Ma);
              tip_pribora = per1;
              infile.getline(per1,Ma);
              kol_linz = StrToInt(per1);
              infile.getline(per1,Ma);
              max_rast_to_obj = StrToInt(per1);
             }

    ~telescop(){}
};

//--------------------Микроскопы----------------------------------------------
class microscop  : public professional
{
  protected:
    int kratnost_uvel;  // Кратность увеличения
  public:
    microscop(){};
    microscop(AnsiString mod,AnsiString fir,AnsiString coun,AnsiString kach,int fok,int massh,AnsiString t_p,int k_l,int kra)
     : professional(mod,fir,coun,kach,fok,massh,t_p,k_l),
       kratnost_uvel(kra)
    {}
        microscop(const microscop& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         tip_pribora = obj.tip_pribora;  kol_linz = obj.kol_linz;
         kratnost_uvel = obj.kratnost_uvel;
        }
        void operator = (const microscop& obj)
        {
         model = obj.model;      firm = obj.firm;
         country = obj.country;  kachestvo = obj.kachestvo;
         focus = obj.focus;      masshtab = obj.masshtab;
         tip_pribora = obj.tip_pribora;  kol_linz = obj.kol_linz;
         kratnost_uvel = obj.kratnost_uvel;
        }
        bool operator == (const microscop& obj)
        {
         if((model == obj.model)&&(firm == obj.firm)&&
            (country == obj.country)&&(kachestvo == obj.kachestvo)&&
            (focus == obj.focus)&&(masshtab == obj.masshtab )&&
            (tip_pribora == obj.tip_pribora)&&(kol_linz == obj.kol_linz)&&
            (kratnost_uvel == obj.kratnost_uvel)) return true;
          else return false;
        }
        bool operator != (const microscop& obj)
        {if(*(this)==obj) return false; else return true;};

    void print(TMemo* Memo)
    {
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("==============Класс микроскопы===============");
      Memo->Lines->Add("=============================================");
      professional::print(Memo);
      Memo->Lines->Add("Кратность увеличения                 "+IntToStr(kratnost_uvel));
      Memo->Lines->Add("=============================================");
      Memo->Lines->Add("");
      Memo->Lines->Add("");
    }
        void Get_vals(AnsiString* ptrd)
             {
              ptrd[0] = model;
              ptrd[1] = firm;
              ptrd[2] = country;
              ptrd[3] = kachestvo;
              ptrd[4] = IntToStr(focus);
              ptrd[5] = IntToStr(masshtab);
              ptrd[6] = tip_pribora;
              ptrd[7] = IntToStr(kol_linz);
              ptrd[8] = IntToStr(kratnost_uvel);
             }
        void Write_to_file()
             {
              outfile
              <<model.c_str()<<endl
              <<firm.c_str()<<endl
              <<country.c_str()<<endl
              <<kachestvo.c_str()<<endl
              <<focus<<endl
              <<masshtab<<endl
              <<tip_pribora.c_str()<<endl
              <<kol_linz<<endl
              <<kratnost_uvel<<endl;
             }

        void Read_from_file()
             {
              infile.getline(per1,Ma);
              model = per1;
              infile.getline(per1,Ma);
              firm = per1;
              infile.getline(per1,Ma);
              country = per1;
              infile.getline(per1,Ma);
              kachestvo = per1;
              infile.getline(per1,Ma);
              focus = StrToInt(per1);
              infile.getline(per1,Ma);
              masshtab = StrToInt(per1);
              infile.getline(per1,Ma);
              tip_pribora = per1;
              infile.getline(per1,Ma);
              kol_linz = StrToInt(per1);
              infile.getline(per1,Ma);
              kratnost_uvel = StrToInt(per1);
             }

    ~microscop(){};
};


/*========================================================*/
/*============Обобщенный контейнерный класс===============*/
/*========================================================*/
class Stack1
{
        private:
                void* data;
                AnsiString name;
                Stack1 *head, *next;
        public:
                Stack1()
                {
                   head  = next = NULL;
                }
                void Add_elem_head(void* x, AnsiString n)
                {
                  Stack1 *el;
                  el = new Stack1;
                  el->data = x;
                  el->name = n;
                  if (head == NULL)
                   {
                    el->next = NULL;
                    head = el;
                   } else
                     {
                      el->next = head;
                      head = el;
                     }
                 }


                void Delete_elem_head()
                 {
                  if(head!=NULL)
                    head = head->next;
                 }

                void Set_data(void* x, AnsiString nname)
                  {
                   bool flag = true;
                   Stack1 *hhead;
                   hhead = head;
                   if (head ==NULL) Add_elem_head(x,nname);
                     else
                        while (hhead !=NULL)
                          {
                            if(hhead->name == nname)
                             {
                               hhead->data = x;
                               flag = false;
                              }
                            hhead = hhead->next;
                           }
                        if (flag) Add_elem_head(x,nname);
                  }

                void* Get_data(AnsiString nname)
                  {
                   Stack1 *hhead;
                   hhead = head;
                   while (hhead !=NULL)
                    {
                     if(hhead->name == nname)
                       {
                        return hhead->data;
                       }
                     hhead = hhead->next;
                    }
                    return NULL;
                  }

                ~Stack1(){};
};

/*========================================================*/
/*========Шаблон для хранения указателей на АБК===========*/
/*========================================================*/

template <class T>
class Stack :private Stack1
{
        public:

                Stack()
                {Stack1::Stack1();}
                void Add_elem_head(T x, AnsiString n)
                {Stack1::Add_elem_head(reinterpret_cast<void*>(x),n);}

                void Delete_elem_head()
                 {Stack1::Delete_elem_head();}

                void Set_data(T x, AnsiString n)
                 {Stack1::Set_data(reinterpret_cast<void*>(x),n);}

                T Get_data(AnsiString nname)
                 {
                  if (Stack1::Get_data(nname) != NULL)
                   return reinterpret_cast<T>(Stack1::Get_data(nname));
                  else
                   { dyn_vect* obj=new dyn_vect;
                     return reinterpret_cast<T>(obj);
                   }
                 }

                ~Stack(){};
};

//--------------------------------------------
//-----------Динамический вектор--------------
//--------------------------------------------
const MAX = 100;

class dyn_vect
{
 private:
   long size;
   optic_pribor** arr;
 public:
  dyn_vect(long s = MAX): size(s)
   {
    arr = new optic_pribor*[size];
     if(!arr) ShowMessage("Ошибка при создании массива!");
   }

  void Set_one(optic_pribor* x, int num)
   {
    arr[num] = x;
   }

  long length () const {return size;}

  dyn_vect(const dyn_vect& arrr)
   {
       size = arrr.size;
       arr = new optic_pribor*[size];
       for(int i = 0; i<size; i++)
         arr[i] = arrr.arr[i];
   }

  dyn_vect& operator=(const dyn_vect& arrr)
   {
     if (this != &arrr)
      {
       size = arrr.size;
       if (arr) delete[] arr;
       arr = new optic_pribor*[size];
       for(int i = 0; i<size; i++)
         arr[i] = arrr.arr[i];
      }
     return *this;
   }

  void orderVoz(int k, int l, int num, char typ)
   {
    AnsiString mas1[11];
    AnsiString mas2[11];
    this->arr[k]->Get_vals(mas1);
    this->arr[l]->Get_vals(mas2);
    switch(typ)
      {
        case 'i':
          {
           if (StrToInt(mas1[num])>StrToInt(mas2[num]))
             {
              optic_pribor* temp;
              temp = this->arr[k];
              this->arr[k] = this->arr[l];
              this->arr[l] = temp;
             }
          } break;
        case 'a':
          {
           if (mas1[num]>mas2[num])
             {
              optic_pribor* temp;
              temp = this->arr[k];
              this->arr[k] = this->arr[l];
              this->arr[l] = temp;
             }
          } break;
      }
   }

  void orderUb(int k, int l, int num, char typ)
   {
    AnsiString mas1[11];
    AnsiString mas2[11];
    this->arr[k]->Get_vals(mas1);
    this->arr[l]->Get_vals(mas2);
    switch(typ)
      {
        case 'i':
          {
           if (StrToInt(mas1[num])<StrToInt(mas2[num]))
             {
              optic_pribor* temp;
              temp = this->arr[k];
              this->arr[k] = this->arr[l];
              this->arr[l] = temp;
             }
          } break;
        case 'a':
          {
           if (mas1[num]<mas2[num])
             {
              optic_pribor* temp;
              temp = this->arr[k];
              this->arr[k] = this->arr[l];
              this->arr[l] = temp;
             }
          } break;
      }
   }

  void bsortUb(int razm, int numm, char typp)
   {
      for(int i=0; i<razm-1; i++)
        for(int j=i+1; j<razm; j++)
          orderUb(i,j,numm,typp);
   }

  void bsort(int razm, int numm, char typp)
   {
      for(int i=0; i<razm-1; i++)
        for(int j=i+1; j<razm; j++)
          orderVoz(i,j,numm,typp);
   }

  void find(AnsiString findd, TMemo* Memo, int razm, int num, char typ)
   {
    AnsiString mas1[11];
    for(int k=0; k<razm; k++)
     {
      this->arr[k]->Get_vals(mas1);
      switch(typ)
        {
          case 'i':
            {
             if (StrToInt(mas1[num])==StrToInt(findd))
               {this->arr[k]->print(Memo);}
            } break;
          case 'a':
            {
             if (mas1[num]==findd)
               {this->arr[k]->print(Memo);}
            } break;
        }
     }
   }

  void find_Diap(AnsiString find_from, AnsiString find_to, TMemo* Memo, int razm, int num, char typ)
   {
    AnsiString mas1[11];
    for(int k=0; k<razm; k++)
     {
      this->arr[k]->Get_vals(mas1);
      switch(typ)
        {
          case 'i':
            {
             if ((StrToInt(find_from)<=StrToInt(mas1[num]))&&
                 (StrToInt(mas1[num])<=StrToInt(find_to)))
               {this->arr[k]->print(Memo);}
            } break;
          case 'a':
            {
             if ((find_from<=mas1[num])&&(mas1[num]<=find_to))
               {this->arr[k]->print(Memo);}
            } break;
        }
     }
   }  


  optic_pribor* operator[](long n) const
   {
    if(n<0||n>MAX) exit(0);
    return arr[n];
   }
  ~dyn_vect(){};
};

dyn_vect  dyn_vect_och,dyn_vect_lup,dyn_vect_bin,dyn_vect_tel,dyn_vect_mic;
int  kol_och,kol_lup,kol_bin,kol_tel,kol_mic;
Stack<dyn_vect*> MyStack;


void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
  switch (ListBox1->ItemIndex)
   {
    case 0:{
             GroupBox1->Visible = true;
             GroupBox2->Visible = true;
             GroupBox3->Visible = false;
             GroupBox4->Visible = true;
             GroupBox5->Visible = false;
             GroupBox6->Visible = false;
             GroupBox7->Visible = false;
             GroupBox8->Visible = false;
            } break;
    case 1:{
             GroupBox1->Visible = true;
             GroupBox2->Visible = true;
             GroupBox3->Visible = false;
             GroupBox4->Visible = false;
             GroupBox5->Visible = true;
             GroupBox6->Visible = false;
             GroupBox7->Visible = false;
             GroupBox8->Visible = false;
           } break;
    case 2:{
             GroupBox1->Visible = true;
             GroupBox2->Visible = true;
             GroupBox3->Visible = false;
             GroupBox4->Visible = false;
             GroupBox5->Visible = false;
             GroupBox6->Visible = true;
             GroupBox7->Visible = false;
             GroupBox8->Visible = false;
           } break;
    case 3:{
             GroupBox1->Visible = true;
             GroupBox2->Visible = false;
             GroupBox3->Visible = true;
             GroupBox4->Visible = false;
             GroupBox5->Visible = false;
             GroupBox6->Visible = false;
             GroupBox7->Visible = true;
             GroupBox8->Visible = false;
           } break;
    case 4:{
             GroupBox1->Visible = true;
             GroupBox2->Visible = false;
             GroupBox3->Visible = true;
             GroupBox4->Visible = false;
             GroupBox5->Visible = false;
             GroupBox6->Visible = false;
             GroupBox7->Visible = false;
             GroupBox8->Visible = true;
           } break;
   };
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 try
  {
   if ((Edit1->Text     != "")&&(Edit3->Text != "")&&(Edit2->Text != "")&&
      (ComboBox1->Text != "")&&(Edit4->Text != "")&&
      (Edit5->Text     != "")&&(Edit6->Text != "")&&
      (Edit7->Text     != "")&&(Edit10->Text != ""))
       {
        ochki* ob1=new ochki(Edit1->Text,Edit3->Text,Edit2->Text,
                             ComboBox1->Text,StrToInt(Edit4->Text),
                             StrToInt(Edit5->Text),Edit6->Text,
                             StrToInt(Edit7->Text),StrToInt(Edit10->Text));
        dyn_vect_och.Set_one(ob1,kol_och);
        MyStack.Set_data(&dyn_vect_och,"ochki");
        kol_och++;
        Application->MessageBox("Добавление успешно.","Добавление",MB_OK);
       } else Application->MessageBox("Необходимо заполнить все поля!","Ошибка ввода",MB_ICONHAND+MB_OK);
  }
  catch(EConvertError&)
   {Application->MessageBox("Проверьте правльность ввода данных!","Ошибка типов",MB_ICONHAND+MB_OK);}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 try
  {
   if ((Edit1->Text    != "")&&(Edit3->Text  != "")&&(Edit2->Text != "")&&
      (ComboBox1->Text != "")&&(Edit4->Text  != "")&&
      (Edit5->Text !=     "")&&(Edit6->Text  != "")&&
      (Edit7->Text !=     "")&&(Edit11->Text != "")&&(Edit12->Text != ""))
       {
        lupa* ob1=new lupa(Edit1->Text,Edit3->Text,Edit2->Text,
                           ComboBox1->Text,StrToInt(Edit4->Text),
                           StrToInt(Edit5->Text),Edit6->Text,
                           StrToInt(Edit7->Text),Edit11->Text,
                           Edit12->Text);
        dyn_vect_lup.Set_one(ob1,kol_lup);
        MyStack.Set_data(&dyn_vect_lup,"lupa");
        Application->MessageBox("Добавление успешно.","Добавление",MB_OK);
        kol_lup++;
       } else Application->MessageBox("Необходимо заполнить все поля!","Ошибка ввода",MB_ICONHAND+MB_OK);
  }
  catch(EConvertError&)
   {Application->MessageBox("Проверьте правльность ввода данных!","Ошибка типов",MB_ICONHAND+MB_OK);}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
 try
  {
   if ((Edit1->Text    != "")&&(Edit3->Text  != "")&&(Edit2->Text != "")&&
      (ComboBox1->Text != "")&&(Edit4->Text  != "")&&
      (Edit5->Text !=     "")&&(Edit6->Text  != "")&&
      (Edit7->Text !=     "")&&(Edit13->Text != ""))
       {
        binocular* ob1=new binocular(Edit1->Text,Edit3->Text,Edit2->Text,
                                     ComboBox1->Text,StrToInt(Edit4->Text),
                                     StrToInt(Edit5->Text),Edit6->Text,
                                     StrToInt(Edit7->Text),StrToInt(Edit13->Text));
        dyn_vect_bin.Set_one(ob1,kol_bin);
        MyStack.Set_data(&dyn_vect_bin,"binokular");
        Application->MessageBox("Добавление успешно.","Добавление",MB_OK);   
        kol_bin++;
       } else Application->MessageBox("Необходимо заполнить все поля!","Ошибка ввода",MB_ICONHAND+MB_OK);
  }
  catch(EConvertError&)
   {Application->MessageBox("Проверьте правльность ввода данных!","Ошибка типов",MB_ICONHAND+MB_OK);}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
 try
  {
   if ((Edit1->Text    != "")&&(Edit3->Text  != "")&&(Edit2->Text != "")&&
      (ComboBox1->Text != "")&&(Edit4->Text  != "")&&
      (Edit5->Text !=     "")&&(Edit8->Text  != "")&&
      (Edit9->Text !=     "")&&(Edit14->Text != ""))
       {
        telescop* ob1=new telescop(Edit1->Text,Edit3->Text,Edit2->Text,
                                   ComboBox1->Text,StrToInt(Edit4->Text),
                                   StrToInt(Edit5->Text),Edit8->Text,
                                   StrToInt(Edit9->Text),StrToInt(Edit14->Text));
        dyn_vect_tel.Set_one(ob1,kol_tel);
        MyStack.Set_data(&dyn_vect_tel,"telescop");
        Application->MessageBox("Добавление успешно.","Добавление",MB_OK);
        kol_tel++;
       } else Application->MessageBox("Необходимо заполнить все поля!","Ошибка ввода",MB_ICONHAND+MB_OK);
  }
  catch(EConvertError&)
   {Application->MessageBox("Проверьте правльность ввода данных!","Ошибка типов",MB_ICONHAND+MB_OK);}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
 try
  {
   if ((Edit1->Text    != "")&&(Edit3->Text  != "")&&(Edit2->Text != "")&&
      (ComboBox1->Text != "")&&(Edit4->Text  != "")&&
      (Edit5->Text !=     "")&&(Edit8->Text  != "")&&
      (Edit9->Text !=     "")&&(Edit15->Text != ""))
       {
        microscop* ob1=new microscop(Edit1->Text,Edit3->Text,Edit2->Text,
                                     ComboBox1->Text,StrToInt(Edit4->Text),
                                     StrToInt(Edit5->Text),Edit8->Text,
                                     StrToInt(Edit9->Text),StrToInt(Edit15->Text));
        dyn_vect_mic.Set_one(ob1,kol_mic);
        MyStack.Set_data(&dyn_vect_mic,"microscop");
        Application->MessageBox("Добавление успешно.","Добавление",MB_OK);
        kol_mic++;
       } else Application->MessageBox("Необходимо заполнить все поля!","Ошибка ввода",MB_ICONHAND+MB_OK);
  }
  catch(EConvertError&)
   {Application->MessageBox("Проверьте правльность ввода данных!","Ошибка типов",MB_ICONHAND+MB_OK);}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 ListBox2->ItemIndex=0;
 Form1->ListBox2Click(Form1);
 kol_och = 0;
 kol_lup = 0;
 kol_bin = 0;
 kol_tel = 0;
 kol_mic = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox2Click(TObject *Sender)
{
  switch (ListBox2->ItemIndex)
   {
    case 0:{
             ComboBox2->Items->Clear();
             ComboBox2->Items->Add("Модель");
             ComboBox2->Items->Add("Страна производитель");
             ComboBox2->Items->Add("Фирма производитель");
             ComboBox2->Items->Add("Фокусное расстояние");
             ComboBox2->Items->Add("Масштаб изображения");
             ComboBox2->Items->Add("Качество изображения");
             ComboBox2->Items->Add("Вид прибора");
             ComboBox2->Items->Add("Оптическая сила");
             ComboBox2->Items->Add("Чувствительность");
            } break;
    case 1:{
             ComboBox2->Items->Clear();
             ComboBox2->Items->Add("Модель");
             ComboBox2->Items->Add("Страна производитель");
             ComboBox2->Items->Add("Фирма производитель");
             ComboBox2->Items->Add("Фокусное расстояние");
             ComboBox2->Items->Add("Масштаб изображения");
             ComboBox2->Items->Add("Качество изображения");
             ComboBox2->Items->Add("Вид прибора");
             ComboBox2->Items->Add("Оптическая сила");
             ComboBox2->Items->Add("Тип лупы");
             ComboBox2->Items->Add("Характер увеличения");
           } break;
    case 2:{
             ComboBox2->Items->Clear();
             ComboBox2->Items->Add("Модель");
             ComboBox2->Items->Add("Страна производитель");
             ComboBox2->Items->Add("Фирма производитель");
             ComboBox2->Items->Add("Фокусное расстояние");
             ComboBox2->Items->Add("Масштаб изображения");
             ComboBox2->Items->Add("Качество изображения");
             ComboBox2->Items->Add("Вид прибора");
             ComboBox2->Items->Add("Оптическая сила");
             ComboBox2->Items->Add("Радиус приближения");
           } break;
    case 3:{
             ComboBox2->Items->Clear();
             ComboBox2->Items->Add("Модель");
             ComboBox2->Items->Add("Страна производитель");
             ComboBox2->Items->Add("Фирма производитель");
             ComboBox2->Items->Add("Фокусное расстояние");
             ComboBox2->Items->Add("Масштаб изображения");
             ComboBox2->Items->Add("Качество изображения");
             ComboBox2->Items->Add("Тип прибора");
             ComboBox2->Items->Add("Количество линз");
             ComboBox2->Items->Add("Расстояние до объекта");
           } break;
    case 4:{
             ComboBox2->Items->Clear();
             ComboBox2->Items->Add("Модель");
             ComboBox2->Items->Add("Страна производитель");
             ComboBox2->Items->Add("Фирма производитель");
             ComboBox2->Items->Add("Фокусное расстояние");
             ComboBox2->Items->Add("Масштаб изображения");
             ComboBox2->Items->Add("Качество изображения");
             ComboBox2->Items->Add("Тип прибора");
             ComboBox2->Items->Add("Количество линз");
             ComboBox2->Items->Add("Кратность увеличения");
           } break;
   };
ComboBox2->ItemIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
 if (RadioGroup1->ItemIndex == 0)
  switch (ListBox2->ItemIndex)
   {
    case 0:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_och.bsort(kol_och,0,'a'); break;
            case 1: dyn_vect_och.bsort(kol_och,2,'a'); break;
            case 2: dyn_vect_och.bsort(kol_och,1,'a'); break;
            case 3: dyn_vect_och.bsort(kol_och,4,'i'); break;
            case 4: dyn_vect_och.bsort(kol_och,5,'i'); break;
            case 5: dyn_vect_och.bsort(kol_och,3,'a'); break;
            case 6: dyn_vect_och.bsort(kol_och,6,'a'); break;
            case 7: dyn_vect_och.bsort(kol_och,7,'i'); break;
            case 8: dyn_vect_och.bsort(kol_och,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_och = *MyStack.Get_data("ochki");
            for(int i = 0; i<kol_och; i++)
              dyn_vect_och[i]->print(Memo2);
            } break;
    case 1:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_lup.bsort(kol_lup,0,'a'); break;
            case 1: dyn_vect_lup.bsort(kol_lup,2,'a'); break;
            case 2: dyn_vect_lup.bsort(kol_lup,1,'a'); break;
            case 3: dyn_vect_lup.bsort(kol_lup,4,'i'); break;
            case 4: dyn_vect_lup.bsort(kol_lup,5,'i'); break;
            case 5: dyn_vect_lup.bsort(kol_lup,3,'a'); break;
            case 6: dyn_vect_lup.bsort(kol_lup,6,'a'); break;
            case 7: dyn_vect_lup.bsort(kol_lup,7,'i'); break;
            case 8: dyn_vect_lup.bsort(kol_lup,8,'a'); break;
            case 9: dyn_vect_lup.bsort(kol_lup,9,'a'); break;
           };
            Memo2->Clear();
            dyn_vect_lup = *MyStack.Get_data("lupa");
            for(int i = 0; i<kol_lup; i++)
             dyn_vect_lup[i]->print(Memo2);
           } break;
    case 2:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_bin.bsort(kol_bin,0,'a'); break;
            case 1: dyn_vect_bin.bsort(kol_bin,2,'a'); break;
            case 2: dyn_vect_bin.bsort(kol_bin,1,'a'); break;
            case 3: dyn_vect_bin.bsort(kol_bin,4,'i'); break;
            case 4: dyn_vect_bin.bsort(kol_bin,5,'i'); break;
            case 5: dyn_vect_bin.bsort(kol_bin,3,'a'); break;
            case 6: dyn_vect_bin.bsort(kol_bin,6,'a'); break;
            case 7: dyn_vect_bin.bsort(kol_bin,7,'i'); break;
            case 8: dyn_vect_bin.bsort(kol_bin,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_bin = *MyStack.Get_data("binokular");
            for(int i = 0; i<kol_bin; i++)
             dyn_vect_bin[i]->print(Memo2);
           } break;
    case 3:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_tel.bsort(kol_tel,0,'a'); break;
            case 1: dyn_vect_tel.bsort(kol_tel,2,'a'); break;
            case 2: dyn_vect_tel.bsort(kol_tel,1,'a'); break;
            case 3: dyn_vect_tel.bsort(kol_tel,4,'i'); break;
            case 4: dyn_vect_tel.bsort(kol_tel,5,'i'); break;
            case 5: dyn_vect_tel.bsort(kol_tel,3,'a'); break;
            case 6: dyn_vect_tel.bsort(kol_tel,6,'a'); break;
            case 7: dyn_vect_tel.bsort(kol_tel,7,'i'); break;
            case 8: dyn_vect_tel.bsort(kol_tel,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_tel = *MyStack.Get_data("telescop");
            for(int i = 0; i<kol_tel; i++)
             dyn_vect_tel[i]->print(Memo2);
           } break;
    case 4:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_mic.bsort(kol_mic,0,'a'); break;
            case 1: dyn_vect_mic.bsort(kol_mic,2,'a'); break;
            case 2: dyn_vect_mic.bsort(kol_mic,1,'a'); break;
            case 3: dyn_vect_mic.bsort(kol_mic,4,'i'); break;
            case 4: dyn_vect_mic.bsort(kol_mic,5,'i'); break;
            case 5: dyn_vect_mic.bsort(kol_mic,3,'a'); break;
            case 6: dyn_vect_mic.bsort(kol_mic,6,'a'); break;
            case 7: dyn_vect_mic.bsort(kol_mic,7,'i'); break;
            case 8: dyn_vect_mic.bsort(kol_mic,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_mic = *MyStack.Get_data("microscop");
            for(int i = 0; i<kol_mic; i++)
             dyn_vect_mic[i]->print(Memo2);
           } break;
   };

 if (RadioGroup1->ItemIndex == 1)
  switch (ListBox2->ItemIndex)
   {
    case 0:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_och.bsortUb(kol_och,0,'a'); break;
            case 1: dyn_vect_och.bsortUb(kol_och,2,'a'); break;
            case 2: dyn_vect_och.bsortUb(kol_och,1,'a'); break;
            case 3: dyn_vect_och.bsortUb(kol_och,4,'i'); break;
            case 4: dyn_vect_och.bsortUb(kol_och,5,'i'); break;
            case 5: dyn_vect_och.bsortUb(kol_och,3,'a'); break;
            case 6: dyn_vect_och.bsortUb(kol_och,6,'a'); break;
            case 7: dyn_vect_och.bsortUb(kol_och,7,'i'); break;
            case 8: dyn_vect_och.bsortUb(kol_och,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_och = *MyStack.Get_data("ochki");
            for(int i = 0; i<kol_och; i++)
              dyn_vect_och[i]->print(Memo2);
            } break;
    case 1:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_lup.bsortUb(kol_lup,0,'a'); break;
            case 1: dyn_vect_lup.bsortUb(kol_lup,2,'a'); break;
            case 2: dyn_vect_lup.bsortUb(kol_lup,1,'a'); break;
            case 3: dyn_vect_lup.bsortUb(kol_lup,4,'i'); break;
            case 4: dyn_vect_lup.bsortUb(kol_lup,5,'i'); break;
            case 5: dyn_vect_lup.bsortUb(kol_lup,3,'a'); break;
            case 6: dyn_vect_lup.bsortUb(kol_lup,6,'a'); break;
            case 7: dyn_vect_lup.bsortUb(kol_lup,7,'i'); break;
            case 8: dyn_vect_lup.bsortUb(kol_lup,8,'a'); break;
            case 9: dyn_vect_lup.bsortUb(kol_lup,9,'a'); break;
           };
            Memo2->Clear();
            dyn_vect_lup = *MyStack.Get_data("lupa");
            for(int i = 0; i<kol_lup; i++)
             dyn_vect_lup[i]->print(Memo2);
           } break;
    case 2:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_bin.bsortUb(kol_bin,0,'a'); break;
            case 1: dyn_vect_bin.bsortUb(kol_bin,2,'a'); break;
            case 2: dyn_vect_bin.bsortUb(kol_bin,1,'a'); break;
            case 3: dyn_vect_bin.bsortUb(kol_bin,4,'i'); break;
            case 4: dyn_vect_bin.bsortUb(kol_bin,5,'i'); break;
            case 5: dyn_vect_bin.bsortUb(kol_bin,3,'a'); break;
            case 6: dyn_vect_bin.bsortUb(kol_bin,6,'a'); break;
            case 7: dyn_vect_bin.bsortUb(kol_bin,7,'i'); break;
            case 8: dyn_vect_bin.bsortUb(kol_bin,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_bin = *MyStack.Get_data("binokular");
            for(int i = 0; i<kol_bin; i++)
             dyn_vect_bin[i]->print(Memo2);
           } break;
    case 3:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_tel.bsortUb(kol_tel,0,'a'); break;
            case 1: dyn_vect_tel.bsortUb(kol_tel,2,'a'); break;
            case 2: dyn_vect_tel.bsortUb(kol_tel,1,'a'); break;
            case 3: dyn_vect_tel.bsortUb(kol_tel,4,'i'); break;
            case 4: dyn_vect_tel.bsortUb(kol_tel,5,'i'); break;
            case 5: dyn_vect_tel.bsortUb(kol_tel,3,'a'); break;
            case 6: dyn_vect_tel.bsortUb(kol_tel,6,'a'); break;
            case 7: dyn_vect_tel.bsortUb(kol_tel,7,'i'); break;
            case 8: dyn_vect_tel.bsortUb(kol_tel,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_tel = *MyStack.Get_data("telescop");
            for(int i = 0; i<kol_tel; i++)
             dyn_vect_tel[i]->print(Memo2);
           } break;
    case 4:{
           switch (ComboBox2->ItemIndex)
           {
            case 0: dyn_vect_mic.bsortUb(kol_mic,0,'a'); break;
            case 1: dyn_vect_mic.bsortUb(kol_mic,2,'a'); break;
            case 2: dyn_vect_mic.bsortUb(kol_mic,1,'a'); break;
            case 3: dyn_vect_mic.bsortUb(kol_mic,4,'i'); break;
            case 4: dyn_vect_mic.bsortUb(kol_mic,5,'i'); break;
            case 5: dyn_vect_mic.bsortUb(kol_mic,3,'a'); break;
            case 6: dyn_vect_mic.bsortUb(kol_mic,6,'a'); break;
            case 7: dyn_vect_mic.bsortUb(kol_mic,7,'i'); break;
            case 8: dyn_vect_mic.bsortUb(kol_mic,8,'i'); break;
           };
            Memo2->Clear();
            dyn_vect_mic = *MyStack.Get_data("microscop");
            for(int i = 0; i<kol_mic; i++)
             dyn_vect_mic[i]->print(Memo2);
           } break;
   };

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)
{
Memo1->Clear();
dyn_vect_och = *MyStack.Get_data("ochki");
for(int i = 0; i<kol_och; i++)
 dyn_vect_och[i]->print(Memo1);

dyn_vect_lup = *MyStack.Get_data("lupa");
for(int i = 0; i<kol_lup; i++)
 dyn_vect_lup[i]->print(Memo1);

dyn_vect_bin = *MyStack.Get_data("binokular");
for(int i = 0; i<kol_bin; i++)
 dyn_vect_bin[i]->print(Memo1);

dyn_vect_tel = *MyStack.Get_data("telescop");
for(int i = 0; i<kol_tel; i++)
 dyn_vect_tel[i]->print(Memo1);

dyn_vect_mic = *MyStack.Get_data("microscop");
for(int i = 0; i<kol_mic; i++)
 dyn_vect_mic[i]->print(Memo1);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)
{
 if (Edit16->Text == "") ShowMessage("Необходимо ввести значение для поиска!");
 if (RadioGroup2->ItemIndex == 0)
  if (Edit16->Text !="")
   switch (ListBox2->ItemIndex)
    {
     case 0:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,0,'a'); break;
                case 1: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,2,'a'); break;
                case 2: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,1,'a'); break;
                case 3: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,4,'i'); break;
                case 4: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,5,'i'); break;
                case 5: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,3,'a'); break;
                case 6: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,6,'a'); break;
                case 7: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,7,'i'); break;
                case 8: dyn_vect_och.find(Edit16->Text,Memo2,kol_och,8,'i'); break;
               };
            } break;
     case 1:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,0,'a'); break;
                case 1: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,2,'a'); break;
                case 2: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,1,'a'); break;
                case 3: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,4,'i'); break;
                case 4: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,5,'i'); break;
                case 5: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,3,'a'); break;
                case 6: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,6,'a'); break;
                case 7: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,7,'i'); break;
                case 8: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,8,'a'); break;
                case 9: dyn_vect_lup.find(Edit16->Text,Memo2,kol_lup,9,'a'); break;
               };
            } break;
     case 2:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,0,'a'); break;
                case 1: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,2,'a'); break;
                case 2: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,1,'a'); break;
                case 3: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,4,'i'); break;
                case 4: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,5,'i'); break;
                case 5: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,3,'a'); break;
                case 6: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,6,'a'); break;
                case 7: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,7,'i'); break;
                case 8: dyn_vect_bin.find(Edit16->Text,Memo2,kol_bin,8,'i'); break;
               };
            } break;
     case 3:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,0,'a'); break;
                case 1: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,2,'a'); break;
                case 2: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,1,'a'); break;
                case 3: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,4,'i'); break;
                case 4: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,5,'i'); break;
                case 5: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,3,'a'); break;
                case 6: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,6,'a'); break;
                case 7: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,7,'i'); break;
                case 8: dyn_vect_tel.find(Edit16->Text,Memo2,kol_tel,8,'i'); break;
               };
            } break;
     case 4:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,0,'a'); break;
                case 1: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,2,'a'); break;
                case 2: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,1,'a'); break;
                case 3: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,4,'i'); break;
                case 4: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,5,'i'); break;
                case 5: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,3,'a'); break;
                case 6: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,6,'a'); break;
                case 7: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,7,'i'); break;
                case 8: dyn_vect_mic.find(Edit16->Text,Memo2,kol_mic,8,'i'); break;
               };
            } break;
   };

 if ((Edit17->Text == "")||(Edit18->Text == "")) ShowMessage("Необходимо ввести все значения для поиска!");
 if (RadioGroup2->ItemIndex == 1)
  if ((Edit17->Text != "")&&(Edit18->Text != ""))
   switch (ListBox2->ItemIndex)
    {
     case 0:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,0,'a'); break;
                case 1: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,2,'a'); break;
                case 2: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,1,'a'); break;
                case 3: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,4,'i'); break;
                case 4: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,5,'i'); break;
                case 5: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,3,'a'); break;
                case 6: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,6,'a'); break;
                case 7: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,7,'i'); break;
                case 8: dyn_vect_och.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_och,8,'i'); break;
              };
            } break;
     case 1:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,0,'a'); break;
                case 1: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,2,'a'); break;
                case 2: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,1,'a'); break;
                case 3: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,4,'i'); break;
                case 4: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,5,'i'); break;
                case 5: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,3,'a'); break;
                case 6: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,6,'a'); break;
                case 7: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,7,'i'); break;
                case 8: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,8,'a'); break;
                case 9: dyn_vect_lup.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_lup,9,'a'); break;
               };
            } break;
     case 2:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,0,'a'); break;
                case 1: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,2,'a'); break;
                case 2: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,1,'a'); break;
                case 3: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,4,'i'); break;
                case 4: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,5,'i'); break;
                case 5: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,3,'a'); break;
                case 6: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,6,'a'); break;
                case 7: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,7,'i'); break;
                case 8: dyn_vect_bin.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_bin,8,'i'); break;
               };
            } break;
     case 3:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,0,'a'); break;
                case 1: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,2,'a'); break;
                case 2: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,1,'a'); break;
                case 3: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,4,'i'); break;
                case 4: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,5,'i'); break;
                case 5: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,3,'a'); break;
                case 6: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,6,'a'); break;
                case 7: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,7,'i'); break;
                case 8: dyn_vect_tel.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_tel,8,'i'); break;
               };
            } break;
     case 4:{
              switch (ComboBox2->ItemIndex)
               {
                case 0: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,0,'a'); break;
                case 1: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,2,'a'); break;
                case 2: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,1,'a'); break;
                case 3: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,4,'i'); break;
                case 4: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,5,'i'); break;
                case 5: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,3,'a'); break;
                case 6: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,6,'a'); break;
                case 7: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,7,'i'); break;
                case 8: dyn_vect_mic.find_Diap(Edit17->Text, Edit18->Text,Memo2,kol_mic,8,'i'); break;
               };
            } break;
  };
}
//---------------------------------------------------------------------------

void write_file()
{
//----сохранение в файла-------
 outfile.open(path);

dyn_vect_och = *MyStack.Get_data("ochki");
for(int i = 0; i<kol_och; i++)
 dyn_vect_och[i]->Write_to_file();

dyn_vect_lup = *MyStack.Get_data("lupa");
for(int i = 0; i<kol_lup; i++)
 dyn_vect_lup[i]->Write_to_file();

dyn_vect_bin = *MyStack.Get_data("binokular");
for(int i = 0; i<kol_bin; i++)
 dyn_vect_bin[i]->Write_to_file();

dyn_vect_tel = *MyStack.Get_data("telescop");
for(int i = 0; i<kol_tel; i++)
 dyn_vect_tel[i]->Write_to_file();

dyn_vect_mic = *MyStack.Get_data("microscop");
for(int i = 0; i<kol_mic; i++)
 dyn_vect_mic[i]->Write_to_file();


 outfile.close();

 ofstream outfile1("C:\\fdat.dat");
 outfile1
  <<kol_och<<' '
  <<kol_lup<<' '
  <<kol_bin<<' '
  <<kol_tel<<' '
  <<kol_mic<<' ';
}

void read_file()
{
try
{
//----загрузка из файла-------
 ifstream infile1("C:\\fdat.dat");
 infile1
  >>kol_och
  >>kol_lup
  >>kol_bin
  >>kol_tel
  >>kol_mic;

 infile.open(path);
 infile.seekg(0);

 Stack<dyn_vect*> MyStack1;

 for(int i = 0; i<kol_och; i++)
   {
    ochki* och_obj = new ochki;
    och_obj->Read_from_file();
    dyn_vect_och.Set_one(och_obj,i);
   }

 MyStack1.Add_elem_head(&dyn_vect_och,"ochki");

 for(int i = 0; i<kol_lup; i++)
   {
    lupa* lup_obj = new lupa;
    lup_obj->Read_from_file();
    dyn_vect_lup.Set_one(lup_obj,i);
   }

 MyStack1.Add_elem_head(&dyn_vect_lup,"lupa");

 for(int i = 0; i<kol_bin; i++)
   {
    binocular* bin_obj = new binocular;
    bin_obj->Read_from_file();
    dyn_vect_bin.Set_one(bin_obj,i);
   }

 MyStack1.Add_elem_head(&dyn_vect_bin,"binokular");

 for(int i = 0; i<kol_tel; i++)
   {
    telescop* tel_obj = new telescop;
    tel_obj->Read_from_file();
    dyn_vect_tel.Set_one(tel_obj,i);
   }

 MyStack1.Add_elem_head(&dyn_vect_tel,"telescop");

 for(int i = 0; i<kol_mic; i++)
   {
    microscop* mic_obj = new microscop;
    mic_obj->Read_from_file();
    dyn_vect_mic.Set_one(mic_obj,i);
   }

 MyStack1.Add_elem_head(&dyn_vect_mic,"microscop");

 infile.close();
 MyStack = MyStack1;
}catch(...)
{Application->MessageBox("Файл содержит неправильные значения!","Ошибка!",MB_ICONHAND+MB_OK);}
}

void __fastcall TForm1::Button9Click(TObject *Sender)
{
 if(SaveDialog1->Execute())
  {
   pathAS = SaveDialog1->FileName;
   path = pathAS.c_str();
   write_file();
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button10Click(TObject *Sender)
{
 if(OpenDialog1->Execute())
  {
   pathAS = OpenDialog1->FileName;
   path = pathAS.c_str();
   read_file();
  }
}
//---------------------------------------------------------------------------




void __fastcall TForm1::RadioGroup2Click(TObject *Sender)
{
switch (RadioGroup2->ItemIndex)
 {
  case 0: {Panel2->Visible=true; Panel1->Visible=false;}break;
  case 1: {Panel2->Visible=false; Panel1->Visible=true;}break;
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)
{
 Form1->Close();       
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
 Form1->Button10->Click();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)
{
 Form1->Button9->Click();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N13Click(TObject *Sender)
{
 kol_och = 0;
 kol_lup = 0;
 kol_bin = 0;
 kol_tel = 0;
 kol_mic = 0;
 Memo1->Clear();
 Memo2->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N8Click(TObject *Sender)
{
 ListBox1->ItemIndex=0;
 Form1->ListBox1Click(N8);
 PageControl1->ActivePageIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N9Click(TObject *Sender)
{
 ListBox1->ItemIndex=1;
 Form1->ListBox1Click(N9);
 PageControl1->ActivePageIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N10Click(TObject *Sender)
{
 ListBox1->ItemIndex=2;
 Form1->ListBox1Click(N10);
 PageControl1->ActivePageIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N11Click(TObject *Sender)
{
 ListBox1->ItemIndex=3;
 Form1->ListBox1Click(N11);
 PageControl1->ActivePageIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N12Click(TObject *Sender)
{
 ListBox1->ItemIndex=4;
 Form1->ListBox1Click(N12);
 PageControl1->ActivePageIndex = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N15Click(TObject *Sender)
{
 PageControl1->ActivePageIndex = 2;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N16Click(TObject *Sender)
{
 PageControl1->ActivePageIndex = 2;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N17Click(TObject *Sender)
{
 PageControl1->ActivePageIndex = 1;
 Button8->Click();
}
//---------------------------------------------------------------------------

Соседние файлы в папке Курсовая работа (Borland C++ Builder)
  • #
    01.05.20143.95 Кб63Project1.bpr
  • #
    01.05.20141.07 Кб61Project1.cpp
  • #
    01.05.201417.87 Кб62Project1.obj
  • #
    01.05.2014876 б64Project1.res
  • #
    01.05.20142.29 Mб63Project1.tds
  • #
    01.05.201468.87 Кб61Unit1.cpp
  • #
    01.05.201451 б63Unit1.ddp
  • #
    01.05.201418.81 Кб64Unit1.dfm
  • #
    01.05.20144.73 Кб63Unit1.h
  • #
    01.05.2014476.96 Кб63Unit1.obj
  • #
    01.05.201468.87 Кб63Unit1.~cpp