|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Інформаційно-довідкова системаІнформаційно-довідкова системаМІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ "ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ" Кафедра Обчислювальної техніки та програмування ЗАТВЕРДЖУЮ Завідувач кафедри ОТП __________ /xxxxxxxxx./ "___" __________ 2007р. Розрахунково-графічне завдання № 1, 2ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМАСпецифікаціяЛИСТ ЗАТВЕРДЖЕННЯXxxxxxxx
Розроблена програма повинна виконувати такі пункти: - Створення поліморфного списку об'єктів - Вивід його на екран - Занесення у файл - Зчитування з файлу - Пошук запису - Редагування запису - Вставка нового запису - Знищення запису - Виконання задачі; - Вихід. 5. Стадії та етапи розробки 1. Створення класів; 2. Застосування поліморфізму; 3. Створення двонаправленого списку та робота з ним; 4. Втілення можливостей для даної програми, розглянутих у п.4; 5. Ввід та вивід інформації. 6. Показ результатів. 6. Порядок контролю та прийомки Розроблене програмне забезпечення повинно: - виконувати асоціативний пошук даних на основі розробленого алгоритму; - легко адаптуватися при модифікації структури даних; - забезпечувати дружній інтерфейс із користувачем і можливість настроювання параметрів дерева в діалоговому режимі. Відмовлення ЕОМ у роботі не повинний приводити до значних втрат інформації. Розроблювальне програмне забезпечення має функціонувати в середовищі MS-DOS та Windows і повинний бути написаний мовою C++/С. 7. Програмна документація Для розроблювального виробу повинні бути складені програмні документи: - Специфікація; - Технічне завдання; - Пояснювальна записка; - Програма та методика іспиту; - Текст програми. МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ "ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ Кафедра Обчислювальної техніки та програмування ЗАТВЕРДЖУЮ Завідувач кафедри ОТП __________ /Xxxxxxxxxxx./ "___" __________ 2007р. Розрахунково-графічне завдання № 1, 2ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМАПояснювальна запискаЛИСТ ЗАТВЕРДЖЕННЯXxxxxxxxxxx-01 81 01-1-ЛЗ
Розроблена програма повинна виконувати: - Створення поліморфного списку об'єктів - Вивід його на екран - Занесення у файл - Зчитування з файлу - Пошук запису - Редагування запису - Вставка нового запису - Знищення запису - Знаходження запису найменшою кількістю треків у заданому діапазоні років - Вихід. Використовувати дану програму можна для вивчення принципу роботи зі поліморфізмом та списком. При роботі зі списками на практиці частіше усього приходиться виконувати наступні операції: знайти елемент з заданими властивостями; знайти перший елемент у лінійному списку; вставити елемент до та після вказаного вузла; видалити конкретний елемент із списку; упорядкувати вузли списку у конкретному порядку. 2. Технічні характеристики Функціонування системи цілком забезпечується стандартною конфігурацією IBM сумісних персональних ЕОМ. Для експлуатації системи необхідний IBM/PC AT з CPU типу k286 чи вище, обсягом оперативної пам'яті 4 Мбайт і накопичувачем на HARD диску обсягом не менш 200 Мбайт. Що стосується даної програми, то вхідними даними є інформація типу int та char. Вихідні дані є типами цих же типів. Основні функції встановлюють інформацію або виводять її на екран. Нижче приведені схеми алгоритму головної функції void main().(Дивись малюнок 1.1) 3. Очікувані техніко-економічні показники Дана програма займає мінімальний об'єм пам'яті. Поширена інформація щодо вимог зазначена вище. Економічні прибутки не розглядаються, оскільки дана програма є об'єктом для навчання. Є можливість щодо використання її як посібника для наступних курсів. 4. Розробка У програмі використовується поліморфізм, інкапсуляція та успадкування, яскраво представлено ООП. При звернені до батьківського класу, викликаються функції наслідних класів(поліморфізм).При успадкуванні наслідні класи мають доступ до полів батьківського класу. Використано віртуальні функції та поліморфний список об'єктів. Інкапсуляція дозволяє «заховати» змінні-елементи класу. Опис класів album
аlbum1
аlbum
album3
Tool
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-ЛЗ
#include <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();//Деструктор }; //Описний файл #include "RGZ.h" #include <iostream.h> #include <string.h> #include <stdlib.h> #include <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()//заголовкова ф-ція cout << endl << 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; } } //Головний файл #include "RGZ_dsc.cpp" #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <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############################"; cout << "\n# 1 - Sozdanie bazi dannih #"; cout << "\n# 2 - Vivod na ekran #"; cout << "\n# 3 - Vivod v fail #"; cout << "\n# 4 - Chtenie iz faila #"; cout << "\n# 5 - Poisk #"; cout << "\n# 6 - Redaktirovanie zapisi #"; cout << "\n# 7 - Vstavka novoi zapisi #"; cout << "\n# 8 - Udalenie zapisi #"; cout << "\n# 9 - Vipolnrnie zadachi #"; cout << "\n# 10 - Vihod #"; cout << "\n\n############################"; 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|ios::binary); if (!file) { cerr << "\nOshibka vivoda v fail!\n"; getch(); exit(1); } 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; |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |