Консультация № 123410
16.02.2008, 18:08
0.00 руб.
0 3 3
Пытаюсь написать программу - не получается. Может подскажете?
Вот то, что я сделала:код C++

#include<iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
#include <windows.h>
#include <conio.h>

struct kino
{
char film[100];
char regiser[100];
char ganr[100];
int reyting;
int cena;
};

kino add(kino*ps,int &n);

void main()
{

return 0;
}
/////////////////////////////////////////////////////////
kino add(kino*ps,int &n)
{
kino*ps=new kino[++n];
cout<<"Dobavte zapici"<<endl;
cin>>ps[n].film;
cin>>ps[n].regiser;
cin>>ps[n].ganr;
cin>>ps[n].reyting;
cin>>ps[n].cena
}


А вот задание:
описать структуру со следующими полями: название фильма, режисер, жанр, рейтинг популярности, цена диска. Реализовать следующие возможности: 1 - Добавление всех записей. 2 - Показ всех записей. 3 - Организовать поиски: а) по названию, б) по жанру, в) по режисеру, г) найти самый популярный фильм в жанре

Обсуждение

Неизвестный
16.02.2008, 19:06
общий
это ответ
Здравствуйте, Tanyha!
код в приложении. ваш вариант с массивом kino неподходит. каждый элемент структуры ссылается на следующий.

Приложение:
#include<iostream>//#include <cstdlib>//#include <ctime>//#include <cmath>using namespace std; //#include <windows.h>//#include <conio.h>struct kino{char film[100];char regiser[100];char ganr[100];int reyting;int cena;kino *next;};void add(kino *ps);void search1(kino*st,kino*fi,char*str);void search2(kino*st,kino*fi,char*str);void search3(kino*st,kino*fi,char*str);void search4(kino*st,kino*fi,int qw);void show(kino*st,kino*fi){ kino*p=st; kino*er=0; while(er!=fi) { cout<<"film: "<<p->film<<endl; cout<<"regiser: "<<p->regiser<<endl; cout<<"ganr: "<<p->ganr<<endl; cout<<"reyting: "<<p->reyting<<endl; cout<<"cena: "<<p->cena<<endl; er=p; p=p->next; }}int main(){ kino *start=new kino; kino *finish=start; add (start); int swi=0,sw2=0; char str[100];while(swi!=4){ cout<<"Enter 1 to add\nEnter 2 to show\nEnter3 to search\nEnter 4 to exit:"; cin>>swi; if(swi==1) { finish->next=new kino; finish=finish->next; add(finish); } else if(swi==2) { show(start,finish); } else if(swi==3) { cout<<"Enter 1 to search on name of film\nEnter 2 to search on nsme of regiser\nEnter 3 to search on ganr\nEnter 4 to search on reything: "; cin>>sw2; switch (sw2) { case 1 : cin>>str; search1(start,finish,str); break; case 2 : cin>>str; search2(start,finish,str); break; case 3 : cin>>str; search3(start,finish,str); break; case 4 : cin>>sw2; search4(start,finish,sw2); break; } }}return 0;}void search1(kino*st,kino*fi,char*str){ kino*p=st; kino*er=0; while(er!=fi) { if(!strcmp(str,p->film)) show(p,p); er=p; p=p->next; }}void search2(kino*st,kino*fi,char*str){ kino*p=st; kino*er=0; while(er!=fi) { if(!strcmp(str,p->regiser)) show(p,p); er=p; p=p->next; }}void search3(kino*st,kino*fi,char*str){ kino*p=st; kino*er=0; while(er!=fi) { if(!strcmp(str,p->ganr)) show(p,p); er=p; p=p->next; }}void search4(kino*st,kino*fi,int s2){ kino*p=st; kino*er=0; while(er!=fi) { if(s2==p->reyting) show(p,p); er=p; p=p->next; }}/////////////////////////////////////////////////////////void add(kino*ps){//kino*ps=new kino[++n];cout<<"Dobavte zapici"<<endl;cin>>ps->film;cin>>ps->regiser;cin>>ps->ganr;cin>>ps->reyting;cin>>ps->cena;}
давно
Старший Модератор
17042
808
16.02.2008, 21:00
общий
это ответ
Здравствуйте, Tanyha!
1. При первом взгляде на код: слишком много подключено откровенно ненужных стандартных библиотек: #include <cstdlib>, #include <ctime>, #include <cmath>, #include <windows.h>, #include <conio.h>
Реально нужны лишь следующие STL классы: для работы со строками (#include <string>) и для работы с динамическими массивами - векторами (#include <vector>).
2. Вообще более разумно для хранения подобной базы данных сделать класс с закрытыми переменными и функциями для доступа к ним. Но поскольку по условию требуется структура, то объявил все члены класса открытыми (public - см. приложение).
3. Чтобы приложение что-то делало, нужно создать экземпляр класса в функции main() и вызвать метод класса. В примере из приложения в главной функции - лишь примеры возможной работы.
4. Раз функция возвращает значение, то нужно писать не void main(), а int main().
5. Зачем использовать строки в виде массива символов, если есть классы STL?
Пример работоспособного класса (без использования указателей) и его применения - в приложении.

Приложение:
// Файл TCinema.h//------------------------------------------------------------------#ifndef _TCinema_h_#define _TCinema_h_//------------------------------------------------------------------#include <string>#include <vector>using namespace std;//------------------------------------------------------------------class TCinema{public: TCinema(); vector<string> sFilmName; vector<string> sFilmAuthor; vector<string> sFilmGenre; vector<short> nRating; vector<short> nDiskPrice; void AddRecords(); void ShowRecord(int); void ShowRecords(); void ShowMostPopular(); void SearchByName(string); void SearchByGenre(string); void SearchByAuthor(string);};//------------------------------------------------------------------#endif//------------------------------------------------------------------// Файл TCinema.cpp//------------------------------------------------------------------#include "TCinema.h"//------------------------------------------------------------------#include <iostream>using namespace std;//------------------------------------------------------------------TCinema::TCinema(){}//------------------------------------------------------------------void TCinema::AddRecords(){ cout<<"Добавление новой записи."<<endl; string sTempString; cout<<"Введите название фильма: "; cin>>sTempString; sFilmName.push_back(sTempString); cout<<"Введите имя режиссёра фильма: "; cin>>sTempString; sFilmAuthor.push_back(sTempString); cout<<"Введите жанр фильма: "; cin>>sTempString; sFilmGenre.push_back(sTempString); short nTempValue; cout<<"Введите рейтинг фильма: "; cin>>nTempValue; nRating.push_back(nTempValue); cout<<"Введите цену диска с фильмом: "; cin>>nTempValue; nDiskPrice.push_back(nTempValue); cout<<"Запись добавлена!"<<endl; cout<<"*********************************************************************"<<endl;}//------------------------------------------------------------------void TCinema::ShowRecord(int id){ if((id + 1) > sFilmName.size()) { cout<<"Невозможно показать запись: запись отсутствует!"<<endl; cout<<"*********************************************************************"<<endl; } else { cout<<"Название фильма: "<<sFilmName[id]<<endl; cout<<"Режиссёр: "<<sFilmAuthor[id]<<endl; cout<<"Жанр: "<<sFilmGenre[id]<<endl; cout<<"Рейтинг: "<<nRating[id]<<endl; cout<<"Цена диска: "<<nDiskPrice[id]<<endl; }}//------------------------------------------------------------------void TCinema::ShowRecords(){ for(int i = 0; i < sFilmName.size(); i++) { cout<<"Запись "<<i<<": "<<endl; ShowRecord(i); cout<<"*********************************************************************"<<endl; }}//------------------------------------------------------------------void TCinema::ShowMostPopular(){ if(sFilmName.size() == 0) { cout<<"Записи отсутствуют!"<<endl; cout<<"*********************************************************************"<<endl; } else { int iCurrent = 0; for(int i = 0; i < sFilmName.size(); i++) { if(nRating[iCurrent] < nRating[i]) iCurrent = i; } cout<<"Максимальный рейтинг у следующего фильма: "<<endl; ShowRecord(iCurrent); }}//------------------------------------------------------------------void TCinema::SearchByName(string sSearch){ bool bIsFound = false; for(int i = 0; i < sFilmName.size(); i++) { if(sFilmName[i] == sSearch) { cout<<"Найдена запись: "<<endl; cout<<"Запись "<<i<<endl; ShowRecord(i); bIsFound = true; break; } } if(bIsFound == false) cout<<"Фильм с таким названием не найден!"<<endl; cout<<"*********************************************************************"<<endl;}//------------------------------------------------------------------void TCinema::SearchByGenre(string sSearch){ bool bIsFound = false; for(int i = 0; i < sFilmGenre.size(); i++) { if(sFilmGenre[i] == sSearch) { cout<<"Найдена запись: "<<endl; cout<<"Запись "<<i<<endl; ShowRecord(i); bIsFound = true; break; } } if(bIsFound == false) cout<<"Фильм с такого жанра не найден!"<<endl; cout<<"*********************************************************************"<<endl;}//------------------------------------------------------------------void TCinema::SearchByAuthor(string sSearch){ bool bIsFound = false; for(int i = 0; i < sFilmAuthor.size(); i++) { if(sFilmAuthor[i] == sSearch) { cout<<"Найдена запись: "<<endl; cout<<"Запись "<<i<<endl; ShowRecord(i); bIsFound = true; break; } } if(bIsFound == false) cout<<"Фильм с такого автора не найден!"<<endl; cout<<"*********************************************************************"<<endl;}//------------------------------------------------------------------// Файл main.cpp//------------------------------------------------------------------
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
16.02.2008, 21:00
общий
это ответ
Здравствуйте, Tanyha!
В приложении код программы, компилировал под VS 2003.

Приложение:
/*Создать структуру видеомагазин со следующими полями-Название фильма-Режисёр-Жанр-Рейтинг популярности-Цена дискаРеализовать следующие возможности-Поиск по названию-Поиск по режисёру-Самый популярный фильм в жанре-Показ всех записей и добавление*/#include <iostream>#include <conio.h>#include <stdio.h>#include <string.h>using namespace std;//Создание структуры видеомагазинаstruct videoshop{ char film[30]; //Название фильма char director[30]; //Режисёр char genre[20]; //Жанр int rating; //Рейтинг double cost_CD; //Цена диска}disc[100];void main(){ char contin; int menu,col=0,n,temp; char test[30]; do { do{ cout<<"1 -Serch under the name\n"; //Поиск по названию cout<<"2 -Serch on a genre\n"; //Поиск по жанру cout<<"3 -Search on the director\n"; //Поиск по режисёру cout<<"4 -The most popular film in a genre\n"; //Самый популярный фильм в жанре cout<<"5 -Viewing of all records\n"; //Просмотр всех записей cout<<"6 -Addition of records\n"; //Добавление записей cin>>menu; }while((menu<1)||(menu>6)); switch(menu) { case 1: { int t; n=0; gets(test); cout<<"Input the name of film : "; gets(test); for(int i=0; i<col; i++) { t=stricmp(disc[i].film,test); if(t==0) { cout<<"The name of film : "<<disc[i].film<<"\n"; cout<<"Director of film : "<<disc[i].director<<"\n"; cout<<"Genre : "<<disc[i].genre<<"\n"; cout<<"Rating : "<<disc[i].rating<<"\n"; cout<<"Cost CD : "<<disc[i].cost_CD<<"\n"; n++; } } if(n==0) { cout<<"Concurrences it is not found\n"; } } break; case 2: { int p; n=0; gets(test); cout<<"Input the genre of film : "; gets(test); for(int i=0; i<col; i++) { p=stricmp(disc[i].genre,test); if(p==0) { cout<<"The name of film : "<<disc[i].film<<"\n"; cout<<"Director of film : "<<disc[i].director<<"\n"; cout<<"Genre : "<<disc[i].genre<<"\n"; cout<<"Rating : "<<disc[i].rating<<"\n"; cout<<"Cost CD : "<<disc[i].cost_CD<<"\n"; n++; } } if(n==0) { cout<<"Concurrences it is not found\n"; } } break; case 3: { int w; n=0; gets(test); cout<<"Input the director of film : "; gets(test); for(int i=0; i<col; i++) { w=stricmp(disc[i].director,test); if(w==0) { cout<<"The name of film : "<<disc[i].film<<"\n"; cout<<"Director of film : "<<disc[i].director<<"\n"; cout<<"Genre : "<<disc[i].genre<<"\n"; cout<<"Rating : "<<disc[i].rating<<"\n"; cout<<"Cost CD : "<<disc[i].cost_CD<<"\n"; n++; } } if(n==0) { cout<<"Concurrences it is not found\n"; } } break; case 4: { int d,max=0,num,nal=0; n=0; gets(test); cout<<"Input the genre of film : "; gets(test); for(int i=0; i<col; i++) { d=stricmp(disc[i].genre,test); if(d==0) { if(disc[i].rating>max) { max=disc[i].rating; num=i; nal++; } n++; } } if(nal>0) //выводим самый популярный фильм в жанре { cout<<"The name of film : "<<disc[num].film<<"\n"; cout<<"Director of film : "<<disc[num].director<<"\n"; cout<<"Genre : "<<disc[num].genre<<"\n"; cout<<"Rating : "<<disc[num].rating<<"\n"; cout<<"Cost CD : "<<disc[num].cost_CD<<"\n"; } if(n==0) //Если такого жанра нет выводим сообщение { cout<<"Concurrences it is not found\n"; } } break; case 5: for(int i=0; i<col; i++) { cout<<"The name of film : "<<disc[i].film<<"\n"; cout<<"Director of film : "<<disc[i].director<<"\n"; cout<<"Genre : "<<disc[i].genre<<"\n"; cout<<"Rating : "<<disc[i].rating<<"\n"; cout<<"Cost CD : "<<disc[i].cost_CD<<"\n"; cout<<"\n"; } break; case 6: { char x; do { gets(disc[col].film); cout<<"The name of film : "; gets(disc[col].film); cout<<"Director of film : "; gets(disc[col].director); cout<<"Genre of film : "; gets(disc[col].genre); cout<<"Rating : "; cin>>disc[col].rating; cout<<"Cost CD : "; cin>>disc[col].cost_CD; col++; cout<<"To continue filling ?\n"; cout<<"y - yes\t n - no\n"; cin>>x; }while(x!=‘n‘); } break; } cout<<"Want to continue\n";//Проверяем хочет ли пользователь продолжить cout<<"y -yes\t n -no\n"; cin>>contin; while((contin!=‘y‘)&&(contin!=‘n‘))//проверяем правильность сделанного выбора { cout<<"Repeat a choice\n"; cin>>contin; } }while(contin!=‘n‘); getch();}
Форма ответа