Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
1

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

01.05.2014, 10:49. Показов 3464. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать программу формирования и распечатки прайс-листов. Прайс-лист компьютерной фирмы представляет собой список моделей продаваемых компьютеров. Один элемент списка (Model) содержит
информацию о марке компьютера, типе процессора, частоте работы процессора, объеме памяти, объеме жесткого диска, объеме памяти видеокарты, цене компьютера в условных единицах и количестве
экземпляров, имеющихся в наличии. Реализовать класс PriceList, полями которого являются дата его создания, номинал условной единицы в гривнях и список продаваемых моделей компьютеров. В списке не должно быть двух моделей одинаковой марки. В классе PriceList реализовать методы добавления, изменения и удаления записи о модели, метод поиска информации о модели по марке компьютера, по объему памяти, диска и видеокарты (равно или не меньше заданного), а также метод подсчета общей суммы. Реализовать методы объединения и пересечения прайс-листов . Метод поиска возвращает объект класса Model в качестве результата. Реализовать операцию генерации конкретного объекта Group (группа), содержащего список моделей, из объекта типа Model. Должна быть обеспечена возможность выбирать группу по любому из полей класса Model. Для представления дат использовать упрощенный вариант класса Date.

Дайте подсказку о реализации, что можно посмотреть - аналогичный код или что-то наподобии. Не могу представить как объединить классы model и Pricelist
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2014, 10:49
Ответы с готовыми решениями:

Программа распечатки прайс-листа на компьютеры в файл
Задание 6 Напишите программу распечатки прайс-листа на компьютеры в файл. Запрашиваются данные:...

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

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

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

11
29 / 29 / 13
Регистрация: 15.11.2012
Сообщений: 93
01.05.2014, 13:52 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);
        }
    }
Для объединения классов сравнить каждую модель одного прайс листа на наличие в другом прайс листе, и скопировать, если повтора не обнаружено.
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
02.05.2014, 14:45  [ТС] 3
Что подразумевается под "список продаваемых моделей компьютеров". Как я его должен включить в класс для реализации?
Он должен считываться из файла?

Добавлено через 1 минуту
Цитата Сообщение от Rifle Посмотреть сообщение
Например, пусть класс Pricelist содержит в себе переменную типа vector<Model> list.
Получается я добавляю модельки через вектор?
0
29 / 29 / 13
Регистрация: 15.11.2012
Сообщений: 93
02.05.2014, 15:05 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 Посмотреть сообщение
Получается я добавляю модельки через вектор?
Да.
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
03.05.2014, 19:53  [ТС] 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 с методами добавления,изменения и удаления записи о модели методом поиска информации по МАРКЕ ОБЪЕМУ ПАМЯТИ диска и видеокарты, методом подсчета общей суммы?
0
29 / 29 / 13
Регистрация: 15.11.2012
Сообщений: 93
04.05.2014, 02:47 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);
    }
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
07.05.2014, 20:32  [ТС] 7
И как соберутся два этих клас в один, чтобы использовать функцией main
0
29 / 29 / 13
Регистрация: 15.11.2012
Сообщений: 93
08.05.2014, 02:22 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;
            }
        }
    }
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
09.05.2014, 10:23 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
0
29 / 29 / 13
Регистрация: 15.11.2012
Сообщений: 93
09.05.2014, 16:14 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;
    }

Писал на коленке, так что за точность не ручаюсь. Но в любом случае нужное направление этот код уж точно должен подсказать. Здесь почти все сделано, вам только остается все переделать под свой пример и кое-где может чего подправить. Будут вопросы, пишите в личку.
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 11
11.05.2014, 16:26  [ТС] 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]<<" ";
или он уже по отдельности должен вывести из класса прайслист Дату создания и номинал, а отдельно этот лист?
0
29 / 29 / 13
Регистрация: 15.11.2012
Сообщений: 93
11.05.2014, 16:43 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
Вот примерный код проекта. Все компилируется, но если где-то есть недочеты, смотрите сами уже - это лишь примерный образец.
1
11.05.2014, 16:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2014, 16:43
Помогаю со студенческими работами здесь

Разработать программу формирования ведомости об успеваемости студентов
разработать программу формирования ведомости об успеваемости студентов. Каждая запись этой...

Разработать программу формирования ведомости об успеваемости студентов
Нужна помощь в разработке программы: Разработать программу формирования ведомости об успеваемости...

Интеграция прайс-листов в ocstore
Подскажите пожалуйста модуль(проверенный, хороший, на русском), с помощью которого можно...

Программа обновления прайс-листов
Добрый день. Может кто-нибудь помочь дописать немного программу для обновления прайс-листа. Есть...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru