Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Return stream; // Повертає посилання на параметр stream





}

 

int main ()

{

kooClass A_ob(1, 2, 3);

 

cout < < A_ob; // Перевантажений оператор виведення даних

 

cin > > A_ob; // Перевантажений оператор введення даних

cout < < A_ob; // Перевантажений оператор виведення даних

cout < < Cyr(" Натиснiть будь-яку клавiшу! ");

while(! kbhit());

 

}

Програміст може сам керувати форматом представлення даних, причому двома способами. Перший спосіб передбачає використання функцій-членів класу ios, а другий –функцій спеціального типу, що іменуються маніпуляторами.

10.4. Зразок виконання роботи

Потрібно розробити програму, яка забезпечує первинне введення інформації в базу даних відділу кадрів підприємства з кількістю співробітників до 100 чоловік (без запису у файл) і пошук інформації за заданим критерієм.

Кожен запис бази даних має містити такі відомості про співробітника:

● прізвище і ініціали;

● рік поступлення на роботу;

● оклад.

Критерій пошуку: співробітники з окладом, що перевищує деяку задану величину.

Розв'язання задачі почнемо з виявлення понять/класів і їх фундаментальних взаємозв'язків. В даному випадку першим поняттям є база даних, і, отже, для моделювання цього поняття нам знадобиться клас, який зрозуміло назвати DBase. Об'єкт типу DBase(тобто сама база даних) повинен містити деяку сукупність або колекцію інших об'єктів, відповідних записам бази даних. Для моделювання поняття запис бази даних введемо клас Man. Очевидно, що взаємовідношення між вказаними класами відноситься до типу " DBase has а Man".

На другому етапі необхідно уточнити класи, визначивши основні поля і набір операцій над ними. Почнемо з класу DBase. Питання перше, який потрібно вирішити: яку структуру даних доцільно використовувати для зберігання колекції записів. Оскільки об'єм бази даних невеликий[3], виберемо найпростіше розв'язання – масив об'єктів типу Man. Очевидно, що в конструкторі класу DBase необхідно передбачити динамічне виділення пам'яті для необхідної кількості об'єктів типу Man, а в деструкторі – звільнення цієї пам'яті. Адресу початку масиву об'єктів буде представлено полем Man* pMan|.

З умови задачі з'ясовуємо також, що у класі необхідно мати метод InitInput() для первинного введення інформації в базу даних і метод SearchPayNotLess() для пошуку співробітників з окладом, що перевищує деяку задану величину. Для контролю правильності введення початкових даних нам стане в нагоді ще один метод – Show(), що забезпечує виведення на екран вмісту бази даних.

Тепер розберемося з класом Man. Для зберігання інформації, що відноситься до одного співробітника, буде потрібно наступні поля:

char * pName – адреса рядка, що містить прізвище і ініціали;

int come_year – рік поступлення на роботу;

double pay – величина окладу.

Конструктор класу повинен виділяти пам'ять для зберігання вказаного рядка, а деструктор – звільняти цю пам'ять. Для розв'язання другої підзадачі (пошук інформації) додамо у клас метод доступу GetPay(). І нарешті, для класу Man потрібно передбачити перезавантаження операції витягання, щоб забезпечити первинне введення інформації з клавіатури в методі InitInput() класу DBase, і операцію вставлення, яка буде використана в методі Show() класу DBase. Обидві операції будуть реалізовані як зовнішні дружні функції.

Іноді під час розв'язання задачі зручно використовувати зовнішні функції, що не є членами класів. Зазвичай ці функції виконують якусь рутинну роботу і можуть бути викликані як з методів класів, так і з основної функції. Типовий приклад – введення значень із стандартного потоку cin із захистом від ненавмисних помилок користувача. Тему оброблення помилок потоків ми зачіпали на початку лабораторної роботи; тепер прийшов час показати можливе практичне вирішення проблеми. Почнемо реалізації перезавантаженої операції > > для класу Man:

istream& operator > > (istream& in, Man& obj) {

//.........................

in > > obj.come_year;

in > > obj.pay;

return in;

}

Якщо у момент виконання оператора in > > obj.come_year; користувач введе замість цілого числа якийсь довільний рядок символів, то програма " зламається". Вашому замовнику напевно не сподобається така поведінка програми. Аналогічна проблема є і під час введення дійсного числа в наступному операторі.

Для вирішення цих проблем в програмі будуть використані функції GetInt() і GetDouble(), що забезпечують дуже надійне введення цілих і дійсних чисел відповідно. Реалізацію цих функцій ми розглянемо нижче. Оскільки ці функції універсальні і позакласові, то їх код доцільно розмістити в окремому модулі.

Розв'язання задачі, в якій реалізовані розглянуті концепції, є багатофайловий проект, що містить файли DBase.h, DBase.срр|, Man.h, Man.срр|, GetFunc.h, GetFunc.cpp і lab9.cpp:







Дата добавления: 2014-11-10; просмотров: 636. Нарушение авторских прав; Мы поможем в написании вашей работы!




Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Виды сухожильных швов После выделения культи сухожилия и эвакуации гематомы приступают к восстановлению целостности сухожилия...

Studopedia.info - Студопедия - 2014-2025 год . (0.009 сек.) русская версия | украинская версия