ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.04.2024
Просмотров: 32
Скачиваний: 0
2.5 Завдання № 6.
Використання повзунка і обробка повідомлень.
Код програми:
#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)
{
//{{AFX_DATA_INIT(CLab_04_1Dlg)
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;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
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)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// CLab_04_1Dlg message handlers
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;
}
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 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(xUpdateData(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 < NumCars; 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);}}
Рис. 9 Результат 6 програми
2.6 Завдання № 7
Створення меню в Windows Application (на базі одиндокументного застосування). Підключення команд меню до коду програми.
Код програми:
#include "stdafx.h"
#include "lab_07.h"
#include "MainFrm.h"
#include "lab_07Doc.h"
#include "lab_07View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(CLab_07App, CWinApp)
//{{AFX_MSG_MAP(CLab_07App)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP,
CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
CLab_07App::CLab_07App()
{
}
CLab_07App theApp;
BOOL CLab_07App::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic();
statically
#endif
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CLab_07Doc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CLab_07View));
AddDocTemplate(pDocTemplate);
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)