ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.04.2024
Просмотров: 31
Скачиваний: 0
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CLab_03Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
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;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CLab_03Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CLab_03Dlg::OnVAZ()
{
m_edLitres = 6.5; //Расход топлива
m_edPrice = 17.5; //Цена одного литра
UpdateData(0); //Вывести данные в редакторы
}
void CLab_03Dlg::OnGazel()
{
m_edLitres = 12.3; //Расход топлива
m_edPrice = 15.5; //Цена одного литра
UpdateData(0); //Вывести данные в редакторы
}
void CLab_03Dlg::OnGAZ_66()
{m_edLitres = 30; //Расход топлива
m_edPrice = 12.7; //Цена одного литра
UpdateData(0); //Вывести данные в редакторы
}
void CLab_03Dlg::OnMers()
{
m_edLitres = 10; //Расход топлива
m_edPrice = 19.5; //Цена одного литра
UpdateData(0); //Вывести данные в редакторы
}
void CLab_03Dlg::OnResult()
{
UpdateData(1); //Получить данные из редакторов
m_edResult = (m_edWay/100)*m_edLitres*m_edPrice;
UpdateData(0); //Вывести данные в редакторы
}
Рис. 6 Результат 3 програми
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 програми