Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой проект / Kyrsovik / DBKino_Last_Release / CSchedule
.cpp#include "stdafx.h"
#include "CSchedule.h"
#include "afxtempl.h"
//
CSchedule::CSchedule( CDatabase* pDatabase )
:CRecordset(pDatabase)
{
m_nFields = 4;
}
void CSchedule::DoFieldExchange(CFieldExchange* pFX)
{
pFX -> SetFieldType(CFieldExchange::outputColumn);//(CFieldExchange* pFX);
RFX_Date(pFX, _T("DateS"), d_DateSession);//s_FuckenSQLDate, 12);
RFX_Text(pFX, _T("FilmS"), s_FilmSession, 100);
RFX_Date(pFX, _T("Session"), d_TimeSession);
RFX_Int(pFX, _T("Bilet"), i_TicketSession);
}
/////////////////////////////Считываем информацию из Access/////////////////
void CSchedule::GetRepInfo(CMapStringToPtr* ptrMapRep)
{
CDatabase db;
CDBVariant cdbv;
db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
CRecordset RecSet( &db );
(*ptrMapRep).RemoveAll(); /// Удаляем ВСЕ записи в Map
try
{
RecSet.Open(CRecordset::forwardOnly,"SELECT* FROM DBRepertoir");//множество записей доступных только для чтения (::forwardOnly)
do{
RecSet.GetFieldValue("DateS", cdbv);
CTime date(cdbv.m_pdate->year,cdbv.m_pdate->month,cdbv.m_pdate->day,0,0,0,-1);
d_DateSession = date;
// с этим были проблемы - не записать в БД дату в формате CTime
// d_DateSession = ConvertStrDateToCTime(*(cdbv.m_pstring));
RecSet.GetFieldValue("FilmS", cdbv);
s_FilmSession = *(cdbv.m_pstring);
RecSet.GetFieldValue("Session", cdbv);
CTime time(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
d_TimeSession = time;
RecSet.GetFieldValue("Bilet", cdbv);
i_TicketSession = cdbv.m_lVal;
void* ptrVoid = new CSchedule(d_DateSession,s_FilmSession,d_TimeSession,i_TicketSession);
void* temp;
if( (*ptrMapRep).Lookup(s_FilmSession, temp) )
{
CPtrList* tempPtrList = ((CPtrList*)temp);
tempPtrList -> AddHead(ptrVoid);
//(*ptrMapRep)[s_FilmSession] = ((void*) tempPtrList);
}
else
{
CPtrList* ptrList = new CPtrList;
ptrList -> AddHead(ptrVoid);
(*ptrMapRep)[s_FilmSession] = ((void*) ptrList);
}
RecSet.MoveNext();
}
while( !RecSet.IsEOF() );
RecSet.Close();
db.Close();
}
catch(CDBException* pException)
{
AfxMessageBox( pException -> m_strStateNativeOrigin );
AfxMessageBox( pException -> m_strError );
pException -> Delete();
}
}
void CSchedule::AddRepInfo(CMapStringToPtr* ptrMapRep, CSchedule* ptrSchedule)
{
CDatabase db;
db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
CSchedule RecSet ( &db );
try
{
if(!RecSet.Open(CRecordset::snapshot,"SELECT* FROM DBRepertoir"))
{AfxMessageBox("Can Not Open 'Recordset' !"); return;}
if(!RecSet.CanAppend())
{AfxMessageBox("function CanAppend is Failure! ( No Field Values Were Set! )"); return;}
if(!RecSet.CanUpdate())
{AfxMessageBox("function CanUpdate is Failure! ( Can't Update Database! )"); return;}
RecSet.AddNew();
RecSet.d_DateSession = ptrSchedule->d_DateSession;
// RecSet.s_FuckenSQLDate = RecSet.d_DateSession.Format("%d.%m.%Y");
RecSet.s_FilmSession = ptrSchedule->s_FilmSession;
RecSet.d_TimeSession = ptrSchedule->d_TimeSession;
RecSet.i_TicketSession = ptrSchedule->i_TicketSession;
RecSet.Update();
RecSet.Close();
db.Close();
}
catch (CDBException* pException)
{
AfxMessageBox( pException -> m_strStateNativeOrigin );
AfxMessageBox( pException -> m_strError );
pException -> Delete();
}
void *ptrVoid = ((void *)ptrSchedule);
void* temp;
if( (*ptrMapRep).Lookup(s_FilmSession, temp) )
{
CPtrList* tempPtrList = ((CPtrList*)temp);
tempPtrList -> AddHead(ptrVoid);
}
else
{
CPtrList* ptrList = new CPtrList;
ptrList->AddHead(ptrVoid);
(*ptrMapRep)[s_FilmSession] = ((void*) ptrList);
}
}
CTime CSchedule::ConvertStrDateToCTime(CString Str)/// Str в формате : "00.00.0000"
{
int i,k=0,rez,p=0, Day=0, Month=0, Year=0;
char* str1 = new char[5];
//_____________Day______
k = Str.Find('.');
for(i=0,p=0; i < k; i++)
{
str1[p] = Str[i];
p++;
}
rez = atof(str1);
Day = rez;
//_____________Month______
for(i=k+1,p=0;(i<Str.Find('.',k+1));i++)
{
str1[p] = Str[i];
p++;
}
rez = atof(str1);
Month = rez;
k = i+1;
//_____________Year______
for(i=k,p=0;(i<Str.Find('\0',k));i++)
{
str1[p] = Str[i];
p++;
}
rez = atof(str1);
Year = rez;
// ASSERT(str1);
delete []str1;
CTime date(Year, Month, Day,0,0,0,-1);
return date;
}
void CSchedule::EditRepInfo(CMapStringToPtr* ptrMapRep, CSchedule* ptrSchedule, CSchedule* oldpSchedule)
{
CDatabase db;
CDBVariant cdbv;
db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
CSchedule* RecSet = new CSchedule ( &db );
int I = 1;
CString a = (oldpSchedule -> s_FilmSession);
CTime b = (oldpSchedule -> d_DateSession),
c = (oldpSchedule -> d_TimeSession);
int d = (oldpSchedule -> i_TicketSession);
try
{
if(!RecSet->Open(CRecordset::snapshot,"SELECT* FROM DBRepertoir"))
{AfxMessageBox("Can Not Open 'Recordset' !"); return;}
if(!RecSet->CanAppend())
{AfxMessageBox("function CanAppend is Failure! ( No Field Values Were Set! )"); return;}
if(!RecSet->CanUpdate())
{AfxMessageBox("function CanUpdate is Failure! ( Can't Update Database! )"); return;}
// CString s,str;
// RecSet->GetFieldValue("Session", cdbv);
// CTime TimE(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
// CTime _time_ = TimE;
for(I=0;I!=-1;)
{
if( (*RecSet) == (*oldpSchedule))/*a==(RecSet.s_FilmSession) &&
b==(RecSet.d_DateSession) &&
c==(_time_) &&
d==(RecSet.i_TicketSession)) */
{I=-1;//AfxMessageBox("I=-1!!!",MB_ICONINFORMATION);
}
else {//AfxMessageBox(RecSet->s_FilmSession);
RecSet->Move(I);I=1;
// RecSet->GetFieldValue("Session", cdbv);
// CTime time(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
// _time_ = time;
/* s.Format("RecSet:%d; d:%d\r\n",RecSet.i_TicketSession,d);
str=s;
str+="RecSet :";
str+=RecSet.d_DateSession.Format("%d.%m.%Y");
str+=" d:";
str+=b.Format("%d.%m.%Y");
str+="\r\nRecSet :";
str+=_time_.Format("%H : %M");
str+=" d:";
str+=c.Format("%H : %M");
str+="\r\nRecSet :";
str+=RecSet.s_FilmSession;
str+=" d:";
str+=a;
AfxMessageBox(str,MB_ICONSTOP);*/
}
}/*while(I);/*(RecSet.s_FilmSession != a &&
RecSet.d_DateSession != b &&
RecSet.d_TimeSession != c &&
RecSet.i_TicketSession != d );*/
RecSet->Edit();
RecSet->d_DateSession = ptrSchedule -> d_DateSession;
RecSet->s_FilmSession = ptrSchedule -> s_FilmSession;
RecSet->d_TimeSession = ptrSchedule -> d_TimeSession;
RecSet->i_TicketSession = ptrSchedule -> i_TicketSession;
RecSet->Update();
RecSet->Close();
delete RecSet;
db.Close();
}
catch (CDBException* pException)
{
AfxMessageBox( pException -> m_strStateNativeOrigin );
AfxMessageBox( pException -> m_strError );
pException -> Delete();
}
/////////////////////
POSITION pos1, pos2;
void* ptr;
void* ptrVoid = ((void*) this);
if((*ptrMapRep).Lookup(a, ptr))
{
CPtrList* ptrList = ((CPtrList *)ptr);
for( POSITION pos1 = ptrList->GetHeadPosition(); (pos2=pos1) != NULL; )
{
ptr = (ptrList -> GetNext( pos1 ));
CSchedule* schedule;
schedule = ((CSchedule *)(ptr));
if(oldpSchedule == schedule)//a==(schedule -> s_FilmSession) && b==(schedule -> d_DateSession) && c==(schedule -> d_TimeSession) && d==(schedule -> i_TicketSession))
{
ptrList -> RemoveAt(pos2);
delete schedule;
ptrList -> AddHead(ptrVoid);
}
}
}
//////////////////////
else
{
AfxMessageBox("КАК Вы выделили НЕСУЩЕСТВУЮЩУЮ запись ????!!!!",MB_ICONSTOP);
}
}
void CSchedule::DelRepInfo(CMapStringToPtr* ptrMapRep, CString sFilm, CString sDate, CString sTime, CString sTicket)
{
int I = 0;
CDatabase db;
CDBVariant cdbv;
db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
CSchedule RecSet ( &db );
try
{
if(!RecSet.Open(CRecordset::snapshot, "SELECT* FROM DBRepertoir"))
{AfxMessageBox("Can Not Open 'Recordset' !"); return;}
CString s,str;
RecSet.GetFieldValue("Session", cdbv);
CTime TimE(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
CTime _time_ = TimE;
char *stopstring;
int d = (strtol(sTicket,&stopstring,10));
for(I=0;I!=-1;)
{
if( sFilm==(RecSet.s_FilmSession) &&
sDate==(RecSet.d_DateSession).Format("%d.%m.%Y") &&
sTime==(_time_).Format("%H : %M") &&//(RecSet.d_TimeSession) &&
(d) == (RecSet.i_TicketSession))
{I=-1;//AfxMessageBox("I=-1!!!",MB_ICONINFORMATION);
}
else {RecSet.Move(I);I=1;
RecSet.GetFieldValue("Session", cdbv);
CTime time(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
_time_ = time;
}
}
void* ptr;
int i = -1 ;
POSITION pos1, pos2;
if((*ptrMapRep).Lookup(sFilm, ptr))
{
CPtrList* ptrList = ((CPtrList *)ptr);
for( POSITION pos1 = ptrList->GetHeadPosition(); (pos2=pos1) != NULL; )
{
ptr = (ptrList -> GetNext( pos1 ));
i ++ ;
CSchedule* schedule;// = new CSchedule();
schedule = ((CSchedule *)(ptr));
if(schedule == this)
{
ptrList->RemoveAt(pos2);
delete schedule;
} //else delete schedule;
}
}
if( i == 0 )
{
(*ptrMapRep).Lookup(sFilm, ptr);
CPtrList* list = ((CPtrList*) ptr);
delete list;
(*ptrMapRep).RemoveKey(sFilm);
}
RecSet.Delete();
if(!RecSet.IsDeleted())
{
AfxMessageBox("Нельзя удалить !");
}
// if((*ptrMapRep).RemoveKey(Str)){}
// {AfxMessageBox("Удалено из Словаря", MB_ICONINFORMATION);}
// else {AfxMessageBox("Не удаётся удалить из Словаря !", MB_ICONSTOP);}
RecSet.Close();
db.Close();
}
catch(CDBException* pException)
{
AfxMessageBox( pException -> m_strStateNativeOrigin );
AfxMessageBox( pException -> m_strError );
pException -> Delete();
}
}
BOOL CSchedule::operator ==(CSchedule& a)
{
int i = 0;
CString time1, time2;
time1 = d_TimeSession.Format("%H : %M");
time2 = a.d_TimeSession.Format("%H : %M");
if(s_FilmSession == a.s_FilmSession) i++;
if(d_DateSession == a.d_DateSession) i++;
if(time1 == time2) i++;
if(i_TicketSession == a.i_TicketSession) i++;
if(i == 4)
{
return TRUE;
i=0;
}
else
{
return FALSE;
i=0;
}
}