ООПиП (часть 3). Пример контрольной работы
..pdfБГУИР: Дистанционное обучение (неофициальный сайт)
/* =================================== */ /* Обработчики сброса/установки флагов */ 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 |