Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Курс / Практика / Отчёт по практике Матвиенко.doc
Скачиваний:
2
Добавлен:
30.05.2020
Размер:
783.36 Кб
Скачать

2.4 Завдання № 4-5.

Графічний інтерфейс з використанням списків, комбінованих полів. Вирішення завдань, що використовують елементи графічного інтерфейсу, що вивчаються, масиви і структури даних.

Код програми:

#include "stdafx.h"

#include "lab_04_1.h"

#include "lab_04_1Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

struct Garage

{

float Litres;

float Price;

float Way;

int Tonnage;

int Weight;

int NumCars;

char Cars[15];

};

Garage car[10];

float Result;

CLab_04_1Dlg dialog

CLab_04_1Dlg::CLab_04_1Dlg(CWnd* pParent /*=NULL*/)

: CDialog(CLab_04_1Dlg::IDD, pParent)

{

m_edAdd = _T("");

m_edLitres = 0.0f;

m_edPrice = 0.0f;

m_edWay = 0.0f;

m_edTonnage = 0;

m_edWeight = 0;

m_edNum = 0;

m_cbWeight = FALSE;

m_cbWay = FALSE;}

void CLab_04_1Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_LIST2, m_lbResult);

DDX_Control(pDX, IDC_LIST1, m_lbGarage);

DDX_Text(pDX, IDC_EDIT1, m_edAdd);

DDV_MaxChars(pDX, m_edAdd, 10);

DDX_Text(pDX, IDC_EDIT2, m_edLitres);

DDX_Text(pDX, IDC_EDIT3, m_edPrice);

DDX_Text(pDX, IDC_EDIT4, m_edWay);

DDX_Text(pDX, IDC_EDIT5, m_edTonnage);

DDX_Text(pDX, IDC_EDIT6, m_edWeight);

DDX_Text(pDX, IDC_EDIT7, m_edNum);

DDX_Check(pDX, IDC_CHECK1, m_cbWeight);

DDX_Check(pDX, IDC_CHECK2, m_cbWay);

}

BEGIN_MESSAGE_MAP(CLab_04_1Dlg, CDialog)

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, OnAdd)

ON_LBN_SELCHANGE(IDC_LIST1, OnGarage)

ON_BN_CLICKED(IDC_BUTTON2, OnDel)

ON_BN_CLICKED(IDC_BUTTON4, OnSave)

ON_BN_CLICKED(IDC_BUTTON3, OnOptimum)

ON_BN_CLICKED(IDC_BUTTON5, OnOpen)

END_MESSAGE_MAP()

BOOL CLab_04_1Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

int NumCars;

car[0].NumCars = 0

FILE *F;

if ((F = fopen("base.dat", "r")) == NULL)

AfxMessageBox("Файл 'base.dat' не найден!");

else

{

fread(&car, sizeof(car), 1, F);

fclose(F);

for (int i = 0; i < car[0].NumCars; i++)

{

m_lbGarage.AddString(car[i].Cars);

}

//Додамо в список автомобілі

m_lbGarage.AddString("VAZ");

m_lbGarage.AddString("GAZel");

m_lbGarage.AddString("GAZ-66");

m_lbGarage.AddString("Mersedes");

//Заповнюємо масив даних: ВАЗ

car[0].Litres = 8.5; car[0].Price = 15; car[0].Way = 100;

car[0].Tonnage = 400; car[0].Weight = 500;

//---Газель

car[1].Litres = 15; car[1].Price = 12; car[1].Way = 100;

car[1].Tonnage = 1500; car[1].Weight = 500;

//ГАЗ-66

car[2].Litres = 30; car[2].Price = 10; car[2].Way = 100;

car[2].Tonnage = 3500; car[2].Weight = 500;

// Мерседес

car[3].Litres = 10; car[3].Price = 17; car[3].Way = 100;

car[3].Tonnage = 500; car[3].Weight = 500;

NumCars = 4; //У нас доки чотири автомобілі

SetIcon(m_hIcon, TRUE);

SetIcon(m_hIcon, FALSE);

return TRUE; // return TRUE unless you set the focus to a control

}

void CLab_04_1Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

HCURSOR CLab_04_1Dlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CLab_04_1Dlg::OnAdd()

{

UpdateData(1);

int NumCars = car[0].NumCars;

if (m_edAdd != "" && NumCars < 10)

{

m_lbGarage.AddString(m_edAdd);

car[NumCars].Litres = m_edLitres;

car[NumCars].Price = m_edPrice;

car[NumCars].Way = m_edWay;

car[NumCars].Tonnage = m_edTonnage;

car[NumCars].Weight = m_edWeight;

strcpy(car[NumCars].Cars, m_edAdd);

float z;

if (m_edTonnage > 0)

m_edNum = int(m_edWeight / m_edTonnage);

z = float(m_edWeight) / float(m_edTonnage);

if (m_edNum < z) m_edNum = m_edNum++;

}

else m_edNum = 1;

Result = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

CString s класса CString

s.Format("%0.2f", Result);

m_lbResult.AddString(s);

m_lbGarage.SetCurSel(NumCars);

m_lbResult.SetCurSel(NumCars);

NumCars++; списке

car[0].NumCars = NumCars;

UpdateData(0);

}

}

void CLab_04_1Dlg::OnGarage()

{

int x = m_lbGarage.GetCurSel();

m_edLitres = car[x].Litres;

m_edPrice = car[x].Price;

m_edWay = car[x].Way;

m_edTonnage = car[x].Tonnage;

m_edWeight = car[x].Weight;

float z;

if (m_edTonnage > 0)

m_edNum = int(m_edWeight / m_edTonnage);

z = float(m_edWeight) / float(m_edTonnage);

if (m_edNum < z) m_edNum = m_edNum++;

}

else m_edNum = 1;

Result = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

CString s;

s.Format("%0.2f", Result);

m_lbResult.DeleteString(x); m_lbResult.InsertString(x, s);m_lbResult.SetCurSel(x UpdateData(0);

}

void CLab_04_1Dlg::OnDel()

{

int NumCars = car[0].NumCars;int i;

Garage Mas[10]; int x = m_lbGarage.GetCurSel(); for (int i = 0; i < NumCars; i++) Mas[i] = car[i];

if (NumCars > 0) NumCars for (i = 0; i < Nu

mCars; i++) if (i < x) car[i] = Mas[i];

else car[i] = Mas[i + 1];

m_lbGarage.DeleteString(x);

m_lbResult.DeleteString(x); if (NumCars > 0)

{

m_lbGarage.SetCurSel(NumCars - 1); m_lbResult.SetCurSel(NumCars - 1); CLab_04_1Dlg::OnGarage(); };

car[0].NumCars = NumCars;

void CLab_04_1Dlg::OnSave()

{

int NumCars = car[0].NumCars;

if (NumCars > 0)

{

int x = m_lbGarage.GetCurSel();

UpdateData(1);

car[x].Litres = m_edLitres;

car[x].Price = m_edPrice;

car[x].Tonnage = m_edTonnage;

if (m_cbWay == 0) car[x].Way = m_edWay;

else

for (int i = 0; i < NumCars; i++) car[i].Way = m_edWay;

if (m_cbWeight == 0) car[x].Weight = m_edWeight;

else

for (int i = 0; i < NumCars; i++) car[i].Weight = m_edWeight;

for (int i = 0; i < NumCars; i++)

{

m_lbGarage.SetCurSel(i);

CLab_04_1Dlg::OnGarage UpdateData(0);

}

m_lbGarage.SetCurSel(x);

CLab_04_1Dlg::OnGarage();

}

CFileDialog fd(FALSE,NULL,"*.dat",NULL,"(*.*)|*.*|(*.dat)|*.dat|");

int res = fd.DoModal();

if (res = IDOK)

{

FILE *F;

F = fopen(fd.GetPathName(), "w");

fwrite(&car, sizeof(car), 1, F);

fclose(F);

}

}

void CLab_04_1Dlg::OnOptimum()

{

int NumCars = car[0].NumCars;

for (int i = 0; i < NumCars; i++)

{

m_lbGarage.SetCurSel(i);

CLab_04_1Dlg::OnGarage();

UpdateData(0);

if (NumCars > 0)

{

CString st;

m_lbResult.GetText(0, st);

Result = atof(st int j = 0;

float n;int i;

for (i = 1; i < NumCars; i++) {

m_lbResult.GetText(i, st);

n = atof(st);

if (n < Result)

{

Result = n;

j = i;

}

}

m_lbGarage.GetText(j, st);

st = "optimalniy variant" + st;

AfxMessageBox(st);

}

}

void CLab_04_1Dlg::OnOpen()

{

CFileDialog fd(TRUE,NULL,"*.dat",NULL,"(*.*)|*.*|(*.dat)|*.dat|");

int res = fd.DoModal();

if (res = IDOK)

{

for (int i = car[0].NumCars - 1; i >= 0 ; i--)

{

m_lbGarage.DeleteString(i);

m_lbResult.DeleteString(i);

}

FILE *F;

if ((F = fopen(fd.GetPathName(), "r")) != NULL)

fread(&car, sizeof(car), 1, F);

fclose(F);int i;

for (i = 0; i < car[0].NumCars; i++)

m_lbGarage.AddString(car[i].Cars);

}

}

Рис. 7 Результат 4 програми

Рис. 8 Результат 5 програми