4 розробка додатку на c# – «такси в Украине»

Після встановлення пакету програм Windows Phone SDK, запускаємо середовище розробки.

Рисунок 4.1 – Початкова сторінка

 

Для створення нового проекту обираємо пнкт «Создать проект…». У новому вікні потрібно обрати відповідний шаблон, в моєму випадку це «Приложение Windows Phone Pivot».

Рисунок 4.2 – Створення проекту

Pivot - дуже цікавий і корисний елемент, який зручний у використанні для користувача, що працює з великою кількістю даних. Утворено від скорочення слів Пиво ось! (Жарт). На пристроях під управлінням Windows Phone вже є вбудовані програми, які використовують Pivot - наприклад, Calendar, де ви можете перемикатися між режимами agenda і day. Ще один приклад - розділ Settings.

Після створення пректу маємо маємо:

1. Конструктор;

2. Редактор XAML розмітки;

3. Вікно з компонентами проекту;

4. Налаштування елементів(викликається по потребі).

Рисунок 4.3 – Редактор проекту

 

Роботу потрібно розпочати з підключення бібліотек, які не входять до початкового стану проекту. Для цього потрібно відкрити вікно управління бібліотек (потрібнго нажати правою кнопкою миші по назві проекту в вікні з компонентами, і обрати пункт «Управление пакетами NuGet…»).

Рисунок 4.4 – Управління пакетами

Для додатку потрібно підключитидві бібліотеки:

- Microsoft HTTP Client Libraries;

- HTML Agility Pack.

Ці бібліотеки не входять до складу встановленої програми тому їх потрібно завантажити церез інтернет. Також для роботи з HTML потрібна біблотека System.Xml.XPath.dll, яка знаходиться в папці з прогамою.

Microsoft HTTP Client Libraries

Цей пакет включає в себе відправлення запитів по протоколу HTTP, а також HTTPRequestMessage і HttpResponseMessage для обробки HTTP - повідомлень.

Цей пакет не підтримується в Visual Studio 2010, і встановлюється тільки для проектів, спрямованих. NET Framework 4.5, Windows 8, або Windows Phone 8.1, що використовує цей пакет.

Підтримувані платформи:

- NET Framework 4

 

- Windows 8

 

- Windows Phone 8.1

 

- Windows Phone Silverlight 7.5

 

- Silverlight 4

 

- Портативні бібліотеки класів

HTML Agility Pack

HTML - парсер, який будує для читання/запису DOM і підтримує простий XPATH або XSLT (насправді вам не потрібно розуміти XPATH і XSLT, щоб використовувати його, не хвилюйтеся ...). Це .NET код бібліотеки, що дозволяє розбирати «WEB» HTML файлів. Аналізувати дуже терпимо з «реального світу» спотвореної HTML. У об'єктної моделі дуже схожа на те, що пропонує System.Xml, а для HTML документів (або потоків).

Тепер поновлення підтримує LINQ To Objects (через LINQ до інтерфейсу Xml т.п.). Зверніть увагу на нову бета версію з цією функцією

Приклади додатків :

- Фіксація або покоління. Ви можете виправити сторінку , як ви хочете , змінити DOM, додати вузли, копіювати вузли.

- Веб - сканери. Ви можете легко дістатися IMG/SRC або а /hrefs з купою запитів XPath. Ви можете легко відмовитися будь-який існуючий веб -сторінки в RSS канал, наприклад, тільки з файлу XSLT, яка виступає як прив'язки. Прикладом цього надається. Там немає залежності ні від чого іншого, ніж реалізації XPath . Net в . Там немає залежність від MSHTML DLL у браузері Internet Explorer або консорціуму W3C HTML Tidy або ActiveX/COM об'єкта, або що-небудь подібне. Там також немає слідування XHTML або XML , хоча ви можете насправді виробляють XML за допомогою інструменту. Варіант був розміщений тут , на CodePlex є для. NET Framework 2.0. Якщо вам потрібно стару версію, перейдіть до старого сторінку або напишіть мені записку.

Xpath

XPath (XML Path Language) — це мова виразів для адресації частин XML документу, або для обчислення величин (рядкових, числових або булевих) на основі вмісту XMLдокумента.

XPath був створений щоб організувати доступ до елементів документа XML з файлу стилів XSLT. XPath створений на основі XML і є стандартом консорціуму W3C. У XPath використовується компактний синтаксис, відмінний від прийнятого в XML. У 2007 році завершилася розробка версії 2.0, яка тепер є складовою частиною мовиXQuery.

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

На початку вмотивований бажанням надати загальний синтаксис і модель поведінки між XPointer та XSLT, XPath швидко здобув визнання розробників як мова малих запитів, і його підмножини використовуються в інших специфікаціях W3C, як наприклад XML Schema та XForms.

 

Також перед початотком програмування потрібно визначитись з кількістю сторінок в програмі і кількістю класів. Список сторінок складається з:

- MainPage.xaml;

- Taxi.xaml;

- Details.xaml;

- CityTaxi.xaml;

- ListTaxiOblast.xaml;

- TaxiOblast.xaml;

- Setting.xaml.

 

Рисунок 4.5 – Ієрархія сторінок

 

Список створених класів:

- Phone.cs;

- Popular.cs;

- TaxiInTown.cs.

Також до складу програми входять такі елементи:

- Properties (налаштування і маніфест програми)

- Assets (підключені елементи)

- References (підключені бібліотеки)

- App.xaml.cs є файлом коду програмної частини для App.xaml. Код програмної частини представляє код, який приєднується до разделяемому класу сторінки XAML. Спільно XAML і код програмної частини утворюють повний клас . App.xaml.cs є точкою входу для вашої програми. Як і всі сторінки з виділеним кодом, сторінка містить конструктор, який викликає метод InitializeComponent. Вам немає необхідності писати метод InitializeComponent . Він створюється в Visual Studio , і його головною метою є ініціалізація елементів, оголошених в XAML - файлі. App.xaml.cs також містить методи для обробки активації та призупинення програми.

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

Тепер переходимо до обробки коду сторінки MainPage.xaml.

Першим створюємо підключення HTTP Client і обробку HTML коду:

using (var client = new HttpClient())

{

htmlPage = await client.GetStringAsync("http://taxi.poputka.ua/");

}

 

HtmlDocument htmlDocument = new HtmlDocument();

htmlDocument.LoadHtml(htmlPage);

 

Тепер в змінній htmlDocument маємо завантажену HTML сторінку сайту http://taxi.poputka.ua.

За допомогою Xpath можливо створювати запити до потрібного нам елементу коду. Наприклад:

Маємо HTML код:

<div class="centrSide">

<h1>Популярные такси в Украине</h1>

 

<div class="popular">

<h6><i class="spriteSvg">&nbsp;</i><a href="taxi-11000.aspx" title="">ART-Такси</a></h6>

<a href="taxi-ukraine.aspx" title="" class="cityTaxi">По Украине</a>

<p class="pPhone">333-33-37, <b>+38</b>(093) 000-03-08</p>

</div>

 

<div class="popular">

<h6><i class="spriteSvg">&nbsp;</i><a href="taxi-10984.aspx" title="">Междугороднее такси из Киева, АП Бориспо…</a></h6>

<a href="taxi-ukraine.aspx" title="" class="cityTaxi">По Украине</a>

<p class="pPhone"><b>+38</b>(063) 679-00-00, <b>+38</b>(095) 478-54-32</p>

</div>

 

<div class="popular">

<h6><i class="spriteSvg">&nbsp;</i><a href="taxi-11790.aspx" title="">Донецк такси, Шансон, Аэропорт, Вокзал, …</a></h6>

<a href="taxi-ukraine.aspx" title="" class="cityTaxi">По Украине</a>

<p class="pPhone"><b>+38</b>(093) 420-76-21, <b>+38</b>(050) 294-50-74</p>

</div>

 

Потрібно обрати всі елементи з класом «popular», створюємо список «PopularTaxi» і за допомогою функції SelectNodes обираємо їх:

List<Popular> PopularTaxi = new List<Popular>();

foreach (var div in htmlDocument.DocumentNode.SelectNodes("//div[@class='popular']"))

{

Popular newTaxi = new Popular();

newTaxi.Name = div.SelectSingleNode(".//h6/a").InnerText.Trim();

newTaxi.WorkCity = div.SelectSingleNode(".//a").InnerText.Trim();

newTaxi.href = div.SelectSingleNode(".//h6/a").Attributes["href"].Value;

PopularTaxi.Add(newTaxi);}

Так ми отримуємо список з всіма популярними таксі з головної сторінки сайту.

Рисунок 4.6 – Сайт

 

 

Рисунок 4.7 – Список таксі

Аналогічним способом заповняються спистки які залишились. А саме список з обраним таксі(телефонні номери).

Рисунок 4.8 – Обране таксі

Для збереження результату про обране таксі використовується Isolated Settings Storage.

При розробці додатків для Windows Phone в якості основного сценарію на даний момент пропонується використовувати механізм Isolated Storage, який успішно використовується в додатках Silverlight. Давайте спробуємо попрацювати з Isolated Storage.

Isolated Storage припускає, що для кожної програми існує ізольована середу для зберігання данних.Пріложенія не можуть отримувати доступ до сховища інших додатків (в основному з міркувань безпеки). Саме сховище при цьому розділяється на дві частини:

- Isolated Settings Storage;

- Isolated File Storage.

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

Сховище Isolated File Storage призначене для зберігання різних даних у вигляді файлів. При цьому це сховище можна структурувати , використовуючи розбиття на папки. Фактично, це - деякий доступ до файлової системи ізольованого сховища.

Для організації механізму зберігання даних в Windows Phone SDK використовується наступний набір об'єктів:

- System.IO.IsolatedStorage.IsolatedStorageSettings - надає доступ до словника (ключ - значення) налаштувань для поточного сховища (Isolated Settings Storage);

- System.IO.IsolatedStorage.IsolatedStorageFile - дозволяє отримати доступ до сховища даних (Isolate File Storage);

- System.IO.IsolatedStorage.IsolatedFileStream - дозволяє отримати доступ до вмісту файлу в сховищі (Isolate File Storage);

- System.IO.IsolatedStorage. IsolatedStorageException - виняток, що виникає при помилках в роботі з сховищем.

Таким чином на сторінці з інформацією ми зберігаємо посилання, а при запуку додатку перевіряється і скачується інформація про номера. Код:

if (IsolatedStorageSettings.ApplicationSettings.Contains("like"))

{

if (IsolatedStorageSettings.ApplicationSettings["like"] as string != null)

{

GetLike();

}

}

Перевірка, чи заповнений файл з налаштуваннями. Якщо так, то викликаємо функцію GetLike:

public async void GetLike()

{

var likehtmlPage = IsolatedStorageSettings.ApplicationSettings["like"] as string; ;

string newhtmlPage = "";

using (var client = new HttpClient())

{

newhtmlPage = await client.GetStringAsync(likehtmlPage);

}

 

HtmlDocument newhtmlDocument = new HtmlDocument();

newhtmlDocument.LoadHtml(newhtmlPage);

 

nameTaxi.Text = newhtmlDocument.DocumentNode.SelectSingleNode("//h1[@itemprop='name']").InnerText.Trim();

List<Phone> Taxi_Phone = new List<Phone>();

foreach (var div in newhtmlDocument.DocumentNode.SelectNodes("//p[@itemprop='telephone']"))

{

Phone newTaxi = new Phone();

newTaxi.phone = div.SelectSingleNode(".//span").InnerText.Trim();

Taxi_Phone.Add(newTaxi);

}

like.ItemsSource = Taxi_Phone;

}

 

Наступним кроком відбувається вибір міста в якому проживаєш. Цей процес також реалізовано через Isolated Settings Storage. При першому запуску маємо незаповнений список і кнопну для переходу до налаштувань.

Рисунок 4.9 – Пустий список з таксі

 

В налаштуваннях є ListPicker з списком міст України які є константами, також вони мають константні посилання.

Рисунок 4.10 – Сторінка з налаштуваннями

При виборі міста і збереженні налаштувань на головній сторінці додатку відбувається перевірка на те чи заповнений файл з налаштуваннями:

 

if (IsolatedStorageSettings.ApplicationSettings.Contains("city"))

{

if (IsolatedStorageSettings.ApplicationSettings["city"] as string != null)

{

SetCity();

setcity.Visibility = Visibility.Collapsed;

CityTitle.Header = IsolatedStorageSettings.ApplicationSettings["city"] as string; ;

}

else { setcity.Visibility = Visibility.Visible;

CityTitle.Header = "Такси в твоем городе"; }

}

 

Якщо файл не пустий викликається функція SetCity(), в якій аналогічно до попереднього методу відбувається заповнення.

І так ми маємо повністю заповнену головну сторінку яка в подальшому буде посилатися на інші.

Рисунок 4.11 – Заповнена головна сторінка

 

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

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

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

- Navigate Переходить до вмісту , заданому універсальним кодом ресурсу (URI).

- Refresh Перезавантаження поточної сторінки.

- StopLoading Зупиняє ще не оброблені асинхронні переходи.

Приклад коду:

NavigationService.Navigate(new Uri("/CityTaxi.xaml?href=" + (CityInObl.SelectedItem as TaxiInTown).href, UriKind.Relative));

 

На всіх інших сторінках заповнення даними відбувається аналогічно. Крім сторінки Details.xaml, тому її рознянемо детальніше.

Рисунок 4.12 – Пуста сторінка Details

 

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

string href = "";

if (NavigationContext.QueryString.TryGetValue("href", out href))

{

url = "http://taxi.poputka.ua/"+href;

string htmlPage = "";

using (var client = new HttpClient())

{

htmlPage = await client.GetStringAsync(url);

}

 

HtmlDocument htmlDocument = new HtmlDocument();

htmlDocument.LoadHtml(htmlPage);

 

І за допомогою функції SelectSingleNode обираємо потрібну інформацію:

Title.Text = htmlDocument.DocumentNode.SelectSingleNode("//h1[@itemprop='name']").InnerText.Trim();

 

Так з сайту скачано назву таксі. Аналогічними функціями відбувається заповнення інших елементів.

Рисунок 4.12 – Заповнена сторінка Details

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

Задачі запуску можна описати як "запустив і забув". За допомогою даного типу завдань ми не отримуємо назад дані. Наприклад, запускаючи браузер Internet Explorer, ми передаєм в параметрі завдання запуску адресу сторінки, яку хочемо показати користувачу. Далі користувач працює в браузері. Завдання вибору мають дуже схожу з завданнями запуску концепцію, але на відміну від останніх вони щось обертають додатком, будь то картинка з камери або e - mail - адресу з адресної книги. При налагодженні додатків, в яких використовуються завдання запуску або вибору, потрібно врахувати, що на емуляторі багато завдань реально нічого не роблять. Наприклад, EmailComposeTask - відправка e - mail припускає, що на телефоні налаштований потрібний обліковий запис електронної пошти. Оскільки на емуляторі таку настройку призвести не можна, реально відправити e-mail не вийде. Схожа ситуація і з дзвінком. Реальною SIM - карти в емуляторі немає. Але для користувача інтерфейс, емулює дзвінок, показаний буде. З метою тестування даного інтерфейсу цілком достатньо. Емулятор навіть містить записи в адресній книзі і фотографії, які можна використовувати для тестування. Теж відноситься і до інших задачам запуску і вибору. Однак, незважаючи на те що багато функціональностей в емуляторі не працює, в цілому можливості з тестування багатьох завдань запуску і вибору на емуляторі обмежені. Завдання запуску і вибору визначені в просторі імен Microsoft.Phone.Tasks бібліотеки Microsoft.Phone.dll, яка підключається автоматично при створенні проекту, тому для використання завдань запуску і вибору потрібно тільки підключити потрібний простір імен.

Давайте розглянемо, як здійснити дзвінок за певним номером телефону:

var phoneCallTask = new PhoneCallTask();

phoneCallTask.PhoneNumber = "+79261234567"; phoneCallTask.DisplayName = "Компания Рога и Копыта"; phoneCallTask.Show();

 

В додатку спочатку іде вибір номера зі списку, а потім функція виклику:

private void TaxiPhone_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

PhoneCallTask phoneCallTask = new PhoneCallTask();

 

phoneCallTask.PhoneNumber = (TaxiPhone.SelectedItem as Phone).phone;

phoneCallTask.DisplayName = Title.Text;

 

phoneCallTask.Show(); }

 

Рисунок 4.13 – Виклик таксі

 

Для запуску емулятора натискаємо клавішу F5. Запустивши емулятор можна перевірити роботу додатку.


ЕКОНОМІЧНА ЧАСТИНА

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

Додаткові витрати на співробітника іноді можуть перевищувати його заробітну плату.

Розрахунок:

1. Розрахунок заробітної плати

Оклад системного адміністратора - 2602,6 грн.

Прибутковий податок (12%) - 312,31 грн.

Пенсійний фонд (1%) - 26,03 грн.

ЗП до видачі на руки - 2264,27 грн.

Зарплата за 14 робочих днів складає: 1320,90 грн.

2. Розрахунок амортизації

Амортизáція ( лат. amortisation — погашення, сплата боргів) — теж що і амортизаційні відрахування — процес поступового перенесення вартості основних фондів на продукт, що виготовляється з їх допомогою. Для заміщення зношеної частини основних засобів виробництва підприємства роблять амортизаційні відрахування, тобто відрахування певних грошових сум відповідно до розмірів фізичного і морального зносу засобів виробництва. Амортизаційні відрахування використовуються для повного відтворювання зношених основних фондів (на реновацію), а також для їх часткового відшкодування (на капітальний ремонт і модернізацію).

До витрат на устаткування віднесемо:

- Комп’ютер: 6100 грн.

- Стіл: 450 грн.

- Стілець: 235 грн.

- Принтер: 640 грн.

Амортизацію розраховуємо за 3 групою, тобто відсоток повернення складає 25%.

С = 7425 грн. (Витрати на обладнання).

А = 7425 * 0,25 = 1856,25 грн. (Амортизація за рік роботи)

Так як робота над проектом тривала 14 робочих днів, маємо розрахувати відповідно і амортизацію:

Маємо умову:

1856,25 – 251(робочі дні)

х – 1

Тобто за один робочий день амортизація складає – 7,39 грн.

А(14 днів) = 14 * 7,39 = 103,53 грн.

3. Витрати на сировину

Витрати на сировину і матеріали займають у собівартості промислової продукції в середньому більше 50-60 %, але мають значні відхилення залежно від галузі. Найвищі вони в галузях обробної промисловості. Економія цих витрат має вирішальне значення для зниження собівартості продукції.

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

Під час роботи над проектом не було потреби використовувати додаткові кошти на сировину, так як всі додаткові програми і саме середовище розробки на даються безкоштовно. Тому Всир дорівнюють нулю.

 

4. Норма витрат

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

До норм витрат віднесемо:

- Світло;

- Опалення;

- Оренда робочого місця.

Плата за світло в місяць складає 35 грн. (31 день), тобто за день 1,13 грн. а за 14 робочих днів – 15,80 грн.

Опалення розрахуємо за тим же принципом:

Місяць – 235 грн. (31 день);

День – 7,58 грн.;

14 днів – 106,13 грн.;

Оренда – 400 грн. в місяць, 14 робочих днів складає 180,64 грн.

В сумі отримуємо:

НВ = 15,80 + 106,13 + 180,64 = 303,8 грн.

Тепер додомо всі витрати і отримаємо собівартість проекту.

Ва́ртість (собівартість, англ. Cost) — Вартість факторів виробництва, які необхідно витратити на виробництво продукції, та її збут.

Відображаючи рівень витрат на виробництво, собівартість комплексно характеризує ступінь використання усіх ресурсів підприємства, а значить, і рівень техніки,технології та організації виробництва. Чим краще працює підприємство, інтенсивніше використовує виробничі ресурси, успішніше удосконалює техніку, технологію і організацію виробництва, тим нижча собівартість продукції. Тому собівартість є одним з важливих показників ефективності виробництва. Собівартість продукції має тісний зв'язок з ціною. Це проявляється в тому, що собівартість слугує базою ціни товару і її нижньою межею для виробника. При обчисленні собівартості продукції важливе значення має визначення складу витрат, які в неї включаються. Як відомо, витрати підприємства відшкодовуються за рахунок двох власних джерел: собівартості і прибутку. Тому питання про склад витрат, які включаються у собівартість, є питання їх розмежування між зазначеними джерелами відшкодування. Загальний принцип цього розмежування полягає в тому, що через собівартість повинні відшкодовуватися витрати підприємства, що забезпечують просте відтворення усіх факторів виробництва; предметів, засобів праці, робочої сили і природних ресурсів. Відповідно до цього у собівартість продукції включаються витрати на:первині і вторині.

Сб = ЗП + А + Всир + НВ =1320,90 + 103,53 + 0 + 303,8 = 1728,23 грн.

 

З розрахунків отримуємо ціну додатку «Такси В Украине» - 1728,23 грн.

 

ЧАСТИНА З ОХОРОНИ ПРАЦІ

Загальні положення

1. До самостійної роботи на персональних комп'ютерах (прийом та введення інформації коректування, читання з екрану) допускаються особи віком більше 18 років, які пройшли навчання з безпечних методів виконання робіт та інструктаж на робочому місці.