Загрузка...

Help understand relationships between classes

Thread in C/C++ created by гриндер Oct 4, 2022. 224 views

  1. гриндер
    гриндер Topic starter Oct 4, 2022 Разработка софта, ботов - https://zelenka.guru/threads/6583046/ 1978 Jul 14, 2022
    Есть задача, смоделировать вот такую ситуацию
    В каждом городе есть несколько почтовых отделений, которые принимают и отправляют посылки. Определяется их вес,
    дата отправки и доставки, цена. Клиент отправляет посылку и платит деньги за ее доставку

    цветом выделил классы
    Уже перечитал много статей по этой теме но так и не решил как грамотно устроить связь между объектами((
    Помогите пж :roflanPlz:
     
  2. dur4chok
    dur4chok Oct 4, 2022 Хочу денег 72 Apr 15, 2020
    вроде так[IMG]
     
    1. гриндер Topic starter
  3. brediska
    brediska Oct 5, 2022 Banned 2794 May 30, 2021
    что то типо такого...
    Code
    struct Посылка{
    Посылка() : оплачено(false) {}
    Вес вес;
    ДатаОтправки до;
    ДатаДоставки дд;
    Цена цена;
    bool оплачено;
    void взвесить(Вес вес) {
    this->вес = вес;
    }
    void оценить_и_оплатить(Цена цена) {
    this->цена = цена;
    оплачено = true;
    }
    void отправить_и_доставить(ДатаОтправки до, ДатаДоставки дд) {
    this->до = до;
    this->дд = дд;
    }
    };
    struct Клиент{
    ФИО фио;
    Клиент(ФИО фио) : фио(фио) {}
    void load(Select select) {
    посылки = select.execute();
    }
    void save(Update update) {
    update.execute();
    }
    void add(Посылка& посылка) {
    посылки.push_back(посылка);
    }
    vector<Посылка> посылки;
    };
    struct ПочтовоеОтделение {
    Индекс индекс;
    vector<Клиент> клиенты;
    ПочтовоеОтделение(Индекс индекс) : индекс(индекс) {}
    void load(Select select) {
    клиенты = select.execute();
    }
    void save(Update update) {
    update.execute();
    }
    void accept(Клиент& клиент) {
    for (auto& посылка : клиент.посылки) {
    взвесить(посылка);
    оценить_и_оплатить(посылка);
    отправить_и_доставить(посылка);
    }
    клиенты.push_back(клиент);
    }
    void update(const ПочтовоеОтделение& отделение) {

    }
    friend bool operator==(const ПочтовоеОтделение& a, const ПочтовоеОтделение& b) {
    return a.индекс == b.индекс;
    }
    };
    struct Город {
    Название название;
    Город(Название название) : название(название) {}
    void load(Select select) {
    отделения = select.execute();
    }
    void save(Update update) {
    update.execute();
    }
    void update(ПочтовоеОтделение& отделение) {
    if (отделения.contains(отделение)) {
    auto target = find(отделения.begin(), отделения.end(), отделение);
    target->update(отделение);
    } else {
    отделения.push_back(отделение);
    }
    }
    vector<ПочтовоеОтделение> отделения;
    };
    P.S. город никакого отношения к почтовому отделению не имеет. это отделения имеют индекс предприятия связи и места назначения, а также фактический почтовый адрес. сами же отделения структурно входят в состав почтовой организации. отделения одного города никак между не связаны, у них раздельные балансы. хотя и имеют возможность передать почтовое отправление для выдачи в другое отделение по личной просьбе получателя в устной либо письменной форме, (да и в чистом си нет классов, только в с++)
     
Top
Loading...