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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2010, 19:43   #1
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию SOS Надо написать код в С++ ( есть образец, надо переделать просто!)

Есть образец, надо немного переделать... помогите пожалуйста! больше не к кому обратиться....

вот вариант, кот. надо сделать:
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:45   #2
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

вот готовый вариант, к которому есть код:
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:47   #3
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DB.hpp>
#include <DBGrids.hpp>
#include <DBTables.hpp>
#include <Grids.hpp>
#include <ComCtrls.hpp>
#include <DBCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <Buttons.hpp>
#include "AddOrderFormUnit.h"

const Price1tPer100 = 3500;

//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published:	// IDE-managed Components
    TPageControl *PageControl1;
    TTabSheet *TabSheet1;
    TTabSheet *TabSheet2;
    TTabSheet *TabSheet3;
    TTabSheet *TabSheet4;
    TDBGrid *GOrders;
    TDBGrid *GClients;
    TDataSource *DSClients;
    TDataSource *DSTransport;
    TDataSource *DSOrders;
    TTable *TTransport;
    TTable *TOrders;
    TTable *TClients;
    TDataSource *DSDistances;
    TTable *TDistances;
    TDataSource *DSTowns;
    TTable *TTowns;
    TDBGrid *GTowns;
    TDBNavigator *NTowns;
    TMainMenu *MainMenu1;
    TMenuItem *N1;
    TMenuItem *N2;
    TDBNavigator *NClients;
    TDBNavigator *NOrders;
    TStatusBar *StatusBar1;
    TTabSheet *TabSheet5;
    TDBGrid *GDistances;
    TDBNavigator *NDistances;
    TDBGrid *GTransport;
    TDBNavigator *NTransport;
    TStringField *TTownsName;
    TStringField *TClientsName;
    TStringField *TClientsTown;
    TStringField *TDistancesTown1;
    TStringField *TDistancesTown2;
    TFloatField *TDistancesDistance;
    TStringField *TOrdersSender;
    TStringField *TOrdersLoad;
    TFloatField *TOrdersAmount;
    TStringField *TOrdersConsumer;
    TFloatField *TOrdersCost;
    TFloatField *TOrdersDiscount;
    TDateField *TOrdersEntryDate;
    TDateField *TOrdersMaxDeliveryDate;
    TBitBtn *BitBtn2;
    TTabSheet *TabSheet8;
    TDBGrid *GTransportPosition;
    TDBNavigator *NTransportPosition;
    TTable *TTransportPosition;
    TDataSource *DSTransportPosition;
    TStringField *TTransportPositionTown;
    TFloatField *TTransportPositionType;
    TFloatField *TTransportPositionAmount;
    TMenuItem *N5;
    TMenuItem *N7;
    TMenuItem *N3;
    TMenuItem *N11;
    TMenuItem *N8;
    TMenuItem *N9;
    TMenuItem *N10;
    TFloatField *TTransportType;
    TFloatField *TTransportCapacity;
    TFloatField *TTransportAmount;
    TFloatField *TTransportCostPerDay;
    TFloatField *TTransportCostPer100;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    void __fastcall N6Click(TObject *Sender);
    void __fastcall N11Click(TObject *Sender);
    void __fastcall N8Click(TObject *Sender);
    void __fastcall N10Click(TObject *Sender);
    void __fastcall N7Click(TObject *Sender);

private:	// User declarations
public:		// User declarations
    __fastcall TMainForm(TComponent* Owner);

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:03.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:47   #4
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
AnsiString __fastcall GetTownByClient(AnsiString Client);
    int __fastcall GetDistance(AnsiString Town1, AnsiString Town2);
    void GetTransType(int Type);
    int GetDeliveryCost(AnsiString TownFrom, AnsiString TownTo, int Type);

    int __fastcall OptByLoad();
    int __fastcall OptByCost();
    int __fastcall OptByProfit();

    int __fastcall MakeOrder(int Type);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------

void Message(AnsiString msg);

#endif

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:03.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:48   #5
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//окно с сообщением
void Message(AnsiString msg){
    Application->MessageBoxA(msg.c_str(), "Message", 0);
}

//создание формы
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    //находим расположение базы данных
    AnsiString DBName = ExtractFilePath(Application->ExeName) + "DB";

    //применяем к каждой таблице это расположение
    TTowns->DatabaseName = DBName;
    TClients->DatabaseName = DBName;
    TDistances->DatabaseName = DBName;
    TTransport->DatabaseName = DBName;
    TTransportPosition->DatabaseName = DBName;
    TOrders->DatabaseName = DBName;

    //открываем каждую таблицу
    TTowns->Open();
    TClients->Open();
    TDistances->Open();
    TTransport->Open();
    TTransportPosition->Open();
    TOrders->Open();
}
//---------------------------------------------------------------------------
//закрытие окна
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
    //закрываем каждую таблицу
    TTowns->Close();
    TClients->Close();
    TDistances->Close();
    TTransport->Close();
    TTransportPosition->Close();
    TOrders->Close();

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:03.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:48   #6
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
}
//---------------------------------------------------------------------------
//функция возвращает город заданного клиента
AnsiString __fastcall TMainForm::GetTownByClient(AnsiString Client){
    AnsiString Town;

    //цикл по всем записям в таблице клиенты
    TClients->First();
    while(!TClients->Eof){
        //если имя клиента совпадает с заданным
        if(TClientsName->Value == Client) {
            //это то, что нужно возвращаем его город
            return TClientsTown->Value;
        }
        TClients->Next();
    }
    //если такого клиента нет, возвращаем пустую строку
    return "";
}
//---------------------------------------------------------------------------
//возвращает расстояние между двумя заданными городами
int __fastcall TMainForm::GetDistance(AnsiString Town1, AnsiString Town2){
    //если один и тот же город возвращаем 0
    if(Town1==Town2) return 0;

    //цикл по таблице расстояний
    TDistances->First();
    while(!TDistances->Eof){
        //если эти города совпадают с заданными
        if((TDistancesTown1->Value == Town1 && TDistancesTown2->Value == Town2)||
           (TDistancesTown2->Value == Town1 && TDistancesTown1->Value == Town2))
            //возвращаем расстояние между ними
            return TDistancesDistance->Value;
        TDistances->Next();
    }
    //а так минус один
    return -1;
}

//---------------------------------------------------------------------------
//меню добавить заказ
void __fastcall TMainForm::N6Click(TObject *Sender)
{
    //показать форму добавления заказа
    AddOrderForm->ShowModal();
}

//оптимизация по загрузке
int __fastcall TMainForm::OptByLoad()
{
        int MinFreeSpace = 1000; //мин. свободное место
        int Type = -1; //тип транспорта

        AnsiString SendTown =         //город отправитель
        GetTownByClient(TOrdersSender->Value);
        AnsiString ConsTown =         //город получатель
        GetTownByClient(TOrdersConsumer->Value);
        int Amount = TOrdersAmount->Value;

        //цикл по транспорту
        TTransport->First();
        while(!TTransport->Eof){
            //расчет свободного места
            int CurFreeSpace = TTransportCapacity->Value - Amount ;

            if(Amount > TTransportCapacity->Value) goto next;

            if(CurFreeSpace < MinFreeSpace) {
                MinFreeSpace = CurFreeSpace; //накапливается транс. с опт
                //загрузкйо
                Type = TTransportType->Value;
            }
            next: TTransport->Next();
        }

        if(Type == -1) {Message("Подходящий транспорт не найден!"); return 0;}

        Message("Поиск оптимального по ЗАГРУЗКЕ ТРАНСПОРТНОЙ ЕДИНИЦЫ маршрута...");
        return MakeOrder(Type);

}
//---------------------------------------------------------------------------
//по издержкам
int __fastcall TMainForm::OptByCost()
{
        int MinCost = 10000000;
        int Type = -1;

        AnsiString SendTown =
        GetTownByClient(TOrdersSender->Value);
        AnsiString ConsTown =
        GetTownByClient(TOrdersConsumer->Value);
        int Amount = TOrdersAmount->Value;

        //цикл по транспорту
        TTransport->First();
        while(!TTransport->Eof){
            //получаем себестоимость перевозки
            int CurCost = GetDeliveryCost(SendTown, ConsTown, TTransportType->Value);

            if(Amount > TTransportCapacity->Value) goto next;

            if(CurCost < MinCost){
                MinCost = CurCost;   //мин. стоимость.
                Type = TTransportType->Value;
            }
            next: TTransport->Next();
        }

        if(Type == -1) {Message("Подходящий транспорт не найден!"); return 0;}

        Message("Поиск оптимального по МИНИМИЗАЦИИ ИЗДЕРЖЕК маршрута...");
        return MakeOrder(Type);

}
//---------------------------------------------------------------------------
//функция производит обработку заказа заданным типом транспорта
int __fastcall TMainForm::MakeOrder(int Type){

    AnsiString SendTown = GetTownByClient(TOrdersSender->Value);
    AnsiString ConsTown = GetTownByClient(TOrdersConsumer->Value);

    GetTransType(Type);

    //подсчет себестоимости
    int Cost = GetDeliveryCost(SendTown, ConsTown, Type);

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:04.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:48   #7
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
Message((AnsiString)"Оптимальным маршрутом будет таковой из г."
    + SendTown + " в г. " + ConsTown +
    " контейнером типа " + Type +
    ". Себестоимость перевозки " + Cost + "р. Доход " +
    (TOrdersCost->Value - Cost) + "р.");

    return (TOrdersCost->Value - Cost);

}
//---------------------------------------------------------------------------
//оптимизация по прибыли
int __fastcall TMainForm::OptByProfit(){

    //это доходы по разным типам оптимизации
    int OptCost = OptByCost();
    int OptLoad = OptByLoad();

    //ищем какой самый выгодный
    if(OptCost >= OptLoad){
        Message("Оптимальным оказался маршрут, минимизирующий ИЗДЕРЖКИ.");
        return OptLoad;
    }
    else if(OptLoad > OptCost){
        Message("Оптимальным оказался маршрут, оптимизированный по ЗАГРУЗКЕ");
        return OptLoad;
    }
    return 0;

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:05.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:49   #8
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
}
//---------------------------------------------------------------------------
//функция выбирает в таблице транспорт заданного типа
void TMainForm::GetTransType(int Type){

    TTransport->First();
        while(!TTransport->Eof){
        if(Type == TTransportType->Value) return;
        TTransport->Next();
    }
}

//---------------------------------------------------------------------------
//функция подсчета себестоимости доставки
int TMainForm::GetDeliveryCost(AnsiString TownFrom, AnsiString TownTo, int Type){
    GetTransType(Type);

    return (double)GetDistance(TownFrom, TownTo) * TTransportCostPer100->Value /
    100 + TTransportCostPerDay->Value;
}

//---------------------------------------------------------------------------

void __fastcall TMainForm::N11Click(TObject *Sender)
{
    OptByCost();    
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::N8Click(TObject *Sender)
{
    OptByLoad();    
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::N10Click(TObject *Sender)
{
    OptByProfit();
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::N7Click(TObject *Sender)
{
    AddOrderForm->ShowModal();    
}
//---------------------------------------------------------------------------





//---------------------------------------------------------------------------

#ifndef AddOrderFormUnitH
#define AddOrderFormUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include "Unit1.h"


//---------------------------------------------------------------------------
class TAddOrderForm : public TForm
{
__published:	// IDE-managed Components
    TLabel *Label1;
    TLabel *Label2;
    TLabel *Label3;
    TLabel *Label4;
    TLabel *Label8;
    TLabel *Label9;
    TBevel *Bevel2;
    TLabel *Label11;
    TLabel *Label12;
    TBevel *Bevel3;
    TLabel *Label13;
    TLabel *Label14;
    TEdit *ELoad;
    TComboBox *CBAmount;
    TBitBtn *AddOrder;
    TComboBox *CBSender;
    TComboBox *CBConsumer;
    TUpDown *UDDiscount;
    TEdit *EDiscount;
    TEdit *EPrice;
    TStaticText *LSenderTown;
    TStaticText *LConsumerTown;
    TDateTimePicker *DTEntry;
    TDateTimePicker *DTMaxTime;
    TBitBtn *Cancel;
    void __fastcall FormShow(TObject *Sender);
    void __fastcall CBSenderChange(TObject *Sender);
    void __fastcall UDDiscountChanging(TObject *Sender, bool &AllowChange);
    void __fastcall AddOrderClick(TObject *Sender);
private:	// User declarations
public:		// User declarations
    __fastcall TAddOrderForm(TComponent* Owner);
    bool __fastcall CheckOrder();
    void __fastcall CalcCost();
};
//---------------------------------------------------------------------------
extern PACKAGE TAddOrderForm *AddOrderForm;
//---------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:05.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 19:49   #9
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Код:
#include "AddOrderFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAddOrderForm *AddOrderForm;
//---------------------------------------------------------------------------
__fastcall TAddOrderForm::TAddOrderForm(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
bool __fastcall TAddOrderForm::CheckOrder(){

    if(CBSender->Text.IsEmpty()){
        Message("Отправитель не заполнен!");
        return false;
    }

    if(CBConsumer->Text.IsEmpty()){
        Message("Получатель не заполнен!");
        return false;
    }

    if(CBSender->Text == CBConsumer->Text){
        Message("Заказ нельзя отправить самому себе!");
        return false;
    }

    return true;
}
//---------------------------------------------------------------------------
void __fastcall TAddOrderForm::FormShow(TObject *Sender)
{
    CBSender->Clear();  CBConsumer->Clear();

    MainForm->TClients->First();
    while(!MainForm->TClients->Eof){

        CBSender->Items->Add(MainForm->TClientsName->Value);
        CBConsumer->Items->Add(MainForm->TClientsName->Value);

        MainForm->TClients->Next();
    }

    LSenderTown->Caption = ""; LConsumerTown->Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TAddOrderForm::CalcCost(){

    EPrice->Text =
    (Price1tPer100 * CBAmount->Text.ToIntDef(0) *
    MainForm->GetDistance(MainForm->GetTownByClient(CBSender->Text),
    MainForm->GetTownByClient(CBConsumer->Text))
    /
    100) * (100 - UDDiscount->Position) / 100;
}
void __fastcall TAddOrderForm::CBSenderChange(TObject *Sender)
{
    LSenderTown->Caption = MainForm->GetTownByClient(CBSender->Text);
    LConsumerTown->Caption = MainForm->GetTownByClient(CBConsumer->Text);

    CalcCost();
}    
//---------------------------------------------------------------------------

void __fastcall TAddOrderForm::UDDiscountChanging(TObject *Sender,
      bool &AllowChange)
{
    CalcCost();
}
//---------------------------------------------------------------------------
void __fastcall TAddOrderForm::AddOrderClick(TObject *Sender)
{
    if(!CheckOrder()) return;

    MainForm->TOrders->Insert();

    MainForm->TOrdersSender->Value = CBSender->Text;
    MainForm->TOrdersLoad->Value = ELoad->Text;
    MainForm->TOrdersAmount->Value = CBAmount->Text.ToIntDef(0);
    MainForm->TOrdersConsumer->Value = CBConsumer->Text;
    MainForm->TOrdersCost->Value = EPrice->Text.ToIntDef(0);
    MainForm->TOrdersDiscount->Value = UDDiscount->Position;
    MainForm->TOrdersEntryDate->Value = DTEntry->Date;
    MainForm->TOrdersMaxDeliveryDate->Value = DTMaxTime->Date;

    Close();
}
//---------------------------------------------------------------------------

Последний раз редактировалось ACE Valery; 08.12.2010 в 22:06.
Беата вне форума Ответить с цитированием
Старый 08.12.2010, 22:13   #10
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Беата, вы на этом форуме не первый раз, поэтому оформляем код тегом [code], иначе получаем по шапке.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо переделать в ООП Авторитет Общие вопросы .NET 8 28.09.2010 19:26
Помогите решить 2 задачки срочно надо а то меня повешают на практике мне надо к 2 июня!!! серега222 Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 17:46
плз помогите легко просто надо несколько вариантов решения sp.caster Помощь студентам 8 29.01.2009 18:40
задача под windows,помогите написать.Надо написать на Borland C++Builder 6. eddddii Помощь студентам 9 23.05.2008 17:04