#include "Hematology_CounterDoc.h"
#include "Hematology_CounterView.h"
#include "Form.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
IMPLEMENT_DYNCREATE(CHematology_CounterView, CFormView)
BEGIN_MESSAGE_MAP(CHematology_CounterView, CFormView)
ON_WM_DESTROY()
ON_WM_CREATE()
ON_COMMAND_RANGE(ID_LEIKOFORMULA,ID_MIELOGRAMMA,&CHematology_CounterView::OnDATA)
END_MESSAGE_MAP()
CHematology_CounterView::CHematology_CounterView()
: CFormView(CHematology_CounterView::IDD),dForm(NULL)
{
}
CHematology_CounterView::~CHematology_CounterView()
{
if(dForm){delete dForm;dForm=NULL;}
}
void CHematology_CounterView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
if(dForm)dForm->UpdateData(0);
}
BOOL CHematology_CounterView::PreCreateWindow(CREATESTRUCT& cs)
{
return CFormView::PreCreateWindow(cs);
}
void CHematology_CounterView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
CHematology_CounterDoc* Doc=GetDocument();
if(!Leikoformula::Create(&dForm,&Doc->DATA))return;
dForm->Create(IDD_FORM_LEIKOFORMULA,this);
CreateMenuParametre(IDR_LEIKOFORMULA);
}
#ifdef _DEBUG
void CHematology_CounterView::AssertValid() const
{
CFormView::AssertValid();
}
void CHematology_CounterView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CHematology_CounterDoc* CHematology_CounterView::GetDocument() const
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHematology_CounterDoc)));
return (CHematology_CounterDoc*)m_pDocument;
}
#endif
void CHematology_CounterView::OnDestroy()
{
dForm->DestroyWindow();
if(dForm){delete dForm;dForm=NULL;}
CFormView::OnDestroy();
}
int CHematology_CounterView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)return -1;
return 0;
}
void CHematology_CounterView::OnDATA(UINT id)
{
CHematology_CounterDoc* Doc=GetDocument();
switch(id)
{
case ID_LEIKOFORMULA:
{
if(!Leikoformula::Create(&dForm,&Doc->DATA))return;
}
break;
case ID_TROMBOCITY:
{
if(!Trombocity::Create(&dForm,&Doc->DATA))return;
break;
}
case ID_MIELOGRAMMA:
if(!Mielogramma::Create(&dForm,&Doc->DATA))return;
break;
}
CreateMenuParametre(IDR_LEIKOFORMULA+id-ID_LEIKOFORMULA);
dForm->Create(IDD_FORM_LEIKOFORMULA+id-ID_LEIKOFORMULA,this);
Doc->Undo.RemoveAll();
}
void CHematology_CounterView::CreateMenuParametre(UINT ID)
{
CMenu** parametres=&(((CMainFrame*)AfxGetMainWnd())->ParametresMenu);
if((*parametres)){(*parametres)->DestroyMenu();delete (*parametres);}
(*parametres)=new CMenu;
(*parametres)->LoadMenuW(ID);
AfxGetMainWnd()->GetMenu()->ModifyMenuW(2,MF_BYPOSITION| MF_POPUP ,(UINT_PTR)((*parametres)->m_hMenu),L"Параметры");
DestroyAcceleratorTable(((CMainFrame*)AfxGetMainWnd())->m_hAccelTable);
((CMainFrame*)AfxGetMainWnd())->m_hAccelTable=LoadAccelerators(AfxGetApp()->m_hInstance,MAKEINTRESOURCEW(ID));
AfxGetMainWnd()->GetMenu()->CheckMenuRadioItem(ID_LEIKOFORMULA,ID_MIELOGRAMMA,ID_LEIKOFORMULA+ID-IDR_LEIKOFORMULA,MF_BYCOMMAND);
((CMainFrame*)AfxGetMainWnd())->ParametresToolBar.LoadToolBar(ID);
}
Представление и определение класса Data
#pragma once
class Data
{
protected:
Data();
public:
virtual ~Data();
virtual void RemoveAll()=0;
virtual bool Add(int*)=0;
virtual void Remove()=0;
};
Реализация класса Data
#include "StdAfx.h"
#include "Data.h"
Data::Data(){}
Data::~Data(){}
Представление и определение класса Leikoformula
#pragma once
#include "Data.h"
class CDialog;
class Leikoformula: public Data
{
private:
int Sum;
public:
Leikoformula();
int & GetSum();
static bool Create(CDialog ** dForm,Data** pData);
virtual void RemoveAll();
virtual bool Add(int * pLeikoformula);
virtual void Remove();
int NORMOBLAST;
int PALOCHKOYADERN;
int SEGMEHTARN;
int MONOCIT;
int LIMFOCIT;
int MIELOCIT;
int METAMELOCIT;
int EOZILOFIL;
int BAZOFIL;
};
Реализация класса Leikoformula
#include "StdAfx.h"
#include "Leikoformula.h"
#include "Form.h"
Leikoformula::Leikoformula():Data(),PALOCHKOYADERN(0),SEGMEHTARN(0),MONOCIT(0),LIMFOCIT(0),MIELOCIT(0),METAMELOCIT(0),EOZILOFIL(0),BAZOFIL(0),NORMOBLAST(0),Sum(0)
{
}
int & Leikoformula::GetSum()
{
return Sum;
}
void Leikoformula::RemoveAll()
{
PALOCHKOYADERN=SEGMEHTARN=MONOCIT=LIMFOCIT=MIELOCIT=METAMELOCIT=EOZILOFIL=BAZOFIL=NORMOBLAST=Sum=0;
}
bool Leikoformula::Add(int * pLeikoformula)
{
if(100<=Sum)return false;
Sum++;
(*pLeikoformula)++;
return true;
}
void Leikoformula::Remove()
{
if(0<Sum)Sum--;
}
bool Leikoformula::Create(CDialog ** dForm,Data** pData)
{
if((*dForm)&&(*dForm)->IsKindOf(RUNTIME_CLASS(Form_Leikoformula)))return false;
if((*dForm)){(*dForm)->DestroyWindow();delete (*dForm);(*dForm)=0;}
(*dForm)=new Form_Leikoformula();
if((*pData)){delete (*pData);(*pData)=0;}
(*pData)=new Leikoformula;
((Form_Leikoformula*)*dForm)->pData=(*pData);
return true;
}
Реализация класса Mielogramma
#include "StdAfx.h"
#include "Mielogramma.h"
#include "Form.h"
Mielogramma::Mielogramma():Data(),PALOCHKOYADERN(0),SEGMEHTARN(0),MONOCIT(0),LIMFOCIT(0),MIELOCIT(0),METAMELOCIT(0),EOZILOFIL(0),BAZOFIL(0)
,_9(0)
,_10(0)
,_11(0)
,_12(0)
,_13(0)
,_14(0)
,_15(0)
,_16(0)
,_17(0)
,_18(0)
,_19(0)
,_20(0)
,_21(0)
,_22(0)
,_23(0)
,_24(0)
{
}
Mielogramma::~Mielogramma(){}
bool Mielogramma::Create(CDialog ** dForm,Data** pData)
{
if((*dForm)&&(*dForm)->IsKindOf(RUNTIME_CLASS(Form_Mielogramma)))return false;
(*dForm)->DestroyWindow();
if((*dForm)){delete (*dForm);(*dForm)=0;}
(*dForm)=new Form_Mielogramma();
if((*pData)){delete (*pData);(*pData)=0;}
(*pData)=new Mielogramma;
((Form_Mielogramma*)*dForm)->pData=(*pData);
return true;
}
void Mielogramma::RemoveAll()
{
PALOCHKOYADERN=SEGMEHTARN=MONOCIT=LIMFOCIT=MIELOCIT=METAMELOCIT=EOZILOFIL=BAZOFIL=_9=_10=_11=_12=_13=_14=_15=_16=_17=_18=_19=_20=_21=_22=_23=_24=0;
}
bool Mielogramma::Add(int * pMielogramma)
{
(*pMielogramma)++;
return true;
}
void Mielogramma::Remove(){}
Представление и определение класса Trombocity
#pragma once
#include "Data.h"
class Data;
class CDialog;
class Trombocity: public Data
{
public:
Trombocity();
~Trombocity();
static bool Create(CDialog ** dForm,Data** pData);
virtual void RemoveAll();
virtual bool Add(int * pTrombocity);
virtual void Remove();
};
Реализация класса Trombocity
#include "StdAfx.h"
#include "Trombocity.h"
#include "Form.h"
Trombocity::Trombocity():Data(){}
Trombocity::~Trombocity(){}
bool Trombocity::Create(CDialog ** dForm,Data** pData)
{
if((*dForm)&&(*dForm)->IsKindOf(RUNTIME_CLASS(Form_Trombocity)))return false;
(*dForm)->DestroyWindow();
if((*dForm)){delete (*dForm);(*dForm)=0;}
(*dForm)=new Form_Trombocity();
if((*pData)){delete (*pData);(*pData)=0;}
(*pData)=new Trombocity;
((Form_Trombocity*)*dForm)->pData=(*pData);
return true;
}
void Trombocity::RemoveAll(){}
bool Trombocity::Add(int * pTrombocity){return 1;}
void Trombocity::Remove(){}
Представление и определение классов: Form_Leikoformula, Form_Mielogramma, Form_Trombocity.
#pragma once
#include "resource.h"
class Data;
class Form_Leikoformula : public CDialog
{
DECLARE_DYNAMIC(Form_Leikoformula)
public:
Form_Leikoformula(CWnd* pParent = NULL); // standard constructor
virtual ~Form_Leikoformula();
enum { IDD = IDD_FORM_LEIKOFORMULA };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
Data * pData;
};
class Form_Mielogramma : public CDialog
{
DECLARE_DYNAMIC(Form_Mielogramma)
public:
Form_Mielogramma(CWnd* pParent = NULL); // standard constructor
virtual ~Form_Mielogramma();
enum { IDD = IDD_FORM_MIELOGRAMMA };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
Data * pData;
};
class Form_Trombocity : public CDialog
{
DECLARE_DYNAMIC(Form_Trombocity)
public:
Form_Trombocity(CWnd* pParent = NULL); // standard constructor
virtual ~Form_Trombocity();
enum { IDD = IDD_FORM_TROMBOCITY };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
Data * pData;
};
Реализация классов: Form_Leikoformula, Form_Mielogramma, Form_Trombocity.
#include "stdafx.h"
#include "Hematology_Counter.h"
#include "Form.h"
#include "Leikoformula.h"
IMPLEMENT_DYNAMIC(Form_Leikoformula, CDialog)
Form_Leikoformula::Form_Leikoformula(CWnd* pParent /*=NULL*/)
: CDialog(Form_Leikoformula::IDD, pParent),pData(NULL)
{
}
Form_Leikoformula::~Form_Leikoformula()
{
}
void Form_Leikoformula::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
if(!pData)return;
Leikoformula* LEIKOFORMULA=(Leikoformula*)pData;
DDX_Text(pDX, IDC_STATIC_PALOCHKOYADERN,LEIKOFORMULA->PALOCHKOYADERN);
DDX_Text(pDX, IDC_STATIC_SEGMEHTARN,LEIKOFORMULA->SEGMEHTARN);
DDX_Text(pDX, IDC_STATIC_MONOCIT, LEIKOFORMULA->MONOCIT);
DDX_Text(pDX, IDC_STATIC_LIMFOCIT, LEIKOFORMULA->LIMFOCIT);
DDX_Text(pDX, IDC_STATIC_MIELOCIT,LEIKOFORMULA->MIELOCIT);
DDX_Text(pDX, IDC_STATIC_METAMELOCIT, LEIKOFORMULA->METAMELOCIT);
DDX_Text(pDX, IDC_STATIC_EOZILOFIL,LEIKOFORMULA->EOZILOFIL);
DDX_Text(pDX, IDC_STATIC_BAZOFIL, LEIKOFORMULA->BAZOFIL);
DDX_Text(pDX, IDC_STATIC_NORMOBLAST,LEIKOFORMULA->NORMOBLAST);
DDX_Text(pDX, IDC_STATIC_SUM, LEIKOFORMULA->GetSum());
}
BEGIN_MESSAGE_MAP(Form_Leikoformula, CDialog)
END_MESSAGE_MAP()
#include "Mielogramma.h"
IMPLEMENT_DYNAMIC(Form_Mielogramma, CDialog)
Form_Mielogramma::Form_Mielogramma(CWnd* pParent /*=NULL*/)
: CDialog(Form_Mielogramma::IDD, pParent),pData(NULL)
{
}
Form_Mielogramma::~Form_Mielogramma()
{
}
void Form_Mielogramma::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
if(!pData)return;
Mielogramma* MIELOGRAMMA=(Mielogramma*)pData;
DDX_Text(pDX, IDC_STATIC_PALOCHKOYADERN,MIELOGRAMMA->PALOCHKOYADERN);
DDX_Text(pDX, IDC_STATIC_SEGMEHTARN,MIELOGRAMMA->SEGMEHTARN);
DDX_Text(pDX, IDC_STATIC_MONOCIT, MIELOGRAMMA->MONOCIT);
DDX_Text(pDX, IDC_STATIC_LIMFOCIT, MIELOGRAMMA->LIMFOCIT);
DDX_Text(pDX, IDC_STATIC_MIELOCIT,MIELOGRAMMA->MIELOCIT);
DDX_Text(pDX, IDC_STATIC_METAMELOCIT, MIELOGRAMMA->METAMELOCIT);
DDX_Text(pDX, IDC_STATIC_EOZILOFIL,MIELOGRAMMA->EOZILOFIL);
DDX_Text(pDX, IDC_STATIC_BAZOFIL, MIELOGRAMMA->BAZOFIL);
DDX_Text(pDX, IDC_STATIC_9,MIELOGRAMMA->_9);
DDX_Text(pDX, IDC_STATIC_10,MIELOGRAMMA->_10);
DDX_Text(pDX, IDC_STATIC_11, MIELOGRAMMA->_11);
DDX_Text(pDX, IDC_STATIC_12, MIELOGRAMMA->_12);
DDX_Text(pDX, IDC_STATIC_13,MIELOGRAMMA->_13);
DDX_Text(pDX, IDC_STATIC_14, MIELOGRAMMA->_14);
DDX_Text(pDX, IDC_STATIC_15,MIELOGRAMMA->_15);
DDX_Text(pDX, IDC_STATIC_16,MIELOGRAMMA->_16);
DDX_Text(pDX, IDC_STATIC_17,MIELOGRAMMA->_17);
DDX_Text(pDX, IDC_STATIC_18, MIELOGRAMMA->_18);
DDX_Text(pDX, IDC_STATIC_19, MIELOGRAMMA->_19);
DDX_Text(pDX, IDC_STATIC_20,MIELOGRAMMA->_20);
DDX_Text(pDX, IDC_STATIC_21, MIELOGRAMMA->_21);
DDX_Text(pDX, IDC_STATIC_22,MIELOGRAMMA->_22);
DDX_Text(pDX, IDC_STATIC_23,MIELOGRAMMA->_23);
DDX_Text(pDX, IDC_STATIC_24,MIELOGRAMMA->_24);
}
BEGIN_MESSAGE_MAP(Form_Mielogramma, CDialog)
END_MESSAGE_MAP()
#include "Trombocity.h"
IMPLEMENT_DYNAMIC(Form_Trombocity, CDialog)
Form_Trombocity::Form_Trombocity(CWnd* pParent /*=NULL*/)
: CDialog(Form_Trombocity::IDD, pParent),pData(NULL)
{
}
Form_Trombocity::~Form_Trombocity()
{
}
void Form_Trombocity::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
if(!pData)return;
}
BEGIN_MESSAGE_MAP(Form_Trombocity, CDialog)
END_MESSAGE_MAP()
Приложение Ж – ОБОСНОВАНИЕ МОДЕЛИ ВЫБОРА ЖИЗНЕННОГО ЦИКЛА
Таблица Е.1 - Выбор модели ЖЦ на основе характеристик требований
Требования | Каскадная | V-образная | Прото-типиро-вание | Спиральная | RAD | Инкрементная |
Являются ли требования легко определимыми и/или хорошо известными | Да | Да | Нет | Нет | Да | Нет |
Могут ли требования заранее определятся в цикле | Да | Да | Нет | Нет | Да | Да |
Часто ли изменяются требования в цикле | Нет | Нет | Да | Да | Нет | Нет |
Нужно ли демонстрировать требования с целью определения | Нет | Нет | Да | Да | Да | Нет |
Требуется ли демонстрация возможностей проверка концепции | Нет | Нет | Да | Да | Да | Нет |
Будут ли требования отражать сложность системы | Нет | Нет | Да | Да | Нет | Да |
Обладает ли требование функциональными свойствами на раннем этапе | Нет | Нет | Да | Да | Да | Да |
Таблица Е.2 - Выбор модели ЖЦ на основе характеристик участников команды разработчиков
Команда разработчиков проекта | Каскадная | V- образная | Прото-типиро-вание | Спиральная | RAD | Инкрементная |
Являются ли проблемы предметной области проекта новыми для большинства разработчиков | Нет | Нет | Да | Да | Нет | Нет |
Является ли технология предметной области проекта новой для большинства разработчиков | Да | Да | Нет | Да | Да | Да |
Являются ли инструменты, используемые проектом, новыми для большинства разработчиков | Да | Да | Нет | Да | Да | Нет |
Изменяются ли роли участников проекта во время ЖЦ | Нет | Нет | Да | Да | Нет | Да |
Могут ли разработчики проекта пройти обучение | Нет | Да | Нет | Нет | Да | Да |
Является ли структура более значимой для разработчиков, чем гибкость | Да | Да | Нет | Нет | Да | Да |
Будет ли менеджер проекта строго отслеживать прогресс проекта | Да | Да | Нет | Да | Нет | Да |
Важна легкость распределения ресурсов | Да | Да | Нет | Нет | Да | Да |
Приемлет ли команда равноправные обзоры инспекций, менеджмент/обзоры заказчиков, а так же стадии | Да | Да | Да | Да | Да | Да |
Таблица В.З - Выбор модели ЖЦ на основе характеристик типа проектов и рисков