Название: Інформаційно-довідкова система
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Добавлен 13:01:38 12 февраля 2009 Похожие работы
Просмотров: 13
Комментариев: 0
Оценило: 0 человек
Средний балл: 0
Оценка: неизвестно Скачать
МІНІСТЕРСТВО
ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ
ТЕХНІЧНИЙ УНІВЕРСИТЕТ
"ХАРКІВСЬКИЙ
ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"
Кафедра
Обчислювальної техніки та програмування
ЗАТВЕРДЖУЮ
Завідувач кафедри ОТП
__________ /xxxxxxxxx./
"___" __________ 2007р.
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Специфікація
ЛИСТ
ЗАТВЕРДЖЕННЯ
Xxxxxxxx
|
Розробники
Керівник проекту
__________ /доц. xxxxxxx./
"___" __________
2007 р.
Виконавець
__________ /студ. xxxxxxx./
"___" __________
2007 р.
|
2007
УЗГОДЖЕНО
xxxxxxxxxxxxxx
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Специфікація
xxxxxxxxxxxxx
2007
Формат |
Позначення |
Найменування |
Кількість |
Примітка |
|
|
|
|
|
А4 |
Xxxxxxxxxxx-01
81 ТЗ |
Технічне
завдання |
2 |
|
А4 |
Xxxxxxxxxxx-01
81 ПЗ |
Пояснювальна
записка |
6 |
|
А4 |
Xxxxxxxxxxx-01
81 ОП |
Програма
та методика іспитів |
2 |
|
А4 |
Xxxxxxxxxxx-01
81 ТП |
Текст
програми |
4-6 |
|
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ
ТЕХНІЧНИЙ УНІВЕРСИТЕТ
"ХАРКІВСЬКИЙ
ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"
Кафедра
Обчислювальної техніки та програмування
ЗАТВЕРДЖУЮ
Завідувач кафедри ОТП
__________ /xxxxxxxxx./
"___" __________ 2007р.
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Технічне
завдання
ЛИСТ
ЗАТВЕРДЖЕННЯ
Xxxxxxxxxxx-01 81 01-1-ЛЗ
|
Розробники
Керівник проекту
__________ /доц. xxxxxxx./
"___" __________
2007 р.
Виконавець
__________ /студ. xxxxxxxx./
"___" __________
2007 р.
|
2007
1. Вступ
У даному
розрахунковому завданні розглянутий поліморфний список об'єктів. Технічн
особливості програми розглянуті нижче.
2. Підстава для розробки
Підставою для
розробки програми є отримання завдання за темою «Інформаційно-довідкова
система».
3. Мета і призначення
розробки
Мета роботи
засвоїти принцип використання поліморфних списків об'єктів і реалізувати роботу
програмного забезпечення , що використовує ці принципи. Програма призначається
для обробки таблиць даних.
4. Вимоги до розробки
Розроблена програма повинна виконувати так
пункти:
-
Створення
поліморфного списку об’єктів;
-
Вивід
його на екран;
-
Занесення
у файл;
-
Зчитування
з файлу;
-
Пошук
запису;
-
Редагування
запису;
-
Вставка
нового запису;
-
Знищення
запису;
-
Виконання
задачі;
-
Вихід.
5. Стадії та
етапи розробки
1. Створення класів;
2. Застосування поліморфізму;
3. Створення двонаправленого списку
та робота з ним;
4. Втілення можливостей для дано
програми, розглянутих у п.4;
5. Ввід та вивід інформації.
6. Показ результатів.
6. Порядок контролю та
прийомки
Розроблене
програмне забезпечення повинно:
- виконувати
асоціативний пошук даних на основі розробленого алгоритму;
- легко
адаптуватися при модифікації структури даних;
- забезпечувати
дружній інтерфейс із користувачем і можливість настроювання параметрів дерева в
діалоговому режимі.
Відмовлення ЕОМ у
роботі не повинний приводити до значних втрат інформації.
Розроблювальне
програмне забезпечення має функціонувати в середовищі MS-DOS та Windows
повинний бути написаний мовою C /С.
7. Програмна документація
Для розроблювального виробу повинн
бути складені програмні документи:
- Специфікація;
- Технічне завдання;
- Пояснювальна записка;
- Програма та методика іспиту;
- Текст програми.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ
ТЕХНІЧНИЙ УНІВЕРСИТЕТ
"ХАРКІВСЬКИЙ
ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
Кафедра
Обчислювальної техніки та програмування
ЗАТВЕРДЖУЮ
Завідувач кафедри ОТП
__________ /Xxxxxxxxxxx./
"___" __________ 2007р.
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Пояснювальна
записка
ЛИСТ
ЗАТВЕРДЖЕННЯ
Xxxxxxxxxxx-01 81 01-1-ЛЗ
|
Розробники
Керівник проекту
__________ /доц. Xxxxxxxxxxx./
"___" __________
2007 р.
Виконавець
__________ /студ. Xxxxxxxxxxx./
"___" __________
2007 р.
|
2007
Анотація
У даному
розрахунково-графічному завданні докладно розглядається алгоритми поліморфних
списків об’єктів, розроблена програма, що реалізує алгоритм поліморфних списків
об’єктів та інтерфейсна частина програми мовою C .
Пояснювальна
записка містить достатньо прикладів та теоретичну частину для самостійного
розгляду та опанування теми «Поліморфні списки об’єктів».
Аннотация
В данном
расчетно-графическом задании подробно рассматривается алгоритмы полиморфных
списков объектов, разработанная программа, которая реализует алгоритм
полиморфных списков объектов и интерфейсная часть программы языком C .
Объяснительная записка
содержит достаточно примеров и теоретическую часть для самостоятельного
рассмотрения и овладение темы «Полиморфные списки объектов».
Annotation
In the given
settlement-graphic task in details is described algorithms of polymorphic lists
of the objects, the developed program which realizes algorithm of polymorphic
lists of objects and the interface part of the program language C .
The explain
annotation contains enough examples and a theoretical part for independent
consideration and mastering of a theme « polymorphic lists of objects».
Зміст
1.
Вступ
2.
Призначення
3.
Технічн
характеристики
4.
Отриман
результати
5.
Список
використаної літератури
С - це спроба
рішення розроблювачами мови С завдань об¢єктно- орієнтованого програмування
(Object Oriented Programming, OOP). Побудований на твердому фундаменті С, С
крім ООР підтримує безліч інших корисних інструментів, ні жертвуючи при цьому
ні міццю, ні елегантністю, ні гнучкістю С. С став універсальною мовою для
програмістів усього миру. Саме на мові С проводиться навчання студентів у
вузах вищих навчальних закладів для підготовки подальшої бази для гарного
працевлаштування. С містить зручний інтерфейс для користувача початківця для
розробки простіших задач але має також і можливості для розробки складних
програм.
У даній робот
широко використовується поліморфізм та двонапрямлений список класів.
1.
Призначення
та область використання
Призначення дано
програми – збереження інформації о музичних альбомах: назва, рік випуску,
кількість треків, кількість бонусних треків та довготи звучання.
Розроблена програма повинна виконувати:
-
Створення
поліморфного списку об’єктів;
-
Вивід
його на екран;
-
Занесення
у файл;
-
Зчитування
з файлу;
-
Пошук
запису;
-
Редагування
запису;
-
Вставка
нового запису;
-
Знищення
запису;
-
Знаходження
запису найменшою кількістю треків у заданому діапазоні років
-
Вихід.
Використовувати
дану програму можна для вивчення принципу роботи зі поліморфізмом та списком.
При роботі з
списками на практиці частіше усього приходиться виконувати наступні операції:
-
знайти
елемент з заданими властивостями;
-
знайти
перший елемент у лінійному списку;
-
вставити
елемент до та після вказаного вузла;
-
видалити
конкретний елемент із списку;
-
упорядкувати
вузли списку у конкретному порядку.
2.
Технічн
характеристики
Функціонування
системи цілком забезпечується стандартною конфігурацією IBM сумісних персональних
ЕОМ. Для експлуатації системи необхідний IBM/PC AT з CPU типу k286 чи вище,
обсягом оперативної пам'яті 4 Мбайт і накопичувачем на HARD диску обсягом не
менш 200 Мбайт.
Що стосується
даної програми, то вхідними даними є інформація типу int та char. Вихідні дан
типами цих же типів. Основні функції встановлюють інформацію або виводять
на екран.
Нижче приведен
схеми алгоритму головної функції void main().(Дивись малюнок 1.1)
3.
Очікуван
техніко-економічні показники
Дана програма
займає мінімальний об’єм пам’яті. Поширена інформація щодо вимог зазначена
вище. Економічні прибутки не розглядаються, оскільки дана програма є об’єктом
для навчання. Є можливість щодо використання її як посібника для наступних
курсів.
4.
Розробка
У програмі використовується
поліморфізм, інкапсуляція та успадкування, яскраво представлено ООП. При
звернені до батьківського класу, викликаються функції наслідних
класів(поліморфізм).При успадкуванні наслідні класи мають доступ до полів
батьківського класу. Використано віртуальні функції та поліморфний список
об’єктів.
Інкапсуляція
дозволяє «заховати» змінні-елементи класу.
Опис класів
album
Змінна |
Призначення |
Методи |
Призначення |
Nazv
God
|
Назва альбому
Рік випуску
|
virtual void
input()
virtual void output()
|
Вод та вивод
нформації |
аlbum1
Змінна |
Призначення |
Методи |
Призначення |
Trek |
Кількість треків |
--//--
int getTrek()
void setTrek()
|
--//--
Встановлення
значення trek
|
аlbum
Змінна |
Призначення |
Методи |
Призначення |
Time |
Протяжність за
часом |
--//--
int getTime()
void setTime()
|
--//--
Встановлення
значення time
|
album3
Змінна |
Призначення |
Методи |
Призначення |
Bonus |
Кількість бонусних
треків |
--//--
Int getBonus(), void
setBonus()
|
--//--
Встановлення
значення bonus
|
Tool
Змінна |
Призначення |
Методи |
Призначення |
T
*d
*right
*left
|
Змінна списку
Указ. на об’єкт
Указ. на об’єкт->
Указ. на об’єкт<-
|
|
|
Trst
Змінна |
Призначення |
Методи |
Призначення |
*head
*tail
*current
|
Указ. на голову
Указ. на хвіст
Указ. на текущій
|
Void add(int type,
int vvod) |
Додавнна нових
елементів списку |
Клас аlbum – це базовий
(батьківський) клас, що містить два інформаційних поля: назву альбому (строковий
тип) та рік випуску (цілочисловий тип). Він має дві віртуальні функц
(вводу/виводу), та конструктор з деструктором.
Клас аlbum1 – це
клас-нащадок класу аlbum, він містить інформаційне поле, що несе інформацію о
кількості треків у альбомі. Він також має віртуальні функції (вводу/виводу) та
конструктор з деструктором, але ще він має дві функції що створюють поле trek, та повертають значення цього поля.
Клас аlbum2 – це
клас-нащадок класу аlbum1, він містить інформаційне поле, що несе інформацію о
протяжності альбому за часом. Він також має віртуальні функції (вводу/виводу)
та конструктор з деструктором, але ще він має дві функції що створюють поле time, та повертають значення цього поля.
Клас аlbum3 – це
клас-нащадок класу аlbum2, він містить інформаційне поле, що несе інформацію о
кількості бонусних треків у альбомі. Він також має віртуальні функц
(вводу/виводу) та конструктор з деструктором, але ще він має дві функції що
створюють поле bonus, та
повертають значення цього поля.
Клас Tool – це клас який є двонапрямленим
списком об’єктів класу аlbum та його нащадків. Функціями даного класу
конструктор та деструктор що відповідно створюють поліморфний список об’єктів
та вивільняють пам'ять відведену під нього.
Клас Trist є дружнім до класу Tool.Він вміщає функцію додавання нових
об’єктів до списку. Нові об’єкти додаються у кінець(хвіст) списку і можуть бути
одного з типів аlbum, аlbum1, аlbum2 та аlbum3.
Функція int get….() повертає значення даного поля
для об’єкту.
Функція int set….() створює поле об'єкта а саме
встановлює відповідність(заносить у поле інформацію) з інформацією що вводить
користувач при заповнені таблиці.
Функції virtual void output() та virtual void input() являються яскравими покажчиками
поліморфізму бо є віртуальними функціями. Вони слугують для виводу на екран або
заповнення об’єкту при роботі з таблицею.
6.
Список
використаної літератури
·
Шилдт Г.
Самоучитель С . – Санкт-Петербург, 2007.
·
Матеріали
локальної сітки НТУ "ХПІ".
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ
ТЕХНІЧНИЙ УНІВЕРСИТЕТ
"ХАРКІВСЬКИЙ
ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
Кафедра
Обчислювальної техніки та програмування
ЗАТВЕРДЖУЮ
Завідувач кафедри ОТП
__________ /Xxxxxxxxxxx./
"___" __________ 2007р.
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Програма
та методика іспитів
ЛИСТ
ЗАТВЕРДЖЕННЯ
Xxxxxxxxxxx-01 51 01-1-ЛЗ
|
Розробники
Керівник проекту
__________ /доц. Xxxxxxxxxxx./
"___" __________
2007 р.
Виконавець
__________ /студ. Xxxxxxxxxxx./
"___" __________
2007 р.
|
2007
УЗГОДЖЕНО
Xxxxxxxxxxx-01 51 01-1-ЛЗ
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Програма
та методика іспитів
Xxxxxxxxxxx-01 51 01-1
2007
1.
Об’єкт іспитів
Програма являє собою модуль, що складається з
трьох файлів:
-
RGZ.cpp
(Основний файл, містить функцію main( ) );
-
RGZ_DSC.cpp
(Файл, що містить опис функцій класів) ;
-
RGZ.Н
(Файл, що містить опис класів)
Об’єктом іспитів є нижче приведена
програма.
2.
Мета іспитів
Мета іспитів – це
впевнитися у правильності роботи даної програми та оцінити її ефективність.
Тести, котр
перевірюють правильність роботи програми приведені у пункті «Засоби та порядок
випробувань».
3.
Вимоги до програми
та програмного документа
Функціонування
системи цілком забезпечується стандартною конфігурацією IBM сумісних
персональних ЕОМ.
Основна вимога до
програми – це чітке демонстрування поліморфізму та правильність роботи, а
також, втілення основної задачі.
4.
Засоби та порядок
спитів
Засобом іспитів
введення інформації за підказками, які з’являються у процесі роботи програми.
Шляхом порівняння фактичного результату роботи програми з прогнозованими
результатами, встановлюється вірність роботи програми.
Розглянемо виконання програми по пунктах:
·
Перед користувачем
з'являється повідомлення: "Vvedite nomer operatsii".
·
Якщо ви натиснете клавішу "1",
то виконаєте наступні дії:
Sozdanie tablizi dannih
Vvedite N: 3
Vvedite tip zapisi [0..2]: 2
Vvedite nazvanie alboma: qqq
Vvedite god vipuska: 1889
Vvedite kl-vo trekov v albome: 11
Vvedite prodolzitelnost alboma po vremeni: 60
Vvedite kolichestvo bonus trekov: 2
Vvedite tip zapisi [0..2]: 0
Vvedite nazvanie alboma: www
Vvedite god vipuska: 1990
Vvedite kl-vo trekov v albome: 12
Vvedite tip zapisi [0..2]: 1
Vvedite nazvanie alboma: eee
Vvedite god vipuska: 1991
Vvedite kl-vo trekov v albome: 13
Vvedite prodolzitelnost alboma po vremeni: 58
·
При натисканні на клавішу
"2" на екрані з'явиться таблиця яку ви заповнили вище:
Vivod na ekran
|Nazv |God |Treki |Vremya |Bonus
-------------------------------------------------------
qqq 1889 11 60 2
www 1990 12
eee 1991 13 58
Vivod na ekran zavershen.
·
Якщо ви натиснете
"3", то на екрані з'явиться повідомлення:
Vvedite nomer operatsii:3
Vivod v fail a.dat
Vivod v fail uspeshno zavershen.
·
Якщо ви натиснете
"4", то на екрані з'явиться повідомлення:
Vvedite nomer operatsii:4
Chtenie iz faila a.dat
Chtenie iz faila uspeshno zavershena.
·
При натисканні на клавішу
"5" на екрані з'явиться повідомлення та ви виконаєте наступні дії:
Vvedite nomer operatsii:5
Poisk obyekta
Vvedite kluch dlya poiska(nazvanie alboma):
www
Zapis bila naidena.
|Nazv |God |Treki |Vremya |Bonus
-------------------------------------------------------
www 1990 12
·
Якщо ви натиснете
"6", то на екрані з'явиться повідомлення та ви виконаєте наступн
дії:
Vvedite nomer operatsii:6
Redaktirovanie zapisi
Vvedite nomer zapisi: 2
vedite nazvanie alboma: rrr
vedite god vipuska: 1234
vedite kl-vo trekov v albome: 13
vedite prodolzitelnost alboma po vremeni: 56
Redaktirovanie uspeshno zaversheno.
·
Результатом ваших дій буде
те, що один запис у таблиці зміниться:
Vivod na ekran
|Nazv |God |Treki |Vremya |Bonus
-------------------------------------------------------
qqq 1889 11 60 2
www 1990 12
rrr 1234 13 56
Vivod na ekran zavershen.
·
При натисканні на клавішу
"7" на екрані з'явиться повідомлення та ви виконаєте наступні дії:
Vvedite nomer operatsii:7
Vstavka novoi zapisi
Vvedite tip novoy zapisi [0..2]: 2
vedite nazvanie alboma: zzz
vedite god vipuska: 1534
Vvedite kl-vo trekov v albome: 13
Vvedite prodolzitelnost alboma po vremeni: 222
Vvedite kolichestvo bonus trekov: 1
Vstavka zapisi uspeshno zaversena.
·
Результатом ваших дій буде
те що один запис у таблиці зміниться:
Vivod na ekran
|Nazv |God |Treki |Vremya |Bonus
-------------------------------------------------------
qqq 1889 11 60 2
www 1990 12
rrr 1234 13 56
zzz 1534 11 222 1
Vivod na ekran zavershen.
·
Якщо ви натиснете
"8" то на екрані з'явиться повідомлення та ви виконаєте наступні дії:
Vvedite nomer operatsii:8
Udalenie zapisi
Vvedite nomer zapisi dlya udalenia:1
Zapis bila udalena.
·
Результатом ваших дій буде
те, що один запис у таблиці буде знищено:
Vivod na ekran
|Nazv |God |Treki |Vremya |Bonus
-------------------------------------------------------
qqq 1889 11 60 2
rrr 1234 13 56
zzz 1534 11 222 1
Vivod na ekran zavershen.
·
При натисканні на клавішу
"9" на екрані з'явиться повідомлення та ви виконаєте наступні дії:
Vvedite nomer operatsii:9
Poisk obyekta s minimalnim kl-vom trekov v
zadannom diapazone let
Vvedite leviy predel poiska(god): 1
Vvedite praviy predel poiska(god): 1600
Zapis bila naidena.
|Nazv |God |Treki |Vremya |Bonus
-------------------------------------------------------
zzz 1534 11 222 1
·
При натисканні на клавішу
"10" програму буде завершено.
Кожний отриманий результат відповіда
поставленій задачі.
Отриманні результати збігаються з прогнозами,
щодо вірності роботи даної програми, тобто задача виконана вірно.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ
ТЕХНІЧНИЙ УНІВЕРСИТЕТ
"ХАРКІВСЬКИЙ
ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
Кафедра
Обчислювальної техніки та програмування
ЗАТВЕРДЖУЮ
Завідувач кафедри ОТП
__________ /Xxxxxxxxxxx./
"___" __________ 2007р.
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Текст
програми
Xxxxxxxxxxx-01 12 01-1-ЛЗ
|
Розробники
Керівник проекту
__________ /доц. Xxxxxxxxxxx./
"___" __________
2007 р.
Виконавець
__________ /студ. Xxxxxxxxxxx./
"___" __________
2007 р.
|
2007
УЗГОДЖЕНО
Xxxxxxxxxxx-01 81 01-1-ЛЗ
Розрахунково-графічне завдання № 1, 2
ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА
Текст
програми
Xxxxxxxxxxx-01 12 01-1
2007
Текст програми
//Заголовковий файл
%23include
<string.h>
class
album
public:
album()
virtual
void input();
virtual
void output();
char
nazv[4];//Назва
int
god;//Рік випуску
~album()
};
class
album1: public
album
protected:
int
trek;//Кількість треків
public:
album1();
virtual
void input();
virtual
void output();
int
getTrek()
return
trek;
void
setTrek(int
c)//ф-ція створення поля
trek=c;
~album1();
};
class
album2: public album1
protected:
int
time;//Час звучання
public:
album2();
virtual
void input();
virtual
void output();
int
getTime()
return
time;
void
setTime(int c)
time=c;
~album2();
};
class
album3: public album2
protected:
int
bonus;//Кількість бонус треків
public:
album3();
virtual
void input();
virtual
void output();
int
getBonus()
return
bonus;
void
setBonus(int c)
bonus=c;
~album3();
};
class
Tool
public:
album
*d;
int
t;
friend
class Trist;//об'явлення
дружнього класу
Tool
*right,*left;
;
class
Trist
public:
Tool
*head,*tail;
Tool
*current;
Trist(int
type,int vvod);//Конструктор
void
add(int type, int vvod);//ф_ція добавлення
об’єктів
~Trist();//Деструктор
;
//Описний файл
%23include
"RGZ.h"
%23include
<iostream.h>
%23include
<string.h>
%23include
<stdlib.h>
%23include
<iomanip.h>
void
album::input()//ф-ція вводу
cout
<< "Vvedite nazvanie alboma: ";
cin
>> nazv;
nazv[3]=NULL;
cout
<< "Vvedite god vipuska: ";
cin
>> god;
void
album::output()//ф-ція виводу
cout
<< endl<< setw(10) << setiosflags(ios::left) << nazv
<<
setw(10) << setiosflags(ios::left) << god;
album1::album1():album()
//конструктор
album1::~album1()
album::~album(); //деструктор
void
album1::input()
album::input();
cout
<< "Vvedite kl-vo trekov v albome: ";
cin
>> trek;
void
album1::output()
album::output();
cout<<
setw(10) << setiosflags(ios::left) << trek;
album2::album2():album1()
album2::~album2()
album1::~album1();
void
album2::input()
album1::input();
cout
<< "Vvedite prodolzitelnost alboma po vremeni: ";
cin
>> time;
void
album2::output()
album1::output();
cout
<< setw(12) << setiosflags(ios::left) << time;
album3::album3():album2()
album3::~album3()
album2::~album2();
void
album3::input()
album2::input();
cout
<< "Vvedite kolichestvo bonus trekov: ";
cin
>> bonus;
void
album3::output()
album2::output();
cout
<< setw(10) << setiosflags(ios::left) << bonus;
void
caption()//заголовкова ф-ція
Treki"
<<
setw(10) << setiosflags(ios::left) << "
Trist::Trist(int
type, int vvod)//Створення списку об'єктів
album1
*pr;
album2
*sp;
album3
*fl;
head
= new Tool;
head->t
= type;
if
(head->t == 0)
pr
= new album1;
if
(vvod)
pr->input();
head->d=pr;
else
if
(head->t == 1)
sp
= new album2;
if
(vvod)
sp->input();
head->d=sp;
else
if
(head->t == 2)
fl
= new album3;
if
(vvod)
fl->input();
head->d=fl;
head->right=NULL;
head->left=NULL;
tail=head;
current=head;
}
Trist::~Trist()//Висвободження
памяті
Tool
*h;
h=head;
while
(h!=0)
head=head->right;
head->left=NULL;
delete
h;
h=head;
}
void
Trist::add(int type, int vvod)//додавання нового об’єкта
у список
Tool
*q = new Tool;
album1
*pr;
album2
*sp;
album3
*fl;
q->t
= type;
switch
(q->t)
case
0:
pr
= new album1;
if
(vvod)
pr->input();
q->d=pr;
break;
case
1:
sp=new
album2;
if
(vvod)
sp->input();
q->d=sp;
break;
case
2:
fl=new
album3;
if
(vvod)
fl->input();
q->d=fl;
break;
if
(current==tail)
q->right=NULL;
q->left=current;
current->right=q;
tail=q;
current=q;
else
q->right=current->right;
current->right->left=q;
current->right=q;
q->left=current;
current=q;
}
//Головний файл
%23include
"RGZ_dsc.cpp"
%23include
<iostream.h>
%23include
<conio.h>
%23include
<stdlib.h>
%23include
<fstream.h>
void
sozdan(Trist *&a, int n);//створення
void
output(Trist *&a);//вивід на екран
void
output_file(Trist *&a, int n);//вивід до файлу
void
input_file(Trist *&a);//читання з файлу
Tool*
pois(Trist *&a, char* nazv);//ф-ція пошуку
Tool*
zadacha(Trist *&a,int godL,int godR);//виконання
задачі
void
main()//Головна програма
int
i,N=5,k;
Trist
*a = NULL;
clrscr();
randomize();
while
(1)
cout
<< "\n\n%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23";
cout
<< "\n%23 1 - Sozdanie bazi dannih %23";
cout
<< "\n%23 2 - Vivod na ekran %23";
cout
<< "\n%23 3 - Vivod v fail %23";
cout
<< "\n%23 4 - Chtenie iz faila %23";
cout
<< "\n%23 5 - Poisk %23";
cout
<< "\n%23 6 - Redaktirovanie zapisi %23";
cout
<< "\n%23 7 - Vstavka novoi zapisi %23";
cout
<< "\n%23 8 - Udalenie zapisi %23";
cout
<< "\n%23 9 - Vipolnrnie zadachi %23";
cout
<< "\n%23 10 - Vihod %23";
cout
<< "\n\n%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23";
cout
<< "\n Vvedite nomer operatsii:";
cin
>> k;
switch
(k)
case
1:
cout
<< "\n Sozdanie tablizi dannih";
cout
<< "\n Vvedite N: ";
cin
>> N;
sozdan(a,N);
cout
<< "\n Tabliza dannih sozdana.";
getch();
break;
case
2:
cout
<< "\n Vivod na ekran ";
output(a);
cout
<< "\n Vivod na ekran zavershen.";
getch();
break;
case
3:
cout
<< "\n Vivod v fail a.dat ";
output_file(a,N);
cout
<< "\n Vivod v fail uspeshno zavershen.";
getch();
break;
case
4:
cout
<< "\n Chtenie iz faila a.dat ";
input_file(a);
cout
<< "\n Chtenie iz faila uspeshno zavershena.";
getch();
break;
case
5:
cout
<< "\n Poisk obyekta ";
cout
<< "\n Vvedite kluch dlya poiska(nazvanie alboma): ";
char
*nazv;
cin
>> nazv;
Tool
*n;
//
n=NULL;
n
= pois(a,nazv);
if
(n==NULL) cout << "\n Zapis ne naidena.";
else
cout
<< "\n Zapis bila naidena.";
caption();
n->d->output();
delete
nazv;
getch();
break;
case
6:
cout
<< "\n Redaktirovanie zapisi ";
cout
<< "\n Vvedite nomer zapisi: ";
int
c;
cin
>> c;
a->current=a->head;
for
(i=0;a->current!=NULL;i )
if
(i==c)
a->current->d->input();
break;
a->current=a->current->right;
}
cout
<< "\n Redaktirovanie uspeshno zaversheno.";
getch();
break;
case
7:
cout
<< "\n Vstavka novoi zapisi ";
cout
<< "\n Vvedite tip novoy zapisi [0..2]: ";
int
p = 0;
cin
>> p;
a->current=a->tail;
a->add(p,1);
cout
<< "\n Vstavka zapisi uspeshno zaversena.";
getch();
break;
case
8:
cout
<< "\n Udalenie zapisi ";
cout
<< "\n Vvedite nomer zapisi dlya udalenia: ";
int
j = 0;
cin
>> j;
a->current=a->head;
for
(i=0;a->current!=NULL;i )
if
(i==j)
Tool
*q = a->current;
if
(q->left!=NULL) q->left->right = q->right;
if
(q->right!=NULL) q->right->left = q->left;
if
(q==a->head) a->head=q->right;
if
(q==a->tail) a->tail=q->left;
delete
q;
a->current
= a->tail;
break;
a->current=a->current->right;
}
cout
<< "\n Zapis bila udalena.";
getch();
break;
case
9:
cout
<< "\n Poisk obyekta s minimalnim kl-vom trekov v zadannom diapazone
let";
cout
<< "\n Vvedite leviy predel poiska(god): ";
int
godL,godR;
cin
>> godL;
cout
<< "\n Vvedite praviy predel poiska(god): ";
cin
>> godR;
Tool
*k;
k
= zadacha(a,godL,godR);
if
(n==NULL) cout << "\n Zapis ne naidena.";
else
cout
<< "\n Zapis bila naidena.";
caption();
k->d->output();
getch();
break;
case
10:
delete
a;
exit(0);
break;
}
}
}
void
sozdan(Trist *&a, int n)
if
(a!=NULL)
delete
a;
cout
<< "\nVvedite tip zapisi [0..2]: ";
int
k;
cin
>> k;
a
= new Trist(k,1);
for
(int i=1;i<n;i )
cout
<< "\nVvedite tip zapisi [0..2]: ";
cin
>> k;
a->add(k,1);
}
void
output(Trist *&a)
caption();
a->current=a->head;
while
(a->current!=NULL)
a->current->d->output();
a->current=a->current->right;
}
void
output_file(Trist *&a, int n)
ofstream
file("a.dat",ios::out
file.seekp(0);
file.write((char*)&(n),sizeof(n));
a->current=a->head;
while
(a->current!=NULL)
file.write((char*)&(a->current->t),sizeof(a->current->t));
file.write(a->current->d->nazv,sizeof(a->current->d->nazv));
switch
(a->current->t)
case
0:
album1
*obj1;
obj1=(album1*)a->current->d;
int
trek = obj1->getTrek();
file.write((char*)&(trek),sizeof(trek));
break;
case
1:
album2
*obj2;
obj2=(album2*)a->current->d;
trek
= obj2->getTrek();
int
time = obj2->getTime();
file.write((char*)&(trek),sizeof(trek));
file.write((char*)&(time),sizeof(time));
break;
case
2:
album3
*obj3;
obj3=(album3*)a->current->d;
trek
= obj3->getTrek();
time
= obj3->getTime();
int
bonus = obj3->getBonus();
file.write((char*)&(trek),sizeof(trek));
file.write((char*)&(time),sizeof(time));
file.write((char*)&(bonus),sizeof(bonus));
break;
a->current=a->current->right;
}
file.close();
}
void
input_file(Trist *&a)
ifstream
file("a.dat",ios::in);
if
(!file)
cerr
<< "\nOshibka chtenia faila!\n";
getch();
exit(1);
int
n;
file.read((char*)&(n),sizeof(n));
int
i;
delete
a;
for
(i=0;i<n;i )
int
t;
file.read((char*)&(t),sizeof(t));
if
(i==0) a=new Trist(t,0); else a->add(t,0);
file.read((char*)&(a->current->d->nazv),sizeof(a->current->d->nazv));
switch
(t)
case
0:
album1
*obj1;
obj1=(album1*)a->current->d;
int
trek = 0;
file.read((char*)&(trek),sizeof(trek));
obj1->setTrek(trek);
break;
case
1:
album2
*obj2;
obj2=(album2*)a->current->d;
trek
= 0;
int
time = 0;
file.read((char*)&(trek),sizeof(trek));
file.read((char*)&(time),sizeof(time));
obj2->setTrek(trek);
obj2->setTime(time);
break;
case
2:
album3
*obj3;
obj3=(album3*)a->current->d;
trek
= 0;
time
= 0;
int
bonus = 0;
file.read((char*)&(trek),sizeof(trek));
file.read((char*)&(time),sizeof(time));
file.read((char*)&(bonus),sizeof(bonus));
obj3->setTrek(trek);
obj3->setTime(time);
obj3->setBonus(bonus);
break;
}
file.close();
}
Tool*
pois(Trist *&a, char* nazv)
Tool
*n = NULL;
a->current=a->head;
while
(a->current!=NULL)
n
= a->current;
if
(strcmp(n->d->nazv,nazv)==0) break;
else
n=NULL;
a->current=a->current->right;
return
n;
}
Tool*
zadacha(Trist *&a,int godL,int godR)
Tool
*k = NULL;
a->current=a->head;
int
max=1000;
while
(a->current!=NULL)
k
= a->current;
if(k->d->god>godL)
if(k->d->god<godR)
if(k->d->trek<min)
break;
else
k=NULL;
a->current=a->current->right;
return
k;
Скачать Курсовая работа: Інформаційно-довідкова системаКурсовая работа: Інформаційно-довідкова система">Скачать Курсовая работа: Інформаційно-довідкова система одним архивом
|