Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2014, 13:24   #1
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
Восклицание Поиск.Удаление в структуре.

Помогите написать функцию поиска и удаления в структуре!

Поиск(При вводе имя животного, выдавала все данные о нём!)

Удаление(Например записано 5 животных, при нажатия цифры 3, удаляеться 3 животное из списка)

Вот код программы с функциями добавления, просмотра.
Код:
#include <iostream>
#include <fstream>

using namespace std;


struct Animal{
	char name [20];
	char code [6];
	float kg;
};
void search();
void see();
void add();
int main()
{ setlocale(LC_ALL, "Russian");

	int c;
	do
	{
system("cls"); 
cout<<"\t Меню: *"<<endl;
cout<<"\t 1.Просмотр животных"<<endl;
cout<<"\t 2.Добавление животных"<<endl;
cout<<"\t 3.Поиск животного"<<endl;

cin>>c;

	switch (c) 
 {
	case 1: 
	system("cls"); 
    see();
    break; 

    case 2:
    system("cls"); 
    add();
    break; 

    case 3:
    system("cls"); 
    //search();
    break; 

    case 4:
    system("cls"); 
    //del();
    break; 


 system("Pause");
 return 0; 
	}
}
while (c<5); 
cout<<"Bye Bye!";
system("Pause");
return 0;	 
}



void add()
{
cout<<"Enter number of Animals> ";
int n;
cin>>n;
Animal * Animals= new Animal[n];
for(int i=0; i<n; i++)
{
cout<<"---------Номер животного----------["<<i+1<<"] "<<endl;
cout<<"\t1.Имя: ";
cin>>Animals[i].name;
cout<<"\t2.Код: ";
cin>>Animals[i].code;
cout<<"\t3.Кг: ";
cin>>Animals[i].kg;
}
ofstream fo("Animals.txt", ios::app|ios::binary);
if(!fo)
fo.open("Animals.txt", ios::out|ios::binary);
for(int i=0; i<n; i++)
fo.write((char*)&Animals[i], sizeof(Animal));
cout<<"All information has been written\n\n";
fo.close();
}

void see()
{
ifstream fi("Animals.txt", ios::binary);
if(!fi) cout<<"Error with file\n";
else {fi. seekg(0,ios::end);
int size=fi.tellg();
size=size/sizeof(Animal);
Animal * Animals_1= new Animal[size];
fi.seekg(0, ios::beg);
fi.read ((char*)Animals_1,sizeof(Animal)*size);
for(int i=0; i<size; i++)
cout<<Animals_1[i].name<<Animals_1[i].code<<Animals_1[i].kg<<"\n";
system("Pause");
}
}

  //  void search(){}

  //void del(){}

Последний раз редактировалось BaTpyXaaa; 22.04.2014 в 13:27.
BaTpyXaaa вне форума Ответить с цитированием
Старый 22.04.2014, 14:12   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Я бы ввел оператор сравнения
Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
считываешь свой массив Animals из файла
запрашиваем нужное животное
Код:
Animal findAnimal;
cout<<"---------Искомое животное----------"<<endl;
cout<<"\t1.Имя: ";
cin>>findAnimal.name;
cout<<"\t2.Код: ";
cin>>findAnimal.code;
cout<<"\t3.Кг: ";
cin>>findAnimal.kg;
потом в цикле
Код:
for(int i=0; i < size; ++i)
{
  if(Animals[i] == findAnimal)
 {
   //наше животное
 }
}
И не забывай удалять свои массивы
Код:
 delete [] Animals;
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 22.04.2014 в 14:15.
Krok27 вне форума Ответить с цитированием
Старый 22.04.2014, 14:30   #3
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Я бы ввел оператор сравнения
Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
считываешь свой массив Animals из файла
запрашиваем нужное животное
Код:
Animal findAnimal;
cout<<"---------Искомое животное----------"<<endl;
cout<<"\t1.Имя: ";
cin>>findAnimal.name;
cout<<"\t2.Код: ";
cin>>findAnimal.code;
cout<<"\t3.Кг: ";
cin>>findAnimal.kg;
потом в цикле
Код:
for(int i=0; i < size; ++i)
{
  if(Animals[i] == findAnimal)
 {
   //наше животное
 }
}
И не забывай удалять свои массивы
Код:
 delete [] Animals;
Выдаёт кучу ошибок.
Можете написать, как будет выглядеть в полном виде.

Новая проблема! Это работает если водяться все поля (Name.Code.kg). Как сделать чтобы при вводе только имени, выдавало все животных с етим именем.

Последний раз редактировалось BaTpyXaaa; 22.04.2014 в 18:47.
BaTpyXaaa вне форума Ответить с цитированием
Старый 22.04.2014, 14:38   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

НЕ, не могу, религия не позволяет.
Все ж написал уже. Просто мозг надо включить.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 22.04.2014, 15:02   #5
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Я бы ввел оператор сравнения
Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
считываешь свой массив Animals из файла
запрашиваем нужное животное
Код:
Animal findAnimal;
cout<<"---------Искомое животное----------"<<endl;
cout<<"\t1.Имя: ";
cin>>findAnimal.name;
cout<<"\t2.Код: ";
cin>>findAnimal.code;
cout<<"\t3.Кг: ";
cin>>findAnimal.kg;
потом в цикле
Код:
for(int i=0; i < size; ++i)
{
  if(Animals[i] == findAnimal)
 {
   //наше животное
 }
}
И не забывай удалять свои массивы
Код:
 delete [] Animals;
При использовании
Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
Просит поставить ";" перед "{". Если поставить то ("aRight" and "aLeft" is undefined). Как быть?

Затем я считал массив Animals из файла, сделал запрос на того кто мне нужен.

В цикле мне выдёт.
Код:
 Animals[i]
(identifier "Animals" is undefined)
Код:
for(int i=0; i < size; ++i)
{
  if(Animals[i] == findAnimal)
 {
   //наше животное
 }
}
BaTpyXaaa вне форума Ответить с цитированием
Старый 22.04.2014, 15:41   #6
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
поставить ПОСЛЕ определения структуры Animal.

Цитата:
(identifier "Animals" is undefined)
А ты его определил?
Код в студию.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 22.04.2014, 16:24   #7
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
поставить ПОСЛЕ определения структуры Animal.


А ты его определил?
Код в студию.
Все разобрался! Все работает Как быть с удалением?
BaTpyXaaa вне форума Ответить с цитированием
Старый 22.04.2014, 17:01   #8
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Поищи по форуму, наверняка было.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 22.04.2014, 18:49   #9
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Я бы ввел оператор сравнения
Код:
bool operator == (Animal& aLeft, Animal& aRight)
{
        if(strncmp(aLeft.name, aRight.name,sizeof(aRight.name)/sizeof(char))) 
                return false;
        if(strncmp(aLeft.code, aRight.code,sizeof(aRight.code)/sizeof(char)))
                return false;
        if(aLeft.kg != aRight.kg)
                return false;
        return true;
}
считываешь свой массив Animals из файла
запрашиваем нужное животное
Код:
Animal findAnimal;
cout<<"---------Искомое животное----------"<<endl;
cout<<"\t1.Имя: ";
cin>>findAnimal.name;
cout<<"\t2.Код: ";
cin>>findAnimal.code;
cout<<"\t3.Кг: ";
cin>>findAnimal.kg;
потом в цикле
Код:
for(int i=0; i < size; ++i)
{
  if(Animals[i] == findAnimal)
 {
   //наше животное
 }
}
И не забывай удалять свои массивы
Код:
 delete [] Animals;
Новая проблема.
Для запроса надо (name.code.kg)
Как сделать чтобы при вводе только имени, выдавало всех животных с етим именем?
BaTpyXaaa вне форума Ответить с цитированием
Старый 22.04.2014, 19:09   #10
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

проблемы проблемы проблемы,за новой проблемой более новая проблема и т.д.
мне кажется что одну половину твоей программы писал преподаватель,а другую одногруппник.
извини если ошибся
но так - это не программирование ,лучше попроси одногруппника все сделать

Перечитай внимательно про структуры и файловые переменные

Последний раз редактировалось alekopoko; 22.04.2014 в 19:20.
alekopoko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск и удаление файлов Gsmart120 Помощь студентам 4 22.12.2013 23:12
Поиск и удаление MISSING SilverSmallFish Microsoft Office Excel 4 28.06.2010 14:53
Поиск и удаление из TStrings Shouldercannon Общие вопросы Delphi 9 27.05.2010 19:47
поиск в структуре Silveria Общие вопросы C/C++ 4 12.05.2010 16:13
Поиск и удаление столбцов mchip Microsoft Office Excel 4 17.05.2009 18:48