Консультация № 160951
20.02.2009, 03:39
0.00 руб.
0 1 1
Уважаемые эксперты, подскажите, пожалуйста, как реализовать :
поиск по названию-
поиск по жанру-
поиск по режиссеру-
самый популярный фильм в жанре-
в приложении, которое прилагаю. Не получается правильно написать сравнение введенного значения. Вообще изначально условие такое:

Создать структуру ВИДЕОМАГАЗИН со следующими полями:
Название фильма
Режиссер
Жанр
Рейтинг популярности
Цена диска

Реализовать следующие возможности:
Поиск по названию
Поиск по жанру
Поиск по режиссеру
Самый популярный фильм в жанре
Показ всех записей и добавление

Приложение:
#include<iostream>
using namespace std;
struct Disk
{
char *film;
char *rezh;
char *zhanr;
char *reit;
int cena;
};
void print(Disk q)
{
cout<<q.film<<"\n\n";
cout<<q.rezh<<"\n\n";
cout<<q.zhanr<<"\n\n";
cout<<q.reit<<"\n\n";
cout<<q.cena<<"grn"<<"\n\n";
}
void main()
{
char a;
cout<<"Vvedite slovo dlya poiska:";
cin>>a;

Disk d={"Garazh","E.Ryazanov","Comedy","*****",20};
Disk b={"Skorost","Yan De Bont","Boevik","****-",30};
Disk c={"Sadat","Yan De Bont","Drama","***--",25};
print(d);
cout<<"---------------------------"<<"\n\n";
print(b);
cout<<"---------------------------"<<"\n\n";
print(c);
}

Обсуждение

Неизвестный
20.02.2009, 13:51
общий
это ответ
Здравствуйте, Васильев Дмитрий!
Поскольку Вы пишете на C++ то и ответ на нем. Если Вам нужна непременно структура, то замените class на struct. Программа тестировалась на Visual Studio 2008.
Код:

#include <locale>
#include <limits>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

class CDisk
{
public:
CDisk(wstring Movie,wstring Director,wstring Genre,int Rate,double Price)
{
_movie=Movie;
_director=Director;
_genre=Genre;
_rate=Rate;
_price=Price;
}
static bool ifMovie(wstring str,const CDisk& disk)
{
if(str==disk._movie)return true;
else return false;
}
static bool ifDirector(wstring str,const CDisk& disk)
{
if(str==disk._director)return true;
else return false;
}
static bool ifGenre(wstring str,const CDisk& disk)
{
if(str==disk._genre)return true;
else return false;
}
int rate() const
{
return _rate;
}
double price()const
{
return _price;
}
friend wostream& operator<<(wostream& stream,const CDisk& disk);
private:
wstring _movie;
wstring _director;
wstring _genre;
int _rate;
double _price;
};

vector<CDisk> collection;

int GetOperation();
void ShowAndAdd();
void FindMovie();
void FindDirector();
void FindGenre();
void FindMaxRateInGenre();

int main()
{
locale::global(locale("rus_rus.866"));
while(true)
{
switch(GetOperation())
{
case 1:
FindMovie();
break;
case 2:
FindDirector();
break;
case 3:
FindGenre();
break;
case 4:
FindMaxRateInGenre();
break;
case 5:
ShowAndAdd();
break;
case 6:
return 0;
}
}
return 0;
}

wostream& operator<<(wostream& stream,const CDisk& disk)
{
stream<<L"Название:"<<disk._movie<<endl;
stream<<L"Режиссер:"<<disk._director<<endl;
stream<<L"Жанр:"<<disk._genre<<endl;
stream<<L"Популярность:"<<disk._rate<<endl;
stream<<L"Цена:"<<setprecision(2)<<disk._price<<endl;
return stream;
}

void line()
{
wcout<<L"----------------------------------------------------------------"<<endl;
}

int GetOperation()
{
while(true)
{
wcout<<L"Выберите наобходимое действие"<<endl;
wcout<<L"1-Поиск по названию"<<endl;
wcout<<L"2-Поиск по режиссеру"<<endl;
wcout<<L"3-Поиск пожанру"<<endl;
wcout<<L"4-Самый популярный фильм в жанре"<<endl;
wcout<<L"5-Показ всех записей и добавление"<<endl;
wcout<<L"6-Выход"<<endl;
wcout<<L"Сделайте свой выбор:";
int choice;
wcin>>choice;
if(wcin.fail())
{
wcout<<L"Ошибка. Будьте внимательней."<<endl;
wcin.clear();
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
continue;
}
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
if(choice>=1&&choice<=6)return choice;
else
{
wcout<<L"Неверный выбор"<<endl;
}
line();
}
}

void print(const CDisk& disk)
{
wcout<<disk;
line();
}

void ShowAndAdd()
{
wcout<<L"В коллекции имеются следующие фильмы:"<<endl;
line();
for_each(collection.begin(),collection.end(),print);
wcout<<L"Добавьте фильмы в коллекцию"<<endl;
while(true)
{
wstring movie,director,genre;
int rate;
double price;
wcout<<L"Название(пустая строка для завершения):";
getline(wcin,movie);
if(!movie.length())break;
wcout<<L"Режиссер:";
getline(wcin,director);
wcout<<L"Жанр:";
getline(wcin,genre);
wcout<<L"Популярность:";
wcin>>rate;
wcout<<L"Цена:";
wcin>>price;
collection.push_back(CDisk(movie,director,genre,rate,price));
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
}

void FindDisk(wstring str,bool (*boolFunc)(wstring,const CDisk&),void (*actionFunc)(const CDisk&))
{
for(vector<CDisk>::iterator it=collection.begin();it!=collection.end();it++)
{
if(boolFunc(str,*it))
actionFunc(*it);
}
}

void FindMovie()
{
wstring movie;
wcout<<L"Введите название фильма для поиска:";
getline(wcin,movie);
if(movie.length())
{
wcout<<L"С названием ""<<movie<<L"" найдены следующие фильмы:"<<endl;
FindDisk(movie,CDisk::ifMovie,print);
}
}

void FindDirector()
{
wstring director;
wcout<<L"Введите имя режиссера для поиска:";
getline(wcin,director);
if(director.length())
{
wcout<<L"С режиссером ""<<director<<L"" найдены следующие фильмы:"<<endl;
FindDisk(director,CDisk::ifDirector,print);
}
}

void FindGenre()
{
wstring genre;
wcout<<L"Введите жанр для поиска:";
getline(wcin,genre);
if(genre.length())
{
wcout<<L"В жанре ""<<genre<<L"" найдены следующие фильмы:"<<endl;
FindDisk(genre,CDisk::ifGenre,print);
}
}

static const CDisk* maxRate;

void MaxInGenre(const CDisk& disk)
{
if(maxRate)
{
if(maxRate->rate()<disk.rate())
maxRate=&disk;
}
else maxRate=&disk;
}

void PrintIfMaxInGenre(const CDisk& disk)
{
if(maxRate&&(disk.rate()==maxRate->rate()))print(disk);
}

void FindMaxRateInGenre()
{
wstring genre;
wcout<<L"Введите жанр для поиска:";
getline(wcin,genre);
maxRate=0;
if(genre.length())
{
FindDisk(genre,CDisk::ifGenre,MaxInGenre);
wcout<<L"Максимальный рейтинг у следующих фильмов:"<<endl;
FindDisk(genre,CDisk::ifGenre,PrintIfMaxInGenre);
}
maxRate=0;
}

Пример работы:
Код:

Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:5
В коллекции имеются следующие фильмы:
----------------------------------------------------------------
Добавьте фильмы в коллекцию
Название(пустая строка для завершения):Бойцовский клуб
Режиссер:Финчер
Жанр:боевик
Популярность:9
Цена:40
Название(пустая строка для завершения):Список Шиндлера
Режиссер:Спилберг
Жанр:драма
Популярность:9
Цена:45
Название(пустая строка для завершения):Криминальное чтиво
Режиссер:Тарантино
Жанр:криминал
Популярность:8
Цена:35
Название(пустая строка для завершения):Матрица
Режиссер:Вачовски
Жанр:фантастика
Популярность:8
Цена:30
Название(пустая строка для завершения):Чужой 3
Режиссер:Финчер
Жанр:фантастика
Популярность:7
Цена:30
Название(пустая строка для завершения):
Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:5
В коллекции имеются следующие фильмы:
----------------------------------------------------------------
Название:Бойцовский клуб
Режиссер:Финчер
Жанр:боевик
Популярность:9
Цена:40
----------------------------------------------------------------
Название:Список Шиндлера
Режиссер:Спилберг
Жанр:драма
Популярность:9
Цена:45
----------------------------------------------------------------
Название:Криминальное чтиво
Режиссер:Тарантино
Жанр:криминал
Популярность:8
Цена:35
----------------------------------------------------------------
Название:Матрица
Режиссер:Вачовски
Жанр:фантастика
Популярность:8
Цена:30
----------------------------------------------------------------
Название:Чужой 3
Режиссер:Финчер
Жанр:фантастика
Популярность:7
Цена:30
----------------------------------------------------------------
Добавьте фильмы в коллекцию
Название(пустая строка для завершения):
Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:1
Введите название фильма для поиска:Матрица
С названием "Матрица" найдены следующие фильмы:
Название:Матрица
Режиссер:Вачовски
Жанр:фантастика
Популярность:8
Цена:30
----------------------------------------------------------------
Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:2
Введите имя режиссера для поиска:Финчер
С режиссером "Финчер" найдены следующие фильмы:
Название:Бойцовский клуб
Режиссер:Финчер
Жанр:боевик
Популярность:9
Цена:40
----------------------------------------------------------------
Название:Чужой 3
Режиссер:Финчер
Жанр:фантастика
Популярность:7
Цена:30
----------------------------------------------------------------
Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:3
Введите жанр для поиска:фантастика
В жанре "фантастика" найдены следующие фильмы:
Название:Матрица
Режиссер:Вачовски
Жанр:фантастика
Популярность:8
Цена:30
----------------------------------------------------------------
Название:Чужой 3
Режиссер:Финчер
Жанр:фантастика
Популярность:7
Цена:30
----------------------------------------------------------------
Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:4
Введите жанр для поиска:боевик
Максимальный рейтинг у следующих фильмов:
Название:Бойцовский клуб
Режиссер:Финчер
Жанр:боевик
Популярность:9
Цена:40
----------------------------------------------------------------
Выберите наобходимое действие
1-Поиск по названию
2-Поиск по режиссеру
3-Поиск пожанру
4-Самый популярный фильм в жанре
5-Показ всех записей и добавление
6-Выход
Сделайте свой выбор:
Форма ответа