Форум программистов, компьютерный форум CyberForum.ru

Класс PriceList. Разработать программу формирования и распечатки прайс-листов - C++

Восстановить пароль Регистрация
 
Statr
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
01.05.2014, 10:49     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #1
Разработать программу формирования и распечатки прайс-листов. Прайс-лист компьютерной фирмы представляет собой список моделей продаваемых компьютеров. Один элемент списка (Model) содержит
информацию о марке компьютера, типе процессора, частоте работы процессора, объеме памяти, объеме жесткого диска, объеме памяти видеокарты, цене компьютера в условных единицах и количестве
экземпляров, имеющихся в наличии. Реализовать класс PriceList, полями которого являются дата его создания, номинал условной единицы в гривнях и список продаваемых моделей компьютеров. В списке не должно быть двух моделей одинаковой марки. В классе PriceList реализовать методы добавления, изменения и удаления записи о модели, метод поиска информации о модели по марке компьютера, по объему памяти, диска и видеокарты (равно или не меньше заданного), а также метод подсчета общей суммы. Реализовать методы объединения и пересечения прайс-листов . Метод поиска возвращает объект класса Model в качестве результата. Реализовать операцию генерации конкретного объекта Group (группа), содержащего список моделей, из объекта типа Model. Должна быть обеспечена возможность выбирать группу по любому из полей класса Model. Для представления дат использовать упрощенный вариант класса Date.

Дайте подсказку о реализации, что можно посмотреть - аналогичный код или что-то наподобии. Не могу представить как объединить классы model и Pricelist
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 10:49     Класс PriceList. Разработать программу формирования и распечатки прайс-листов
Посмотрите здесь:

C++ Написать программу формирования очереди
C++ Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по возрастанию элементов в этой очереди.
Определите класс формирования,кодирования и вывода на дисплей случайного двоичного вектора заданной длины C++
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. C++
Разработать класс и производный класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rifle
 Аватар для Rifle
25 / 25 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
01.05.2014, 13:52     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #2
В класс Pricelist включить массив элементов типа Model.
Например, пусть класс Pricelist содержит в себе переменную типа vector<Model> list.
Тогда все необходимые функции можно реализовать с помощью операций вектора.
Например, поиск и изменение нужной модели:
C++
1
2
3
4
5
6
7
8
for (int i = 0; i<list.size(); i++)
    {
    if (list[i].name == "Athlon")
        {
        cout << "Enter new name: ";
        cin.getline(list[i].name);
        }
    }
Для объединения классов сравнить каждую модель одного прайс листа на наличие в другом прайс листе, и скопировать, если повтора не обнаружено.
Statr
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
02.05.2014, 14:45  [ТС]     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #3
Что подразумевается под "список продаваемых моделей компьютеров". Как я его должен включить в класс для реализации?
Он должен считываться из файла?

Добавлено через 1 минуту
Цитата Сообщение от Rifle Посмотреть сообщение
Например, пусть класс Pricelist содержит в себе переменную типа vector<Model> list.
Получается я добавляю модельки через вектор?
Rifle
 Аватар для Rifle
25 / 25 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
02.05.2014, 15:05     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #4
Цитата Сообщение от Statr Посмотреть сообщение
Что подразумевается под "список продаваемых моделей компьютеров". Как я его должен включить в класс для реализации?
Он должен считываться из файла?
Список продаваемых моделей компьютеров - массив элементов типа Model. Вот так и включайте в класс реализации:
C++
1
2
3
4
5
6
7
8
class Pricelist
    {
    private:
        vector<Model> list;
    public:
        add_model(Model n)
            { list.push_back(n); }
    };
Откуда брать новую модель, я не знаю (это вам должно быть лучше видней), но могу предположить, что ее так же нужно создать в методе add_model(); т.е. создать объект класса Model, потом запросить у пользователя ввести все поля в классе (cin >> model_name) и т.д.; после чего запихнуть новую получившуюся модель в вектор: list.push_back(new_model).
Цитата Сообщение от Statr Посмотреть сообщение
Получается я добавляю модельки через вектор?
Да.
Statr
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
03.05.2014, 19:53  [ТС]     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #5
Помогите с написанием, хотя бы начало

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Model {
 public:
Model(std::string &CPU_type, size_t CPU_frequency,size_t memory_size,
      size_t harddisk_memory, size_t graphics_memory, size_t price, size_t number)
    : CPU_type_(CPU_type), CPU_frequency_(CPU_frequency),
     memory_size(memory_size), harddisk_memory_(harddisk_memory),
     graphics_memory_(graphics_memory), price_(price), number_(number)  {}
 
 
  const std::string &getCPU_type() const { return CPU_type_; }
  const size_t &getCPU_frequency() const { return CPU_frequency_; }
  const size_t &getmemory_size() const { return memory_size_; }
  const size_t &getharddisk_memory() const { return harddisk_memory_; }
  const size_t &getgraphics_memory() const { return graphics_memory_; }
  const size_t &getprice() const { return price_; }
  const size_t &getnumber() const { return number_; }
 private:
  
};
Вот допустим так я начинаю писать класс model
Потом перегружаю оператор ввода
C++
1
2
3
4
5
6
std::ostream &operator<<(std::ostream &stream, const Model &Model) {
  return stream <<"CPU:"<< Model.getCPU_type() << ", frequency: " << Model.getCPU_frequency() <<
    "MHz, size memory: " << Model.getmemory_size() << ", Hard Disk memory:"<< Model.getharddisk_memory()
    << ", Graphics memory:" << Model.getgraphics_memory()<< ", Price:"<< Model.getprice()<< " rub, Number:"
    << Model.getnumber();
}
Как дулать класс Pricelist с методами добавления,изменения и удаления записи о модели методом поиска информации по МАРКЕ ОБЪЕМУ ПАМЯТИ диска и видеокарты, методом подсчета общей суммы?
Rifle
 Аватар для Rifle
25 / 25 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
04.05.2014, 02:47     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #6
Класс Pricelist примерно вот так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <vector>
#include <string>
#include <iostream>
using namespace std;    
 
class Pricelist
    {
    private:
        vector<Model> list;
    public:
        void add_model();
        int find_model(string type);
        int find_model(int memory_size);
        void change_model(string type);
        void change_model(int memory_size);
        void delete_model(stirng type);
        void delete_model(int memory_size);
    };
    
void Pricelist::add_model()
    {
    cout << "Enter all parameters: " << endl;
    cout << "CPU Type: ";
    string type;
    cin >> type;
    int CPU_frequency, int memory_size; //и т.д.
    cout << "CPU Frequency: ";
    cin >> CPU_frequency;
    cout << "Memory size: ";
    cin >> memory_size;
    
    Model * add = new Model(type, CPU_frequency, memory_size /* и т.д. */);
    list.push_back(add);
    }
    
int Pricelist::find_model(string type)
    {
    bool find = false;
    for (int i = 0; i<list.size(); i++)
        {
        if (list[i]->CPU_type == type)
            {
            cout << *list[i] << endl;
            find = true;
            break;
            }
        }
    if (!find)
        {
        cout << "Error. There's no model with this CPU_type" << endl;
        return -1;
        }
    return i;
    }
    
void Pricelist::change_model(string type)
    {
    int index = find_model(type);
    string new_type;
    cout "Enter new type: ";
    cin >> new_type;
    list[index]->CPU_type = new_type;
    }
    
void Pricelist::delete_model(string type)
    {
    int index = find_model(type);
    list.erase(index);
    }
Statr
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
07.05.2014, 20:32  [ТС]     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #7
И как соберутся два этих клас в один, чтобы использовать функцией main
Rifle
 Аватар для Rifle
25 / 25 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
08.05.2014, 02:22     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #8
Предположим, вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "Pricelist.h"
#include "Model.h"
 
int main(int argc, char * argv[])
    {
    Pricelist list;
    char ch;
    cout << "1 to add model, 2 to print list";
    while (cin >> ch)
        {
        if (ch == 'q')
            break;
        switch (ch)
            {
            case '1':
                list.add_model();
                break;
            case '2':
                cout << list;
                break;
            }
        }
    }
Slight
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
09.05.2014, 10:23     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #9
Так, немного изменилось условие задачи:
Прайс-лист компьютерной фирмы представляет собой список моделей продаваемых компьютеров. Один элемент списка (Model) содержит информацию о марке компьютера, типе процессора, частоте работы процессора, объеме памяти, объеме жесткого диска, объеме памяти видеокарты, цене компьютера в условных единицах и количестве экземпляров, имеющихся в наличии.
Реализовать класс PriceList, полями которого являются дата его создания, номинал условной единицы в рублях и список продаваемых моделей компьютеров. В списке не должно быть двух моделей одинаковой марки. В классе PriceList реализовать методы добавления, изменения и удаления записи о модели, метод поиска информации о модели по марке компьютера, по объему памяти, диска и видеокарты (равно или не меньше заданного), а также метод подсчета общей суммы. Реализовать методы объединения и пересечения прайс-листов . Метод добавления и изменения принимают в качестве входимого параметра объект класса Model . Метод поиска возвращает объект класса Model в качестве результата.

Вопросы на данный момент:
1.Я написал класс Model. Он является составной частью Pricelist, в который мы будем толкать модельки вектором.
Так вот,для добавления модели я должен использовать класс Model или все-таки реализовыват все это в классе Pricelist?
Могу ли я тогда просто перегрузить оператор ввода и добавлять все параметры одновременно?
2. Класс Pricelist должен еще и содержать дату создания - реализовывать дополнительный конструктор?
Как он будет смотреться, если учесть, что первое поле - дата создания, второе - номинал условной единицы в рублях(что и для чего это, кстати?) и третье поле - наша моделька
3. Метод объединения и пересечения прайс листов: это и есть наши методы Delete и Add? Чтобы удалял и добавлял?


Оставьте свой скайп. Будет поудобнее с вами общаться =)

Добавлено через 10 часов 3 минуты
Класс model
Соберите его с классом Pricelist, а то не компилится, как не пытаюсь
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
 
class Model{
 public:
     Model ();
    Model(std::string _CPU_type = "Cpu", size_t _CPU_frequency=0,size_t _memory_size=0,
        size_t _harddisk_memory=0, size_t _graphics_memory=0, size_t _price=0, size_t _number=0)
        : CPU_type(_CPU_type), CPU_frequency(_CPU_frequency),
        memory_size(_memory_size), harddisk_memory(_harddisk_memory),
        graphics_memory(_graphics_memory), price(_price), number(_number)  {};
        ~Model() {};
 public:
  std::string CPU_type;
  size_t CPU_frequency;
  size_t memory_size;
  size_t harddisk_memory;
  size_t graphics_memory;
  size_t price;
  size_t number;
 
};
 
    std::ostream &operator<<(std::ostream &out, const Model &Model) {
        out <<"CPU:"<< Model.CPU_type << ", frequency: " << Model.CPU_frequency<<
        ", size memory: " << Model.memory_size<<"," << std::endl<<"Hard Disk memory:"<< Model.harddisk_memory
        <<", Graphics memory:" << Model.graphics_memory<< ", Price:"<< Model.price<< " rub, Number:"
        << Model.number;
    return out;
}
 
int main(int argc, char *argv[]) {
 
    Model m1("Intel", 1000,164, 2000, 65, 68000,7);
    std::cout << "Model: "<<std::endl << m1 << std::endl;
  return 0;
};


Добавлено через 13 часов 9 минут
update
Rifle
 Аватар для Rifle
25 / 25 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
09.05.2014, 16:14     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #10
1. Реализуйте метод добавления модели в классе Pricelist. Для этого вполне можете перегрузить оператор ввода, а можете использовать в виде обычного метода. Кому как удобнее. Суть метода - создаете новую модель, заполняете все ее поля и получившуюся готовую модель запихиваете в вектор list в классе Pricelist.
2. Да, конечно. До этого я писал лишь примерный код, т.к. вы просили только подсказать вам нужное направление. Поэтому несущественные для дела моменты я опустил. Номинал - это стоимость условной единицы в рублях. Номинал нужен для того, чтобы при выводе перевести все цены компьютеров (которые предположим, в рублях) в доллары. Если модель вашего компьютера стоит 7000 р., а номинал (доллар) в классе Pricelist указан, как 35 р., то при выводе должно получиться 200 долларов (номиналов).
3. Объединение прайс листов: создаете новый прайс-лист, копируете в него все модели из первого листа и все модели из второго листа, которых нет в первом (чтобы не было повторов), вот и все. Пересечение прайс листов: создаете новый прайс лист, сравниваете каждую модель первого прайс листа с каждой моделью второго листа и все повторы копируете в созданный лист.

Примерно вот что должен представлять из себя класс Pricelist:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class Pricelist
    {
    private:
        vector<Model *> list;
        //Date date; (смотрите сами, как будете писать дату)
        int nominal;
    public:
        Model* add_model();
        Model* find_type(string type);
        Model* find_memory(int memory_size);
        Model* find_harddrive(int hard);
        Model* find_graphic(int graphic);
        void change_model(Model * m);
        void delete_model(Model * m);
        friend Pricelist* unite(Pricelist* first, Pricelist* second); //метод для пересечения листов
        friend Pricelist* operator+(Pricelist* first, Pricelist* second); //метод для объединения листов
    };
    
Model* Pricelist::add_model(Model * model)
    {
    //создавать модель будете в главной программе
    list.push_back(model);
    }
Model* Pricelist::find_type(string type)
    {
    for (int i=0; i<list.size(); i++)
        {
        if (list[i]->CPU_type == CPU_type)
            return list[i];
        }
    return 0;
    }
Model* Pricelist::find_memory(int memory_size)
    {
    for (int i=0; i<list.size(); i++)
        {
        if (list[i]->memory_size >= memory_size)
            return list[i];
        }
    return 0;
    }
Model* Pricelist::find_harddrive(int hard)
    {
    for (int i=0; i<list.size(); i++)
        {
        if (list[i]->harddisk_memory >= harddisk_memory)
            return list[i];
        }
    return 0;
    }
Model* Pricelist::find_graphic(int graphic)
    {
    for (int i=0; i<list.size(); i++)
        {
        if (list[i]->mgraphics_memory >= graphics)
            return list[i];
        }
    return 0;
    }
void Pricelist::change_model(Model * m)
    {
    Model * ptr = find_type(m->CPU_type);
    //меняете модель
    }
void Pricelist::delete_model(Model * m)
    {
    for (int i=0; i<list.size(); i++)
        if (list[i]->CPU_type = m->CPU_type)
            {
            delete list[i];
            list.erase(i); 
            return;
            }
    }
Pricelist* unite(Pricelist * first, Pricelist * second)
    {
    Pricelist * ptr = new Pricelist();
    for (int i=0; i<first->list.size(); i++)
        for (int j=0; j<second->list.size(); j++)
            if ((first->list[i])->CPU_type == (second->list[j])->CPU_type)
                {
                Model * n = new Model(*first->list[i]);
                ptr->add_model(n);
                }
    return ptr;
    }
Pricelist* operator+(Pricelist * first, Pricelist * second)
    {
    Pricelist * ptr = unite(first, second);
    for (int i=0; i<first->size(); i++)
        {
        bool good = true;
        for (int j=0; j<ptr->size(); j++)
            if ((first->list[i])->CPU_type == (ptr->list[j])->CPU_type)
                good = false;
        if (good)
            {
            Model * n = new Model(*first->list[i]);
            ptr->add_model(n);
            }
        }
    for (int i=0; i<second->size(); i++)
        {
        bool good = true;
        for (int j=0; j<ptr->size(); j++)
            if ((second->list[i])->CPU_type == (ptr->list[j])->CPU_type)
                good = false;
        if (good)
            {
            Model * n = new Model(*second->list[i]);
            ptr->add_model(n);
            }
        }       
    return ptr;
    }

Писал на коленке, так что за точность не ручаюсь. Но в любом случае нужное направление этот код уж точно должен подсказать. Здесь почти все сделано, вам только остается все переделать под свой пример и кое-где может чего подправить. Будут вопросы, пишите в личку.
Statr
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
11.05.2014, 16:26  [ТС]     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #11
О, у меня аналогичное задание. Пока есть знающий человек, подскажите, конструктор прайслиста тогда как будет
C++
1
2
3
4
Pricelist::Pricelist();
Pricelist::Pricelist(vector <Model *> list, std::string Date ="", number ) : 
    vector <Model *> list (vector <Model *> list),Date(_Date), nominal(_nominal) {};
Pricelist::~Pricelist();
И как вывести весь лист на экран?
Писать метод Show c каким-то таким?
C++
1
for (int i=0;i<10;i++) std::cout<<plist1[i]<<" ";
или он уже по отдельности должен вывести из класса прайслист Дату создания и номинал, а отдельно этот лист?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2014, 16:43     Класс PriceList. Разработать программу формирования и распечатки прайс-листов
Еще ссылки по теме:

C++ Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
C++ Как реализовать класс Pricelist, который будет содержать динамический массив объектов Model
C++ Помогите отладить программу: Разработать класс, содержащий вектор длинных целых чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Rifle
 Аватар для Rifle
25 / 25 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
11.05.2014, 16:43     Класс PriceList. Разработать программу формирования и распечатки прайс-листов #12
Можно оставить один по умолчанию.
Если нужен второй, то
C++
1
2
Pricelist::Pricelist(std::string date, size_t number) : 
   list(0), Date(date), nominal(number) {};
В деструкторе удалить всю выделенную память.
Для вывод можно написать метод show.
Пробежаться по вектору list с помощью for (почти как у вас) и вывести каждую модель.

http://codepad.org/YGdAFcWm
Вот примерный код проекта. Все компилируется, но если где-то есть недочеты, смотрите сами уже - это лишь примерный образец.
Yandex
Объявления
11.05.2014, 16:43     Класс PriceList. Разработать программу формирования и распечатки прайс-листов
Ответ Создать тему
Опции темы

Текущее время: 02:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru