Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООПиП (часть 3). Пример контрольной работы

..pdf
Скачиваний:
10
Добавлен:
01.04.2014
Размер:
533.34 Кб
Скачать

БГУИР: Дистанционное обучение (неофициальный сайт)

/* =================================== */ /* Обработчики сброса/установки флагов */ afx_msg void OnBnClickedCheck1();

afx_msg void OnBnClickedCheck2(); afx_msg void OnBnClickedCheck3(); afx_msg void OnBnClickedCheck4();

/* =================================== */

DECLARE_MESSAGE_MAP()

// Функция генерации карты сообщений

public:

CLab3_2Doc* GetDocument(); // Получение документа

virtual CRecordset* OnGetRecordset(); // Получение набора данных

enum { IDD = IDD_LAB3_2_FORM };

//Данные диалога

CLab3_2Set* m_pSet;

//Экземпляр набора данных

/* ================================================== */ /* Ассоциированные с элементами управления переменные */ CEdit m_NameF;

CEdit m_AddressF; CEdit m_PhoneF; CEdit m_PriceF; BOOL m_PriceB; BOOL m_PhoneB; BOOL m_AddressB; BOOL m_NameB; CButton m_button;

/* ================================================== */

};

3.2.6Реализация класса CLab3_2View (CLab3_2View.cpp)

//Реализация класса CLab3_2View

#include "stdafx.h" #include "Lab3_2.h" #include "Lab3_2Set.h" #include "Lab3_2Doc.h" #include "Lab3_2View.h"

#ifdef _DEBUG

#define new DEBUG_NEW #endif

IMPLEMENT_DYNCREATE( CLab3_2View, CRecordView ) // Динамическое создание объекта

BEGIN_MESSAGE_MAP( CLab3_2View, CRecordView ) // Функция генерации карты сообщений

/* ============================================================ */ /* Обработчики сообщений кнопок панели управления и команд меню */ ON_COMMAND( ID_RECORD_NEW, OnRecordNew )

ON_COMMAND( ID_RECORD_DEL, OnRecordDel )

ON_COMMAND( ID_FILE_PRINT, CRecordView::OnFilePrint ) ON_COMMAND( ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint )

ON_COMMAND( ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview ) /* ============================================================ */

/*

====================================== */

 

/*

Обработчики изменения состояния флагов */

 

 

http://do.ucoz.net

11

БГУИР: Дистанционное обучение (неофициальный сайт)

ON_BN_CLICKED( IDC_CHECK1, OnBnClickedCheck1 ) ON_BN_CLICKED( IDC_CHECK2, OnBnClickedCheck2 ) ON_BN_CLICKED( IDC_CHECK3, OnBnClickedCheck3 ) ON_BN_CLICKED( IDC_CHECK4, OnBnClickedCheck4 ) ON_BN_CLICKED( IDC_CHECK1, OnBnClickedCheck1 ) /* ====================================== */

ON_BN_CLICKED( IDC_BUTTON_FILTER, OnBnClickedButtonFilter ) // Обработчик нажатия клавиши "Применить фильтр" ON_UPDATE_COMMAND_UI( ID_RECORD_DEL, OnUpdateRecordDel )

// Обработчик обновления пользовательского интерфейса для кнопки удаления

записи

END_MESSAGE_MAP()

CLab3_2View::CLab3_2View()

: CRecordView(CLab3_2View::IDD)

,m_PriceB(FALSE)

,m_PhoneB(FALSE)

,m_AddressB(FALSE)

,m_NameB(FALSE)

//Стандартный конструктор

{

m_pSet = NULL;

}

void CLab3_2View::DoDataExchange( CDataExchange* pDX ) // Поддержка DDX/DDV

{

CRecordView::DoDataExchange( pDX ); // Вызов функции родителя

/* ==================================================== */ /* Ассоциация элементов управления с переменными набора */ DDX_FieldText( pDX, IDC_EDIT1, m_pSet->m_ID, m_pSet ); DDX_FieldText( pDX, IDC_EDIT2, m_pSet->m_Name, m_pSet ); DDX_FieldText( pDX, IDC_EDIT3, m_pSet->m_Address, m_pSet ); DDX_FieldText( pDX, IDC_EDIT4, m_pSet->m_Phone, m_pSet ); DDX_FieldText( pDX, IDC_EDIT5, m_pSet->m_Price, m_pSet ); /* ==================================================== */

/* ============================================= */ /* Ассоциация элементов управления с переменными */ DDX_Control( pDX, IDC_EDIT6, m_NameF ); DDX_Control( pDX, IDC_EDIT7, m_AddressF ); DDX_Control( pDX, IDC_EDIT8, m_PhoneF ); DDX_Control( pDX, IDC_EDIT9, m_PriceF );

DDX_Check( pDX, IDC_CHECK4, m_PriceB );

DDX_Check( pDX, IDC_CHECK3, m_PhoneB ); DDX_Check( pDX, IDC_CHECK2, m_AddressB ); DDX_Check( pDX, IDC_CHECK1, m_NameB );

/* ============================================= */ DDX_Control(pDX, IDC_BUTTON_FILTER, m_button);

}

void CLab3_2View::OnInitialUpdate() // Инициализация

{

m_pSet = &GetDocument()->m_lab3_2Set;

//Связь переменной с набором данных документа

CRecordView::OnInitialUpdate();

//Вызов функции родительского класса

GetParentFrame()->RecalcLayout();

//Разрешение реакции окна на изменение размера

ResizeParentToFit();

//Приводит размеры окна в соответствие с размерами представления

http://do.ucoz.net

12

БГУИР: Дистанционное обучение (неофициальный сайт)

}

BOOL CLab3_2View::OnPreparePrinting( CPrintInfo* pInfo )

// Обработчик запуска предварительного просмотра или печати

{

return DoPreparePrinting( pInfo );

// Создает контекст устройства принтера

}

void CLab3_2View::OnBeginPrinting( CDC* pDC, CPrintInfo* pInfo ) // Обработчик начала печати (задание количества страниц)

{

int PageHeight = pDC->GetDeviceCaps( VERTRES );

//Получение информации о принтере (высота - в линиях растра) CSize TextSize = pDC->GetTextExtent( "Text" );

//Размер текстовой строки

int NumRecord = 0; m_pSet->MoveFirst();

// Перемещение на первую запись в БД while ( !(m_pSet->IsEOF()) )

//Перебор всех записей

{

NumRecord += 1;

//Посчет количества записей m_pSet->MoveNext();

//Перемещение на следующую запись в БД

}

int NumPage = int(PageHeight / (double(TextSize.cy) * 1.5)); NumPage = (NumRecord + 1) / NumPage + 1;

//Определение количества страниц, необходимых для вывода всех записей pInfo->SetMaxPage( NumPage );

//Установка количество страниц

m_pSet->MoveFirst();

//Перемещение на первую запись в БД

UpdateData( FALSE );

//Загрузка данных из переменных в ассоциированные элементы управления

}

#ifdef _DEBUG

CLab3_2Doc* CLab3_2View::GetDocument()

//Получение документа (отладочная версия)

{

ASSERT( m_pDocument->IsKindOf( RUNTIME_CLASS(CLab3_2Doc) ) ); return (CLab3_2Doc*)m_pDocument;

}

#else

inline CLab3_2Doc* CLab3_2View::GetDocument()

//Получение документа (обычная версия)

{

return (CLab3_2Doc*)m_pDocument;

}

#endif //_DEBUG

CRecordset* CLab3_2View::OnGetRecordset() // Получение набора данных

{

return m_pSet;

}

void CLab3_2View::OnRecordNew()

// Обработчик команды создания новой записи

{

m_pSet->AddNew();

// Создание новой записи

/* ================================= */

http://do.ucoz.net

13

БГУИР: Дистанционное обучение (неофициальный сайт)

/* Заполнение записи пустыми данными */ m_pSet->m_Name = _T(""); m_pSet->m_Address = _T(""); m_pSet->m_Phone = _T(""); m_pSet->m_Price = 0.0;

/* ================================= */

m_pSet->Update();

//Физическое изменение БД m_pSet->Requery();

//Повторное считывание набора данных m_pSet->MoveLast();

//Перемещение к последней записи БД

UpdateData( FALSE );

//Загрузка данных из переменных в ассоциированные элементы управления

}

void CLab3_2View::OnRecordDel()

// Обработчик команды удаления записи

{

if (m_pSet->GetRecordCount() > 0)

{

m_pSet->Delete();

// Удаление текущей записи

/* ==================== */ /* Сброс данных фильтра */ m_NameB = FALSE; m_AddressB = FALSE; m_PhoneB = FALSE;

m_PriceB = FALSE; m_NameF.SetReadOnly(); m_AddressF.SetReadOnly(); m_PhoneF.SetReadOnly(); m_PriceF.SetReadOnly();

/* ==================== */

m_pSet->m_strFilter = "";

//Сброс строки фильтра m_pSet->MoveFirst();

//Перемещение на первую запись в БД m_pSet->Requery();

//Повторное считывание набора данных

UpdateData( FALSE );

//Загрузка данных из переменных в ассоциированные элементы управле-

ния

}

}

/* =================================== */ /* Обработчики сброса/установки флагов */ void CLab3_2View::OnBnClickedCheck1()

{

UpdateData(TRUE);

//Загрузка данных из элементов управления в ассоциированные переменные m_NameF.SetReadOnly( !m_NameB );

//Установка статуса "только чтение" для поля ввода

}

void CLab3_2View::OnBnClickedCheck2()

{

UpdateData(TRUE); m_AddressF.SetReadOnly( !m_AddressB );

}

void CLab3_2View::OnBnClickedCheck3()

{

UpdateData(TRUE);

http://do.ucoz.net

14

БГУИР: Дистанционное обучение (неофициальный сайт)

m_PhoneF.SetReadOnly( !m_PhoneB );

}

void CLab3_2View::OnBnClickedCheck4()

{

UpdateData(TRUE); m_PriceF.SetReadOnly( !m_PriceB );

}

/* =================================== */

void CLab3_2View::OnBnClickedButtonFilter() // Обработчик кнопки "Применить фильтр"

{

CString

filter = "";

 

CString

NameFilter = "";

CString

AddressFilter

= "";

CString

PhoneFilter =

"";

CString

PriceFilter =

"";

if (m_NameB)

 

// Если

флаг установлен, то сформировать запрос

{

 

 

m_NameF.GetWindowText( NameFilter );

if (strlen( NameFilter ) == 0) filter = "[Name] Is Null";

//Если пустая строки, то поиск пустых данных else filter = "[Name] = '" + NameFilter + "'";

//Иначе запрос введенного параметра

}

if (m_AddressB)

// Если флаг установлен, то сформировать запрос

{

m_AddressF.GetWindowText( AddressFilter ); if ( filter != "" ) filter += " AND ";

if (strlen( AddressFilter ) == 0) filter = "[Address] Is Null"; // Если пустая строки, то поиск пустых данных

else filter += "[Address] = '" + AddressFilter + "'"; // Иначе запрос введенного параметра

}

if (m_PhoneB)

// Если флаг установлен, то сформировать запрос

{

m_PhoneF.GetWindowText( PhoneFilter ); if ( filter != "" ) filter += " AND ";

if (strlen( PhoneFilter ) == 0) filter = "[Phone] Is Null";

//Если пустая строки, то поиск пустых данных else filter += "[Phone] = '" + PhoneFilter + "'";

//Иначе запрос введенного параметра

}

if (m_PriceB)

// Если флаг установлен, то сформировать запрос

{

m_PriceF.GetWindowText( PriceFilter ); if ( filter != "" ) filter += " AND ";

if (strlen( PriceFilter ) == 0) filter = "[Price] Is Null";

//Если пустая строки, то поиск пустых данных else filter += "[Price] = " + PriceFilter;

//Иначе запрос введенного параметра

}

m_pSet->m_strFilter = filter;

//Установить строку фильтрации запроса m_pSet->Requery();

//Повторное считывание набора данных

UpdateData( FALSE );

//Загрузка данных из переменных в ассоциированные элементы управления if (m_pSet->GetRecordCount() == 0)

//Если найденных записей нет

{

AfxMessageBox( "Record not found!" );

http://do.ucoz.net

15

БГУИР: Дистанционное обучение (неофициальный сайт)

// Вывести сообщение

/* ==================== */ /* Сброс данных фильтра */ m_NameB = FALSE; m_AddressB = FALSE; m_PhoneB = FALSE;

m_PriceB = FALSE; m_NameF.SetReadOnly(); m_AddressF.SetReadOnly(); m_PhoneF.SetReadOnly(); m_PriceF.SetReadOnly();

/* ==================== */

m_pSet->m_strFilter = "";

//Сброс строки фильтра m_pSet->Requery();

//Повторное считывание набора данных m_pSet->MoveFirst();

//Перемещение на первую запись в БД

UpdateData( FALSE );

//Загрузка данных из переменных в ассоциированные элементы управле-

ния

}

}

void CLab3_2View::OnPrepareDC( CDC* pDC, CPrintInfo* pInfo ) // Обаботчик подготовки к печати

{

if (pDC->IsPrinting())

// Проверка на начало печати

{

int PageHeight = pDC->GetDeviceCaps( VERTRES );

//Получение информации о принтере (высота - в линиях растра) int OriginY = PageHeight * (pInfo->m_nCurPage-1);

//Определение размера смещения по Y в зависимости от номера страни-

цы

pDC->SetViewportOrg(0, -OriginY); // Задание смещения по Y

}

else CView::OnPrepareDC(pDC, pInfo); // Вызов родительской функции

}

void CLab3_2View::OnPrint( CDC* pDC, CPrintInfo* pInfo ) // Обработчик печати

{

int PageHeight = pDC->GetDeviceCaps( VERTRES );

//Получение информации о принтере (высота - в линиях растра) int PageWidth = pDC->GetDeviceCaps( HORZRES );

//Получение информации о принтере (ширина - в пикселях)

int sx = 10; int sy = 40;

CSize TextSize = pDC->GetTextExtent( "Text" ); // Размер текстовой строки

int dy = int(TextSize.cy * 0.25); int dx = int(PageWidth * 0.01);

int dx0 = dx + int(PageWidth * 0.075); int dx1 = dx0 + int(PageWidth * 0.275); int dx2 = dx1 + int(PageWidth * 0.35); int dx3 = dx2 + int(PageWidth * 0.15); m_pSet->MoveFirst();

// Перемещение на первую запись в БД int i = 1;

/* ============================== */ /* Вывод заголовка таблицы данных */

http://do.ucoz.net

16

БГУИР: Дистанционное обучение (неофициальный сайт)

pDC->MoveTo( sx, sy );

pDC->LineTo( PageWidth - 2 * sx, sy ); pDC->TextOut( sx + dx, sy + dy, "ID" ); pDC->TextOut( sx + dx0, sy + dy, "Name" ); pDC->TextOut( sx + dx1, sy + dy, "Address" ); pDC->TextOut( sx + dx2, sy + dy, "Phone" ); pDC->TextOut( sx + dx3, sy + dy, "Price" ); /* ============================== */

int StrCount = int(PageHeight / (double(TextSize.cy) * 1.5)); // Определение количества строк, помещающихся на странице

int ddy = PageHeight - int(StrCount * (double(TextSize.cy) * 1.5));

// Определение смещения на каждой странице, необходимого для корректного отображения

while ( !(m_pSet->IsEOF()) ) // Перебор всех записей

{

/* =========================== */ /* Вывод строки таблицы данных */

pDC->MoveTo( sx, sy + int(TextSize.cy * 1.5 * i) + ddy * (i /

StrCount) );

pDC->LineTo( PageWidth - 2 * sx, sy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount) );

char str [ 20 ];

_itoa( m_pSet->m_ID, str, 10 );

pDC->TextOut( sx + dx, sy + dy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount), str );

pDC->TextOut( sx + dx0, sy + dy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount), m_pSet->m_Name );

pDC->TextOut( sx + dx1, sy + dy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount), m_pSet->m_Address );

pDC->TextOut( sx + dx2, sy + dy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount), m_pSet->m_Phone );

_gcvt( m_pSet->m_Price, 10, str );

if (str[ strlen( str )-1 ] == '.') str[ strlen( str )-1 ] = '\0'; strcat( str, "$" );

pDC->TextOut( sx + dx3, sy + dy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount), str );

i++;

/* =========================== */ m_pSet->MoveNext();

// Перемещение на следующую запись в БД

}

pDC->MoveTo( sx, sy + int(TextSize.cy * 1.5 * i) + ddy * (i / StrCount) ); pDC->LineTo( PageWidth - 2 * sx, sy + int(TextSize.cy * 1.5 * i) + ddy * (i

/StrCount) );

//Завершение вывода таблицы

CRecordView::OnPrint(pDC, pInfo);

//Функция родительского класса m_pSet->MoveFirst();

//Перемещение на первую запись в БД

UpdateData(FALSE);

//Загрузка данных из переменных в ассоциированные элементы управления

};

void CLab3_2View::OnUpdateRecordDel( CCmdUI *pCmdUI )

// Обработчик обновления пользовательского интерфейса для кнопки удаления записи

{

if (m_pSet->GetRecordCount() == 0) pCmdUI->Enable( FALSE );

//Если записей нет, то отключить else pCmdUI->Enable( TRUE );

//Иначе - включить

}

http://do.ucoz.net

17

БГУИР: Дистанционное обучение (неофициальный сайт)

3.2.7Заголовок класса CMainFrame (CMainFrame.h)

//Заголовок класса CMainFrame

#pragma once

class CMainFrame : public CFrameWnd

{

protected:

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

//Обработчик сообщения WM_CREATE DECLARE_DYNCREATE(CMainFrame)

//Динамическое создание объекта

DECLARE_MESSAGE_MAP()

//Функция генерации карты сообщений

CStatusBar m_wndStatusBar;

//Элемент управления "строка статуса"

CToolBar m_wndToolBar;

// Элемент управления "панель инструментов"

};

3.2.8Реализация класса CMainFrame (CMainFrame.cpp)

//Реализация класса CMainFrame

#include "stdafx.h" #include "Lab3_2.h" #include "MainFrm.h"

#ifdef _DEBUG

#define new DEBUG_NEW #endif

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) // Динамическое создание объекта

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) // Функция генерации карты сообщений

ON_WM_CREATE()

// Обработчик сообщения WM_CREATE

/* ================================= */ /* Обработчики сообщений для справки */

ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder) ON_COMMAND(ID_HELP, CFrameWnd::OnHelp) ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp) ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder) /* ================================= */

END_MESSAGE_MAP()

static UINT indicators[] = { ID_SEPARATOR }; // Индикатор для строки состояния

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) // Обработчик сообщения WM_CREATE

{

if (CFrameWnd::OnCreate( lpCreateStruct ) == -1) return -1; // Попытка создания окна

if (!m_wndToolBar.CreateEx( this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC ) || !m_wndToolBar.LoadToolBar( IDR_MAINFRAME ))

// Попытка создания панели инструментов и загрузки ресурсов

{

TRACE0("Failed to create toolbar\n");

http://do.ucoz.net

18

БГУИР: Дистанционное обучение (неофициальный сайт)

return -1;

// Если создать не удалось, то выйти

}

if (!m_wndStatusBar.Create( this ) || !m_wndStatusBar.SetIndicators( indicators, 1 ))

// Попытка создания строки состояния и задания индиктора

{

TRACE0("Failed to create status bar\n"); return -1;

// Если создать не удалось, то выйти

}

return 0;

}

3.2.9Заголовок класса Lab3_2 (Lab3_2.h)

//Заголовок класса Lab3_2 (головное приложение)

#pragma once

// Защита от повторных подключений заголовка

#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH

#endif

#include "resource.h"

// Заголовок констант ресурсов

class CLab3_2App : public CWinApp

{

public:

CLab3_2App();

//Стандартный конструктор virtual BOOL InitInstance();

//Обработчик инициализации приложения

DECLARE_MESSAGE_MAP()

//Функция генерации карты сообщений

};

3.2.10Реализация класса Lab3_2 (Lab3_2.cpp)

//Реализация класса Lab3_2 (головное приложение)

#include "stdafx.h" #include "Lab3_2.h" #include "MainFrm.h" #include "Lab3_2Doc.h" #include "Lab3_2View.h"

#ifdef _DEBUG

#define new DEBUG_NEW #endif

BEGIN_MESSAGE_MAP( CLab3_2App, CWinApp ) // Функция генерации карты сообщений

ON_COMMAND( ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup ) // Задание обработчика настройки печати

END_MESSAGE_MAP()

CLab3_2App theApp;

// Переменная - приложение

CLab3_2App::CLab3_2App()

{

http://do.ucoz.net

19

БГУИР: Дистанционное обучение (неофициальный сайт)

EnableHtmlHelp();

// Включение поддержки HTML-справки

}

BOOL CLab3_2App::InitInstance()

{

CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( // Создание шаблона документа

IDR_MAINFRAME,

//ID ресурса для шаблона

RUNTIME_CLASS( CLab3_2Doc ),

//Класс документа

RUNTIME_CLASS( CMainFrame ), // Класс SDI окна

RUNTIME_CLASS( CLab3_2View )); // Класс представления

AddDocTemplate( pDocTemplate );

//Добавление шаблона документа к списку доступных шаблонов

CCommandLineInfo cmdInfo; ParseCommandLine( cmdInfo );

//Анализ командной строки

if (!ProcessShellCommand( cmdInfo )) return FALSE;

//Если обработка командной строки завершена с ошибкой, то выход m_pMainWnd->ShowWindow( SW_SHOW );

//Устанавливает состояние видимости окна

m_pMainWnd->UpdateWindow(); // Обновить окно

return TRUE;

}

3.3 Результаты работы программы

Для проверки работоспособности программы на сервере MS SQL была создана БД, содержащая таблицу «Works». Данная БД была зарегистрирована в качестве источника данных ODBC с именем «Lab3_2». Работоспособность программы подтверждается снимками экрана, приведенными на последующих рисунках.

Первоначальное содержимое таблицы приведено на рисунке 3.4:

Works

ID

Name

Address

Phone

Price

1

ДМИТРЮК Н.И.

Нестерова ул.,84-107

242-86-72

153

2

КУШНЕР Н.И.

Волоха ул.,8-107

256-93-20

430,5

3

КУРНЕВСКАЯ Н.С.

Менделеева ул.,22-60

299-99-44

147,2

4

ГАЛАЙ Т.К.

Филимонова ул.,8-142

299-94-14

250

5

ЛОЗИЦКАЯ Е.А.

Голодеда ул.,13-64

201-00-54

374

6

ЗВЕЗДАЙ Г.Д.

Герасименко ул.,41-118

243-42-63

583,5

7

МАЗАЛО С.В.

Богдановича ул.,114-133

262-08-48

222,5

8

ВОРОНОВА С.В.

Шафарнянская ул.,2-45

283-33-54

504,5

9

МАКОВЧИК Л.И.

Чигладзе ул.,6/2-94

250-45-72

906

10

ШАВЛОВСКАЯ Г.А.

Волоха ул.,41/3-24

286-14-86

482

11

ЛАППО М.Н.

Голодеда ул.,17/2-54

240-63-08

439

12

ФУРДУЙ А.А.

Куйбышева ул.,91-73

232-02-96

236

13

САЧИВКО Е.И.

Могилевская ул.,4/4-8

224-75-19

45

14

ПОРТЕНКОВ С.П.

Лынькова ул.,89-32

205-92-15

394

15

ЛЕВАНЦЕВИЧ С.М.

Малинина ул.,28/1-405

291-17-56

928

16

УШАКОВА Д.А.

Маркса ул.,50-11

226-15-66

255,5

17

ЗЮМБИЛОВА В.И.

Ольшевского ул.,75-180

255-68-86

0

18

ЖЕРЕБЯТЬЕВА Г.П.

Космонавтов ул.,23/1-191

270-18-75

293

19

ЛАЗАРЬ С.К.

Ложинская ул.,17-55

283-33-57

0

20

ПЕРЕВОЗЧИКОВА Н.И.

Лещинского ул.,47-45

286-71-55

0

Рисунок 3.4 – Первоначальное содержимое таблицы «Work» БД «Lab3_2»

http://do.ucoz.net

20