Как я могу сохранить свои данные в следующих категориях: вода, вода и т. Д. Когда я даю информацию о водоплавающих птицах, то я даю информацию о домашних птицах. Но вторая информация переопределяет первую. Есть ли способ хранения данных для категорий?
/* 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);
}
Вы должны разделить свои понятия между птицами данные и контейнер данных.
В реляционный база данных, вы бы имели таблицы. Пусть столбцы таблицы будут представлены элементами данных структуры. Запись (строка) таблицы будет экземпляром структуры записи:
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).
Чтобы получить запись Bird по имени, вы сначала обращаетесь к таблице индексов, а затем к вектору:
unsigned int database_index = name_index["crow"];
Bird crow = database[index];
Других решений пока нет …