| At 
								Гость
 | 
								|  | « :  28-03-2010 14:22 »   |  | 
 
 Помогите с Лабой, препод тупа отказывается обьяснять,а сам я не могу дойти...Мои вопросы:
 -Где (В каком классе)описывать (1)?
 -Где описывать(2)?
 
 Вот вырезка из методички:
 
 Данными, с которыми работает приложение, будут фамилия, имя, отчество абитуриента и оценки по 3-м дисциплинам – математике, физике и русскому языку. Описать эти данные можно следующей структурой:
 
 typedef struct
 {   CString   name1;
 CString   name2;
 CString   name3; //------------(1)
 int      mark1;
 int      mark2;
 int      mark3;
 }
 SRTUCTRECORD;
 
 
 
 
 В классе документа эти данные опишем в виде массива, используя шаблон для класса CArray:
 
 class CLb7Doc : public CDocument
 {
 protected: // create from serialization only
 CLb7Doc();
 DECLARE_DYNCREATE(CLb7Doc)
 …// Attributes
 public:
 CArray <SRTUCTRECORD, SRTUCTRECORD> m_data;
 
 Для занесения и извлечения данных из массива используются методы класса CArray , поэтому здесь не будем использовать собственные методы, тем более, что член класса m_data является открытым.
 Для сохранения и чтения из файла данных в документ, а также для создания документа  MFC AppWizard реализованы команды ID_FILE_OPEN и ID_FILE_SAVE, ID_FILE_SAVE_AS и ID_FILE_NEW
 
 Для выполнения этих команд библиотекой MFC вызываются соответствующие методы, реализация которых скрыта от программиста. Только два метода могут быть изменены:
 -   OnNewDocument() – здесь можно произвести инициализацию данных документа для MDI- приложения или очистку данных для SDI-приложения, т.е. уничтожение старых данных. Например, для нашего случая это может быть следующий код
 
 BOOL CLab7Doc::OnNewDocument()
 {
 // Всю стандартную обработку по созданию документа возлагаем
 // на библиотеку MFC
 if (!CDocument::OnNewDocument())
 return FALSE;
 //После успешного создания проводим очистку массива  сданными
 m_data.RemoveAll();
 return TRUE;
 }
 Метод Serialize() – здесь выполняется, собственно, сохранение данных в файл или  чтение из файла данных в структуры документа. Этот метод вызывается при выполнении команд Open, Save или Save As после выбора блоком диалога имени файла.
 Метод Serialize называется сериализацией – преобразование в последовательную форму и наоборот, позволяет сохранять и восстанавливать объекты классов, созданных на базе класса CObject. В нашем случае, нужно дополнить этот метод кодом по сохранению и восстановлению данных из файлового бинарного потока (данные записываются в файл без преобразования), который называют архивом. В качестве параметра в этот метод передается указатель на созданный экземпляр класса CArchiv , с которым ассоциирован объект класса CFile. Имя файла подставляется после выполнения кода диалогового окна по выбору имени файла. В классе CArchiv реализованы несколько вариантов перегружаемых операторов >> и << , которые, собственно, загружают объекты (или простые типы) из архива или сохраняют их в архиве. Они имеют следующие однотипные формы:
 
 fried CArchive& operator << (CArchive &ar, CObject *&pOb)
 fried CArchive& operator >> (CArchive &ar, CObject *&pOb)
 или для простых типов                                 //------------------------(2)
 fried CArchive& operator << (Data_Type& data)
 fried CArchive& operator >> (Data_Type& data),
 
 
 где через Data_Type обозначены примитивные типы данных BYTE, WORD, int, DWORD, float double.
 
 Метод  CArchive::IsStoring возвращает направление потока
 void CLb7Doc::Serialize(CArchive& ar)
 {
 if (ar.IsStoring())
 {      // TODO: add storing code here
 // Работа с потоком выполняется с простыми типами
 ar << m_data.GetSize();
 for (int i=0; i < m_data.GetSize(); i++)
 {
 ar << m_data.GetAt(i).name1;
 ar << m_data.GetAt(i).name2;
 ar << m_data.GetAt(i).name3;
 ar << m_data.GetAt(i).mark1;
 ar << m_data.GetAt(i).mark2;
 ar << m_data.GetAt(i).mark3;
 }
 }
 else
 {
 // TODO: add loading code here
 int size;
 SRTUCTRECORD rec;
 ar >> size;
 m_data.SetSize(size, 1);
 for (int i=0; i < size; i++)
 {
 ar >> rec.name1;
 ar >> rec.name2;
 ar >> rec.name3;
 ar >> rec.mark1;
 ar >> rec.mark2;
 ar >> rec.mark3;
 m_data.SetAt(i,rec);
 }
 }}
 
 
 |