Розробка гетерогенного проекту

Лабораторна робота № 4

 

Виконав

студент групи СПс-31

Підгайний Олександр

 

Тернопіль – 2013

Мета:набути практичних навиків у розробці проектів на декількох мовах програмування в середовищі .NET.

Завдання:розробити довільний проект, що складається з компонентів реалізованих не менше ніж на трьох різних мовах.

 

Хід роботи

 

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

 

Було обрано наступні мови програмування:

· C#;

· VB.NET;

· F#;

 

З них на мові C# буде написана клієнтська програма для відображення та взаємодії з даними, а також вона буде використовувати функції з бібліотек на інших мовах програмування. Функції запису будуть знаходитись в бібліотеці на мові VB.NET, серед них буде дві: функція дозапису в кінець файлу, та функція перезапису повного списку. Функція зчитування з файла буде написана на мові F#.

Для початку створюємо новий пустий проект за допомогою команди: «File->New->Project->Blank solution». Після цього у створений солюшн добавимо першу бібліотеку (рисунок 1.1).

Рисунок 1.1 – Створення бібліотеки F#

 

У файл Library1 запишемо наступний код:

Лістинг файлу Library1.fs

 

namespace FSharpLib

 

type FSharpReader() =

member x.ReadFromFile filePath = System.IO.File.ReadLines(filePath);;

 

Далі добавимо бібліотеку на мові VB.NET (рисунок 1.2).

 

Рисунок 1.2 – Створення бібілотеки VB.NET

 

У файл VBWriter.vb запишемо наступний код:

Лістинг файлу VBWriter.vb:

 

Public Class VBWriter

 

Public Function WriteTofile(ByVal path As String, ByVal tasks As List(Of String))

 

If System.IO.File.Exists(path) = True Then

 

Dim objWriter As New System.IO.StreamWriter(path)

For Each item As String In tasks

objWriter.WriteLine(item, True)

Next

objWriter.Close()

End If

Return Nothing

End Function

 

Public Function WriteNewTofile(ByVal path As String, ByVal task As String)

 

If System.IO.File.Exists(path) = True Then

Dim objWriter As New System.IO.StreamWriter(path, True)

objWriter.WriteLine(task)

objWriter.Close()

End If

Return Nothing

End Function

 

End Class

 

Тепер створюємо новий консольний проект на мові С#, який слугуватиме клієнтським додатком (рисунок 1.3).

Рисунок 1.3 – Створення консольного додатку

 

Перед тим як писати безпосередньо необхідно додати посилання на раніше створені бібліотеки, для цього виконуємо команду «References->Add Reference» і в наступному списку обираємо дві раніше створені бібліотеки(рисунок 1.4).

Рисунок 1.4 – Підключення бібілотек

 

Далі добавимо наступний код у головну функцію Main:

Лістинг функції Main:

 

static void Main(string[] args)

{

const string path = @"D:\list.txt";

bool isActive = true;

int menu;

FSharpReader reader = new FSharpReader();

VBWriter writer = new VBWriter();

List<string> TODOlist = reader.ReadFromFile(path).ToList();

while (isActive)

{

 

Console.WriteLine("1. Show tasks \n" +

"2. Add new task \n" +

"3. Edit task \n" +

"4. Delete task \n" +

"5. Exit");

menu = Convert.ToInt32(Console.ReadLine());

switch (menu)

{

case 1:

{

Console.Clear();

TODOlist = reader.ReadFromFile(path).ToList();

Console.WriteLine("My TODO list: \n");

foreach (string s in TODOlist)

{

Console.WriteLine("- " + s);

}

Console.WriteLine();

break;

}

case 2:

{

Console.Clear();

Console.Write("Enter task: ");

string task = Console.ReadLine();

writer.WriteNewTofile(path, task);

Console.Clear();

break;

}

case 3:

{

Console.Clear();

Console.Write("Enter task number: ");

int num = Convert.ToInt32(Console.ReadLine()) - 1;

Console.Write("Enter new task: ");

string newTask = Console.ReadLine();

TODOlist[num] = newTask;

Console.WriteLine(TODOlist[num].ToString());

Console.ReadKey();

writer.WriteTofile(path, TODOlist.ToList());

Console.Clear();

break;

}

case 4:

{

Console.Clear();

Console.Write("Enter task number: ");

int num = Convert.ToInt32(Console.ReadLine()) - 1;

TODOlist.RemoveAt(num);

writer.WriteTofile(path, TODOlist.ToList());

Console.Clear();

break;

}

case 5:

{

Environment.Exit(0);

break;

}

default:

{

Console.Write("Enter proper number!");

Console.Clear();

break;

}

}

}

}

 

 

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

Рисунок 1.5 – Результат виконання вивдення з файлу

 

Пукнти 2,3,4 здійснюють відповідно додавання нового, редагування та видалення вказаного завдання. Пункт 5 – вихід з програми.

 

 

ВИСНОВКИ

 

Результатом даної лабораторної роботи є solution, в кому знаходяться три проекти: бібліотека класів на F#, бібліотека класів на VB.NET, консольний додаток на C#. Дана лабораторна робота допомогла здобути навички у написанні бібліотек класів на різних мовах .NETфреймворку та використання їх у інших мовах. Даний підхід є досить важливий оскіли дозволяє використувавти переваги одних мов для виконання поставленого завдання в інших.

Щодо даного проекту, то спосіб зчитування з файлу у мові F# є досить економніиший в плані коду чим в інших мовах, а також мені до вподоби легкість запису даних через VB.NET. Щодо написання клієнтського додатку, я притримувався і притримуюсь мови програмування C#.