Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой проект / Kyrsovik / DBKino_Last_Release / DBRepertoir
.cpp// DBRepertoir.cpp : implementation file
//
#include "stdafx.h"
#include "DBKino.h"
#include "DBRepertoir.h"
#include "CSchedule.h"
#include "EditRepertoir.h"
#include "SessionForFilm.h"
#include "SessionByDate.h"
//#include "DBKinoView.h"
// DBRepertoir
IMPLEMENT_DYNCREATE(DBRepertoir, CListView)
DBRepertoir::DBRepertoir()
{
m_dwDefaultStyle |= ( LVS_REPORT );
}
DBRepertoir::~DBRepertoir()
{
POSITION pos = pDoc -> cMapRep.GetStartPosition();
while(pos != NULL)
{
void* ptr;
CString _FilmName_;
CSchedule* schedule;
pDoc -> cMapRep.GetNextAssoc(pos, _FilmName_, ptr);
CPtrList* ptrList = ((CPtrList* ) ptr);
for(POSITION pos = ptrList->GetHeadPosition(); pos!=NULL;)
{
ptr = (ptrList -> GetNext(pos));
schedule = ((CSchedule*) ptr);
delete schedule;
}
ptrList ->RemoveAll();
delete ptrList;
}
pDoc -> cMapRep.RemoveAll();
}
BEGIN_MESSAGE_MAP(DBRepertoir, CListView)
ON_COMMAND(ID_VIEW_REPERTOIR, OnViewRepertoir)
ON_COMMAND(ID_EDIT_ADD_REPERTOIR, OnEditAddRepertoir)
ON_COMMAND(ID_EDIT_EDIT_REPERTOIR, OnEditEditRepertoir)
ON_COMMAND(ID_EDIT_DEL_REPERTOIR, OnEditDelRepertoir)
ON_COMMAND(ID_FIND_SESSION_FILM, OnFindSessionFilm)
ON_COMMAND(ID_FIND_FOR_DATE, OnFindForDate)
END_MESSAGE_MAP()
void DBRepertoir::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// ptrMap = ((CMapPtrToPtr*)&GetDocument() -> cMapRep);
pDoc = GetDocument();
pmyListCtrl = &GetListCtrl();
ColumnCount = 0;
DWORD ExStyle = pmyListCtrl->GetExtendedStyle();
ExStyle |= LVS_EX_FULLROWSELECT;
pmyListCtrl->SetExtendedStyle(ExStyle);
}
// DBRepertoir diagnostics
#ifdef _DEBUG
void DBRepertoir::AssertValid() const
{
CListView::AssertValid();
}
void DBRepertoir::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CDBKinoDoc* DBRepertoir::GetDocument() const
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDBKinoDoc)));
return (CDBKinoDoc*)m_pDocument;
}
#endif //_DEBUG
// DBRepertoir message handlers
void DBRepertoir::OnViewRepertoir()
{
pmyListCtrl -> DeleteAllItems();
for(int Col=ColumnCount; Col>=0; Col-- )
{
pmyListCtrl ->DeleteColumn (Col);
}
ShowRepColumn();
if( (pDoc -> cMapRep.GetSize()) == 0 )
{
CSchedule* schedule = new CSchedule();
CMapStringToPtr* ptrMap = &(pDoc -> cMapRep);
schedule->GetRepInfo(ptrMap);
delete schedule;
}
POSITION p = pDoc -> cMapRep.GetStartPosition();
CString sFilmName;
void *ptr;
CSchedule* Schedule;
int i = 0;
while(p)
{
pDoc -> cMapRep.GetNextAssoc(p, sFilmName, ptr);
CPtrList* ptrList = ((CPtrList *)ptr);
for( POSITION pos = ptrList->GetHeadPosition(); pos != NULL; )
{
ptr = (ptrList -> GetNext( pos ));
Schedule = ((CSchedule *) ptr );
pmyListCtrl->InsertItem(
LVIF_TEXT|LVIF_STATE, i, Schedule->s_FilmSession,
// (i%2)==0 ? LVIS_SELECTED :
0,
LVIS_SELECTED,
0, 0);
CString Str;
Str = Schedule->d_DateSession.Format("%d.%m.%Y");
pmyListCtrl->SetItemText(i, 1, Str);
Str = Schedule->d_TimeSession.Format("%H : %M");
pmyListCtrl->SetItemText(i, 2, Str);
Str.Format("%d", Schedule ->i_TicketSession);
pmyListCtrl->SetItemText(i, 3, Str);
i ++ ;
}
}
}
void DBRepertoir::ShowRepColumn()
{
LV_COLUMN lvc;
lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH;
lvc.iSubItem = 0;
lvc.pszText = _T("Фильм");
lvc.cx = 170;
GetListCtrl().InsertColumn(0,&lvc);
ColumnCount++;
lvc.iSubItem = 1;
lvc.pszText = _T("Дата");
lvc.cx = 90;
GetListCtrl().InsertColumn(1,&lvc);
ColumnCount++;
lvc.iSubItem = 2;
lvc.pszText = _T("Сеанс");
lvc.cx = 50;
GetListCtrl().InsertColumn(2,&lvc);
ColumnCount++;
lvc.iSubItem = 3;
lvc.pszText = _T("Продано билетов");
lvc.cx = 100;
GetListCtrl().InsertColumn(3,&lvc);
ColumnCount++;
}
void DBRepertoir::OnEditAddRepertoir()
{
EditRepertoir rep;
rep.SetDocument(&(pDoc->cMapRep));
rep.DoModal();
OnViewRepertoir();
}
void DBRepertoir::OnEditEditRepertoir()
{
UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
int nItem = -1;
UINT i=0;
if (uSelectedCount > 0)
{
nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
ASSERT(nItem != -1);
CString sFilm = pmyListCtrl->GetItemText(nItem, 0);
CString sDate = pmyListCtrl->GetItemText(nItem, 1);
CString sTime = pmyListCtrl->GetItemText(nItem, 2);
CString sTicket = pmyListCtrl->GetItemText(nItem, 3);
EditRepertoir rep;
rep.SetDocument(&(pDoc->cMapRep), sFilm, sDate, sTime, sTicket);
rep.DoModal();
OnViewRepertoir();
// pmyListCtrl->Update(nItem);
}
}
void DBRepertoir::OnEditDelRepertoir()
{
UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
int nItem = -1;
int* itemCount = new int [uSelectedCount];
UINT i=0;
CSchedule schedule;
if (uSelectedCount > 0)
{
for (i=0;i < uSelectedCount;i++)
{
nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
ASSERT(nItem != -1);
itemCount[i] = nItem;
CString sFilm = pmyListCtrl->GetItemText(nItem, 0);
CString sDate = pmyListCtrl->GetItemText(nItem, 1);
CString sTime = pmyListCtrl->GetItemText(nItem, 2);
CString sTicket = pmyListCtrl->GetItemText(nItem, 3);
schedule.DelRepInfo((&(pDoc->cMapRep)), sFilm, sDate, sTime, sTicket);
pmyListCtrl->Update(nItem);
}
for (i=0;i < uSelectedCount;i++)
{
pmyListCtrl->DeleteItem( itemCount[i] ); //Только так !
for(UINT j=i+1; j<(uSelectedCount); j++)
{ if(j==uSelectedCount){break;}itemCount[j]--; }
// pmyListCtrl->Update( itemCount[i] );
}
}
delete [] itemCount ;
}
void DBRepertoir::OnFindSessionFilm()
{
SessionForFilm session;
session.SetMAP( &(pDoc -> cMapRep) );
session.DoModal();
OnViewRepertoir();
}
void DBRepertoir::OnFindForDate()
{
SessionByDate temp;
temp.SetMAP( &(pDoc -> cMapRep) );
temp.DoModal();
}
Соседние файлы в папке DBKino_Last_Release