2017-01-25 17 views
1

Как я могу хранить свои данные в следующих категориях, например, о воде, домашнем и т.д. Когда я даю информацию о водных птицах, я предоставляю информацию о домашних птицах. Но вторая информация переопределяет первый. каким-либо образом хранить данные для мудрый?Projet в съемках птиц, имеющих проблемы с кодом. как хранить данные, такие как система базы данных

/* declaring header files */ 
#include<iostream> 
#include<conio.h> 
#include<stdio.h> 
#include <fstream> 
#include <bits/stdc++.h> 
#include <string> 

using namespace std; 
class Bird{ 

    private: 
     char name[50],colour[50],nature[50],location[50]; 
     float living_duration; 

    public: 
     int code; 
     int set_info(){ 
      char name='\0'; 
      char colour='\0'; 
      char nature='\0'; 
      char location='\0'; 
      float living_duration=0.0; 
     } 
     int get_info(){ 
      cout<<"\nEnter bird's name: "; 
      cin>>name; 
      cout<<"Colour: "; 
      cin>>colour; 
      cout<<"Nature: "; 
      cin>>nature; 
      cout<<"Location: "; 
      cin>>location; 
      cout<<"Living Duration: "; 
      cin>>living_duration; 
      cout<<"Bird's code: "; 
      cin>>code; 
      } 
     int display_info(){ 
      cout<<"\nBird's name: "<<name; 
      cout<<"\nColour  : "<<colour; 
      cout<<"\nNature  : "<<nature; 
      cout<<"\nlocation  : "<<location; 
      cout<<"\nLiving Duration : "<<living_duration<<" year"; 
      cout<<"\nCode  : "<<code; 
     } 
    }obj[100]; 

int main(){ 
    int i,j,k,n,m; 
    do{ 
      cout<<"\n\nWhat do you want to do\n1.Input bird's information" 
       <<"\n2.Display\n3.Search\n4.Exit." 
       <<"\n\nChoose appropriate number: "; 
      cin>>n; 

      switch(n){ 
       case 1://bird information 
       cout<<"Please Select Birds Category"<<endl; 
       cout<<"------------------"<<endl; 
       cout<<"1)Water\n2)Domestic\n3)prey\n4)treebased\n5)flightless\n6)migratory\n"<<endl; 
       cin>>m; 
        switch(m){ 
        case 1: 
         cout<<"Enter the number of bird how many to input: "; 
         cin>>j; 
         for(i=1;i<=j;i++){ 
         cout<<"\nInformation of Bird "<<i<<".\n"; 
         obj[i].get_info(); 
         } 
         break; 
        case 2: 
         break; 
        case 3: 
         break; 
        case 4: 
         break; 
        case 5: 
         break; 
        case 6: 
         break; 
        default: 
         cout<<"Wrong choice!!\nPlease enter correct number."; 
         break; 
        } 


       case 2://display 
        for(i=1;i<=j;i++) 
       { 
        cout<<"\nBird no "<<i<<".\n"; 
        obj[i].display_info(); 
       cout<<"\n"; 
       } 
       break; 

       case 3://search 
       cout<<"\nEnter the bird code: "; 
       cin>>k; 

       for(i=1;i<=j;i++) 
        { 
       if(k==obj[i].code) 
        { 
        cout<<"\nBird no "<<i<<".\n"; 
        obj[i].display_info(); 
        break; 
        } 
        } 
       if(k!=obj[i].code) 
        cout<<"Wrong code input...\n"; 
        break; 

       case 4://exit 
        break; 

       default: 
        cout<<"Wrong choice!!\nPlease enter correct number."; 
        break; 
      } 

     }while(n!=4); 
    } 
+0

Вы * сделать * знать, что массивы с нуля? Так что массив из 100 элементов (например, ваша глобальная переменная 'obj') будет иметь индексы от' 0' до '99' (включительно). –

ответ

1

Вы должны разделить ваши понятия между птицей данные и контейнер данных.

В базе данных реляционной базы данных у вас было бы таблиц. Пусть столбцы таблицы будут представлены элементами данных структуры. Запись (строка) таблицы будет экземпляром структуры записей:

class Bird 
{ 
public: 
    std::string name; 
    std::string colour; 
    std::string nature; 
    std::string location; 
    float  living_duration; 
}; 

Для контейнера или таблицы, можно использовать std::vector:
std::vector<Bird> bird_table;

Многие реляционных баз данных также включают в себя индексные таблицы, чтобы ускорить поиск. Таблица индексов будет содержать пары, ключ (или значение столбца) и индекс в std::vector. Язык C++ имеет удобный контейнер, называемый std::map:

std::map<string, unsigned int> name_index; 

Параметр string представляет собой ключ или столбец типа.
Параметр unsigned int представляет собой индекс в базу данных (внешний ключ a.k.a).

Чтобы получить запись Птица по имени вы получаете доступ к индексной таблицы первого, то вектор:

unsigned int database_index = name_index["crow"]; 
    Bird crow = database[index];