трусики женские украина

На головну

 Автоматизація розрахунку навантаження та викладачів ВНЗ - Економіко-математичне моделювання

Курсова робота

З дисципліни Інформатика та програмування

Автоматизація розрахунку навантаження та викладачів ВУЗу

програмування база даних додаток

Введення

Метою даної курсової роботи є розробка прикладної програми в середовищі Borland C ++ Builder 6.0 для реалізації функції автоматизації розрахунку і викладачів ВНЗ. Для досягнення мети необхідно створення гнучкого інтерфейсу, а також здійснення таких завдань:

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

В якості середовища розробки в цій роботі використана візуальне середовище Borland C ++ Builder. Даний вибір обумовлений такими факторами:

Borland C ++ Builder є середовищем швидкої розробки додатків. В На сьогоднішній день С ++ є одним з найпоширеніших мов програмування. Його перевагами є гнучкість, переносимість, універсальність. На цій мові написані найпоширеніші на сьогоднішній день операційні системи, такі як Windows і Linux. Мова С ++ може бути використаний для вирішення практично будь-яких завдань.

Мова С ++ не вимагає обов'язкового застосування об'єктів в програмах Це дозволяє модернізувати раніше на писані і створювати нові програми, користуючись практично синтаксисом С і виконуючи лише більш суворі вимоги С ++ до типів: наявність на початку програми прототипів всіх функцій, визначених користувачів явного приведення типів для покажчиків на різні типи і деяких інших. Архітектура сучасних операційних систем стає все більш і більш об'єктно-орієнтованої. При роботі в таких системах не обійтися без розуміння використання таких основоположних понять об'єктно-орієнтованого програмування, як об'єкти, інкапсуляція і поліморфізм. основі систем швидкої розробки (RAD-систем, Rapid Application Development - середовище швидкої paзpa6oткі додатків) лежить технологія візуального проектування і подієвого програмування, суть якої полягає в тому, що середовище розробки бере на себе більшу частину роботи по генерації коду програми, залишаючи програмісту роботу по конструювання діалогових вікон і написанню функцій обробки подій. Продуктивність програміста при використанні RAD систем істотно збільшується. Система об'єктно-орієнтованого програмування Borland C ++ Builder, призначена для операційних систем Windows. Інтегроване середовище C ++ Builder забезпечує швидкість візуальної розробки, продуктивність повторно використовуваних компонентів у поєднанні з міццю мовних засобів C ++, удосконаленими інструментами і різномасштабними засобами доступу до баз даних.

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

С ++ Builder може бути використаний скрізь, де потрібно доповнити існуючі додатки розширеним стандартом мови C ++, підвищити швидкодію і додати призначеному для користувача інтерфейсу якості професійного рівня.

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

Конструювання за способом "drag-and-drop" дозволяє створювати додаток простим перетягуванням захоплених мишею візуальних компонентів з Палітри на форму додатку. Інспектор об'єктів надає можливість оперувати з властивостями і подіями компонентів, автоматично створюючи заготовки функцій обробки подій, які наповнюються кодом і редагуються в процесі розробки.

Властивості, методи і події - це саме ті елементи мови, які забезпечують швидку розробку додатків в рамках об'єктно-орієнтованого програмування. «Властивості» дозволяють легко встановлювати різноманітні характеристики об'єктів. «Методи» виробляють певні, іноді досить складні, операції над об'єктом. «Події» пов'язують впливу користувача на об'єкти з кодами реакції на ці впливи. Події можуть виникати при таких специфічних змінах стану об'єктів як оновлення даних в інтерфейсних елементах доступу до баз даних. Працюючи спільно, властивості, методи і події утворюють середовище RAD (Rapid Application Development) швидкого і інтуїтивного програмування надійних додатків для Windows.

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

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

Вихідні тексти Бібліотеки візуальних компонентів полегшують розробку нових компонентів на базі готових прикладів.

Отрута інструменти API можуть бути безпосередньо інтегровані в візуальне середовище системи. Ви зможете підключити звичний текстовий редактор або створити власного майстра для автоматизації виконання повторюваних процедур.

Розширена математична бібліотека містить додаткові уніфіковані функції статистичних і фінансових обчислень.

Інтерфейс Borland C ++ Builder.

До складу інтерфейсу С ++ Builder входять:

- Палітра компонент містить більше 100 повторно використовуваних компонентів, пропонованих для побудови додатків.

- Редактор форм призначений для створення інтерфейсу програми з користувачем.

- Редактор коду призначений для написання тексту програми, зокрема, функцій обробки подій.

- Інспектор об'єктів дозволяє візуально встановлювати властивості об'єктів без необхідності рутинного програмування і містить події, які можна пов'язувати з кодами реакції об'єктів на їх виникнення.

- Сховище об'єктів містить такі об'єкти, як форми і модулі даних, які розділяються багатьма додатками з метою зменшення тимчасових витрат при розробці.

C ++ Builder реалізує візуальну методику побудови додатків за допомогою вибору з Палітри компонентів потрібних керуючих елементів. З кожним компонентом (наприклад, кнопкою) пов'язані властивості, які міняють її вигляд і поведінку. Будь-який компонент може викликати серію подій, які визначають його реакцію на різні дії [1].

1.Основні підходи до розробки програмних засобів

 У розробленому додатку інтерфейс користувача організований за допомогою компонентів меню, компонентів роботи з базами даних, а також за допомогою механізму обміну, здійснюваного за допомогою буфера обміну. Візуальна розробка додатків баз даних.

Розробка систем управління базами даних (СКБД) раніше завжди була дуже трудомістким і повільним процесом, обтяженим необхідністю враховувати масу специфічних деталей підсистем обслуговування різних баз даних на низькому рівні. C ++ Builder бере на себе виконання цих рутинних операцій дозволяючи зосередитися на вирішенні основного завдання.

Всі додатки СУБД, створювані в середовищі C ++ Builder, є клієнтами в архітектурі програмного взаємодії клієнт / сервер. Клієнт видає запити до сервера бази даних на отримання або передачу інформації. Сервер обробляє запити від безлічі клієнтів одночасно, координуючи доступ до даних і їх оновлення.

Всі додатки СУБД, створювані в середовищі C ++ Builder, засновані на компонентах користувача інтерфейсу з деякою базою даних, які надають дивно легкі у використанні засоби розробки спеціальних додатків. Левова частка часу процесу розробки йде на візуальну установку властивостей вибраних компонент. Вдало спроектоване додаток завжди забезпечує простоту перегляду і редагування даних користувачем, незалежно від складності структури використовуваної моделі даних. Дана глава з очевидністю покаже, що форми додатків СУБД для типово складної системи в архітектурі взаємодії клієнт / сервер дійсно можуть бути створені в інтегрованому середовищі C ++ Builder вельми швидко і з малими зусиллями.

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

Організація доступу до баз даних

C ++ Builder організовує доступ додатку до даних таким чином, щоб повністю усунути розробника від специфіки обслуговування конкретної бази даних.

Механізм BDE

Ключовий механізм BDE (Borland Database Engine), що забезпечує роботу візуальних компонент баз даних, діє як інтерфейс між вашим додатком і самою базою даних. BDE реалізований у вигляді набору системних DLL файлів. Взаємодія компонентних об'єктів з BDE неможливо специфицирует конкретну базу даних і не залежить від реалізації обміну інформацією на нижньому рівні ієрархії. Саме BDE звертається у свою чергу до драйверів, специфічним для бази даних вказаного типу, повертаючи вашому застосуванню запитані фактичні дані. BDE грає роль, аналогічну контролеру драйверів ODBC (Open Database Connectivity) виробництва фірми Microsoft, ізолюючи додатки від нижнього рівня взаємодії з базою даних і збільшуючи загальну продуктивність зв'язку за рахунок використання кеш-пам'яті. Використовуючи BDE, ви отримуєте доступ до всіх локальних стандартним баз даних вашого комп'ютера, до джерел даних ODBC і до SQL серверів баз даних в архітектурі мережевого зв'язку клієнт / сервер.

Уніфікована технологія BDE застосовується у всіх продуктах виробництва корпорації Borland: C ++ Builder, Borland C ++, Delphi, IntraBuilder і JBuilder. Щоб отримати доступ до вмісту бази даних, додатку необхідно знати тільки ідентифікатор її псевдоніма (alias).

Рис. 1 зображує ієрархічну структуру взаємодії вашого застосування з базами даних.

Рис. 1. Структура взаємодії додатків з базами даних

При додаванні компонент баз даних до форми вашого застосування з'єднання з BDE відбувається автоматично - ніякого програмування не потрібно. Візуальний процес з'єднання повністю знаходиться під вашим контролем. Під час виконання програми BDE робить необхідні запити і отримує дані, замовлені властивостями кожної використовуваної компоненти. [6]

Кроки створення таблиці БД за допомогою DataBase Desktop представлені на ріс.2,3,4,5.

Рис2 Зовнішній вигляд вікна Database Desktop

Рис 3Подключеніе до БД

Ріс4Окно вибору типу підключення

Рис 5Созданіе таблиці БД

2.Характерістіка візуальних компонентів середовища розробки Builder 6.0, використовуваних в додатку

2.1 Компоненти головне і спливаюче меню (Main Menu, Popur Menu (Standart))

Компоненти оформлення додатків:

MainMenu створює на формі головне меню у вигляді рядка з спадаючими списками.

Вміст пункту меню визначається властивістю -Items [i] -задаёт значення пункту меню з номером i.

Значення пункту меню можна вводити програмно: MainMenu-> Items-> Items [0] = "".

У розробленому додатку дані компоненти забезпечують зручний інтерфейс між додатком і користувачем, дозволяють користувачеві управляти додатком (використані на формах: «Управління додатком» і «Автоматизація розрахунку навантаження та викладачів ВНЗ»).

2.2 Компоненти, що реалізують роботу з БДКомпонент TDataSource

Компонент DataSource діє як посередник між компонентами TDataSet (TTable, TQuery, TStoredProc) і компонентами Data Controls - елементами управління, що забезпечують подання даних на формі. Компоненти TDataSet управляють зв'язками з бібліотекою Borland Database Engine (BDE), а компонент DataSource управляє зв'язками з даними в компонентах Data Controls.

У типових додатках БД компонент DataSource, як правило, пов'язаний з одним компоненом TDataSet (TTable або TQuery) і з одним або більше компонентами Data Controls (такими, як DBGrid, DBEdit та ін.). Зв'язок цього компонента з компонентами TDataSet і DataControls здійснюється з використанням наступних властивостей і подій:

· Cвойства DataSet компонента DataSource ідентифікує ім'я компонента TDataSet. Можна привласнити значення властивості DataSet на етапі виконання або за допомогою інспектора об'єктів на етапі проектування.

· Cвойства Enabled компонента DataSource активізує або зупиняє взаємозв'язок між компонентами TDataSource і Data Controls. Якщо значення властивості Enabled одно true, то компоненти Data Controls, пов'язані з TDataSource, сприймають зміни набору даних. Використання властивості Enabled дозволяє тимчасово роз'єднувати візуальні компоненти Data Controls і TDataSource, наприклад, для того, щоб у разі пошуку в таблиці з великою кількістю записів не відображати на екрані гортання всієї табліци.Компонент TTable

Найбільш простим способом звернення до таблиць баз даних є використання компонента TTable, що надає доступ до однієї таблиці. Для цієї мети найбільш часто використовуються наступні властивості:

· Active - вказує, відкрита (true) чи ні (false) дана таблиця.

· DatabaseName - ім'я каталогу, що містить шукану таблицю, або псевдонім (alias) віддаленої БД (псевдоніми встановлюються за допомогою утиліти конфігурації BDE, опис якої присутній у багатьох джерелах, присвячених продуктам Borland, або за допомогою SQL Explorer, що викликається за допомогою пункту меню Database / Explore). Ця властивість може бути змінено тільки у випадку, якщо таблиця закрита (її властивість Active одно false).

· TableName - ім'я таблиці.

· Exclusive - якщо це властивість приймає значення true, то ніякий інший користувач не може відкрити таблицю, якщо вона відкрита даним додатком. Якщо це властивість одно false (значення за замовчуванням), то інші користувачі можуть відкривати цю таблицю.

· IndexName - ідентифікує вторинний індекс для таблиці. Ця властивість не можна змінити, поки таблиця відкрита.

· MasterFields - визначає ім'я поля для створення зв'язку з іншою таблицею.

· MasterSource - ім'я компонента TDataSource, за допомогою якого TTable буде отримувати дані з пов'язаної таблиці.

Найбільш часто при роботі з компонентом TTable використовуються такі методи:

· Open і Close встановлюють значення властивості Active рівними True і False відповідно.

· Refresh дозволяє заново вважати набір даних з БД.

· First, Last, Next, Prior переміщують покажчик поточного запису на першу, останню, наступну і попередню запису відповідно.

· Insert, Edit, Delete, Append - переводять таблицю в режими вставки запису, редагування, видалення, додавання запису відповідно.

· Post - здійснює фізичне збереження змінених даних.

· Cancel - скасовує внесені зміни, не збережені фізично.

· FieldByName - надає можливість звернення до даних в полях по імені поля.В даному додаток компоненти, що реалізують роботу з БД використані з метою забезпечення простоти перегляду і редагування даних користувачем, незалежно від складності структури використовуваної моделі даних. [1]

3.Программная реалізація додатки

3.1 Дерево форм додатки

Рис.1

3.2.1Форма «Автоматизація розрахунку навантаження та викладачів ВНЗ» є головною формою розробленого додатка, виконує такі функції:

1.Можливість вибору режиму роботи з додатком;

1.1Переключеніе на режим перегляду (файли бази даних недоступні для перегляду);

1.2Переключеніе на режим редагування файлів баз даних (файли можна переглядати і редагувати);

1.3Остановка роботи програми, вихід з програми;

1.4Поддержівается режим швидкого виклику через заздалегідь фіксовані комбінації клавіш;

2.Защіта інформації (функція підтримується тільки в режимі редагування);

2.1Обеспечен введення коду в з'явилося вікно введення;

2.2Обеспечен введення графічного коду;

3Возможность керувати кольором форми за допомогою пунктів меню;

4.Возможность використовувати «гарячих клавіш»

5.Возможность використовувати спливаючі підказки для комфорту роботи користувача.

Її зовнішній вигляд представлений на ріс6

Ріс6 Зовнішній вигляд форми «Автоматизація розрахунку навантаження та викладачів ВНЗ»

Лістинг модуля форми наведений у додатку А

3.2.2Форма «Управління додатком» викликається автоматично в процесі роботи програми за умови правильно введеного коду (у разі вибору режиму редагування) або при виборі режиму перегляду.

Форма слугує для реалізації наступних функцій:

1.Можливість модифікації бази даних;

2.Функция, що використовує обчислюване поле;

3.Функції фільтрації даних БД;

4.Функция пошуку відомостей БД;

5.Возможность перемикання на інші форми програми.

Її зовнішній вигляд представлений на ріс7

Ріс7 Зовнішній вигляд форми «Форма управління додатком»

Лістинг модуля форми наведений у додатку В

3.2.3Форма «Текстовий редактор» організовує такі функції:

1.Созданіе нового документа;

2Откритіе файлу;

3Сохраненіе файлу;

4Сохраненіе файлу під вказаним ім'ям;

2.Використання буфера обміну:

2.1Функція «вирізати»;

2.2Функція «копіювати»;

2.3Функція «вставити»;

3.Визов форми «Про програму» через пункт меню «Довідка»;

Її зовнішній вигляд представлений на малюнку

Ріс8 Зовнішній вигляд форми «Текстовий редактор»

Лістинг модуля форми наведений у додатку А

3.2.4Форма «Довідка» містить відомості про програму, її виклик инициализируется через пункт меню форми «Текстовий редактор»;

Її зовнішній вигляд представлений на ріс9

Ріс9 Зовнішній вигляд форми «Довідка»

Лістинг модуля форми наведений у додатку А

3.2.5Форма «Створення розкладу» містить три вкладки. Вкладка «Розклад для груп» організовує такі функції:

1.Можливість використання механізму бази даних з метою створення розкладу для груп;

2.Поддержівает функцію фільтрації даних таблиці;

Зовнішній вигляд першої вкладки представлений на ріс10

Ріс10 Зовнішній вигляд вкладки «Розклад для груп»

3.2.5.1.Вкладка «Розклад для викладачів»:

1.Можливість вибору викладача зі списку викладачів з метою створення розкладу.

2.Автоматіческое виклик форми, що містить розклад для викладача на основі даних таблиці з вкладки «Розклад для груп» Її зовнішній вигляд представлений на ріс11

Ріс11 Зовнішній вигляд вкладки «Розклад для викладачів»

3.2.5.2.Вкладка «Довідка» служить для реалізації наступних функцій:

1.Вибор розділу довідки;

2.Загрузка файлу даних, що містить текст довідки;

3.6Форма «Розклад» служить для відображення розкладу для викладачів. Форма створюється автоматично при натисканні на кнопку в процесі роботи програми. Містить таблицю, в яку автоматично записуються дані. Дані, що містяться в таблиці знищуються при закритті форми.

Зовнішній вигляд вкладки представлений на ріс12

Ріс12 Зовнішній вигляд вкладки «Довідка»

Лістинг модуля форми «Створення розкладу» наведено в додатку А

4.Тестірованіе додатки

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

4.1 Тест 1

При тестуванні програми на можливість зміни зовнішнього вигляду вікна отримані наступні результати (рис. 13)

Ріс.13Вибор кольору форми програми з переліку можливих кольорів

Зміна кольору форми відбувається в момент натискання кнопки пункту меню «Зафарбування форми». (Ріс14,15)

Ріс.14Результат зміни цвета1

Рис 15Результат зміни цвета2

4.2Тест2

Протестуємо додаток на можливість вибору режиму роботи з базами даних.

Ріс16 Вибір режиму роботи

Після вибору режиму необхідно натиснути на кнопку «Працювати!».

У режимі перегляду відомості, що містяться в базі даних залишаються недоступними для користувача. (Ріс16,17)

Рис 17Работа в режимі перегляду

При вибраному режимі редагування натискання кнопки «Працювати!» Дасть наступний результат:

На формі з'явиться ще одне вікно введення, що служить для введення пароля, а також ще одна кнопка «Підтвердіть правильність пароля».

Крім того, висвітиться повідомлення наступного виду (рис 18)

Ріс18 Повідомлення про необхідність введення пароля

Ріс19 Організація захисту інформації в процесі роботи в розробленому додатку.

При правильному введенні пароля натискання на кнопку «підтвердіть правильність пароля спровокує наступну реакцію додатки (ріс19)

Рис 20Реакція на правильне введення пароля

На формі висвітиться нове повідомлення з іншим запитом (рис

Ріс.20Запрос на введення графічного коду

У тому випадку, якщо у вікно введення пароля на момент натискання кнопки знаходиться повідомлення, що не є паролем, програма сповістить про це користувача за допомогою повідомлення наступного виду (ріс21)

Ріс21 Повідомлення про помилку при введенні пароля

У випадку помилки потрібно знову ввести пароль, інакше програма не допустить роботи з ним.

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

Код розпізнається за параметрами: колір лінії (ріс22), тип лінії (ріс23), колір заливки компонента Image, який в даному додатку призначений для малювання.

Ріс22 вибір кольору лінії

Рис 23вибор типу лінії

Рис 24 Введення невірного графічного коду

При невідповідності обраних параметрів умовам (рис, заданих програмно з'являється повідомлення (ріс25)

Ріс25 Повідомлення про помилку

При необхідності знову ввести графічний код можна скористатися кнопкою «Очистити», що відповідає за очищення компонента Image (рис 26)

Рис 26Очістка компонента Image

У разі правильного завдання графічного коду, натискання на кнопку «Ласкаво просимо!» Ініціює появу іншої форми (ріс27)

Рис 27Реакція додатки на введення вірного графічного коду

4.3Тест3

Протестуємо форму, що з'явилася на можливість модифікації баз даних, а також на реалізацію функції захисту інформації, що міститься в таблицях бази даних.

Для цього спробуємо ввести будь-які відомості в одну з комірок таблиці, потім перемістимося на іншу клітинку даної таблиці (ріс28)

Ріс28 Спроба модифікації бази даних

Якщо виконати всі перераховані вище дії, з'явиться повідомлення (ріс29)

Ріс29 Попередження небажаної модифікації БД

Далі при натисканні на кнопку OK модифікована осередок зберігає свій стан, в зворотному випадку дані таблиці набувають первинний вигляд.

4.4 Тест4

Протестуємо розроблене додаток на можливість створення обчислюваних полів в рамках використовуваних баз даних.

В даному випадку обчислюваним поле буде поле «Вік», яке розраховується на основі змісту поля «Рік народження» (ріс30)

Рис 30 Використання обчислюваного поля

4.5Тест5

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

Виберемо пункт меню «Пошук», на формі з'явиться панель пошуку (ріс31) У число параметрів пошуку включені поле, по якому необхідно здійснити пошук, і запис, який потрібно знайти.

Рис 31Остановка покажчика на рядку з знайденої записом

Для здійснення фільтрації виберемо пункт меню «Сортування» .ріс (32,33)

Ріс32 Режим фільтрації включений

Рис 33Режім фільтрації відключений

Для зручності по відношенню до GroupBox1, що містить компоненти фільтрації, можливе застосування функції «Приховати», спричиненої через Popur Menu правим клацанням миші по компоненту (ріс34,35)

Рис 34 Виклик функції «Приховати»

Рис 35Результат застосування функції «Приховати»

4.6Тест6

Протестуємо функцію перемикання між формами, реалізовану за допомогою однойменного пункту Головного меню форми управління додатком.

При виборі пункту «Створення файлу» отримаємо наступний результат (ріс36)

У разі вибору пункту «Перемикання режиму» з'явиться вікно головної форми (ріс37)

Ріс36 Відкриття форми «Текстовий редактор»

Рис 37 Перемикання на головну форму

4.7Тест7

Протестуємо функціональні можливості форми «Текстовий редактор».

Друга група кнопок на панелі інструментів відповідає за збереження та створення нових файлів (ріс38,39).

Рис 38 Відкриття файлу

Ріс39 Результат відкриття файлу

Можливе збереження вмісту вікна при натисканні на кнопку «Зберегти як» (ріс40)

Рис 40 Збереження файлу під обраним ім'ям

Друга група кнопок відповідає за редагування введеного тексту.

Кнопки підтримують функції відповідно «вирізати», «копіювати», вставити ». (Ріс41)

Ріс41 Внесення фрагмента тексту в буфер обміну

Остання кнопка організовує виклик форми, яка містить відомості про програму (рис 42)

Рис 42 Зовнішній вигляд вікна довідки

Найперша кнопка служить для закриття вікна редактора.

Паралельно може здійснюватися збереження даних, що містяться у вікні (ріс43)

Ріс43 Подія на натискання кнопки «Вихід»

4.8Тест8

Протестуємо форму «Створення розкладу» на можливість реалізації вкладених функцій. Вкладка «Розклад для груп» форми реалізує функції введення (рис 44) і фільтрації (ріс45) даних таблиці БД

Ріс44 Реалізація функції введення

Ріс45 Реалізація функції фільтрації даних

Вкладка «Розклад для викладачів» реалізує функцію

Вибору викладача із загального списку (ріс46,47,48), а також ініціює появу форми, що містить розклад для даного викладача (ріс.49,50)

Ріс46 список викладачів

Рис 47Осуществленіе вибору 1

Рис 48Осуществленіе вибору 2

Рис 49Распісаніе для викладача а

Рис 50Распісаніе для викладача б

При тестуванні вкладки «Довідка» отримані наступні результати (ріс51,52,53)

Ріс51 Реалізація функції «довідка» 1

Рис 52Реалізація функції «довідка» 2

Ріс53 Реалізація функції «довідка» 3

Висновок

В ході розробки програми була досягнута мета даної курсової роботи, а саме: реалізації функції автоматизації розрахунку і викладачів ВНЗ. Поставлені в цій роботі завдання були вирішені в ході тестування отриманого програми.

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

Список використаних джерел

1. "Робота з локальними базами даних в C ++ Builder 5", Аpхангельск.

2. "Введення в Borland C ++ Builder", Єлманова.

3.Джарод Холінгверт, Ден Баттерфілд, Боб Сворт, Джеймі Оллсоп C ++ Builder 5. Керівництво розробника.

4.Borland C ++ Builder 5. Енциклопедія програміста. Калверт Ч., Райсдорф К., "ДіаСофт" - 2001, 944 стор.

5.http: //www.codenet.ru/

6. "Мова C ++ Builder 5. Довідковий посібник", Архангельський А.

7. "C ++ Builder 5: 70 компонентів введення / виведення інф.", Аpхангельск А.

8. http://www.interface.ru

9. Borland C ++ Builder and MS SQL 2000 developer

Додаток А

Лістинг форми «Автоматизація розрахунку навантаження та викладачів ВНЗ.

#ifndef KurH

#define KurH

// ------------------------------------------------ ---------------------------

#include

#include

#include

#include

#include

#include

#include "CGRID.h"

#include "PERFGRAP.h"

#include

#include

#include

#include "Word_2K_SRVR.h"

#include

// ------------------------------------------------ ---------------------------

class TForm1: public TForm

{

__published: // IDE-managed Components

TMainMenu * MainMenu1;

TButton * Button1;

TMenuItem * N2;

TMenuItem * N4;

TMenuItem * N5;

TCColorGrid * CColorGrid1;

TPanel * Panel1;

TComboBox * ComboBox1;

TButton * Button2;

TEdit * Edit1;

TImage * Image1;

TColorBox * ColorBox1;

TLabel * Label1;

TMenuItem * N1;

TMenuItem * N3;

TMenuItem * N6;

TMenuItem * N7;

TButton * Button3;

TButton * Button4;

void __fastcall N5Click (TObject * Sender);

void __fastcall Button1Click (TObject * Sender);

void __fastcall N8Click (TObject * Sender);

void __fastcall N9Click (TObject * Sender);

void __fastcall N2Click (TObject * Sender);

void __fastcall Button2Click (TObject * Sender);

void __fastcall Image1MouseDown (TObject * Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall CColorGrid1Change (TObject * Sender);

void __fastcall N4Click (TObject * Sender);

void __fastcall N10Click (TObject * Sender);

void __fastcall N1Click (TObject * Sender);

void __fastcall FormCreate (TObject * Sender);

void __fastcall Button3Click (TObject * Sender);

void __fastcall N6Click (TObject * Sender);

void __fastcall N3Click (TObject * Sender);

void __fastcall Button4Click (TObject * Sender);

private:

int fbMouseDown; // User declarations

public: // User declarations

__fastcall TForm1 (TComponent * Owner);

};

// ------------------------------------------------ ---------------------------

extern PACKAGE TForm1 * Form1;

// ------------------------------------------------ ---------------------------

#endif

#include

#pragma hdrstop

#include "Kur.h"

#include "Unit4.h"

bool OK;

// ------------------------------------------------ ---------------------------

#pragma package (smart_init)

#pragma link "CGRID"

#pragma link "PERFGRAP"

#pragma link "Word_2K_SRVR"

#pragma resource "* .dfm"

TForm1 * Form1;

TForm4 * Form4;

// ------------------------------------------------ ---------------------------

__fastcall TForm1 :: TForm1 (TComponent * Owner)

: TForm (Owner)

{

fbMouseDown = 0;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N5Click (TObject * Sender)

{

Form1-> Close ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: Button1Click (TObject * Sender)

{

int i, j;

for (i = 0; iWidth; i ++)

{For (j = 0; jHeight; j ++)

Image1-> Canvas-> Pixels [i] [j] = clWhite;}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N8Click (TObject * Sender)

{

Image1-> Canvas-> Pen-> Style = psDot;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N9Click (TObject * Sender)

{

Image1-> Canvas-> Pen-> Style = psClear;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N2Click (TObject * Sender)

{

CColorGrid1-> Width = 90;

CColorGrid1-> Height = 90;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: Button2Click (TObject * Sender)

{If (ComboBox1-> ItemIndex == 0)

{

Form4 = new TForm4 (Application);

Form4-> Table1-> Active = false;

Form4-> Table2-> Active = false;

Form4-> Show ();

}

else

{Application-> MessageBox ("Захист конфіденційності інформації", "Введіть пароль", MB_OK);

Edit1-> Visible = true;

Button3-> Visible = true;}}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: Image1MouseDown (TObject * Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

Image1-> Canvas-> LineTo (X, Y);

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: CColorGrid1Change (TObject * Sender)

{

Image1-> Canvas-> Brush-> Color = CColorGrid1-> BackgroundColor;

Image1-> Canvas-> Rectangle (0,0,265,385);

Image1-> Canvas-> Pen-> Width = 1;

Image1-> Canvas-> Pen-> Color = CColorGrid1-> ForegroundColor;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N4Click (TObject * Sender)

{

Form1-> Color = ColorBox1-> Selected;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N10Click (TObject * Sender)

{

Image1-> Canvas-> Pen-> Style = psSolid;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N1Click (TObject * Sender)

{

Image1-> Canvas-> Pen-> Style = psDot;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: FormCreate (TObject * Sender)

{

Edit1-> Visible = false;

Button3-> Visible = false;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: Button3Click (TObject * Sender)

{

if (Edit1-> Text! = "пе-81")

Application-> MessageBox ("Пароль введений невірно", "Повідомлення про помилку", MB_OK);

else

{Application-> MessageBox ("Введіть графічний код", "Ласкаво просимо!", MB_OK);}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N6Click (TObject * Sender)

{

Image1-> Canvas-> Pen-> Style = psDash;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: N3Click (TObject * Sender)

{

Image1-> Canvas-> Pen-> Style = psDot;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: Button4Click (TObject * Sender)

{

if (Image1-> Canvas-> Pen-> Style == psDash)

{Form4 = new TForm4 (Application);

Form4-> Show ();}

else

Application-> MessageBox ("", "Спробуйте ще раз", MB_OK);

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm1 :: Image1Click (TObject * Sender)

{}

Лістинг форми «Форма управління додатком»

#include

#pragma hdrstop

#include "Unit4.h"

#include "Unit2.h"

#include "Kur.h"

#include "Unit3.h"

#include "uni.h"

#include "Unit7.h"

#include "Unit8.h"

#include "Unit5.h"

bool Success;

// ------------------------------------------------ ---------------------------

#pragma package (smart_init)

#pragma link "CGRID"

#pragma resource "* .dfm"

TForm4 * Form4;

TForm1 * Form1;

TForm3 * Form3;

// ------------------------------------------------ ---------------------------

__fastcall TForm4 :: TForm4 (TComponent * Owner)

: TForm (Owner)

{

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Button1Click (TObject * Sender)

{

GroupBox1-> Visible = true;

Edit2-> Visible = false;

GroupBox1-> Caption = "Enoiaiua aaiiua";

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N11Click (TObject * Sender)

{

Form4-> Close ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Table1BeforePost (TDataSet * DataSet)

{

if (MessageBox (0, "Au aaenoaeoaeuii oioeoa nio?aieou eciaiaiey?", "I?aaoi?a?aaiea i ia?aeaoaeuiie iiaeoeeaoee AA", MB_YESNO) == IDNO)

Table1-> Cancel ();

else

{Table1-> Post ();

Table1-> Append ();}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Table1CalcFields (TDataSet * DataSet)

{

Table1Voz-> Value = 2009-Table1God-> Value;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N7Click (TObject * Sender)

{Form1 = new TForm1 (Application);

Form1-> Show ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: O1Click (TObject * Sender)

{

Panel1-> Visible = 1;

ProgressBar1-> Visible = true;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Edit1Change (TObject * Sender)

{Int i;

Timer1-> Enabled = true;

ProgressBar1-> Visible = true;

TLocateOptions Options;

Success = Table1-> Locate (ComboBox1-> Text, Edit1-> Text, Options);

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Timer1Timer (TObject * Sender)

{

if (Edit1-> Text! = "" &&! Success)

Application-> MessageBox ("ia iaeaaii ie iaiie caiene", MB_OK);

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N6Click (TObject * Sender)

{

Form3 = new TForm3 (Application);

Form3-> Show ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Timer2Timer (TObject * Sender)

{If (Edit1-> Text! = "")

ProgressBar1-> StepIt ();

if (ProgressBar1-> Position == 80)

{Timer1-> Enabled = false;

ProgressBar1-> Visible = false;}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N18Click (TObject * Sender)

{

Form8 = new TForm8 (Application);

Form8-> Show ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: FormCreate (TObject * Sender)

{

GroupBox1-> Visible = false;

ProgressBar1-> Visible = false;

Table1-> FilterOptions >> foNoPartialCompare;

Table1-> FilterOptions <}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N19Click (TObject * Sender)

{

GroupBox1-> Visible = false;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N20Click (TObject * Sender)

{

Panel1-> Visible = false;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N8Click (TObject * Sender)

{

Form6 = new TForm6 (Application);

Form6-> Show ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N1Click (TObject * Sender)

{

GroupBox1-> Visible = true;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: CheckBox1Click (TObject * Sender)

{

if (! CheckBox1-> Checked)

Table1-> Filtered = false;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: Edit2Change (TObject * Sender)

{Float m;

String StrFiltr;

if (CheckBox1-> Checked)

{Table1-> Filtered = false;

Table1-> Refresh ();

StrFiltr = Edit2-> Text + "*";

if (ListBox1-> Items-> Strings [ListBox1-> ItemIndex] == "FIO")

{Table1-> Filter = "FIO = '" + StrFiltr + "'";}

else

{If (ListBox1-> Items-> Strings [ListBox1-> ItemIndex] == "God")

Table1-> Filter = "God = '" + FloatToStr (m) + "'";

else {if (ListBox1-> Items-> Strings [ListBox1-> ItemIndex] == "Pol")

Table1-> Filter = "Pol = '" + StrFiltr + "'";

else {if (ListBox1-> Items-> Strings [ListBox1-> ItemIndex] == "Spec")

Table1-> Filter = "Spec = '" + StrFiltr + "'";

else

Table1-> Filter = "Group = '" + StrFiltr + "'";}}}}

{

Table1-> Filtered = true;}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm4 :: N13Click (TObject * Sender)

{

GroupBox1-> Visible = false;

}

// ------------------------------------------------ ---------------------------

Лістинг форми «Про програму»

#include

#pragma hdrstop

#include "Unit3.h"

// ------------------------------------------------ ---------------------

#pragma resource "* .dfm"

TForm7 * Form7;

// ------------------------------------------------ ---------------------

__fastcall TForm7 :: TForm7 (TComponent * AOwner)

: TForm (AOwner)

{

}

// ------------------------------------------------ ---------------------

void __fastcall TForm7 :: OKButtonClick (TObject * Sender)

{

Form7-> Close ();

}

// ------------------------------------------------ ---------------------------

Лістинг форми «Текстовий редактор»

#include

#pragma hdrstop

#include "uni.h"

#include "Unit3.h"

// ------------------------------------------------ ---------------------

#pragma resource "* .dfm"

TForm3 * Form3;

// ------------------------------------------------ ---------------------

__fastcall TForm3 :: TForm3 (TComponent * AOwner)

: TForm (AOwner)

{

}

// ------------------------------------------------ ---------------------

void __fastcall TForm3 :: SpeedButton1Click (TObject * Sender)

{

if (OpenDialog1-> Execute ())

{Memo1-> Lines-> LoadFromFile (OpenDialog1-> FileName);

StatusBar1-> Panels-> Items [0] -> Text = OpenDialog1-> FileName;

}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton3Click (TObject * Sender)

{

if (Memo1-> Lines-> Count> 0)

{

if (MessageBox (0, "Nio?aieou niaa??eiia ieia ?aaaeoe?iaaiey?", "Iiaoaa?aeoa nio?aiaiea", MB_YESNO) == IDYES)

{

SpeedButton4Click (Sender);

}

}

Memo1-> Clear ();

StatusBar1-> Panels-> Items [0] -> Text = "Aac eiaie";

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton5Click (TObject * Sender)

{

if (StatusBar1-> Panels-> Items [0] -> Text == "Aac eiaie")

SpeedButton4Click (Sender);

else

{Memo1-> Lines-> SaveToFile (StatusBar1-> Panels-> Items [0] -> Text); }

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton2Click (TObject * Sender)

{

SpeedButton3Click (Sender);

Close ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton4Click (TObject * Sender)

{

if (SaveDialog1-> Execute ())

Memo1-> Lines-> SaveToFile (SaveDialog1-> FileName);

StatusBar1-> Panels-> Items [0] -> Text = SaveDialog1-> FileName;

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton6Click (TObject * Sender)

{

Memo1-> CutToClipboard ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton7Click (TObject * Sender)

{

Memo1-> CopyToClipboard ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton8Click (TObject * Sender)

{

Memo1-> PasteFromClipboard ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm3 :: SpeedButton9Click (TObject * Sender)

{

Form7 = new TForm7 (Application);

Form7-> Show ();

}

// ------------------------------------------------ ---------------------------

Лістинг форми «Створення розкладу»

#include

#pragma hdrstop

#include "Unit7.h"

// ------------------------------------------------ ---------------------

#pragma resource "* .dfm"

TForm6 * Form6;

// ------------------------------------------------ ---------------------

__fastcall TForm6 :: TForm6 (TComponent * AOwner)

: TForm (AOwner)

{

}

// ------------------------------------------------ ---------------------

void __fastcall TForm6 :: CancelBtnClick (TObject * Sender)

{

Table1-> Cancel ();

Form6-> Close ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm6 :: OKBtnClick (TObject * Sender)

{

Table1-> Post ();

Form6-> Close ();

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm6 :: Button1Click (TObject * Sender)

{

Table1-> Bof;

while (Table1-> Eof)

{Table1-> Next ();

}

TForm * GridForm = new TForm ((TComponent *) NULL);

GridForm-> Caption = "Розклад";

GridForm-> Width = 300;

GridForm-> Height = 300;

TStringGrid * Grid = new TStringGrid (GridForm);

Grid-> ColCount = Table1-> FieldCount;

Grid-> RowCount = Table1-> FieldCount;

Grid-> Parent = GridForm;

Grid-> Align = alClient;

GridForm-> Show ();

Grid-> FixedCols = 1;

Grid-> FixedRows = 1;

Grid-> Cells [0] [1] = "8.20";

Grid-> Cells [0] [2] = "10.00";

Grid-> Cells [0] [3] = "11.45";

Grid-> Cells [0] [4] = "13.20";

Grid-> Cells [0] [5] = "15.00";

Grid-> Cells [0] [6] = "16.45";

Grid-> Cells [0] [7] = "18.00";

Grid-> Cells [0] [8] = "19.45";

Grid-> Cells [1] [0] = "Понеділок";

Grid-> Cells [2] [0] = "Вівторок";

Grid-> Cells [3] [0] = "Середовище";

Grid-> Cells [4] [0] = "Четвер";

Grid-> Cells [5] [0] = "П'ятниця";

Grid-> Show ();

GridForm-> Handle;

String StrFiltr;

Table1-> Filtered = false;

Table1-> Refresh ();

StrFiltr = ListBox1-> Items-> Strings [ListBox1-> ItemIndex] + "*";

Table1-> Filter = "FIO1 = '" + StrFiltr + "'";

Table1-> Filtered = true;

int i;

while (! Table1-> Eof)

{For (i = 1; iFieldCount; i ++)

{If (Table1Time-> Value == Grid-> Cells [0] [i])

Grid-> Cells [1] [i] = Table1Group-> Value + Table1N1-> Value;}

Table1-> Next ();

}

Table1-> Filtered = false;

Table1-> Bof;

Table1-> Filter = "FIO2 = '" + StrFiltr + "'";

Table1-> Filtered = true;

while (! Table1-> Eof)

{For (i = 1; iFieldCount; i ++)

{If (Table1Time-> Value == Grid-> Cells [0] [i])

Grid-> Cells [2] [i] = Table1Group-> Value + Table1N2-> Value;}

Table1-> Next ();}

Table1-> Filtered = false;

Table1-> Bof;

Table1-> Filter = "FIO3 = '" + StrFiltr + "'";

Table1-> Filtered = true;

while (! Table1-> Eof)

{For (i = 1; iFieldCount; i ++)

{If (Table1Time-> Value == Grid-> Cells [0] [i])

Grid-> Cells [3] [i] = Table1Group-> Value + Table1N3-> Value;}

Table1-> Next ();}

Table1-> Filtered = false;

Table1-> Bof;

Table1-> Filter = "FIO4 = '" + StrFiltr + "'";

Table1-> Filtered = true;

while (! Table1-> Eof)

{For (i = 1; iFieldCount; i ++)

{If (Table1Time-> Value == Grid-> Cells [0] [i])

Grid-> Cells [4] [i] = Table1Group-> Value + Table1N4-> Value;}

Table1-> Next ();}

Table1-> Filtered = false;

Table1-> Bof;

Table1-> Filter = "FIO5 = '" + StrFiltr + "'";

Table1-> Filtered = true;

while (! Table1-> Eof)

{For (i = 1; iFieldCount; i ++)

{If (Table1Time-> Value == Grid-> Cells [5] [i])

Grid-> Cells [5] [i] = Table1Group-> Value + Table1N5-> Value;}

Table1-> Next ();}

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm6 :: Button2Click (TObject * Sender)

{

RichEdit1-> Lines-> LoadFromFile (ListBox2-> Items-> Strings [ListBox2-> ItemIndex] + ". Txt");

}

// ------------------------------------------------ ---------------------------

void __fastcall TForm6 :: Edit1Change (TObject * Sender)

{

String StrFiltr;

Table1-> Filtered = false;

Table1-> Refresh ();

StrFiltr = Edit1-> Text + "*";

Table1-> Filter = "Group = '" + StrFiltr + "'";

if (CheckBox1-> Checked)

Table1-> Filtered = true;

}

// ------------------------------------------------ ---------------------------

Авіація і космонавтика
Автоматизація та управління
Архітектура
Астрологія
Астрономія
Банківська справа
Безпека життєдіяльності
Біографії
Біологія
Біологія і хімія
Біржова справа
Ботаніка та сільське господарство
Валютні відносини
Ветеринарія
Військова кафедра
Географія
Геодезія
Геологія
Діловодство
Гроші та кредит
Природознавство
Журналістика
Зарубіжна література
Зоологія
Видавнича справа та поліграфія
Інвестиції
Інформатика
Історія
Історія техніки
Комунікації і зв'язок
Косметологія
Короткий зміст творів
Криміналістика
Кримінологія
Криптологія
Кулінарія
Культура і мистецтво
Культурологія
Логіка
Логістика
Маркетинг
Математика
Медицина, здоров'я
Медичні науки
Менеджмент
Металургія
Музика
Наука і техніка
Нарисна геометрія
Фільми онлайн
Педагогіка
Підприємництво
Промисловість, виробництво
Психологія
Психологія, педагогіка
Радіоелектроніка
Реклама
Релігія і міфологія
Риторика
Різне
Сексологія
Соціологія
Статистика
Страхування
Будівельні науки
Будівництво
Схемотехніка
Теорія організації
Теплотехніка
Технологія
Товарознавство
Транспорт
Туризм
Управління
Керуючі науки
Фізика
Фізкультура і спорт
Філософія
Фінансові науки
Фінанси
Фотографія
Хімія
Цифрові пристрої
Екологія
Економіка
Економіко-математичне моделювання
Економічна географія
Економічна теорія
Етика

8ref.com

© 8ref.com - українські реферати


енциклопедія  бефстроганов  рагу  оселедець  солянка