Главная страница
Навигация по странице:

  • Перечень сигнатур методов с комментариями. Invoice

  • Листинг: классы, методы, main. Проект Lab4M Source.cpp

  • Можно ли это сделать в первом и во втором случаях, не изменяя константу 10

  • 4. Что представляет из себя итератор Что возвращают begin() и end() Как можно объявлять итераторы в VS 2015

  • Лабораторная работа 4 По курсу "Объектноориентированный анализ и проектирование". На тему Контейнеры stl Задание


    Скачать 47.67 Kb.
    НазваниеЛабораторная работа 4 По курсу "Объектноориентированный анализ и проектирование". На тему Контейнеры stl Задание
    Дата10.12.2018
    Размер47.67 Kb.
    Формат файлаdocx
    Имя файлаoaip_lab4.docx
    ТипЛабораторная работа
    #59544

    Лабораторная работа №4

    По курсу "Объектно˗ориентированный анализ и проектирование".

    На тему «Контейнеры STL»
    Задание
    Класс “Счет(Invoice)” с полями: расчетный счет (6 знаков) плательщика, расчетный счет покупателя, перечисляемая сумма, дата. Вывести информацию о суммах, снятых с задаваемого расчетного счета плательщика до задаваемой даты.

    Перечень сигнатур методов с комментариями.
    Invoice:

    print() – вывод информации о транзакции

    Перегруженные операторы:

    Operator- оператор который возвращает true если совпадают id и дата первого меньше чем дата второго;

    Operator!= - проверка на неравенство по всем полям;

    Operator< - первый критерий id покупателя, второй date;

    Operator== проверка на равенство по всем полям;

    Operator> первый критерий id покупателя, второй date.

    InvoiceMap:

    print() – вывод информации о транзакции

    Перегруженные операторы:

    Operator!= - проверка на неравенство по всем полям;

    Operator< - сравнение по date;

    Operator== проверка на равенство по всем полям;

    Operator> сравнение по date.

    Диаграмма классов


    Листинг: классы, методы, main.
    Проект Lab4M
    Source.cpp

    #include "Header.h"
    int main()

    {

    ifstream input;

    input.open("inputM.txt");

    if (!input.is_open())

    {

    printf("File error");

    return 1;

    }

    vector buff(6);

    map *> Data;
    while (!input.eof())

    {

    char rubbish;

    input >> buff[0] >> buff[1] >> buff[2]

    >> buff[3] >> rubbish >> buff[4] >> rubbish >> buff[5];

    auto it = Data.find(buff[1]);

    if (it == Data.end())

    {

    Data.insert(make_pair(buff[1], new set));

    it = Data.find(buff[1]);

    it->second->insert(InvoiceMap(buff));

    }

    else

    {

    it->second->insert(InvoiceMap(buff));

    }

    }
    while (true)

    {

    printf("\nEnter Buyer ID\n ");

    cin >> buff[1];

    auto it = Data.find(buff[1]);

    if (it == Data.end())

    {

    printf("Incorrect ID\n");

    continue;

    }

    printf("Enter the date (dd.mm.yyyy)\n ");

    scanf("%d.%d.%d", &buff[3], &buff[4], &buff[5]);

    InvoiceMap BuffToFind = InvoiceMap(buff);

    printf(" *Begin*\n");

    auto begin = it->second->begin();

    auto end = it->second->end();

    for (; begin!=end; begin++)

    {

    if (*begin > BuffToFind )begin->print();

    }

    printf(" *End*");

    }

    return 0;

    }

    Header.срр

    #include "Header.h"
    InvoiceMap::InvoiceMap()

    {

    sellerID = 0;

    summ = 0;

    date = 0;

    }
    InvoiceMap::InvoiceMap(vector& input)

    {

    this->sellerID = input[0];

    this->summ = input[2];

    this->date = input[3] + input[4] * 100 + input[5] * 10000;

    }
    bool InvoiceMap::operator<(const InvoiceMap & other)const

    {

    return this->date > other.date;

    }
    bool InvoiceMap::operator>(const InvoiceMap & other)const

    {

    return this->date < other.date;

    }
    bool InvoiceMap::operator==(const InvoiceMap & other)const

    {

    return this->date == other.date;

    }
    bool InvoiceMap::operator!=(const InvoiceMap & other)const

    {

    return this->date != other.date;

    }
    bool InvoiceMap::operator<( InvoiceMap & other)

    {

    return this->date > other.date;

    }
    bool InvoiceMap::operator>( InvoiceMap & other)

    {

    return this->date < other.date;

    }

    void InvoiceMap::print()const

    {

    printf(" %06d %8d %2d.%02d.%04d\n", sellerID, summ, date % 100, (date % 10000) / 100, date / 10000);

    return;

    }

    Header.h

    #pragma once

    #include

    #include

    #include

    #include

    #include

    #include
    using namespace std;

    class InvoiceMap

    {

    private:

    int sellerID, summ, date;

    public:

    InvoiceMap();

    InvoiceMap

    (vector& input);

    bool operator <(const InvoiceMap& other) const;

    bool operator >(const InvoiceMap& other)const;

    bool operator ==(const InvoiceMap& other)const;

    bool operator !=(const InvoiceMap& other)const;

    bool operator <(InvoiceMap& other);

    bool operator >(InvoiceMap& other);

    void print()const;
    };



    Проект Lab4Vector
    Source.cpp

    #include "Header.h"

    #include
    int main()

    {

    ifstream input;

    input.open("input.txt");

    if (!input.is_open())

    {

    printf ("File error");

    return 1;

    }

    vector data;

    vector buff(6);
    while (!input.eof())

    {

    char rubbish;

    input >> buff[0] >> buff[1] >> buff[2]

    >> buff[3] >> rubbish>> buff[4] >> rubbish >> buff[5];

    data.push_back(Invoice(buff));

    }


    sort(data.begin(), data.end());

    for (auto elem : data)

    {

    elem.print();

    }


    for (auto elem : buff)

    {

    elem = 0;

    }

    while (true)

    {

    printf("\nEnter Buyer ID\n ");

    cin >> buff[1];

    printf("Enter the date (dd.mm.yyyy)\n ");

    scanf("%d.%d.%d", &buff[3], &buff[4], &buff[5]);

    Invoice bufftofind = Invoice(buff);

    auto it = data.begin();

    for (; it != data.end() && !(*it - bufftofind); it++) {}

    if (it == data.end())

    {

    printf("There is no information\n ");

    continue;

    }

    printf(" *Begin*\n");

    for (; *it - bufftofind; it++)it->print();

    printf(" *End*");

    }

    return 0;

    }

    Header.срр

    #include "Header.h"
    Invoice::Invoice()

    {

    sellerID = 0;

    buyerID = 0;

    summ = 0;

    date = 0;

    }
    Invoice::Invoice(vector& input)

    {

    this->sellerID = input[0];

    this->buyerID = input[1];

    this->summ = input[2];

    this->date = input[3] + input[4] * 100 + input[5] * 10000;

    }
    bool Invoice::operator<(Invoice & other)

    {

    if (*this != other)

    {

    return !(*this > other);

    }

    else

    {

    return false;

    }

    }
    bool Invoice::operator>(Invoice & other)

    {

    if (this->buyerID > other.buyerID ||

    (this->buyerID == other.buyerID && this->date < other.date))

    {

    return true;

    }

    else

    {

    return false;

    }

    }
    bool Invoice::operator==(Invoice & other)

    {

    if (this->buyerID == other.buyerID &&

    this->date == other.date &&

    this->summ == other.summ &&

    this->sellerID == other.sellerID)

    {

    return true;

    }

    else

    {

    return false;

    }

    }
    bool Invoice::operator!=(Invoice & other)

    {

    return !(*this == other);

    }
    bool Invoice::operator-(Invoice & other)

    {

    if (this->buyerID == other.buyerID && this->date < other.date)return true;

    else return false;

    }
    void Invoice::print()

    {

    printf(" %06d %06d %8d %2d.%02d.%04d\n", sellerID, buyerID, summ, date % 100, (date % 10000)/100, date / 10000);

    return;

    }
    Header.h

    #pragma once

    #include

    #include

    #include

    #include

    #include
    using namespace std;
    class Invoice

    {

    private:

    int sellerID, buyerID, summ, date;

    public:

    Invoice();

    Invoice(vector& input);

    bool operator <(Invoice& other);

    bool operator >(Invoice& other);

    bool operator ==(Invoice& other);

    bool operator !=(Invoice& other);

    bool operator -(Invoice& other);

    void print();
    };



    Контрольные вопросы

    Контрольные вопросы

    1. Что представляет из себя контейнер? Покажите контейнер в своей программе.

    2. В процессе отладки программы появилась необходимость увеличить массивы, объявленные ниже, на 4 элемента.


    Можно ли это сделать в первом и во втором случаях, не изменяя константу 10?

    int *mas1=new int[10]; // 1

    vector mas2(10); //2


    3. Если работа с массивами, объявленными выше, заканчивается, то в каком случае обязательно использование оператора delete?


    4. Что представляет из себя итератор? Что возвращают begin() и end()? Как можно объявлять итераторы в VS 2015?


    5. Может ли быть ключом map значение поля объекта пользовательского типа?


    6. В чем разница между обобщенным алгоритмом find и find для map?

    Автор Преподаватель

    ФИО ______________ (подпись) Оценка ______________ Подпись _____ Дата


    написать администратору сайта