Скачиваний:
98
Добавлен:
01.05.2014
Размер:
612.35 Кб
Скачать

3.Исходные тексты пк

//Cfilm.cpp

#include "stdafx.h"

#include "CFilm.h"

CFilm::CFilm( CDatabase* pDatabase )

:CRecordset(pDatabase)

{

m_nFields = 6;

}

CFilm::~CFilm()

{

}

void CFilm::DoFieldExchange(CFieldExchange* pFX)

{

pFX -> SetFieldType(CFieldExchange::outputColumn);//(CFieldExchange* pFX);

RFX_Text(pFX, _T("Name"), s_FilmName, 100);

RFX_Text(pFX, _T("Year"), s_WorkFilm, 30);

RFX_Text(pFX, _T("Regis"), s_Regiessiuer, 100);

RFX_Text(pFX, _T("Type"), s_Genre, 25);

RFX_Text(pFX, _T("Rejting"), s_Solution, 100);

RFX_Text(pFX, _T("Solution"), s_Rejting, 100);

}

void CFilm::GetFilmInfo(CMapStringToPtr* ptrMap)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CRecordset RecSet( &db );// Набор записей

try

{

RecSet.Open(CRecordset::forwardOnly,"SELECT* FROM Film");//множество записей доступных только для чтения

do{

RecSet.GetFieldValue(0, s_FilmName);

RecSet.GetFieldValue(1, s_WorkFilm);

RecSet.GetFieldValue(2, s_Regiessiuer);

RecSet.GetFieldValue(3, s_Genre);

RecSet.GetFieldValue(4, s_Solution);

RecSet.GetFieldValue(5, s_Rejting);

void *ptr = new CFilm(s_FilmName,s_WorkFilm,s_Regiessiuer,s_Genre, s_Solution, s_Rejting);

(*ptrMap)[s_FilmName] = ptr;

ptr = 0;

delete ptr;

RecSet.MoveNext();

}

while( !RecSet.IsEOF() );

RecSet.Close();

db.Close();

}

catch(CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

}

void CFilm::AddFilmInfo(CMapStringToPtr* ptrMap, CFilm* ptrFilm)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CFilm RecSet ( &db );

try

{

if(!RecSet.Open(CRecordset::snapshot,"SELECT* FROM Film"))

{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.s_FilmName = ptrFilm->s_FilmName;

RecSet.s_WorkFilm = ptrFilm->s_WorkFilm;

RecSet.s_Regiessiuer = ptrFilm->s_Regiessiuer;

RecSet.s_Genre = ptrFilm->s_Genre;

RecSet.s_Solution = ptrFilm->s_Solution;

RecSet.s_Rejting = ptrFilm->s_Rejting;

RecSet.Update();

RecSet.Close();

db.Close();

}

catch (CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

void* ptr;

if((*ptrMap).Lookup(ptrFilm->s_FilmName, ptr))

{

AfxMessageBox("Названия фильмов не могут повторяться !", MB_ICONINFORMATION);

return;

}

else

{

ptr = ((void *)ptrFilm);

(*ptrMap)[ptrFilm->s_FilmName] = ptr;

}

}

void CFilm::DelFilmInfo(CMapStringToPtr* ptrMap, CString Str)

{

int nItem = -1;

int I = 0;

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CFilm RecSet ( &db );

try

{

if(!RecSet.Open(CRecordset::snapshot, "SELECT* FROM Film"))

{AfxMessageBox("Can Not Open 'Recordset' !"); return;}

do{

RecSet.Move(I);

I=1;

nItem ++ ;

}while(RecSet.s_FilmName != Str);

RecSet.Delete();

if(!RecSet.IsDeleted())

{

AfxMessageBox("Нельзя удалить !");

}

void* ptr;

if((*ptrMap).Lookup(Str, ptr))//RemoveKey(Str)){}

{

CFilm* _film = ((CFilm*)ptr);

delete _film;

(*ptrMap).RemoveKey(Str);

}

else {AfxMessageBox("В архиве не найден фильм (НЕпредвиденная ошибка)");return;}

RecSet.Close();

db.Close();

}

catch(CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

}

void CFilm::EditFilmInfo(CMapStringToPtr* ptrMap, CString Str, CFilm* ptrFilm)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CFilm RecSet ( &db );

int nItem = -1;

int I = 0;

try

{

if(!RecSet.Open(CRecordset::snapshot,"SELECT* FROM Film"))

{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;}

do{

RecSet.Move(I);

I=1;

nItem ++ ;

}while(RecSet.s_FilmName != Str);

RecSet.Edit();

RecSet.s_FilmName = ptrFilm->s_FilmName;

RecSet.s_WorkFilm = ptrFilm->s_WorkFilm;

RecSet.s_Regiessiuer = ptrFilm->s_Regiessiuer;

RecSet.s_Genre = ptrFilm->s_Genre;

RecSet.s_Solution = ptrFilm->s_Solution;

RecSet.s_Rejting = ptrFilm->s_Rejting;

RecSet.Update();

RecSet.Close();

db.Close();

}

catch (CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

void* ptr;

if((*ptrMap).Lookup(Str, ptr))//RemoveKey(Str)){}

{

CFilm* _film = ((CFilm*)ptr);

delete _film;

(*ptrMap).RemoveKey(Str);

}

else {AfxMessageBox("В архиве не найден фильм (НЕпредвиденная ошибка)");return;}

ptr = ((void *)ptrFilm);

(*ptrMap)[s_FilmName] = ptr;

}

int CFilm::GetFilmInfoByName(CMapStringToPtr* ptrMap, PCHAR pFilmName, bool bUseLike)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CRecordset RecSet( &db );

int iRecordCount = 0;

try

{

CString qry = "SELECT* FROM Film WHERE Name LIKE '";

qry += pFilmName;

qry += "'";

if(bUseLike)

{

qry += "%";

}

RecSet.Open(CRecordset::forwardOnly, qry);

iRecordCount = RecSet.GetRecordCount();

if(iRecordCount != 0)

{

do

{

RecSet.GetFieldValue(0, s_FilmName);

RecSet.GetFieldValue(1, s_WorkFilm);

RecSet.GetFieldValue(2, s_Regiessiuer);

RecSet.GetFieldValue(3, s_Genre);

RecSet.GetFieldValue(4, s_Solution);

RecSet.GetFieldValue(5, s_Rejting);

void *ptr = new CFilm(s_FilmName,s_WorkFilm,s_Regiessiuer,s_Genre, s_Solution, s_Rejting);

(*ptrMap)[s_FilmName] = ptr;

ptr = 0;

delete ptr;

RecSet.MoveNext();

}

while( !RecSet.IsEOF() );

}

RecSet.Close();

db.Close();

}

catch(CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

return iRecordCount;

}

int CFilm::GetFilmInfoBySol(CMapStringToPtr* ptrMap, bool bUseLike)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CRecordset RecSet( &db );

int iRecordCount = 0;

try

{

CString qry = "SELECT* FROM Film WHERE Year >=1980 AND Name LIKE 'A%'";

if(bUseLike)

{

qry += "%";

}

RecSet.Open(CRecordset::forwardOnly, qry);

iRecordCount = RecSet.GetRecordCount();

if(iRecordCount != 0)

{

do

{

RecSet.GetFieldValue(0, s_FilmName);

RecSet.GetFieldValue(1, s_WorkFilm);

RecSet.GetFieldValue(2, s_Regiessiuer);

RecSet.GetFieldValue(3, s_Genre);

RecSet.GetFieldValue(4, s_Solution);

RecSet.GetFieldValue(5, s_Rejting);

void *ptr = new CFilm(s_FilmName,s_WorkFilm,s_Regiessiuer,s_Genre, s_Solution, s_Rejting);

(*ptrMap)[s_FilmName] = ptr;

ptr = 0;

delete ptr;

RecSet.MoveNext();

}

while( !RecSet.IsEOF() );

}

RecSet.Close();

db.Close();

}

catch(CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

return iRecordCount;

}

int CFilm::GetFilmInfoByRej(CMapStringToPtr* ptrMap, bool bUseLike)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CRecordset RecSet( &db );

int iRecordCount = 0;

try

{

CString qry = "SELECT* FROM Film WHERE Rejting > 3 AND Type LIKE 'фантаст%'";

if(bUseLike)

{

qry += "%";

}

RecSet.Open(CRecordset::forwardOnly, qry);

iRecordCount = RecSet.GetRecordCount();

if(iRecordCount != 0)

{

do

{

RecSet.GetFieldValue(0, s_FilmName);

RecSet.GetFieldValue(1, s_WorkFilm);

RecSet.GetFieldValue(2, s_Regiessiuer);

RecSet.GetFieldValue(3, s_Genre);

RecSet.GetFieldValue(4, s_Solution);

RecSet.GetFieldValue(5, s_Rejting);

void *ptr = new CFilm(s_FilmName,s_WorkFilm,s_Regiessiuer,s_Genre, s_Solution, s_Rejting);

(*ptrMap)[s_FilmName] = ptr;

ptr = 0;

delete ptr;

RecSet.MoveNext();

}

while( !RecSet.IsEOF() );

}

RecSet.Close();

db.Close();

}

catch(CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

return iRecordCount;

}

int CFilm::GetFilmInfoByLan(CMapStringToPtr* ptrMap, bool bUseLike)

{

CDatabase db;

db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");

CRecordset RecSet( &db );

int iRecordCount = 0;

try

{

CString qry = "SELECT* FROM Film WHERE Name >= 'А' AND Name <= 'Я'";

if(bUseLike)

{

qry += "%";

}

RecSet.Open(CRecordset::forwardOnly, qry);

iRecordCount = RecSet.GetRecordCount();

if(iRecordCount != 0)

{

do

{

RecSet.GetFieldValue(0, s_FilmName);

RecSet.GetFieldValue(1, s_WorkFilm);

RecSet.GetFieldValue(2, s_Regiessiuer);

RecSet.GetFieldValue(3, s_Genre);

RecSet.GetFieldValue(4, s_Solution);

RecSet.GetFieldValue(5, s_Rejting);

void *ptr = new CFilm(s_FilmName,s_WorkFilm,s_Regiessiuer,s_Genre, s_Solution, s_Rejting);

(*ptrMap)[s_FilmName] = ptr;

ptr = 0;

delete ptr;

RecSet.MoveNext();

}

while( !RecSet.IsEOF() );

}

RecSet.Close();

db.Close();

}

catch(CDBException* pException)

{

AfxMessageBox( pException -> m_strStateNativeOrigin );

AfxMessageBox( pException -> m_strError );

pException -> Delete();

}

return iRecordCount;

}

26