Зміст:
Завдання на курсову роботу
1.1 Завдання
1.2 Реалізація
Введення
Глава I: Системи підтримки прийняття рішень
1. Система Paradox
Глава II: Особливості об'єктно-орієнтованого аналізу
Інформаційна модель
Модель станів для об'єкта «Операції над БД»
Модель станів для об'єкта «Введення в базу»
Модель взаємодії об'єктів
Таблиця переходів до стану для об'єкта «Операції над БД»
Таблиця переходів до стану для об'єкта «Введення в бузу»
Список подій
ДПДД для стану «Ініціалізація» об'єкта «Операції над БД»
ДПДД для стану «Створення БД» об'єкта «Операції над БД»
ДПДД для стану «Відкриття БД» об'єкта «Операції над БД»
ДПДД для стану «Редагування БД» об'єкта «Операції над БД»
ДПДД для стану «Закриття БД» об'єкта «Операції над БД»
ДПДД для стану «Введення даних» об'єкта «Операції над БД»
ДПДД для стану «Збереження БД» об'єкта «Операції над БД»
ДПДД для стану «неуспішне відкриття БД» об'єкта «Операції над БД»
ДПДД для стану «Оновлення БД» об'єкта «Операції над БД»
Текст програми
Список використаної літератури
Завдання на курсову роботу
з дисципліни «Технологія програмування»
тема:
Система рейтингового контролю знань.
1.1 Завдання
У цій роботі було необхідно написати програму, з використанням об'єктно-орієнтованого методу програмування і об'єктно-орієнтованого аналізу, яка дозволяла б вести обліковий запис студентів з десяти предметів з оцінками. У програму заноситися П.І.Б. студента, факультет на якому він навчається, спеціальність, яку набуває і група відповідно. Програма автоматично вважає середній бал і заносить його в базу. Дана програма сортує, знаходить і фільтрує дані щодо студентів, що полегшує пошук або перегляд перед друком потрібних студентів. Результатом програми є висновок перед друком всіх студентів або по кожному студенту відповідно.
1.2 Реалізація
Дана програма була реалізована на об'єктно-орієнтованої мови С + + і написана в середовищі розробника програмного забезпечення С + + Builder.
Введення
? ????????? ????????????????:< br />
???????????? ?????????? ???????????????? 70 -? ????? - ??????????? ????????????????:< br />
- ????????? ????????????????;< br />
- ?????????? ????????????????;< br />
- ??????????? ?????????????? ???????? ? ?????? (??????????????????? Goto).
???? ??????? - ????????????? ????????? ????????? ? ??? ?????????? ??? ???????? ???? ???????????? ????????????????.< br />
?????????????? ?????? - ?????????? ???????????????? - ???????????? ? ?????????? ?????? ???????? ???? ???????? ?????? ? ????????, ?????????????? ?????? ????? ???????? ??? ?????????, ??????? ???????????? ? ?????? ??????. ?????? ????????????? ??????? ?????????? ??????????? ???????.< br />
????????? ??? - ???????? ? ????????? ????????. ??? ???????? ?????????? ????????? ??????, ??????? ???????? ?????? ?????????? ? ????????? ???????????????? ??????????? ???????, ??????? ???????????? ??????????. ? ?? ????? ????? ??????????????? ????????? struct,? ??????? - ?????? (record). ????????? ???????? ?????? ???? ?????????? ??????? ??????. ????????-??????????????? ?????? ? ?????????? ???????? ????????????,??? ? ????????? ??????????????? ???????-??????????? ???????????? ????? ??????????? ?????????,< br />
????????????? ??????????,? ???????????? ?????????, ???????????,?? ????????, ?????????????????? ??????????? (? ????????????? ???????? "??????" ????? ???????? ?????? ????? ??????).< br />
???????????? ??????: ---------- ?????????? ??? ??????< br />
????????-??????????????? ??????:
?????????? ??????????? ????? ?????? ?????? ????????< br />
??? ???????? ???????? ??????????? ?????????? ????????? ???????,??? ?????? ??????? (? ??????, ????????????? ????? ???????)??? ???????? ??????????? ????????? ?????????? ????????? ????????.< br />
????? ??????? ?????? ????? ???????????? ???????? - ?????? ?? ??????? ??????,??? ???????? ??? ??????????. ???? ??????? ???????? ???????????? ?????? ??????? ?????? ????????,??? ??? ??? ?????????? ????????? ???????? ??? ????????? ?????? ? ???? ?? ???? (?????? ??????).< Br />
?????????? ??????????? ?????? ???????? ??? ???? ?????? ? ?????????? ?????? ??????? ??? ?????????? ???????? ??? ??????????? ????? ???? ???????????? ??????? ???????? ???? ?????? (???) ????? ????????????????. ???????????? ??????? ?????? ?? ??? ??????????? ? ???,??? ?????? ???????????? ?????????????,? ?????? ??????? ? ??????????? ????? ????????????????.< br />
???? ???????????????? ?? + + ???????????? ????? ?????????? ????? ?? ??? ???????????????? ???????? ? ?? ???????. ??? ???? ????????????? ??????? ???????????? ?????? ?? ?????????? ????????????? ??????? ????? ??????.< br />
Глава I
Системи підтримки прийняття рішень
1. Система Paradox
Paradox представляє із себе реляційну базу даних, розроблену формою Borland. Ця база даних використовується як для непрофесіоналів, яким потрібно вирішувати завдання типу картотеки тощо, оскільки володіє досить розвиненою і зрозумілою системою меню і підказки, так і для професійних програмістів, що розробляють складні інформаційні системи, використовуючи при цьому мова запитів QBE або мова розробки додатків PAL. Крім версій під DOS, розроблена версія Paradox for Windows. Вимоги до технічних засобів і порівняльні характеристики по швидкодії см. Глава??. Підтримуються такі типи полів:
- Алфавітно-цифрові (рядкові);
- Числові;
- Грошові;
- Дата;
- Memo - поля;
- Графічні;
- OLE - поля;
- BLOB (Binary Large OBject);
Причому, типи полів від Memo до Blob підтримуються тільки в Paradox for Windows.
Рядкові поля дозволяють містити будь-яку послідовність символів довжиною до 255 байт.
Числові поля можуть містити як цілі, так і дійсні числа з числом цифр до 15.
Грошові поля - теж що і числові з двома знаками після коми, окремий тип служить тільки для визначення Paradox-му формату виводу даних полів.
Поля дати - відповідно містять дату і дозволяють проводити над собою відповідні операції порівняння та вирахування.
Мемо - поля містять будь-який текст необмеженої довжини (разом з атрибутами тексту - шрифт, накреслення, колір та ін)
У графічних полях можуть міститися графіка типу bitmat.
У OLE - полях можуть міститися об'єкти від інших додатків Windows.
У BLOB - полях можна зберігати будь-які дані за вибором користувача (насправді з точки зору Paradox, Memo, Graphic і OLE - поля також є полями типу BLOB). На даний момент можливо зберігання об'єктів MultiMedia, креслення та інші програми.
Досить зручним є той факт, що для всіх типів полів існує значення "пусте поле".
Також слід зазначити тип даних "BLOB", тому що в полях такого типу можна зберігати будь-які дані довільного розміру, що вигідно відрізняється від MEMO-полів у dBASE і Clipper, які дозволяють зберігати тільки текст, та й то обмеженого об'ема (4K).
Вся робота по створенню та роботі з таблицями, підготовці звітів і запитів, створенню досить складних додатків, які не потребують будь-яких складних розрахунків проводиться в єдиній
інтегрованому середовищі за допомогою системи меню. Система володіє досить широкими можливостями з маніпулювання даними та побудови звітів, деякими корисними статистичними та алгебраїчними функціями для створення розрахункових завдань.
Функції маніпулювання даними можна розділити на наступні досить стандартні групи:
- Робота з таблицями;
- Робота з окремими записами;
- Підготовки звітів;
- Робота із запитами;
- Робота з мережею;
- Робота з макросами;
- Роботи з діловою графікою.
Функе роботи з таблицями дозволяють створювати таблиці, перейменовувати, видаляти, копіювати і, що досить важливо, модифікувати структуру таблиць, навіть якщо в них вже знаходяться дані. Також, що важливо, всі ці операції проводяться не над окремими файлами (як, скажімо, в dBase), а над усім сімейством таблиць (включаючи файли даних, індексів, запитів та звітів). Є і такі операції реляційної алгебри, як об'єднання і віднімання? Таблиць? Відносин?.
Функції роботи з записами - стандартні (додати, видалити, відредагувати).
Зручними засобами володіє генератор звітів - форму звіту можна "намалювати" на екрані і отримати фактично те, що ви бачите. Генератор звітів дозволяє створювати як звіти в "стандартної" (табличній) формі, так і звіт у вільній формі (в т.ч. наклейки, ділові листи тощо), проводити угруповання звіту за значеннями полів (причому кількох рівнів вкладеності), використовувати обчислювані поля.
Опції запитів реалізовані на реляційному мовою QBE, причому звіти можна формувати і по запитними формам. У Paradox for Windows побудова запитів ще більш
спрощено - для зв'язків таблиць один з одним достатньо просто провести лінії між відповідними полями.
Функції роботи з мережею дозволяють отримати доступ до віддаленої БД, заблокувати дані для захисту від доступу інших користувачів на час модифікації, встановити захист за паролем від несанкціонованого доступу.
Функції роботи з макросами дозволяють практично створювати сценарій роботи з користувачем і робити деякі прості програми.
Система ділової графіки дозволяє за таблицями будувати до шести функцій у вигляді різного роду діаграм і графіків.
Якщо всіх перерахованих можливостей недостатньо, то можна скористатися мовою побудови додатків PAL. Дана мова дозволяє скористатися всіма перерахованими вище
можливостями, тому що з нього можна мати доступ до функцій основного меню, а також володіє додатковими засобами, характерними для мов програмування (керуючі структури
типи if - then - else, цикли, змінні, оператори введення-виведення, додаткові математичні і статистичні функції, можливість створення процедур і бібліотек процедур) та засобами доступу до продукту фірми Borland - SQL-link. Засобами Pal можна створювати призначені для користувача меню, вікна і
інші радощі для недосвідченого користувача, для якого картинка важливіше, ніж зміст.
У системі є відладчик, за допомогою якого можна досить зручно налагоджувати програми на PAL. На жаль, для роботи програм на PAL необхідна або система Paradox, або відповідний модуль виконання, тобто проблематичною стає можливість розповсюдження програм (кожен користувач повинен придбати відповідний Run-time модуль для виконання програм.
За показниками швидкодії система знаходиться в перших рядах серед подібних.
Система підтримує наступні індекси - первинний (не може бути повторюваних ключових полів), вторинний - по одному полю, і складовою - по групі полів. На жаль, якщо таблиця має кілька індексів, то при роботі з записами здійснюється модифікація тільки одного індексу, а всі інші будуть перебудовуватися або після закінчення роботи з таблицею, або за запитом користувача. Можна зробити цей процес "прозорим" для користувача (перша можливість - індекси перебудовуються при закритті таблиці), на ясно, що це досить сильно уповільнює роботу з подібними таблицями і завдає користувачеві деякі незручності (особливо якщо таблиці великих розмірів).
Система підтримує доступ до БД на сервері по мережі типу Novell, 3Com, Starlan, Banyan, а також іншими, сумісними з NetBios й забезпечує необхідну блокування даних як на рівні таблиць, так і на рівні окремих записів. Paradox for Windows дозволяє працювати з усіма типами мереж, які підтримуються Windows. Система має і таку корисну особливість, як можливість визначити під час роботи, змінювалися чи дані в таблицях, до яких мають доступ декілька користувачів одночасно, хоча це і збільшує навантаження на мережу і може створити деякі проблеми при наявності великої кількості користувачів.
Дані в таблицях зберігаються в їх природному вигляді без перетворення, а не у вигляді символьних рядків, як це прийнято у форматі dBase, що позначається на прискоренні роботи та зменшенні розмірів самої бази даних.
Є засоби експорту та імпорту даних з/в формат Qattro/Pro, 1-2-3, Symphony, dBase, VisiCalc, а в системі Paradox for Windows можливо працювати з файлами dBase без перетворення.
Таким чином, система достатня зручна як для непідготовленого користувача, який хоче вирішити свою дрібну задачку типу записника - за рахунок розвиненої системи меню та підказки, і зручна для професійного програміста, який вирішує досить складні завдання - за рахунок багатих можливостей, що надаються системою, потужного реляційного мови запитів QBE, розвинених засобів побудови звітів, наявності мови побудови додатків, що має вихід на SQL-link; розвинені
засоби захисту даних від несанкціонованого доступу. Все це дозволяє будувати складні програми, що працюють у мережі з багатьма користувачами. Але відсутність можливості одержати виконуваний модуль накладає обмеження на широке розповсюдження розроблених програм (хоча Run-Time модуль коштує досить дешево, все-таки психологічно краще купити одну або декілька програм в одного виробника, ніж зв'язуватися з декількома) А робота фактично в режимі інтерпретації PAL хоч і практично не позначається при побудові складних інформаціоннио-пошукових систем, в яких час на пошук даних значно перевищує час виконання розрахунків, але накладає обмеження на системи, в яких крім завдань пошуку стоять досить складні завдання обробки даних. Але Paradox for Windows дозволяє подолати це обмеження, тому що в ньому можливо мати доступ до функцій, написаних на звичайних мовах програмування і зібрані в динамічні бібліотеки (DDL). Так що можна користуватися цією можливістю, хоча перенесення програм у середу Windows (у тому числі
і СУБД) роботу цих програм явно не прискорює.
На користь вибору даної системи для нашого завдання можуть служити наступні фактори (напевно):
- Програмування на мові програмування PAL дозволяє проводити досить складну обробку даних, дозволяє використовувати розвинені засоби діалогу з користувачем;
- Дані в БД зберігаються в їх природному вигляді, що дозволяє збільшити швидкість обробки і зменшити необхідне для зберігання даних простір;
- Дуже корисні поля типу BLOB - дозволяють зберігати текст довільної довжини, наприклад, тексти методичок тощо;
- Можливість мережевої взаємодії дозволяє проводити подальше розширення системи до рівня інституту з підключенням інших підсистем (скажімо, УЕТ, деканат та ін) і забезпечувати необхідну в рамках подібних систем захист даних;
- Багаті можливості з експорту та імпорту даних;
- Можливість роботи під Windows;
- Відносно прості, але потужні засоби для побудови запитів до бази даних.
Хоча, звичайно, вищевказані обмеження (неможливість отримати. ЕХЕ - файл і інтерпретатор) - це для нас явні мінуси.
Глава IV
Особливості об'єктно-орієнтованого аналізу
При розробці даної курсової роботи було використано об'єктно-орієнтований підхід до написання даної програми. Проектування відбувалося таким чином:
1. Була сформована інформаційна модель, на якій були виділені об'єкти, що роблять вплив на хід процесу. У процесі проектування навмисно в інформаційну модель були включені деякі абстрактні типи даних, які при подальшій розробці не утворили об'єкти. Це було зроблено з метою більш повно відобразити всі відносини і взаємодії, що виникають при роботі програми.
2. Для кожного об'єкта була сформована модель станів, яка відображала події і стани, в яких міг знаходитися об'єкт, тобто його життєвий цикл. Для кількох об'єктів не було моделі станів. Це пов'язано з тим, що характер поведінки даних об'єктів є суто статичним і не зазнає значних змін. Навпаки, об'єкти, що мають динамічний поведінку були повно відображені на моделях станів. Особливість представлених моделей станів полягає в тому, що на них представлені події та дії, які виникають при виникненні перших.
3. Модель взаємодії об'єктів являє собою графічне представлення зв'язків і взаємодії між усіма об'єктами, визначеними на інформаційній моделі.
4. У об'єктів, з моделлю станів, була сформована таблиця переходів до стану, що демонструє несуперечність моделі станів.
5. Для всіх об'єктів була сформована таблиця всіх можливих подій об'єктів.
6. Для кожної дії у кожного певного об'єкта була сформована ДПДД, що відбиває послідовність дій, що виникають при певній дії.
Інформаційна модель
Модель станів для об'єкта «Операції над БД»
7
Модель станів для об'єкта «Введення даних»
Модель взаємодії об'єктів
Таблиця переходів до стану
для об'єкта «Операції над БД»
Стан
O1
O2
O3
O4
O5
O6
O7
O8
O9
Ініціалізація
-
2
3
-
-
-
-
-
-
Створення
-
-
-
-
-
6
-
-
-
Відкриття
-
-
-
4
-
6
-
-
-
Неуспіх
-
-
-
-
5
-
-
-
-
Закриття
1
-
-
-
-
-
-
-
-
Редагування
-
-
-
-
-
-
7
-
-
Оновлення
-
-
-
-
-
6
-
8
-
Введення в базу
-
-
-
-
-
-
-
-
9
Схраненіе
1
-
-
-
-
-
-
-
-
Таблиця переходів до стану
для об'єкта «Введення даних»
Стан
В1
В2
В3
В4
В5
В6
Ініціалізація
-
2
-
-
-
-
Відключення редагування
-
-
3
-
-
-
Формування пошуку, фільт., Сортир.,
-
-
-
4
-
-
Формування груп
-
-
-
-
5
-
Перегляд
Перед печ.
6
Друк
-
-
-
-
-
-
Список подій
Мітка
Значення
Дані події
Джерело
Призначення
О1
Ініціалізація
ID Основний інтерфейс.ID Операції
Головне вікно
Операції
О2
Створення БД
ID Основний інтерфейс.ID Операціі.Созданіе
Операція
Створення
О3
Відкриття БД
ID Основний інтерфейс.ID Операціі.Откритіе
Операція
Відкриття
О4
Неуспіх
ID Основний інтерфейс.ID Операціі.Откритіе.Статус
Операція
Статус
ПРО5
Закриття БД
ID Основний інтерфейс.ID Операціі.Закритіе
Операція
Закриття
ПРО6
Редагування БД
ID Основний інтерфейс.ID Операціі.Редактірованіе
Операція
Редагування
ПРО7
Оновлення БД
ID Основний інтерфейс.ID Операціі.Обновленіе
Операція
Оновлення
ПРО8
Введення в БД
ID Основний інтерфейс.ID Операції.
Операція
Редагування
ПРО9
Збереження БД
ID Основний інтерфейс.ID Операціі.Сохраненіе
Операція
Збереження
В1
Ініціалізація
ID Основний інтерфейс.ID Операції
Головне вікно
База даних
В2
Відключення редагування
ID Основний інтерфейс.ID Операції.
Операція
Перехід в основний інтерфейс
В3
Формування пошуку, фільтра, сортування
ID Основний інтерфейс.ID Операціі.ID
Головне вікно
Формування фільтра
В4
Формування груп
ID Основний інтерфейс.ID Операції.
Головне вікно
Формувати
В5
Перегляд перед друком
ID Основний інтерфейс.ID Операціі.ID
Головне вікно
Перегляд учнів
В6
Друк
ID Основний інтерфейс.ID Операціі.ID
Головне вікно
Учнів
ДПДД для стану Ініціалізація
об'єкта «Операції над БД»
ДПДД для стану Створення бази
об'єкта «Операції над БД»
ДПДД для стану Відкриття бази
об'єкта «Операції над БД»
ДПДД для стану Редагування бази
об'єкта «Операції над БД»
ДПДД для стану Закриття бази
об'єкта «Операції над БД»
ДПДД для стану Збереження БД
об'єкта «Операції над БД»
ДПДД для стану неуспішне відкриття БД
об'єкта «Операції над БД»
ДПДД для стану Оновлення БД
об'єкта «Операції над БД»
Текст програми
У лістинг програми був включений весь той код, який був написаний в процесі розробки та включення тих рядків коду, які були автоматично згенерували С + + Builder:
1. Заголовки:
Kur1.h:
//------------------------------------------------ ---------------------------< br />
# ifndef kur1H
# define kur1H
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include "Grids.hpp"
# include
# include
# include
# include
# include
# include
# include
//------------------------------------------------ ---------------------------< br />
class TForm1: public TForm
(
__published:// IDE-managed Components
TMainMenu * MainMenu1;
TMenuItem * N1;
TMenuItem * N3;
TMenuItem * N4;
TMenuItem * N10;
TMenuItem * N14;
TMenuItem * N16;
TMenuItem * N17;
TOpenDialog * OpenDialog1;
TSaveDialog * SaveDialog1;
TMenuItem * N18;
TMenuItem * N20;
TPrintDialog * PrintDialog1;
TPrinterSetupDialog * PrinterSetupDialog1;
TStatusBar * StatusBar1;
TPanel * Panel1;
TDBGrid * DBGrid1;
TDBNavigator * DBNavigator1;
TMenuItem * N2;
TMenuItem * N5;
TMenuItem * N6;
TBitBtn * BitBtn1;
TBitBtn * BitBtn2;
TBitBtn * BitBtn3;
TMenuItem * N7;
void __fastcall N10Click (TObject * Sender);
void __fastcall N17Click (TObject * Sender);
void __fastcall N14Click (TObject * Sender);
void __fastcall N5Click (TObject * Sender);
void __fastcall N2Click (TObject * Sender);
void __fastcall N16Click (TObject * Sender);
void __fastcall N20Click (TObject * Sender);
void __fastcall BitBtn1Click (TObject * Sender);
void __fastcall BitBtn2Click (TObject * Sender);
void __fastcall BitBtn3Click (TObject * Sender);
void __fastcall N7Click (TObject * Sender);
void __fastcall N4Click (TObject * Sender);
private:// User declarations
public:// User declarations
//AnsiString file2;
__fastcall TForm1 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TForm1 * Form1;
//------------------------------------------------ ---------------------------< br />
# endif
Datam.h:
//------------------------------------------------ ---------------------------< br />
# ifndef DatamH
# define DatamH
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
# include
//------------------------------------------------ ---------------------------< br />
class TDM1: public TDataModule
(
__published:// IDE-managed Components
TDataSource * DataSource1;
TTable * Table1;
TQuery * Query1;
TDataSource * DataSource2;
private:// User declarations
public:// User declarations
__fastcall TDM1 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TDM1 * DM1;
//------------------------------------------------ ---------------------------< br />
# endif
filename.h:
//------------------------------------------------ ---------------------------< br />
# ifndef filenameH
# define filenameH
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
//------------------------------------------------ ---------------------------< br />
class TForm6: public TForm
(
__published:// IDE-managed Components
TEdit * Edit1;
TLabel * Label2;
TBevel * Bevel1;
TButton * Button1;
TButton * Button2;
void __fastcall Button1Click (TObject * Sender);
private:// User declarations
public:// User declarations
__fastcall TForm6 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TForm6 * Form6;
//------------------------------------------------ ---------------------------< br />
# endif
filter.h:
//------------------------------------------------ ---------------------------< br />
# ifndef filterH
# define filterH
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
//------------------------------------------------ ---------------------------< br />
class TForm5: public TForm
(
__published:// IDE-managed Components
TBevel * Bevel1;
TLabel * Label1;
TLabel * Label2;
TComboBox * ComboBox1;
TEdit * Edit1;
TButton * Button1;
TButton * Button2;
TButton * Button3;
void __fastcall Button3Click (TObject * Sender);
private:// User declarations
public:// User declarations
__fastcall TForm5 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TForm5 * Form5;
//------------------------------------------------ ---------------------------< br />
# endif
Findcust.h:
//------------------------------------------------ ---------------------------< br />
# ifndef filterH
# define filterH
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
//------------------------------------------------ ---------------------------< br />
class TForm5: public TForm
(
__published:// IDE-managed Components
TBevel * Bevel1;
TLabel * Label1;
TLabel * Label2;
TComboBox * ComboBox1;
TEdit * Edit1;
TButton * Button1;
TButton * Button2;
TButton * Button3;
void __fastcall Button3Click (TObject * Sender);
private:// User declarations
public:// User declarations
__fastcall TForm5 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TForm5 * Form5;
//------------------------------------------------ ---------------------------< br />
# endif
Repopt.h:
//------------------------------------------------ ----------------------------< br />
# ifndef ReportH
# define ReportH
//------------------------------------------------ ----------------------------< br />
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
//------------------------------------------------ ----------------------------< br />
class TQRListForm: public TForm
(
__published:
TQuickReport * QuickReport;
TQRBand * Title;
TQRBand * PageHeader;
TQRBand * Detail;
TQRBand * PageFooter;
TQRLabel * QRLabel4;
TQRLabel * QRLabel1;
TQRLabel * QRLabel2;
TQRLabel * QRLabel3;
TQRLabel * QRLabel5;
TQRLabel * QRLabel6;
TQRGroup * QRGroup1;
TQRSysData * QRSysData1;
TQRShape * QRShape1;
TQRDBText * QRDBText3;
TQRDBText * QRDBText1;
TQRDBText * QRDBText9;
TQRDBText * QRDBText10;
TQRDBText * QRDBText2;
void __fastcall QRGroup1NeedData (AnsiString & Value);
private:
public:
virtual __fastcall TQRListForm (TComponent * AOwner);
);
//------------------------------------------------ ----------------------------< br />
extern TQRListForm * QRListForm;
//------------------------------------------------ ----------------------------< br />
# endif
RichАbt.h:
//------------------------------------------------ ----------------------------< br />
# ifndef RichAbtH
# define RichAbtH
//------------------------------------------------ ----------------------------< br />
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
//------------------------------------------------ ----------------------------< br />
class TForm2: public TForm
(
__published:
TImage * ProgramIcon;
TButton * OKButton;
public:
virtual __fastcall TForm2 (TComponent * Owner);
);
//------------------------------------------------ ----------------------------< br />
extern TForm2 * Form2;
//------------------------------------------------ ----------------------------< br />
# endif
Sort.h:
//------------------------------------------------ ---------------------------< br />
# ifndef SortH
# define SortH
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
//------------------------------------------------ ---------------------------< br />
class TForm4: public TForm
(
__published:// IDE-managed Components
TBevel * Bevel1;
TComboBox * ComboBox1;
TLabel * Label1;
TButton * Button1;
TButton * Button2;
void __fastcall ComboBox1Change (TObject * Sender);
private:// User declarations
public:// User declarations
__fastcall TForm4 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TForm4 * Form4;
//------------------------------------------------ ---------------------------< br />
# endif
Unit1.h:
//------------------------------------------------ ---------------------------< br />
# ifndef Unit1H
# define Unit1H
//------------------------------------------------ ---------------------------< br />
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include "Grids.hpp"
# include
//------------------------------------------------ ---------------------------< br />
class TForm3: public TForm
(
__published:// IDE-managed Components
TLabel * Label1;
TLabel * Label2;
TLabel * Label3;
TLabel * Label4;
TDBEdit * DBEdit3;
TDBEdit * DBEdit6;
TLabel * Label6;
TLabel * Label7;
TDBEdit * DBEdit8;
TButton * Button1;
TButton * Button2;
TButton * Button5;
TLabel * Label5;
TDBEdit * DBEdit4;
TDBEdit * DBEdit1;
TDBEdit * DBEdit2;
TLabel * Label8;
TDBEdit * DBEdit5;
TBitBtn * BitBtn1;
TBitBtn * BitBtn2;
TButton * Button3;
TStatusBar * StatusBar1;
void __fastcall FormCreate (TObject * Sender);
void __fastcall Button1Click (TObject * Sender);
void __fastcall Button2Click (TObject * Sender);
void __fastcall Button6Click (TObject * Sender);
void __fastcall Button4Click (TObject * Sender);
void __fastcall Button5Click (TObject * Sender);
void __fastcall Table1AfterOpen (TDataSet * DataSet);
void __fastcall Button3Click (TObject * Sender);
private:// User declarations
public:// User declarations
__fastcall TForm3 (TComponent * Owner);
);
//------------------------------------------------ ---------------------------< br />
extern TForm3 * Form3;
//------------------------------------------------ ---------------------------< br />
# endif
2. Файли з методами:
Project1.cpp:
//------------------------------------------------ ---------------------------< br />
# include
# pragma hdrstop
//------------------------------------------------ ---------------------------< br />
USEFORM ( "kur1.cpp", Form1);
USEFORM ( "Richabt.cpp", Form2);
USERES ( "Project1.res");
USEFORM ( "Report.cpp", QRListForm);
USEDATAMODULE ( "Datam.cpp", DM1);
USEFORM ( "Unit1.cpp", Form3);
USEFORM ( "Findcust.cpp", fmFindCust);
USEFORM ( "Sort.cpp", Form4);
USEFORM ( "filter.cpp", Form5);
USEFORM ( "filename.cpp", Form6);
//------------------------------------------------ ---------------------------< br />
WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)
(
try
(
Application-> Initialize ();
Application-> CreateForm (__classid (TForm1), & Form1);
Application-> CreateForm (__classid (TQRListForm), & QRListForm);
Application-> CreateForm (__classid (TDM1), & DM1);
Application-> CreateForm (__classid (TForm3), & Form3);
Application-> CreateForm (__classid (TfmFindCust), & fmFindCust);
Application-> CreateForm (__classid (TForm4), & Form4);
Application-> CreateForm (__classid (TForm5), & Form5);
Application-> CreateForm (__classid (TForm6), & Form6);
Application-> Run ();
)
catch (Exception & exception)
(
Application-> ShowException (& exception);
)
return 0;
)
//------------------------------------------------ ---------------------------< br />
Kur1.cpp:
# include
# include
# pragma hdrstop
# include "kur1.h"
# include "RichAbt.h"
# include "Datam.h"
# include "Report.h"
# include "Unit1.h"
# include "Findcust.h"
# include "Sort.h"
# include "filter.h"
# include "filename.h"
//------------------------------------------------ ---------------------------< br />
# pragma link "Grids"
# pragma resource "*. dfm"
TForm1 * Form1;
AnsiString ff;
//------------------------------------------------ ---------------------------< br />
__fastcall TForm1:: TForm1 (TComponent * Owner)
: TForm (Owner)
(
ff = Form1-> Caption;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N10Click (TObject * Sender)
(
Form1-> Caption = ff;
Form6-> ShowModal ();
N2-> Enabled = true;
N20-> Enabled = true;
N5-> Enabled = true;
N14-> Enabled = true;
N16-> Enabled = true;
Form1-> Caption = Form1-> Caption +"->"+ DM1-> Table1-> TableName;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N17Click (TObject * Sender)
(
Close ();
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N14Click (TObject * Sender)
(
QRListForm-> QuickReport-> Print ();
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N5Click (TObject * Sender)
(
DBGrid1-> Visible = false;
DBNavigator1-> Enabled = false;
BitBtn1-> Enabled = false;
BitBtn2-> Enabled = false;
BitBtn3-> Enabled = false;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N2Click (TObject * Sender)
(
DBGrid1-> Visible = true;
DBNavigator1-> Enabled = true;
BitBtn1-> Enabled = true;
DBGrid1-> ReadOnly = true;
BitBtn2-> Enabled = true;
BitBtn3-> Enabled = true;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N16Click (TObject * Sender)
(
QRListForm-> QuickReport-> Preview ();
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N20Click (TObject * Sender)
(
Form3-> ShowModal ();
DM1-> Table1-> Refresh ();
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: BitBtn1Click (TObject * Sender)
(
DBGrid1-> DataSource = DM1-> DataSource2;
fmFindCust-> ShowModal ();
if (fmFindCust-> ModalResult == mrOk)
DM1-> Table1-> GotoCurrent (DM1-> Table1);
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: BitBtn2Click (TObject * Sender)
(
DBGrid1-> DataSource = DM1-> DataSource1;
Form4-> ShowModal ();
if (Form4-> ModalResult == mrOk)
DM1-> Table1-> GotoCurrent (DM1-> Table1);
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: BitBtn3Click (TObject * Sender)
(
DBGrid1-> DataSource = DM1-> DataSource1;
Form5-> ShowModal ();
if (Form4-> ModalResult == mrOk)
DM1-> Table1-> GotoCurrent (DM1-> Table1);
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N7Click (TObject * Sender)
(
if (OpenDialog1-> Execute ())
(
Form1-> Caption = ff;
N2-> Enabled = true;
N20-> Enabled = true;
N5-> Enabled = true;
N14-> Enabled = true;
N16-> Enabled = true;
if (DM1-> Table1-> Active == true)
DM1-> Table1-> Active = false;
DM1-> Table1-> DatabaseName = ExtractFilePath (OpenDialog1-> FileName);
DM1-> Table1-> TableName = ExtractFileName (OpenDialog1-> FileName);
DM1-> Table1-> Active = true;
Form1-> Caption = Form1-> Caption +"->"+ DM1-> Table1-> TableName;
)
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm1:: N4Click (TObject * Sender)
(
Form2 = new TForm2 (Application);
Form2-> ShowModal ();
delete Form2;
)
//------------------------------------------------ ---------------------------< br />
Datam.cpp:
//------------------------------------------------ ---------------------------< br />
# include
# pragma hdrstop
# include "Datam.h"
//------------------------------------------------ ---------------------------< br />
# pragma resource "*. dfm"
TDM1 * DM1;
//------------------------------------------------ ---------------------------< br />
__fastcall TDM1:: TDM1 (TComponent * Owner)
: TDataModule (Owner)
(
)
//------------------------------------------------ ---------------------------< br />
filename.cpp:
//------------------------------------------------ ---------------------------< br />
# include
# pragma hdrstop
# include "filename.h"
# include "Datam.h"
# include "kur1.h"
//------------------------------------------------ ---------------------------< br />
# pragma resource "*. dfm"
TForm6 * Form6;
//------------------------------------------------ ---------------------------< br />
__fastcall TForm6:: TForm6 (TComponent * Owner)
: TForm (Owner)
(
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm6:: Button1Click (TObject * Sender)
(
DM1-> Table1-> Active = false;
DM1-> Query1-> Active = false;
if (Edit1-> Text == "")
Edit1-> Text = "ITF.db";
TFileStream * Old = new TFileStream ( "baza1.db", fmOpenRead);
TFileStream * New = new TFileStream (Edit1-> Text, fmCreate);
New-> CopyFrom (Old, Old-> Size);
delete Old; delete New;
DM1-> Table1-> TableName = Edit1-> Text;
DM1-> Query1-> Active = true;
DM1-> Table1-> Active = true;
)
//------------------------------------------------ ---------------------------< br />
filter.cpp:
//------------------------------------------------ ---------------------------< br />
# include
# pragma hdrstop
# include "filter.h"
# include "Datam.h"
# include "kur1.h"
//------------------------------------------------ ---------------------------< br />
# pragma resource "*. dfm"
TForm5 * Form5;
//------------------------------------------------ ---------------------------< br />
__fastcall TForm5:: TForm5 (TComponent * Owner)
: TForm (Owner)
(
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm5:: Button3Click (TObject * Sender)
(
AnsiString filter;
filter = Edit1-> Text;
if (ComboBox1-> Text! = ""){< br />
if (Edit1-> Text! = "") (
if (ComboBox1-> Text == "L.L. +."){< br />
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Where A =" "+ filter +""");< br />
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "Lр'єи № ЄхЄ") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Where W =" "+ filter +""");< br />
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "TяхЎшры № еюеЄ №") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Where Q =" "+ filter +""");< br />
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "+ Еєяяр") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Where S =" "+ filter +""");< br />
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "Tе. + рии") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Where Z> =" + filter);
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}}< br />
else
(
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}}< br />
else (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
DM1-> Table1-> Refresh ();}< br />
//------------------------------------------------ ---------------------------< br />
findcust.cpp:
# include
# pragma hdrstop
# include "FindCust.h"
# include "Datam.h"
//------------------------------------------------ ---------------------------< br />
# pragma resource "*. dfm"
TfmFindCust * fmFindCust;
char field [2] = ( 'A', 'Z');
char w1;
//------------------------------------------------ ---------------------------< br />
__fastcall TfmFindCust:: TfmFindCust (TComponent * Owner)
: TForm (Owner)
(
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TfmFindCust:: ComboBox1Change (TObject * Sender)
(
if (ComboBox1-> Text == "L.L. +.")< br />
w1 = field [0];
else if (ComboBox1-> Text == "Tе. + рии")
(w1 = field [1];
//Edit1-> Text = "";
)
else
ComboBox1-> Text = "L.L. +.";< br />
w1 = field [0];
)
//------------------------------------------------ ---------------------< br />
void __fastcall TfmFindCust:: Edit1Change (TObject * Sender)
(
bool Success;
Set flags;
flags Table1-> Locate (w1, Edit1-> Text, flags);
DM1-> Table1-> Refresh ();
)
//------------------------------------------------ ---------------------------< br />
Report.cpp:
//------------------------------------------------ ---------------------< br />
# include
# pragma hdrstop
# include "Report.h"
# include "Datam.h"
# include "kur1.h"
//------------------------------------------------ ---------------------< br />
# pragma resource "*. dfm"
TQRListForm * QRListForm;
//------------------------------------------------ ---------------------< br />
//QuickReport simple list
//- Connect a datasource to the QuickReport component
//- Put QRDBText components on the Detail band
//------------------------------------------------ ---------------------< br />
__fastcall TQRListForm:: TQRListForm (TComponent * AOwner)
: TForm (AOwner)
(
)
//------------------------------------------------ ---------------------< br />
void __fastcall TQRListForm:: QRGroup1NeedData (AnsiString & Value)
(
//QuickReport-> NewPage ();
)
//------------------------------------------------ ---------------------------< br />
RichAbt.cpp:
//------------------------------------------------ ----------------------------< br />
//Borland C + + Builder
//Copyright (c) 1987, 1997 Borland International Inc. All Rights Reserved.
//------------------------------------------------ ----------------------------< br />
//------------------------------------------------ ---------------------< br />
# include
# pragma hdrstop
# include "RichAbt.h"
//------------------------------------------------ ----------------------------< br />
# pragma resource "*. dfm"
TForm2 * Form2;
//------------------------------------------------ ----------------------------< br />
__fastcall TForm2:: TForm2 (TComponent * Owner)
: TForm (Owner)
(
)
//------------------------------------------------ ----------------------------< br />
Sort.cpp:
//------------------------------------------------ ---------------------------< br />
# include
# pragma hdrstop
# include "Sort.h"
# include "Datam.h"
//------------------------------------------------ ---------------------------< br />
# pragma resource "*. dfm"
TForm4 * Form4;
//------------------------------------------------ ---------------------------< br />
__fastcall TForm4:: TForm4 (TComponent * Owner)
: TForm (Owner)
(
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm4:: ComboBox1Change (TObject * Sender)
(
if (ComboBox1-> Text == "L.L. +."){< br />
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Order by A asc");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "Lр'єи № ЄхЄ") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Order by W asc");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "TяхЎшры № еюеЄ №") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Order by Q asc");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "+ Еєяяр") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Order by S asc");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
else if (ComboBox1-> Text == "Lр'єи № ЄхЄ") (
DM1-> Query1-> SQL-> Clear ();
DM1-> Query1-> SQL-> Append ( "Select * From baza Order by Z asc");
DM1-> Query1-> Open ();
DM1-> Table1-> Open ();}< br />
DM1-> Table1-> Refresh ();
)
//------------------------------------------------ ---------------------------< br />
Unit1.cpp:
//------------------------------------------------ ---------------------------< br />
# include
# pragma hdrstop
# include "Unit1.h"
# include "Datam.h"
//------------------------------------------------ ---------------------------< br />
# pragma link "Grids"
# pragma resource "*. dfm"
TForm3 * Form3;
char predmet1 [9] = ( 'H', 'N', 'U', 'J', 'M', 'I', 'K', '1 ',' O ');
char predmet2 [9] = ( 'E', 'D', 'C', 'R', 'F', 'V', 'T', 'G', 'B');
double ozenka1 [12];
int i = 0;
double r;
//------------------------------------------------ ---------------------------< br />
__fastcall TForm3:: TForm3 (TComponent * Owner)
: TForm (Owner)
(
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm3:: FormCreate (TObject * Sender)
(
/ /-юсрти хь еютє | чряше № т срчє
DM1-> Table1-> Append ();
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm3:: Button1Click (TObject * Sender)
(
if (DM1-> Table1-> State == dsInsert | | DM1-> Table1-> State == dsEdit)
DM1-> Table1-> Post ();
DM1-> Table1-> Append ();
for (i = 0; i
predmet1 [i] = 0;)
i = 0;
Button5-> Enabled = true;
Button2-> Enabled = true;
DBEdit8-> DataField = 'x';
DBEdit5-> DataField = 'y';
DBEdit5-> ReadOnly = false;
DBEdit8-> ReadOnly = false;
DBEdit1-> ReadOnly = false;
DBEdit2-> ReadOnly = false;
DBEdit4-> ReadOnly = false;
DBEdit6-> ReadOnly = false;
DBEdit4-> Visible = false;
Label8-> Visible = false;
DM1-> Table1-> Refresh ();
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm3:: Button6Click (TObject * Sender)
(
if (! DM1-> Table1-> Bof)
DM1-> Table1-> Prior ();
i = 10;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm3:: Button4Click (TObject * Sender)
(
if (! DM1-> Table1-> Eof)
DM1-> Table1-> Next ();
i = 10;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm3:: Button2Click (TObject * Sender)
(
DM1-> Table1-> Delete ();
DM1-> Table1-> Refresh ();
if (DM1-> Table1-> Eof & & DM1-> Table1-> Bof)
Button2-> Enabled = false;
DBEdit4-> Visible = false;
Label8-> Visible = false;
)
//------------------------------------------------ ---------------------------< br />
void __fastcall TForm3:: Button5Click (TObject * Sender)
(
if (i
(
int Size = DBEdit8-> GetTextLen ();
char * name = new char [+ + Size];
DBEdit8-> GetTextBuf (name, Size);
DBEdit8-> Text = name;
r = atoi (name);
ozenka1 [i] = r;
delete name;
r = 0;
DBEdit5-> DataField = predmet1 [i];
DBEdit8-> DataField = predmet2 [i];
i + +;
Button3-> Enabled = true;
)
else (if (i == 9) (
int Size = DBEdit8-> GetTextLen ();
char * name = new char [+ + Size]; <