Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP :: Cursova.docx
Скачиваний:
14
Добавлен:
01.08.2019
Размер:
1.66 Mб
Скачать
  1. Тестування програми та результати її виконання

Поставимо декілька завдань для програми. Для інтерфейсу персоналу додамо по 3 будь-яких страви в кожне меню, спробуємо якесь із них відредагувати чи видалити. Для інтерфейсу відвідувача спробуємо відобразити ці списки меню, додати до замовлення декілька з них і спробувати використати функцію «замовити».

Дія

Результат

Результат тесту

Додати страви до меню

успішно

Редагування страви

успішно

Видалити страву з меню

успішно

Вивід списку меню

успішно

Додати до замовлення декілька

успішно

Замовити

успішно

  1. Висновки

На перший погляд, завдання досить просте. Але під час роботи, зрозумів, що це не так. Наприклад, потрібно було розібратися як розбити інтерфейс для різних користувачів. Дійшовши до висновку, просто зробив окремі три міні-програми, які використовують спільні ресурси. Так, а як зробити так щоб програми мали доступ до спільних ресурсів? Це ще одна проблема. Дійшовши до висновку, просто помістив їх на найнижчому рівні дерева програми, а кожна програма лежала в каталозі іншої програми. Потім постало питання як зберігати дані: чи текстово, чи бінарно? Текстово – було б простіше, але громісткіше і без захисту даних, а бінарно – компактніше, та більш захищено, тому що простим текстовим редактором не можливо прочитати дані.

Отже, робота була досить не проста. Так, програма містить недоліки, але в майбутньому їх можна виправити.

  1. Перелік використаної літератури:

  1. Страуструп Б. Язык программирования С++. Специальное издание. - М., СПб.: «Издательство БИНОМ» - «Невский Диалект», 2001г.-1099 с.

  2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений С++. Пер с англ. – М.: СПб.: «Издательство БИНОМ» - «Невский Диалект» , 2001г. – 560с.

  3. Глушаков С. В., Коваль А. В., Смирнов С. В. Язык программирования С++: Учебный курс. – Харьков: Фолио; М.: «Видавництво АСТ», 2001г. – 500с.

  4. Р. Лафоре. Объектно-ориентированное программирование в С++. 4-е издание. Издательство: Питер. Серия: Классика computer science, 2005г. – 928 с.

  5. Шилдт Г. Самоучитель С++, 3-е издание: пер. с англ. – СПб.:BHV – Санкт-Петербург, 1999г. – 688с.

  6. Петрик О., Петрик М. Технологія програмування в середовищі С++. – Тернопіль: ТДТУ ім. Івана Пулюя, 2005. – 110с.

  1. Додатки

    1. Додаток а1 Код програми: інтерфейс відвідувача

CursovaDlg.h

#pragma once

#include "afxwin.h"

#include "afxcmn.h"

class CCursovaDlg : public CDialogEx

{

public:

CCursovaDlg(CWnd* pParent = NULL);

enum { IDD = IDD_CURSOVA_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

HICON m_hIcon;

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

double m_static_total;

double m_static_cost;

CString m_static_consist;

CListBox m_list_name;

CListBox m_list_order;

void SetListName(char*);

void clearOrderList();

afx_msg void OnBnClickedButton1();

afx_msg void OnBnClickedButton2();

afx_msg void OnBnClickedButton3();

afx_msg void OnBnClickedButton4();

afx_msg void OnBnClickedButton5();

afx_msg void OnBnClickedButton6();

afx_msg void OnBnClickedButton7();

afx_msg void OnLbnSelchangeListName();

afx_msg void OnLbnDblclkListName();

};

CursovaDlg.cpp

#include "stdafx.h"

#include "Cursova.h"

#include "CursovaDlg.h"

#include "afxdialogex.h"

#include <fstream>

#include <vector>

using namespace std;

#include "ManagerInterface\ManagerInterface\Bleed.h"

#include "ManagerInterface\ManagerInterface\wayDefines.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

vector<Bleed> vecBl;

vector<Bleed>::iterator iter;

vector<Bleed> order;

vector<Bleed>::iterator orderIter;

int i = -1;

char* way = new char[255];

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

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

: CDialogEx(CCursovaDlg::IDD, pParent)

, m_static_total(0)

, m_static_cost(0)

, m_static_consist(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CCursovaDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_STATIC_TOTAL, m_static_total);

DDX_Text(pDX, IDC_STATIC_COST, m_static_cost);

DDX_Text(pDX, IDC_STATIC_CONSIST, m_static_consist);

DDX_Control(pDX, IDC_LIST_NAME, m_list_name);

DDX_Control(pDX, IDC_LIST2, m_list_order);

}

BEGIN_MESSAGE_MAP(CCursovaDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON_1, &CCursovaDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON_2, &CCursovaDlg::OnBnClickedButton2)

ON_BN_CLICKED(IDC_BUTTON_3, &CCursovaDlg::OnBnClickedButton3)

ON_BN_CLICKED(IDC_BUTTON_4, &CCursovaDlg::OnBnClickedButton4)

ON_BN_CLICKED(IDC_BUTTON_5, &CCursovaDlg::OnBnClickedButton5)

ON_BN_CLICKED(IDC_BUTTON_6, &CCursovaDlg::OnBnClickedButton6)

ON_BN_CLICKED(IDC_BUTTON_7, &CCursovaDlg::OnBnClickedButton7)

ON_LBN_SELCHANGE(IDC_LIST_NAME, &CCursovaDlg::OnLbnSelchangeListName)

ON_LBN_DBLCLK(IDC_LIST_NAME, &CCursovaDlg::OnLbnDblclkListName)

END_MESSAGE_MAP()

BOOL CCursovaDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

SetIcon(m_hIcon, TRUE);

SetIcon(m_hIcon, FALSE);

return TRUE;

}

void CCursovaDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx::OnSysCommand(nID, lParam);

}

}

void CCursovaDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this);

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<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

{

CDialogEx::OnPaint();

}

}

HCURSOR CCursovaDlg::OnQueryDragIcon()

{

return static_cast<HCURSOR>(m_hIcon);

}

void CCursovaDlg::SetListName(char* _way){

ifstream databaseIn;

Bleed *bl = new Bleed;

int nItem = 0;

strcpy(way, "ManagerInterface\\ManagerInterface\\");

strcat(way, _way);

m_list_name.ResetContent();

vecBl.clear();

databaseIn.open(way, ios::binary);

while(true){

databaseIn.read(reinterpret_cast<char*>(bl),sizeof(*bl));

if(databaseIn.eof())

break;

vecBl.push_back(*bl);

}

for(iter = vecBl.begin(); iter != vecBl.end(); iter++){

m_list_name.AddString((*iter).getName());

}

databaseIn.close();

}

void CCursovaDlg::clearOrderList(){

m_list_order.ResetContent();

m_static_total = 0.0;

UpdateData(FALSE);

}

//гарячі страви

void CCursovaDlg::OnBnClickedButton1()

{

SetListName(menu_way_1);

}

//піца

void CCursovaDlg::OnBnClickedButton2()

{

SetListName(menu_way_2);

}

//салати

void CCursovaDlg::OnBnClickedButton3()

{

SetListName(menu_way_3);

}

//Десерти

void CCursovaDlg::OnBnClickedButton4()

{

SetListName(menu_way_4);

}

//Напої

void CCursovaDlg::OnBnClickedButton5()

{

SetListName(menu_way_5);

}

void CCursovaDlg::OnBnClickedButton6()

{

order.clear();

clearOrderList();

}

void CCursovaDlg::OnBnClickedButton7()

{

if(m_static_total != 0)

MessageBox("Ваше замовлення принято!", "UserInterface :: OrderDone", MB_OK);

clearOrderList();

order.clear();

}

void CCursovaDlg::OnLbnSelchangeListName()

{

m_static_consist = vecBl[m_list_name.GetCurSel()].getConsist();

m_static_cost = vecBl[m_list_name.GetCurSel()].getCost();

UpdateData(FALSE);

}

void CCursovaDlg::OnLbnDblclkListName()

{

clearOrderList();

order.push_back(vecBl[m_list_name.GetCurSel()]);

for(orderIter = order.begin(); orderIter != order.end(); orderIter++){

m_list_order.AddString((*orderIter).getName());

m_static_total += (*orderIter).getCost();

}

UpdateData(FALSE);

}

wayDefines.h

#define menu_way_1 "menu\\menu1.dat"

#define menu_way_2 "menu\\menu2.dat"

#define menu_way_3 "menu\\menu3.dat"

#define menu_way_4 "menu\\menu4.dat"

#define menu_way_5 "menu\\menu5.dat"

Bleed.h

#include "stdafx.h"

#define n 16

#define m 255

class Bleed {

private:

int id;

char name[n];

char consist[m];

double cost;

public:

//constructors

Bleed();

Bleed(int, char*, char*, double);

//getters & setters

int getId();

char* getName();

char* getConsist();

double getCost();

void setId(int);

void setName(char*);

void setConsist(char*);

void setCost(double);

};

Bleed.cpp

#include "stdafx.h"

#include "Bleed.h"

//constructors

Bleed::Bleed(){

id = 0;

name[0] = '\0';

consist[0] = '\0';

cost = 0.0;

}

Bleed::Bleed(int _id, char* _name, char* _consist, double _cost){

id = _id;

memcpy(name, _name, n);

memcpy(consist, _consist, m);

cost = _cost;

}

//getter & setters

int Bleed::getId(){

return id;

}

char* Bleed::getName(){

return name;

}

char* Bleed::getConsist(){

return consist;

}

double Bleed::getCost(){

return cost;

}

void Bleed::setId(int _id){

id = _id;

}

void Bleed::setName(char* _name){

memcpy(name, _name, n);

}

void Bleed::setConsist(char* _consist){

memcpy(consist, _consist, m);

}

void Bleed::setCost(double _cost){

cost = _cost;

}

Додаток А2 Код програми: інтерфейс персоналу

ManagerInterfaceDlg.h

#pragma once

#include "afxcmn.h"

class CManagerInterfaceDlg : public CDialogEx

{

public:

CManagerInterfaceDlg(CWnd* pParent = NULL);

enum { IDD = IDD_MANAGERINTERFACE_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

HICON m_hIcon;

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

private:

CListCtrl m_list_control;

public:

void InitListControl();

void printInfoToListControl(char*);

afx_msg void OnBnClickedButton6();

afx_msg void OnBnClickedButton7();

afx_msg void OnBnClickedButton8();

afx_msg void OnBnClickedButton1();

afx_msg void OnBnClickedButton2();

afx_msg void OnBnClickedButton3();

afx_msg void OnBnClickedButton4();

afx_msg void OnBnClickedButton5();

};

ManagerInterfaceDlg.cpp

#include "stdafx.h"

#include "ManagerInterface.h"

#include "ManagerInterfaceDlg.h"

#include "afxdialogex.h"

#include "AddBleed.h" //для додавання новиї страв

#include "EditBleed.h" //для зміни даних про страву

#include "RemoveBleed.h" //для видалення страв з бази (файлу)

#include "Bleed.h" //бібліотека з класом, який описує страву

#include <fstream> //стандартна бібліотека для роботи з файлами

using namespace std;

#include "wayDefines.h" //оголошення деяких замін імен

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

/*----ГЛОБАЛЬНІ ЗМІННІ---*/

CAddBleed window_add;

CEditBleed window_edit;

CRemoveBleed window_remove;

ifstream databaseIn;

/*-----------------------*/

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

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

: CDialogEx(CManagerInterfaceDlg::IDD, pParent)

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CManagerInterfaceDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_LIST1, m_list_control);

}

BEGIN_MESSAGE_MAP(CManagerInterfaceDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON6, &CManagerInterfaceDlg::OnBnClickedButton6)

ON_BN_CLICKED(IDC_BUTTON7, &CManagerInterfaceDlg::OnBnClickedButton7)

ON_BN_CLICKED(IDC_BUTTON8, &CManagerInterfaceDlg::OnBnClickedButton8)

ON_BN_CLICKED(IDC_BUTTON1, &CManagerInterfaceDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2, &CManagerInterfaceDlg::OnBnClickedButton2)

ON_BN_CLICKED(IDC_BUTTON3, &CManagerInterfaceDlg::OnBnClickedButton3)

ON_BN_CLICKED(IDC_BUTTON4, &CManagerInterfaceDlg::OnBnClickedButton4)

ON_BN_CLICKED(IDC_BUTTON5, &CManagerInterfaceDlg::OnBnClickedButton5)

END_MESSAGE_MAP()

BOOL CManagerInterfaceDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

SetIcon(m_hIcon, TRUE);

SetIcon(m_hIcon, FALSE);

//Ініціалізація списку з стравами

InitListControl();

return TRUE;

}

void CManagerInterfaceDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx::OnSysCommand(nID, lParam);

}

}

void CManagerInterfaceDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this);

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<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

{

CDialogEx::OnPaint();

}

}

HCURSOR CManagerInterfaceDlg::OnQueryDragIcon()

{

return static_cast<HCURSOR>(m_hIcon);

}

//ініціалізація ListControl

void CManagerInterfaceDlg::InitListControl(){

m_list_control.InsertColumn(0, "Назва страви", LVCFMT_LEFT, 90, 0);

m_list_control.InsertColumn(1, "Склад страви", LVCFMT_LEFT, 284, 1);

m_list_control.InsertColumn(2, "Ціна", LVCFMT_RIGHT, 72, 2);

}

//Вивід даних з файлу з ім’ям (char*) _way в список страв

void CManagerInterfaceDlg::printInfoToListControl(char* _way){

Bleed *bl = new Bleed;

LVITEM lv;

int nItem = 0;

int itemCount = 0;

char *dest;

// //

m_list_control.DeleteAllItems();

databaseIn.open(_way, ios::binary);

while(true){

databaseIn.read(reinterpret_cast<char*>(bl),sizeof(*bl));

if(databaseIn.eof())

break;

dest = new char[16];

lv.mask = LVIF_TEXT;

lv.iItem = itemCount;

lv.iSubItem = 0;

lv.pszText = bl->getName();

nItem = m_list_control.InsertItem(&lv);

m_list_control.SetItemText(nItem, 1, (LPCTSTR) bl->getConsist());

sprintf(dest, "%.2f грн.", bl->getCost());

m_list_control.SetItemText(nItem, 2, (LPCTSTR) dest);

delete(dest);

}

databaseIn.close();

}

//Кнопка Додати

void CManagerInterfaceDlg::OnBnClickedButton6()

{

//запуск вікна для роботи з додаванням страв в базу (файл)

//в модальному режимі

window_add.DoModal();

}

//Кнопка Змінити

void CManagerInterfaceDlg::OnBnClickedButton7()

{

//запуск вікна для роботи з зміни даних про страву в базі (файлі)

//в модальному режимі

window_edit.DoModal();

}

//Кнопка Видалити

void CManagerInterfaceDlg::OnBnClickedButton8()

{

//запуск вікна для роботи з видаленням страв в базу (файл)

//в модальному режимі

window_remove.DoModal();

}

//Кнопка Гарячі страви

void CManagerInterfaceDlg::OnBnClickedButton1()

{

//вивід в список страв всі страву із файлу menu\menu1.dat

//#define "menu\\menu1.dat" menu_way_1

printInfoToListControl(menu_way_1);

}

//Кнопка Піца

void CManagerInterfaceDlg::OnBnClickedButton2()

{

//вивід в список страв всі страву із файлу menu\menu2.dat

//#define "menu\\menu2.dat" menu_way_2

printInfoToListControl(menu_way_2);

}

//Кнопка Салати

void CManagerInterfaceDlg::OnBnClickedButton3()

{

//вивід в список страв всі страву із файлу menu\menu3.dat

//#define "menu\\menu3.dat" menu_way_3

printInfoToListControl(menu_way_3);

}

//Кнопка Десерти

void CManagerInterfaceDlg::OnBnClickedButton4()

{

//вивід в список страв всі страву із файлу menu\menu4.dat

//#define "menu\\menu4.dat" menu_way_4

printInfoToListControl(menu_way_4);

}

//Кнопка Напої

void CManagerInterfaceDlg::OnBnClickedButton5()

{

//вивід в список страв всі страву із файлу menu\menu5.dat

//#define "menu\\menu5.dat" menu_way_5

printInfoToListControl(menu_way_5);

}

AddBleed.h

#pragma once

class CAddBleed : public CDialogEx

{

DECLARE_DYNAMIC(CAddBleed)

public:

CAddBleed(CWnd* pParent = NULL);

virtual ~CAddBleed();

enum { IDD = IDD_ADD_BLEED };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

DECLARE_MESSAGE_MAP()

public:

//Radio button//

bool m_radio_1;

bool m_radio_2;

bool m_radio_3;

bool m_radio_4;

bool m_radio_5;

////////////////

//Static text//

CString m_edit_name;

CString m_edit_consist;

double m_edit_cost;

CString m_static_status;

///////////////

bool AllInputed(); //ф-ція перевіряє чи все правильно

//введено користувачем

afx_msg void OnBnClickedRadio1();

afx_msg void OnBnClickedRadio2();

afx_msg void OnBnClickedRadio3();

afx_msg void OnBnClickedRadio4();

afx_msg void OnBnClickedRadio5();

afx_msg void OnBnClickedButtonAdd();

};

AddBleed.cpp

#include "stdafx.h"

#include "ManagerInterface.h"

#include "AddBleed.h"

#include "afxdialogex.h"

#include "Bleed.h"

#include "wayDefines.h"

#include <fstream>

using namespace std;

IMPLEMENT_DYNAMIC(CAddBleed, CDialogEx)

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

: CDialogEx(CAddBleed::IDD, pParent)

, m_radio_1(false)

, m_radio_2(false)

, m_radio_3(false)

, m_radio_4(false)

, m_radio_5(false)

, m_edit_name(_T(""))

, m_edit_consist(_T(""))

, m_edit_cost(0)

, m_static_status(_T(""))

{

}

CAddBleed::~CAddBleed()

{

}

void CAddBleed::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT1, m_edit_name);

DDX_Text(pDX, IDC_EDIT2, m_edit_consist);

DDX_Text(pDX, IDC_EDIT3, m_edit_cost);

DDX_Text(pDX, IDC_STATIC_STATUS, m_static_status);

}

BEGIN_MESSAGE_MAP(CAddBleed, CDialogEx)

ON_BN_CLICKED(IDC_BUTTON_ADD, &CAddBleed::OnBnClickedButtonAdd)

ON_BN_CLICKED(IDC_RADIO1, &CAddBleed::OnBnClickedRadio1)

ON_BN_CLICKED(IDC_RADIO2, &CAddBleed::OnBnClickedRadio2)

ON_BN_CLICKED(IDC_RADIO3, &CAddBleed::OnBnClickedRadio3)

ON_BN_CLICKED(IDC_RADIO4, &CAddBleed::OnBnClickedRadio4)

ON_BN_CLICKED(IDC_RADIO5, &CAddBleed::OnBnClickedRadio5)

END_MESSAGE_MAP()

bool CAddBleed::AllInputed(){

UpdateData(TRUE);

if(!m_radio_1 && !m_radio_2 && !m_radio_3 && !m_radio_4 && !m_radio_5){

m_static_status = "Не вибраний пункт меню!";

UpdateData(FALSE);

return false;

}

if(m_edit_name == ""){

m_static_status = "Не введено назву страви!";

UpdateData(FALSE);

return false;

}

if(m_edit_name.GetLength() > 15){

m_static_status = "Розмір назви страви не повинен перевищувати 15 символів!";

UpdateData(FALSE);

return false;

}

if(m_edit_consist == ""){

m_static_status = "Не введено склад страви!";

UpdateData(FALSE);

return false;

}

if(m_edit_consist.GetLength() > 255){

m_static_status = "Розмір складу страви не повинен перевищувати 255 символів!";

UpdateData(FALSE);

return false;

}

if(m_edit_cost == 0.0){

m_static_status = "Не введено ціну страви!";

UpdateData(FALSE);

return false;

}

m_static_status = "";

UpdateData(FALSE);

return true;

}

//Гарячі страви (m_radio_1)

void CAddBleed::OnBnClickedRadio1()

{

m_radio_1 = true;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = false;

}

//Піца (m_radio_2)

void CAddBleed::OnBnClickedRadio2()

{

m_radio_1 = false;

m_radio_2 = true;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = false;

}

//Салати (m_radio_3)

void CAddBleed::OnBnClickedRadio3()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = true;

m_radio_4 = false;

m_radio_5 = false;

}

//Десерти (m_radio_4)

void CAddBleed::OnBnClickedRadio4()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = true;

m_radio_5 = false;

}

//Напої (m_radio_5)

void CAddBleed::OnBnClickedRadio5()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = true;

}

//Додати

void CAddBleed::OnBnClickedButtonAdd()

{

//перевірка чи все паравильно введено

if(!AllInputed()){

return;

}

//оголошення всіх потрібних змінних для роботи ф-ції

Bleed *bl = new Bleed;

ifstream databaseIn;

ofstream databaseOut;

int count = 0;

char* way = new char[255];

bool FoundError = false;

//встановлення шляху до файлу відповідно до вибору користувача

if(m_radio_1) strcpy(way, menu_way_1);

if(m_radio_2) strcpy(way, menu_way_2);

if(m_radio_3) strcpy(way, menu_way_3);

if(m_radio_4) strcpy(way, menu_way_4);

if(m_radio_5) strcpy(way, menu_way_5);

//відкриття бази і пошук максимального ID страви

databaseIn.open(way, ios::binary);

while(true){

databaseIn.read(reinterpret_cast<char*>(bl), sizeof(*bl));

if(databaseIn.eof())

break;

if(strcmp(bl->getName(),m_edit_name.GetBuffer()) == 0){

m_static_status = "Страва з таким іменем вже існує!";

UpdateData(FALSE);

FoundError = true;

break;

}

if(strcmp(bl->getConsist(),m_edit_consist.GetBuffer()) == 0){

m_static_status = "Страва з таким складом вже існує!";

UpdateData(FALSE);

FoundError = true;

break;

}

count++;

}

delete(bl);

databaseIn.close();

if(FoundError)

return;

//ініціалізація об’єкта відносно даних користувача

bl = new Bleed(count, m_edit_name.GetBuffer(), m_edit_consist.GetBuffer(), m_edit_cost);

//запис в кінець файлу об’єкт Bleed

databaseOut.open(way, ios::binary | ios::app);

databaseOut.write(reinterpret_cast<char*>(bl), sizeof(*bl));

m_edit_name = _T("");

m_edit_consist = _T("");

m_edit_cost = 0;

m_static_status = "Базу успішно оновлено!";

UpdateData(FALSE);

delete(bl);

databaseOut.close();

}

EditBleed.h

#pragma once

class CEditBleed : public CDialogEx

{

DECLARE_DYNAMIC(CEditBleed)

public:

CEditBleed(CWnd* pParent = NULL);

virtual ~CEditBleed();

enum { IDD = IDD_EDIT_BLEED };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

DECLARE_MESSAGE_MAP()

public:

bool m_radio_1;

bool m_radio_2;

bool m_radio_3;

bool m_radio_4;

bool m_radio_5;

CString m_edit_name;

CString m_edit_consist;

CString m_static_status;

double m_edit_cost;

bool AllInputedForFound();

bool AllInputed();

afx_msg void OnBnClickedButton2();

afx_msg void OnBnClickedRadio1();

afx_msg void OnBnClickedRadio2();

afx_msg void OnBnClickedRadio3();

afx_msg void OnBnClickedRadio4();

afx_msg void OnBnClickedRadio5();

afx_msg void OnBnClickedButton1();

};

EditBleed.cpp

#include "stdafx.h"

#include "ManagerInterface.h"

#include "EditBleed.h"

#include "afxdialogex.h"

#include <vector>

#include <fstream>

using namespace std;

#include "Bleed.h"

#include "wayDefines.h"

Bleed *GLOBAL_BLEED = new Bleed;

vector<Bleed> vecBl;

vector<Bleed>::iterator vecIter;

bool Found = false;

IMPLEMENT_DYNAMIC(CEditBleed, CDialogEx)

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

: CDialogEx(CEditBleed::IDD, pParent)

, m_radio_1(false)

, m_radio_2(false)

, m_radio_3(false)

, m_radio_4(false)

, m_radio_5(false)

, m_edit_name(_T(""))

, m_edit_consist(_T(""))

, m_edit_cost(0)

, m_static_status(_T(""))

{

}

CEditBleed::~CEditBleed()

{

}

void CEditBleed::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT1, m_edit_name);

DDX_Text(pDX, IDC_EDIT2, m_edit_consist);

DDX_Text(pDX, IDC_EDIT3, m_edit_cost);

DDX_Text(pDX, IDC_STATIC_STATUS, m_static_status);

}

BEGIN_MESSAGE_MAP(CEditBleed, CDialogEx)

ON_BN_CLICKED(IDC_BUTTON2, &CEditBleed::OnBnClickedButton2)

ON_BN_CLICKED(IDC_RADIO1, &CEditBleed::OnBnClickedRadio1)

ON_BN_CLICKED(IDC_RADIO2, &CEditBleed::OnBnClickedRadio2)

ON_BN_CLICKED(IDC_RADIO3, &CEditBleed::OnBnClickedRadio3)

ON_BN_CLICKED(IDC_RADIO4, &CEditBleed::OnBnClickedRadio4)

ON_BN_CLICKED(IDC_RADIO5, &CEditBleed::OnBnClickedRadio5)

ON_BN_CLICKED(IDC_BUTTON1, &CEditBleed::OnBnClickedButton1)

END_MESSAGE_MAP()

bool CEditBleed::AllInputedForFound(){

UpdateData(TRUE);

if(!m_radio_1 && !m_radio_2 && !m_radio_3 && !m_radio_4 && !m_radio_5){

m_static_status = "Не вибраний пункт меню!";

UpdateData(FALSE);

return false;

}

if(m_edit_name == ""){

m_static_status = "Не введено назву страви!";

UpdateData(FALSE);

return false;

}

if(m_edit_name.GetLength() > 16){

m_static_status = "Розмір назви страви не повинен перевищувати 15 символів!";

UpdateData(FALSE);

return false;

}

return true;

}

bool CEditBleed::AllInputed(){

if(!AllInputedForFound())

return false;

if(m_edit_consist == ""){

m_static_status = "Не введено склад страви!";

UpdateData(FALSE);

return false;

}

if(m_edit_consist.GetLength() > 255){

m_static_status = "Розмір складу страви не повинен перевищувати 255 символів!";

UpdateData(FALSE);

return false;

}

if(m_edit_cost == 0.0){

m_static_status = "Не введено ціну страви!";

UpdateData(FALSE);

return false;

}

m_static_status = "";

UpdateData(FALSE);

return true;

}

//Гарячі страви (m_radio_1)

void CEditBleed::OnBnClickedRadio1()

{

m_radio_1 = true;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = false;

}

//Піца (m_radio_2)

void CEditBleed::OnBnClickedRadio2()

{

m_radio_1 = false;

m_radio_2 = true;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = false;

}

//Салати (m_radio_3)

void CEditBleed::OnBnClickedRadio3()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = true;

m_radio_4 = false;

m_radio_5 = false;

}

//Десерти (m_radio_4)

void CEditBleed::OnBnClickedRadio4()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = true;

m_radio_5 = false;

}

//Напої (m_radio_5)

void CEditBleed::OnBnClickedRadio5()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = true;

}

//знайти

void CEditBleed::OnBnClickedButton2()

{

//перевірка чи все паравильно введено для пошуку

if(!AllInputedForFound())

return;

//всі необхідні змінні для ф-ції

ifstream databaseIn;

Bleed *bl = new Bleed;

char* way = new char[255];

Found = false;

//встановлення шляху до файлу відповідно до вибору користувача

if(m_radio_1) strcpy(way, menu_way_1);

if(m_radio_2) strcpy(way, menu_way_2);

if(m_radio_3) strcpy(way, menu_way_3);

if(m_radio_4) strcpy(way, menu_way_4);

if(m_radio_5) strcpy(way, menu_way_5);

//відкриваєм базу, пробігаємся по ній і перевіряєм чи не найдено збігів

databaseIn.open(way, ios::binary);

while(true){

databaseIn.read(reinterpret_cast<char*>(bl), sizeof(*bl));

if(databaseIn.eof())

break;

if(strcmp(bl->getName(), m_edit_name.GetBuffer()) == 0){

Found = true;

m_edit_consist = bl->getConsist();

m_edit_cost = bl->getCost();

UpdateData(FALSE);

}

}

databaseIn.close();

//якщо не знайдено збігів - повідомити користувача про це і обновити інтерфейс

if(!Found){

//очистка інтерфейсу

m_edit_consist = _T("");

m_edit_cost = 0;

//повідомлення для користувача

m_static_status = "Такої страви не знайдено!";

UpdateData(FALSE);

}else{

m_static_status = "";

UpdateData(FALSE);

}

}

//змінити

void CEditBleed::OnBnClickedButton1()

{

//перевірка чи все правильно введено

if(!AllInputed())

return;

//якщо користувач не натискав на кнопку "знайти"

if(!Found){

OnBnClickedButton2();

}

//якщо знайдено таку страву

if(Found){

//ініціалізація усіх необхідних змінних

vecIter = vecBl.begin();

ifstream databaseIn;

ofstream databaseOut;

char* way = new char[255];

Bleed *bl = new Bleed;

vecBl.clear();

//встановлення шляху до файлу відповідно до вибору користувача

if(m_radio_1) strcpy(way, menu_way_1);

if(m_radio_2) strcpy(way, menu_way_2);

if(m_radio_3) strcpy(way, menu_way_3);

if(m_radio_4) strcpy(way, menu_way_4);

if(m_radio_5) strcpy(way, menu_way_5);

//зчитування даних з файлу

//замінити дані страви, введеної користувачем

databaseIn.open(way, ios::binary);

while(true){

databaseIn.read(reinterpret_cast<char*>(bl), sizeof(*bl));

if(databaseIn.eof())

break;

if(strcmp(bl->getName(), m_edit_name) != 0)

vecBl.push_back(*bl);

else{

vecBl.push_back(Bleed(bl->getId(), m_edit_name.GetBuffer(), m_edit_consist.GetBuffer(), m_edit_cost));

}

}

databaseIn.close();

//перезапис даних у файл

databaseOut.open(way, ios::trunc);

databaseOut.close();

databaseOut.open(way, ios::binary | ios::app);

for(vecIter = vecBl.begin(); vecIter != vecBl.end(); vecIter++){

databaseOut.write(reinterpret_cast<char*>(&(*vecIter)),sizeof(*vecIter));

}

databaseOut.close();

m_static_status = "Базу успішно обновлено!";

UpdateData(FALSE);

}

// TODO: добавьте свой код обработчика уведомлений

}

RemoveBleed.h

#pragma once

class CRemoveBleed : public CDialogEx

{

DECLARE_DYNAMIC(CRemoveBleed)

public:

CRemoveBleed(CWnd* pParent = NULL);

virtual ~CRemoveBleed();

enum { IDD = IDD_REMOVE_BLEED };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

DECLARE_MESSAGE_MAP()

public:

bool m_radio_1;

bool m_radio_2;

bool m_radio_3;

bool m_radio_4;

bool m_radio_5;

CString m_edit_name;

CString m_static_status;

bool AllInputed();

afx_msg void OnBnClickedRadio1();

afx_msg void OnBnClickedRadio2();

afx_msg void OnBnClickedRadio3();

afx_msg void OnBnClickedRadio4();

afx_msg void OnBnClickedRadio5();

afx_msg void OnBnClickedButton1();

};

RemoveBleed.cpp

#include "stdafx.h"

#include "ManagerInterface.h"

#include "RemoveBleed.h"

#include "afxdialogex.h"

#include <vector>

#include <fstream>

using namespace std;

#include "Bleed.h"

#include "wayDefines.h"

vector<Bleed> vecBlR;

vector<Bleed>::iterator vecIterR;

IMPLEMENT_DYNAMIC(CRemoveBleed, CDialogEx)

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

: CDialogEx(CRemoveBleed::IDD, pParent)

, m_radio_1(false)

, m_radio_2(false)

, m_radio_3(false)

, m_radio_4(false)

, m_radio_5(false)

, m_edit_name(_T(""))

, m_static_status(_T(""))

{

}

CRemoveBleed::~CRemoveBleed()

{

}

void CRemoveBleed::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT1, m_edit_name);

DDX_Text(pDX, IDC_STATIC_STATUS, m_static_status);

}

BEGIN_MESSAGE_MAP(CRemoveBleed, CDialogEx)

ON_BN_CLICKED(IDC_RADIO5, &CRemoveBleed::OnBnClickedRadio5)

ON_BN_CLICKED(IDC_RADIO1, &CRemoveBleed::OnBnClickedRadio1)

ON_BN_CLICKED(IDC_RADIO2, &CRemoveBleed::OnBnClickedRadio2)

ON_BN_CLICKED(IDC_RADIO3, &CRemoveBleed::OnBnClickedRadio3)

ON_BN_CLICKED(IDC_RADIO4, &CRemoveBleed::OnBnClickedRadio4)

ON_BN_CLICKED(IDC_BUTTON1, &CRemoveBleed::OnBnClickedButton1)

END_MESSAGE_MAP()

//Гарячі страви (m_radio_1)

void CRemoveBleed::OnBnClickedRadio1()

{

m_radio_1 = true;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = false;

}

//Піца (m_radio_2)

void CRemoveBleed::OnBnClickedRadio2()

{

m_radio_1 = false;

m_radio_2 = true;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = false;

}

//Салати (m_radio_3)

void CRemoveBleed::OnBnClickedRadio3()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = true;

m_radio_4 = false;

m_radio_5 = false;

}

//Десерти (m_radio_4)

void CRemoveBleed::OnBnClickedRadio4()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = true;

m_radio_5 = false;

}

//Напої (m_radio_5)

void CRemoveBleed::OnBnClickedRadio5()

{

m_radio_1 = false;

m_radio_2 = false;

m_radio_3 = false;

m_radio_4 = false;

m_radio_5 = true;

}

bool CRemoveBleed::AllInputed(){

UpdateData(TRUE);

if(!m_radio_1 && !m_radio_2 && !m_radio_3 && !m_radio_4 && !m_radio_5){

m_static_status = "Не вибрано пункт меню!";

UpdateData(FALSE);

return false;

}

if(m_edit_name == ""){

m_static_status = "Не введено назву страви!";

UpdateData(FALSE);

return false;

}

if(m_edit_name.GetLength() > 15){

m_static_status = "Максимум 15 символів!";

UpdateData(FALSE);

return false;

}

m_static_status = "";

UpdateData(FALSE);

return true;

}

//видалити

void CRemoveBleed::OnBnClickedButton1()

{

//ofstream DELETE_BASE(menu_way_1, ios::trunc);

//return;

//перевірка чи все правильно введено

if(!AllInputed())

return;

//необхідні змінні для проведення операцій

vecBlR.clear();

ifstream databaseIn;

ofstream databaseOut;

Bleed *bl = new Bleed;

char* way = new char[255];

bool Found = false;

int count = 0;

//встановлення шляху до файлу відповідно до вибору користувача

if(m_radio_1) strcpy(way, menu_way_1);

if(m_radio_2) strcpy(way, menu_way_2);

if(m_radio_3) strcpy(way, menu_way_3);

if(m_radio_4) strcpy(way, menu_way_4);

if(m_radio_5) strcpy(way, menu_way_5);

//занесення всього меню БЕЗ шуканого у вектор із БД

databaseIn.open(way, ios::binary);

while(true){

databaseIn.read(reinterpret_cast<char*>(bl), sizeof(*bl));

if(databaseIn.eof())

break;

if(strcmp(bl->getName(), m_edit_name.GetBuffer()) != 0){

if(Found){

bl->setId(count++);

}

vecBlR.push_back(*bl);

bl = new Bleed;

}else{

Found = true;

count = bl->getId();

}

}

databaseIn.close();

//перезапис бази даних якщо це потрібно

if(Found){

databaseOut.open(way, ios::trunc);

databaseOut.close();

databaseOut.open(way, ios::binary | ios::app);

for(int i = 0 ; i < vecBlR.size(); i++){

bl = &vecBlR[i];

databaseOut.write(reinterpret_cast<char*>(bl), sizeof(*bl));

}

databaseOut.close();

m_static_status = "Базу успішно обновлено!";

}else{

m_static_status = "Такої страви в меню немає!";

}

vecBlR.clear();

UpdateData(FALSE);

}

Bleed.h

#include "stdafx.h"

#define n 16

#define m 255

class Bleed {

private:

int id;

char name[n];

char consist[m];

double cost;

public:

//constructors

Bleed();

Bleed(int, char*, char*, double);

//getters & setters

int getId();

char* getName();

char* getConsist();

double getCost();

void setId(int);

void setName(char*);

void setConsist(char*);

void setCost(double);

};

Bleed.cpp

#include "stdafx.h"

#include "Bleed.h"

//constructors

Bleed::Bleed(){

id = 0;

name[0] = '\0';

consist[0] = '\0';

cost = 0.0;

}

Bleed::Bleed(int _id, char* _name, char* _consist, double _cost){

id = _id;

memcpy(name, _name, n);

memcpy(consist, _consist, m);

cost = _cost;

}

//getter & setters

int Bleed::getId(){

return id;

}

char* Bleed::getName(){

return name;

}

char* Bleed::getConsist(){

return consist;

}

double Bleed::getCost(){

return cost;

}

void Bleed::setId(int _id){

id = _id;

}

void Bleed::setName(char* _name){

memcpy(name, _name, n);

}

void Bleed::setConsist(char* _consist){

memcpy(consist, _consist, m);

}

void Bleed::setCost(double _cost){

cost = _cost;

}

wayDefine.h

#define menu_way_1 "menu\\menu1.dat"

#define menu_way_2 "menu\\menu2.dat"

#define menu_way_3 "menu\\menu3.dat"

#define menu_way_4 "menu\\menu4.dat"

#define menu_way_5 "menu\\menu5.dat"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]