3 Разработка програмного обеспечения
3.1 Выбор средства автоматизации разработки ПО
3.1.1 MonoDevelop среда программирования
MonoDevelop IDE – свободная мультиплатформенная среда разработки, предназначенная для создания приложений на языках C#, C, C++, Java, Visual Basic.NET, CIL, Nemerle, Boo. На данный момент среда является частью проекта Mono и является одной из самых лучших IDE для разработки проектов на базе Mono.
MonoDevelop обладает всеми основными возможностями, необходимыми для современной интегрированной среды разработки:
1)настраиваемая подсветка синтаксиса;
2)автоматическое дополнение кода;
3)выделение блоков кода с возможностью их сворачивания/разворачивания;
4)интеллектуальная работа с отступами в коде;
5)возможности рефакторинга (переименование классов и методов, автоматическая реализация интерфейсов в производных классах);
6)удобная навигация по коду (навигация по классам, методам, свойствам);
7)визуальный редактор форм для проектов на Gtk#;
8)создание нескольких раскладок интерфейса и переключение между ними;
9)множество стандартных шаблонов проектов;
10)возможность автоматического создания бинарных пакетов и архивов после компиляции исходного кода;
11)работа с базами данных;
12)создание приложений с GUI, поддерживающим несколько языков;
13)интеграция с Subversion для управления исходным кодом;
14)поддержка NUnit для создания Unit-тестов;
15)автоматическое создание документации;
16)расширение возможностей за счет дополнений и внешних инструментов;
17)возможность интеграции с Microsoft Visual Studio и .NET Framework (в среде Microsoft Windows).
3.1.2 Язык программирования С#
С учетом того, что принципы .NET так радикально отличаются от предшествующих технологий, Microsoft разработала новый язык программирования, C# (произносится "си-диез"), специально для использования с этой новой платформой. Язык C# является языком программирования, по синтаксису очень похожим на Java (но не идентичным ему). Однако называть C# "переработанным" вариантом Java будет неверно. C#, как и Java, основан на синтаксических конструкциях C++. Так же, как и Java, C# можно называть "рафинированной" версией C++ – в конце концов, это языки одного семейства.
Многие синтаксические конструкции C# построены с учетом решений, принятых в Visual Basic 6.0 и C++. Например, как и в VB6, в C# поддерживаются формальные свойства типов (в противоположность традиционным методам get и set) и возможность объявления методов с переменным числом аргументов (через массивы параметров). Подобно C++, в C# позволяется перегрузка операций, а также создание структур, перечней и функций обратного вызова (посредством делегатов).
Благодаря тому, что C# является гибридом множества языков, он является продуктом, который синтаксически так же "чист", как Java (если не "чище"), почти так же прост, как VB6, и обладает почти такой же мощью и гибкостью, как C++ (без соответствующих "ужасных" конструкций). По сути, язык C# предлагает следующие возможности (многие из которых присущи и всем другим языкам программирования, обеспечивающим поддержку .NET).
Особенности языка С#:
1)Не требуется никаких указателей! Программы на C# обычно не требуют прямого обращения к указателям (хотя имеется возможность получить к ним доступ на более низком уровне, если вы сочтете это абсолютно необходимым).
2)Автоматическое управление памятью через сборку мусора. По этой причине в C# не поддерживается ключевое слово delete.
3)Формальные синтаксические конструкции для перечней, структур и свойств классов.
4)Аналогичная C++ перегрузка операций для пользовательских типов, но без лишних сложностей (например, вам не требуется контролировать "возвращение *this для связывания").
5)В C# 2005 имеется возможность строить общие типы и общие члены с использованием синтаксиса, очень похожего на шаблоны C++.
6)Полная поддержка техники программирования, основанной на использовании интерфейсов.
7)Полная поддержка технологии аспектно-ориентированного программирования (АОП) через атрибуты. Эта ветвь разработки позволяет назначать характеристики типам и их членам, чтобы уточнять их поведение.
Возможно, самым важным для правильного понимания языка C#, поставляемого Microsoft в связке с платформой .NET, является то, что получаемый с помощью C# программный код может выполняться только в среде выполнения .NET (вы не сможете использовать C# для построения "классического" COM-сервера или автономного приложения Win32 API). Официальный термин, который используется для описания программного кода, предназначенного для среды выполнения .NET, – управляемый программный код (managed code). Бинарный объект, содержащий такой управляемый программный код, называется компоновочным блоком (подробнее о компоновочных блоках мы поговорим немного позже). С другой стороны, программный код, который не может непосредственно управляться средой выполнения .NET, называется неуправляемым программным кодом (unmanaged code).
3.2 Реализация программного продукта
3.2.1 Создание окна для перехода в другие меню
Алгоритм действий для работы программы:
1) с помощью средств Gtk# создать внешний вид окна (рис3.1);
Рисунок - 3.1 Внешний вид окна
2)Задать в настройках кнопкам сигналы ;
3) Создать новые окна в среде;
4) Сделать привязку новых окон к кнопкам.
Код программы представлен ниже :
public partial class MainWindow: Gtk.Window
{
public MainWindow (): base (Gtk.WindowType.Toplevel)
{Build ();}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}// Кнопка «меню сотрудника»
protected void OnButton1Clicked (object sender, EventArgs e)
{
Empl empl=new Empl();
empl.Show ();
} // Кнопка «меню журнал»
protected void OnButton2Clicked (object sender, EventArgs e)
{
Jrn jrn=new Jrn();
jrn.Show ();
}
Листинг 3.1 - Создание окна и привязка к кнопкам окон
По такому же принципу создаются все окна предназначенные для перехода (выбора) в другое меню.
3.2.2 Подключение базы данных в С#
Для использования команд которые позволяют работать с БД, в Mono используется специальная библиотека которая подключается командой "using Npgsql;". Существует множество вариантов подключения нашей программы БД но в данном курсовом проекте используется самый простой но не самый эффективный способ.
Код программы приведен ниже:
NpgsqlConnection con = new NpgsqlConnection ("Server = localhost; Database = mydb; USER ID = postgres; password = postgres");
NpgsqlCommand com = con.CreateCommand ();
Листинг программы - 3.2 Подключение к базе данных
Подключение к базе данных осуществляется с помощью двух команд: установка соединения с БД "NpgsqlConnection" и передача команд в БД "NpgsqlCommand" . В данном курсовом подключение к БД происходит в каждой функции (где это необходимо) отдельно.
Далее в переменную con записывается запрос на подключение к базе данных. Путь на подключение к БД указывается системными командами:
1)Server="здесь как правило пишется адрес сервера" в данном случае это "localhost или 127.0.0.1";
2)Database="выбирается база данных к которой хотим подключиться" в данном случае это "mydb";
3)USER ID="имя пользователя" в данном случае заходим под пользователем "postgres" ;
4)password="в водим пароль пользователя" в данном случае это "postgres";
3.2.3 Функция для просмотра полного содержания журнала
Алгоритм работы программы:
1)Из окна выбора функций выбираем нужную нам функцию в данном случае "Полный список сотрудников" (рис.3.2)
Рисунок -3.2 Меню сотрудников
2) Дале происходит подключение к БД ;
3) Берутся данные из БД и выводиться на отдельный экран (рис3.3)
Рисунок - 3.3 Вывод полного списка сотрудников
Код программы приведен ниже
public partial class EmplList : Gtk.Window
{ NpgsqlConnection con;
NpgsqlCommand com;
public EmplList () :
base(Gtk.WindowType.Toplevel)
{ this.Build ();
con = new NpgsqlConnection ("Server = localhost; Database = mydb; USER ID = postgres; password = postgres");
com = con.CreateCommand ();
NpgsqlDataReader reader;
string sql = "SELECT * FROM empl;";
TreeStore ts = new TreeStore (typeof(string), typeof(string), typeof(string), typeof(string), typeof(string));
TreeIter iter;
con.Open ();
com.CommandText = sql;
reader = com.ExecuteReader ();
while (reader.Read ()) {
string id = reader.GetInt32 (reader.GetOrdinal ("id")).ToString ();
string name = reader.GetString (reader.GetOrdinal ("name"));
string o_name = reader.GetString (reader.GetOrdinal ("o_name"));
string s_name = reader.GetString (reader.GetOrdinal ("s_name"));
string notice = reader.GetString (reader.GetOrdinal ("notice"));
iter = ts.AppendValues (id, name, o_name, s_name, notice);}
treeview1.Model=ts;
CellRenderer cr;
TreeViewColumn tc;
tc=new TreeViewColumn();
cr=new CellRendererText();
tc.Title="ID";
tc.PackStart(cr,true);
tc.AddAttribute(cr,"text",0);
treeview1.AppendColumn(tc);
tc=new TreeViewColumn();
cr=new CellRendererText();
tc.Title="Имя";
tc.PackStart(cr,true);
tc.AddAttribute(cr,"text",1);
treeview1.AppendColumn(tc);
tc=new TreeViewColumn();
cr=new CellRendererText();
tc.Title="Отчество";
tc.PackStart(cr,true);
tc.AddAttribute(cr,"text",2);
treeview1.AppendColumn(tc);
tc=new TreeViewColumn();
cr=new CellRendererText();
tc.Title="Фамилия";
tc.PackStart(cr,true);
tc.AddAttribute(cr,"text",3);
treeview1.AppendColumn(tc);
tc=new TreeViewColumn();
cr=new CellRendererText();
tc.Title="Справка";
tc.PackStart(cr,true);
tc.AddAttribute(cr,"text",4);
treeview1.AppendColumn(tc);
con.Close();
reader.Close();
com.Dispose();}}
Листинг программы - 3.3 программа вывода всего содержимого таблицы на экран
Программа поиска и вывода информации пишется также, за исключением некоторых различий, а именно формировании запроса на БД и добавляется новый параметр по которому собственно и происходит поиск.
3.2.4 Функция добавления нового сотрудника
Алгоритм работы программы:
1) Из окна выбора функций выбираем нужную нам функцию в данном случае "Добавить нового сотрудника" (рис 3.2)
2) Появляется окно с полями ввода информации (рис 3.4)
Рисунок - 3.4 Окно добавления сотрудника в журнал
3)По нажатию кнопки ОК данные из полей которые в коде будут иметь названия "Entry" запишутся в переменные а те в свою очередь передаться через запрос в БД.
Код программы представлен ниже
protected void OnButton1Clicked (object sender, EventArgs e)
{con = new NpgsqlConnection("Server = localhost; Database = mydb; USER ID = postgres; password = postgres");
com = con.CreateCommand();
string a = entry2.Text;
string name = entry3.Text;
string ot_name = entry4.Text;
string s_name = entry5.Text;
string notis = entry6.Text;
string sql = string.Format("INSERT INTO empl(id, name, o_name, s_name, notice)VALUES ('{0}', '{1}', '{2}', '{3}', '{4}');",a, name, ot_name, s_name, notis);
con.Open();
com.CommandText=sql;
com.ExecuteNonQuery();
con.Close();
this.Hide(); }}
Листинг программы -3.4 Добавление новой записи в БД.
Программа добавления пользователе и удаления пользователя фактически идентичны за исключением формируемого запроса в PostgreSQL и количество переменных (т.к. удалить строку можно по 1 параметру из строки)
3.3 PostgreSQL
Объектно – реляционная система управления базами данных(ОРСУБД), разработка которой ведется с 1977г.Она считается самой совершенной СУБД, распространяемой на условиях открытых исходных текстов. В PostgreSQL реализованы многие возможности традиционно встречавшиеся только в масштабных коммерческих продуктах.
3.3.1 Создание и удаление базы данных
В PostgreSQL существует два способа создания новых баз данных: команда SQLCREATEDATABASE и программа createdb, а отличия между ними заключается в том, что работает в режиме командной строки, и позволяет включить комментарии в базу данных одновременно с её созданием. Для создания БД нужно быть суперпользователем PostgreSQL. По аналогии с созданием базы данных в PostgreSQL предусмотрено два способа удаления БД из системы: команда DROPDATABASE и программа dropdb. Так же при удалении БД уничтожаются все таблицы, данные и объекты, хранящиеся в этой базе.
3.3.2 Создание и удаление таблицы
В языке SQL таблицы создаются командой CREATETABLE. Минимальный набор параметров включает имя таблицы и описания полей , состоящие из имени поля и типа данных. А удаляются таблица командой DROPTABLE. Команда имеет следующий синтаксис (таблица – имя удаляемой таблицы);
CREATE TABLE empl (ID serial, s_name varchar(16), o_name varchar(16), s_name varchar(30) , notice text);
Листинг - 3.5 создания таблицы в PostgreSQL
В данном листинге создается таблица "empl", которая показан на (рис. 3.5)в неё вводятся столбцы "ID" с типом serial, который означает, что первый столбец автоинкрементом нумеруется. s_name с типом varchar(16), означает. Что строка вмещает в себя длину в 16 символа включая пробелы. Так же в таблице используется тип text, который означает, что строка с текстом безразмерна и сама растягивается, но с этим типом нужно быть осторожно т.к. можно получить перегрузку строки. Созданная таблица представлена на (рис 3.5)
Рисунок 3.5 – Таблица empl в PostgreSQL
3.3.3 SQL запросы
В данной программе применяются 3 типа запросов, явлющиеся операторами манипуляции данными (DML):
SELECT - считывает (вытаскивает) данные, удовлетворяющие заданным условиям;
INSERT - добавляет новые данные ;
DELETE - удаляет данные;
Общий вид запроса SELECT:
1. SELECT * FROM empl;
Данный запрос показывает все содержимое таблицы empl.
2. SELECT * FROM empl WHERE id= 1;
Данный запрос покажет все строки в таблице empl где все id будут равны 1. Реализация данного запроса показана на (рис 3.6)
Рисунок - 3.6 Реализация запроса SELECT
Общий вид запроса INSERT:
1. INSERT INTO empl * VALUES (" значения через запятую") ;
Данный вопрос компакте но есть высокая вероятность допустить ошибку поэтому принято использовать более обширный вариант.
2. ("INSERT INTO empl (id, name, o_name, s_name, notice) VALUES ('1', 'Сергей', 'Сергеевич', 'Брагин', 'Выпускник ХНУРЭ');
Данный запрос более корректен чем предыдущий его вариант , и после выполнения данного запроса в БД будет добавлено (1|Сергей Сергеевич |Брагин | Выпускник ХНУРЭ ).
Общий вид запроса DELETE:
DELETE FROM empl WHERE ID='1';
Данный запрос удалит в таблице empl строку где id =1 .