GVA SUPPORT

Відповідь на запитання № 1306880716
Text:
	ФІО = Горбаченко В.А.

 Запитання:/*
Завдання: реалізувати клас- група тварин. Реалізувати можливість 
включення та виключення тварин у групу, сортування їх за різними
 ознаками.
*/

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cstring>
#define n 100
#define sdata1 "Nazva knugu"
#define sdata2 "tup"
#define sdata3 "vaga"

using namespace std;

//===========================================================================
int confirm(){// функція виводить підтвердження на екран
   char key; // зчтьувана клавіша
   do // цикл
   {
      cout<<endl<<" Confirm [Y/N]? "<<endl;
      key=getch();
      cout<<key;
   } while (key!='n' && key!='N' && key!='Y' && key!='y' ); // якщо натиснуто одну з перелічених клавіщ - вийти з циклу
   if (key=='y' || key=='Y') return 1; else return 0; //якщо y - повернути 1, інакше - 0

}
//===========================================================================
long EnterNumber(long max){  // функція повертає зчитане введене з клавіатури число, і в випадку, якщо число не з діапазону [0;max] просить користувача, переввести число
   long nn; // в цю змінну буде зчитуватись число введенне з клавіатури
   do{
      cout<<endl<<"Enter number [ 0 - "<<max-1<<" ] :";
      cin>>nn;
   if (nn<0 || nn>max-1) {cout<<endl<<" ERROR!!! "<<endl;}
   }while (nn<0 || nn>max-1); // умова виходу з циклу
   return nn; // воертає ввдеене число
}


//===========================================================================

class Tlibrary{

      private:
      class TDate{
      public:

        char s1[n];
        char s2[n];
        double vaga;
      void EnterInfo(){
           fflush(stdin);
           cout<<" Enter "<<sdata1<<" : ";
           cin.getline(s1,n);
           fflush(stdin);
           cout<<" Enter "<<sdata2<<" : ";
           cin.getline(s2,n);
           fflush(stdin);           
           cout<<" Enter "<<sdata3<<" : ";
           cin>>vaga;           
           fflush(stdin);
           return ;
      }
//===========================================================================
      void ShowInfo(){
           fflush(stdin);
           cout<<"  \t"<<sdata1<<" : \t"<<s1;
           cout<<"  \t"<<sdata2<<" : \t"<<s2;
           cout<<"  \t"<<sdata3<<" : \t"<<vaga;           
      }

//===========================================================================

        TDate(){
        }

      char data1[n]; // назва книги
      char data2[n]; // автор
        ~TDate(){
        }
      };
      int count;
      TDate *lib;
      public:
      int DateCmp(TDate a,TDate b,int field){
          if (field==1){
                        return strcmp(a.s1,b.s1);
          }
          if (field==2){
                        return strcmp(a.s2,b.s2);
          }
          if (field==3){
                        if (a.vaga>b.vaga) return 1;
                        if (a.vaga<b.vaga) return -1;
                        return 0;
          }
          
      }             
      Tlibrary()
      {
             lib=new TDate[n];
             count=0;
      }
      ~Tlibrary()
      {
             delete lib;
      }

//===========================================================================      
void Tlibrary::ShowSort(){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int a;
     cout<<"Enter field to sort (fitst at 1): ";
     cin>>a;
     for (int i = 0 ; i < count-1 ; i++)
     for (int j = i+1 ; j < count ; j++){
         if (DateCmp(*(lib+i),*(lib+j),a)>0)
         {

            TDate *temp=new TDate;
            *temp=*(lib+i);
            *(lib+i)=*(lib+j);
            *(lib+j)=*temp;
            delete temp;
            
         }
     }   
}
void AddRecord(){
     system("cls");
/*
     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
*/
     TDate temp;
     cout<<"Entering data at "<<count<<" position\n";
     temp. EnterInfo();
     if (confirm()){
        *(lib+count)=temp;
        count++;
     }
}
//===========================================================================
void EditRecord(){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     TDate temp=*(lib+nn);
     cout<<"Editing data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;
     temp. EnterInfo();
     if (confirm()){
        *(lib+nn)=temp;
     }
}
void DeleteRecord(){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     TDate temp=*(lib+nn);
     cout<<"Delete data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;

     if (confirm()){
        for (int i=nn+1 ; i<count ; i++)
        {
         *(lib+i-1)=*(lib+i);
         }
         count--;
     }
}

//===========================================================================
void ShowRecord(){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     TDate temp=*(lib+nn);
     cout<<"Data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;
    system("pause");
}
//===========================================================================
void ShowAllRecord(){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
    for (int i = 0 ; i < count ; i++){
        (lib+i)->ShowInfo(); cout<<endl;
         if ((i+1)%5 == 0) system("pause");
    }

     cout<<endl<<"===================================================="<<endl;
    system("pause");
}
//===========================================================================

void FindRecord(){

     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     char *query = new char [n*3];
     cout<<"\nEnter find query : ";
     cin.getline(query,n*3);
     int founded=0;
     for (int i = 0 ; i < count ; i++){
         if ( 
         (strcmp(((lib+i)->data1), (query) )==0)
         ||
         (strcmp(((lib+i)->data2), (query) )==0)

         )
         {
          cout<<i<<" : ";
                  (lib+i)->ShowInfo(); 
                  cout<<endl;
                  founded++;
         }

         

     }
         cout<<"Founded "<<founded<<" record(s)\n";
     cout<<endl<<"===================================================="<<endl;
    system("pause");
}

//===========================================================================
void Tlibrary::showmenu(){

     
     char key;
     do
     {
          system("cls");
          cout<<" Your database have "<<count<<" record(s) "<<endl<<endl;
          cout<<" Program main menu: "<<endl<<endl;
          cout<<" 1) Add record"<<endl;
          cout<<" 2) Edit record "<<endl;                    
          cout<<" 3) Delete record "<<endl;                              
          cout<<" 4) Show record "<<endl;                     
          cout<<" 5) Show all record "<<endl;                               
          cout<<" 6) Find record "<<endl;                     
          cout<<" 7) Sort by "<<endl;
          cout<<" ESC) Exit "<<endl;                     
          key=getch();          
          switch (key){
                 case '1': AddRecord(); break;
                 case '2': EditRecord(); break;
                 case '3': DeleteRecord(); break;
                 case '4': ShowRecord(); break;                                                   
                 case '5': ShowAllRecord(); break;                   
                 case '6': FindRecord(); break;
                 case '7': ShowSort(); break;
          }
                              

     } while (key!=27);
     system("PAUSE");
}
//===========================================================================
      
};

int main(){
    Tlibrary *z=new Tlibrary;
    z->showmenu();
    delete z;    
    return 0;
}


====================================	
Ваша відповідь