Sunteți pe pagina 1din 10

Universitatea Transilvania din Brașov

Facultatea de Inginerie Electrică și Știința Calculatoarelor


Departamentul Automatică şi Tehnologia Informaţiei

PORTOFOLIU TEME
PCLP2

Pandelea Daniel-Bogdan
Gr. 4441, AIA

BRAȘOV, 2015
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

Cuprins

1. Titlul temei 1............................................................................................................................2


1.1. Enunț.................................................................................................................................2
1.2. Rezolvare temă.................................................................................................................2
1.3. Rezultate...........................................................................................................................3
2. Titlul temei 2............................................................................................................................4
2.1. Enunț.................................................................................................................................4
2.2. Rezolvare temă.................................................................................................................4
2.3. Rezultate...........................................................................................................................4

1
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

TEMA #1 – Itinerarii
1.1. Enunț
Să se scrie un program Java care permite utilizatorului calcularea lungimii unui
itinerariu specificat de utilizator. Programul va oferi un meniu cu opțiuni pentru:
a. Adăugare oraș; programul va cere numele orașului, coordonatele geografice
(latitudine și longitudine) exprimate în grade zecimale (numere reale) și
poziția în itinerariu (un număr unic de ordine).
i. Orice eroare apărută la citirea datelor va fi raportată utilizatorului și
va determina anularea adăugării.
b. Eliminare oraș după nume. Numele orașului este furnizat de utilizator și
identificarea acestuia în listă se va face fără distincție între litere mari și
litere mici.
i. Orice eroare apărută va fi raportată utilizatorului.
c. Afișarea lungimii itinerariului. Pentru calculul distanțelor se vor folosi
următoarele valori: 1 grad latitudine = 111 km, 1 grad longitudinal = 79 km
și se vor considera rute liniare între orașe. Se va respecta ordinea orașelor.
d. Salvarea într-un fișier text a distanțelor dintre fiecare două orașe vecine, în
formatul:
d(nume oraș 1, nume oraș 2) = distanță 1 km
d(nume oraș 2, nume oraș 3) = distanță 2 km
…..
Se va respecta ordinea orașelor.
i. Orice eroare apărută va fi raportată utilizatorului.

Programul va fi realizat cu respectarea convențiilor specifice limbajului Java de denumire și


organizare a pachetelor, claselor proprietăților și metodelor, precum și a principiului de
încapsulare specifice programării orientate pe obiecte

1.2. Rezolvare temă


Oras.java
package mainPackage;

public class Oras


{
String nume;
double latitudine, longitudine;

public String getNume()


{
return nume;
}
public void setNume(String nume)
{
this.nume = nume;
}

2
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

public double getLatitudine()


{
return latitudine;
}
public void setLatitudine(double latitudine)
{
this.latitudine = latitudine;
}
public double getLongitudine()
{
return longitudine;
}
public void setLongitudine(double longitudine)
{
this.longitudine = longitudine;
}
}

Itinerariu.java
package mainPackage;

import java.io.FileWriter;

public class Itinerariu


{
Oras orase[] = new Oras[100];
int nrOrase = 0;

public void addOras(Oras n, int poz)


{
poz--;

if(poz<nrOrase)
{
System.out.println("Pozitia introdusa este deja ocupata,
asa ca celelalte orase au fost mutate cu o pozitie mai in fata.");
for(int i = nrOrase+1; i>poz; i--)
orase[i]=orase[i-1];
}

orase[poz] = n;

nrOrase++;
}

public boolean deleteOras(String n)


{
int poz = -1;

for(int i=0; i<nrOrase && poz==-1; i++)

if(((orase[i].getNume()).toLowerCase()).equals(n.toLowerCase()))
poz = i;

if(poz == -1)
return false;

3
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

for(int i=poz; i<nrOrase-1; i++)


orase[i] = orase[i+1];

nrOrase--;

return true;
}

public int getNrOrase()


{
return nrOrase;
}

private double distanta2Orase(Oras a, Oras b)


{
return Math.sqrt(Math.pow((b.getLatitudine()-
a.getLatitudine())*111, 2) + Math.pow((b.getLongitudine()-
a.getLongitudine())*79, 2));
}

public double lungimeItinerariu()


{
double lungime = 0;
for(int i=1; i<nrOrase; i++)
lungime += distanta2Orase(orase[i-1], orase[i]);
return lungime;
}

public void saveToFile()


{
try
{
FileWriter out = new FileWriter("itinerariu.txt");

for(int i=1; i<nrOrase; i++)


out.write("d(" + orase[i-1].getNume() + ", " +
orase[i].getNume() + ") = " + distanta2Orase(orase[i-1], orase[i]) + " km\r\
n");

out.close();

}
catch(Exception e)
{
System.out.println("A aparut o eroare la salvarea in
fisier: " + e.getMessage());
}
}
}

MainPrg.java
package mainPackage;

import java.util.Scanner;

public class MainPrg


4
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

public static void showMenu()


{
System.out.println("\n\n\n---------- MENIU ----------\n");
System.out.println("1. Adaugare oras");
System.out.println("2. Eliminare oras");
System.out.println("3. Afisarea lungimii itinerariului");
System.out.println("4. Salvarea in fisier a distantelor dintre
orase");
System.out.println("5. Iesire din program");
System.out.print("\nIntroduceti optiunea dorita: ");
}

public static void main(String[] args)


{
int option = 0;
Itinerariu I = new Itinerariu();
String n;
Scanner in = new Scanner(System.in);
do
{
showMenu();
try
{
option = in.nextInt();
}
catch(Exception e)
{
System.out.println("A aparut o eroare la citirea
optiunii. Reincercati.");
in.next();
}
System.out.println();
switch(option)
{
case 1:
Oras x = new Oras();
int poz;
double lo, la;
try
{
in.nextLine();
System.out.print("Introduceti numele
orasului: ");
n = in.nextLine();
System.out.print("Introduceti
latitudinea: ");
la = in.nextDouble();
System.out.print("Introduceti
longitudinea: ");
lo = in.nextDouble();
}
catch(Exception e)
{
System.out.println("A aparut o eroare la
citirea datelor. Reincercati introducerea orasului.");
in.next();
break;

5
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

do
{
try
{
System.out.print("Introduceti
pozitia orasului din itinerariu (intre 1 si " + (I.getNrOrase()+1) + "): ");
poz = in.nextInt();
}
catch(Exception e)
{
System.out.println("A aparut o
eroare la citirea pozitiei. Reincercati introducerea orasului.");
in.close();
return;
}

if(poz<1 || poz>I.getNrOrase()+1)
{
poz=-1;
System.out.println("Nu puteti
introduce orasul pe pozitia respectiva.");
}
} while(poz==-1);

x.setNume(n);
x.setLatitudine(la);
x.setLongitudine(lo);
I.addOras(x, poz);
break;

case 2:
try
{
in.nextLine();
System.out.print("Introduceti numele
orasului pe care doriti sa-l stergeti: ");
n = in.nextLine();
}
catch(Exception e)
{
System.out.println("A aparut o eroare la
citirea numelui. Reincercati introducerea orasului.");
in.next();
break;
}

if(!I.deleteOras(n))
System.out.println("Orasul cautat nu
exista in lista.");
break;

case 3:
System.out.println("Lungimea itinerariului
este: " + I.lungimeItinerariu());
break;

case 4:

6
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

I.saveToFile();
break;

case 5:
break;

default:
System.out.println("Optiunea introdusa nu
exista.");
break;
}

} while(option!=5);

in.close();

1.3. Rezultate

Figură 1 – Introducerea unui oraș

7
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

Figură 2 - Introducerea unei valori greșite, tratarea excepției și introducerea unui oraș pe o poziție deja ocupată

8
Departamentul Automatică şi Tehnologia Informaţiei
Programul de studii Automatică şi Informatică Aplicată
Portofoliu teme PCLP2

S-ar putea să vă placă și