Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben...

45
Universitatea “Politehnica” din Bucureşti Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei Aplicaţie mobilă de acces la Servicii Web de pe platforma Windows Phone Proiect de diplomă prezentat ca cerinţă parţială pentru obţinerea titlului de Inginer în domeniul Calculatoare si Tehnologia Informaţiei programul de studii de licenţa Ingineria Informaţiei (CTI-INF) Conducător stiinţific Absolvent Şl.Dr.Ing Eduard-Cristian POPOVICI Ruben-Titi BÎRSAN 2013

Transcript of Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben...

Page 1: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Universitatea “Politehnica” din BucureştiFacultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei

Aplicaţie mobilă de acces la Servicii Web de pe platforma WindowsPhone

Proiect de diplomă

prezentat ca cerinţă parţială pentru obţinerea titlului deInginer în domeniul Calculatoare si Tehnologia Informaţieiprogramul de studii de licenţa Ingineria Informaţiei (CTI-INF)

Conducător stiinţific AbsolventŞl.Dr.Ing Eduard-Cristian POPOVICI Ruben-Titi BÎRSAN

2013

Page 2: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Lista acronime

CE – Compact EditionXNA – Xbox/DirectX New generation ArhitectureREST – Representational State TransferXAML – Extensible Aplication Markup LanguageXML – Extensible Markup LanguageRPC – Remote Procedure CallUI – User InterfaceGPS – Global Position SystemGPU – Graphic Procesor UnitVB – Visual BasicSDK – Software Developement KitAPI – Application Programming InterfaceURI – Uniform Resource IdentifierURL – Uniform Resource LocatorWSDL – Web Service Description LanguageSOAP – Simple Object Access ProtocolWADL – Web Aplication Description LanguageUML – Unified Modeling LanguageJSON – Javascript Object Notation

Page 3: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Introducere

După cum s-a observat in ultimul timp,numarul de utilizatori al terminalelor mobile este incontinua crestere. Acest lucru se poate observa din toate rapoartele si statisticile efectuate,dar si dinviata reala,aruncand doar o simpla privire atunci cand esti pe strada print-o aglomeratie urbana.Comunicarea este cea mai importantă in viata de zi cu zi,iar nevoia de a fi in contact unii cu altii semanifesta in toate activitatile. Societatea moderna pune din ce in ce mai mult accentul pemobilitate. Aceasta nevoie este sustinuta si sprijinita de tehnologia moderna actuala,principalulpunct de sprijin fiind dispozitivele mobile. Telefoanele inteligente (smartphones) dotate cu sisemede operare din ce in ce mai avansate sunt cele care fac ca lucrurile sa fie mai simple,avand laindemana,la un click (o atingere) distanta o multime de aplicatii care ne ajuta la orice pas si in oricesituatie din viata reala: agenda telefonica,jocuri,alarme,stiri de ultima ora,chat cuprietenii,planificare intalniri,dieta,etc.

Serviciile web simplifica foarte mult comunicarea prin asigurarea unei arhitecturidistribuite. Serviciile web avand astfel o scalabilitate foarte ridicata.

Ideea acestei teme (aplicatii) a aparut in timpul unei calatorii personale cu trenul. Dat fiindca trenul a intarziat cu cateva minute bune dandu-mi peste cap programul am fost curios sa aflucauza acestei intarzieri. Am aflat intr-un final ca trenul respectiv intarzia de fiecare data,iar calatoriicare circulau frecvent pe acea ruta stiau ca acel tren intarzie de fiecare data,numai ca erau uniicalatori care nu stiau lucrul acesta,cum a fost si cazul meu.

Tema consta in dezvoltarea unei aplicatii la care are acces oricine si care poate semnala ointarziere pe care a avut-o un tren cu care a circulat. Toate aceste date vor putea fi accesate deoricine,si oricine putand avea posibilitea adaugarii de noi evenimente. Aplicatia incarca datelefurnizate de utilizatori intr-o baza de date care va fi stocata pe un server.

Aplicatia este de tip client-server care face un schimb de date intre client si server,serverulraspunzand la cererile clientului. Aplicatia client este dezvoltata pentru terminale mobile carefolosesc sistemul de operare Windows Phone 7, mediul de dezvoltare folosit fiind Microsoft VisualStudio 2010 for Windows Phone,iar aplicatia server este o aplicatie sever Apache creata cuprogramul EasyPHP,baza de date fiind MySQL ceata cu phpMyAdmin.

Pentru comunicarea intre partile componente ale aplicatiei (server,client) se folosestearhitectura REST (Representational State Transfer), aceasta arhitectura fiind mai simpla decatarhitectura obisnuita a serviciilor web, RPC ( Remote Procedure Call) . Prin aceasta arhitecturaclientul intelege interfata uniforma a serviciului.

Aplicatia a fost testata si s-a dovedit a fi functionala, putand fi rulata in orice moment alprocesului de dezvoltare pe emulatorul oferit de mediul de dezvoltare Visual Studio.

Page 4: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Capitolul 1Windows Phone 7

1.1 Prezentare generala

Acest sistem de operare a fost lansat de Microsoft in anul 2010 si in prezent caoncureaza pepiata cu sistemele de operare iOS si Android. Terminalele care folosesc platforma Windows Phoneau aceleasi caracteristici ca un smartphone obisnuit. Microsoft nu a inventat nici un limbaj sauframework nou pentru aplicatiile platformei Windows Phone,ci doar a adaptat framework-urileexistente. Programarea se face in C# sau VB (Visual Basic .Net) cu .NetFramework. Echipamentelecare folosesc Windows Phone sunt sunt de tipul touch screen dotate cu senzorGPS,busola,flash,acceleromentru,Wi-Fi,camera,multimedia,GPU cu DirectX9 si 3 butoanededicate. Windows Phone foloseste software-ul Zune ca aplicatie pentru calculator pentru a seputea conecta si sincroniza aplicatiile instalate,muzica,fisiere prcum si pentru operatii de back upsau pentru update-uri. Ca dezvoltator de aplicatii Zune se foloseste impreuna cu Visual Studiopentru a testa aplicatia pe dispozitive reale,operatie care este necesara deoarace pe emulator nu sepot testa o serie de aplicatii,de exemplu cele care folosesc GPS sau anumiti senzori pe careemulatorul nu ii poate simula.

Platforma pentru aplicatiile Windows Phone consta in 2 mari tipuri de framwork: Silverlightsi XNA.

1. „Silverlight se foloseste de obicei pentru crearea de aplicatii comerciale simple care nunecesita o interfata grafica prea complicata si pentru jocuri 2D simpe. Dezvoltatorii deaplicatii care sunt familiari cu acest termen vor observa ca este foarte simplu sa creezeaplicatii care sa ruleze pe Windows Phone. Silverlight pune la dispozitie un mediu deprogramare bazat pe tehnologia .Net care include o forate buna accesare a interfetei cuutilizatorul,a facilitatilor multimedia si a animatiilor. Silverlight foloseste XAML(Extensible Application Markup Language) care este un limbaj de markup declarativ pentrua defini interfata cu utilizatorul (UI),iar pentru implementarea programului din spateleinterfetei cu utilizatorul,programul logic foloseste limbaje de programare precum C# sauVisual Basic .Net. XAML este folosit pentru crearea graficii vectoriale si pentru creareaanimatiilor. Silverligt ofera o intrega gama de unelte pentru crearea oricareri aplicatii.Pentru a realiza o interfata cu utilizatorul cat mai apropiata de asteptarile utilizatorilorMicrosoft pune la dispozitie si o alta unealta numita Expression Blend,forte multe unelte dinacestprogram fiind similare cu cele din Adobe Illustrator.

2. XNA este un alt mediu bazat pe tehnologia .Net disponibil pentru MicrosoftXbox,Windows si Windows Phone 7. Microsoft a optimizat mediul XNA impreuna cu osuita de clase si librarii si in prezent este folosit pentru crearea de jocuri iar framework-ulvine cu motoare pentru crearea jocurilor si include si un motor 3D permitand astfel creareade jocuri 3D. XNA este folosit de obicei pentru crearea de jocuri pentru consolele Xbox360” [1].

In figura urmatoare este ilustrata arhitectura sistemului de operare Windows Phone. Dupa

Page 5: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

cum se vede in figura, arhitectura contine trei nivele (de jos in sus): hardware,spatiu kernel si spatiuuser. Toate aplicatiile .Net Framework ruleaza in spatiul userului. Kernelul sistemului deoperare,driverele si serviciile sistemului ruleaza in spatiu kernel.

Figura 1.1: Arihitectura Windows Phone 7 [5].

Pentru realiarea acestui proiect am folosit Silverlight deoarece interfata grafica nu este atatde importanta in acest proiect, ci modul in care componentele aplicatiei comunica intre ele.

Puncte importante privind framework-ul Silverlight pentru Windows Phone- Foloseste aceeasi biblioteca de clase de baza- A fost modificat pentru performanță- Integrata cu hardware-ul- Integrata cu sistemul de operare- API-uri specifice pentru dispozitiv (accelerometru, GPS, etc)- Foloseste modelul out-of-browser

Page 6: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

1.2 Visual Studio 2010 – Windows Phone SDK

Pentru crearea de proiecte in Visual Studio,in tab-ul file avem optiunea New Project.Selectand aceasta optiune se va deschide automat o fereastara noua (Fig 1.2) care ne va permiteselectarea tipului de aplicatie (Windows Phone Aplication) precum si numele aplicatiei sitehnologia folosita (Visual C#). Voi folosi in continuare termenul Visual Studio ca reprezentandVisual Studio pentru Windows Phone 7.

Figura 1.2: Fereastra New Project din Visual Studio

Se observa in partea de sus prezenta componentei .Net Framework 3.5,componenta necesarapentru dezvoltarea aplicatiilor care folosesc servicii web. Dupa ce proiectul este creat,ecranul vaafisa designul aplicatiei si codul XAML pentru aplicatia creata. Fereastra de vizualizare aproiectului contine interfata telefonului care permite vizualizarea aplicatiei in timp ce aplicatia estecreata. Fereastra principala contine deasemenea panoul Tool Box care contine uneltele pentrucrearea interfetei cu utilizatorul (butoane,forme geometrice,casete de dialog,imagini,elementemedia),panoul Solution Explorer care arata continutul folderului in care a fost salvat proiectulpanoul Properties si panoul care contine Output si ErrorList in care vor aparea eventualele erori inmomentul compilarii si rularii programului. In figura urmatoare este prezentata fereastra principalaa programului de dezvoltare cu componentele ei.

Page 7: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Figura 1.3: Fereastra principala a mediului de dezvoltare Visual Studio

1.3 Structura unui proiect Windows Phone

„Un proiect contine in mod inplicit urmatoarele fisiere:- App.xaml/App.xaml.cs - Punctul de intrare aplicației care inițializează resursele și layout-

ul aplicatiei.- MainPage.xaml/MainPage.xaml.cs - Definește o pagină cu interfață în aplicatie- Background.png – Un fisier grafic care reprezinta icon-ul aplicatiei in lista de aplicatii din

meniul telefonului. Aceast fisier poate fi inlocuit cu oricare altul la alegere- SplashScreenImage.jpg – O imagine care apare in momentul in care aplicatia este rulata.

Este proiectata pentru a da un raspuns rapid userilor cat timp aplicatia se incarca.- Properties\AppManifest.xml - Fișier manifest care arevrolul de a genera pachete

aplicației.- Properties\AssemblyInfo.cs - Fișierul de asamblare care conține informații cu privire la

numele și versiunea metadatelor obtinute in urma procesului de asamblare.- Properties\WMAppManifest.xml - Fișierul manifest cu metadate specifice cu privire la

aplicatia Windows Phone, care definește numele pictogramei, pagina inițială, etc” [6].

Fisierele App.xaml si MainPage.xaml sunt fisiere XAML iar fisierele App.xaml.cs siMainPage.cs sunt fisiere care contin cod C#. Acest mod de a denumi fisierele arata ca cele fisierelescise in C# sunt fisierele care contin codul ce se afla in spatele fisierelor XAML. Acest concept esteun concept de baza al Silverlight. Fiecare fisier .cs contine la inceput o lista de directive care suntfolosite in cadrul aplicatiei,declararea directivelor de face cu cuvantul „using” urmat de numeledirectivei. Directivele folosite care incep cu System.Windows sunt pentru clasele Silverlight,daruneori este nevoie de suplimentarea lor prin adaugarea de dierective specifice unor operatii pe carele avem de efectuat in cadrul programelor.

Page 8: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Fisierul App.xaml.cs contine o definire de namespace care este acelasi cu numeleproiectului si o clasa numita App care este derivata din clasa Application a Silverlight.Toateprogramele Silverlight contin aceasta clasa.namespace IntarzieriCFR{

public partial class App : Application{

public App(){

InitializeComponent();}

}}

Fisierul App.xaml are are urmatoarea structura:<Application

x:Class="IntarzieriCFR.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">

</Application>

„Dezvoltatorii folosesc adesea fișierul App.xaml pentru stocarea resurselor care suntfolosite în aplicatie. Aceste resurse pot include scheme de culori, stiluri, etc. Radacina in Silverlighteste clasa Application din care deriva toate clasele App. In acest caz avem clasaIntarzieriCFR.App. In mod implicit fisierul App.xaml contine patru declarari de namespace. Douasunt comune pentru fiecare aplicatie Silverlight iar doua sunt specifice programarii pe telefon.Primadeclarare (‚xmlns’) este o declarare standard de namespace pentru Silverlight care ajutacompilatorul sa localizeze si sa identifice clasele Silverlight. URI-ul asociat acestei declarari nupointeaza catre nimic,e doar un URI detinut de Microsoft care este definit pentru acest scop. Cea dea doua declarație namespace XML este asociata cu XAML în sine, și permite fișierului sa refereunele elemente si atribute care fac parte din XAML. Fisierele App.xaml.cs si App.xaml definiescdouă jumătăți din aceeași clasă App. În timpul compilării, Visual Studio analizează App.xaml șigenerează un alt fișier cu numele App.g.cs.Acest fisier este recreat de fiecare data cand secompileaza programul. Fișierul App.g.cs conține o definiție parțială a clasei App, și conține ometoda numita InitializeComponent, care este aplelata de constructor în fișierul App.xaml.cs.” [2]

În afară de o listă lungă de utilizare a directivelor, fișierul MainPage.xaml.cs este foartesimplu:using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;

Page 9: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

namespace IntarzieriCFR{

public partial class MainPage : PhoneApplicationPage{

public MainPage(){

InitializeComponent();}

}}

Namespace-ul Microsoft.Phone.Controls conține extensii Silverlight pentru telefon,inclusiv clasa PhoneApplicationPage. In aceest fisier exista o definiție parțială de clasă. Acestadefinește o clasă numita MainPage, care derivă din clasa PhoneApplicationPage. Aceasta este clasacare definește componentele vizuale care apar pe ecran atunci când programul este rulat. ParteaXAML din clasa MainPage este definită în fișierul MainPage.xaml.

<phone:PhoneApplicationPagex:Class="IntarzieriCFR.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"FontFamily="{StaticResource PhoneFontFamilyNormal}"FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent"><Grid.RowDefinitions>

<RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">

<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION"Style="{StaticResource PhoneTextNormalStyle}"/>

<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0"Style="{StaticResource PhoneTextTitle1Style}"/>

</StackPanel><Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>

</Grid></phone:PhoneApplicationPage>

In acest fisier sunt folosite aceleasi declaratii ca si in cazul fisierului App.xaml,dar aici aparsi elemente noi. Declaratiile de namespace "d" (pentru "designer") și "mc" (pentru "markupcompatibility") benefice programelor de proiectare XAML, cum ar fi Expression Blend și designerîn Visual Studio. Atributele DesignerWidth și DesignerHeight sunt ignorate în timpul compilării.Sevad setările pentru FontFamily, FontSize, și Foreground care se aplică la întreaga pagină. Seseteaza si orientarea aplicatiei:daca este orientata in modul Portrait sau Landscape sau are ointerfata combinata,deci suporta ambele orientari.

Corpul fișierului MainPage.xaml conține mai multe elemente imbricate numite Grid,StackPanel, și TextBlock asezate într-o ierarhie părinte-copil.

Page 10: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Capitolul 2Servicii Web

2.1 Concepte generale web

Conceptul de serviciu web a fost dezvoltat si introdus in comunicarea prin internet pentru apermite aplicatiilor sa comunice intre ele. Un serviciu web este un software care permite ca douaterminale sa comunice in retea. De multe ori aceste servicii sunt doar niste API-uri care suntaccesate in retea. Serviciile web contin protocoale si standarte care permit schimbul de informatieintre aplicatii software scrise in programe diferite si care ruleaza pe platforme diferite. Un serviciuweb este o clasă (obiect), localizata undeva pe Internet care poate fi accesata prin program prinapeluri obiect-orientate normale.

Un exemplu de serviciu web prezentat in figura urmatoare este SOAP, un protocol bazat peXML, care foloseste WSDL ca limbaj de descriere.

Figura 2.1: SOAP

Furnizorul de servicii isi descrie serviciile oferite intr-un director. Descrierea serviciilor estescrisa intr-un limbaj special numit WSDL (Limbaj de Descriere a Serviciilor Web). Mesajele sunttrimise si primite de director prin intermediul unui program numit SOAP (Simple Object AccessProtocol). Clientul formuleaza mesajele care le va trimite furnizorului folosind limbajul XML.Mesajele sunt generate in XML dar sunt bazate pe specificatiile definite in descrierea serviciilorfolosind WSDL. Raspunsul firnizorului este deasemena generat in limbaj XML si este bazat pespecificatiile defineite in descrierea serviciilor.

Avantajele serviciilor web sunt:

Page 11: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

- interoperabilitatea intre aplicatii- reutilizarea serviciilor existente- distribuire usoara a informatiei intre consumatori- dezvoltare rapida

2.2 Arhitecturi software

O arhitectura software este o abstractizare a elementelor ale unui sistem software in timpulunor faze ale functionarii sale. Un sistem poate fi compus din mai multe nivele de abstractizare șimai multe faze de funcționare, fiecare cu propria arhitectură software. O arhitectura software estedefinita de o configurație de elemente arhitecturale (componente, conectori, și date) cu restricții înrelațiile lor, în scopul de a obține un set dorit de proprietăți arhitecturale. O configuratie estestructura relatiilor arhitecturale intre componente,conectori si date in timpul rularii sistemului.

Un stil arhitectural este un set coordonat de constrangeri arhitecturale care restrictioneazarolul si caracteristicile elementelor arhitecturale si permite relatia intre aceste elemente in oricearhitectura care este conforma acestui stil.

Un stil poate fi aplicat mai multor arhitecturi iar o arhitectura poate contine mai multestiluri.

In prezent exista doua stiluri arhitecturale concurente folosite in crearea de servicii web.Serviciile RESTfull si serviciile bazate pe standardul WS-* cunoscute ca SOAP. Tendinteletehnologice recente in domeniul serviciilor web indica ca serviciile REST sunt o solutie pentru aelimina complexitatea. Cele doua abordari difera prin numarul de decizii arhitecturale care trebuieluate si numarul de alternative disponibile.

2.3 Arhitectura REST

Representational State Transfer este un stil arhitectural care a fost publicat initial de catreRoy Fielding in teza lui de doctorat unde a fost folosit pentru a ghida dezvoltarea protocoluluiHTTP. REST a fost inițial introdus ca un stil arhitectural pentru construirea la scara larga desisteme distribuite. Acest stil arhitectural este o entitate destul de abstracta, ale cărei principii aufost utilizate pentru a explica scalabilitatea excelenta a protocolului HTTP 1.0 si a constrâns,deasemenea,proiectarea următoarei versiuni a sa, HTTP 1.1. Astfel,termenul REST este foarte desfolosit în combinație cu HTTP.

Acest stil de arhitectură este bazat pe o arhitectura de forma client-server, clientii inițiazăcereri către servere pe care serverele le proceseaza și întorc răspunsuri adecvate. Cererile șirăspunsurile sunt construite în jurul transferului de "reprezentări" de "resurse". REST este oarhitectură in care, în orice moment, un client poate fi, fie tranziția între starile aplicatiei fie "înrepaus". Un client într-o stare de repaus este capabil să interacționeze cu utilizatorul, dar nu creeazănici o sarcină și nu consumă spatiu de stocare in retea.

Page 12: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Principalele componente ale arhitecturii REST sunt urmatoarele:

- distributia client-server – o interfata uniforma separa clientii de servere. Aceastaseparare se reflecta prin faptul ca,clientii nu se preocupa de stocarea datelor,sarcina care lerevine serverelor,iar serverele nu se preocupa de interfata cu utilizatorul ceea ce le face maiscalabile. Serverele si clientii pot fi modificate sau schimbate atat timp cat interfata dintreele nu este alterata.- stateless computing – comunicatia nu este constransa de contextul clientului salvat pe

server in timpul comunicatiei. Fiecare apel al clientului contine informatia completanecesara deservirii de carte server.

- raspunsuri cache-abile – ca si la World Wide Web, clientii pot pastra raspunsurile inmemoria cache. Clientii pot folosii ulterior acele raspunsuri fara a mai fi nevoieaccesarea serverului. Daca este bine implementata,aceasta componenta poate anulapartial sau complet unele interactii dintre client si server,crescand astfel performanta siscalabilitatea.

- sistem stratificat – clientul,in timpul unei comunicatii poate fi conectat la un serverintermediar si nu la cel final. Conectarea la un server intermediareste un avantajdeoarece serverele intermediare permit scalabulitatea sistemului si cresterea timpului deraspuns.

- dezvoltare la cerere – serverele se pot extinde temporar ca raspuns la o cerere a unuiclient. Acest lucru poate include compunente compilate cum ar fi applet-urile sauscripturile.

- interfata uniforma – aceasta componeneta simplifica aceasta arhitectura si permite cafiecare parte componenta sa fie dezvoltata independent.

Figura 2.2 Structura arhitecturii REST

Page 13: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

2.4 Dezvoltarea sistemelor in care comunicarea intre componente se facepe baza unei arhitecturi de tip REST.

Clientul va trimite o cerere catre server. Aplicatia client foloseste raspunsurile primite de laserver pentru a afisa pe ecran lista cu inregistrarile din baza de date. De ce vrem sa facemconectarea printr-un serviciu web? De ce folosim acest tip de arhitectura si nu folosim metodadirecta care utilizeaza socketuri? Acest tip de comunicare ne ofera portabilitate si o transparenta acomunicarii. Aceasta inseamna ca fiind pe client nu ma intereseaza in principiu partea de server,cualte cuvinte,indiferent pe ce platforma a fost folosita nu este nevoie sa stim tehnologia pentrurealizarea serverului,clientul se poate conecta si poate comunica. Pentru a crea clientul nu avemnevoie sa stim cu ce tehnologie a fost creat serverul. Si,deasemenea invers,in momentul in caredezvolt serverul nu ma intrereseaza ce platforme voi folosi sau, va folosi cel care va crea aplicatiaclient. Acesta este scopul pentru care folosim serviciul. Portabilitatea (putem sa folosim serviciul depe orice fel de platforma) si transparenta (nu ne intereseaza cine si ce tehnologie se afla in spateleserviciului,ne intereseaza doar ca putem sa cerem un serviciu,putem sa trimitem informatie catre elsi putem sa primim un raspuns,raspuns pe care putem sa il folosim mai departe in aplicatia noastra).

Acesta este de fapt serviciul, transformarea unui request,unei cereri, intr-un respuns.Bineinteles ca totul este privit la nivel de “black box”,nu putem vedea ce este in spatele serviciului,noi stim doar ceeea ce face. De exemplu, daca serviciul este un login, noi trimitem nisteinformatii(username si parola) si serviciul ne spune daca exista in baza de date aceasta asociere saunu. Sub aceasta forma functioneaza orice tip de serviciu,indiferent cat de complicat este.

Page 14: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Capitolul 3Aplicatia Intarzieri CFR

3.1 Descrierea aplicatiei

Voi descrie pentru inceput aceasta aplicatie printr-o diargrama UML pentru a arata cumfunctioneaza.

Clientul se conecteaza la server,adica trimite request-uri pe care serverul le serveste . Obaza de date existetnta pe server detine raspunsurile pentru cererile clientului. Requestu-rile sunt detipul afisare dupa un anumit criteriu a datelor existente in baza de date conectata la server.

Figura 3.1 Fereastra principala a aplicatiei IntarzieriCFR

Page 15: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Asa cum am precizat si in introducere,acest proiect are ca subiect o aplicatie prin care totiutilizatorii pot vedea si mentiona intarzierile regulate sau intamplatoare ale diverselor trenuri carecircula in tara. Pe langa paginile si fisierele continute de un proiect Windows Phone in modimplicit, acest proiect contine folderul Images si in care sunt stocate imaginile si pictogramelefolosite in aplicatie plus alte doua pagini (Submit si Detalii). Proiectul mai contine o imagine(SplashScreenImage.jpg) care este afisata la pornirea aplicatiei in locul unei bare de incarcare aaplicatiei si un fisier (Tren.cs) care care contine clasa tren. Toate aceste componente pot fi vizibilein fereastra Solution Explorer (partea dreapta a ferestrei VisualStudio Fig 3.1).

3.2 Pagina MainPage

Prima pagina a aplicatiei (MainPage) este o pagina simpla la prima vedere care contine titlulaplicatiei si un buton. Daca se apasa butonul din aceasta pagina va aparea o lista care va contineevenimentele stocate in baza de date pana la momentul respectiv. Figura 3.2 reprezinta paginaMainPage asa cum este vazuta in emulator. Interfata cu utilizatorul a paginii si codul XAML estevizibila si in figura 3.1 numai ca buoanele pentru navigarea intre pagini nu sunt vizibile.

Figura 3.2 Pagina principala

Titlul paginii este un element de tipul TextBlock cu numele x:Name="PageTitle" nume careva fi folosit ulterior pentru a modifica continutul acestui TextBlock. De exemplu cand vom dori caaplicatia sa fie in limba engleza, codul Text="Intarzieri CFR" se va schimba in Text="CFR Delays"

iar ca sa cunoastem ce text trebuie schimbat trebuie sa stim numele TextBlock-ului. Urmatorulelement este butonul care aste un element de tip Button care deasemenea are un numex:Name="myButton" , nume care va fi folosit deasemenea pentru aceleasi actiuni ca si la TextBlock.

Page 16: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Dar spre deosebire de TextBlock,butonul are o functie specifica. La apasarea lui se declanseaza uneveniment. Click="myButton_Click"(myButton_Click este un eveniment care se declanseaza atuncicand butonul este apasat). Evenimentul este specificat in pagina MainPage.xaml.cs. Evenimentuleste reprezentat prin codul urmator:

private void myButton_Click(object sender, RoutedEventArgs e){

FirstStoryBoard.Begin();

try{

WebClient webClient = new WebClient();Uri uri = new Uri("http://127.0.0.1/data.json?nocache=" + Guid.NewGuid());webClient.OpenReadCompleted +=new OpenReadCompletedEventHandler (webClient_OpenReadCompleted);webClient.OpenReadAsync(uri);

}catch (Exception ex){

MessageBox.Show(ex.Message);}

}void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

{myButton.Visibility = System.Windows.Visibility.Collapsed;

DataContractJsonSerializer ser = null;try{

ser = new DataContractJsonSerializer(typeof(ObservableCollection<Tren>));ObservableCollection<Tren> trenuri = ser.ReadObject(e.Result) as

ObservableCollection<Tren>;

lista_intarzieri.ItemsSource = trenuri;}catch (Exception ex){

MessageBox.Show(ex.Message);}

}

In primul bloc try se initiaza o instanta a clasei WebClient care este o clasa ce furnizeazametode obisnuite pentru trimitere si primire de date dintr-un identificator de resurse printr-un URI.Ulterior se accesea-za URI-ul si prin deschiderea stream-ului se priesc datele dintr-o variabila detip ‚Uri’. Acest stream de date a fost primit in format JSON. Al doilea bloc try ,pracatic a douametoda folosita la apasarea butonului este metoda webClient_OpenReadCompleted . Prima linie dinaceasta metoda contine codul pentru ascunderea butonului din pagina,apoi se declara un obiect detipul DataContractJsonSerializer pentru serializarea datelor din format JSON. Aceste date sunt detipul colectii de date dinamice care notifica de fiecare data cand un element este scos sau adaugatsau cand datele sunt actualizate .Apoi acest obiect este incarcat cu datele care sunt continute instream-ul deschis de metoda OpenReadAsync.

Page 17: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Apoi datele sunt preluate de ListBox-ul creat in prima pagina care face ca aceste sate sa fie afisatepe ecran intr-un ScrollViewer.

Blocurile catch contin exceptii care sunt semnalate prin afisarea unor mesaj pe ecran caredescriu exceptia curenta si optional asteapta si un raspuns de la utilizator (apasarea unui buton).

De exemplu,daca in timp ce clientul se conecteaza la server,acesta este oprit se va afisa unmesaj de eroare de forma celui din figura 3.3 a).

a) b)

Figura 3.3 Raspuns cand serverul este oprit(a). Raspuns cand serverul este pornit (b)

Observam in figura 3.3 b lista afisata cu evenimentele inregistrate si stocate in baza de date.In mod implicit in acest exemplu lista este sortata in ordinea descrescatoare a timplului deintarziere. Pentru fiecare eveniment avem cate u hiperlink de culoare portocalie care facand clickpe el ne conduce pentru fiecare eveniment la pagina cu detalierea evenimentului (pagina Detalii).

Pagina principala mai contine doua butoane pozitionate in zona ApplicationBar cu aceleasiproprietati ca butonul de afisare a listei cu evenimente. Daca se va apasa butonul din partea stangase va deschide o noua pagina (pagina Submit) care va contine un formular de inregistrare a unuinou eveniment(o intarziere a unui tren).

Butonul din partea dreapta din ApplicationBar este butonul de ajutor pentru navigarea inaplicatie. Apasand acest buton,in jumatatea inferioara a ecranului va aparea in prim plan un chenarcu fundal in care sunt scrise cu portocaliu instructiunile pentru navigarea in pagina respectiva.Aceste pagini de help sunt de tipul Canvas care atunci cand au fost create au fost puse sa fieinvizibile. Practic acele chenare de help sunt prezente mereu numai ca sunt setate sa fie invizibile(Visibility="Collapsed"). Apoi la apasarea butonului ajutor ele devun vizibile(helpCanvas.Visibility = System.Windows.Visibility.Visible). Aceste chenare negre au in parteadreapta sus doua hiperlink-uri: unul este pentru prezentarea in limba engleza a paginii de ajutor si

Page 18: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

celalalt este pentru iesirea din pagina de ajutor. Cand se da click pe link-ul EN va disparea acelchenar si va aparea alt chenar in care textul este in limba engleza si se va schimba in engleza sititlul aplicatiei din pagina principala La fel se va intampla si la schimbarea din engleza in romana.

helpCanvasRO.Visibility = System.Windows.Visibility.Collapsed;helpCanvasEN.Visibility = System.Windows.Visibility.Visible;

La apasarea butonului pentru iesire vor fi puse ambele pagini de help in modul “Colapsed”.Figura 3.4 ilustreaza prezenta acestei pagini pe ecranul telefonului. Butonul pentru pagina de ajutoreste de altfel prezent pe fiecare pagina a aplicatiei iar instructiunile care sunt scrise sunt specificepaginii respective.

Figura 3.4 Pagina ajutor a aplicatiei

3.3 Pagina Submit

Asa cum am mentionat si in sectiunea precedenta,apasand butonul din stanga din regiuneaApplicationBar a primei pagini se va deschide o noua pagina care va contine un formular unde vorfi putea fi inscrise datele pentru inregistrarea in baza de date a unui nou eveniment semnalat decatre utilizatori. Pagina Submit.xaml este formata numai din TextBox-uri si TextBlock-uri si o listade tip ListBox care va contine cele 3 tipuri de tren (R,IR,IC) care vor putea fi selectate print-unclick(tap). Initial aproape in fiecare TextBlock in care urmeaza a fi scrise informatiile se afla cate oinformatie care se va sterge in momentul un care cel care scrie da click in interiorul lui. In figura3.5 este ilustrata pagina Submit asa cum apare in emulatorul mediului de dezvolatre Visual Studio.

Page 19: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Figura 3.5 Pagina Submit (pentru inregistrarea unui eveniment)

Paramentrii rang,tren,data,timp efectiv,timp bilet,motiv,detalii,plecare,sosire,distanta suntconcatenati si salvati intr-un singur sir de tip string pentru a putea fi transferati catre server siintrodusi in baza de date. Blocul try contine ca si la pagina precedenta o instanta a claseiWebClient,dar de aceasta data se foloseste metoda upload pentru trimiterea datelor catre baza dedate. Datele sunt scrise in fisierul data.json pe server prin intermediul paginii receive.php. Metodade upload este o metoda de tip POST. La terminarea cu succes a procesului de upload va aparea unmesaj care va semnala ca operatia s-a incheiat cu succes si aplicatia va reveni la prima pagina. Incaz contrar se va afisa mesajul corespunzator blocului catch.

Figura 3.6 Mesajul aparut la incarcarea datelor

Page 20: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Pagina submit contine in ApplicationBar 3 butoane. Butonul din stanga este butonul derevenire la pagina anterioara(principala). Prin apasarea acestui buton se apeleaza metodaurmatoare:private void ApplicationBarIconButton_Click_1(object sender, EventArgs e)

{NavigationService.Navigate(new Uri("/IntarzieriCFR;component/MainPage.xaml",

UriKind.Relative));}

Butonul din mijloc are ca functie incarcarea pe server datelor scrise in formular. Apasareaacestui buton apeleaza functia Trimite() care face trimitera datelor catre server. Butonul al treileaeste folosit ca si la prima pagina pentru afisarea paginii cu instructiunile ajutatoare de folosire aaplicatiei. Are exact aceleasi functii si proprietati ca si cel de pe prima pagina. Pagina Submit maicontine un contor pentru limitarea caracterelor scrise in campul Motiv si o bara de stare carereflecta acelasi lucru. Limitarea a fost facuta la 250 de carectere datorita constrangerilor de afisarein pagina Detalii.

3.4 Pagina Detalii

Dupa cum am precizat in sectiunea 3.2(fig 3.3b), la apasarea butonului din prima pagina deafisare a evenimentelor din baza de date,va aparea lista cu toate evenimentele sortate in ordineadescrescatoare a perioadei de intarziere. Fiecare eveniment din acea lista are cate un hiperlink cunumele ‚detalii’ care conduce catre pagina detalii si afiseaza evenimentu respectiv cu toate detaliilecare au fost furnizate de cel care a introdus in baza de date evenimentul.

Figura 3.7 Navigarea in pagina Detalii

Page 21: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Capitolul 4Cod sursa proiect

4.1 Fisierul App4.1.1App.xaml<Application

x:Class="IntarzieriCFR.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:demo="clr-namespace:PageTurn;assembly=PageTurn">

<!--Application Resources--><Application.Resources></Application.Resources>

<Application.ApplicationLifetimeObjects><!--Required object that handles lifetime events for the application--><shell:PhoneApplicationService

Launching="Application_Launching" Closing="Application_Closing"Activated="Application_Activated" Deactivated="Application_Deactivated"/>

</Application.ApplicationLifetimeObjects>

</Application>

4.1.2 App.xaml.csusing System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Navigation;using System.Windows.Shapes;using Microsoft.Phone.Controls;using Microsoft.Phone.Shell;

namespace IntarzieriCFR{

public partial class App : Application{

/// <summary>/// Provides easy access to the root frame of the Phone Application./// </summary>/// <returns>The root frame of the Phone Application.</returns>public PhoneApplicationFrame RootFrame { get; private set; }

/// <summary>/// Constructor for the Application object./// </summary>public App(){

// Global handler for uncaught exceptions.UnhandledException += Application_UnhandledException;

Page 22: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

// Standard Silverlight initializationInitializeComponent();

// Phone-specific initializationInitializePhoneApplication();

// Show graphics profiling information while debugging.if (System.Diagnostics.Debugger.IsAttached){

// Display the current frame rate counters.Application.Current.Host.Settings.EnableFrameRateCounter = true;

// Show the areas of the app that are being redrawn in each frame.//Application.Current.Host.Settings.EnableRedrawRegions = true;

// Enable non-production analysis visualization mode,// which shows areas of a page that are handed off to GPU with a colored

overlay.//Application.Current.Host.Settings.EnableCacheVisualization = true;

// Disable the application idle detection by setting theUserIdleDetectionMode property of the

// application's PhoneApplicationService object to Disabled.// Caution:- Use this under debug mode only. Application that disables user

idle detection will continue to run// and consume battery power when the user is not using the phone.PhoneApplicationService.Current.UserIdleDetectionMode =

IdleDetectionMode.Disabled;}

}

// Code to execute when the application is launching (eg, from Start)// This code will not execute when the application is reactivatedprivate void Application_Launching(object sender, LaunchingEventArgs e){}

// Code to execute when the application is activated (brought to foreground)// This code will not execute when the application is first launchedprivate void Application_Activated(object sender, ActivatedEventArgs e){}

// Code to execute when the application is deactivated (sent to background)// This code will not execute when the application is closingprivate void Application_Deactivated(object sender, DeactivatedEventArgs e){}

// Code to execute when the application is closing (eg, user hit Back)// This code will not execute when the application is deactivatedprivate void Application_Closing(object sender, ClosingEventArgs e){}

// Code to execute if a navigation failsprivate void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e){

if (System.Diagnostics.Debugger.IsAttached){

// A navigation has failed; break into the debuggerSystem.Diagnostics.Debugger.Break();

}}

Page 23: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

// Code to execute on Unhandled Exceptionsprivate void Application_UnhandledException(object sender,

ApplicationUnhandledExceptionEventArgs e){

if (System.Diagnostics.Debugger.IsAttached){

// An unhandled exception has occurred; break into the debuggerSystem.Diagnostics.Debugger.Break();

}}

#region Phone application initialization

// Avoid double-initializationprivate bool phoneApplicationInitialized = false;

// Do not add any additional code to this methodprivate void InitializePhoneApplication(){

if (phoneApplicationInitialized)return;

// Create the frame but don't set it as RootVisual yet; this allows the splash// screen to remain active until the application is ready to render.RootFrame = new PhoneApplicationFrame();RootFrame.Navigated += CompleteInitializePhoneApplication;

// Handle navigation failuresRootFrame.NavigationFailed += RootFrame_NavigationFailed;

// Ensure we don't initialize againphoneApplicationInitialized = true;

}

// Do not add any additional code to this methodprivate void CompleteInitializePhoneApplication(object sender, NavigationEventArgs

e){

// Set the root visual to allow the application to renderif (RootVisual != RootFrame)

RootVisual = RootFrame;

// Remove this handler since it is no longer neededRootFrame.Navigated -= CompleteInitializePhoneApplication;

}

#endregion}

}

4.2 Fisierul MainPage4.2.1 MainPge.xaml<phone:PhoneApplicationPage

x:Class="IntarzieriCFR.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="696"FontFamily="{StaticResource PhoneFontFamilyNormal}"

Page 24: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"shell:SystemTray.IsVisible="True"><phone:PhoneApplicationPage.Resources>

<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button"><Border BorderThickness="2" CornerRadius="15" Margin="0,0,0,15">

<Border.Background><LinearGradientBrush EndPoint="0,1" MappingMode="RelativeToBoundingBox"

StartPoint="0,0"><GradientStop Color="#FF2C46AB" Offset="1.2"/><GradientStop Color="Transparent"/>

</LinearGradientBrush></Border.Background><TextBlock x:Name="butonprima" TextWrapping="Wrap" Text="Afiseaza lista de

evenimente" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock.Foreground><LinearGradientBrush EndPoint="0.5,1"MappingMode="RelativeToBoundingBox" StartPoint="0.5,1">

<GradientStop Color="Black" Offset="1"/><GradientStop Color="#FF270D0D"/></LinearGradientBrush></TextBlock.Foreground>

</TextBlock></Border>

</ControlTemplate><Style x:Key="pathStyle"

TargetType="Path"><Setter Property="Fill" Value="{StaticResource PhoneAccentColor}" /><Setter Property="Stroke" Value="{StaticResource PhoneForegroundColor}" /><Setter Property="StrokeThickness" Value="2" /><Setter Property="StrokeStartLineCap" Value="Round" /><Setter Property="StrokeEndLineCap" Value="Round" /><Setter Property="StrokeLineJoin" Value="Round" /><Setter Property="StrokeDashCap" Value="Round" />

</Style></phone:PhoneApplicationPage.Resources>

<!--LayoutRoot is the root grid where all page content is placed--><Grid x:Name="LayoutRoot">

<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>

</Grid.RowDefinitions>

<Grid.Resources>

</Grid.Resources><!--TitlePanel contains the name of the application and page title-->

<StackPanel x:Name="TitlePanel"Margin="12,17,11,28"Background="{x:Null}">

<TextBlock TextAlignment="Center"x:Name="PageTitle"Text="Intarzieri CFR "FontSize="48"Margin="9,-7,0,0"

Height="70" Width="450"><TextBlock.Foreground><LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"><GradientStop Color="Black" Offset="0" /><GradientStop Color="#FF7B0909" Offset="1"/></LinearGradientBrush></TextBlock.Foreground>

Page 25: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

</TextBlock<StackPanel>

<StackPanel.Resources><Storyboard x:Name="FirstStoryBoard">

<DoubleAnimation Storyboard.TargetName="myButton"Storyboard.TargetProperty="Height"To= "1"AutoReverse="True"Duration="00:00:01"

/></Storyboard>

</StackPanel.Resources>

<Button x:Name="myButton"Visibility="Visible"Template="{StaticResource ButtonControlTemplate1}"BorderBrush="Transparent"Content="Afiseaza lista de evenimente"Width="434"HorizontalAlignment="Center"Height="76"Click="myButton_Click"ClickMode="Press">

<Button.Foreground><LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">

<GradientStop Color="Black" Offset="0" /><GradientStop Color="#FF7B0909" Offset="1" />

</LinearGradientBrush></Button.Foreground>

</Button><TextBlock TextAlignment="Center"

x:Name="myCeas"Visibility="Collapsed"FontSize="28"Foreground="Black"Style="{StaticResource PhoneTextTitle1Style}"Height="40" Width="434"/>

</StackPanel>

<Grid x:Name="ContentPanel" Margin="12,0,12,0" HorizontalAlignment="Stretch" ><Grid.ColumnDefinitions>

<ColumnDefinition Width="200*" /><ColumnDefinition Width="233*" />

</Grid.ColumnDefinitions>

<ScrollViewer x:Name="ContentGrid" HorizontalAlignment="Center"HorizontalScrollBarVisibility="Auto" Height="560" Margin="0,5" Grid.ColumnSpan="2">

<StackPanel Margin="0,0,0,0" Height="560"HorizontalAlignment="Stretch">

<ListBox Background="#BF477081" OpacityMask="Black" Height="560"HorizontalAlignment="Left" Name="lista_intarzieri" VerticalAlignment="Top" Margin="0,0,0,0"Foreground="Orange" ItemsSource="{Binding}">

<ListBox.ItemTemplate><DataTemplate>

<Border Width="auto" Height="auto" x:Name="element"BorderBrush="FloralWhite" BorderThickness="1,2,2,1" CornerRadius="6" Padding="5"HorizontalAlignment="Stretch">

<StackPanel Orientation="Horizontal" Height="120"Width="400" HorizontalAlignment="Center">

<Image Width="35" Height="35"Source="/IntarzieriCFR;component/Images/picto_tren.jpg" />

Page 26: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

<StackPanel Orientation="Vertical" Height="95" HorizontalAlignment="Stretch"><StackPanel Orientation="Horizontal" Height="30"><HyperlinkButton Content="Detalii "

Foreground="Orange"NavigateUri="{Binding link}">

</HyperlinkButton><TextBlock Width="auto"

FontSize="19"Text="{Binding nume_tren}"Height="30"Foreground="White" />

</StackPanel><StackPanel Orientation="Horizontal" Height="30"><TextBlock Width="auto" Text="Intarziere:" Height="30" FontSize="19" Foreground="White" /><TextBlock Width="auto" Text="{Binding intarziere}" Height="30" FontSize="19"Foreground="White" /></StackPanel><StackPanel Orientation="Horizontal" Height="30"><TextBlock Width="auto" Text="Relatie:" Height="30" FontSize="19" Foreground="White" /><TextBlock Width="auto" Text="{Binding relatie}" Height="30" FontSize="19"Foreground="White" /></StackPanel><StackPanel Orientation="Horizontal" Height="30"><TextBlock Width="auto" Text="Data:" Height="30" FontSize="19" Foreground="White" /><TextBlock Width="auto" Text="{Binding data}" Height="30" FontSize="19" Foreground="White"/>

</StackPanel></StackPanel>

</StackPanel>

</Border>

</DataTemplate></ListBox.ItemTemplate>

</ListBox>

</StackPanel></ScrollViewer><Canvas Name="helpCanvas"

Background="Black"VerticalAlignment="Bottom"HorizontalAlignment="Stretch"Width="480"Height="400"Visibility="Collapsed" Margin="-24,0,-23,0" Grid.ColumnSpan="2">

<Button Name="helpCloseButton"Canvas.Left="430"Canvas.Top="0"Width="50"Height="50"Click="helpCloseButton_Click"><Button.Background>

<ImageBrushImageSource="/IntarzieriCFR;component/Images/appbar.close.rest.png" Stretch="None" />

</Button.Background></Button><HyperlinkButton

Content="EN"Click="HyperlinkButton_Click"Canvas.Left="350"Canvas.Top="0"

Page 27: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Width="50"Height="50">

</HyperlinkButton><ScrollViewer Name="helpScrollViewer"

Canvas.Left="0"Canvas.Top="50"

Width="480"Height="300">

<TextBlock Name="helpTextBlock"Foreground="Orange"FontSize="24"TextWrapping="Wrap"Height="auto">

Aceasta aplicatie a fost creata pentru a prezinta evenimentele neplacute,mai precisintarzierile regulate sau intamplatoare ale trenurilor cu care au circulat cetatenii romanisau cetatenii ale altor tari care au vizitat frumoasa tara Romania.

<LineBreak></LineBreak>Atinge butonul "X" din coltul ecranului negru pentru a iesi sau citeste mai departe

instructiunile de folosire a aplicatiei.<LineBreak></LineBreak><LineBreak></LineBreak>Instructiuni de folsire a aplicatiei:<LineBreak></LineBreak><LineBreak></LineBreak>

1. Atinge butonul "+" pentru a completa formularul si a adauga un evenimentneplacut(o intarziere a unui tren) la care ai luat parte in calatoriile tale prin Romania.

<LineBreak></LineBreak><LineBreak></LineBreak>

2. Atinge butonul "Afiseaza lista de evenimente" pozitionat sub titlul aplicatieipentru a vedea evenimenetele neplacute cu care s-au confruntat altii si care te-ar puteainteresa si pe tine.

<LineBreak></LineBreak><LineBreak></LineBreak>

Atinge butonul "X" din coltul din dreapta sus al ecranului negru pentru a iesi.</TextBlock>

</ScrollViewer>

</Canvas><Canvas Name="helpCanvas1"

Background="Black"VerticalAlignment="Bottom"HorizontalAlignment="Stretch"Width="480"Height="400"Visibility="Collapsed" Margin="-24,0,-23,0" Grid.ColumnSpan="2">

<Button Name="helpCloseButton1"Canvas.Left="430"Canvas.Top="0"Width="50"Height="50"Click="helpCloseButton1_Click"><Button.Background>

<ImageBrushImageSource="/IntarzieriCFR;component/Images/appbar.close.rest.png" Stretch="None" />

</Button.Background></Button><HyperlinkButton

Content="RO"Click="HyperlinkButton_Click_1"Canvas.Left="350"Canvas.Top="0"Width="50"

Page 28: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Height="50">

</HyperlinkButton>

<ScrollViewer Name="helpScrollViewer1"Canvas.Left="0"Canvas.Top="50"

Width="480"Height="300">

<TextBlock Name="helpTextBlock1"Foreground="Orange"FontSize="24"TextWrapping="Wrap"Height="auto">

This application was designed to present unpleasant events, regularor random delays of trains that traveled Romanian citizens or citizens of other countrieswho have visited the beautiful country Romania.

<LineBreak></LineBreak>Touch the "X" botton located in the right upper corner of the black

screen to exit from help mode or read the instructions for using this application.<LineBreak></LineBreak><LineBreak></LineBreak>How to use the application:<LineBreak></LineBreak><LineBreak></LineBreak>1.Touch the "+" button and fill the form to add an unpleasant event

(a delay of a train) that you participated in your travels through Romania.<LineBreak></LineBreak><LineBreak></LineBreak>2. Touch button "Afiseaza lista de evenimente" located under the

title application to view unpleasant events that others have experienced and you may beinterested in you too.

<LineBreak></LineBreak><LineBreak></LineBreak>Touch the "X" botton located in the right upper corner of the black

screen to exit from help mode.</TextBlock>

</ScrollViewer>

</Canvas>

</Grid></StackPanel><Grid.Background>

<ImageBrush ImageSource="/IntarzieriCFR;component/Images/1040trainway.jpg"Stretch="None" />

</Grid.Background></Grid>

<!--Sample code showing usage of ApplicationBar--><phone:PhoneApplicationPage.ApplicationBar>

<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"><shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png"

Text="Adauga" Click="ApplicationBarIconButton_Click"/><!--<shell:ApplicationBarIconButton

IconUri="/Images/appbar.feature.search.rest.png" Text="Evenimente" />--><shell:ApplicationBarIconButton IconUri="/Images/appbar.questionmark.rest.png"

Text="Ajutor" Click="ApplicationBarIconButton_Click_2"/>

<shell:ApplicationBar.MenuItems>

</shell:ApplicationBar.MenuItems></shell:ApplicationBar>

Page 29: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

</phone:PhoneApplicationPage.ApplicationBar>

<phone:PhoneApplicationPage.Projection><PlaneProjection x:Name="planeProjection"

CenterOfRotationX="0" /></phone:PhoneApplicationPage.Projection>

<phone:PhoneApplicationPage.Triggers><EventTrigger>

<BeginStoryboard><Storyboard>

<DoubleAnimation Storyboard.TargetName="planeProjection"Storyboard.TargetProperty="RotationY"From="-90" To="0" Duration="0:0:01" />

</Storyboard></BeginStoryboard>

</EventTrigger></phone:PhoneApplicationPage.Triggers>

</phone:PhoneApplicationPage>

4.2.2 MainPage.xaml.csusing System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;using System.Xml.Linq;using System.Runtime.Serialization.Json;using System.Collections.ObjectModel;using System.Windows.Threading;

namespace IntarzieriCFR{

public partial class MainPage : PhoneApplicationPage{

// Constructorpublic MainPage(){

InitializeComponent();

DispatcherTimer tmr = new DispatcherTimer();tmr.Interval = TimeSpan.FromSeconds(1);tmr.Tick += OnTimerTick;tmr.Start();

}void OnTimerTick(object sender, EventArgs args){

myCeas.Text = DateTime.Now.ToString();}

Page 30: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

private void myButton_Click(object sender, RoutedEventArgs e){

FirstStoryBoard.Begin();

try{

WebClient webClient = new WebClient();Uri uri = new Uri("http://127.0.0.1/data.json?nocache=" + Guid.NewGuid());webClient.OpenReadCompleted += new

OpenReadCompletedEventHandler(webClient_OpenReadCompleted);webClient.OpenReadAsync(uri);

}catch (Exception ex){

MessageBox.Show(ex.Message);}

}

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e){

myButton.Visibility = System.Windows.Visibility.Collapsed;

DataContractJsonSerializer ser = null;try{

ser = new DataContractJsonSerializer(typeof(ObservableCollection<Tren>));ObservableCollection<Tren> trenuri = ser.ReadObject(e.Result) as

ObservableCollection<Tren>;lista_intarzieri.ItemsSource = trenuri;

}catch (Exception ex){

MessageBox.Show(ex.Message);}

}

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgse)

{NavigationService.RemoveBackEntry();base.OnNavigatedTo(e);

}

private void ApplicationBarIconButton_Click(object sender, EventArgs e){

NavigationService.Navigate(new Uri("/IntarzieriCFR;component/Submit.xaml",UriKind.Relative));

}

private void ApplicationBarIconButton_Click_2(object sender, EventArgs e){

helpCanvas.Visibility = System.Windows.Visibility.Visible;}

private void helpCloseButton_Click(object sender, RoutedEventArgs e){

helpCanvas.Visibility = System.Windows.Visibility.Collapsed;}

private void HyperlinkButton_Click(object sender, RoutedEventArgs e){

Page 31: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

helpCanvas.Visibility = System.Windows.Visibility.Collapsed;helpCanvas1.Visibility = System.Windows.Visibility.Visible;PageTitle.Text = "Top 100 CFR delays";

}

private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e){

helpCanvas1.Visibility = System.Windows.Visibility.Collapsed;helpCanvas.Visibility = System.Windows.Visibility.Visible;PageTitle.Text = "Top 100 intarzieri CFR";

}

private void helpCloseButton1_Click(object sender, RoutedEventArgs e){

helpCanvas1.Visibility = System.Windows.Visibility.Collapsed;PageTitle.Text = "Top 100 intarzieri CFR";

}}

}

4.3 Fisierul Submit4.3.1 Submit.xaml<phone:PhoneApplicationPage

x:Class="IntarzieriCFR.Submit"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"FontFamily="{StaticResource PhoneFontFamilyNormal}"FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"mc:Ignorable="d" d:DesignHeight="696" d:DesignWidth="480"shell:SystemTray.IsVisible="True">

<phone:PhoneApplicationPage.Resources><ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">

<Border BorderThickness="2" CornerRadius="15" Margin="19,0,0,18"><Border.Background>

<LinearGradientBrush EndPoint="0.5,1"MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">

<GradientStop Color="#FF2C46AB" Offset="1"/><GradientStop Color="#FF33347C"/>

</LinearGradientBrush></Border.Background><TextBlock TextWrapping="Wrap" Text="Trimite datele"

HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock.Foreground>

<LinearGradientBrush EndPoint="0.5,1"MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">

<GradientStop Color="Black" Offset="1"/><GradientStop Color="#FF270D0D"/>

</LinearGradientBrush></TextBlock.Foreground>

</TextBlock></Border>

</ControlTemplate></phone:PhoneApplicationPage.Resources>

<!--LayoutRoot is the root grid where all page content is placed-->

Page 32: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

<Grid x:Name="LayoutRoot" >

<Grid.Background><ImageBrush ImageSource="/IntarzieriCFR;component/Images/tren_detalii.jpg"

Stretch="Fill" /></Grid.Background><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/>

</Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title--><StackPanel x:Name="TitlePanel" Margin="0,-29,0,0" Grid.RowSpan="2">

<TextBlock x:Name="ApplicationTitle" Text="" Style="{StaticResourcePhoneTextNormalStyle}" HorizontalAlignment="Stretch"/>

<TextBlock x:Name="PageTitle" Text="" Margin="9,-7,0,0" Style="{StaticResourcePhoneTextTitle1Style}" HorizontalAlignment="Stretch"/>

</StackPanel><!--ContentPanel - place additional content here-->

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0" Background="{x:Null}"><ProgressBar Value="250" Name="progressBar1" Height="15" Visibility="Visible"

Margin="0,357,-4,324" Foreground="#FF01F21F" /><TextBlock Text="Tren" Margin="16,20,383,0" FontSize="21" Height="35"

VerticalAlignment="Top"></TextBlock><TextBox x:Name="tren" Background="Gray" Height="55" Margin="126,14,0,627"

FontSize="15" InputScope="Number" HorizontalAlignment="Left" Width="126"></TextBox><TextBlock Height="41" HorizontalAlignment="Left" Margin="16,81,0,0"

Name="textBlock1" Text="Data" VerticalAlignment="Top" /><TextBox Height="55" Background="Gray" Margin="65,67,0,0" Text="zi" Name="zi"

InputScope="Number" VerticalAlignment="Top" FontSize="15" HorizontalAlignment="Left"Width="93" />

<TextBox Height="55" Background="Gray" HorizontalAlignment="Left"Margin="163,67,0,0" Text="luna" Name="luna" InputScope="Number" VerticalAlignment="Top"Width="93" FontSize="15" />

<TextBox Height="55" Background="Gray" HorizontalAlignment="Left"Margin="258,67,0,0" Text="an" Name="an" InputScope="Number" VerticalAlignment="Top"Width="93" FontSize="15" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="13,141,0,0"Name="textBlock2" Text="Timp de parcurs efectiv" VerticalAlignment="Top" />

<TextBox Height="55" Background="Gray" HorizontalAlignment="Right"Margin="0,132,163,0" Text="ore" Name="Eore" InputScope="Number" VerticalAlignment="Top"Width="75" FontSize="15" />

<TextBox Height="55" Background="Gray" HorizontalAlignment="Left"Margin="299,132,0,0" Text="minute" Name="Eminute" InputScope="Number"VerticalAlignment="Top" Width="85" FontSize="15" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="16,205,0,0"Name="textBlock3" Text="Timp de parcurs bilet " VerticalAlignment="Top" />

<TextBox Height="55" Background="Gray" HorizontalAlignment="Left"Margin="218,193,0,0" Text="ore" Name="Bore" InputScope="Number" VerticalAlignment="Top"Width="75" FontSize="15" />

<TextBox Height="55" Background="Gray" HorizontalAlignment="Left"Margin="299,0,0,448" Text="minute" Name="Bminute" InputScope="Number"VerticalAlignment="Bottom" Width="85" FontSize="15" />

<TextBlock Text="Motivul intarzierii" Margin="16,253,263,415"></TextBlock><TextBox Height="92" MaxLength="250" Text="(maxim 250 de caractere)"

TextWrapping="Wrap" Background="Gray" x:Name="motiv" HorizontalAlignment="Left"Margin="0,275,0,0" VerticalAlignment="Top" Width="460" FontSize="15" />

<TextBlock Height="27" HorizontalAlignment="Left" Margin="16,373,0,0"Name="textBlock4" Text="Alte detalii despre calatorie" VerticalAlignment="Top"/>

Page 33: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

<TextBox Height="92" TextWrapping="Wrap" Background="Gray"HorizontalAlignment="Left" Margin="0,393,0,0" x:Name="altele" Text=""VerticalAlignment="Top" Width="460" FontSize="15" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="16,503,0,0"Name="textBlock5" Text="Statie plecare" VerticalAlignment="Top" />

<TextBox Height="62" Background="Gray" HorizontalAlignment="Left"Margin="146,486,0,0" x:Name="plecare" Text="" VerticalAlignment="Top" Width="314"FontSize="15" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="16,559,0,0"Name="textBlock6" Text="Statie sosire" VerticalAlignment="Top" />

<TextBox Height="62" Background="Gray" HorizontalAlignment="Left"Margin="146,545,0,0" Name="sosire" Text="" VerticalAlignment="Top" Width="314"FontSize="15" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="16,622,0,0"Name="textBlock7" Text="Distanta" VerticalAlignment="Top" />

<TextBox Height="61" Background="Gray" HorizontalAlignment="Left"Margin="113,610,0,0" x:Name="distanta" Text="" VerticalAlignment="Top" Width="95"FontSize="15" InputScope="Number" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="220,627,0,0"Name="textBlock8" Text="(km)" VerticalAlignment="Top" FontSize="15" FontStyle="Normal"Width="36" />

<TextBlock Height="30" HorizontalAlignment="Right" Margin="0,24,20,0"Name="textBlock9" Text="Exemplu: IR 1793" VerticalAlignment="Top" FontSize="18"FontStyle="Italic" Width="178" />

<ListBox Height="64" Margin="85,11,0,0" x:Name="rang" VerticalAlignment="Top"HorizontalAlignment="Left" Width="73" FontSize="10">

<ListBoxItem Foreground="White" FontSize="15">R</ListBoxItem><ListBoxItem Foreground="White" FontSize="15">IR</ListBoxItem><ListBoxItem Foreground="White" FontSize="15">IC</ListBoxItem>

</ListBox><TextBlock Height="26" HorizontalAlignment="Left" Margin="400,255,0,0"

Name="textBlock10" TextAlignment="Center" Text="250" VerticalAlignment="Top" Width="51"Foreground="White" FontSize="20"/>

<Canvas Name="helpCanvas"Background="Black"VerticalAlignment="Bottom"HorizontalAlignment="Stretch"Width="480"Height="400"Visibility="Collapsed" Margin="-12,0,0,0">

<Button Name="helpCloseButton"Canvas.Left="430"Canvas.Top="0"Width="50"Height="50"Click="helpCloseButton_Click"><Button.Background>

<ImageBrushImageSource="/IntarzieriCFR;component/Images/appbar.close.rest.png" Stretch="None" />

</Button.Background></Button><HyperlinkButton

Content="EN"Click="HyperlinkButton_Click"Canvas.Left="350"Canvas.Top="0"Width="50"Height="50">

</HyperlinkButton>

<ScrollViewer Name="helpScrollViewer"Canvas.Left="0"Canvas.Top="50"

Page 34: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Width="480"Height="300">

<TextBlock Name="helpTextBlock"Foreground="Orange"FontSize="24"TextWrapping="Wrap"Height="auto">

Aceasta aplicatie a fost creata pentru a prezinta evenimenteleneplacute,mai precis intarzierile regulate sau intamplatoare ale trenurilor cu care aucirculat cetatenii romani sau cetatenii ale altor tari care au vizitat frumoasa taraRomania.

<LineBreak></LineBreak>Atinge butonul "X" din coltul din dreapta sus al ecranului negru

pentru a iesi din modul ajutor sau citeste mai departe instructiunile de folosire aaplicatiei.

<LineBreak></LineBreak><LineBreak></LineBreak>Instructiuni de completare a formularului:<LineBreak></LineBreak><LineBreak></LineBreak>1. Selecteaza una dintre valorile "R","IR" sau "IC" care reprezinta

categoriile de trenuri disponibile pentru calatorii iar in casuta din dreapta acestorvalori scrie numarul trenului.

<LineBreak></LineBreak><LineBreak></LineBreak>2. Continua completarea formularului prin scrierea datelor corecte

in casutele corespunzatoare.<LineBreak></LineBreak><LineBreak></LineBreak>3. Dupa ce ai terminat de completat formularul atinge butonul

"Trimite" pentru a incarca datele in baza de date.<LineBreak></LineBreak><LineBreak></LineBreak>4. ATENTIE !!! Fiecare casuta trebuie completata,altfel datele nu

vor fi inregistrate.<LineBreak></LineBreak><LineBreak></LineBreak>Atinge butonul "X" din coltul din dreapta sus al ecranului negru

pentru a iesi din modul ajutor.</TextBlock>

</ScrollViewer>

</Canvas><Canvas Name="helpCanvas1"

Background="Black"VerticalAlignment="Bottom"HorizontalAlignment="Stretch"Width="480"Height="400"Visibility="Collapsed" Margin="-12,0,0,0">

<Button Name="helpCloseButton1"Canvas.Left="430"Canvas.Top="0"Width="50"Height="50"Click="helpCloseButton1_Click"><Button.Background>

<ImageBrushImageSource="/IntarzieriCFR;component/Images/appbar.close.rest.png" Stretch="None" />

</Button.Background></Button><HyperlinkButton

Page 35: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Content="RO"Click="HyperlinkButton_Click_1"Canvas.Left="350"Canvas.Top="0"Width="50"Height="50">

</HyperlinkButton>

<ScrollViewer Name="helpScrollViewer1"Canvas.Left="0"Canvas.Top="50"

Width="480"Height="300">

<TextBlock Name="helpTextBlock1"Foreground="Orange"FontSize="24"TextWrapping="Wrap"Height="auto">

This application was designed to present unpleasant events, regularor random delays of trains that traveled Romanian citizens or citizens of other countrieswho have visited the beautiful country Romania.

<LineBreak></LineBreak>Touch the "X" botton located in the right upper corner of the

black screen to exit from help mode or read the instructions for using this application.<LineBreak></LineBreak><LineBreak></LineBreak>Instructions for completing the form:<LineBreak></LineBreak><LineBreak></LineBreak>1.Select one of the values "R", "IR" or "IC" representing categories

of trains that are available for travel and write the train number in the box on the right.

<LineBreak></LineBreak><LineBreak></LineBreak>2. Continue completing the form by writing the correct data in the

appropriate boxes.<LineBreak></LineBreak><LineBreak></LineBreak>3. After you have completed the form tap the "Trimite" button to

load the data in database.<LineBreak></LineBreak><LineBreak></LineBreak>4. WARNING !!! Each box must be completed, otherwise the data will

not be recorded.<LineBreak></LineBreak><LineBreak></LineBreak>Touch the "X" botton located in the right upper corner of the black

screen to exit from help mode.</TextBlock>

</ScrollViewer>

</Canvas></Grid>

</Grid>

<!--Sample code showing usage of ApplicationBar--><phone:PhoneApplicationPage.ApplicationBar>

<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"><shell:ApplicationBarIconButton IconUri="/Images/appbar.back.rest.png"

Text="Prima pagina" Click="ApplicationBarIconButton_Click_1" />

Page 36: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

<shell:ApplicationBarIconButton IconUri="/Images/appbar.upload.rest.png"Text="Trimite" Click="ApplicationBarIconButton_Click"/>

<shell:ApplicationBarIconButton IconUri="/Images/appbar.questionmark.rest.png"Text="Ajutor" Click="ApplicationBarIconButton_Click_2"/>

<shell:ApplicationBar.MenuItems>

</shell:ApplicationBar.MenuItems></shell:ApplicationBar>

</phone:PhoneApplicationPage.ApplicationBar><phone:PhoneApplicationPage.Projection>

<PlaneProjection x:Name="planeProjection"CenterOfRotationX="0" />

</phone:PhoneApplicationPage.Projection>

<phone:PhoneApplicationPage.Triggers><EventTrigger>

<BeginStoryboard><Storyboard>

<DoubleAnimation Storyboard.TargetName="planeProjection"Storyboard.TargetProperty="RotationY"From="-90" To="0" Duration="0:0:01" />

</Storyboard></BeginStoryboard>

</EventTrigger></phone:PhoneApplicationPage.Triggers>

</phone:PhoneApplicationPage>

4.3.2 Submit.xaml.csusing System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;using System.Windows.Controls.Primitives;using System.ComponentModel;using System.Data;using System.Text;

namespace IntarzieriCFR{

public partial class Submit : PhoneApplicationPage{

int ramase;

public Submit(){

InitializeComponent();

Page 37: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

zi.GotFocus += new RoutedEventHandler(zi_GotFocus);luna.GotFocus += new RoutedEventHandler(luna_GotFocus);an.GotFocus += new RoutedEventHandler(an_GotFocus);Eore.GotFocus += new RoutedEventHandler(Eore_GotFocus);Eminute.GotFocus += new RoutedEventHandler(Eminute_GotFocus);Bore.GotFocus += new RoutedEventHandler(Bore_GotFocus);Bminute.GotFocus += new RoutedEventHandler(Bminute_GotFocus);motiv.KeyUp += new KeyEventHandler(textBlock10_KeyUp);motiv.GotFocus += new RoutedEventHandler(motiv_GotFocus);

}

void motiv_GotFocus(object sender, RoutedEventArgs e){

motiv.Text = "";}

void textBlock10_KeyUp(object sender, KeyEventArgs e){

ramase = 250 - motiv.Text.Length;textBlock10.Text = ramase.ToString();progressBar1.Value = motiv.Text.Length * 100 / 250;

}

void Bminute_GotFocus(object sender, RoutedEventArgs e){

Bminute.Text = "";}

void Bore_GotFocus(object sender, RoutedEventArgs e){

Bore.Text = "";}

void Eminute_GotFocus(object sender, RoutedEventArgs e){

Eminute.Text = "";}

void Eore_GotFocus(object sender, RoutedEventArgs e){

Eore.Text = "";}

void an_GotFocus(object sender, RoutedEventArgs e){

an.Text = "";}

void luna_GotFocus(object sender, RoutedEventArgs e){

luna.Text = "";}

void zi_GotFocus(object sender, RoutedEventArgs e){

zi.Text = "";}

public void Trimite(){

string Parametri, Tren, Data, Motiv, Detalii, Plecare, Sosire, Rang;int tpe, tpb,distance;

Page 38: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

ListBoxItem list = rang.SelectedItem as ListBoxItem;Rang = list.Content.ToString();

Tren = Rang + " " + tren.Text;

Data = an.Text + "-" + luna.Text + "-" + zi.Text;

tpe = int.Parse(Eore.Text) * 60+ int.Parse(Eminute.Text);

tpb = int.Parse(Bore.Text) * 60 + int.Parse(Bminute.Text);

Motiv = motiv.Text;Detalii = altele.Text;distance = int.Parse(distanta.Text);Plecare = plecare.Text;Sosire = sosire.Text;Parametri="tren="+Tren+"&data="+Data+"&timp_bilet="+tpb+"&timp_efectiv="+tpe+

"&motiv="+Motiv+"&altele="+Detalii+"&plecare="+Plecare+"&destinatie="+Sosire+"&distanta="+distance;

try{

WebClient upload = new WebClient();upload.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-

urlencoded";Uri uri = new Uri("http://127.0.0.1/receive.php");upload.UploadStringCompleted += new

UploadStringCompletedEventHandler(upload_UploadStringCompleted);upload.UploadStringAsync(uri,"POST",Parametri);

}catch(Exception ex){

MessageBox.Show(ex.Message);}

}

void upload_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e){

MessageBox.Show("Datele au fost incarcate cu succes!");NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

}

// void trimite_button_Click(object sender, RoutedEventArgs e)// {// Trimite();//}

private void ApplicationBarIconButton_Click(object sender, EventArgs e){

Trimite();}

private void ApplicationBarIconButton_Click_2(object sender, EventArgs e){

helpCanvas.Visibility = System.Windows.Visibility.Visible;

}private void helpCloseButton_Click(object sender, RoutedEventArgs e){

helpCanvas.Visibility = System.Windows.Visibility.Collapsed;}

private void HyperlinkButton_Click(object sender, RoutedEventArgs e)

Page 39: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

{helpCanvas.Visibility = System.Windows.Visibility.Collapsed;helpCanvas1.Visibility = System.Windows.Visibility.Visible;

}

private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e){

helpCanvas1.Visibility = System.Windows.Visibility.Collapsed;helpCanvas.Visibility = System.Windows.Visibility.Visible;

}

private void helpCloseButton1_Click(object sender, RoutedEventArgs e){

helpCanvas1.Visibility = System.Windows.Visibility.Collapsed;

}

private void ApplicationBarIconButton_Click_1(object sender, EventArgs e){

NavigationService.Navigate(new Uri("/IntarzieriCFR;component/MainPage.xaml",UriKind.Relative));

}}

}

4.4 Fisierul Detalii4.4.1 Detalii.xaml<phone:PhoneApplicationPage

x:Class="IntarzieriCFR.Detalii"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"FontFamily="{StaticResource PhoneFontFamilyNormal}"FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"shell:SystemTray.IsVisible="True">

<!--LayoutRoot is the root grid where all page content is placed--><Grid x:Name="LayoutRoot" >

<Grid.Background><ImageBrush ImageSource="/IntarzieriCFR;component/Images/tren_detalii.jpg"

Stretch="Fill" /></Grid.Background>

<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/>

</Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title-->

Page 40: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"Background="{x:Null}">

<TextBlock x:Name="ApplicationTitle" Text="DATA ÎNTÂRZIERII"Style="{StaticResource PhoneTextNormalStyle}"/>

<TextBlock x:Name="PageTitle" Text="" Margin="9,-7,0,0" Style="{StaticResourcePhoneTextTitle1Style}"/>

</StackPanel>

<ScrollViewer VerticalScrollBarVisibility="Visible"Grid.Row="1" Margin="-21,0,-15,0"

Width="480"Height="auto">

<!--ContentPanel - place additional content here--><Grid x:Name="ContentPanel" Grid.Row="1" Margin="8,0,16,0">

<TextBlock Height="30" HorizontalAlignment="Left" Margin="24,33,0,0"Name="textBlock1" Text="Trenul" VerticalAlignment="Top" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="84,33,0,0"Name="trenul" Text="" VerticalAlignment="Top" FontWeight="ExtraBold"/>

<TextBlock Height="30" HorizontalAlignment="Left" Margin="161,33,0,0"Name="textBlock2" Text="a întârziat" VerticalAlignment="Top" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="254,33,0,0"Name="delay" Text="" VerticalAlignment="Top" Foreground="Yellow" Width="122" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="25,69,0,0"Name="textBlock3" Text="pe ruta" VerticalAlignment="Top" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="97,69,0,0"Name="relatia" Text="" VerticalAlignment="Top" FontWeight="ExtraBold" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="25,105,0,0"Name="textBlock4" Text="Viteza medie efectivă a fost de " VerticalAlignment="Top"Width="281"/>

<TextBlock Height="30" HorizontalAlignment="Left" Margin="306,105,0,0"Name="viteza_efectiva" Text="" VerticalAlignment="Top" Foreground="Tomato"FontWeight="Bold" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="24,141,0,0"Name="textBlock6" Text="în loc de " VerticalAlignment="Top" />

<TextBlock Height="30" HorizontalAlignment="Left" Margin="111,141,0,0"Name="viteza_bilet" Text="" VerticalAlignment="Top" Foreground="MediumSeaGreen"FontWeight="Bold"/>

<TextBlock Height="30" FontSize="25" HorizontalAlignment="Left"Margin="24,213,0,0" Name="textBlock7" Text="Motivul întârzierii" VerticalAlignment="Top"Foreground="Orange" />

<TextBlock x:Name="motivul"TextAlignment="Left"TextWrapping="Wrap"Margin="25,249,25,0"

VerticalAlignment="Top" Height="auto" />

<!--<ListBox Margin="25,285,25,248" >

<RichTextBox HorizontalAlignment="Left" Margin="24,24,0,0"><Paragraph x:Name="motivul" TextAlignment="Left" >

</Paragraph></RichTextBox></ListBox>-->

<TextBlock Height="30" FontSize="25" HorizontalAlignment="Left"Margin="24,418,0,0" Name="textBlock8" Text="Alte detalii despre călătorie"VerticalAlignment="Top" Foreground="Orange" />

<TextBlock x:Name="altedetalii"TextAlignment="Left"TextWrapping="Wrap"Margin="24,454,26,0"VerticalAlignment="Top" Height="auto" />

Page 41: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

<TextBlock Height="30" HorizontalAlignment="Left" Margin="24,177,0,0"Name="textBlock10" Text="Distanta parcursa a fost " VerticalAlignment="Top"Foreground="White"/>

<TextBlock Height="30" Width="auto" HorizontalAlignment="Left"Margin="237,177,0,0" Name="distance" Text="" VerticalAlignment="Top" Foreground="SlateBlue"FontWeight="Bold" />

</Grid></ScrollViewer>

</Grid><phone:PhoneApplicationPage.Projection>

<PlaneProjection x:Name="planeProjection"CenterOfRotationX="0" />

</phone:PhoneApplicationPage.Projection>

<phone:PhoneApplicationPage.Triggers><EventTrigger>

<BeginStoryboard><Storyboard>

<DoubleAnimation Storyboard.TargetName="planeProjection"Storyboard.TargetProperty="RotationY"From="-90" To="0" Duration="0:0:01" />

</Storyboard></BeginStoryboard>

</EventTrigger></phone:PhoneApplicationPage.Triggers>

</phone:PhoneApplicationPage>

4.4.2 Detalii.xaml.csusing System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;

namespace IntarzieriCFR{

public partial class Detalii : PhoneApplicationPage{

string intarziere, relatie, tren, motiv, altele, data, ev, be, dist;public Detalii(){

InitializeComponent();}protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs

e){

base.OnNavigatedTo(e);if (NavigationContext.QueryString.TryGetValue("relatie", out

relatie)&&NavigationContext.QueryString.TryGetValue("data", outdata)&&NavigationContext.QueryString.TryGetValue("distanta", outdist)&&NavigationContext.QueryString.TryGetValue("vb", outbe)&&NavigationContext.QueryString.TryGetValue("ve", outev)&&NavigationContext.QueryString.TryGetValue("altele", out

Page 42: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

altele)&&NavigationContext.QueryString.TryGetValue("motiv", outmotiv)&&NavigationContext.QueryString.TryGetValue("tren", out tren) &&(NavigationContext.QueryString.TryGetValue("intarziere", out intarziere)))

{

ApplicationTitle.Text = data;PageTitle.Text = tren;trenul.Text = tren;relatia.Text = relatie;delay.Text = intarziere;motivul.Inlines.Add(motiv);altedetalii.Inlines.Add(altele);viteza_bilet.Text = be;viteza_efectiva.Text = ev;distance.Text = dist;

}}

}}

4.5 Tren.csusing System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;

namespace IntarzieriCFR{

public class Tren{

public string Intarziere,Relatie, Link,vme,vmb; //membri de calculat

public int id { get; set; }

public string nume_tren { get; set; }

public string motiv { get; set; }

public string altele { get; set; }

public int timp_parcurs_efectiv { get; set; }

public int timp_parcurs_bilet { get; set; }

public string data { get; set; }

public int distanta { get; set; }

public string plecare { get; set; }

public string sosire { get; set; }

public string relatie { get { return plecare + " - " + sosire; } set { this.Relatie= relatie; } }

Page 43: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

public string intarziere { get { return (timp_parcurs_efectiv -timp_parcurs_bilet).ToString() + " minute"; } set { this.Intarziere = intarziere; } }

public string viteza_medie_efectiva { get { return (distanta*60 /timp_parcurs_efectiv).ToString() + " km/h"; } set { this.viteza_medie_efectiva =viteza_medie_efectiva; } }

public string viteza_medie_bilet { get { return (distanta*60 /timp_parcurs_bilet).ToString() + " km/h"; } set { this.viteza_medie_bilet =viteza_medie_bilet; } }

public string link { get { return "/Detalii.xaml?tren="+nume_tren+"&motiv="+motiv+"&altele=" + altele + "&relatie=" + relatie + "&intarziere=" + intarziere +

"&ve=" + viteza_medie_efectiva + "&vb=" + viteza_medie_bilet + "&distanta=" +distanta.ToString()+" km" + "&data=" + data;

}set { this.Link=link; } }

}}

4.6 Fisiere PHP4.6.1 Connect.php<?php//conectare la o baza de date fara parolaclass DB{private $locatie, $user; public $db,$query;public function conectare_bd(){

return mysql_connect($this->locatie,$this->user);}

public function selectare_bd(){return mysql_select_db($this->db);}

public function interogare($query){return mysql_query($this->query);

}public function __construct($server,$utilizator,$baza_date,$interogare){

$this->locatie=$server;$this->user=$utilizator;$this->db=$baza_date;$this->query=$interogare;}

}class tren_intarziat{public $tren,$data,$timp_bilet,$timp_efectiv,$motiv, $altele, $plecare, $destinatie,$distanta;public function __construct(){

$this->tren=@$_POST['tren'];$this->data=@$_POST['data'];$this->timp_bilet=@$_POST['timp_bilet'];$this->timp_efectiv=@$_POST['timp_efectiv'];$this->motiv=@$_POST['motiv'];$this->altele=@$_POST['altele'];$this->plecare=@$_POST['plecare'];$this->destinatie=@$_POST['destinatie'];$this->distanta=@$_POST['distanta'];}

public function actualizare(){

Page 44: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

$interogare="INSERT INTOintarzieri_cfr(tren,data,timp_parcurs_bilet,timp_parcurs_efectiv,motiv,altele,plecare,sosire,distanta) VALUES ('$this->tren','$this->data','$this->timp_bilet','$this->timp_efectiv','$this->motiv','$this->altele','$this->plecare','$this->destinatie','$this->distanta') ";

$baza_date=new DB("localhost","root","wpapps",$interogare);$baza_date->conectare_bd();$baza_date->selectare_bd();$baza_date->interogare($interogare);}

}?>

4.6.2 Receive.php<!-- <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link href="stil.css" type="text/css" rel="stylesheet" /><title>INTARZIERI CFR</title></head><body> --><?php

require_once('connect.php');$update=new tren_intarziat();$update->actualizare();

$query="SELECT * FROM intarzieri_cfr WHERE (timp_parcurs_efectiv-timp_parcurs_bilet>10)ORDER BY timp_parcurs_efectiv-timp_parcurs_bilet DESC";$data=new DB("localhost","root","delays",$query);$data->conectare_bd(); $data->selectare_bd(); $result=$data->interogare($query);$file=fopen("data.json",'w'); $train=array();$train=""; $i=0;while($rezultat=mysql_fetch_assoc($result)){

$trains[$i]=array('id'=>intval($rezultat['id']),'nume_tren'=>$rezultat['tren'],'motiv'=>$rezultat['motiv'],'altele'=>$rezultat['altele'],'timp_parcurs_efectiv'=>intval($rezultat['timp_parcurs_efectiv']),'timp_parcurs_bilet'=>intval($rezultat['timp_parcurs_bilet']),'data'=>$rezultat['data'],'distanta'=>intval($rezultat['distanta']),'plecare'=>$rezultat['plecare'],'sosire'=>$rezultat['sosire']);

$i++;}fwrite($file,json_encode($trains));fclose($file);

?><!--</body></html>-->

Page 45: Proiect de diplomă - stst.elia.pub.rostst.elia.pub.ro/PS/2013/PS2013toamna/442A_BIRSAN_Ruben Titi.pdf · Proiect de diplom ă prezentat ca ... programul EasyPHP,baza de date fiind

Bibliografie

[1] Henry Lee,Eugene Chuvyrov, Beginning Windows Phone 7 Development, Editura Apress 2010.

[2] Charles Petzold, Programming Windows Phone 7, Editura Micrisoft Press 2010.

[3] Boryana Miloshevska, Silverlight for Windows Phone Toolkit in Depth.

[4] Rob Miles, Windows Phone Programming in C#.

[5] Zhinan Zhou,Robert Zhu,Pei Zheng,Baijian Yang, Windows® Phone 7 Programming forAndroid™ and iOS Developers, Editura John Wiley & Sons 2011.

[6] Puja Pramudya, Silverlight for Windows Phone: LEARN & PRACTICE, Editura MicrosoftInnovation Center Bandung Institute of Technology Indonesia.

[7] Paul Adamczyk, Patrick H. Smith, Ralph E. Johnson, Munawar Hafiz ,REST and Web Services:In Theory and In Practice