Министерство образования и науки, молодежи и спорта Украины
ГВУЗ ДонНТУ Институт информатики и искусственного интеллекта
Д6.050103.1.01.09/256.ЛР
Лабораторная работа № 3
по курсу: «Конструирование программного обеспечения»
Тема: «Конструирование приложений MFC в архитектуре документ-вид»
Выполнил: ст.гр. ПОC-09в
Г ончаренко А.И.
(дата, подпись)
Проверили:
асс. Анипко Г.Н.
(дата, подпись)
а сс. Курило Е. В.
(дата, подпись)
Донецк–2011 г.
Задание:
С использованием AppWizard создать SDI (нечетные номера по журналу) или MDI (четные номера) приложение для работы с документом определенного типа.
Документ имеет расширение YХХ (где Y – номер группы A,B или C, а ХХ - номер по журналу) и содержит название группы, список фамилий и имен студентов группы в порядке возрастания их номеров, а также средний балл ECTS (0-100) и количество пропусков занятий для каждого из студентов. Переопределить сериализацию документа и протестировать сохранение и загрузку документа.
Реализовать отображение (вид) отсортированного списка студентов группы в определенном порядке: Фамилия (возрастание).
Приложение отображает в заголовке название документа, название группы и количество студентов в документе (переопределить метод SetTitle).
Приложение отображает уникальную пиктограмму для документа, содержащую инициалы студента, выполнившего работу.
уменьшение количества пропусков на 1 (до 0) для последнего студента из списка. а также удаление первого, последнего и всех студентов из списка.
Реализовать предварительный просмотр, печать документа и вызов диалога настройки печати.
* Реализовать класс дополнительного вида документа: круговая диаграмма количества пропусков (процент пропусков кратных 3); +дополнительные баллы за собственные 2D, 3D, 4D, 5D отображения.
* Реализовать с использованием класса CSplitterWnd отображение нескольких, выбор и переключение вида через меню, акселераторы и панель инструментов.
* Реализовать систему контекстной помощи.
// lab3View.cpp : implementation of the CLab3View class
//
#include "stdafx.h"
#include "lab3.h"
#include "lab3Doc.h"
#include "lab3View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLab3View
IMPLEMENT_DYNCREATE(CLab3View, CScrollView)
BEGIN_MESSAGE_MAP(CLab3View, CScrollView)
//{{AFX_MSG_MAP(CLab3View)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLab3View construction/destruction
CLab3View::CLab3View()
{
// TODO: add construction code here
}
CLab3View::~CLab3View()
{
}
BOOL CLab3View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLab3View drawing
void CLab3View::OnDraw(CDC* pDC)
{
CLab3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int n = pDoc->v.size();
for (int i=0; i<n; i++)
{
CString s;
s.Format("[%i]", i+1);
CString s1;
s1.Format("%i %i", pDoc->v[i].pr, pDoc->v[i].sb);
CString s2;
s2.Format("%s %s",pDoc->v[i].f,pDoc->v[i].n);
pDC->TextOut(10, 20*i+10,s+" "+s2+" "+s1);
///pDC->TextOut(10, 20*i+10,s+" "+" "+" "+pDoc->v[i].f+" "+pDoc->v[i].n+" "+s1);
}
}
void CLab3View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CLab3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
SetScrollSizes(MM_TEXT, CSize(300, pDoc->v.size()*20+20));
}
/////////////////////////////////////////////////////////////////////////////
// CLab3View printing
BOOL CLab3View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CLab3View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLab3View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CLab3View diagnostics
#ifdef _DEBUG
void CLab3View::AssertValid() const
{
CScrollView::AssertValid();
}
void CLab3View::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CLab3Doc* CLab3View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLab3Doc)));
return (CLab3Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLab3View message handlers
// lab3Doc.cpp : implementation of the CLab3Doc class
//
#include "stdafx.h"
#include "lab3.h"
#include <algorithm>
#include "lab3Doc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLab3Doc