Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Разработать справочную систему по стандартным функциям выбранного языка программирования

Содержание:

Введение

В настоящее время с каждым днём появляется всё больше и больше новых языков программирования. Каждый из них нацелен на выполнение своих конкретных задач. Языки баз данных нацелены на удобный и быстрый поиск данных в таблицах, языки низкого уровня позволяют управлять данными на низком уровне, что позволяет избежать утечек памяти и нестабильной работ, языки статистической обработки данных позволяют быстро произвести дисперсионный и регрессионный анализ.

Одним из наиболее популярных языков программирования клиентских приложений является Microsoft Visual C# (далее C#). В данной работе были рассмотрены базовые конструкции языка, типы данных и основы работы с графическим интерфейсом.

Цель работы: получить базовые сведения о языке программирования C#, научиться разрабатывать приложения с графическим интерфейсом и систематизировать полученные знания путём создания электронного учебника

Задание: Разработать справочную систему по стандартным функциям выбранного языка программирования. (Язык C#)

Глава 1. Теоретическая часть

Язык программирования C#

C# - это объектно-ориентированный язык со строгой типизацией, позволяющий разработчикам создавать различные приложения, работающие на платформе .Net Framework.

Язык был разработан компанией Microsoft в 2000 году. Целью создания было построение удобной и простой среды для разработки клиентских приложений нацеленных на межсетевое взаимодействие.

Данный язык программирования можно использовать для создания клиентских приложений Windows, XML-веб-служб, мобильных приложений, распределенных компонентов, приложений клиент-сервер, приложений баз данных и т. д.

Несмотря на то, что синтаксис языка невероятно богат, он повторяет многие особенности таких языков программирования, как C, C++ и Java. Разработчики, знающие любой из этих языков, обычно очень быстро начинают эффективно работать в C#.

Установка Visual Studio

Для работы с языком программирования C#, компанией Microsoft была разработана среда Visual Studio 2017. Среда является бесплатной для разработчиков и загружается с официального сайта компании:

https://www.visualstudio.com/ru/downloads/

На сайте следует выбрать бесплатную версию продукта:

http://blog.harrix.org/wp-content/uploads/2017/04/2017-04-12_170457.jpg

Рисунок 1. Загрузка Visual Studio

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

Здесь необходимо выбрать разработку классических приложений:

http://blog.harrix.org/wp-content/uploads/2017/04/2017-04-12_010246.jpg

Рисунок 2. Выбор необходимого программного продукта

После того, как был выбран продукт, необходимо нажать кнопку Установить. После загрузки и распаковки всех пакетов (обычно это занимает от 30 минут до 1 часа) среда Visual Studio будет полностью готова к работе.

В том случае, если запустить Visual Studio будет отображён начальный экран среды разработки:

http://blog.harrix.org/wp-content/uploads/2017/04/2017-04-13_003659.jpg

Рисунок 3. Начальное окно программы Visual Studio

Объявление переменных

В C# объявление переменных аналогично C++. Например, для объявления целочисленной переменной a, необходимо написать следующий код:

int a;

Для удобства, объявление переменной может быть совмещено с её описанием. Например:

int b = 10;

В C# существует более 20 примитивных типов данных. Наиболее часто применяемые указаны в таблице 1.

Таблица 1. Типы данных

Язык программирования

Описание

C#

C++

Pascal

int

int

Longint

Целочисленный тип, от -231 до 231-1

long

long int

Целочисленный тип, от -263 до 263-1

string

string

Строкой тип символов Unicode

float

float

single

Тип с плавающей точкой одинарной точности

double

double

double

Тип с плавающей точкой двойной точности

bool

bool

boolean

Логический тип данных

object

object

Универсальный тип, принимающий любое значение и являющийся родительским для все типов в C# и C++

Преобразование типов в C#

В том случае, если преобразование переменной идёт с расширением точности (например, int в long), то преобразование типов в коде не требуется. Например:

int a = 100;

long b;

b = a;

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

double a = 5.4;

int b;

b = (int)a;

В данном случае будет выполнено преобразование с потерей точности, а именно будет потеряно 0,4.

Если требуется выполнить более сложные операции приведения типов, требующие от ОС выполнение дополнительных операций, например, преобразовать строку в число, строку в дату и т.д., необходимо использовать функцию класса Convert. Например:

string s = "123,32";

double b;

b = Convert.ToDouble(s);

Примечание: При описании переменных с плавающей точкой в коде, используется десятичный разделитель «.» (точка). Однако при работе программы, в качестве разделителя выступает региональный знак, а именно «,» (запятая). Операция Convert.ToDouble(s) будет выполнена во время работы программы, а следовательно будет полагаться на разделитель-запятую.

Null – значение

В C# существуют значения по умолчанию для всех типов переменных. Для числовых это 0, для логических это false. Для всех остальных – это null. Null – значение говорит о том, что переменная объявлена, но не имеет значения, а если не имеет значения, то не имеет и физического размещения в памяти. Обращение к ней – это обращение к пустоте.

Примечание: будьте осторожны при работе с null-значениями. При умелом использовании они помогут проследить ошибки инициализации в коде, а в неумелом – наделать ошибок в процессе работы программы в совершенно неожиданных местах программы. Например, сложение значения с пустотой приведёт к ошибке:

string s; // s = null

s = s + ""; // Ошибка!

Универсальный тип данных

В некоторых случаях, когда описание переменной совпадает с её объявлением разрешается опускать тип данных.

Например, выражение:

string str = "123";

Эквивалентно, выражению:

var str = "123";

Такое объявление бывает удобно использовать для сокращения записи, потому как некоторые имена классов могут иметь слишком большие названия.

Комментарии

В C# допускается применение 3 видов комментариев. Это однострочные, многострочные и xml-комментарии.

Однострочный комментарий начинается со знака // и действует до конца строки

// Однострочный комментарий

Многострочный комментарий начинается со знаков /* и действует до знаков */

/*

Комментарий

на много

строк

*/

Xml-комментарий служит для активного описания переменных, например:

/// <summary>

/// Информация о номере группы

/// </summary>

string s = "ОЗБП-101";

Тогда, при обращении к переменной мы получим её описание из комментария (рисунок 4):

Рисунок 4. Информация о переменной

Условный оператор

Для выполнения определённых задач в зависимости от критерия в языке C# применяется условный оператор:

if (b == 10)

{

b = b + 1;

}

else {

b = 1;

}

После ключевого слова if, в круглых скобках указывается проверяемое условие. Если оно истинно, то происходит выполнение кода в первых фигурных скобах, если ложно, то выполнится условие в фигурных скобах после ключевого слова else.

При помощи операторов == и != допускается сравнивать любые переменные и экземпляры классов. Переменные в данном случае будут сравниваться по значению, в то время как экземпляры классов по ссылке. То есть если два экземпляра класса будут по своему содержимому полностью идентичны, но располагаться в разных областях памяти, то они не будут равны.

Цикл с параметром

Для выполнения определённого фрагмента когда несколько раз рекомендуется использовать циклы. Наиболее удобный из всех это цикл с параметром. Чтобы вставить заготовку цикла, достаточно написать for и дважды нажать TAB.

for (int i = 1; i < 10; i++)

{

a = a * i;

}

Данный цикл выполнит подсчёт факториала числа 10 и запишет его в переменную а.

Данный цикл представлен тремя полями, разделёнными знаком «;».

Первое поле – инициализатор. В нём объявляются и инициализируются переменные перед началом цикла. Поле может отсутствовать.

Второе поле – условие. Цикл будет выполняться до тех пор, пока это условие выполняется. Поле может отсутствовать.

Третье поле – итератор. Операция, или операции, которые будут выполнятся на каждом новом витке цикла. Поле может отсутствовать.

Допускается и следующая запись цикла с параметром:

for (;;)

{

// «Вечный» цикл

}

Для прерывания работы цикла существует два ключевых слова: break и continue.

break выполняет принудительный выход из цикла. После выполнения данной команды, продолжится выполнение кода, следующего за определением цикла.

continue завершает текущий виток цикла и начинает выполнение тела цикла со следующей итерацией.

Цикл с предусловием

Для выполнения некоторого блока кода до достижения определённого значения существует цикл с предусловием. Такой цикл будет выполняется до тех пор, пока:

  1. Не будет достигнуто условие выхода из цикла;
  2. Не будет встречена директива break.

Сам цикл выглядит следующим образом:

int x = 0;

while (x<1000)

{

x = x + 9;

}

Данный цикл позволит найти самое большое трёхзначное число, кратное 9.

Есть варианты вечного цикла и для while:

while (true)

{

}

Цикл с постусловием

Для выполнения некоторого блока кода до достижения определённого значения существует цикл с предусловием. Такой цикл будет выполняется до тех пор, пока:

  1. Не будет достигнуто условие выхода из цикла;
  2. Не будет встречена директива break.

Данный цикл отличается от цикла с предусловием тем, что здесь сначала выполняется вычисления, а уже затем проверяется некоторое условие.

Сам цикл выглядит следующим образом:

do

{

} while (true);

Массивы данных

Для хранения наборов однотипных данных в C# предусмотрены массивы. В зависимости от задач они разделяются на статические и динамические. Первые всегда фиксированной длины, указанной при объявлении, и не могут содержать больше или меньше значений. Такие массивы в разы производительнее, но не всегда удобны. Динамические массивы в момент инициализации не содержат значений. Количество элементов может быть любым в любой момент времени. Удобны в работе, но более ресурсоёмкие.

Статические массивы

Данный вид массивов крайне прост в работе. Для объявления массива целых чисел на 10 элементов необходимо выполнить следующий фрагмент кода:

int[] a = new int[10];

Для обращения к различным элементам массива необходимо указывать их индексы. Например:

a[0] = 1; // Первый элемент массива = 1

Нумерация во всех массивах начинается с нуля. То есть в массиве из 10 элементов последний индекс 9. При обращении к индексу 10 произойдёт ошибка IndexOutOfRangeException.

При создании статического массива в памяти резервируется место под все элементы, и все элементы заполняются значениями по умолчанию.

Динамические массивы

Для работы с изменяемым набором данных рекомендуется использовать динамические массивы. Они более сложны в обращении, однако позволяют реализовывать в разы более широкий функционал. Для работы с динамическими массивами существует более 40 различных классов. В рамках данного курса будет рассматриваться наиболее простой в обращении – массив-список (List)

Для объявления динамического массива целых чисел необходимо выполнить следующий фрагмент кода:

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

List – один из классов для работы с динамическими массивами. Он позволяет обращаться к любому из элементов массива, добавлять новые элементы в конец массива, и удалять любые элементы по значению или по индексу.

По умолчанию, в массиве содержится 0 элементов. Поэтому прежде чем к нему обращаться, в него необходимо занести данные. Делается это командой Add:

a.Add(10);

a.Add(1);

Теперь массив содержит 2 элемента: 10 и 1. Для изменения значения воспользуемся индексом элемента.

a[0] = 99;

Теперь вместо 10 в первой ячейке массива будет хранится число 99. Для удаления элементов из массива существуют 3 функции:

a.Remove(99);

Данная функция удалит все элементы массива, которые равны 99. Остальные будут сдвинуты, закрывая образовавшиеся пропуски.

a.RemoveAt(0);

Данная функция удалит единственный элемент с первой позиции. Остальные будут сдвинуты на 1 индекс, закрывая образовавшийся пропуск.

a.RemoveAll(i => (i > 10));

Удаление по предикату. Удаляет из массива все элементы, которые удовлетворяют условию (больше 10).

Существуют функции для организации хранения данных. Наиболее удобная – функция Sort. Она выполнят сортировку элементов массива по возрастанию. В качестве алгоритма сортировки автоматически выбирается тот, который позволит за минимальное время выполнить постеленную задачу.

a.Sort();

Аналогично языку SQL в C# существуют агрегатные функции, выполняющие поиск требуемого значения в массиве.

// Количество элементов

// Не функция, а параметр

int c = a.Count;

// Минимальный элемент

int min = a.Min();

// Максимальный элемент

int max = a.Max();

// Сумма элементов

int sum = a.Sum();

Преобразование массивов

Допускается переход от статических к динамическим массивам и наоборот. У каждого массива есть методы ToArray() – преобразовать к статическому массиву и ToList() – преобразовать к динамическому массиву.

Например:

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

int[] b;

b = a.ToArray();

a = b.ToList();

Цикл для обхода элементов массива

Для обхода всех элементов массива применяется цикл foreach:

foreach (var i in a)

{

i++;

}

Например, увеличить все элементы массива a, на 1. На каждой новой итерации в переменную i записывается не индекс, а значение переменной!

Строковый тип данных. Представление в памяти ЭВМ

Строка в C# является особым видом массива элементов char. Каждый отдельный такой элемент является одним символом в строке, и имеет двоякое представление. С одной стороны – это символ, с другой, это числовое значение, соответствующее положению данного символа в таблице Unicode. Поэтому с переменной типа char можно вести себя как угодно:

char c = (char)99;

int a = 10;

a = a + c;

string s = "ab";

s = s + c;

После выполнения данного фрагмента кода в переменную a будет занесено значение выражения 10+99 = 109, а в переменную s, результат конкатенации строк “ab” и “c” = “abc”.

Переменная типа string ведёт себя как динамический массив. К ней можно добавить элементы, например:

string d = "Доброе ";

d = d + "утро!";

Следует отметить, что строка в C# представляется как последовательность символов Unicode, а значит в ней допускаются и управляющие конструкции. При помощи них можно добавлять различные непечатающиеся символы. Например, Enter.

d = d + "\n";

Все управляющие конструкции начинаются с символа «\», а потому его использование без экранирования не допускается. Ниже показаны примеры, как писать пути к файлам:

d = "С:\\Temp\\d.txt";

d = "С:/Temp/d.txt";

d = @"С:\Temp\d.txt";

Функции для работы со строками

Для упрощения работы со строками существует множество различных функций. Вот некоторые из них.

// d = Доброе утро!

Удалить все символы, начиная с 6-го:

d = d.Remove(6);

// d = Доброе

Заменить одну строку на другую:

d = d.Replace("утро", "время суток");

// d = Доброе время суток!

Разбить строку на массив строк, используя разделитель (пробел)

string[] m = d.Split(' ');

// m = {Доброе время, суток!}

Перевести все буквы в верхний регистр и в нижний регистр:

d = d.ToUpper();

// d = ДОБРОЕ УТРО!

d = d.ToLower();

// d = доброе утро!

Функция ToString()

У каждого экземпляра класса имеется функция ToString(). Она возвращает строковое представление текущего экземпляра класса. Считается хорошим тоном разработки переопределять её в своём коде на адекватное значение.

int i = 100;

string b = i.ToString();

В переменной b будет записано значение “100”, но уже в строковом виде.

Формат DateTime. Общие сведения

Формат служит для организации хранения определённого момента времени.

Экземпляр класса DateTime содержит следующие поля:

  • Year – текущий год
  • Month – текущий месяц
  • Day – день в месяце
  • DayOfWeek – номер дня в неделе
  • DayOfYear – номер дня в году
  • Hour – часы
  • Minute – минуты
  • Second – секунды
  • Millisecond – миллисекунды

А также универсальный экземпляр – Now. Now возвращает экземпляр класса DateTime соответствующий текущему моменту времени.

Методы типа

Чтобы запомнить текущий момент времени необходимо проинициализировать переменную значением DateTime.Now

DateTime dt = DateTime.Now;

Если необходимо прибавить или отнять определённое количество дней, часов, минут и т.д. существуют методы AddDays, AddHours, AddMinutes и т.д. Например, следующий фрагмент кода вернет момент времени, произошедший 1,5 суток назад:

dt = dt.AddDays(-1.5);

// Знак – перед числом означает то, что мы вычитаем значение.

Функция ToString()

Одной из самых богатых реализаций функции ToString() является DateTime.ToString(). В зависимости от указанных параметров в скобках, будет выполнено преобразование строки в требуемый формат. Вот только некоторые из них:

DateTime dt = DateTime.Now;

string a = dt.ToString("d");

// заменяя d на соответствующую букву получим разных форматированный вывод

// d: 6/15/2008

// D: Sunday, June 15, 2008

// f: Sunday, June 15, 2008 9:15 PM

// F: Sunday, June 15, 2008 9:15:07 PM

// g: 6/15/2008 9:15 PM

// G: 6/15/2008 9:15:07 PM

// m: June 15

// o: 2008-06-15T21:15:07.0000000

// R: Sun, 15 Jun 2008 21:15:07 GMT

// s: 2008-06-15T21:15:07

// t: 9:15 PM

// T: 9:15:07 PM

// u: 2008-06-15 21:15:07Z

// U: Monday, June 16, 2008 4:15:07 AM

// y: June, 2008

//

// 'h:mm:ss.ff t': 9:15:07.00 P

// 'd MMM yyyy': 15 Jun 2008

// 'HH:mm:ss.f': 21:15:07.0

// 'dd MMM HH:mm:ss': 15 Jun 21:15:07

// '\Mon\t\h\: M': Month: 6

// 'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

Классы в C#. Классы и экземпляры классов

C# является объектно-ориентированным языком программирования. Для удобства организации хранения и обработки данных применяется классовая модель хранения данных.

Класс – это описание характерных свойств объекта, его возможностей и действий.

Класс – это описание определённой группы однотипных объектов, для которых характерен один и тот же набор данных, и одно и то же поведение.

Экземпляр класса – это конкретный реальный объект, описываемый конкретным классом.

Например:

FileInfo – это класс, описывающий файл, его свойства. Он содержит методы и функции для его переименования, перемещения, удаления, клонирования и т.д. Класс описывает некоторую абстрактную сущность.

А вот уже файл «C:\boot.ini» - уже экземпляр класса. Он содержит все те же методы и функции класса, но уже все они применимы только к этому конкретному файлу.

Экземпляр класса объявляется также, как и переменная.

FileInfo f;

Здесь FileInfo – класс, а f – экземпляр этого класса. За объявлением следует и инициализация. Инициализируется экземпляр класса с использованием ключевого слова new.

f = new FileInfo("C:\boot.ini");

Объявление может быть совмещено с определением.

А вот теперь вопрос: равны ли экземпляры класса f1 и f2?

FileInfo f1, f2;

f1 = new FileInfo("C:/Temp/d.txt");

f2 = new FileInfo("C:/Temp/d.txt");

if (f1 == f2) {

// Равны ли эти объекты?

}

Хоть и речь идёт об одинаковых файлах, они представляют собой разные объявления, а следовательно и разные области памяти. Следовательно f1 != f2.

А теперь изменим код:

FileInfo f1, f2;

f1 = new FileInfo("C:/Temp/d.txt");

f2 = f1;

if (f1 == f2) {

// Выполнится ли этот код?

}

Здесь обе переменные представляют собой одну и ту же область памяти. Ссылка на первое объявление передалась f2 в этой строчке: f2 = f1. Данный код выполнится и f1 == f2.

Объявление классов

Во время разработки программного продукта могут потребоваться пользовательские классы. Например, для работы деканата необходимо разместить информацию о студентах факультета. Каждый студент имеет № студенческого билета, фамилию, имя, № группы, средний балл, № курса.

В этом случае структура класса Student будет выглядеть следующим образом:

public class Student {

public int Number;

public string FirstName;

public string LastName;

public string Group;

public int Course;

public float Graduate;

}

Перед описанием каждой переменной и класса стоит идентификатор public. Он указывает на то, что переменные будут доступны не только процедурам и функциям внутри класса.

Примечание: Если проводить параллель с SQL, то класс – это названия столбцов таблицы, экземпляр класса – это кортеж данных, а таблица – это динамический массив из элементов данного класса.

Для того, чтобы объявить нового студента, необходимо написать следующий код:

Student s = new Student();

s.Number = 99122;

s.Course = 1;

s.FirstName = "Пётр";

s.LastName = "Иванов";

s.Group = "ОЗБП-101";

s.Graduate = 4.5f;

Организация массивов для экземпляров классов аналогична переменным типа. Например, массив студентов:

List<Student> Base = new List<Student>();

Оптимизация работы с массивами, с использованием лямба-выражений

Невероятно эффективны лямбда-выражения для выполнения задач, согласно определённому условию.

Приведём пример для работы с экземплярами классов. Например, перед 1 сентября, необходимо увеличить всем студентам курс на 1, а студентов 4 курса из базы удалить.

// Удаляем всех студентов 4 курса

Base.RemoveAll(student => student.Course == 4);

// Увеличиваем остальным курс на 1

Base.ForEach(student => student.Course++);

Здесь представлены примеры работы функции RemoveAll, с проверкой условия, является ли студент выпускником или нет, и функции ForEach для выполнения определённого фрагмента кода для каждого элемента массива без необходимости расписывать весь цикл целиком.

При помощи параметризованной функции Sum возможно посчитать сумму по определённому параметру класса, например, найти средний балл по факультету:

float f = Base.Sum(student => student.Graduate);

f = f / Base.Count;

Здесь сначала находится сумма всех средних баллов студентов, а затем делится на количество студентов на факультете.

Процедуры и функции внутри класса

В C#, также, как и в C++ нет понятия процедуры или подпрограммы. Им на смену пришли функции, которые не возвращают значение.

Пример объявления функции следующий:

public string GetName() {

string name = FirstName + " " + LastName;

return name;

// Код здесь и ниже никогда не выполнится

}

Данная функция вернёт имя студента в формате «Имя Фамилия».

Здесь, идентификатор public означает, что функция доступна извне класса, string указывает на возвращаемый тип данных (возвращается строка), в круглых скобках указывается параметры (здесь в них нет необходимости). В фигурных скобах обязательно идёт описание функции. Возвращаемое значение формируется после ключевого слова return. По его достижению, возвращается значение и работа функции прерывается.

Работа с GUI. Создание проекта Windows Forms

Для создания нового проекта приложения небходимо воспользоваться сочетанием клавиш Ctrl+Shift+N, либо перейти в меню Файл – Создать – Проект…

Рисунок 5. Создание нового проекта

Далее будет предложено выбрать тип создаваемого проекта. Visual Studio поддерживает десятки различных языков программирования и тысячи различных шаблонов проектов. Для изучения основ программирования нам будет достаточно выбрать шаблон Windows Forms во вкладке Visual C#

Рисунок 6. Выбор типа проекта

Не забудьте указать требуемую версию .Net Framework в верхней части окна (более старые версии 3.5, 3.0, 2.0 имеют меньшие возможности, однако установлены на большем числе ЭВМ).

Выберите папку, в которой будет располагаться проект, введите имя и нажмите ОК.

После этого, новый проект будет создан, а пользователю будет отображен макет разрабатываемой формы.

Рисунок 7. Результат создания проекта

Разработка формы Windows

После того, как был создан проект приложения, можно приступить к разработке. Создадим элементарное приложение, которе при добавлении кнопки выводит надпить «Привет мир!».

Для этого с панели инструментов на макет формы переносим элемент Button. Выделяем перетащенный элемент и в правой колонке (Свойста) в поле Text укажем, как будет называться наша кнопка. В поле BackColor выберем цвет, которым будет залит фон кнопки

Рисунок 8. Выбор свойства кнопки

После указания свойств кнопки её вид измениться следующим образом:

Рисунок 9. Новый вид кнопки

Добавим обработку нажатия на неё. Для этого дважды щёлкните по ней. После этого будет открыт код, который будет выполнен в том случае, если пользователь во время работы программы нажмёт на кнопку.

private void button1_Click(object sender, EventArgs e)

{

}

Изменим его таким образом, чтобы по нажатию на кнопку отображалось сообщение «Привет мир!». Для этого напишем внутри процедуру следующий код:

MessageBox.Show("Привет мир!");

В итоге код должен будет выглядеть следующим образом:

using System;

using System.Windows.Forms;

namespace Example_1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

MessageBox.Show("Привет мир!");

}

}

}

Для того, чтобы запустить созданный проект нажмите кнопку F5. В результате работы программа будет выглядеть следующим образом:

Рисунок 10. Результат выполнения программы

Глава 2. Практическая часть

Подготовка материала

На первом этапе разработки справочника были проанализированы возможные способы его разработки, а также средства, которые для этого необходимы. Для большей гибкости и удобства работы был выбран язык HTML. Цвета справочника и содержания разделов перекликаются с тем, что содержит справочник MSDN – главное и наиболее полное хранилище знаний о языке C#. Для упрощения вёрстки HTML, был выбран текстовый редактор Microsoft Office Word 2013, обладающий возможностью сохранять документы в формате HTML.

На первом этапе был подготовлен макет страницы. Выбраны цвета и шрифтовые схемы:

Рисунок 11. Разработка базового шаблона для материала

Далее наступил процесс разработки и компоновки материала. Главной целью данного справочника было максимально просто и быстро объяснить о том, что такое язык C#.

Результатом подготовки материла стали 48 HTML-файлов, каждый из которых максимально простым и доступным языком раскрывал содержания определённой темы:

Рисунок 12. Материалы для справочной системы

Разработка приложения-справочника

Само приложение было разработано на языке C#. Для разработки приложения использовалась версия Visual Studio 2010.

На первом шаге был создан новый проект типа Windows Forms Application

Рисунок 13. Создание нового проекта

После создания нового проекта на форму был добавлен компонент SplitContainer:

Рисунок 14. Компонент SplitContainer

В окне «Свойства» для него были заданы следующие значения:

Dock = Fill

FixedPanel = 1

Такие параметры закрепляют элемент на форме, растягивая его на весь экран, и не дают меняться размеру левой панели, в которой будет располагаться дерево с разделами справочника.

После этого выделяем форму. Для свойства Text установим значение «Справочная система по языку C#». После этого заголовок формы должен будет изменить своё название.

На следующем этапе на форму были добавлены ещё два контейнера: WebBrowser и TreeView

Первый компонент представляет собой миниатюрную, встраиваемую версию веб-браузера Internet Explorer, в котором и будут отображаться файлы справки, а второй – дерево, в котором будут расположены разделы для удобной навигации.

Первый элемент располагается в правой части родительского контейнера, а второй – в левой. В окне свойств для обоих объектов необходимо установить режим заполнения = Fill

Рисунок 15. Окно свойств элемента WebBrowser

В результате окно формы должно выглядеть следующим образом:

Рисунок 16. Внешний вид разрабатываемой формы

Теперь необходимо настроить иерархию для справочника. Выбираем элемент TreeView и в окне свойств нажимаем на пункт «Изменить узлы»

Рисунок 17. Гиперссылка для изменения узлов

Добавляем новые элементы кнопками «Добавить корень» и «Добавить ветвь». Путём перемещения узлов создадим такую структуру, которая бы максимально структурированно и подробно описывала бы все разделы справочника.

Изменение разделов стравочника организуем через вкладку «Свойства», отображаемую справа от иерархии. Здесь необходимо лишь изменить значение Text, на требуемое.

Рисунок 18. Редактор узлов дерева

После того, как вся структура была создана перейдём к настройке ссылок на нужные страницы. Для этого воспользуемся полем Tag и укажем в нём названия файлов, которые мы планируем отобразить по нажатию на данный пункт дерева. У тех разделов, у которых не должно быть ссылок, значение поля Tag оставим пустым, как на рисунке 18.

Рисунок 19. Свойства элемента, после указания поля Tag

Разработанную форму уже сейчас можно запустить. Однако из-за того, что никаких действий в коде не прописано, разделы справочника не будут отображаться в компоненте WebBrowser.

Описание взаимодействия

В языке C# предусмотрены определённые поля, которые активируются в том случае, когда пользователь совершает с компонентом какие-либо действия. Такие поля называются событием. Для элемента TreeView одно из них – это действие на выбор раздела справочника. Чтобы перейти к его коду необходимо дважды щёлкнуть ко нему:

Рисунок 20. Была создана подписка на событие.

В программном коде подписки укажем следующие действия:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

{

// Получаем тот пункт справочника, который выбрал пользователь:

var m = treeView1.SelectedNode;

// Определяем, требуется ли для него переход на другую страницу:

if (m.Tag != null) {

// Если требуется, то выполняем переход по относительной ссылке:

// Путь состоит из папки, в которой лежит приложение - Application.StartupPath,

// Каталога book и имени самого файла, которое мы получили из значения поля Tag

webBrowser1.Url = new Uri(Application.StartupPath + @"\book\" + m.Tag.ToString());

}

}

Убедимся в том, что программа корректно работает. Запустим её клавишей F5:

Рисунок 21. Результат работы программы

Закдючение

Разработка иконки приложения

Для улучшения визуальных характеристик приложения была разработана иконка. Для разработки был использован графический редактор GIMP.

Рисунок 22. Иконка приложения «Справочник по языку C#»

Для того, чтобы данная иконка корректно отображалась необходимо во вкладке Properties указать путь к этому изображению. Вкладка Properties находится в обозревателе решений:

Рисунок 23. Обозреватель решений

После открытия вкладки Properties необходимо найти поле Значок:

Рисунок 24. Вкладка Properties

И выбрать разработанную иконку приложения.

Для того, чтобы данный значок отображался и при открытии приложения, необходимо сделать следующее:

Перейдите к редактору формы (вкладка Form1.cs [Конструктор]), щёлкните по заголовку формы и в окне «Свойства» около поля Icon перейдите к выбору значка. Укажите тот же самый файл. В результате значок формы изменится:

Рисунок 25. Значок формы изменился

Запускаем приложение (F5) и убеждаемся, что оно работает:

Рисунок 26. Результат работы программы

Список литературы

  1. Справочник MSDN [Электронный ресурс]: https://msdn.com, (дата обращения: 20.08.2018)
  2. 2. Албахари, Джозеф C# 3.0. Справочник / Джозеф Албахари , Бен Албахари. - М.: БХВ-Петербург, 2012. - 944 c.
  3. 3. Албахари, Джозеф C# 3.0. Справочник / Джозеф Албахари , Бен Албахари. - М.: БХВ-Петербург, 2013. - 944 c.
  4. 4. Альфред, В. Ахо Компиляторы. Принципы, технологии и инструментарий / Альфред В. Ахо и др. - М.: Вильямс, 2015. - 266 c.
  5. 5. Бишоп, Дж. C# в кратком изложении / Дж. Бишоп, Н. Хорспул. - М.: Бином. Лаборатория знаний, 2013. - 472 c.
  6. 6. Вагнер, Билл С# Эффективное программирование / Билл Вагнер. - М.: ЛОРИ, 2013. - 320 c.
  7. 7. Зиборов, В.В. Visual C# 2012 на примерах / В.В. Зиборов. - М.: БХВ-Петербург, 2013. - 480 c.
  8. 8. Зиборов, Виктор Visual C# 2010 на примерах / Виктор Зиборов. - М.: "БХВ-Петербург", 2011. - 432 c.
  9. 9. Ишкова, Э. А. Самоучитель С#. Начала программирования / Э.А. Ишкова. - М.: Наука и техника, 2013. - 496 c.
  10. 10. Касаткин, А. И. Профессиональное программирование на языке си. Управление ресурсами / А.И. Касаткин. - М.: Высшая школа, 2012. - 432 c.
  11. 11. Лотка, Рокфорд C# и CSLA .NET Framework. Разработка бизнес-объектов / Рокфорд Лотка. - М.: Вильямс, 2010. - 816 c.
  12. 12. Мак-Дональд, Мэтью Silverlight 5 с примерами на C# для профессионалов / Мэтью Мак-Дональд. - М.: Вильямс, 2013. - 848 c.
  13. 13. Марченко, А. Л. Основы программирования на С# 2.0 / А.Л. Марченко. - М.: Интернет-университет информационных технологий, Бином. Лаборатория знаний, 2011. - 552 c.

Приложение 1

Исходный код программы. Файл Form1.cs:

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;

namespace ProgrammingBook

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

{

// Получаем тот пункт справочника, который выбрал пользователь:

var m = treeView1.SelectedNode;

// Определяем, требуется ли для него переход на другую страницу:

if (m.Tag != null) {

// Если требуется, то выполняем переход по относительной ссылке:

// Путь состоит из папки, в которой лежит приложение - Application.StartupPath,

// Каталога book и имени самого файла, которое мы получили из значения поля Tag

webBrowser1.Url = new Uri(Application.StartupPath + @"\book\" + m.Tag.ToString());

}

}

}

}