Sunteți pe pagina 1din 14

PROIECT DISPOZITIVE ȘI APLICAȚII MOBILE

Cepoiu Roxana Maria

Grupa 1067, seria Info A

1
Cuprins

Capitolul 1. Introducere

Capitolul 2. Descriere solutii

Capitolul 3. Implementare solutie

Capitolul 4. Concluzii

2
Capitolul 1. Introducere

1.1.Definire problema

Problema identificata este una destul de prezenta in zilele noastre si anume, atunci cand mai
multi prieteni ies fie la un film, fie la un restaurant sau la o cafenea este foarte comod sa
plateasca o singura persoana intreaga nota, apoi restul sa ii dea persoanei respective
contravaloarea consumatiei.

Cum ne indreptam usor, usor intr-o era condusa de tehnologie, majoritatea tinerilor nu prea mai
umbla cu bani cash la ei, preferand sa achite cu cardul tot mai des.

1.2.Definire obiective

Traind intr-o lume a vitezei, in care timpul este esential, s-ar putea sa uitam ca la un moment dat
am platit nota integral si nu ne-am recuperat banii asadar obiectivul principal al aplicatiei este de
a retine sumele pe care le ai de colectat, precum si persoanele care iti datoreaza aceste sume.

Totodata anumite plati s-ar putea sa fie efectuate in alta moneda, diferita fata de moneda
nationala RON, astfel ca aplicatia ar trebui sa aiba o parte in care arata user-ului ratele de schimb
valutar pentru ca acesta sa fie la curent. De asemenea sa faciliteaze si conversia in EURO, ori
alte monede.

1.3.Definire cadru general

Aplicatia ar trebui sa fie folosita de fiecare data cand user-ul are de colectat sume de la alte
persoane.

3
Capitolul 2. Descriere solutie

2.1. Descriere scenariu utilizare

In prima faza user-ul trebuie sa se logheze in aplicatie. Daca este pentru prima data cand doreste
sa utilizeze aplicatia, mai intai trebuie sa isi creeze cont; daca are deja cont dupa efectuarea
login-ului, va aparea o interfata ce contine mai multe optiuni precum:

 Exchange rates
 EURO conversion
 Payments
 Pie Chart
 Maps

4
2.2.Functionalitati

 Exchange rates -> ajuta user-ul sa fie la curent cu ratele de schimb valutare, daca
acesta va dori sa faca conversia in alta moneda; ia ratele de pe BNR.
 EURO conversion -> ajuta user-ul sa converteasca in EURO suma pe care a paltit-o
pentru a stii exact cat are de recuperate mai apoi.
 Payments -> ajuta user-ul sa stie in orice moment cat are de colectat.

Capitolul 3. Implementarea solutiei

3.1. Descrierea tehnica a functionalitatilor

 Exchange rates -> preia un fisier xml de pe BNR si il parseaza pentru a-l putea afisa
intr-un ListView

5
@Override
protected List<String> doInBackground(String... params) {
List<String> resultList=new ArrayList<String>();
try{
URL url= new URL(params[0]);
HttpURLConnection con=(HttpURLConnection) url.openConnection();
InputStream input = con.getInputStream();
InputStreamReader reader = new InputStreamReader(input);

BufferedReader rr = new BufferedReader(reader);


DocumentBuilder docB=
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=docB.parse(input);
if (doc!=null){
NodeList rate=doc.getElementsByTagName("Rate");
for(int i=0;i<rate.getLength();i++){
Node nod=rate.item(i);
if (nod!=null && nod.getNodeType()==Node.ELEMENT_NODE){
Element element = (Element) nod;
resultList.add(element.getAttribute("currency")+" -
"+element.getTextContent());
}
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
return resultList;
}

 EURO conversion -> este format din 4 EditText-uri si 2 butoane. In primul EditText
acolo unde este pus hint ,,suma’’ trebuie introdusa suma pe care user-ul doreste sa o
converteasca. In al doilea EditText, cel care are hint ,,rata’’ trebuie introdusa suma
ratei de schimb (vazuta de user cu ajutorul butonului Exchange rates). In momentul in
care user-ul apasa pe butonul Send, suma din primul EditText se pastreaza intr-un
fisier txt denumit chiar ,,fisier.txt’’ cu ajutorul metodei salvareText. Apoi prin metoda
,,metodaCitesteFisier’’ apelata prin apasarea butonului Display se citeste suma
retinuta in fisier. Dupa citire suma se converteste cu rata de schimb. Apoi in final
suma convertita este afisata in ultimul EditText

6
protected void salvareText(View v)
{
try {
OutputStreamWriter fis=new OutputStreamWriter(
openFileOutput("fisier.txt", Context.MODE_PRIVATE));

fis.write(((EditText)findViewById(R.id.edtextinput)).getText().toString());
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

7
protected void metodaCitesteFisier(View v)
{
InputStreamReader r=null;

try {
r=new InputStreamReader(openFileInput("fisier.txt"));
BufferedReader reader =new BufferedReader(r);
String linie=null;
StringBuilder builder=new StringBuilder();
while((linie=reader.readLine())!=null)
{
builder.append(linie);
}

//Toast.makeText(getApplicationContext(),builder.toString(),Toast.LENGTH_SHORT).sh
ow();

//preiua din fisier valoarea introdusa o data cu apasarea butonului Send


//adica valoarea din primul edit text ,,suma''
// si o pun al 3lea edit text
EditText editTextout=(EditText)findViewById(R.id.edtextoutput);
editTextout.setText(builder.toString());

//parsez valoarea sumei in float


String val=editTextout.getText().toString();
float Nval=Float.valueOf(val);

//preiau valoarea celui de-al doilea edit text -> adica valoarea ratei
EditText editTextin=(EditText)findViewById(R.id.edtextinput1);
// o parsez in float
String rate=editTextin.getText().toString();
float Nrate=Float.valueOf(rate);

// calculul dintre suma si rata


float finalVal=Nval*Nrate;

// apoi afisez in ultimul edit text valoarea sumei convertite


EditText editTextout2=(EditText)findViewById(R.id.edtextoutput2);
String conversie=String.valueOf(finalVal);
editTextout2.setText(conversie);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

8
 Payments -> dupa apasarea butonului Payments din interfata principala, se va
deschide o noua activitate unde user-ul poate introduce informatii despre: locul unde
s-a efectuat plata, modalitatea de plata, prietenii cu care a fost, suma achitata, suma pe
care o avea el de plata si moneda in care s-a efectuat plata. Apoi la apasarea butonului
Wallet toate aceste date vor fi introduse intr-o baza de date SQLite. Informatiile din
EditText-uri sunt preluate in variabile de tipul String. Apoi este creat un obiect de
tipul InfoPayments ale carui atribuite vor fi completate cu informatiile din variabilele
de mai sus prin constructorul clasei. Apoi cu ajutorul Adapter-ului unde au fost create
metodele de inserare, select si delete se va realiza inserarea obiectului in baza de date.
Pentru a putea crea baza de date am avut nevoie de 3 clase DBAdapter, DBConstants
si DatabaseHelper .
DatabaseHelper retine metode ce se ocupa cu DDL, adica de create si drop table.
DBAdapter contine metode ce se ocupa cu DML, adica insert, select si delete.
DBConstants retine campurile ce vor deveni coloane.

9
DatabaseHelper

public void onCreate(SQLiteDatabase db)


{
db.execSQL("create table "+DBConstants.table1
+" ("+DBConstants.coloanaID+" integer primary key autoincrement, "
+DBConstants.coloanaLocatie+" text not null, "
+DBConstants.coloanaModalitate+" text not null, "
+DBConstants.coloanaPrieteni+" text not null, "
+DBConstants.coloanaTotalSuma+" text not null, "
+DBConstants.coloanaSumaIndiv+" text not null); ");

db.execSQL("create table "+ DBConstants.table2


+" ("+DBConstants.coloanaID+" integer primary key autoincrement, "
+DBConstants.coloanaSuma+" text not null, "
+DBConstants.coloanaMoneda+" text not null, "
+DBConstants.coloanaPlataId+" integer, FOREIGN KEY("
+DBConstants.coloanaPlataId+") REFERENCES "+DBConstants.table1+"
("+DBConstants.coloanaID+"));");

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("drop table if exists "+DBConstants.table1);
db.execSQL("drop table if exists "+DBConstants.table2);
onCreate(db);

DBConstants

public class DBConstants


{
public static String table1="PaymentInformation";
public static String coloanaID="id";
public static String coloanaLocatie="location";
public static String coloanaModalitate="paymentMethod";
public static String coloanaPrieteni="persons";
public static String coloanaTotalSuma="bill";
public static String coloanaSumaIndiv="personalAmount";

public static String table2="CollectMoney";


public static String coloanaSuma="amount";
public static String coloanaMoneda="moneda";
public static String coloanaPlataId="idPayment";

10
DBAdapter

public void insertPayment(InfoPayments payment)


{
ContentValues values=new ContentValues();
values.put(DBConstants.coloanaLocatie,payment.getLocatie());
values.put(DBConstants.coloanaModalitate,payment.getModalitate());
values.put(DBConstants.coloanaPrieteni,payment.getPrieteni());
values.put(DBConstants.coloanaTotalSuma,payment.getTotalSuma());
values.put(DBConstants.coloanaSumaIndiv,payment.getSumaIndiv());
db.insert(DBConstants.table1,null,values);

public void insertCollect(CollectCash money)


{
ContentValues values=new ContentValues();
values.put(DBConstants.coloanaSuma,money.getSumaCol());
values.put(DBConstants.coloanaMoneda,money.getMoneda());
values.put(DBConstants.coloanaPlataId,money.getIdPlata());
Log.e("EROARE",""+db.insert(DBConstants.table2,null,values));
}

public List<InfoPayments> getAllPayments()


{
Cursor c=db.query(DBConstants.table1, new
String[]{DBConstants.coloanaID,DBConstants.coloanaLocatie,DBConstants.coloanaModal
itate,DBConstants.coloanaPrieteni,

DBConstants.coloanaTotalSuma,DBConstants.coloanaSumaIndiv},null,null,null,null,nul
l);

List<InfoPayments> lista=new ArrayList<>();


c.moveToFirst();
do{
InfoPayments payment=new
InfoPayments(c.getInt(0),c.getString(1),c.getString(2),c.getString(3),c.getString(
4),c.getString(5));
lista.add(payment);
}while (c.moveToNext());

return lista;

public List<CollectCash> getAllCollectMoney(int id)


{
Cursor c=db.query(DBConstants.table2, new
String[]{DBConstants.coloanaID,DBConstants.coloanaSuma,DBConstants.coloanaMoneda,D
BConstants.coloanaPlataId},null,null,null,null,null);

List<CollectCash> lista=new ArrayList<>();


c.moveToFirst();
do{
CollectCash money=new
CollectCash(c.getInt(0),c.getString(1),c.getString(2),c.getInt(3));
lista.add(money);

11
}while (c.moveToNext());

return lista;

public void deleteCollect(int id)


{
db.execSQL("DELETE FROM " + DBConstants.table2+ " WHERE
"+DBConstants.coloanaID+"= "+id+";");
db.close();
}

Dupa ce a fost apasat butonul Wallet si informatiile ajung in baza de date-> apare o noua
activitate ce are un ListView in spate unde apar informatii despre sumele pe care user-ul le are de
colectat.

12
Daca user-ul a incasat banii, poate colecta apasand pe linia corespunzatoare sumei colectate-> se
va apela metoda de delete din DBAdapter + un refresh al listei afisate in ListView pentru arata
situatia exacta a datelor retinute in baza de date.

13
Capitolul 4. Concluzii

Cea mai buna solutie tehnica pentru a implementa aplicatia ar fi ca aceasta sa fie conectata la o
baza de date pe server, de asemenea sa existe un grup creat cu mai multi useri (prieteni), iar in
momentul in care unul dintre useri colecteaza suma sa i se scada celuilalt user datoria.

14

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