Розробка програмного забезпечення для реєстрації волонтерів на події

Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 02.12.2015
Размер файла 1,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ТЕРНОПІЛЬСЬКИЙ НАЦІОНАЛЬНИЙ ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ

ФАКУЛЬТЕТ КОМП'ЮТЕРНИХ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ

Кафедра СКС

КУРСОВИЙ ПРОЕКТ

з дисципліни “Об'єктно-орієнтоване програмування”

на тему: «Розробка програмного забезпечення для реєстрації волонтерів на події»

Тернопіль - 2014

Зміст

  • Вступ
  • 1. Об'єктно-орієнтоване програмування
    • 1.1 Основи ООП
    • 1.2 Створення класів. Методи, властивості, поля
    • 1.3 Ієрархія класів у програмі
  • 2. Windows Forms
    • 2.1 Створення форми. Використання Multiple Document Interface (MDI). Події, властивості
    • 2.2 Опис використаних елементів управління
    • 2.3 Реалізація графічних елементів програми
  • 3. Збереження даних
    • 3.1 Створення таблиці. Приклад застосування.у програмі
    • 3.2 Колекції. Додавання до колекції елементів і доступ до елементів колекції
    • 3.3 Запис і читання з файлу
  • 4. Реалізація програми мовою С# з використанням ООП
    • 4.1 Інтерфейс програми
    • 4.2 Демонстрація можливостей програми.Тестовий приклад
  • Висновки
  • Список використаних джерел
  • Додаток

Вступ

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

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

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

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

Програма має красивий і зручний інтерфейс, який забезпечує приємну роботу з нею.

1. Об'єктно-орієнтоване програмування

1.1 Основи ООП

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

Об'єктно-орієнтоване програмування (ООП) - це парадигма програмування, яка розглядає програму як сукупність гнучко пов'язаних між собою об'єктів. Кожен об'єкт має суттєві характеристики, які відрізняють його від усіх інших об'єктів. Сукупність таких характеристик називається абстракцією. Розрізняють абстракції стану та поведінки об'єкта.

Стан (дані об'єкта) характеризується переліком та значенням певних ознак. Поведінка (функціонал об'єкта) визначається набором операцій, які виконуються об'єктом, або над об'єктом.[1]

Кожен об'єкт є екземпляром (представником) певного класу. Відповідно, клас - це відповідна абстракція об'єктів.

· Основні переваги концепції ООП:

· моделювання предметів та явищ реального світу;

· можливість створювати користувацькі типи даних (класи);

· приховування деталей реалізації (інкапсуляція);

· можливість повторного використання коду (наслідування);

· інтерпретація викликів процедур та функцій на етапі виконання (поліморфізм).

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

Модифікатори доступу:

Модифікатор private - забороняє доступ до полів і методів класу ззовні самого класу. Поля і методи, оголошені з модифікатором private, будуть доступні тільки в межах самого класу.

Якщо поле і метод класу визначені з модифікатором public, вони доступні ззовні оголошення базового класу чи похідних класів. Це в деякій мірі означає, що метод оголошений із зовнішнього класу може вільно звертатись до таких полів і методів. З допомогою модифікатора protected можна доступитись до полів і методів базового класу тільки для похідних класів, але не для зовнішніх по відношенню до класу методів. Модифікатор internal представляє комбінацію модифікаторів public і protected. Він обмежує доступ відмічених ним полів і методів межами одної збірки.

Успадкування - це властивість, з допомогою якої один об'єкт може набувати властивостей іншого. При цьому підтримується концепція ієрархічної класифікації. Без використання успадкування кожний об'єкт повинен явно визначати всі свої характеристики; використовуючи наслідування, об'єкт повинен визначати тільки ті якості, які роблять його унікальним в межах свого класу. Визначення нового класу (породжений клас, підклас, англ. derived class, англ. subclass) може базуватись на визначенні вже існуючого (базовий клас, англ. base class, англ. superclass). В такому випадку, новий клас отримає властивості та поведінку базового класу, та доповнить їх своїми власними. У випадку одиничного успадкування, у кожного класу може бути лише один безпосередній базовий клас. У випадку множинного успадкування, дозволяється існування декількох безпосередніх надкласів. Застосування методів успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.

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

Термін поліморфізм має грецьке походження і означає «наявність багатьох форм». З поліморфізмом тісно пов'язані такі поняття,як абстрактні класи, віртуальні методи, перевантаження методів і властивостей.

Віртуальні методи - один із найважливіших прийомів реалізації поліморфізму. Вони дозволяють створювати загальний код, який може працювати разом з об'єктами базового класу, так і з об'єктами будь-якого його класу-нащадка. При цьому базовий клас визначає спосіб роботи з об'єктами і будь-які його нащадки можуть представляти конкретну реалізацію цього способу. Базовий клас може і не представляти реалізацію віртуального методу, а тільки оголошувати про його наявність. Такі методи без реалізації називаються абстрактними. Клас, який містить хоча б один такий метод називається абстрактним. Об'єкт такого класу створювати не можна. Нащадки абстрактного класу повинні обов'язково представити реалізацію для всіх його абстрактних методів, інакше, вони в свою чергу будуть абстрактними. Можливість присвоювати різну функціональність одному методу називається перевантаженням методу.[3]

1.2 Створення класів. Методи, властивості, поля

Клас є основою для створення об'єктів. В класі визначаються дані і функціонал, який працює з цими даними. Об'єкти являються екземплярами класу. Ініціалізація змінних екземпляру відбувається в конструкторі. В класі можуть бути декілька конструкторів,тобто клас являється набором проектів, які визначають як будувати об'єкт. Дуже важливо розуміти різницю між класом і об'єктом: клас являється логічною абстракцією до тих пір,поки не буде створений об'єкт і не появиться фізична реалізація цього класу в пам'яті комп'ютера. Методи і змінні, які складають клас називаються членами класу. При визначенні класу об'являються дані, які він містить, і функціонал працюючий з цими даними. При створенні класу спочатку вказуємо ключове слово class. Найпростіші класи можуть мати тільки функціонал або тільки дані, але в реальних програмах класи включають в себе обидві складові. Дані містяться в змінних екземпляра, які визначені класом, а функціонал міститься в методах. Важливо відзначити, що в С# визначені декілька специфічних різновидів членів класу: змінні екземпляра, статичні змінні, константи, методи, конструктори, деструктори, індексатори, події, оператори і властивості.

Методи - це підпрограми, які управляють даними, визначені в класі, і в багатьох випадках забезпечують доступ до даних. За допомогою методів здійснюється взаємодія зовнішнього середовища з класом. Метод містить один і більше операторів. В професійно написаному С#-коді кожний метод виконує тільки одну задачу. Назвою метода може бути будь-який існуючий ідентифікатор. Ключові слова не можуть бути іменами методів. При оголошенні кожної змінної і методу можна встановлювати певний модифікатор доступу (за замовчуванням private). Поле - це член даних, який містить екземпляр значущого типу або посилання на вказівниковий тип. Загальномовне середовище (CLR) підтримує поля які належать як класу (статичні) так і екземпляру (нестатичні). Динамічна пам'ять для зберігання статичного поля виділяється в межах об'єкта класу, який створюється при його завантаженні в домен AppDomain, що відбувається при JIT- компілюванні будь-якого методу, який посилається на цей тип. Динамічна пам'ять для збереження екземплярних полів виділяється при створенні екземпляра даного типу.

Модифікатори полів:

Термін CLR

Термін C#

Опис

Static

static

Поле являється частиною вмісту типу, а не об'єкта.

Instance

(default)

Поле зв'язано з екземпляром типу, а не самим типом.

InitOnly

readonly

Запис в поле дозволяється тільки із коду метода конструктора.

Volatile

volatile

Код, звернений до поля, не обов'язково спеціально повинен оптимізуватись у відношенні управління типами компілятором CLR або обладнанням. Тільки наступні типи можуть об'являтись як volatile: всі посилальні типи, Single, Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Char, а також всі перечислені типи, які базуються на наступних типах: Byte, SByte, Int16, UINt16, Int32 або UInt32.

Одним із спеціальних типів членів класу, який має подібність з індексаторами, є властивість, яка зв'язує поле з методом, що забезпечує доступ до поля. В деяких попередніх програмах виникала необхідність створення поля, хоч і доступного із інших об'єктів, але такого, для якого виконувався б контроль над операціями з його значенням. Наприклад, може бути потрібно обмеження діапазону значень, які присвоюються цьому полю. Звичайно, для досягнення даної цілі можна використати закриту змінну в поєднанні з методом, який забезпечує доступ до її значення, але простіше і краще у всіх випадках використовувати властивість. Властивість складається із імені і методів доступу get і set. Методи доступу використовуються для отримання значення і присвоєння його змінній. Основною перевагою властивості є те, що ім'я може використовуватись у виразах і операціях присвоєння подібно звичайній змінній, хоча насправді при цьому автоматично викликаються методи доступу get і set. Таке використання властивості подібне на автоматичний виклик методів get і set в індексаторі.[1]

Синтаксис властивостей виглядає наступним чином:

type name {

get {

//код методу доступу get.

}

set {

// код методу доступу set.

}

Тут параметр type вказує тип властивості, а параметр name - ім'я властивості. Після визначення властивості будь-яке використання ідентифікатора, замість вказаного name, приведе до виклику відповідного метода доступу. Метод доступу set автоматично отримує параметр value, який містить значення, що присвоюється властивості. Властивості вважають «розумними» методами, тобто методами з специфічною логікою. CLR (Common Language Runtime) підтримує статичні, екземплярні, абстрактні і віртуальні властивості. Крім того, властивість може позначатись модифікатором доступу і визначатись в інтерфейсах.

орієнтований програмування облік клас

1.3 Ієрархія класів у програмі

Дана програма складається з одинадцяти класів, кожний з яких є певною структурою даних. Предметна область програми складається з волонтерів і подій, яких потрібно зареєструвати. Дана програма використовує основні ідеї ООП, це - інкапсуляція, успадкування, поліморфізм. Програма складається з двох основних класів, які називаються: Volunteer і Happening, в яких описано властивості, поля класу і конструктор (з параметрами і без)і десяти класів успадкованих від класу Form. Додавання нових волонтерів реалізують два класи: VolunteerList і FormRegistrationVolunteers. В класі VolunteerList створено таблицю, яка буде відображати додавання нових волонтерів, і запис та зчитування даних. В класі FormRegistrationVolunteers вводимо особисті дані про волонтера. Аналогічно реалізується додавання нових подій за допомогою класів HappeningList і FormRegistrationHappening. Реєстрація волонтера на подію здійснюється за допомогою двох наступних класів: Registration та Assignment. Клас Registration здійснює реєстрацію за допомогою номера волонтера та коду події, а наступний клас відображає ім'я відповідного волонтера та подію на яку він зареєстрований.

2. Windows Forms

2.1 Створення форми. Використання Multiple Document Interface (MDI). Події, властивості

Windows Forms створює Graphical Uses Interface (GUI) для різних програм. Форма-це графічний елемент, який появляється на робочому столі. Форма може бути діалоговим вікном,просто вікном або вікном MDI. Компонент - це клас, який реалізує інтерфейс IComponent і визначає різні поведінки, які можуть реалізувати компоненти. Елементи управління видимі, на відміну від компонентів, яким не вистачає графічної частини. Елементи управління і компоненти Windows Forms містяться в панелі Toolbox Visual Studio.Net. Форма служить контейнером для компонентів і елементів управління. Елементи управління добавляються на форму за допомогою коду. При «перетягуванні» елемента управління із панелі Toolbox в форму Visual Studio.Net генерує цей код,який створює певний елемент управління і задає його основні властивості. Користувач може сам написати код, проте елементи управління набагато простіше створювати і модифікувати в панелі Toolbox і вікні Properties, даючи можливість Visual Studio.Net розібратись із деталями. При звертанні користувача до елементу управління з допомогою миші чи клавіатури генерується подія і обробляється спеціальними «обробниками подій». Як правило, результатом подій являється яка-небудь операція. Наприклад, натискання кнопки OK у вікні MessageBox генерує подію. У відповідь на цю подію обробник MessageBox закриває це вікно повідомлень. Клас Form - основне вікно, яке використовується програмними додатками в Windows, повністю кваліфіковані як System.Windows.Forms.Form. Точно так само клас Button фактично являється System.Windows.Forms.Button. Загальний процес проектування додатків Windows потребує створення Windows Forms із заданням її властивостей, з добавленням елементів управління зі своїми властивостями і реалізацією обробників подій. [5]

В таблиці показані загальні властивості, методи і події класу Form.

Властивості, методи і події класу Form

Опис/Делегат і аргументи події

Загальні властивості

AcceptButton

Кнопка, яка буде натисненою при натисненні кнопки <Enter>

AutoScroll

Поява смужки прокрутки при необхідності

CancelButton

Кнопка, яка є натисненою при натисненні клавіші<Escape>

FormBorderStyle

Границя форми

Font

Гарнітура відображеного в формі тексту, а також гарнітура шрифту по замовчуванні добавлених в форму елементів

Text

Текст в рядку заголовка форми

Загальні методи

Close

Закриття форми і звільнення всіх ресурсів. Відкрити попередньо закриту форму не можна.

Hide

Приховування форми(ресурси не звільняються)

Show

Відображає приховану форму

Загальні події

Load

(Делегат EventHandler,аргумент події EventArgs)

Відіграє роль в показі форми. Visual Studio.Net генерує обробник події по замовчуванню, коли програміст двічі клацає кнопкою миші на формі в режимі проектування

При створенні елементів управління і обробників подій Visual Studio.Net генерує велику частину коду, яка відноситься до GUI. Програмісти можуть використовувати Visual Studio.Net для виконання великої частини подібних задач графічно, шляхом «перетягування і скидання »(drag and drop) компонентів на форму і завдання властивостей у вікні Properties.

Програма з використанням багатодокументного інтерфейсу (multiple document interface, MDI), представляють користувачу можливість одночасного редагування декількох документів. Вікно додатку багатодокументної програми (MDI) називається батьківським, а всі вікна в додатку - вікнами - наслідниками. Незважаючи на те, що багатодокументний додаток може мати багато вікон-наслідників, кожне із них має тільки одне батьківське вікно. Більше того, активним в кожний конкретний момент часу може бути тільки одне вікно-наслідник. Останні не можуть бути «предками», і їх не можна перемістити за межі батьківського вікна.

Для створення багатодокументної форми добавляємо нову форму (Form) і присвоїмо їй властивість IsMDIContainer значення True. Після цього створюється клас форми-наслідника для добавлення в основну форму. Для цього потрібно клацнути правою кнопкою миші на проекті у вікні Solution Explorer, вибрати команду ADD Windows Form і присвоїти файлу ім'я. Для добавлення в батьківську форму «наслідника» необхідно створити об'єкт нової форми наслідника; встановити її властивість MdiParent в батьківську форму і викликати метод Show. Код для створення наслідника звичайно знаходиться всередині обробника подій, яке створює нове вікно у відповідь на дію користувача. Вибір меню (наприклад, File, в якому вибирається команда New, за якою слідує команда Window)- загальний метод створення нових вікон-наслідників. Властивість MdiChildren форми представляє собою масив посилань на Form-наслідника. Це корисно, якщо батьківське вікно захоче перевірити властивість всіх свої «нащадків». Властивість ActiveMdiChildren повертає посилання на активне вікно-наслідника; воно повертає null, якщо активних вікон-наслідників немає.

Властивості і події MDI-форми

Опис, делегат і аргументи подій

Загальні властивості MDI-наслідника

IsMdiChild

Вказує на те, чи є форма MDI-наслідником. При значенні True, форма - MDI-наслідник (властивість тільки для читання)

MdiParent

Задає MDI форму - наслідника.

Загальні властивості MDI-нащадка

ActiveMdiChild

Викликає об'єкт Form, який являється поточним активним MDI-наслідником.

IsMdiContainer

Вказує на те, чи може форма бути багатодокументною. При значенні True форма може бути багатодокументною батьківською формою. Значення по замовчуванню- False.

MdiChildren

Повертає MDI-наслідників у вигляді масиву форм.

Загальний доступ

LayoutMdi

Визначає відображення форм-потомків на багатодокументній батьківській формі. В якості параметра приймає перечислення MdiLayout з можливими значеннями ArrangeIcons (упорядкувати значки), Cascade(каскадом), TileHorizontal(впорядкувати по горизонталі), TileVertical (впорядкувати по вертикалі)

Загальні події

(Делегат EventHandler, аргументи події EventArgs)

MdiChildActivate

Генерується при закритті чи активації MDI-наслідника

2.2 Опис використаних елементів управління

В даній програмі використані такі елементи управління: TextBox, Label, DataGridView, Button, menuStrip, toolStrip.

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

Загальні властивості Label

Опис, делегат і аргументи події

Font

Гарнітура тексту

Text

Текст мітки

TextAlign

Вирівнювання тексту на елементі управління. Одне із трьох положень по горизонталі(left, center або right)і одне із трьох положень по вертикалі(top,middle або bottom)

Текстове поле(клас TextBox) - це область, в яку текст може вводитись користувачем з клавіатури, або просто відображатись. Текстове поле із паролем - це область, в яку всі введені користувачем дані приховані. По мірі вводу всі символи в такому текстовому полі відображаються у вигляді особливих символів(зазвичай *).

Зміною властивості PasswordChar текстового поля останньому задається пароль; при якому вказується символ, який буде відображати вміст. Видалення значення PasswordChar із вікна Properties повертає текстове поле у звичайний режим.

Властивості і події класу TextBox

Опис, делегат і аргументи події

Загальні властивості

AcceptsReturn

При значенні true і натисканні клавіші <Enter> створюється новий стрічка, якщо текстове поле містить багато стрічок. При значенні false і натисканні клавіші <Enter> натискається кнопка форми по замовчуванню.

Multiline

При значенні true текстове поле може відображати багато стрічок. По замовчуванню-false.

Властивості і події класу TextBox

PasswordChar

Введений текст відображається у вигляді символів, що робить TextBox текстовим полем з паролем доступу. Якщо символ не вказаний, тоді TextBox відображає введений текст.

ReadOnly

Якщо true, то текстове поле має сірий фон, і текст редагувати не можна. По замовчуванню - false.

ScrollBars

Для багатострічкових текстових полів; вказує на появу полоски прокрутки(none, horizontal, vertical або both)

Text

Текст, який відображається в текстовому полі.

Загальні події

TextChanged

Викликається при зміні тексту в TextBox(користувач добавив або видалив символи). Створюється по замовчуванню при подвійному клацанні миші на даному елементі управління в режимі проектування.

Кнопка-це елемент управління, на якому користувач клацає кнопкою миші для запуску виконання тої чи іншої операції. В програмі можуть використовуватись декілька видів кнопок, таких як кнопки позиції списку(прапорці) і селективні кнопки(переключателі). Всі типи кнопок являються похідними від базового класу ButtonBase (простір імен System.Windows.Forms), який визначає загальні властивості кнопок. Будемо розглядати клас Button, який часто використовуємо для подачі команди. Текст на зовнішній поверхні Button називається міткою кнопки.

Властивості і події класу Button

Опис, делегат і аргументи події

Загальні властивості

Text

Текст, який відображається на зовнішній поверхні Button.

Загальні події

Click

Викликається при подвійному клацанні миші на елементі управління. Створюється по замовчуванню при подвійному клацанні на даному елементі управління в режимі проектування.

Управління DataGridView надає потужний і гнучкий спосіб для відображення даних у табличному форматі. Ми можемо використовувати DataGridView щоб показати тільки для читання вигляд невеликої кількості даних, або можна масштабувати його щоб показати редагований вигляд дуже великих наборів даних. Ми можемо розширювати управління DataGridView різними шляхами, і можемо визначати поведінку у застосунку. Наприклад, ми можемо задавати програмно власні алгоритми сортування, і можемо створювати власні типи колонок. Як відомо, перш ніж почати прискорено і красиво відображати дані, їх потрібно отримати. DataGridView підтримує три режими роботи з даними:

1. Перший, основний - відображення даних із зовнішньої колекції(наприклад, ListView,DataTable).

2. Спеціальний режим відображення вільних (unbound) даних, тобто дані зберігаються в самому control-e.

3. Ще один особливий режим роботи-віртуальний(Virtual mode). В ньому control (генерує) подію при надходженні якої прикладний код повертає деякі дані. Так як дані при цьому не повинні де-небудь зберігатися, віртуальний режим може оперувати мільйонами стрічок без яких-небудь проблем з відтворенням чи нестачею пам'яті. Прив'язувати елементи користувацького інтерфейсу можна аж ніяк не виключно до таблично представлених даних. Практично будь-яка структура даних може виступати в ролі їх джерела- звичайні об'єкти, масиви, колекції і т.д. Одною із особливостей DataGridView є наявність великої кількості класів-друзів. Таким чином, control має розширену архітектуру, де значну частину функціональності, доступної користувачу, забезпечують сторонні класи-друзі(класи-плагіни).

На малюнку зображене розширене дерево класів-плагінів.

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

Є джерело даних, воно доступне під час розробки, і ми готові добавляти колонки в цей час.

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

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

Немає джерела даних, а склад/тип колонок визначається динамічно, під час виконання, а під час розробки невідомий тип і, можливо, навіть кількість колонок.

Всі інші варіанти приводять до комбінації цих чотирьох базисних сценаріїв.

Простір імен System.Windows.Forms містить типи для організації спадаючих головних меню (розташованих у верхній частині форми) і контекстних меню, що відкриваються по клацанню правої кнопки миші.

Елемент ToolStrip є контейнером для створення структур меню, панелей інструментів і рядків станів.

Елемент управління MenuStrip - це контейнер для структур меню на формі. Цей елемент успадковується від ToolStrip. Система меню будується додаванням об'єктів ToolStripMenu до MenuStrip.

Клас ToolStripMenuItem служить для побудови структур меню. Кожний об'єкт ToolStripMenuItem представляє окремий пункт в системі меню.

Для створення меню потрібно перетягнути елемент MenuStrip на форму. Він розміщується в невидимій частині форми.

Елемент MenuStrip дозволяє вводити текст меню безпосередньо в елементи меню.

2.3 Реалізація графічних елементів програми

В даній програмі використовуються перелічені вище елементи управління.

Програма містить три DataGridView, які відповідно знаходяться у класах VolunteersList, HappeningsList та Assignment. Вони мають такий вигляд:

Форма відображає реєстрацію волонтерів.

Дана форма відображає реєстрацію подій.

Дана форма відображає реєстрацію волонтера на подію.

На формах ми також бачимо кнопки (Button).

Дана форма здійснює реєстрацію волонтера на подію за допомогою коду події та номера волонтера.

На формі ми бачимо використані елементи управління: TextBox, Label і Button.

На головній формі ми бачимо командну стрічку, яка містить меню. Реалізовано елемент menuStrip.

На наступному рисунку ми бачимо використання елемента toolStrip.

3. Збереження даних

3.1 Створення таблиці. Приклад застосування у програмі

Таблиця створюється за допомогою класу DataTable. Щоб використовувати DataTable потрібно підключити System.Data.

Об'єкт DataTable містить дві конструкції:

public DataTable()

public DataTable(string tableName)

В наступному прикладі створюється об'єкт DataTable і встановлюється його ім'я.

DataTable TabVolunteer = new DataTable(“DGVolunteer”);

DataTable містить сукупність об'єктів DataColumn. Ця сукупність визначає структуру таблиці. Щоб добавити новий стовпець в цю сукупність, використовується метод Add().

DataColumn cName = new DataColumn("Ім'я");

TabVolunteer.Columns.Add("Ім'я", typeof(string));

В даному прикладі спочатку створюється змінна типу DataColumn з ім'ям «cName».

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

3.2 Колекції. Додавання до колекції елементів і доступ до елементів колекції

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

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

В більшості мов програмування звичайні масиви мають фіксований розмір:їх неможна змінювати динамічно відповідно вимогам часу і необхідній пам'яті програмному додатку. В деяких додатках обмеженість розміру представляє собою досить серйозну проблему для розробників. Колекція класу ArrayList.Net Framework відтворює функціональність традиційних масивів і забезпечує динамічні зміни розміру колекції за допомогою методів класу. В будь-який момент часу колекція ArrayList містить визначене число елементів, менше або рівне ємності-кількості елементів, зарезервованих в поточний час для колекції ArrayList. Програма може маніпулювати ємністю за допомогою властивості Capacity класа ArrayList. При необхідності розширення класа ArrayList поточна ємність подвоюється по замовчуванню. Клас ArrayList зберігає посилання на object. Всі класи являються похідними від класу Object, тому клас ArrayList може містити об'єкти будь-якого типу.

Методи класу ArrayList

Add - додавання об'єкта object в клас ArrayList. Повертає значення int,яке вказує на вказівник, в який добавлений object.

Clear - видалення всіх елементів із класу ArrayList.

Contains-повернення значення true, якщо вказаний об'єкт object знаходиться в класі ArrayList; в протилежному випадку повернення значення false.

IndexOf - повернення вказівника першої появи вказаного об'єкта object в класі ArrayList.

Insert - вставка об'єкта object відповідно заданому індексу.

Remove - видалення першої появи вказаного об'єкта.

RemoveAt - видалення об'єкта по заданому індексу.

RemoveRange - видалення заданої кількості елементів, починаючи із заданого індексу в класі ArrayList.

Sort - сортування класу ArrayList.

TrimToSize - встановлення ємності (Capacity) класу ArrayList поточною кількістю елементів в класі ArrayList.

Додавання елементів до колекції здійснюється за допомогою методу Add(), як показано нижче.

List<int> intList=new List<int>();

intList.Add(1);

intList.Add(2);

Змінна volunteer визначена типу List<Volunteer>. З допомогою операції new створюється новий об'єкт того ж типу. Оскільки екземпляр класу List<Volunteer> створюється з конкретним класом Volunteer,тільки об'єкти цього класу можуть бути добавлені методом Add(). В наступних прикладах коду створюються і добавляються в колекцію п'ять волонтерів. Перші три добавляються з використанням ініціалізації колекції, а останні два -явним викликом метода Add().

Volunteer graham=new Volunteer(“Graham”,”Hill”,”UK”,14);

Volunteer emerson=new Volunteer(“Emerson”,”Fittipaldi”,”Brazil”,14);

Volunteer mario=new Volunteer(“Mario”,”Andretti”,”USA”,12);

List<Volunteer> volunteer= new List<Volunteer> (20) {graham,emerson,mario};

volunteer.Add(new Volunteer (“Michael”,”Nigtson”,”Germany”,91));

volunteer.Add(new Volunteer (“Mika”,”Hakkinen”,”Finland”,20));

Доступ до елементів здійснюється за допомогою індексатора, якому ми передаємо номер елемента. Перший елемент доступний по індексу 0. Специфікуючи volunteer[3], ми отримаємо четвертий елемент списку.

3.3 Запис і читання з файлу

В C# є класи, які забезпечують операції читання/запису для файлів. Звичайно найбільш поширеним типом файлу є дисковий файл. На рівні операційної системи всі файли розглядаються як двійкові файли. В С# підтримуються методи читання і запису байтів при роботі з файлами. Тому досить поширені операції читання/запису файлів при здійсненні яких використовуються потоки байтів. У C# забезпечується закріплення файлового потоку,який орієнтується на використання байтів в символьний потік. Операції з символьними файлами зручні,якщо потрібно зберігати текст. Потік-це абстрактне представлення послідовних пристроїв, які забезпечують збереження даних і доступ до них(по одному байту в кожний конкретний момент часу).В якості таких пристроїв можуть виступати розміщений на диску файл, принтер, область пам'яті будь-який інший об'єкт який допускає послідовне зчитування і запис інформації.

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

File - містить статичні методи для маніпуляції файлами(створення, копіювання, видалення);

Directory- містить статичні методи для маніпуляції директоріями.

Path- статичний клас, «шлях»;

FileInfo- не містить статичні методи, які відповідають фізичному файлу, в багато чому дублюють функціональність File;

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

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

StreamReader- здійснює читання символьних даних із потоку і їх дії.[3]

4. Реалізація програми мовою С# з використанням ООП

4.1 Інтерфейс програми

При запуску програми ми бачимо наступну форму:

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

4.2 Демонстрація можливостей програми. Тестовий приклад

Дана програма здійснює реєстрацію волонтера на подію.

Після запуску програми добавляємо вікно «Перегляд списку волонтерів». На даній формі ми бачимо таблицю, яка містить чотири поля: «І'мя», «Вік», «Стать», «Номер волонтера», а також чотири кнопки: «Додати волонтера», «Редагувати волонтера», «Записати список волонтерів у файл», «Зчитати список волонтерів із файлу». При натисненні кнопки «Додати волонтера» ми за допомогою допоміжної форми «Введення даних про волонтерів» додаємо волонтерів. При необхідності ми можемо редагувати дані про волонтера за допомогою кнопки «Редагувати волонтера», перед тим виділивши рядок,який потрібно редагувати. Збереження даних у файл здійснюється за допомогою кнопки «Записати список волонтерів у файл», а також для зчитування даних з файлу потрібно натиснути кнопку «Зчитати із файлу список волонтерів». При добавленні форми «Перегляд списку подій» бачимо таблицю, яка містить наступні поля: «Назва», «Місце проведення фестивалю», «Дата», «Код». Для даної форми функції додавання, редагування події а також збереження даних здійснюється аналогічно до попередньої форми.

При добавленні форми «Відображення реєстрації волонтерів на події» ми бачимо таблицю з двома полями: «Волонтер», «Подія», а також копку «Зареєструвати волонтерів на події». При натисненні кнопки появляється допоміжна форма «Реєстрація волонтера на подію», яка містить два поля «Номер волонтера», «Код події», а також кнопку «ОК». При натисненні кнопки у попередню форму відображаються дані «Ім'я волонтера» і «Назва події».

Тестовий приклад.

Для прикладу зареєструємо волонтерів: Василь Петренко, Олена Вовк, Ігор Антипський, Степан Оленчук на події «Фестиваль радості», «День смутку», фестиваль «Захід», «Фестиваль забутого кіно» відповідно.

Вводимо дані про волонтера і добавляємо в таблицю при натисненні кнопки «ОК».

Коли всі дані введено ми можемо редагувати деякі дані виділивши перед цим певний рядок і натиснувши кнопку редагувати.

Це саме робимо для введення даних про події.

Реєстрація волонтера на подію.

Відображення зареєстрованих волонтерів на події.

Висновки

В ході виконання роботи мовою С# в середовищі Visual Studio2008 реалізовано програму обліку даних про волонтерів та подій, на які вони зареєстровані. Також продемонстровано на прикладі можливості об'єктно-орієнтованого програмування.

Результати:

· Створено форми для введення даних про волонтерів та події.

· Здійснено запис та зчитування даних у файл (з файлу).

· Здійснено реєстрацію волонтера на подію і її відображення на формі.

Варто відзначити, що:

· Технологія Windows Forms дає можливість створювати зручний інтерфейс користувача.

· Об'єктно-орієнтоване програмування дозволяє створювати програму, як набір користувацьких типів даних (класів), приховувати деталі реалізації, використовувати повторний код, інтерпретувати виклики процедур та функцій на етапі виконання (втілюючи основи ООП - інкапсулювання, поліморфізм, успадкування).

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

1. С#: Пер. С англ./Дейтел Х.,Дейтел П., Листфилд Дж., Нието Т., Йегер Ш., Златкина М. - СПб.: БХВ-Петербург, 2006. - 1056 с.:ил.

2. Джеффри Рихтер - CLR via C#. Программирование на платформе Microsoft.NET Framework 2.0 на языке С#. Мастер-класс./Пер. с англ. -- М.: Издательство «Русская Редакция»; СПб.: Питер, 2007. -- 656 стр. : ил.

3. Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер - С# 2008 и платформа.Net 3.5 для профессионалов.

4. Герберт Шилдт - C# Учебный Курс. - Питер, Москва, 2003.

5. Симон Робинсон, Олли Корнес, Джей Глинн, Бартон Харвей, Крейг Макквин, Джерод Моемека, Кристиан Нагель, Морган Скиннер, Карли Ватсон - С# для профессионалов Том I.

6. Симон Робинсон, Олли Корнес, Джей Глинн, Бартон Харвей, Крейг Макквин, Джерод Моемека, Кристиан Нагель, Морган Скиннер, Карли Ватсон - С# для профессионалов Том II.

7. А.В. Фролов, Г.В. Фролов - Язык С#. Самоучитель. - М.: Диалог-Мифи, 2003.-560с.

8. http://ru.wikipedia.org/wiki/Виртуальный_метод

9.http://uk.wikipedia.org/wiki/Успадкування_(програмування))

10.http://www.rsdn.ru/article/dotnet/datagridview20.xьl

Додаток

Текст програми

Клас Volunteer.

public class Volunteer

{

private int id;

private string name;

private int age;

private string male;

public int Id

{

get { return id; }

set { id = value; }

}

public string Name

{

get { return name; }

set { name = value; }

}

public int Age

{

get { return age; }

set { age = value; }

}

public string Male

{

get { return male; }

set { male = value; }

}

public Volunteer(string name, int old, string male, int id)

{

this.Name = name;

this.Age = old;

this.Male = male;

this.Id = id;

}

}

Клас Happening.

public class Happening

{

private int code;

private string date;

private string venue;

private string name;

public int Code

{

get { return code; }

set { code = value; }

}

public string Name

{

get { return name; }

set { name = value; }

}

public string Date

{

get { return date; }

set { date = value; }

}

public string Venue

{

get { return venue; }

set { venue = value; }

}

public Happening()

{

this.Code = 0;

this.Date = "";

this.Venue = "";

this.Name = "";

}

public Happening(string eventVenue, string eventName, int eventCode, string eventDate)

{

this.Code = eventCode;

this.Name = eventName;

this.Venue = eventVenue;

this.Date = eventDate;

}

}

Клас MainViewForm

private void tsAddVolunteer_Click(object sender, EventArgs e){}//додавання форми для перегляду списку волонтерів.

private void tsAddHappening_Click(object sender, EventArgs e){}//додавання форми для перегляду списку подій.

private void aboutToolStripMenuItem_Click(object sender, EventArgs e){}//викликає форму «Про програму».

private void toolStripButton1_Click(object sender, EventArgs e){}//додавання форми відображення реєстрації волонтера на подію.

Клас VolunteerList

public VolunteersList() {}// Конструктор в якому створюються рядки і додаються до таблиці волонтерів.

public void TabVolunteerAddRow(string nameParam, string maleParam, int ageParam, int idParam){}// створюємо стовпці таблиці.

public void ColumnPropSet(DataGridView DGV){}// встановлюємо властивості стовпців.

public void WriteTabV() {}//запис таблиці у файл.

public void ReadTabV(){}//зчитування даних із таблиці.

private void bAddVolunteer_Click(object sender, EventArgs e){}//додавання волонтера.

private void changeVolunteer_Click(object sender, EventArgs e){}//редагування волонтера.

public void TabVolunteerChangeRow(DataGridViewRow currentRow, string nameParametr, string maleParametr, int ageParametr, int idParametr){}//зміна значення стовпців при редагуванні даних.

Клас HappeningList

public HappeningsList(){}//конструктор в якому створюються рядки таблиці подій і додаються до таблиці.

public void TabHappeningAddRow(string venueParam, string nameParam, string dataParam, int codeParam){}// створюємо стовпці таблиці.

public void ColumnPropSet1(DataGridView DGH){}// встановлюємо властивості стовпців.

public void WriteTabH(){}//запис таблиці у файл.

public void ReadTabH(){}//зчитування даних із таблиці.

private void bAddHappening_Click(object sender, EventArgs e){}// додавання події.

private void changeEvent_Click(object sender, EventArgs e){}// редагування події

public void TabHappeningChangeRow(DataGridViewRow currentRow, string venueParam, string nameParam, string dataParam,int codeParam)// зміна значення стовпців при редагуванні даних про подію.

Клас Registration

public Registration()//конструктор без параметрів.

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)//зчитування введених //даних з форми.

{

int Id = int.Parse(rId.Text);

int Code = int.Parse(rCode.Text);

numberId = Id;

numberCode = Code;

}

Клас Assignment

public Assignment(){}//конструктор, в якому створюється таблиця і додаються рядки.

public void TabAssignmentAddRow(String NewVolunteer, string NewHappening){}//додавання стовпців таблиці.

public void ColumnPropSet2(DataGridView DGH){}//встановлення значень стовпців.

private void button1_Click(object sender, EventArgs e){}//реєстрація волонтера на подію.

Клас FormRegistrationVolunteers

public FormRegistrationVolunteers()

{

InitializeComponent();

}//конструктор без параметрів.

private void button1_Click(object sender, EventArgs e) //зчитування даних //введених на формі.

{ number = new VolunteersList();

string NameParametr = tName.Text;

string MaleParametr = tMale.Text;

int AgeParametr = int.Parse(tAge.Text);

volunteer = new Volunteer(NameParametr, AgeParametr, MaleParametr, number.countV);

}

Клас FormRegistrationHappening

public FormRegistrationHappening()//конструктор без параметрів.

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)//зчитування даних з //форми.

{

number = new HappeningsList();

string nameParametr = tName.Text;

string venueParametr = tVenue.Text;

string dataParametr = tDate.Text;

happening = new Happening(venueParametr, nameParametr, number.countH, dataParametr);

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.