Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
07.08.2013
Размер:
202.57 Кб
Скачать

2.3 Вибір мови програмування

В данний час розроблено багато високорівневих мов програмування, серед який я виділив для себе мову C#. Для реалізації даного проекту було обрано об’єктно-орієнтовану мову програмування С#.

C # розроблявся як мова програмування прикладного рівня для CLR і, як такий, залежить, насамперед, від можливостей самої CLR. Це стосується, перш за все, системи типів C #, яка відображає BCL. Присутність або відсутність тих чи інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути транслювали у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1 до 2.0 значно збагатився й сам C #; подібної взаємодії слід чекати і надалі. (Проте ця закономірність була порушена з виходом C # 3.0, що представляє собою розширення мови, не спираються на розширення платформи. NET.) CLR надає C #, як і всім іншим. NET-орієнтованим мовам, багато можливостей, яких позбавлені «класичні» мови програмування. Наприклад, збірка сміття не реалізована в самому C #, а проводиться CLR для програм, написаних на C # точно так само, як це робиться для програм на VB.NET, J # та інших. Синтаксис C # дуже виразний, але простий у вивченні. Усі, хто знайомий з мовами C, C + + або Java з легкістю впізнають синтаксис з фігурними дужками, характерний для мови C #. Розробники, які знають будь-який з цих мов, як правило, зможуть домогтися ефективної роботи з мовою C # за дуже короткий час. Синтаксис C # робить простіше те, що було складно в C + +, і забезпечує потужні можливості, такі як типи значень Nullable, перерахування, делегати, лямбда-вирази і прямий доступ до пам'яті, чого немає в Java. C # підтримує універсальні методи і типи, забезпечуючи більш високий рівень безпеки і продуктивності, а також ітератори, що дозволяють при реалізації колекцій класів визначати власну поведінку ітерації, яке може легко використовуватися в клієнтському коді. В C # 3.0 вирази LINQ (Language-Integrated Query) роблять строго-типізований запит першокласної конструкцією мови. Як об'єктно-орієнтована мова, C # підтримує поняття інкапсуляції, успадкування та поліморфізму. Всі змінні і методи, включаючи метод Main - точку входу додатки - інкапсулюються в визначення класів. Клас може успадковувати безпосередньо з одного родового класу, але може реалізовувати будь-яке число інтерфейсів. Для методів, які перевизначають віртуальні методи в батьківському класі, необхідно ключове слово override, щоб виключити випадкове повторне визначення. У мові C # структура схожа на полегшений клас: це тип, який розподіляється по стопках, реалізовує інтерфейси, але не підтримує спадкування.

3 Практична реалізація

3.1 Розробка програми

Створення програми починається власне з створення форми (рис.1.1)

Рисунок 1.1 – Створення форми капчі

Форма має 5 елементів: безпосередньо сама форма капчі, PictureBox де власне знаходиться капча, текстове поле для вводу символівTextBox1, кнопки Не Бачу Символів і ОК.

Для Роботи програми підключені наступні бібліотеки:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

Далі конструктор форми Form1:

У коді проекту в клас Form1 додамо рядок:

private string text = String.Empty; button1 буде відповідати за оновлення картинки, а button2 за перевірку вводу. Тепер потрібно написати функцію генерації зображення з випадковим текстом. Це зможе зробити наступний код:

private Bitmap CreateImage (int Width, int Height)

{

Random rnd = new Random ();

Створимо зображення:

Bitmap result = new Bitmap (Width, Height);  

Обчислимо позицію тексту :

 int Xpos = rnd.Next (0, Width - 50);   int Ypos = rnd.Next (15, Height - 15);

Додамо різні кольори :

Brush [] colors = {Brushes.Black,Brushes.Red,Brushes.RoyalBlue, Brushes.Green};

Вкажемо де малювати:

Graphics g = Graphics.FromImage ((Image) result);

Нехай фон картинки буде сірим:

g.Clear (Color.Gray);

Згенеруємо текст text = String.Empty; string ALF = "1234567890QWERTYUIOPASDFGHJKLZXCVBNM";

for (int i = 0; i <5; + + i) text + = ALF [rnd.Next (ALF.Length)];

Намалюємо сгеніріруемий текст:

g.DrawString (text, new Font ("Arial", 15),colors [rnd.Next (colors.Length)],new PointF (Xpos, Ypos));

Додамо трохи перешкод.

Лінії з кутів: g.DrawLine (Pens.Black, new Point (0, 0),new Point (Width - 1, Height - 1));g.DrawLine (Pens.Black,new Point (0, Height - 1),new Point (Width - 1, 0)); Білі точки:

for (int i = 0; i <Width; + + i)for (int j = 0; j <Height; + + j)if (rnd.Next ()% 20 == 0)result.SetPixel (i, j, Color.White);

return result;

}

Викличемо дану функцію з події завантаження форми та події натискання на кнопку button1:

private void Form1_Load(object sender, EventArgs e)

{

pictureBox1.Image=this.CreateImage(pictureBox1.Width, pictureBox1.Height);

}

private void button1_Click(object sender, EventArgs e)

{

pictureBox1.Image=this.CreateImage(pictureBox1.Width, pictureBox1.Height);

}

На подію кліка по другій кнопки повісимо наступний код:

private void button2_Click(object sender, EventArgs e)

{

if (textBox1.Text == this.text)

MessageBox.Show("Верно!");

else

MessageBox.Show("Ошибка!");

}

Соседние файлы в папке курсовая docx200