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

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

Lab9.cpp






#include " stdafx.h"

#include " Man.h"

#include " GetFunc.h"

#include " DBase.h"

 

#include < conio.h>

int main() {

const int nRecord = 3;

double any_pay;

 

DBase dBase(nRecord);

dBase.InitInput();

dBase.Show();

cout < < " Введення даних завершене." < < endl;

cout < < " == == == == == == == == == == == == == == == == " < < endl;

cout < < " Пошук спiвробiтникiв, чий оклад не менше заданої величини." < < endl;

cout < < " \n Введiть величину окладу" < < endl;

any_pay = GetDouble(cin);

dBase.SearchPayNotLess(any_pay);

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

while(! kbhit());

}

 

Зверніть увагу на наступні моменти.

1. У реалізації методу InitInput() перезавантажена для класу Man операція витягання застосовується до об'єкта, що задається виразом *(pMan + i), тобто до об'єкта, адреса якого є pMan + i (оператор 1).

2. Аналогічна адресація об'єкта для операції вставлення використана в методі Show() оператор 2.

3. У реалізації перезавантаженої операції витягання (файл Man.срр) зверніть увагу на операторів 3 і 4, у яких викликаються функції GetInt() і GetDouble(), призначені для введення із стандартного потоку цілих і дійсних чисел відповідно.

4. Реалізація функцій GetInt() і GetDouble() знаходиться у файлі GetFunc.cpp. Розглянемо детально першу з них. Введення цілого числа організоване усередині нескінченного циклу while таким чином.

● Інформація читається з вхідного потоку оператором 5. Якщо в буфері типу streambuf, пов'язаному з потоком in, знаходиться зображення цілого числа, що завершується символом перекладу рядка '\n', то після закінчення операції витягання в буфері залишиться тільки символ '\n'. Оператор 6 перевіряє цю умову, використовуючи метод peek(). Якщо перевірка завершилася успішно, оператор 7 очищає вхідний буфер від символу '\n', після чого відбувається вихід з циклу while з подальшим поверненням з функції значення value. Якщо ж введена інформація не є коректним зображенням цілого числа, то виконуються три дії:

■ оператор 8 виводить повідомлення про це, пропонуючи повторити введення;

■ скидаються прапори помилок для потоку in (оператор 9);

■ за допомогою внутрішнього циклу while з вхідного буфера витягуються всі символи, аж до символу '\n' (оператор 10). Зовнішній цикл while повторюється спочатку.

● Функція GetDouble() працює аналогічно.

5. Функція main() (файл Main.cpp) нічого особливого не представляє. Алгоритм прозорий і сприймається без додаткових пояснень завдяки виразним іменам методів.

6. Давайте повторимо основні моменти цієї лабораторної роботи.

● Введення і виведення будь-якої інформації представляються в програмі як потік байтів і зазвичай виконуються через буфер. Потоки підтримуються в бібліотеці С++ за допомогою ієрархії класів, яка реалізує безпечне введення-виведення як стандартних, так і користувацьких типів даних.

● Введення-виведення форматоване і неформатоване. Для форматованого введення-виведення використовуються перезавантажені операції < < і > >, для неформатованого – методи стандартних класів.

● Управління форматуванням виконується за допомогою маніпуляторів і методів стандартних класів.

● Для виведення об'єктів користувацьких типів даних слідує за допомогою дружніх функцій перезавантажити операції читання і витягання.

● Для забезпечення безпечного введення необхідно діагностувати можливі помилки. При цьому використовуються прапори стану потоку і/або методи peek, get і clear.

● Якщо необхідно замістити в похідному класі одну з версій перезавантаженого методу базового класу, доведеться замістити і всі решта версій цього методу.

Рис. 1. Діаграма класів та реалізація програми

10.5. Індивідуальні завдання

Варіант 1. Визначити клас з іменем STUDENT, що містить наступні поля:

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

● номер групи;

● успішність (масив з п'яти елементів).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу STUDENT.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з десяти об'єктів типу STUDENT;

● записи повинні бути впорядковані за збільшенням номери групи;

● виведення на дисплей прізвищ і номерів груп для всіх студентів, включених у масив, якщо середній бал студента більший за 4.0;

● якщо таких студентів немає, вивести відповідне повідомлення.

Варіант 2. Визначити клас з іменем STUDENT, що містить наступні поля:

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

● номер групи;

● успішність (масив з п'яти елементів).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу STUDENT.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з десяти об'єктів типу STUDENT;

● записи повинні бути впорядковані за збільшенням середнього балу;

● виведення на дисплей прізвищ і номерів груп для всіх студентів, що мають оцінки 4 і 5;

● якщо таких студентів немає, вивести відповідне повідомлення.

Варіант 3. Визначити клас з іменем STUDENX, що містить наступні поля:

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

● номер групи;

● успішність (масив з п'яти елементів).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу STUDENT.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з десяти об'єктів типу STUDENT;

● записи повинні бути впорядковані за абеткою;

● виведення на дисплей прізвищ і номерів груп для всіх студентів, що мають хоча б одну оцінку 2;

● якщо таких студентів немає, вивести відповідне повідомлення.

Варіант 4. Визначити клас з іменем AEROFLOT, що містить наступні поля:

● назва пункту призначення рейсу;

● номер рейсу;

● тип літака.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу AEROFLOT.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з семи об'єктів типу AEROFLOT;

● записи повинні бути впорядковані за збільшенням номери рейсу;

● виведення на екран номерів рейсів і типів літаків, що вилітають в пункт призначення, назва якого співпала з назвою, введеною з клавіатури;

● якщо таких рейсів немає, то необхідно вивести на дисплей відповідне повідомлення;

Варіант 5. Визначити клас з іменем AEROFLOT, що містить наступні поля:

● назва пункту призначення рейсу;

● номер рейсу;

● тип літака.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу AEROFLOT.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з семи об'єктів типу AEROFLOT;

● записи повинні бути розміщені в алфавітному порядку за назвами пунктів призначення;

● виведення на екран пунктів призначення і номерів рейсів, що обслуговуються літаком, тип якого введений з клавіатури;

● якщо таких рейсів немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 6. Визначити клас з іменем WORKER, що містить наступні поля:

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

● назва посади;

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

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу WORKER.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з десяти об'єктів типу WORKER;

● записи повинні бути розміщені за абеткою;

● виведення на дисплей прізвищ працівників, чий стаж роботи в організації перевищує значення, введене з клавіатури;

● якщо таких працівників немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 7. Визначити клас з іменем TRAIN, що містить наступні поля:

● назва пункту призначення;

● номер потягу;

● час відправлення.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу TRAIN.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу TRAIN;

● записи повинні бути розміщені в алфавітному порядку за назвами пунктів призначення;

● виведення на екран інформації про потяги, що відправляються після введеного з клавіатури часу;

● якщо таких потягів немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 8. Визначити клас з іменем TRAIN, що містить наступні поля:

● назва пункту призначення;

● номер потягу;

● час відправлення.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу TRAIN.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з шести об'єктів типу TRAIN;

● записи повинні бути впорядковані за часом відправлення потягу;

● виведення на екран інформації про потяги, що прямують в пункт, назва якого введена з клавіатури;

● якщо таких потягів немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 9. Визначити клас з іменем TRAIN, що містить наступні поля:

● назва пункту призначення;

● номер потягу;

● час відправлення.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу TRAIN.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу TRAIN;

● записи повинні бути впорядковані по номерах потягів;

● виведення на екран інформації про потяг, номер якого введений з клавіатури;

● якщо таких потягів немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 10. Визначити клас з іменем MARSH, що містить наступні поля:

● назва початкового пункту маршруту;

● назва кінцевого пункту маршруту;

● номер маршруту.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу MARSH.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу MARSH;

● записи повинні бути впорядковані по номерах маршрутів;

● виведення на екран інформації про маршрут, номер якого введений з клавіатури;

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

Варіант 11. Визначити клас з іменем MARSH, що містить наступні поля:

● назва початкового пункту маршруту;

● назва кінцевого пункту маршруту;

● номер маршруту.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу MARSH.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу MARSH;

● записи повинні бути впорядковані по номерах маршрутів;

● виведення на екран інформації про маршрути, які починаються або кінчаються в пункті, назва якого введена з клавіатури;

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

Варіант 12. Визначити клас з іменем NOTE, що містить наступні поля:

● прізвище, ім'я;

● номер телефону;

● день народження (масив з трьох чисел).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу NOTE.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу NOTE;

● записи повинні бути впорядковані по датах днів народження;

● виведення на екран інформації про людину, номер телефону якого введений з клавіатури;

● якщо такого немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 13. Визначити клас з іменем NOTE, що містить наступні поля:

● прізвище, ім'я;

● номер телефону;

● день народження (масив з трьох чисел).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу NOTE.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу NOTE;

● записи повинні бути розміщені за абеткою;

● виведення на екран інформації про людей, чиї дні народження доводяться на місяць, значення якого введене з клавіатури;

● якщо таких немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 14. Визначити клас з іменем NOTE, що містить наступні поля:

● прізвище, ім'я;

● номер телефону;

● день народження (масив з трьох чисел).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу NOTE.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу NOTE;

● записи повинні бути впорядковані по трьох перших цифрах номера телефону;

● виведення на екран інформації про людину, чиє прізвище введене з клавіатури;

● якщо такого немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 15. Визначити клас з іменем ZNAK, що містить наступні поля:

● прізвище, ім'я;

● знак Зодіаку;

● день народження (масив з трьох чисел).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу ZNAK.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу ZNAK;

● записи повинні бути впорядковані по датах днів народження;

● виведення на екран інформації про людину, чиє прізвище введене з клавіатури;

● якщо такого немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 16. Визначити клас з іменем ZNAK, що містить наступні поля:

● прізвище, ім'я;

● знак Зодіаку;

● день народження (масив з трьох чисел).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу ZNAK.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу ZNAK;

● записи повинні бути впорядковані по датах днів народження;

● виведення на екран інформації про людей, що народилися під знаком, найменування якого введене з клавіатури;

● якщо таких немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 17. Визначити клас з іменем ZNAK, що містить наступні поля:

● прізвище, ім'я;

● знак Зодіаку;

● день народження (масив з трьох чисел).

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу ZNAK.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу ZNAK;

● записи повинні бути впорядковані по знаках Зодіаку;

● виведення на екран інформації про людей, що народилися в місяці, значення якого введене з клавіатури;

● якщо таких немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 18. Визначити клас з іменем PRICE, що містить наступні поля:

● назва продукції;

● назва магазина, у якому продається продукція;

● вартість продукції в гривнях.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу PRICE.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу PRICE;

● записи повинні бути розміщені в алфавітному порядку за назвами продукції;

● виведення на екран інформації про продукція, назва якого введена з клавіатури;

● якщо такої продукції немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 19. Визначити клас з іменем PRICE, що містить наступні поля:

● назва продукції;

● назва магазина, у якому продається продукція;

● вартість продукції в гривнях.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу PRICE.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу PRICE;

● записи повинні бути розміщені в алфавітному порядку за назвами магазинів;

● виведення на екран інформації про продукція, що продаються в магазині, назва якого введена з клавіатури;

● якщо такого магазина немає, то необхідно вивести на дисплей відповідне повідомлення.

Варіант 20. Визначити клас з іменем ORDER, що містить наступні поля:

● розрахунковий рахунок платника;

● розрахунковий рахунок одержувача;

● перерахована сума в гривнях.

Визначити методи доступу до цих полів і перезавантажені операції витягання і вставлення для об'єктів типу ORDER.

Потрібно розробити програму, що виконує такі дії:

● введення з клавіатури даних у масив, що складається з восьми об'єктів типу ORDER;

● записи повинні бути розміщені в алфавітному порядку по розрахункових рахунках платників;

● виведення на екран інформації про суму, зняту з розрахункового рахунку платника, введеного з клавіатури;

● якщо такого розрахункового рахунку немає, то необхідно вивести на дисплей відповідне повідомлення.

10.6. Контрольні запитання

1. Для чого використовують буфер при роботі з потоками?

2. Які базові класи для роботи з потоками Ви знаєте і для чого вони призначені?

3. Які класи вводу/виводу називають стандартними?

4. Для чого призначені маніпулятори?

5. Яке поле передбачено в базовому класі ios для відстежування помилок?

6. Чому операції < < i > > не можуть бути елементами створеного класу, а тільки дружніми функціями до нього?

7. На які три групи поділяють маніпулятори класу ios?

8. Що таке параметризований маніпулятор?

9. У яких файлах міститься визначення і реалізація параметризованого маніпулятора?


Лабораторна робота №11. Файлові і рядкові потоки

МЕТА РОБОТИ: навчитись контролювати файлові потоки, освоїти механізм запису і зчитування даних із файлу в різних режимах.

11.1. Програма роботи

11.1. Отримати завдання.

11.1.2. Написати програми відповідних класів, основну та відповідні допоміжні функції, згідно з вказівками до виконання роботи.

11.1.3. Підготувати власні коректні вхідні дані (вказати їх формат і значення) і проаналізувати їх.

11.1.4. Оформити електронний звіт про роботу та захистити її.

11.2. Вказівки до виконання роботи

11.2.1. Студент, згідно з індивідуальним номером, вибирає своє завдання з розд. 11.5 і записує його до звіту.

11.2.2. Оголошення класу (структури), основну та відповідні допоміжні функції необхідно запрограмувати так, як це показано у розд. 11.4.

11.2.3. Власних вхідних даних необхідно підготувати не менше двох комплектів. Їхні значення мають бути коректними, знаходитися в розумних межах і відповідати тим умовам, які стосуються індивідуального завдання.

11.2.4. Звіт має містити такі розділи:

● мету роботи та завдання з записаною умовою задачі;

● коди всіх використовуваних.h і.ccp файлів, а також пояснення до них;

● вміст текстових файлів, які використовуємо в програмі для роботи та результати реалізації програми;

· висновки, в яких наводиться призначення програми, обмеження на її застосування і можливі варіанти удосконалення, якщо такі є.

11.3. Теоретичні відомості

Файлові операції введення-виведення даних можна реалізувати після внесення у програму заголовка < fstream >, у якому визначено всі необхідні для цього класи і значення. Створивши потік, його потрібно пов'язати з файлом. Це можна зробити за допомогою функції open (), причому у кожному з трьох потокових класів є своя функція-член open (). Їх прототипи мають такий вигляд:

void ifstream:: open (const char * filename,

ios:: openmode mode = ios:: in);

void ofstream:: open (const char * filename,

ios:: openmode mode = ios:: out | ios:: trunc);

void fstream:: open (const char * filename,

ios:: openmode mode = ios:: in | ios:: out);

У цих записах елемент filename означає ім'я файлу, яке може містити специфікатор шляху, який вказує доступ до нього. Елемент mode називається специфікатором режиму, який визначає спосіб відкриття файлу. Він повинен приймати одне або декілька значень перерахунку openmode, який визначено у класі ios:

ios:: арр – приєднує до кінця файлу усі дані, що виводяться;

ios:: ate – пошук потрібних даних починатиметься з кінця файлу;

ios:: binary – відкриває файл у двійковому режимі;

ios:: in – забезпечує відкриття файлу для введення даних;

ios:: out – забезпечує відкриття файлу для виведення даних

ios:: trunc – призводить до руйнування вмісту файлу.

Декілька значень перерахунку openmode можна об'єднувати за допомогою логічного додавання (АБО).







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



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

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

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

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

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