Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка конструктора 
:(
    Опции темы
Christoph
Дата 11.3.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



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

#include <conio.h>
#include<stdio.h>
#include<string.h>
class bibl
{
private:
    char kniga[50][5];
    char avtar[50][5];
    int izdanie[5];
    int  cena[5];
int obcena;
int kolknig;
public:
    void PutInfo();
    bibl (char* Pisatel);
    bibl(int izd);
    void OutInfo();
    ~bibl();


};

bibl::bibl(char* Pisatel)
            {
                for(int i=0;i<5;i++)
                strcpy(avtar[i],Pisatel);
            }

bibl::bibl(int izd)
{
for(int i=0;i<5;i++)
izdanie[i]=izd;
}
bibl::~bibl()
{
for (int i=0;i<5;i++)
{
    strcpy(avtar[i],NULL);
izdanie[i]=NULL;
}

}


void bibl::PutInfo()
    {
    for (int i=0;i<5;i++)
    {
printf("Vvedite nazvanie, avatara god izdanie, cena");
scanf("%s %s %d %d",&kniga[i],&avtar[i],&izdanie[i],&cena[i]);
        }
        }
void bibl::OutInfo()
    {
    kolknig=0;
    for ( int i=0;i<5;i++)
{
if (cena[i]>60) printf("Kniga %s dorowe 60 $ Avtar %s",kniga[i],avtar[i]);

obcena+=cena[i];
kolknig=i;
printf("Nazvanie %s avtar %s,god izdaniya %d, cena %d",kniga[i],avtar[i],izdanie[i],cena[i]);
}
        printf("\n Obwya cena %d, Kolichestvo knig %d",obcena,kolknig);

     }

main()
{
bibl x1("perepelka");
x1.PutInfo();
x1.OutInfo();
bibl x2(1987);
x2.PutInfo();
x2.OutInfo();

}



Вот вопрос...если я задал в конструкторе, фамилию Перепёлка, почему запрашивает это значение? При выводе это фамилия не выводится. А до второго объекта не доходит дело...не запрашивает ничего...Подскажите что можно тут сделать?



Это сообщение отредактировал(а) Christoph - 11.3.2008, 21:55


--------------------
user posted image
PM MAIL ICQ   Вверх
korian
Дата 11.3.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



для начала отформатируйте текст кода. читать такое нереально.
PM   Вверх
Christoph
Дата 11.3.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



А вроде понятно, за что отвечает каждая переменная  smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
korian
Дата 11.3.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



Цитата(Christoph @  11.3.2008,  20:58 Найти цитируемый пост)
А вроде понятно, за что отвечает каждая переменная  

форматирование и написание комментариев, разные операции.
ладно, делать серавно нефиг...
вот то, что я от вас просил:
Код

#include <conio.h>
#include<stdio.h>
#include<string.h>

class bibl
{
private:
    char kniga[50][5];
    char avtar[50][5];
    int izdanie[5];
    int  cena[5];
    int obcena;
    int kolknig;
public:
    void PutInfo();
    bibl (char* Pisatel);
    bibl(int izd);
    void OutInfo();
    ~bibl();
};

bibl::bibl(char* Pisatel)
{
    for(int i=0;i<5;i++)
        strcpy(avtar[i],Pisatel);
}

bibl::bibl(int izd)
{
    for(int i=0;i<5;i++)
        izdanie[i]=izd;
}

bibl::~bibl()
{
    for (int i=0;i<5;i++)
    {
        strcpy(avtar[i],NULL);
        izdanie[i]=NULL;
    }
}

void bibl::PutInfo()
{
    for (int i=0;i<5;i++)
    {
        printf("Vvedite nazvanie, avatara god izdanie, cena");
        scanf("%s %s %d %d",&kniga[i],&avtar[i],&izdanie[i],&cena[i]);
    }
}

void bibl::OutInfo()
{
    kolknig=0;
    for ( int i=0;i<5;i++)
    {
        if (cena[i]>60)
            printf("Kniga %s dorowe 60 $ Avtar %s",kniga[i],avtar[i]);

        obcena+=cena[i];
        kolknig=i;
        printf("Nazvanie %s avtar %s,god izdaniya %d, cena %d",kniga[i],avtar[i],izdanie[i],cena[i]);
    }
    printf("\n Obwya cena %d, Kolichestvo knig %d",obcena,kolknig);

}

main()
{
    bibl x1("perepelka");
    x1.PutInfo();
    x1.OutInfo();
    bibl x2(1987);
    x2.PutInfo();
    x2.OutInfo();
}

щас поизучаю, мож че подскажу.
PM   Вверх
Christoph
Дата 11.3.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



можно на ты smile от какие люди пошли капризные  smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
bsa
Дата 11.3.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Christoph, это не люди капризные. Просто разобрать неформатированный код (особенно чужой) очень непростая задача. А правильно форматировать его в школах/колледжах/ВУЗах почему-то не учат.

Код
printf("Vvedite nazvanie, avatara god izdanie, cena");
scanf("%s %s %d %d",&kniga[i],&avtar[i],&izdanie[i],&cena[i]);

замени на:
Код
printf("Vvedite nazvanie, avatara god izdanie, cena: ");
fflush(NULL);
scanf("%50s %50s %d %d", kniga[i], avtar[i], &izdanie[i], &cena[i]);

PM   Вверх
Christoph
Дата 11.3.2008, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



Результат тот же....Не выводит мне вконце фамилию Перепёлка...и не доходит до объекта x2. И почему в  scanf, kniga[i] и avatar[i]. без &
А зачем писать fflush(NULL), если мы значения вводим через пробел?

Это сообщение отредактировал(а) Christoph - 11.3.2008, 23:30


--------------------
user posted image
PM MAIL ICQ   Вверх
korian
Дата 11.3.2008, 23:38 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



Цитата(Christoph @  11.3.2008,  21:25 Найти цитируемый пост)
от какие люди пошли капризные 

проблема в том, что я тебе ничего не должен smile
поэтому... для того, чтобы получить ответ, надо представить данные так, чтобы они были удобно читаемые и всем понятны.
из всех людей, разбирать то, что ты написал будет всего 1% начавших читать данный топик.
т.к. у людей, обычно, лишнего времени нету. а если и есть, то им меньше всего хочеться тратить его на форматирование чужого текста.
http://forum.vingrad.ru/forum/topic-48015.html - тут вообщем-то все по этому поводу написано.

по поводу проблемы...
в шутку, можна сказать, что проблема в ДНК smile
1) не понимание языка, особенно того, что касается указателей / массивов / конструкторов.
2) не понимание проблемы/задачи. задача не была формализована до того, как начать что либо писать.

для начала:
мы пишем на объектно-ориентированном языке C++, поэтому желательно отказаться от использования конструкций, которые остались для совместимости с языком C. Это правда сделать достаточно трудно, особенно если учесть, что преподают обычно C и C++ в виде одного курса и преподаватель зачастую сам не понимает различия между языками.
В данном примере отказаться от printf/scanf в пользу cout/cin. (еще раз скажу, что это желательно, а не обязательно).

далее:
bibl::bibl(char* Pisatel)
{
    for(int i=0;i<5;i++)
        strcpy(avtar[i],Pisatel);
}

не знаю что ты этим хотел добиться, но врядли оно делает, то что ты хотел.
функция strcpy копирует символы из одного массива символов в другой.
начнем с того, что
    char avtar[50][5];
надо заменить на
    char avtar[5][50];
чтобы приблизить хоть чучуть к тому что будет работать.

char avtar[5][50] - с одной стороны это двумерный массив символов, с другой - 5 строк, в каждой не больше 49 символов (один символ уходит для обозначения конца строки)
в конструкторе bibl::bibl(char* Pisatel), ты забиешь все 5 строк значением из Pisatel. смысла я в этом не вижу.
то же самое относиться и к bibl::bibl(int izd).

bibl::~bibl()
{
    for (int i=0;i<5;i++)
    {
        strcpy(avtar[i],NULL);
        izdanie[i]=NULL;
    }
}
вызов strcpy(avtar[i],NULL); будет давать 100% ошибку о запрещенном доступе к памяти.
делаеться попытка скопировать массив символов в avtar[i] с адреса NULL.
izdanie[i]=NULL - в данном случае смысла не имеет.
и вообще весь деструктор смысла не имеет.

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

PM   Вверх
bsa
Дата 11.3.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



документацию на fflush почитай, тогда поймешь, зачем он нужен. Хотя, и без него работает smile
Насчет параметров scanf, похоже, я погорячился. & там нужен.

Деструктор у тебя вызывает access violation (segmentation fault). Нельзя strcpy в качестве параметра передавать NULL. И вообще, лучше убрать этот деструктор - он не нужен, так как динамическая память не используется.
Я его убрал и у меня дошло до второго этапа (дальше не пробовал).

твоя перепелка затирается операцией scanf. Смысл ее передавать конструктору вообще непонятен.

#include<conio.h> - лишняя строка.
В конце строк отчета ставь \n, потому что весь вывод идет в одну строку - нечитабельно
PM   Вверх
Christoph
Дата 12.3.2008, 00:41 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



Код

bibl::~bibl()
{
    for (int i=0;i<5;i++)
    {
        strcpy(avtar[i],NULL);
        izdanie[i]=NULL;
    }
}

Я думал что этот код, обнуляет массив...
Убрал деструктор....всёравно не хочет....как вроде бы не видит конструктора


--------------------
user posted image
PM MAIL ICQ   Вверх
bsa
Дата 12.3.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Christoph, ты вообще прочитал, что тебе написали? Или только про деструктор?
Не видит конструктора? Пройдись отладчиков, увидишь, где затык.
PM   Вверх
Christoph
Дата 12.3.2008, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



korian, такое задание перегрузить конструкторы....
прочитал исправил...всёравно не работает

Это сообщение отредактировал(а) Christoph - 12.3.2008, 01:05


--------------------
user posted image
PM MAIL ICQ   Вверх
bsa
Дата 12.3.2008, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Тебе на этой конкретной задаче надо перегрузить или вообще - написать программ с классом и перегруженными конструкторами? Если так, то лучше это делать на примере класса а-ля string. Один конструктор дефолтный, второй создает строку из си-строки (параметр const char*), третий - конструктор копирования (параметр const string &). Вот хороший и простой в реализации пример.
PM   Вверх
Christoph
Дата 12.3.2008, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



На конкретной задаче....внимательно читаем условие smile


--------------------
user posted image
PM MAIL ICQ   Вверх
korian
Дата 12.3.2008, 02:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



объектно-ориентированные языки были придуманы для того, чтобы можно было мыслить обычными человеческими понятиями/конструкциями, и этим необходимо пользоваться.
для начала задачу надо проанализировать. процесс это творческий и каждый может придумать свой вариант решения.
то что я тут пишу - это то как вижу проблему я, и далеко не факт, что это лучший вариант формализации/решения задачи.
что мы имеем:
Цитата(Christoph @  11.3.2008,  20:33 Найти цитируемый пост)
Вот задание...Написать программу, которая реализовывала библиотечный каталог. Программа должна запрашивать название книги, автора,год издания,цену и выдавать общее количество книг,общую стоимость,названия книг,которые дороже определнной суммы. В этой программе должен быть создан класс, в котором используется перегружаемые конструкторы.

во первых у нас есть "библиотечный каталог".
если я еще не все забыл, то в реальной жизни он из себя представляет что-то типа большой тумбы с кучей ящичков.
в которых содержаться куча листочков, упорядоченных по алфавиту.
каталоги бывают двух видов: алфавитный и тематический.
т.к. задача является учебной/тестовой (короче я не хочу слишком много писать  smile ) упростим задачу до следующего:
реализуем только алфавитный каталог, причем кучи ящичков у нас нету, есть один большой ящик, в котором собраны все листочки.
умеем добавлять листочки в ящик и просматривать ящик, не умеем удалять листочки или изменять их содержание.
листочки у нас расположены в неизвостном порядке и количество листочков в этом ящике не больше N.
название книги, фамилия автора могут состоять не больше чем из M символов.
цена книги является целым числом.

получаем классы:
CBiblBox - класс, представляющий ящик в котором лежат листочки.
CBiblForm - класс, представляющий листочки.

описываем класс CBiblBox.
листочки содержаться в ящике, причем не больше N штук. получаем вот что:
class CBiblBox
{
public:
   static const int m_maxForm = 10;

private:
   CBiblForm m_biblForms[maxForm];
}

т.к. строкой
CBiblForm m_biblForms[maxForm];
я сразу выделил память под m_maxForm листочков, нам надо знать сколько из них реально используеться.
добавляем int m_curFormCount и стандартный конструктор, т.к. нам надо будет задать начальное значение m_curFormCount равным нулю.
еще добавляем метод GetFormsCount - чтобы можно было получить кол-во листочков.

class CBiblBox
{
public:
   CBiblBox();
   static const int m_maxForm = 10;
   int GetFormsCount() const {return m_curFormCount}

private:
   CBiblForm m_biblForms[maxForm];
   int m_curFormCount;
}

Надо уметь добавлять листочки, и получать информацию о них.
Надо знать общую стоимось книг.

class CBiblBox
{
public:
   CBiblBox();
   int AddForm(const CBiblForm& form); //будем возвращать индекс добавленного Form или -1, если листков уже максимально количество.
   const CBiblForm& GetForm(int index) const {return m_biblForms[index];}
   int GetFormsCount() const {return m_curFormCount} //получение кол-ва листочков
   int GetObCena() const {return m_obcena} //получение общей стоимости
   static const int m_maxForm = 10; //максимальное количество листочков

private:
   CBiblForm m_biblForms[maxForm];
   int m_curFormCount; //текущее количество листочков в ящике
   int m_obcena; //общая стоимость книг.
}

теперь по поводу листочка и класса CBiblForm.
там у нас содержиться название книги, фамилия автора, год издания, цена.
название книги и фамилия автора не больше M символов.
class CBiblForm
{
public:
   static const int m_maxChars = 50; //максимум символов в название книги и фамилии автора
   char nazvanieKnigi[m_maxChars];
   char avtor[m_maxChars];
   int godIzdaniya;
   int cenaKnigi;
}

теперь реализуем остальную функциональность в main

void main
{
    int kolvoKnig;
    do
    {
        cout<<"сколько книг вы хотите добавить в каталог?"<<endl;
        cin>>kolvoKnig;
        if (kolvoKnig > CBiblBox::m_maxForm)
            cout<<"В нашем каталоге может храниться максимум "<<CBiblBox::m_maxForm<<" записей"<<endl;

    } while(kolvoKnig > CBiblBox::m_maxForm);

    CBiblBox bilbBox;
    for (int i = 0; i < kolvoKnig; i++)
    {
         CBiblForm tempForm;
         cout<<"Введите назание книги"<<endl;
         cin.getline(tempForm.nazvanieKnigi, tempForm.m_maxChars);
         cout<<"Введите фамилию автора"<<endl;
         cin.getline(tempForm.avtor, tempForm.m_maxChars);
         cout<<"Введите год издания"<<endl;
         cin>>tempForm.godIzdaniya;
         cout<<"Введите цену книги"<<endl;
         cin>>tempForm.cenaKnigi;
         bilbBox.Add(tempForm);
    }

//выводим книги дороже определенной суммы
    int cena;
    cout<<"Введите цену. Книги с ценой выше введенной будут выведены."<<endl;
    cin>>cena;
    for (int i = 0; i < bilbBox.GetFormsCount(); i++)
    {
         if (bilbBox.GetForm(i).cenaKnigi > cena)
         {
              const CBiblForm& tempForm = bilbBox.GetForm(i);
              cout<<tempForm.nazvanieKnigi<<", "<<tempForm.avtor<<", "<<tempForm.godIzdaniya<<", "<<tempForm.cenaKnigi<<endl;
         }
    }
}

читаем заново условие и смотрим все ли реализовано.
во-первых не выводили общую цену и
там сказано, что нам полюбому нужен класс с перегруженными конструкторами...
что тут можна сделать
1) можна в CBiblBox добавить копирующий конструктор, но смысла в этом нету, стандартный вполне справляеться
2) надо что-нить придумать дополнительное...
нам надо делать поиск книг относительно цены, поэтому первое что мне пришло в голову,
сделать класс, который будет находить и выводить книги по заданным параметрам.
и вот получилась такая реализация:
class CShowForms
{
public:
     CShowForms(char* avtor); //вывод всех книг, с данным автором
     CShowForms(int cena); //вывод книг, с ценой больше указанной
     CShowForms(int cena1, int cena2); // вывод книг, с ценой в диапазоне [cena1..cena2]
     void Show(const CBiblBox& biblBox);
private:
     char m_avtor[CBiblForm::m_maxChars];
     int m_cena1;
     int m_cena2;
};

это был пункт 2, я хотел показать как надо думать, так сказать.
надо уметь анализировать и проектировать на бумаге.

реализуем все необходимые функции, исправляем некоторые ошибки и вот что получаем в итоге:
Код

#include <iostream>

using std::cout;
using std::cin;
using std::endl;
using std::ios_base;

class CBiblForm
{
public:
   static const int m_maxChars = 50; //максимум символов в название книги и фамилии автора
   char nazvanieKnigi[m_maxChars];
   char avtor[m_maxChars];
   int godIzdaniya;
   int cenaKnigi;
};

class CBiblBox
{
public:
   CBiblBox();
   int AddForm(const CBiblForm& form); //будем возвращать индекс добавленного Form или -1, если листков уже максимально количество.
   const CBiblForm& GetForm(int index) const {return m_biblForms[index];}
   int GetFormsCount() const {return m_curFormCount;} //получение кол-ва листочков
   int GetObCena() const {return m_obcena;} //получение общей стоимости
   static const int m_maxForm = 10; //максимальное количество листочков
private:
   int m_curFormCount; //текущее количество листочков в ящике
   CBiblForm m_biblForms[m_maxForm];
   int m_obcena; //общая стоимость книг.
};

CBiblBox::CBiblBox()
: m_curFormCount(0), m_obcena(0)
{
}

int CBiblBox::AddForm(const CBiblForm& form)
{
   if (m_curFormCount == m_maxForm)
      return -1;
   m_biblForms[m_curFormCount] = form;
   m_curFormCount++;
   m_obcena += form.cenaKnigi;
   return m_curFormCount;
}

class CShowForms
{
public:
     CShowForms(char* avtor); //вывод всех книг, с данным автором
     CShowForms(int cena); //вывод книг, с ценой больше указанной
     CShowForms(int cena1, int cena2); // вывод книг, с ценой в диапазоне [cena1..cena2]
     void Show(const CBiblBox& biblBox);
private:
     char m_avtor[CBiblForm::m_maxChars];
     int m_cena1;
     int m_cena2;
};

CShowForms::CShowForms(char* avtor)
{
   strncpy(m_avtor, avtor, CBiblForm::m_maxChars);
   m_cena1 = -1;
   m_cena2 = -1;
}

CShowForms::CShowForms(int cena)
{
   m_avtor[0] = 0;
   m_cena1 = cena;
   m_cena2 = -1;
}

CShowForms::CShowForms(int cena1, int cena2)
{
   m_avtor[0] = 0;
   m_cena1 = cena1;
   m_cena2 = cena2;
}

void CShowForms::Show(const CBiblBox& biblBox)
{
    if (m_cena1 == -1)
    {
       for (int i = 0; i < biblBox.GetFormsCount(); i++)
       {
           if (!strcmp(biblBox.GetForm(i).avtor, m_avtor))
           {
              const CBiblForm& tempForm = biblBox.GetForm(i);
              cout<<tempForm.nazvanieKnigi<<", "<<tempForm.avtor<<", "<<tempForm.godIzdaniya<<", "<<tempForm.cenaKnigi<<endl;
           }
       }
    }
    else if (m_cena2 == -1)
    {
       for (int i = 0; i < biblBox.GetFormsCount(); i++)
       {
           if (biblBox.GetForm(i).cenaKnigi > m_cena1)
           {
              const CBiblForm& tempForm = biblBox.GetForm(i);
              cout<<tempForm.nazvanieKnigi<<", "<<tempForm.avtor<<", "<<tempForm.godIzdaniya<<", "<<tempForm.cenaKnigi<<endl;
           }
       }
    }
    else
    {
       for (int i = 0; i < biblBox.GetFormsCount(); i++)
       {
           if (biblBox.GetForm(i).cenaKnigi >= m_cena1 && biblBox.GetForm(i).cenaKnigi <= m_cena2)
           {
              const CBiblForm& tempForm = biblBox.GetForm(i);
              cout<<tempForm.nazvanieKnigi<<", "<<tempForm.avtor<<", "<<tempForm.godIzdaniya<<", "<<tempForm.cenaKnigi<<endl;
           }
       }
    }
}

void main()
{
    int kolvoKnig;
    do
    {
        cout<<"сколько книг вы хотите добавить в каталог?"<<endl;
        cin>>kolvoKnig;
        if (kolvoKnig > CBiblBox::m_maxForm)
            cout<<"В нашем каталоге может храниться максимум "<<CBiblBox::m_maxForm<<" записей"<<endl;

    } while(kolvoKnig > CBiblBox::m_maxForm);

    CBiblBox bilbBox;
    for (int i = 0; i < kolvoKnig; i++)
    {
         CBiblForm tempForm;
         cin.seekg( -1, ios_base::end ); //пропуск всего что было введено до того, как дошли сюда (а вообще проблема видимо из-за того, что под Windows перевод строки осуществляеться 2-я символами)
         cout<<"Введите назание книги"<<endl;
         cin.getline(tempForm.nazvanieKnigi, tempForm.m_maxChars);
         cout<<"Введите фамилию автора"<<endl;
         cin.getline(tempForm.avtor, tempForm.m_maxChars);
         cout<<"Введите год издания"<<endl;
         cin>>tempForm.godIzdaniya;
         cout<<"Введите цену книги"<<endl;
         cin>>tempForm.cenaKnigi;
         bilbBox.AddForm(tempForm);
    }

//выводим книги дороже определенной суммы
    int cena;
    cout<<"Введите цену. Книги с ценой выше введенной будут выведены."<<endl;
    cin>>cena;
    CShowForms poiskPoCene(cena);
    poiskPoCene.Show(bilbBox);

//выводим книги с определенным автором
    char avtor[CBiblForm::m_maxChars];
    cout<<"Введите имя автора. Книги этого автора будут выведены."<<endl;
    cin.seekg( -1, ios_base::end );
    cin.getline(avtor, CBiblForm::m_maxChars);
    CShowForms poiskPoAvtoru(avtor);
    poiskPoAvtoru.Show(bilbBox);

//выводим общую цену
    cout<<"Общая цена книг равна "<<bilbBox.GetObCena();
}
//---------------------------------------------------------------------------


Добавлено @ 02:43
вопросы?  smile 

Это сообщение отредактировал(а) korian - 12.3.2008, 02:50
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.