Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2016, 11:24   #1
a_lexfox
Новичок
Джуниор
 
Регистрация: 09.05.2016
Сообщений: 2
По умолчанию Имитация контейнеров. Классы

Я создал через контейнеры, все работает замечательно. Но попросили сделать еще без использования контейнеров, можете помочь с кодом? Где и как его изменить? Вообще не могу сообразить.

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

Классы.
Код:
#include <string>
#include <iostream>
#include "conio.h"
#include <vector>
#include <list>
#include <windows.h>
#include <cstring>
#include <locale>
 
using namespace std;
 
class product  
{
protected:
    string name; // Наименование
    short int price; // цена
    string manufacturer; //производитель
 
public:
 
    product()
    {
        name = "";
        price = 0;
        manufacturer = "";
    }
    product(string N, short int xprice, string M) 
    {
 
        name = N;
        manufacturer = M;
        price = xprice;
 
    }
    virtual void Init(string N, short int xprice, string M)
    {
        name = N;
        manufacturer = M;
        price = xprice;
        
    }
    virtual void Init()
    {
        string n, m;
        char f;
        int i = 0;
        f = getchar();
        cout << "Введите название продукта -> ";
        cin >> n;
        name = n;
        cout << "Введите цену продукта -> ";
        cin >> i;
        price = i;
        cout << "Введите производителя -> ";
        cin >> m;
        manufacturer =  m;
        f = getchar();
    }
 
    virtual void Print() 
    {
        cout << "Наименование продукта: " << name << "\n";
        cout << "Цена продукта: " << price << "\n";
        cout << "Производитель: " << manufacturer << "\n" << endl;
    }
    
    virtual int ReturnPrice() 
    {
        return price;       
    }
 
    virtual int getCalories()
    {
        return 0;
    }
 
    ~product() { };
};
 
class food : public product
{
private:
    string M_date; // дата изготовления
    short int calories;
    short int shelf_life; // срок годности
public:
    // Конструктор по умолчанию
    food() 
    {
        M_date = "";
        calories = 0;
        shelf_life = 0;
 
        product::name = "";
        product::manufacturer = "";
        product::price = 0;
    }
    food(string N, short int xprice, string M, string xdate, short int xcal, short int xlife)
    {
        M_date = xdate;
        calories = xcal;
        shelf_life = xlife;
 
        product::name = N;
        product::manufacturer = M;
        product::price = xprice;
 
    }
 
    void Init(string N, short int xprice, string M, string xdate, short int xcal, short int xlife)
    {
        M_date = xdate;
        calories = xcal;
        shelf_life = xlife;
 
        product::name = N;
        product::manufacturer = M;
        product::price = xprice;
 
    }
 
    void Init() 
    {
        string t, m, d;
        char f;
        int i = 0;
        f = getchar();
        cout << "Введите название продукта -> ";
        cin >> t;
        name = t;
        cout << "Введите цену продукта -> ";
        cin >> i;
        price = i;
        cout << "Введите производителя -> ";
        cin >> m;
        manufacturer = m;
        cout << "Введите дату изготовления -> ";
        cin >> d;
        M_date = d;
        cout << "Введите срок годности продукта в днях-> ";
        cin >> i;
        shelf_life = i;
        cout << "Введите калорийность продукта-> ";
        cin >> i;
        calories = i;
        f = getchar();
 
    }
    void Print()
    {
        cout << "Наименование продукта: " << product::name << "\n";
        cout << "Цена продукта: " << product::price << "\n";
        cout << "Производитель: " << product::manufacturer << "\n";
        cout << "Дата изготовления: " << M_date << "\n";
        cout << "Калорийность: " << calories << "\n";
        cout << "Срок годности: " << shelf_life << "\n" << endl;
 
    }
 
 
    int ReturnPrice()
    {
        return price;
    }
 
    int getCalories()
    {
        return calories;
    }
 
 
    ~food() {}; // Деструктор
};
  
class purchase 
{
 
private:
    int size; // Размер контейнера - кол-во продуктов
    list <product *> products; // Список продуктов
    list <product *>::iterator iter; // Итератор списка 
 
public:
    purchase() 
    {
        size = 0;
    }
    purchase(int x)
    {
        size = x;
    }
 
    void Init()
    {   
        int y;
        cout << "Введите количество продуктов для покупки-> ";
        cin >> y;
        size = y;
    }
    void PrintInf()
    {
        cout << "Количество продуктов: " << size << "\n";
    }
 
    void add_product(string N, short int xprice, string M) 
    {
        products.push_back(new product(N, xprice, M));
 
    }
    void add_food(string N, short int xprice, string M, char *xdate, short int xcal, short int xlife)
    {
        products.push_back(new food(N, xprice, M, xdate, xcal, xlife));
    }
 
 
    void add_all_products() // Добавление всех продуктов, число добавляемых =  числу продуктов в покупке
    {
        int i = 0, s = 0;
        i = products.size();
        if (i >= size) { cout << "Добавление продуктов невозможно, т.к. в  покупке уже содержится " << size << " продуктов!\n"; return; }
        product *pr;
        for (int j = i; j<size; j++)
        {
            cout << "Введите 1, если хотите добавить товар.\n";
            cout << "Введите 2, если хотите добавить продовольственный товар.\n";
            cout << "->";
            scanf_s("%i", &s);
            if (s == 1)
            {
                pr = new product();
                pr->Init();
                products.push_back(pr);
            }
            else
            {
                pr = new food();
                pr->Init();
                products.push_back(pr);
            }
        }
    }
 
    void TotalPrice ()
    {
        product * pr = NULL;
        int i = 0, k = 0, j = products.size();
        iter = products.begin();
        for (int z = 0; z < j; z++)
        {
            pr = *iter;
            i += pr->ReturnPrice();
            iter++;
        }
        cout << "\n Конечная цена = " << i <<"\n";
    }
 
    void MaxCalories()
    {
        product * pr = NULL;
        int i = 0, k = 0, j = products.size();
        iter = products.begin();
        
        for (int z = 1; z < j; z++)
        {
            if (z == 1)
            {
                pr = *iter;
                i = pr->getCalories(); 
            }
 
            iter++;
            pr = *iter;
 
            if (i < pr->getCalories()) 
            {
                i = pr->getCalories(); 
            }           
        }
        cout << "\n Максимум калорий = " << i << "\n";
    }
    
 
    void PrintPr()
    {
        product * pr = NULL;
        int i = products.size();
        iter = products.begin();
        for (int j = 0; j<i; j++)
        {
            pr = *iter;
            pr->Print();
            iter++;
        }
    }
 
    void Delete_N(int x) 
    {
        if (x >= size) { cout << "Покупки с таким номеров нет.\n"; return; }
        iter = products.begin(); // Итератор указывает на 1-й элемент
        for (int i = 0; i<x; i++)
            iter++;
        products.erase(iter);
    }
    ~purchase() { products.clear(); } // Деструктор
};
a_lexfox вне форума Ответить с цитированием
Старый 09.05.2016, 12:41   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

И чё наворотил? Вообще-то в классах пишутся исполняемые функции. Причём в хедере, прописываются шаблоны. В cpp, сами исполняемые коды конкретного класса, а в main-проекте, всё остальное вплоть до интерфейса пользователя. Как думаешь, нахрена классы придуманы? Будет не в домёк, но для того, чтобы программёрам руки развязать и заставить их думать над решение самой задачи, а не 100500 раз вставлять код, состоящий из 100 000 000 строк в очередной нано-проектик.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 09.05.2016, 12:46   #3
a_lexfox
Новичок
Джуниор
 
Регистрация: 09.05.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
И чё наворотил? Вообще-то в классах пишутся исполняемые функции. Причём в хедере, прописываются шаблоны. В cpp, сами исполняемые коды конкретного класса, а в main-проекте, всё остальное вплоть до интерфейса пользователя. Как думаешь, нахрена классы придуманы? Будет не в домёк, но для того, чтобы программёрам руки развязать и заставить их думать над решение самой задачи, а не 100500 раз вставлять код, состоящий из 100 000 000 строк в очередной нано-проектик.
Спасибо, за рекомендации по коду. Вскоре я переделаю, как ты сказал.
Но не сможешь ли ты мне подсказать как переделать без использования контейнеров конкретную задачу?
a_lexfox вне форума Ответить с цитированием
Старый 09.05.2016, 13:16   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от a_lexfox Посмотреть сообщение
Спасибо, за рекомендации по коду. Вскоре я переделаю, как ты сказал.
Но не сможешь ли ты мне подсказать как переделать без использования контейнеров конкретную задачу?
Праздник сегодня, мать его за ногу. Но смотри в подписи, там ссыль на справочник. Он только пишется, но кое-что можешь уже и сейчас оттуда почерпнуть.
Если без контейнеров STL, то динамические массивы. К контейнерам, я подойду примерно в главе 8-й, 9-й. Пока, только четыре написано. Нужно соблюдать, хоть какую-то последовательность от простого к сложному.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 09.05.2016 в 13:20.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметры медиа-контейнеров. min@y™ Win Api 6 22.02.2016 18:04
Разработка программы с использованием контейнеров-массивов Xumera C++ Builder 4 13.03.2014 20:32
Стеганография с использованием графических контейнеров + сжатие Шокир Общие вопросы Delphi 0 08.04.2013 15:28
Как просматривать значение std контейнеров в code::bloks AxenicX Помощь студентам 0 15.11.2009 15:43
Обработка массивов структур с использованием контейнеров artyom060791 Помощь студентам 0 14.04.2009 22:43