Sunteți pe pagina 1din 9

Proiect Algoritmi si programare

Aplicatie Android Studio


“Calculator Stiintific”

Nume Student: Suci Naomi

Facultatea de Stiinte exacte, profil Mate-info


Aplicatia “Calculator Stiintific” a fost creata in mediul de dezvoltare android studio bumblebee
2021.1.1 patch 3, iar limbajul folosit este Java.

Aplicatia are doua functii, de calcul arithmetic si de convertire.

Pagina de start este formata dintr-o imagine si doua butoane care fac legatura intre cele doua
activitati de baza, calcul si convertire.

Butonul “Calculator” ne va duce spre clasa MainActivity, iar butonul


“Convertor” ne va duce spre clasa UnitConvertor_MainActivity.

Aceasta actiune s-a facut astfel:


public void calculatorBTNpush(View view) {
openActivity2();
}

public void openActivity2() {


Intent intent = new Intent(this,
MainActivity.class);
startActivity(intent);
}

public void convertorBTNpush(View view) {


openActivity1();
}

public void openActivity1() {


Intent intent = new
Intent(this,UnitConvertor_MainActivity.class);
startActivity(intent);
}

Pentru layout-ul butoanelor s-a folosit resursa drawable pentru creeare unui concept graphic (Xml)
ce a putut fi aplicat mai multor butoane din compozitia aplicatiei.

Acesta s-a realizat asttfel:


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item>
<shape android:shape="rectangle">
<solid android:background="@android:color/transparent" />
<stroke android:color="#3B4990" android:width="2.5dp"></stroke>
<corners android:radius="25dp"/>
</shape>
</item>
</selector>
Functia de calcul arithmetic are la randul ei doua moduri de vizualizare, in mod portret si in mod
landscape. In functie de modul ales, utilizatorul poate beneficia de optiuni diferite. Spre exemplu in
mod landscape, apare o categorie noua de butoane pentru un calcul artmetic mai avansat.

Din punct de vedere al layout-ului, in modul portret avem


urmatoarele:

In componenta primului ConstraintLayout avem un editor de


text, unde utilizatorul poate scrie calculul dorit, si butoanele
aferente calculului. In plus, am adaugat butonul “c” pentru
stergerea totala de pe ecran si butonul ‘back’ pentru
stergerea unui caracter.

In componenta celui de-al doilea ConstraintLayout avem un


TextView care va afisa istoricul calculului.

Butoanele au fost aranjate in acest fel cu ajutorul marginilor si


constraints.

Pentru fiecare buton in parte s-a folosit atributul OnClick(), si


pentru acesta s-a scris un cod de updatare a textului.

Calculele propriu-zise au fost efectuate cu ajutorul unei librarii


pe care importat-o in program. Aceasta are functii de calcul
multiple, inclusive sin, cos, log, etc.
import org.mariuszgromada.math.mxparser.*;

public void threeBTNpush(View view){


updateText(getResources().getString(R.string.threeText));
}

public void equalBTNpush(View view){

String userExp = display.getText().toString();


previousCalculation.setText(userExp);
Expression exp = new Expression(userExp);
String result = String.valueOf(exp.calculate());

display.setText(result);
display.setSelection(result.length());
}
Dupa efectuarea calculului, dupa cum se poate vedea, apare sus in
text view-ul numit “previousCalculationView” calculul anterior.

Acesta s-a realizat in felul urmator:


previousCalculation =
findViewById(R.id.previousCalculationView);
display = findViewById(R.id.displayEditText);

display.setShowSoftInputOnFocus(false);

In cazul modului landscape, am adaugat butoanele din dreapta, care


se vor baza pe acelasi rationament (poza de mai jos).
Pentru functia de convertire, am creat o pagina de tip meniu care are in compenenta sa mai multe
posibilitati de convertire.

Am creeat deci 6 optiuni de convertire. Atunci cand dam click pe oricare din ele, se vor deschid
activitati diferite.

De exemplu, pentru Temperatura, am creeat clasa temp.class, unde cu,ajutorul unui string in care
am tinut o lista de unitati, am realizat converitarea in mai multe unitati.

Un exemplu ar fi (pentru temperatura):


final String[] values = new String[]{
"Celcius",
"Fahrenheit",
"Kelvin",
"Rankine",
"Newton", "Delisle"
};

Iar convertirea, s-a facut prin creearea unei metode de acest


tip:
private String celciusToKelvin(double
celsius) {
double kelvin = celsius + 273.15;
return String.valueOf(kelvin);
}
Prin apasarea butonului ‘Select Unitate’, se va deschide un nou meniu de
unitati. Prin apasarea butonului convertire, se va produce schimbarea ceruta.

Obs: Utilizatorul este nevoit sa selecteaza mai intai unitatea, apoi sa aleaga o
valoare in cifre, apoi unitatea in care vrea sa converteaza, si apoi click
butonul ‘convert’. Daca utilizatorul incearca sa schimbe ordinea operatiunilor
descrise, acesta va prim un mesaj de eroare (imaginile de mai jos).
Celelalte convertiri se vor produce in mod similar, cu exceptia micului calculator de calorii, pe care l-
am creeat cu ajutorul unor liste dinamice globale si widget-ului Recyclerview.

Ideea din spatele acestei activitati, este ca


utilizatorul sa poata cauta orice fruct sau
leguma doreste, iar atata timp cat aceasta
este adaugata in lista mea, sa poata calcula
caloriile in functie de grame.

Pentru aceasta am create 4 clase si un layout


xml pentru un singur item.

Clasa “AplicatiacuLista.class”, unde am


creeat si populat lista.

Clasa “Produs.class” unde am creat obiectul


produs si atributele sale.

Layout-ul xml one_line_produs care descrie


un singur item.

Clasa “Recyclerviewadapter.class” care face


legatura dintre cele 3.

Clasa VizualizareProduse.class unde s-au


efectuat punerea efectiva a listei pe ecran.
Lista:
private void fillProdusList() {
Produs p0 = new
Produs(0,"Capsuni",45,"https://www.seekpng.com/png/full/111-
1115742_strawberry-clipart-kawaii-cute-strawberry-png.png");
Produs p1 = new
Produs(1,"Banane",89,"https://www.nicepng.com/png/full/942-9428063_cat-
kawaii-sweet-cute-banana-ftekawaii-banana-kitty.png");
Produs p2 =new
Produs(2,"Afine",57,"https://www.pinclipart.com/picdir/big/358-
3589681_cute-blueberry-smiley-clipart.png");
Produs p3 = new
Produs(3,"Cirese",50,"https://www.pngkey.com/png/full/29-293740_cute-svg-
scrapbook-cut-files-for-silhouette-cute.png");
Produs p4 = new Produs(4,"Piersici",39,"https://sdl-
stickershop.line.naver.jp/products/0/0/1/1028966/android/stickers/
1234748.png;compress=true");
Produs p5 = new
Produs(5,"Mere",52,"https://i.pinimg.com/originals/b0/b0/92/b0b0925ab8dfd0d
1a7a05c68e5684acb.png");
Produs p6 = new Produs(6,"Pere",57,"https://cdn-icons-
png.flaticon.com/512/1538/1538918.png");
Produs p7 = new Produs(7,"Zmeura",53
,"https://cdn0.iconfinder.com/data/icons/fruits-and-vegetables-kawaii-
color-filled/300/Fruits_kawaii_1-512.png");
Produs p8 = new
Produs(8,"Struguri",67,"https://cdn.pixabay.com/photo/2021/07/07/00/36/
grapes-6392887_1280.png");
Produs p9 = new
Produs(9,"Avocado",160,"https://i.pinimg.com/originals/6d/d9/67/6dd967d7915
291ba6bb3c4c9a65afe55.png");

produsList.addAll(Arrays.asList(new Produs[]
{p0,p1,p2,p3,p4,p5,p6,p7,p8,p9}));
}

Fiecarui produs ii va fi asociat un id, nume, numar calorii per 100 g si un url link spre o poza. Dupa
care obiectul va fi adaugat in lista finala de produse.
public static List<Produs> getProdusList() {
return produsList;
}

public static void setProdusList(List<Produs> produsList) {


AplicatiaCuLista.produsList = produsList;
}

public static int getNextID() {


return nextID;
}

public static void setNextID(int nextID) {


AplicatiaCuLista.nextID = nextID;
}
In final, printr-un simplu click, utilizatorul poate accesa o noua activitate AdaugaMancare.class, de
unde va putea introduce o cantitae de produs, iar dupa ce a dat click ok, se va afisa caloriile per
grame.

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