Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вадим отчет.doc
Скачиваний:
2
Добавлен:
05.11.2018
Размер:
1.53 Mб
Скачать

3.5.4 Выход из программы

Для выхода из программы необходимо на главном диалоговом окне (рис. 3.1) нажать кнопку на «крестик». Закрытие диалоговых окон также осуществляется нажатием на «крестик» либо на одну из кнопок «ОК» или «Отмена».

3.6 Проверка программы

Основной метод проверки работоспособности программы заключается в установлении соответствия между данными, отображаемыми в диалоговых окнах, изменением данных, производимых в рамках ПК, и данными, содержащимися в БД ПК.

3.7 Сообщения оператору

а. Если при установке программы не был установлен необходимый драйвер MS Access, то при попытке запуска программы будет выдано сообщение об ошибке (примерный вид на рис. 3.15). Для устранения ошибки необходимо в источники данных (ODBC) добавить драйвер баз данных MS Access.

Рис. 3.6 Ошибка отсутствия драйвера БД

б. Сообщение, похожее на рис. 3.7 возникает в том случае, если при заполнении текстовых полей диалогового окна, предназначенных для добавления или изменения информации об информационных объектах, не соблюдены форматы данных, введены отрицательные значения или значения не подходящие по формату.

Рис. 3.7 Ошибка в данных

Сообщение рис. 3.8 возникает в том случае, если будет произведена попытка вернуть книгу в библиотеку от читателя, сдавшего эту книгу.

Рис. 3.8

Кроме того, т.к. ПК взаимодействует с MS Access, могут возникать сообщения об ошибках, инициируемые в БД. Так, например, сообщение 3.21 возникает в том случае, если произведена попытка добавить в список проданных лекарств то, которого нет на складе. Также данное сообщение возникает в случае попытки изменения записи, которой нет в БД.

Сообщение рис. 3.9 возникает в том случае, если произведена попытка добавить информацию о читателе или книги, чье ключевое поле совпадает, с уже присутствующем в БД.

Рис. 3.9 Повторяющиеся данные в БД

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

Classes.h

//Класс Читатели

class CReaders{

char* libcard; //Номер чит.билета

char* fio; //ФИО

char* tel; //телефон

char* date; //Дата записи

CReaders* next; //Указатель на след.элемент в списке читателей

friend class СReadersList;

public:

CReaders();

CReaders(char* InLibcard, char* InFio, char* InTel, char*InDate);

CReaders(const CReaders& reader);

~CReaders();

void GetData(char* OutLibcard,char* OutFio, char* OutTel,char* OutDate);

void SetData(char* InLibcard,char* InFio, char* InTel,char* InDate);

};

//Класс Книги

class CBooks{

char* shifr; //Шифр книги

char* writer; //Автор книги

char* title; //Название книги

int year; //Год издания

int number; //Количество экземпляров

CBooks* next; //Указатель на след.элемент в списке книг

friend class СBooksList;

public:

CBooks();

CBooks(char* InShifr, char* InWriter, char* InTitle, int InYear, int InNumber);

CBooks(const CBooks& book);

~CBooks();

void GetData(char* OutShifr, char* OutWriter, char* OutTitle, int &OutYear, int &OutNumber);

void SetData(char* InShifr, char* InWriter, char* InTitle, int InYear, int InNumber);

};

//Класс Читательский билет

class CLibCard{

char* shifr; //Шифр книги

char* writer; //Автор

char* title; //Название

char* takedate; //Дата взятия книги

char* retdate; //Дата возврата книги

CLibCard* next;

friend class СLibCardList; //Дружественный класс Список Чит.Бил.

public:

CLibCard();

CLibCard(char* InShifr, char* InWriter, char* InTitle, char* InTakedate, char*InRetdate);

CLibCard(const CLibCard& lcard);

~CLibCard();

void GetData(char* OutShifr, char* OutWriter, char* OutTitle, char* OutTakedate, char* OutRetdate);

void SetData(char* InShifr, char* InWriter, char* InTitle, char* InTakedate, char*InRetdate);

};

//class List_ReadersInsert;

//Класс списка Читателей

class СReadersList{

CReaders* top;

friend class List_ReadersInsert;

public:

int quantity; //Количество элементов в списке

СReadersList(); // конструктор по умолчанию

СReadersList(const СReadersList &); // конструктор копирования

~СReadersList();

void addElement(CReaders* el); //Добавление элемента в список читателей

char** getElement(int num); //Получение информации о читателе под номером num

};

//Класс списка Книг

class СBooksList{

CBooks* top;

friend class List_BooksInsert;

public:

int quantity; //Количество элементов в списке

СBooksList(); // конструктор по умолчанию

СBooksList(const СBooksList &); // конструктор копирования ~СBooksList();

void addElement(CBooks* el);

char** getElement(int num);

};

//Класс списка Чит.билетов

class СLibCardList{

CLibCard* top;

friend class List_LibCardInsert;

public:

int quantity; //Количество элементов в списке

СLibCardList(); // конструктор по умолчанию

СLibCardList(const СLibCardList &); // конструктор копирования !!!!!!!!!!!!!!!!

~СLibCardList();

void addElement(CLibCard* el);

char** getElement(int num); // Получение элемента по номеру

};

//Класс Внесение данных в таблицу Читатели

class List_ReadersInsert{

СReadersList* readerslist;

//Указатель на список объектов

public:

List_ReadersInsert(СReadersList *rl); // конструктор

virtual ~List_ReadersInsert(); // деструктор

void setData(); // метод внесения данных в таблицу Читатели

};

//Класс Внесение данных в таблицу Книги

class List_BooksInsert{

protected:

СBooksList* bookslist; //Указатель на список объектов

public:

List_BooksInsert(СBooksList* bl); // конструктор

virtual ~List_BooksInsert(); // деструктор

void setData(); // метод внесения данных в таблицу Книги

};

//Класс Внесение данных в таблицу Книги Читателя

class List_LibCardInsert{

СLibCardList* libcardlist; //Указатель на список объектов

public:

List_LibCardInsert(СLibCardList *ll); // конструктор

virtual ~List_LibCardInsert(); // деструктор

void setData(); // метод внесения данных в таблицу Читатели

};

//Класс внесения данных в таблицу Выдачи книг

class List_SelectBook:public List_BooksInsert{

public: List_SelectBook(СBooksList* b); //Конструктор

~List_SelectBook(); //Деструктор

void setData(); //Внесение данных в таблицу Выдачи книг

};

Classes.cpp

//Методы класса CReaders

CReaders::CReaders()

{

next=NULL;

libcard=NULL;

fio=NULL;

tel=NULL;

date=NULL;

}

CReaders::CReaders(char* InLibcard, char* InFio, char* InTel, char*InDate)

{

next=NULL;

libcard=new char[strlen(InLibcard)+1];

strcpy(libcard, InLibcard);

fio=new char[strlen(InFio)+1];

strcpy(fio, InFio);

tel=new char[strlen(InTel)+1];

strcpy(tel, InTel);

date=new char[strlen(InDate)+1];

strcpy(date, InDate);

}

CReaders::CReaders(const CReaders& reader)

{

next=reader.next;

libcard=new char[strlen(reader.libcard)+1];

strcpy(libcard,reader.libcard);

fio=new char[strlen(reader.fio)+1];

strcpy(fio,reader.fio);

tel=new char[strlen(reader.tel)+1];

strcpy(tel,reader.tel);

date=new char[strlen(reader.date)+1];

strcpy(date,reader.date);

}

CReaders::~CReaders()

{

delete []libcard;

delete []fio;

delete []tel;

delete []date;

}

void CReaders::GetData(char* OutLibcard,char* OutFio, char* OutTel,char* OutDate)

{

strcpy(OutLibcard,libcard);

strcpy(OutFio,fio);

strcpy(OutTel,tel);

strcpy(OutDate,date);

}

void CReaders::SetData(char* InLibcard,char* InFio, char* InTel,char* InDate)

{

libcard=new char[strlen(InLibcard)+1];

strcpy(libcard, InLibcard);

fio=new char[strlen(InFio)+1];

strcpy(fio, InFio);

tel=new char[strlen(InTel)+1];

strcpy(tel, InTel);

date=new char[strlen(InDate)+1];

strcpy(date, InDate);

}

//Методы класса CBooks

CBooks::CBooks()

{

next=NULL;

shifr=NULL;

writer=NULL;

title=NULL;

year=2011;

number=1;

}

CBooks::CBooks(char* InShifr, char* InWriter, char* InTitle, int InYear, int InNumber)

{

next=NULL;

shifr=new char[strlen(InShifr)+1];

strcpy(shifr, InShifr);

writer=new char[strlen(InWriter)+1];

strcpy(writer, InWriter);

title=new char[strlen(InTitle)+1];

strcpy(title, InTitle);

year=InYear;

number=InNumber;

}

CBooks::CBooks(const CBooks& book)

{

next=book.next;

shifr=new char[strlen(book.shifr)+1];

strcpy(shifr,book.shifr);

writer=new char[strlen(book.writer)+1];

strcpy(writer,book.writer);

title=new char[strlen(book.title)+1];

strcpy(title,book.title);

year=book.year;

number=book.number;

}

CBooks::~CBooks()

{

delete []shifr;

delete []writer;

delete []title;

}

void CBooks::GetData(char* OutShifr, char* OutWriter, char* OutTitle, int &OutYear, int &OutNumber)

{

strcpy(OutShifr,shifr);

strcpy(OutWriter,writer);

strcpy(OutTitle,title);

OutYear=year;

OutNumber=number;

}

void CBooks::SetData(char* InShifr, char* InWriter, char* InTitle, int InYear, int InNumber)

{

strcpy(shifr, InShifr);

strcpy(writer, InWriter);

strcpy(title, InTitle);

year=InYear;

number=InNumber;

}

//Методы класса CLibCard

CLibCard::CLibCard()

{

next=NULL;

shifr=NULL;

writer=NULL;

title=NULL;

takedate=NULL;

retdate=NULL;

}

CLibCard::CLibCard(char* InShifr, char* InWriter, char* InTitle , char* InTakedate, char*InRetdate)

{

next=NULL;

//Вставить проверку исключений

shifr=new char[strlen(InShifr)+1];

strcpy(shifr, InShifr);

writer=new char[strlen(InWriter)+1];

strcpy(writer, InWriter);

title=new char[strlen(InTitle)+1];

strcpy(title, InTitle);

takedate=new char[strlen(InTakedate)+1];

strcpy(takedate, InTakedate);

retdate=new char[strlen(InRetdate)+1];

strcpy(retdate, InRetdate);

}

CLibCard::CLibCard(const CLibCard& lcard)

{

next=lcard.next;

//Вставить проверку исключений

shifr=new char[strlen(lcard.shifr)+1];

strcpy(shifr,lcard.shifr);

writer=new char[strlen(lcard.writer)+1];

strcpy(writer,lcard.writer);

title=new char[strlen(lcard.title)+1];

strcpy(title,lcard.title);

takedate=new char[strlen(lcard.takedate)+1];

strcpy(takedate,lcard.takedate);

retdate=new char[strlen(lcard.retdate)+1];

strcpy(retdate,lcard.retdate);

}

CLibCard::~CLibCard()

{

delete []shifr;

delete []writer;

delete []title;

delete []takedate;

delete []retdate;

}

void CLibCard::GetData(char* OutShifr, char* OutWriter, char* OutTitle ,char* OutTakedate, char* OutRetdate)

{

strcpy(OutShifr, shifr);

strcpy(OutWriter,writer);

strcpy(OutTitle, title);

strcpy(OutTakedate, takedate);

strcpy(OutRetdate, retdate);

}

void CLibCard::SetData(char* InShifr, char* InWriter, char* InTitle ,char* InTakedate, char*InRetdate)

{

strcpy(shifr, InShifr);

strcpy(writer, InWriter);

strcpy(title, InTitle);

strcpy(takedate, InTakedate);

strcpy(retdate, InRetdate);

}

//Методы класса CReadersList

СReadersList::СReadersList()

{

quantity=0;

top=NULL;

}

СReadersList::~СReadersList()

{

CReaders* temp;

if(top!=NULL)

for(;quantity!=0;quantity--)

{

temp=top;

top=temp->next;

delete temp;

}

}

void СReadersList::addElement(CReaders* el)

{

CReaders* temp=new CReaders(*el);

if(quantity!=0)

{

temp->next=top;

top=temp;

quantity++;

}

else

{

top=temp;

temp->next=NULL;

quantity=1;

}

}

char** СReadersList::getElement(int num)

{

char** str;

char* s1=new char[81];

char* s2=new char[81];

char* s3=new char[81];

char* s4=new char[81];

CReaders * temp;

temp=top;

str=new char*[6];

for(int i=quantity-1;temp->next!=NULL && i!=num;i--)

temp=temp->next;

temp->GetData(s1, s2, s3, s4);

str[0]=new char[strlen(s1)*sizeof(char)];

strcpy(str[0],s1);

str[1]=new char[strlen(s2)*sizeof(char)];

strcpy(str[1],s2);

str[2]=new char[strlen(s3)*sizeof(char)];

strcpy(str[2],s3);

str[3]=new char[strlen(s4)*sizeof(char)];

strcpy(str[3],s4);

delete []s1;

delete []s2;

delete []s3;

delete []s4;

return str;

}

//Методы класса CBooksList

СBooksList::СBooksList()

{

quantity=0;

top=NULL;

}

СBooksList::~СBooksList()

{

CBooks* temp;

if(top!=NULL)

for(;quantity!=0;quantity--)

{

temp=top;

top=temp->next;

delete temp;

}

}

void СBooksList::addElement(CBooks* el)

{

CBooks* temp=new CBooks(*el);

if(quantity!=0)

{

temp->next=top;

top=temp;

quantity++;

}

else

{

top=temp;

temp->next=NULL;

quantity=1;

}

}

char** СBooksList::getElement(int num)

{

char** str;

char* s1=new char[81];

char* s2=new char[81];

char* s3=new char[81];

int y=0,n=0;

CBooks * temp;

temp=top;

str=new char*[5];

for(int i=quantity-1;temp->next!=NULL && i!=num;i--)

temp=temp->next;

temp->GetData(s1, s2, s3, y,n);

str[0]=new char[strlen(s1)*sizeof(char)];

strcpy(str[0],s1);

str[1]=new char[strlen(s2)*sizeof(char)];

strcpy(str[1],s2);

str[2]=new char[strlen(s3)*sizeof(char)];

strcpy(str[2],s3);

itoa(y,s1,10);

str[3]=new char[strlen(s1)*sizeof(char)];

strcpy(str[3],s1);

itoa(n,s2,10);

str[4]=new char[strlen(s2)*sizeof(char)];

strcpy(str[4],s2);

delete []s2;

delete []s1;

delete []s3;

return str;

}

//Методы класса CLibCardList

СLibCardList::СLibCardList()

{

quantity=0;

top=NULL;

}

СLibCardList::~СLibCardList()

{

CLibCard* temp;

if(top!=NULL)

for(;quantity!=0;quantity--)

{

temp=top;

top=temp->next;

delete temp;

}

}

void СLibCardList::addElement(CLibCard* el)

{

CLibCard* temp=new CLibCard(*el);

if(quantity!=0)

{

temp->next=top;

top=temp;

quantity++;

}

else

{

top=temp;

temp->next=NULL;

quantity=1;

}

}

char** СLibCardList::getElement(int num)

{

char** str;

char* s1=new char[81];

char* s2=new char[81];

char* s3=new char[81];

char* s4=new char[81];

char* s5=new char[81];

char* s6=new char[81];

CLibCard * temp;

temp=top;

str=new char*[5];

for(int i=quantity-1;temp!=NULL && i!=num;i--)

temp=temp->next;

temp->GetData(s1, s2, s3, s4, s5);

str[0]=new char[strlen(s1)*sizeof(char)];

strcpy(str[0],s1);

str[1]=new char[strlen(s2)*sizeof(char)];

strcpy(str[1],s2);

str[2]=new char[strlen(s3)*sizeof(char)];

strcpy(str[2],s3);

str[3]=new char[strlen(s4)*sizeof(char)];

strcpy(str[3],s4);

str[4]=new char[strlen(s5)*sizeof(char)];

strcpy(str[4],s5);

delete []s2;

delete []s1;

delete []s3;

delete []s4;

return str;

}

//Метода класса List_ReadersInsert Внесение данных в таблицу читателей

List_ReadersInsert::List_ReadersInsert(СReadersList *rl)

{

readerslist=rl;

}

List_ReadersInsert::~List_ReadersInsert()

{

}

void List_ReadersInsert::setData()

{

m_ListReaders.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT);

m_ListReaders.DeleteAllItems();

m_ListReaders.DeleteColumn(0);

m_ListReaders.DeleteColumn(0);

m_ListReaders.DeleteColumn(0);

m_ListReaders.DeleteColumn(0);

char ** str;

m_ListReaders.InsertColumn(0,(CString)"№ Чит.бил.",LVCFMT_LEFT,75,-1);

m_ListReaders.InsertColumn(1,(CString)"ФИО",LVCFMT_LEFT,130,-1);

m_ListReaders.InsertColumn(2,(CString)"Телефон",LVCFMT_LEFT,80,-1);

m_ListReaders.InsertColumn(3,(CString)"Дата записи",LVCFMT_LEFT,80,-1);

for(int i=0, j=readerslist->quantity;j!=0;i++,j--)

{

str=readerslist->getElement(i);

m_ListReaders.InsertItem(i,0);

m_ListReaders.SetItemText(i,0,str[0]);

m_ListReaders.SetItemText(i,1,str[1]);

m_ListReaders.SetItemText(i,2,str[2]);

m_ListReaders.SetItemText(i,3,str[3]);

}

}

//Метода класса List_BooksInsert Внесение данных в таблицу Книги

List_BooksInsert::List_BooksInsert(СBooksList* bl)

{

bookslist=bl;

}

List_BooksInsert::~List_BooksInsert()

{

}

void List_BooksInsert::setData()

{

m_ListBooks.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT);

m_ListBooks.DeleteAllItems();

m_ListBooks.DeleteColumn(0);

m_ListBooks.DeleteColumn(0);

m_ListBooks.DeleteColumn(0);

m_ListBooks.DeleteColumn(0);

m_ListBooks.DeleteColumn(0);

char ** str;

m_ListBooks.InsertColumn(0,(CString)"Шифр",LVCFMT_LEFT,70,-1);

m_ListBooks.InsertColumn(1,(CString)"Автор",LVCFMT_LEFT,100,-1);

m_ListBooks.InsertColumn(2,(CString)"Название",LVCFMT_LEFT,130,-1);

m_ListBooks.InsertColumn(3,(CString)"Год издания",LVCFMT_LEFT,80,-1);

m_ListBooks.InsertColumn(4,(CString)"Количество",LVCFMT_LEFT,80,-1);

for(int i=0, j=bookslist->quantity;j!=0;i++,j--)

{

str=bookslist->getElement(i);

m_ListBooks.InsertItem(i,0);

m_ListBooks.SetItemText(i,0,str[0]);

m_ListBooks.SetItemText(i,1,str[1]);

m_ListBooks.SetItemText(i,2,str[2]);

m_ListBooks.SetItemText(i,3,str[3]);

m_ListBooks.SetItemText(i,4,str[4]);

//Сделать очищение двумерного массива!!!!!!!!!!!!!

delete[] str;

}

}

//Метода класса List_ReadersBooksInsert Внесение данных в таблицу Книги Читателя

List_LibCardInsert::List_LibCardInsert(СLibCardList *ll)

{

libcardlist=ll;

}

List_LibCardInsert::~List_LibCardInsert()

{

}

void List_LibCardInsert::setData()

{

m_ListReadersBooks.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT);

m_ListReadersBooks.DeleteAllItems();

m_ListReadersBooks.DeleteColumn(0);

m_ListReadersBooks.DeleteColumn(0);

m_ListReadersBooks.DeleteColumn(0);

m_ListReadersBooks.DeleteColumn(0);

m_ListReadersBooks.DeleteColumn(0);

char ** s=NULL;

m_ListReadersBooks.InsertColumn(0,(CString)"Шифр",LVCFMT_LEFT,60,-1);

m_ListReadersBooks.InsertColumn(1,(CString)"Автор",LVCFMT_LEFT,120,-1);

m_ListReadersBooks.InsertColumn(2,(CString)"Название",LVCFMT_LEFT,160,-1);

m_ListReadersBooks.InsertColumn(3,(CString)"Дата взятия",LVCFMT_LEFT,100,-1);

m_ListReadersBooks.InsertColumn(4,(CString)"Дата возврата",LVCFMT_LEFT,100,-1);

for(int i=0, j=libcardlist->quantity;j!=0;i++,j--)

{

s=libcardlist->getElement(i); //!!!!!!!!!!!

m_ListReadersBooks.InsertItem(i,0);

m_ListReadersBooks.SetItemText(i,0,s[0]);

m_ListReadersBooks.SetItemText(i,1,s[1]);

m_ListReadersBooks.SetItemText(i,2,s[2]);

m_ListReadersBooks.SetItemText(i,3,s[3]);

m_ListReadersBooks.SetItemText(i,4,s[4]);

}

//Сделать очищение двумерного массива!!!!!!!!!!!!!

if(s)

delete[] s;

}

// Методы класса List_SelectBook

List_SelectBook::List_SelectBook(СBooksList* b):List_BooksInsert(b)

{

}

List_SelectBook::~List_SelectBook()

{

}

void List_SelectBook::setData()

{

m_ListSelectBook.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT);

m_ListSelectBook.DeleteAllItems();

m_ListSelectBook.DeleteColumn(0);

m_ListSelectBook.DeleteColumn(0);

m_ListSelectBook.DeleteColumn(0);

char ** str;

m_ListSelectBook.InsertColumn(0,(CString)"Шифр",LVCFMT_LEFT,70,-1);

m_ListSelectBook.InsertColumn(1,(CString)"Автор",LVCFMT_LEFT,100,-1);

m_ListSelectBook.InsertColumn(2,(CString)"Название",LVCFMT_LEFT,130,-1);

for(int i=0, j=bookslist->quantity;j!=0;i++,j--)

{

str=bookslist->getElement(i);

m_ListSelectBook.InsertItem(i,0);

m_ListSelectBook.SetItemText(i,0,str[0]);

m_ListSelectBook.SetItemText(i,1,str[1]);

m_ListSelectBook.SetItemText(i,2,str[2]);

delete[] str;

}

DbClasses.h

class Err;

//Класс для получения информации из таблицы Читатели базы данных и RFX

class DbReaders:virtual public CRecordset{

CString m_libcardset;

CString m_fioset;

CString m_telset;

CString m_dateset;

public:

DbReaders( CDatabase* pDatabase = NULL);

virtual void DoFieldExchange(CFieldExchange* pFX);

void SetInfo(CString libcardset,CString fioset,CString telset, CString dateset); //Функция внесения данных(строки) в класс

void GetInfo(CString &libcardset,CString &fioset,CString &telset, CString &dateset);//Функция получения данных(строки) из класса

void GetLibCard(CString &libcardset);

};

//Класс для получения информации из таблицы Книги базы данных и RFX

class DbBooks:virtual public CRecordset{

CString m_shifrset;

CString m_writerset;

CString m_titleset;

int m_yearset;

int m_numberset;

public:

DbBooks( CDatabase* pDatabase = NULL);

virtual void DoFieldExchange(CFieldExchange* pFX);

void GetInfo(CString &shifrset,CString &writerset,CString &titleset, int &yearset, int &numberset); //Функция получения данных(строки) из класса

void SetInfo(CString shifrset,CString writerset,CString titleset, int yearset,int numberset);

void GetReport(CString &writerset,CString &titleset);

void GetShifr(CString &shifrset);

};

//Класс для получения информации о книгах, взятых читателем

class DbGiveBook:virtual public CRecordset{

CString m_gbshifrset;

CString m_gbwriterset;

CString m_gbtitleset;

CString m_gbfrstdateset;

CString m_gbscnddateset;

public:

DbGiveBook( CDatabase* pDatabase = NULL);

virtual void DoFieldExchange(CFieldExchange* pFX);

void SetInfo(CString gbshifrset,CString gbwriterset,CString gbtitleset, CString gbfrstdateset,CString gbscnddateset); //Функция внесения данных(строки) в класс

void GetInfo(CString &gbshifrset,CString &gbwriterset,CString &gbtitleset, CString &gbfrstdateset,CString &gbscnddateset); //Функция получения данных(строки) из класса

};

//Класс для получения информации о читательском билете

class DbLibCard:virtual public CRecordset{

CString m_gbshifr;

CString m_gblibcard;

CString m_gbfrstdate;

CString m_gbscnddate;

public:

DbLibCard( CDatabase* pDatabase = NULL);

virtual void DoFieldExchange(CFieldExchange* pFX);

void SetInfo(CString gbshifr,CString gblibcard,CString gbfrstdate,CString gbscnddate=NULL); //Функция внесения данных(строки) в класс

void GetInfo(CString &gbshifr,CString &gblibcard,CString &gbfrstdate,CString &gbscnddate); //Функция получения данных(строки) из класса

void SetDate(CString gbscnddate);

};

//Класс обработки исключительных ситуаций

class Err{

CString TextError;

public:

Err(CString InTextError);

void ErrorMessageBox();

};

DbClasses.cpp

//Методы класса DbReaders (работы с БД таблицей Читатели)

DbReaders::DbReaders( CDatabase* pDatabase):CRecordset(pDatabase)

{

}

void DbReaders::DoFieldExchange(CFieldExchange* pFX)

{

pFX->SetFieldType(CFieldExchange::outputColumn);

RFX_Text(pFX,_T("НомерЧитБил"),m_libcardset);

RFX_Text(pFX,_T("ФИОЧитателя"),m_fioset);

RFX_Text(pFX,_T("ТелЧит"),m_telset);

RFX_Text(pFX,_T("ДатаЗаписи"),m_dateset);

}

void DbReaders::GetInfo(CString &libcardset,CString &fioset,CString &telset, CString &dateset)

{

libcardset=m_libcardset;

fioset=m_fioset;

telset=m_telset;

dateset=m_dateset;

dateset.Truncate(10);

}

void DbReaders::SetInfo(CString libcardset,CString fioset,CString telset, CString dateset)

{

for(int i=0,flag=1;i<6;i++)

if(!(*(libcardset.GetBuffer()+i)>='0' && *(libcardset.GetBuffer()+i)<='9')){

flag=0;

throw Err("Введен неверный номер читательского билета!");

}

m_libcardset=libcardset;

//Проверка ФИО

char* str1,*str2;

int flag=1;

str1=fioset.GetBuffer();

str2=str1+strlen(str1)-1;

if(*str2!='.' || *(str2-2)!='.' || !(*(str2-1)>='А' && *(str2-1)<='Я') ||

!(*(str2-3)>='А' && *(str2-3)<='Я') || *(str2-4)!=' ')

flag=0;

else str2-=5;

while(str2!=str1 && flag==1)

{

if (!(*str2<='я' && *str2>='а'))

flag=0;

else str2--;

}

if (!(*str2>='А' && (*str2)<='Я') || flag==0)

throw Err("Неверный ввод ФИО!\nВведите ФИО в формате: \"Фамилия И.О.\"");

m_fioset=fioset;

//Проверка номера телефона

flag=1;

if(*(telset.GetBuffer()+3)!='-' || *(telset.GetBuffer()+6)!='-')

flag=0;

for(int i=0;i<3 && flag;i++)

if(!(*(telset.GetBuffer()+i)>='0' && *(telset.GetBuffer()+i)<='9'))

flag=0;

for(int i=4;i<6 && flag;i++)

if(!(*(telset.GetBuffer()+i)>='0' && *(telset.GetBuffer()+i)<='9'))

flag=0;

for(int i=7;i<9 && flag;i++)

if(!(*(telset.GetBuffer()+i)>='0' && *(telset.GetBuffer()+i)<='9'))

flag=0;

if(!flag)

throw Err("Введен неверный номер телефона! \nНомер телефона должен быть в формате:'123-45-67'");

m_telset=telset;

m_dateset=dateset;

}

void DbReaders::GetLibCard(CString &libcardset)

{

libcardset=m_libcardset;

}

//Методы класса DbBooks (работы с БД таблицей Книги)

DbBooks::DbBooks( CDatabase* pDatabase):CRecordset(pDatabase)

{

}

void DbBooks::DoFieldExchange(CFieldExchange* pFX)

{

pFX->SetFieldType(CFieldExchange::outputColumn);

RFX_Text(pFX,_T("ШифрКниги"),m_shifrset);

RFX_Text(pFX,_T("АвторКниги"),m_writerset);

RFX_Text(pFX,_T("НазваниеКниги"),m_titleset);

RFX_Int(pFX,_T("ГодИздания"),m_yearset);

RFX_Int(pFX,_T("КолЭкземпляров"),m_numberset);

}

void DbBooks::GetInfo(CString &shifrset,CString &writerset,CString &titleset, int &yearset, int &numberset)

{

shifrset=m_shifrset;

writerset=m_writerset;

titleset=m_titleset;

yearset=m_yearset;

numberset=m_numberset;

}

void DbBooks::SetInfo(CString shifrset,CString writerset,CString titleset, int yearset,int numberset)

{

int flag=1;

for(int i=6;i>3 && flag;i--)

if(!(*(shifrset.GetBuffer()+i)>='0' && *(shifrset.GetBuffer()+i)<='9'))

flag=0;

if(*(shifrset.GetBuffer()+3)!='.' && flag)

flag=0;

else

for(int i=2;i>=0 && flag;i--)

if(!(*(shifrset.GetBuffer()+i)>='а' && *(shifrset.GetBuffer()+i)<='я'))

flag=0;

if(!flag)

throw Err("Введен неверный шифр книги! \nШифр книги должен быть в формате:'абв.012'");

m_shifrset=shifrset;

char* str1,*str2;

str1=writerset.GetBuffer();

str2=str1+strlen(str1)-1;

if(*str2!='.' || *(str2-2)!='.' || !(*(str2-1)>='А' && *(str2-1)<='Я') ||

!(*(str2-3)>='А' && *(str2-3)<='Я') || *(str2-4)!=' ')

flag=0;

else str2-=5;

while(str2!=str1 && flag==1)

{

if (!(*str2<='я' && *str2>='а'))

flag=0;

else str2--;

}

if (!(*str2>='А' && (*str2)<='Я') || flag==0)

throw Err("Неверный ввод ФИО автора!\nВведите ФИО автора в формате: \"Фамилия И.О.\"");

m_writerset=writerset;

m_titleset=titleset;

m_yearset=yearset;

if(numberset<=0)

throw Err("Количество экземпляров не может быть отриательным!");

m_numberset=numberset;

}

void DbBooks::GetReport(CString &writerset,CString &titleset)

{

writerset=m_writerset;

titleset=m_titleset;

}

void DbBooks::GetShifr(CString &shifrset)

{

shifrset=m_shifrset;

}

//Методы класса DbGiveBook (работы с БД таблицами ЗакрепКнигиЗаЧит и Книги)

DbGiveBook::DbGiveBook( CDatabase* pDatabase):CRecordset(pDatabase)

{

}

void DbGiveBook::DoFieldExchange(CFieldExchange* pFX)

{

pFX->SetFieldType(CFieldExchange::outputColumn);

RFX_Text(pFX,_T("ШифрКниги"),m_gbshifrset);

RFX_Text(pFX,_T("АвторКниги"),m_gbwriterset);

RFX_Text(pFX,_T("НазваниеКниги"),m_gbtitleset);

RFX_Text(pFX,_T("ДатаЗакрКн"),m_gbfrstdateset);

RFX_Text(pFX,_T("ДатаВозврКн"),m_gbscnddateset);

}

void DbGiveBook::GetInfo(CString &gbshifrset,CString &gbwriterset,CString &gbtitleset, CString &gbfrstdateset,CString &gbscnddateset)

{

gbshifrset=m_gbshifrset;

gbwriterset=m_gbwriterset;

gbtitleset=m_gbtitleset;

gbfrstdateset=m_gbfrstdateset;

if(strlen(gbfrstdateset))

gbfrstdateset.Truncate(10);

gbscnddateset=m_gbscnddateset;

if(strlen(gbscnddateset))

gbscnddateset.Truncate(10);

}

void DbGiveBook::SetInfo(CString gbshifrset,CString gbwriterset,CString gbtitleset, CString gbfrstdateset,CString gbscnddateset)

{

m_gbshifrset=gbshifrset;

m_gbwriterset=gbwriterset;

m_gbtitleset=gbtitleset;

m_gbfrstdateset=gbfrstdateset;

m_gbscnddateset=gbscnddateset;

}

//Методы класса DbLibCard (работы с БД, таблицей ЗакрепКнигиЗаЧит)

DbLibCard::DbLibCard( CDatabase* pDatabase):CRecordset(pDatabase)

{

}

void DbLibCard::DoFieldExchange(CFieldExchange* pFX)

{

pFX->SetFieldType(CFieldExchange::outputColumn);

RFX_Text(pFX,_T("ШифрКниги1"),m_gbshifr);

RFX_Text(pFX,_T("НомерЧитБил"),m_gblibcard);

RFX_Text(pFX,_T("ДатаЗакрКн"),m_gbfrstdate);

RFX_Text(pFX,_T("ДатаВозврКн"),m_gbscnddate);

}

void DbLibCard::GetInfo(CString &gbshifr,CString &gblibcard, CString &gbfrstdate,CString &gbscnddate)

{

gbshifr=m_gbshifr;

gblibcard=m_gblibcard;

gbfrstdate=m_gbfrstdate;

if(strlen(gbfrstdate))

gbfrstdate.Truncate(10);

gbscnddate=m_gbscnddate;

if(strlen(gbscnddate))

gbscnddate.Truncate(10);

}

void DbLibCard::SetInfo(CString gbshifr,CString gblibcard,CString gbfrstdate,CString gbscnddate)

{

m_gbshifr=gbshifr;

m_gblibcard=gblibcard;

m_gbfrstdate=gbfrstdate;

m_gbscnddate=gbscnddate;

}

void DbLibCard::SetDate(CString gbscnddate)

{

m_gbscnddate=gbscnddate;

}

Err::Err(CString InTextError)

{TextError=InTextError;}

void Err::ErrorMessageBox()

{

MessageBox(NULL, TextError, "Ошибка!", MB_ICONSTOP| MB_OK);

}