SPECIALIZAREA INGINERIE ECONOMICĂ ÎN DOMENIUL ELECTRIC, ELECTRONIC ȘI ELECTROTEHNIC PROIECT DE DIPLOM Ă Coordonator științific: Conf. , Dr., Ing…. [606592]

UNIVERSITATEA POLITEHNICĂ DIN BUCUREȘTI
FACULTATEA DE ANTREPRENORIAT, INGINERIE ȘI
MANAGEMENTUL AFACERILOR
SPECIALIZAREA INGINERIE ECONOMICĂ ÎN
DOMENIUL ELECTRIC, ELECTRONIC ȘI
ELECTROTEHNIC

PROIECT DE DIPLOM Ă

Coordonator științific:
Conf. , Dr., Ing. Ioan Plotog

Student: [anonimizat]
2016

UNIVERSITATEA POLITEHNICĂ DIN BUCUREȘTI
FACULTATEA DE ANTREPRENORIAT, INGINERIE ȘI
MANAGEMENTUL AFACERILOR
SPECIALIZAREA INGINERIE ECONOMICĂ ÎN
DOMENIUL ELECTRIC, ELECTRONIC ȘI
ELECTROTEHNIC

PROIECT DE DIPLOM Ă
Aplica ție software de monitorizare
a transportului în comun

Coordonator științific:
Conf. , Dr., Ing. Ioan Plotog

Student: [anonimizat]
2016

CUPRINS

Introducere ………………………….. ………………………….. ………………………… 4
Capitolul 1: Descriere limbaje de programare utilizate …………………….. 8
1.1 C# ………………………….. ………………………….. ………………………….. ……………….. 8
1.1.1. Istorie ………………………….. ………………………….. ………………………….. ……. 9
1.1.2. Sintaxa ………………………….. ………………………….. ………………………….. …. 11
1.1.3. Caracteristici distinctive ………………………….. ………………………….. ……… 11
1.1.4. Categorii de tipuri de date ………………………….. ………………………….. …… 15
1.2. SQL ………………………….. ………………………….. ………………………….. …………… 16
1.2.1. Istorie ………………………….. ………………………….. ………………………….. ….. 16
1.2.2. Element ele limbajului ………………………….. ………………………….. ………… 17
1.2.3. Tipuri de date ………………………….. ………………………….. ……………………. 17
Capitolul 2: Codul Sursă ………………………….. ………………………….. ……. 18
2.1. Codul Sursă C# ………………………….. ………………………….. ……………………….. 18
2.2. Exp licații secvențe de cod esențiale ………………………….. ……………………….. 23
2.3. Codul de design Visual Studio: ………………………….. ………………………….. …. 29
2.4. Crearea tabelelor in SQL: ………………………….. ………………………….. …………. 35
Capitolul 3: Simularea aplicației ………………………….. …………………….. 37
Capitolul 4: Propunerea și oportunitatea dezvoltării unei afaceri …….. 40
4.1 Conceptul aplicației ………………………….. ………………………….. ………………….. 40
4.2 Analiza macromediului ………………………….. ………………………….. …………….. 42
4.3. Motive de încredere din partea investitorilor ………………………….. …………… 44
4.4. Analiza pieței ………………………….. ………………………….. ………………………….. 45
4.5. Mix ul de marketing ………………………….. ………………………….. …………………. 46
4.6. Finanțele afacerii ………………………….. ………………………….. …………………….. 46
Concluzii și perspective de dezvoltare ………………………….. …………….. 48
Bibliografie ………………………….. ………………………….. ……………………… 50
Anexe ………………………….. ………………………….. ………………………….. …. 51

4
Introducere

Programul ce reprezintă subiectul acestei lucrări își propune a reprezenta un
prototip ce are ca scop monitorizarea transportului în comun acesta nu este un
produs finit, întrucât pe parcursul dezvoltării acestuia nu a existat acces la o bază
de date online, fapt ce împiedică funcționarea normală a acestuia. Acest prototip
este format din 2 mari componente:
 Baza de date SQL, în care se află date legate de corespondența dintre
stațiile de autobuz și traseele ce parcurg aceste stații, dar și coordonatele
GPS ale fiecărei stații în parte.
 Interfața grafică realizată în C#, care conține 2 câmpuri de selecție ale
traseului că utat și, respectiv, stației căutate; un buton ce declanșează
căutarea; un browser web conectat la API -ul (Application Programming
Interface) Google Maps.
După selectarea celor 2 câmpuri și apăsarea butonului de căutare, se va
afișa pe hartă poziția autobu zului selectat, iar pe ecran va apărea un mesaj care va
anunța utilizatorul timpul estimativ în care autobuzul va ajunge în stație.
Datele despre poziția fiecărui autobuz vor fi descărcate de pe un site. Acest
lucru presupune ca în fiecare mijloc de transport să existe un GPS conectat la un
calculator, cea mai ieftină variantă fiind de tipul SoC (System on a Chip), cum ar fi
Raspberry Pi V3, Beaglebone Black, etc. Folosirea acestora facilitează de
asemenea interfațarea cu module GPS proiectate special pentru a fi utilizate cu
ușurință în sisteme embedded.

Scopul programului
Într-un oraș mare și aglomerat, precum Bucureștiul, locuitorii au nevoie să
știe cu exactitate ce mijloace de transport în comun să utilizeze și, de asemenea, ce
program de funcțio nare au acestea și ce trasee urmează. Acest program își propune
să le ofere locuitorilor Bucureștiului posibilitatea de a vedea în timp real unde se
află autobuzul, tramvaiul sau troleibuzul pe care aceștia doresc să -l folosească
pentru a ajunge la destina ție și în cât timp ajunge acesta în stație.
De asemenea, utilizând acest program este posibilă urmărirea respectării
programului de circulație al mijloacelor de transport de către regia de transport în
comun și, deci eficientizarea traseelor.

5
Aplicația sof tware devoltată poate fi considerată începutul unui proiect de
amplasare a unor panouri electronice în stațiile din București, prin intermediul
cărora călătorii, atât locuitori ai orașului, cât și turiști, să poată vedea informații
despre mijlocul de trans port pe care urmează să îl utilizeze.

Publicul țintă
Din cadrul publicului căruia i se adresează acest program face parte orice
persoană cu acces la internet, atât locuitori ai orașului București, cât și turiști
români sau străini. Adresându -se acestor pe rsoane, aplicația le oferă posibilitatea
de a utiliza mai ușor rețeaua de transport în comun, de a vedea eventualele
întârzieri, reducând astfel șansele de a întârzia la școala, facultate, locul de muncă,
etc.

Produse similare existente
În momentul de f ață există pentru android câteva aplicații similare, precum
Transport București și Transport Urban, care oferă posibilitatea de a vedea orarele
mijloacelor de transport în comun și poziția stațiilor pe harta orașului, dar care nu
permit vizualizarea poziți ei în timp real a autobuzului și anticiparea eventualelor
întârzieri. De asemenea, pentru PC -uri nu există programe care să permită
observarea poziției mijloacelor de transport pe hartă Bucureștiului, pentru niciunul
dintre sistemele de operare principale.

6
Introduction

The program represents the subject of this paper aims to be a prototype, not
a finished product during its development because there was no access to an online
database, which prevents its normal functioning. This prototype consists of two
components:
 SQL database, the data is related correspondence between bus stops and
routes that pass these stations, and GPS coordinates of each station
separately.
 GUI made in C #, which contains two fields selection of the route
searched, respectively searched station; a button that triggers the search; a
web browser connected to the API (Application Programming Interface)
Google Maps.
After selecting the 2 fields and pressing the search button , it will display the
map position of the selected bus, and the screen will display a message saying the
user the estimated time the bus will arrive at the station.
Each bus position data will be downloaded from a website. T his means that
in each vehicle there is a GPS connected to a computer, the cheapest variant of the
type SoC (System on a Chip), such as Raspberry Pi V3 Black Beaglebone, etc.
Their use also facilitates interfacing with GPS modules designed specifically for
use in embedded systems with ease.

The program aims
In a large and crowded city, such as Bucharest, residents need to know
exactly what means of transportation to use and also you have to know the running
program and what routes they follow. This progr am aims to provide the residents
of Bucharest the possibility to see in real time where the bus, tra m or trolleybus
they wish to use it to get to their wanted destination and how long it takes to reach
the station.
Software developed at the beginning of a project can be considered to
deploy electronic billboards in stations in Bucharest, through which travel both
citizens of Bucharest and tourists can see information about the means of transport
to use it.

7

Target audience
Of the public whom we address this program is anyone with Internet
access, so residents of Bucharest and Romanian and foreign tourists. Addressing
those people , the application enables them to use easier transport network, to see
delays, thereby reducing the chances of delaying school, university, work, etc.

Silimar products
At the moment there are for android few similar applications, such as
Bucharest Transport and Urban Transport, which provides the ability to view
schedules means of transport and position the stations on the map, but does not
allow viewing position in real -time bus and anticipat ion possible delays. Also for
PCs there are no programs for the observation position on the map of Bucharest
transport, for none of the main operating systems.

8
Capitolul 1: Descriere limbaje de programare utilizate

Aplicația a fost realizată în Microsoft Visual Studio 2015, deoarece acest
mediu de programare permite îmbinarea cu ușurință a limbajelor de programare
utilizate, C# și SQL, dar și deoarece facilitează realiarea unei interfațe grafice
performante într -un timp foarte scurt.
1.1 C#
Limbajul de programare C# este un limbaj creat în anul 2000 de către
Microsoft și aprobat ca standard de către Ecma (ECMA -334) și ISO (ISO/IEC
23270:2006). Acesta are următoarele paradigme:
 Orientat pe obiecte ; permite utilizarea claselor de obiecte și prezintă 3
atribute importante:
o Polimorfismul (polymorphism), adică propietatea de a putea
utiliza o singură interfață pentru mai multe tipuri de obiecte.
Polimorfismul poate fi:
 ad-hoc, atunci când o funcție a re implementări diferite,
în funcție de tipul și numărul parametrilor acesteia
 parametric, atunci când codul este scris fără a menționa
anumite tipuri specifice de date și, astfel, având
posibilitatea de a fi utilizat cu un număr nedefinit de
parametrii
 subscris, atunci când un nume denotă mai multe instanțe
ale mai multor clase diferite, care au în comun o
superclasă
o Încapsularea (encapsulation), adică propietatea obiectelor de a
“ascunde” caracteristicile lor față de alte funcții sau alți
utilizatori
o Moștenirea (inheritance), adică propietatea subclaselor de a
prelua caracteristicile clasei părinte
 Imperativ : se bazează pe comenzi pentru a modifica starea programului
 Declarativ : exprimă modul logic de efectuare al calculului fără a
descrie modul de contro l

9
 Funcțional : tratează calculul ca evaluare de funcții matematice și evită
starea și datele mutabile. Se pune accent pe aplicarea de funcții, spre
deosebire de programarea imperativă, care se folosește în principal de
schimbările de stare. Modelul matemati c al programării funcționale îl
reprezintă calculul lambda. Limbajele funcționale moderne pot fi
considerate extensii ale calculului lambda. Noțiunea de bază în această
paradigmă este cea de funcție de nivel înalt, o funcție care poate accepta
ca argument sau returna ca valoare o altă funcție.

1.1.1. Istorie
În timpul dezvoltării.NET Framework, bibliotecile de clasă au fost scrise
inițial utilizând un sistem de compilator de cod gestionat numit simplu Managed C
(SMC). În ianuarie 1999, Anders Hejlsberg a format o echipă pentru a construi un
nou limbaj de programare, la momentul respectiv numit Cool, care a însemnat
"limbaj orientat ca și C Object". Microsoft a luat în considerare păstrarea denumirii
"cool" ca nume final al limbajului, dar a ales să nu facă acest lucru din motive de
marcă. În momentul în care proiectul.NET a fost anunțat public în iulie 2000 în
cadrul Professional Developers Conference, limbajul a fost redenumit C#, iar
bibliotecile de clasă și runtime -ul ASP.NET au fost portate la C#. Proie ctantul
principal al C# de la Microsoft este Anders Hejlsberg, care a fost implicat anterior
în proiectarea Turbo Pascal, Delphi Embarcadero (fost CodeGear Delphi, Delphi
Inprise și Borland Delphi), și Visual J++. În interviuri și lucrări tehnice el a afir mat
că defectele din cele mai multe limbaje de programare majore (de exemplu, C ++,
Java, Delphi, și Smalltalk) au condus la fundamentele Runtime Common Language
(CLR), care, la rândul său, a condus la proiectarea C# în sine. James Gosling, care
a creat li mbajul de programare Java în 1994, și Bill Joy, co -fondator al Sun
Microsystems, inițiatorul Java, au numit C# o "imitație" de Java; Gosling a mai
spus că " [C # este] un fel de Java cu fiabilitate, productivitate și securitate
eliminate." Klaus Kreft și A ngelika Langer (autorii unei cărți despre C++), au
declarat într -un post pe blog că "Java și C# sunt limbaje de programare aproape
identice. Repetare plictisitoare, căreia îi lipsește inovația", "aproape nimeni nu va
pretinde că Java sau C# sunt limbaje de programare revoluționare care au schimbat
modul în care se scriu programe" și "C# a împrumutat o mulțime de la Java – și

10
vice-versa. Acum că C# suportă boxing -ul și unboxing -ul, vom avea o
caracteristică foarte similară în Java". În iulie 2000, Anders Hej lsberg a declarat că
C# "nu este o clonă Java" și este "mult mai aproape de C ++" în designul său”. De
la lansarea C# 2.0, în noiembrie 2005, C# și limbile Java au evoluat pe traiectorii
divergente, devenind oarecum mai puțin asemănătoare. Una dintre prime le
depărtări majore a survenit odată cu introducerea programării generice pentru
ambele limbi, cu implementări mult diferite. C# face uz de reificare pentru a oferi
obiecte generice de "primă clasă", care pot fi folosite precum orice altă clasă,
generarea codului realizându -se la încărcarea clasei. Mai mult decât atât, C# a
adăugat mai multe caracteristici majore pentru a implementa programarea
funcțională, culminând cu extensiile LINQ lansate odată cu C# 3.0 și cadrul său de
susținere al expresiilor lambda , metode de extensie, și tipuri anonime. Aceste
caracteristici permit programatorilor în C# să folosească tehnici de programare
funcționale, cum ar fi dispozitivele de închidere, atunci când este avantajoasă
aplicarea lor. Extensiile LINQ și importurile fu ncționale ajută dezvoltatorii pentru
a reduce cantitatea de cod "șablon", care este inclus în sarcini comune, cum ar fi
interogarea unei baze de date, parsarea unui fișier XML, sau căutarea printr -o
structură de date, mutând accentului pe logica programulu i pentru a îmbunătăți
lizibilitatea și mentenabilitatea. C# a avut o mascotă numită Andy (după Anders
Hejlsberg). Aceasta a fost retrasă pe data de 29 ianuarie 2004. C# a fost prezentat
inițial la subcomitetul ISO JTC 1/SC 22 pentru examinare, în conformit ate cu
ISO/IEC 23270: 2003, a fost retras, iar apoi a fost aprobat în conformitate cu
ISO/IEC 23270: 2006.
Numele de "C Sharp" a fost inspirat de notația muzicală diez, care indică
faptul că nota scrisă trebuie mărita cu un semiton. Acest lucru este simila r cu
numele limbajului C ++, unde "++" indică faptul că o variabilă ar trebui să fie
incrementată cu 1. Simbolul diez se aseamănă, de asemenea, cu o legătură de patru
simboluri „+” (într -o grilă cu două câte două), ceea ce denotă că limbajul este o
Îmbunăt ățire a C++. Din cauza limitărilor tehnice ale afișării (fonturi standard,
browsere, etc.), precum și a faptului că simbolul diez (U + 266F ♯ MUSIC SIGN
SHARP (HTML ♯)) nu este prezent pe tastatura standard, semnul număr (U +
0,023 # NUMBER SIGN (HTML #)) a fost ales pentru a reprezenta simbolul diez
în numele scris al limbajului de programare. Această convenție se reflectă în
specificația ECMA -334 C# Language. Cu toate acestea, atunci când este pusă în

11
practică scrierea (de exemplu, în publicitate), Micros oft utilizează simbolul
muzical.
Sufixul "Sharp" a fost folosit de o serie de alte limbaje.NET care sunt
variante ale limbajelor existente, inclusiv J# (un limbaj.NET, de asemenea,
proiectat de Microsoft, care derivă din Java 1.1), A# (dereivat din Ada), și limbajul
de programare funcțional F#.
1.1.2. Sintaxa
Sintaxa de bază a limbajului C# este similară cu cea a altor limbaje de tip C,
cum ar fi C, C ++ și Java. Pe scurt:
 Semnul punct și virgulă (;) este folosit pentru a indica sfârșitul unei
declarați i.
 Acoladele sunt utilizate pentru declarațiile de grup. Declarațiile sunt
de obicei grupate în metode (funcții), metodele în clase și clasele în
namespace -uri.
 Variabilele sunt atribuite folosind semnul egal, dar comparate prin
utilizarea a două semne ega l consecutive.
 Parantezele drepte sunt folosite la tablouri, atât pentru a le declara
cât și pentru a obține o valoare de la un anumit indice dintr -unul
dintre ele.

1.1.3. Caracteristici distinctive
Unele caracteristici notabile ale C#, care îl disting de C, C+, C++ și Java
sunt:

Portabilitatea
Prin proiectare, C# este limbajul de programare care reflectă cel mai direct
infrastructura de bază Common Language (CLI). Cele mai multe dintre tipurile
sale intrinseci corespund tipurilor de valoare implementate de cadrul CLI. Cu toate
acestea, specifică rile limbajului nu stabilesc cerințele de generare de cod ale
compilatorului: adică, nu afirmă că un compilator C# trebuie să vizeze un anumit
Common Language Runtime, să genereze un Common Intermediate Language

12
(CIL), sau să genereze orice alt format spec ific. Teoretic, un compilator C# ar
putea genera un „machine code”, precum compilatoarele tradiționale de C++ sau
Fortran.

Scrierea codului
C# sprijină declarațiile variabilelor implicite folosind cuvântul cheie” var”,
și implicit declararea tablourilor cu cuvântul cheie „new []” urmat de o inițializare
de colectare.
C# suportă un tip de date strict boolean, „bool”. Funcțiile care folosesc
condiții, cum ar fi „while” și „if”, necesită o expresie a unui tip care
implementează operatorul „true”, cum ar fi t ipul boolean. În timp ce C++ are, de
asemenea, un tip Boolean, acesta poate fi convertit în mod liber și din numere
întregi, iar expresii cum ar fi „if (a)” să solicite numai faptul că este convertibilă la
bool, permițând condiției să fie un int sau un poi nter. C# respinge folosirea
abordării "întreg înseamnă adevărat sau fals", pe motiv că, forțând programatorii să
folosească expresii care returnează exact bool, poate preveni anumite tipuri de erori
de programare, cum ar fi în cazul în care (a = b) (utiliz area atribuire „=” în loc de
egalitate „==” care, deși nu e o eroare în C sau C ++, va fi detectată de compilator,
oricum).
C# asigură condiții de siguranță mai bune la scriere decât C++. Singurele
conversii implicite sunt cele care sunt considerate sigure , cum ar fi lărgirea
numerelor întregi. Acest lucru este pus în aplicare în timpul compilării, în timpul
JIT și, în unele cazuri, în timpul rulării. Nu există conversii implicite între
Booleans și numere întregi, nici între membrii unei enumerări și numere întregi (cu
excepția literală „0”, care poate fi convertită implicit la orice tip enumerat). Orice
conversie definită de utilizator trebuie să fie marcată ca fiind explicită sau
implicită, spre deosebire de constructori copy și operatorii de conversie din C++,
care sunt ambii de tip implicit.
Membrii unei enumerări sunt plasați în propriul lor domeniu de aplicare.
Limbajul C # nu permite variabile sau funcții globale. Toate metodele și
membrii trebuie să fie declarate în cadrul claselor. Membrii statici ai claselor
publice pot substitui variabile și funcții globale. Variabilele locale nu pot umbrii
variabile ale blocului de închidere, spre deosebire de C și C ++.

13

Programarea meta
Programarea meta prin atributele C# este o parte a limbajului. Multe dintre
aceste atribute dublează funcționalitatea directivelor preprocesoare dependențe de
platformă ale CCG și ale VisualC++.

Metode și funcții
Ca în C++ și spre deosebire de Java, în C# programatorii trebuie să utilizeze
cuvântul cheie „virtual” pentru a permi te metodelor să fie suprascrise de către
subclase.
Metodele de extensie din C# permit programatorilor să utilizeze metode
statice, ca și în cazul în care acestea au fost metodele din rândul metodelor unei
clase, ceea ce permite programatorilor să adauge fu ncții la un obiect sau la derivați
ai lui unde cred că ar trebui să existe acea funcție.

Namespace
Un namespace C# asigură același nivel de izolare cod ca un pachet Java sau
un namespace C++, cu reguli și caracteristici foarte similare cu un pachet.

Accesul la memorie
În C#, pointerii la adrese de memorie pot fi utilizați numai în cadrul
blocurilor marcate în mod specific ca fiind „unsafe”, iar programele care folosesc
cod nesigur au nevoie de permisiuni adecvate pentru a rula. Cele mai multe
accesări ale obiectelor se fac prin referințe la acel obiect, în condiții de siguranță,
care întotdeauna fie indică spre un obiect "viu" sau care are valoarea „null” bine
definită; este imposibil să se obțină o referință la un obiect „mort” (unul care a fost
colect at de colectorul de gunoi), sau la un bloc aleator de memorie. Un indicator
nesigur poate indica o instanță a unui tip de valoare, tablou, string, sau un bloc de
memorie alocată pe o stivă. Codul care nu este marcat ca fiind nesigur poate stoca
si manipula în continuare pointeri prin tipul System. IntPtr, dar nu poate să
acceseze valoarea stocată în aceștia.

14
Memoria nu poate fi eliberată în mod explicit; în schimb, este în mod
automat eliberată de colectorul de gunoi. Colectorul de gunoi abordează problema
scurgerilor de memorie, prin eliberarea programatorului de responsabilitatea
eliberării memoriei care nu mai este necesară.

Polimorfism
Spre deosebire de C++, C# nu acceptă moștenirea multiplă, cu toate că o
clasă poate pune în aplicare orice număr de in terfețe. Aceasta a fost o decizie de
design al arhitectului șef al limbajului, pentru a evita complicațiile și pentru a
simplifica cerințele de arhitectură din CLI. Atunci când se pun în aplicare mai
multe interfețe care conțin o metodă cu aceeași semnătur ă, C# permite punerea în
aplicare a fiecărei metode în funcție de interfață din care metoda este invocată.
Cu toate acestea, spre deosebire de Java, C# suportă supraîncărcarea.
Numai cei mai frecvent suprasolicitați operatorii din C++ pot fi supraîncărcați în
C#.

Programarea funcțională
Cu toate că în primul rând este un limbaj imperativ, C# 2.0 a oferit un
sprijin limitat pentru programarea funcțională prin intermediul funcțiilor de primă
clasă și sistemelor de închidere sub formă de delegați anonimi. C# 3.0 a extins
sprijinul pentru programarea funcțională, cu introducerea unei sintaxe ușoare
pentru expresiile lambda și pentru metodele de extensie.

Sistemul de tip comun
C# are un sistem de tip unificat. Acest sistem de tip unificat este denumit
System Type Common (CTS).
Un sistem de tip unificat implică faptul că toate tipurile, inclusiv primitivele
cum ar fi numerele întregi, sunt subclase ale clasei System. Object. De exemplu,
fiecare tip moștenește o metodă ToString ().

15
1.1.4. Categorii de tipuri de date
CTS separă tipurile de date în două categorii:
 tipuri de referință
 tipuri de valoare
Instanțele tipurilor de valoare nu au identitate referențială, nici semantici de
comparare referențială – egalitatea și comparațiile de inegalitate pentru tipurile de
valoare compară valorile reale de date din cadrul instanțelor, cu excepția cazului în
care operatorii corespunzători sunt supraîncărcați. Tipurile de valoare sunt derivate
din System. ValueType, au întotdeauna o valoare prestabilită și pot fi întotdeau na
create și copiate. Alte limitări cu privire la tipurile de valoare sunt faptul că acestea
nu pot deriva din ele (dar li se pot aplica interfețe) și nu pot avea un constructor
fără parametri. Exemple de tipuri de valoare sunt toate tipurile primitive, cu m ar fi
int, float, char și System. DateTime (identifică un anumit punct în timp cu precizie
de câteva nanosecunde). Alte exemple sunt enum (enumerările) și struct (structuri
definite de utilizator).
În contrast, tipurile de referință au noțiunea de identi tate referențiala –
fiecare instanță a unui tip de referință este în mod inerent diferită de orice altă
instanță, chiar și în cazul în care datele din ambele cazuri sunt aceleași. Acest lucru
se reflectă în materie de egalitate implicită și la comparațiile de inegalitate pentru
tipurile de referință. În general, nu este întotdeauna posibil să se creeze o instanță a
unui tip de referință, și nici să se copieze o instanță existentă, sau să se efectueze o
comparație a valorii din două instanțe existente, deși anumite tipuri de referință pot
furniza astfel de servicii, prin expunerea unui constructor public sau punerea în
aplicare a unei interfețe corespunzătoare (cum ar fi ICloneable sau IComparable).
Exemple de tipuri de referință sunt object (clasa de final d e bază pentru toate
celelalte clase din C#), System. String (un șir de caractere Unicode), și System.
Array (o clasă de bază pentru toate tablourile din C#).
Ambele categorii de tip sunt extensibile cu tipuri definite de utilizator.

16
Boxing și unboxing
„Boxing” este operația de conversie a unui obiect de tip valoare într -o
valoare a unui tip de referință corespunzător. Boxing -ul în C# se realizează
implicit.
„Unboxing” este operația de conversie a unei valori a unui tip de referință
(cutie anterioară) î ntr-o valoare a unui tip de valoare. Unboxing -ul în C# necesită
un tip de distribuție explicită. Un obiect într -o cutie de tip T poate fi dezambalată
doar într -un T (sau un T care poate fi nul).

1.2. SQL
SQL (de la denumirea în engleză Structured Query Language – limbaj de
interogare structurat) este un limbaj de programare specific pentru manipularea
datelor în sistemele de manipulare a bazelor de date relaționale (RDBMS), iar la
origine este un limbaj bazat pe algebra relațională. Acesta are ca scop in serarea
datelor, efectuarea interogațiilor, actualizarea și ștergerea datelor, modificarea și
crearea schemelor, precum și controlul accesului la date. A devenit un standard în
domeniu (standardizat ANSI -ISO), fiind cel mai popular limbaj utilizat pentru
creearea, modificarea, regăsirea și manipularea datelor de către SGBD -urile
(Sistemele de Gestiune a Bazelor de Date) relaționale.
1.2.1. Istorie
SQL a fost inițial dezvoltat la compania IBM de către Donald D.
Chamberlin și Raymond F. Boyce în anul 1974. Inițial numele era SEQUEL (tot de
la Structured Query Language) și avea ca scop manipularea și regăsirea datelor
stocate în bazele de date relaționale IBM.
La sfârșitul anilor '70, compania Relational Software, Inc. (în prezent
Oracle Corporation) a văzut potențialul acestor concepte descrise de Codd,
Chamberlin și Boyce, și a dezvoltat propriul SQL RDBMS cu aplicații la U.S.
Navy, CIA și Guvernul SUA. În iunie 1979, Relational Software a introdus prima
implementare comercială disponibilă de SQL, Oracle.

17

1.2.2. Elementele limbajului
Limbajul SQL este divizat în următoarele elemente:
 Clauze, care sunt componente ale instrucțiunilor și interogărilor.
 Expresii, al căror efect este producerea de valori scalare sau tabele.
 ” Predicates”, pot specifica condiți i care sunt evaluate de SQL
conform logicii ternare sau logicii booliene, în scopul limitării
efectelor instrucțiunilor, sau pentru a influența cursul programului.
 Interogările, au ca scop regăsirea datelor după criterii specifice.
 Instrucțiunile, pot avea un efect persistent asupra datelor sau
structurii datelor, sau pot controla tranzacțiile, conexiunile sau
cursul programului. În general, instrucțiunile SQL se termină cu
caracterul punct și virgulă (";"), deși acest lucru nu este obligatoriu
în toate pla tformele SQL. Spațiile albe suplimentare sunt ignorate,
dar ele pot fi folosite pentru lizibilitatea codului SQL.

1.2.3. Tipuri de date
Oricărei coloane (sau câmp) dintr -un tabel SQL îi este asociat un tip de
dată, la fel ca în toate celelalte limbaje de programare. Tipurile de date sunt
următoarele:
 CHARACTER (sau CHAR ) – șir de caractere
 INTEGER (sau SMALLINT ) – număr întreg
 FLOAT , REAL sau DOUBLE PRECISION – număr real
 NUMERIC (precision, scale) sau DECIMAL (precision, scale) – număr
zecimal, unde “precision” înseamnă numărul de cifre din partea întreagă,
“scale” înseamnă numărul de zecimale.
 DATE – data zilei.
 TIME – ora.

18

Capitolul 2: Codul Surs ă
2.1. Codul Sursă C#
using System;
using System.Collections.Generic;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Autobuze
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox2.Visible = false;
label2.Visible = false;
label3.Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem == null || comboBox2.SelectedItem == null)
MessageBox.Show("Va rugam selectati un autobuz si o statie.");
else

19
try
{
SqlConnection con = new SqlConnection("user id=username;" +
"password=password;server=serverurl;" +
"Trusted_Connection=yes;" +
"database=database; " +
"connection timeout=15" +
"Network Address=localhost" +
"Database=main");
con.Open();
SqlCommand com = new SqlCommand( String.Format("SELECT *
FROM Statii WHERE ", comboBox2.ValueMember), con);
SqlDataReader read = null;
read = com.ExecuteReader();
int ok=0;
while(read.Read())
{
if (read.ToString().Contains(comboBox1.ValueMember))
{
ok = 1;
break;
}
}
if(ok==1)
{
List<string> lat = new List<string>();
List<string> longt = new List<string>();

20
WebClient client = new WebClient();
String data =
String.Format(client.DownloadString("http://www.adresaserver .com/html/pozitiig
ps/{0}.txt"), comboBox1.ValueMember);
MatchCollection Lat = Regex.Matches(data, @"lat \s*(.+?) \s*lat",
RegexOptions.Singleline);
MatchCollection Longt = Regex.Matches(data,
@"long \s*(.+?) \s*long", Re gexOptions.Singleline);
foreach (Match i in Lat)
{
if (i != null)
{
string s = i.Groups[1].Value;
lat.Add(s);
}
else continue;
}
foreach (Match i in Longt)
{
if (i != null)
{
string s = i.Groups[1].Value;
longt.Add(s);
}
else continue;
}

21
string coord =
"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location= " +
lat.ToString() + longt.ToString() +
"&key=AIzaSyDZShHF_jG_WmghWFu4nZ8VmLehoNydMoA";
webBrowser1.Navigate(coord.ToString());
com.Dispose();
read.Dispose();
com = new SqlCommand(String.Format("SELECT * FROM Coord
WHERE ", comboBox2.ValueMember), con);
read = null;
read = com.ExecuteReader();
ok = 0;
double lat_st=0, long_st=0;
while (read.Read())
{
ok = 0;
foreach (String i in read)
{
if (ok == 0)
{
lat_st = Convert.ToDouble(i);
ok = 1;
}
else if (ok == 1)
long_st = Convert.ToDouble(i);
else break;
}
}
if (lat_st != 0 && long_st != 0)

22
{
label3.Visible = true;
int R = 6371000;
double x1 = Math.PI * Convert.ToDouble(lat_st) / 180;
double x2 = Math.PI * Convert.ToDouble(lat) / 180;
double y1 = Math.PI * (Convert.ToDouble(longt) –
Convert.ToDouble(long_st)) / 180;
double y2 = x2 – x1;
double a = Math.Sin( y1 / 2) * Math.Sin(y1 / 2) + Math.Cos(x1) *
Math.Cos(x2) * Math.Sin(y2 / 2) * Math.Sin(y2 / 2);
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 – a));
double dist = R * c;
double t ime = Math.Floor(dist / 200);
label3.Text = "Autobuzul va ajunge in aproximativ " +
time.ToString() + " minute";
}
else MessageBox.Show("Momentan nu avem date despre statia
selectata. Va rugam incercati mai tarziu.");
}
else
{
MessageBox.Show("Traseul si statia selectate nu corespund. Va
rugam incercati din nou.");
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}

23
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
label2.Visible = true;
comboBox2.Visible = true;
}
}
}
2.2. Explicații secvențe de cod esențiale
Majoritatea codului este executat la manifestarea evenimentului
button1_Click.
– If (comboBox1. SelectedItem == null || comboBox2. SelectedItem == null)
MessageBox. Show ("Vă r ugăm selectați un autobuz și o stație.");
În această secvența, se verifică dacă au fost introduse toate datele necesare.
În cazul în care au fost selectate toate câmpurile, programul trece mai departe:
Else
Try
{

}
Catch (Exception ex)
{
MessageBox. Show (ex. ToString ());
}
Având în vedere faptul că în lipsa unei conexiuni valide la server -ul SQL
vor apărea erori, ne asigurăm că acestea nu blochează programul. În cazul în care
nu apar er ori, se va executa codul din blocul de cod "try {…} ".
SqlConnection con = new SqlConnection ("user id=username;" +
"password=password; server=serverurl;" +

24
"Trusted_Connection=yes;" +
"database=database; " +
"connection timeout=15" +
"Network Address=local host");
Con. Open ();
Această secvență de cod stabilește o conexiune la baza de date utilizată de
către program. Câmpurile "username", "password", "server", "database" vor trebui,
în practică, înlocuite cu datele de conectare la server. Av ând în vedere că nu avem
acces la un server, vom păstra aceste denumiri generice în scopul prezentării
acestui proiect. Câmpul "connection timeout" specifică numărul de secunde cât va
aștepta programul un răspuns de la server. În cazul lipsei unui răspuns, conexiunea
va fi întreruptă. Modul de scriere pe mai multe rânduri a credentialelor pentru
conexiune nu este obligatoriu, această așezare fiind aleasă doar pentru a putea
urmări codul mai ușor. Comanda "con. Open () " pornește conexiunea.
SqlCommand com = new SqlCommand (String. Format ("SELECT * FROM Statii
WHERE ", comboBox2. ValueMember), con);
SqlCommand reprezintă comenzile trimise de către program spre baza de
date, acestea putând citi sau scrie informații, șterge sau adăuga, în principiu
aproape or ice operație ce poate fi efectuată direct din baza de date. Unele comenzi
însă sunt blocate din motive de securitate.
SqlDataReader read = null;
Read = com. ExecuteReader ();
În SqlDataReader se rețin valorile citite din tabelul accesat prin comanda.

Int ok=0;
While (read. Read ())
{
If (read. ToString (). Contains (comboBox1. ValueMember))
{

25
Ok = 1;
Break;
}
}
Această secvență de cod ve rifică dacă prin stația selectată trece traseul
selectat.
If (ok==1)
{

}
Else
{
MessageBox. Show ("Traseul și stația selectate nu corespund. Vă
rugăm încercați din nou.");
}
Dacă cele două nu corespund, se va afișa un mesaj.
String data = String. Format (client. DownloadString
("http://www.adresaserver.com/html/pozitiigps/{0}.txt"), comboBox1.
ValueMember);
MatchCollection Lat = Regex. Matches (data, @"lat \s*(. +?) \s*lat",
RegexOptions. Singleline);
MatchCollection Longt = Regex. Matches (data, @"long \s*(. +?)
\s*long", RegexOptions. Singleline);
"data" reprezintă textul din fișierul aferent traseului selectat. Acest text este
descărcat de pe site -ul pe care modulele GPS upload -eaza datele în timp real.
Pentru a le recunoaște, considerăm că latitudinea și longitudinea sunt notate în
fișier astfel: "lat 40.024573 lat", "long 23.455256 long". Apoi, căutăm pe rând

26
valorile acestora, mai precis căutăm grupuri (. +?) ce se află între substring -urile
căutate.
Foreach (Match i in Lat)
{
If (i! = null)
{
String s = i. Groups [1]. Value;
Lat.Add (s);
}
Else continue;
}
Foreach (Match i in Longt)
{
If (i! = null)
{
String s = i. Groups [1]. Value;
Longt.Add (s);
}
Else continue;
}
Mai departe, stocăm în "latitudine" și "longitudine" valorile găsite. Într –
adevăr, o abordare mai simplă ar fi putut consta în prelucrarea simplă a șirului de
caractere, având în vedere că în cazul de față considerăm că în fișier este doar o
valoare a latitudinii și respectiv longitudinii. Însă folosirea grupurilor poate fi un
avantaj în cazul în care aplicația va fi implementată, deoarece prin ele vom putea
afla coordona tele tuturor autobuzelor de pe ruta respectivă și astfel vom putea găsi
cel mai apropiat de stația curentă.
String coord =
"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location= " + lat.
ToString () + longt. ToString () +
"&key=AIzaSyDZShHF _jG_WmghWFu4nZ8VmLehoNydMoA";

27
WebBrowser1. Navigate (coord. ToString ());
Com. Dispose ();
Read. Dispose ();
Mai departe, ne conectăm la API -ul Google Maps. În link introducem
coordonatele pe care le vrem afișate pe hartă și cheia de conectare, după care
navigăm cu browser -ul din aplicație la pagina respectivă.
Com = new SqlCommand (String. Format ("SELECT * FROM Coord WHERE ",
comboBox2. ValueMember), con);
Read = null;
Read = com. ExecuteReader ();
Ok = 0;
Double lat_st=0, long_st=0;
While (read. Read ())
{
Ok = 0;
Foreach (String i in read)
{
If (ok == 0)
{
Lat_st = Convert. ToDouble (i);
Ok = 1;
}
Else if (ok == 1)
Long_st = Convert. ToDouble (i);
Else break;

28
}
}
De această dată accesăm tabelul în care sunt reținute coordonatele stațiilor.
La prima iterare prin foreach () găsim latitudinea, iar la a doua lo ngitudinea.
If (lat_st! = 0 && long_st! = 0)
{

}
Else MessageBox. Show ("Momentan nu avem date despre stația
selectată. Vă rugăm încercați mai târziu.");
Dacă în tabel nu se află datele despre stația respectivă, afișăm un mesaj.
Label3. Visible = true;
Int R = 6371000;
Double x1 = Math. PI * Convert. ToDouble (lat_st) /180;
Double x2 = Math. PI * Convert. ToDouble (lat) /180;
Double y1 = Math. PI * (Convert. ToDouble (longt) – Convert.
ToDouble (long_st)) /180;
Double y2 = x2 – x1;
Double a = Math. Sin (y1/2) * Math. Sin (y1/2) + Math. Cos (x1) *
Math. Cos (x2) * Math. Sin (y2/2) * Math. Sin (y2/2);
Double c = 2 * Math. Atan2(Math. Sqrt (a), Math. Sqrt (1 – a));
Double dist = R * c;
Double time = Math. Floor (dist/200);
Label3. T ext = "Autobuzul va ajunge în aproximativ " + time.
ToString () + " minute";

29
Folosind "formula haversin" (haversine formula) calculăm distanța dintre
cele două puncte (autobuz și stație). Toate calculele se fac în radiani, motiv pentru
care facem conversia din grade. Considerând viteza autobuzului de 200m/min
(București este un oraș aglomerat), aplicăm timpului în minute funcția Floor (),
care returnează cel mai mare întreg mai mic decât parametrul de intrare. Afișăm în
label3 mesajul care exprimă timpul estimativ.

2.3. Codul de design Visual Studio:
namespace Autobuze
{
partial class Form1
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.label3 = new System.Windows.Forms.Label();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.L abel();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();

30
this.button1 = new System.Windows.Forms.Button();
this.webBrowser1 = new System.Windows.Forms.WebBrowser();

((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Pane l2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.label 3);
this.splitContainer1.Panel1.Controls.Add(this.comboBox2);
this.splitContainer1.Panel1.Controls.Add(this.label2);
this.splitContainer1.Panel1.Controls.Add(this.comboBox1);
this.splitContainer1.Panel1.Contr ols.Add(this.label1);
this.splitContainer1.Panel1.Controls.Add(this.button1);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.webBrowser1);
this.splitCo ntainer1.Size = new System.Drawing.Size(991, 646);
this.splitContainer1.SplitterDistance = 330;
this.splitContainer1.TabIndex = 0;
//

31
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(32, 212);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(35, 13);
this.label3.TabIndex = 6;
this.label3.Text = "label3";
//
// comboBox2
//
this.comboBox2.DropDownStyle =
System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Items.AddRange(new object[] {
"Piata Obor",
"Soseaua Pantelimon",
"Cora Pantelimon",
"Tandarei",
"Republica",
"Bucur",
"Spitalul Pantelimon",
"Piata Unirii",
"Opera Nationala",
"Dristorului",
"Parcul Drumul Taberei",
"Bd. Iuliu Maniu",
"Gara de Nord",
"Caraiman",
"Cimitirul Militari",
"Pipera",

32
"Piata Baneasa",
"Mihai Viteazul",
"Colegiul National Gh. Sincai",
"Piata Unirii 1"});
this.comboBox2.Location = new System.Drawing.Point(35, 164);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Siz e = new System.Drawing.Size(121, 21);
this.comboBox2.TabIndex = 5;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(32, 148);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(34, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Statie";
//
// comboBox1
//
this.comboBox1. DropDownStyle =
System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Items.AddRange(new object[] {
"101",
"102",
"103",
"104",
"105",
"106",

33
"112",
"116"});
this.comboBox1.Location = new System.Drawing.Point(35, 104);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(121, 21);
this.comboBox1.TabIndex = 3;
this.comboBox1.SelectedIndexChanged += new
System.EventHandler(this.comboBox1_SelectedIn dexChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(32, 88);
this.label1.Name = "label1";
this.label1.Size = new Sys tem.Drawing.Size(46, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Autobuz";
//
// button1
//
this.button1.Location = new System.Drawing.Point(177, 104);
this.button 1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Cautare";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click + = new System.EventHandler(this.button1_Click);
//
// webBrowser1
//
this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;

34
this.webBrowser1.Location = new System.Drawing.Point(0, 0);
this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
this.webBrowser1.Name = "webBrowser1";
this.webBrowser1.Size = new System.Drawing.Size(657, 646);
this.webBrowser1.TabIndex = 0;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(991, 646);
this.Controls.Add(this.splitContainer1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel1.PerformLayout();
this.splitContainer1.Panel2.ResumeLayout(false);

((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.WebBrowser webBrowser1;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ComboBox comboBox2;
private System.Windows.Forms.Label label2;

35
private System.Windows.Forms.Label l abel3;
}
}
Întrucât acest cod este generat automat, nu îl vom discuta; atașarea acestuia
a fost făcută în cazul în care se dorește vizualizarea interfatei grafice.

2.4. Crearea tabelelor in SQL:
CREATE TABLE [dbo].[Coord] (
[Parcul Titan] FLOAT (53) NOT NULL,
[Piata Obor] FLOAT (53) NULL,
[Soseaua Pantelimon] FLOAT (53) NULL,
[Cora Pantelimon] FLOAT (53) NULL,
[Tandarei] FLOAT (53) NULL,
[Republi ca] FLOAT (53) NULL,
[Bucur] FLOAT (53) NULL,
[Spitalul Pantelimon] FLOAT (53) NULL,
[Piata Unirii] FLOAT (53) NULL,
[Opera Nationala] FLOAT (53) NULL,
[Dristorului] FLOAT (53) NULL,
[Parcul Drumul Taberei] FLOAT (53) NULL,
[Bd. Iuliu Maniu] FLOAT (53) NULL,
[Gara de Nord] FLOAT (53) NULL,
[Caraiman] FLOAT (53) NU LL,
[Cimitirul Militari] FLOAT (53) NULL,
[Pipera] FLOAT (53) NULL,
[Piata Baneasa] FLOAT (53) NULL,
[Mihai Viteazul] FLOAT (53) NULL,
[Colegiul National Gh. Sincai] FLOAT (53 ) NULL,
PRIMARY KEY CLUSTERED ([Parcul Titan] ASC)
);

36

CREATE TABLE [dbo].[Statii] (
[Parcul Titan] INT NULL,
[Piata Obor] INT NULL,
[Soseaua Pantelimon] INT NULL,
[Cora Pantelimon] INT NULL,
[Tandarei] INT NULL,
[Republica] INT NULL,
[Bucur] INT NULL,
[Spitalul Pantelimon] INT NULL,
[Piata Unirii] INT NULL,
[Opera Nationa la] INT NULL,
[Dristorului] INT NULL,
[Parcul Drumul Taberei] INT NULL,
[Bd. Iuliu Maniu] INT NULL,
[Gara de Nord] INT NULL,
[Caraiman] INT NULL,
[Cimitirul Militari] INT NULL,
[Pipera] INT NULL,
[Piata Baneasa] INT NULL,
[Mihai Viteazul] INT NULL,
[Colegiul National Gh. Sincai] INT NULL,
[Piata Unirii 1] INT NOT NULL,
CONSTRAINT [PK_Statii] PRIMARY KEY CLUSTERED ([Piata Unirii 1]
ASC)
);
Introducerea datelor în tabele se va face folosind interfața Visual Studio.

37
Capitolul 3: Simularea aplicației
Modul de utilizare a aplicației este compus din următorii pași:
1. Selectarea traseului ce se dorește a fi vizualizat.
2. Selectarea stației în care se așteaptă autobuzul.
3. Apăsarea butonului de căutare și afișarea informațiilor.

În continuare vom prezenta un exemplu de simulare:
a) Am selectat Auto buzul cu numărul 105

38

b) Am ales stația în care se așteaptă autobuzul (Bulevardul Iuliu Maniu)

39

c) Am apăsat butonul căutare și s -au afișat următoarele informații: timpul de
așteptare și locația celui mai apropiat autobuz

40

Desigur, acesta este doar un prototip căruia i se pot adăuga numeroase funcții cum
ar fi:
 Verificarea gradului de ocupare
 Cumpărarea de bilete prin intermediul aplicației

Capitolul 4: Propunerea și oportunitatea dezvoltării unei afaceri
4.1 Conceptul aplicației
Pentru a vedea mai b ine dacă dezvoltarea aplicației și inițierea unei afacerei
este avantajoasă, am decis realizarea acestei analize economice. Prin intermediul ei
am studiat factorii de macromediu, piața, concurența, veniturile estimative la
inițierea acesteia, promovare, di stribuție, preț adoptat, managementul și
marketingul afacerii.
Afacerea va consta în dezvoltarea și implementarea aplicației de
monitorizare a transportului public.

41
Vom oferi o aplicație de monitorizare și calcularea timpului în care sosesc
în stații veh iculele de transport în comun. Acesta aplicație va fi disponibilă pe
telefonul mobil, ea va fi implementată cu ajutorul colaboratorilor ce reprezintă
regiile autonome de transport în comun, prin conectarea acestei aplicații la fiecare
GPS de pe autovehicul ele regiilor de transport în comun.
Promovarea se va face la casele de bilete dar și prin campanii comune de
promovare, prin intermediul rețelelor de socializare, dar și campanii în media.
Acest serviciu este total nou, pe piață existând doar aplicații ce permit
vizualizarea timpilori orari și a stațiilor, nu și aproximarea timpului în care la stația
aleasă va sosi autobuzul dorit.
Nici o aplicație de acest gen nu este conectată direct la autovehiculele regiei
de transport în comun.
Utilitatea acestui serviciu este imensă, câștigând timp și oferind
utilizatorului date despre momentul la care va ajunge într -un anumit loc, călătorul
putând astfel calcula timpul unei călătorii, această nevoie există, dar e posibil că
oamenii să nu își fi dat seama. Comerci alizarea se va face direct la casele de
bilete, în momentul creări unui abonament utilizatorul va primi un cod, valabil
până în momentul expirării abonamentului, ce îl va introduce în aplicația care se va
putea downloada din magazinele specifice Android/iO S sau direct din aceste
magazine online, la activare fiind necesară plata unei sume modice.
Prin această aplicație se dorește revoluționarea transportului în comun și
facilitarea acestuia, atât din punct din vedere al călătorilor cât și al regiei autonome
de transport. Atunci când trebuie să schimbi mai multe mijloace de transport în
comun și poți vedea cu exactitate timpul în care ajunge, gradul de ocupare, cât și
alte detalii, noi credem că această aplicație va schimba cu adevărat modul în care
se circul ă în București.

42
4.2 Analiza macromediului
Mediul Economic
Oportunități
 Ținând cont de prețul fluctuant al carburanților mulți cetățeni vor alege în
viitor transportul public
 În București rata șomajului fiind destul de scăzută (1.91%) față de medie
(4.91%) oferă locuitorilor motivul de a folosi mijloacele de transport în
comun
Riscuri
 Un nivel de trai ridicat în București permite achiziționarea de mașini și
inclusiv de carburant
Mediul Socio -Cultural
Oportunități
 Un stil de viață activ ce implică și puțină mișcare, lăsând mașina acasă și
folosind transportul în comun
 Conservarea resurselor de carburant și în același timp economisirea resursei
financiare a unei familii
Riscuri
 Lipsa unei culturi a mersului cu transportul în comun de către un număr
mare de cetățeni
Mediul Politico -Legislativ
Oportunități
 În ultimii ani fiind introduse diferite taxe de mediu la înmatricularea
mașinilor, cetățenii se pot reorienta spre mijloacele de transport în comun
 Supra accizarea pe carburant

43
Riscuri
 Scutirea oricăr ei taxe privind mediul la achiziționarea mașinilor electrice
sau a ultimelor modele de motoare ce se încadrează în normele de poluare
Euro 6.
Mediul Tehnologic
Oportunități
 Guvernul pune la dispoziție de la an la an mai multe resurse având în
vedere chelt uielile pentru cercetare și inovație.
 Aplicația poate înlocui echipamentele de afișare a informațiilor pentru
fiecare stație (având în vedere că 90% dintre cetatienii plătitori de bilet
folosesc smartphone)
 Având în vedere că în toate marile orașe din Româ nia există internet 3G/4G
transferul de informație se va realiza instantaneu.
Riscuri
 Ritmul de apariție al inovațiilor
 Numărul de patente și natura acestora
Mediul Demografic (Urban)
Oportunități
 90% dintre persoanele cuprinse între vârsta de 10 -40 de ani folosesc și
înțeleg utilitatea smartphone -ului.
 50% dintre persoanele cuprinse între vârsta de 40 -60 de ani folosesc și
înțeleg utilitatea smartphone -ului.
Riscuri
 5% dintre persoanele de peste 60 de ani folosesc și înțeleg utilitatea
smartphone -ului

44
Mediul natural
Oportunități
 Infrastructura rutieră slab dezvoltată, se creează des ambuteiaje
 Benzi speciale pentru autovehiculele de transport în comun
 Gradul de poluare ridicat
 Sprijinim protecția mediului
4.3. Motive de încredere din partea investitorilor
Această nevoie există cu adevărat, noi am trăit -o și așa ne -a venit această
idee. Este nevoie de mobilitate iar prin această aplicație se câștigă timp, acesta
fiind un element important în zilele noastre.
Nevoia aceasta nu este satisfăcut ă de concurență din simplul fapt că nu
există pe piață o asemenea aplicație.
Din punct de vedere tehnologic s -a ajuns la un nivel în care se poate crea
așa ceva, iar din punct de vedere legislativ nu vor exista probleme la
implementarea acestei aplicații. Contextul economic este unul favorabil populația
are încă nevoie de transportul în comun, neexistând încă o infrastructură ce îți
poate permite să ajungi cu mașina personală la timp la locul de
muncă/facultate/liceu.
Realizarea unui parteneriat cu Regiil e de transport în comun este obligatorie
pentru a putea implementa această aplicație.
Ramura aceasta industrială numită IT este în plină dezvoltare și este
asimilată de tot mai mulți consumatori.
Această idee este una originală avantajul competitiv este asigurat deoarece
ar fi un lucru nou pe piața din România.

45
4.4. Analiza pieței
Cercetarea de marketing
Pe site -ul celor de la RATB am găsit un întreg set de date statistice ce ne -au
ajutat la analiza mediilor de vârstă a călătorilor, kilometri parcurși, călătorii medii
zilnice, etc.
Ca si surse secundare am folosit baze de date online ce conțineau date
statistice despre transportul în comun.
Piața
Activitate pentru început va fii destinată consumatorilor din București. Ne
vom adresa atât regiei de transport în comun cât și călătorilor ce utilizează
mijloacele de transport în comun.
Numărul persoanelor c are circulă cu transportul în comun este în creștere,
așadar piața este una în ascensiune. Ritmul de creștere este undeva între 5 -10%/an .
Segmentarea pieței
Aplicația și în același timp serviciul pe care îl vom oferi satisface o nevoie
esențială a oameni lor, timpul, aceștia economisesc timp, care altfel ar fi pierdut în
stațiile de autobuz. Vârsta nu contează, atâta timp cât utilizatorul poate opera la
nivel mediu un smartphone.
Poziționarea pe piață
Unul din motivele cele mai importante care stau la ba za cumpărării
produsului este aceea că majoritatea călătorilor dețin un smartphone ceea ce face
foarte ușoară folosirea aplicației. O aplicație cu o interfață prietenoasă ușor de
folosit și foarte practică își va face loc în telefoanele călătorilor și va f i asimilată
imediat.
Concurența
Fiind o idee nouă pe piață, aceea de a conecta aplicația direct la GPS -urile
autovehiculelor regiei de transport în comun, concurența lipsește, apariția
concurenței este inevitabilă și ar fi benefică deoarece va produce o competiție și o
dorință din partea fiecărei firme de a oferii date cât mai exacte pentru clienții ei.

46
4.5. Mixul de marketing
Produsul este o aplicație ce afișează ora exactă la care într -o stație, aleasă
de utilizator, va sosi următorul autobuz, această aplicație va fi capabilă și de
afișarea gradului de ocupare al autovehiculului. Utilitatea este evidentă,
economisirea timpului de așteptare în stație.
Se va face o campanie prin mijloacele de transport, după care va avea loc
lansarea serviciului. Ciclul de viață va fii de cel puțin 5 ani.
Promovarea va fii în mediul virtual dar și în stațiile și autobuzele RATB.
Va fii transm is un mesaj puternic prin care să scoatem în evidență necesitatea
acestui serviciu și beneficiile aduse o dată cu implemetarea lui. Pentru început în
primele 3 luni aplicația va fii disponibilă gratis după care se va percepe o taxă de 2
euro/an pentru a pu tea folosi în continuare aplicația.
Distribuția va fii online, prin intermediul Google Play și iTunes, se va
downloada aplicația și în momentul plății vei primi un cod pe care îl introduci în
aplicație ca aceasta să fie activă. Factorii ce vor influența a facerea decisiv vor fii
cele 3 luni de testare gratuită, atunci se va crea o clientelă care dacă va fii
mulțumită va accesa în continuare aplicația, dar de data aceasta contracost.
Prețul va fii unul accesibil oricui. Stabilirea prețului s -a făcut în strâ nsă
legătură cu nevoia dar și cu capacitățile financiare ale pieței țintă.
4.6. Finanțele afacerii
Pe raza municipiului București unde vrem să lansăm pentru prima dată
acest produs există un singur furnizor -servicii de transport în comun și anume
RATB, a șadar există un singur cumpărător potențial în această regiune.
Aplicația va fii gratuită în primele 3 luni pentru orice călător, astfel se va
crea o bază de date cu utilizatori și se vor face încasări doar pe baza reclamelor
rulate în timpul deschiderii aplicației. Astfel dacă luăm în calcul că în medie/zi se
efectuează 1,2 milioane de călătorii, vom considera că doar în 40% din călătorii se
va utiliza aplicația, ceea ce înseamnă că aplicația va rula de 480.000 de ori, o
reclamă este plătită în medie cu 1 eurocent/rulare, rezultă un venit de 4.800
eur/lună.

47
La sfârșitul primelor 3 luni de după lansare estimăm o creștere a încasărilor
datorită popularității aplicației și numărul crescut de rulări ale acesteia, prevedem o
creștere de la 40% la 70% a utiliză rii raportat la numărul de călătorii zilnice.
După primele 3 luni, după ce oamenii vor fi testat aplicația, dorim să
introducem o taxă de 1$/călător/an. În medie sunt 600.000 de călători care
utilizează zilnic mijloacele de transport în comun, vom conside ra că doar 50%
dintre aceștia vor achiziționa aplicația (300.000), aceasta înseamnă că încasările se
vor ridica la 300.000$/an → 25.000$/lună.
O altă variantă de tarifare ar fi direct la cumpărarea de abonament, această
variantă va merge în paralel cu po sibilitatea de achiziționare directă a aplicației.
Prețul aplicației va fii inclus în prețul abonamentului și va reprezenta 5% din
valoarea acestuia. Considerând că în medie se fac 40.000 abonamente/lună, iar un
abonament costă în medie 6$ → un venit de 12 .000$/lună doar din cei 5% din
valoare abonamentelor.
Dorim ca după primul an să extindem acest serviciu și în celelalte mari
orașe din țară ce beneficiază de o regie de transport în comun dezvoltată.
Astfel: Constanța -297.503 loc.
Iași -318.871 loc.
Timișoara -306.000 loc.
Cluj -303.000 loc.
Arad -159.000 loc.
Brașov -253.000 loc.
Sibiu -147.000 loc.
Galați -286.530 loc.
Pitești -155.000 loc.
Craiova -269.000 loc.
După primul an ne propunem să extindem serviciul și în aceste orașe cu
pontential din țară.

48
Concluzii și perspective de dezvoltare
Această aplicație este una de viitor și intră în categoria aplicațiilor ce pot
transforma orașul într -unul inteligent. Id eea venind din experiența personală , ne-a
ajutat să privim acest proiect atât din punct de vedere al consumatorului dar și din
perspectiva unui antreprenor . Noi ca și consumatori, doream să economisim timp și
să reducem pe c ăt posibil timpul de asteptare în stații, iar pe de alt ă parte noi ca și
antreprenori am sesizat posibilitatea dezvolt ării unei afaceri. Acest lucru ne -a
motivat și ne-a dus la crearea acestei aplica ții ce poate fi disponibil ă oricui.
De la bun început aceast ă aplica ție a fost g ândită și a vrut s ă vină în
întâmpinarea c ălătorilor pentru c ă stim c ât de important este timpul în ziua de
astăzi pentru oamenii de orice v ârstă și aceast ă aplica ție ajut ă utilizatorii
transportului în comun s ă economiseasc ă timp, timp pre țios ce altfel ar fii fo st
irosit în stațiile de transport în comun.
Ca și o altă utilitate aplicația fiind accesată de acasă iți va permite să iți
programezi ora de plecare stiind că autobuzul dorit va ajunge la o anumită ora, iar
între timp poți rezolva alte probleme .
În viit or se dore ște dezvoltarea ei pentru a putea fi accesat ă de pe orice
smartphone.
Odată implementată această aplicație vom putea intra în rândul orașelor
inteligente și atât turiștii cât și locuitorii orașului București vor avea de castigat.
Atunci când aplicația va fi implementată, se pot adăuga numeroase
îmbunătățiri și funcții, care vor duce la o serie de date mult mai bine documentate
si mai exacte cum ar fi:
– O bază de date completă, cu acces la toate traseele și stațiile de transport în
comun.
– Module GPS poziționate pe mașini, ce vor trimite date despre poziția autobuzelor.
– O interfață mai bogată și mai atractivă vizual, pentru atragerea publicului.
– Înlocuirea vitezei considerate fixe în program cu una variabilă, calculată în
funcție de zona î n care se află autobuzul și starea traficului.

49
– Posibilitatea de cumpărare a biletului prin intermediul aplicației
– Verificarea gradului de umplere al autobuzului
Până când aceste modificări vor avea loc, însă, sperăm ca ideea prezentată
în acest proiec t să fie considerată interesantă și inedită, așa cum s -a dorit de la
început.

50
Bibliografie
[1] Conf., dr., ing. Ioan Plotog, Bogdan Mihăilescu (2014), „MEE pentru
atreprenori ”, Editura PIM și Cavaliotti ;
[2] Conf., dr., ing. Andrei Drumea (2013), „Construcția și tehnologia sistemelor
embedded ”, Editura PIM și Cavaliotti ;
[3] Șl.,dr., ing. C ătălin Alexe (2013), „Curs antreprenoriat” ;
[4] Șl., dr., ing. Radu Hobincu (2013), „Curs programare obiect orientat” ;
[5] Prof., dr., ing. , Anca Alexandra Purcărea (2012) , „Curs marketing”;
[6] Joseph E. Stiglitz (2012), „Prețul Inegalității”;
[7] Visualstudio
https://www.visualstudio.com/post -download -vs?sku=community&clcid=0x409 ;
[8] R.A.T.B.
http://www.ratb.ro/docpdf/statistic_2014.pdf (accesat la data de 07.04.2016) ;
[9] en.wikipedia.org
https://en.wikipedia.org/wiki/SQL (accesat la data de 10.03.2016) ;
[10] https://en.wikipedia.org/wiki/C_Sharp_(programming_language) (accesat la
data de 04.04.2016) ;
[11] developers.google.com
https://developers.google.com/maps/documentation/ (accesat la data de
23.03.2016) ;

51
Anexe
1.Codul Sursa in Microsoft Visual Studio

52

53

54
2. Codul de design Microsoft Visual Studio

55

56

57

58
Un alt exemplu de simulare a unui traseu

59

60

61
Numar autobuze in anul 2014

Parc circulant in anul 2014

Calatorii/an (milioane)

Calatorii/zi (milioane)

Calatorii/zi de lucru (milioane)

Similar Posts