Android Elektrik Harcaması Hesabı Uygulaması

Android Elektrik Harcaması Hesabı Uygulaması blogun Android Yakıt Hesabı Uygulaması gibi giriş seviyesinde basit bir uygulamadır. İki uygulama birbirine çok benzemektedir. Android Yakıt Hesabı Uygulaması, ekran (layout) tasarımı, ekrandaki elemanların tanıtılması ve olaylarının kullanılması, ayarların saklanması, okunması, silinmesi gibi temel konulara örnektir. Android Elektrik Harcaması Hesabı Uygulaması ise bunların yanında Spinner ve ArrayAdapter kullanımı konularına da örnektir.

Bu blogda daha önce Delphi ile yapılmış Delphide Elektrik Harcaması Hesabı uygulaması vardır. Bu uygulama mantık ve formül olarak o uygulama ile aynıdır. Fakat bu uygulama Android Studio üzerinde java ile yapılmıştır. İki uygulama incelenerek benzerlikleri ve farklılıkları karşılaştırılabilir.

Elektrikle çalışan her cihazın bir güç değeri vardır. Güç birimi watt’tır. Bir elektrikli cihazın ne kadar harcama yaptığını (elektriki iş) hesaplamak için gücün yanında süreye de ihtiyaç vardır. Elektrik harcaması hesaplanırken güç KiloWatt (Kw) (1000 Watt) cinsinden, süre ise saat cinsinden alınır. Sonuç KiloWatt Saat (Kwh) cinsindendir. Formül aşağıdaki gibidir :

(Elektriksel iş-Kwh) W = P (Elektriksel güç-Kw) x t (Zaman-saat)

Bu uygulama ile herhangi bir elektrikli cihazın girilen sürede ve birim fiyatla kaç liralık elektrik tükettiği bulunabilir. Birim fiyatı kendi faturama göre Ocak 2017 itibari ile 0,412 kuruş olarak hesapladım. Bu fiyat, tarihe veya şehire göre değişebilir. Birim fiyatı bulmak için son elektrik faturasının elektrik harcamasına bölünmesi yeterlidir. Vergiler ve paylar dahil birim fiyat çıkacaktır.

Projenin önce tasarımı yapılır. Projenin app->res->layout kısmında aktivite ismi ile aynı isme sahip xml (proje için activity_guc.xml) dosyasına tıklanarak tasarım kısmı açılır. Bu kısımda Design tabı ile doğrudan tasarım yapılabilir.

Text tabında xml dosyası doğrudan değiştirilebilir. En sağdaki Preview kısmında yapılan tasarım görüntülenir.

Normalde yeni projede bu xml dosyada Layout, RelativeLayout olarak (2.satır) tanımlıdır. Fakat uygulamada bu TableLayout olarak değiştirildi. Her Layout’un kendine göre avantaj ve dezavantajları vardır. Uygulamada 2 adet TextView, 3 adet EditText, 2 adet Spinner ve 2 adet Button bulunmaktadır. activity_guc.xml aşağıdaki şekildedir:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.dm7blog.guchesap.GucActivity">

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:gravity="center_horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_span="2"
            android:text="Harcama : 0"
            android:id="@+id/tvHarcama"
            android:textAppearance="?android:attr/textAppearanceMedium" />
   </TableRow>

    <TableRow
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:gravity="center_horizontal">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Güç :"
        android:id="@+id/tvGuc"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:id="@+id/etGuc"
        android:text="0"
        android:ems="7"/>
    </TableRow>

        <TableRow
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:gravity="center_horizontal">
        <Spinner
        android:id="@+id/spGuc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </TableRow>

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:gravity="center_horizontal">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Süre :"
        android:id="@+id/tvSure"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:id="@+id/etSure"
        android:text="0"
        android:ems="7"/>
    </TableRow>

        <TableRow
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:gravity="center_horizontal" >
        <Spinner
            android:id="@+id/spSure"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </TableRow>

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:gravity="center_horizontal">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Birim Fiyat :"
        android:id="@+id/tvBirimFiyat"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:id="@+id/etBirimFiyat"
        android:text="0"
        android:ems="7"/>
    </TableRow>

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:gravity="center_horizontal">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Temizle"
            android:id="@+id/btTemizle" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hesapla"
            android:id="@+id/btHesapla"/>
    </TableRow>

    <TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:gravity="center_horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sürüm : "
            android:id="@+id/tvSurum"
            android:layout_span="1"/>
    </TableRow>

</TableLayout>

Uygulamanın app->src->main->java-><PAKET İSMİ (Package Name)> kısmında java (proje için GucActivity.java) dosyasına tıklanarak kod girme kısmı açılır.

Uygulamada Hesapla butonu ile EditText’lerden aldığı değerleri göre hesaplama yapmakta ve sonuçları TextView’lerde göstermektedir. Uygulama girilen değerleri hafızada saklayabilmekte ve açılışta otomatik yüklemektedir. Temizle butonuyla ise EditText’ler deki ve hafızada saklanan değerler sıfırlanmaktadır. Aşağıdaki GucActivity.java dosyasında uygulamanın kodları bulunmaktadır:

package com.dm7blog.guchesap;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.content.SharedPreferences;
import android.content.Context;

public class GucActivity extends AppCompatActivity {
    EditText guc;
    EditText sure;
    EditText birimfiyat;
    TextView harcama;
    TextView surum;
    Button bthesapla;
    Button bttemizle;
    SharedPreferences sprefs;
    private Spinner spguc;
    private Spinner spsure;
    private ArrayAdapter<String> dataAdapterForGuc;
    private ArrayAdapter<String> dataAdapterForSure;
    //Spinner içerisine koyacağımız verileri tanımlıyoruz.
    private String[] gucbirimleri={"KWatt", "Watt"};
    private String[] sureler={"Saat", "Dakika", "Saniye"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guc);
        guc = (EditText)findViewById(R.id.etGuc);
        sure = (EditText)findViewById(R.id.etSure);
        birimfiyat = (EditText)findViewById(R.id.etBirimFiyat);
        harcama = (TextView)findViewById(R.id.tvHarcama);

        surum = (TextView)findViewById(R.id.tvSurum);
        surum.setText("Sürüm : "+BuildConfig.VERSION_NAME);

        spguc = (Spinner) findViewById(R.id.spGuc);
        dataAdapterForGuc = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, gucbirimleri);
        spguc.setAdapter(dataAdapterForGuc);

        spsure = (Spinner) findViewById(R.id.spSure);
        dataAdapterForSure = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, sureler);
        spsure.setAdapter(dataAdapterForSure);

        sprefs = getSharedPreferences("Ayarlarim", Context.MODE_PRIVATE);
        //Ayarlar okunuyor
        ayarlarioku();

        bthesapla = (Button)findViewById(R.id.btHesapla);
        bthesapla.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hesapla();
                ayarlarisakla();
            }
        });

        bttemizle = (Button)findViewById(R.id.btTemizle);
        bttemizle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                guc.setText("0");
                sure.setText("0");
                birimfiyat.setText("0");
                harcama.setText("Harcama : 0 Kwh & 0 Tl");
                ayarlarisil();
            }
        });
    }

    private int Index_Al(Spinner spinner, String myString)
    {
        int index = 0;

        for (int i=0;i<spinner.getCount();i++){
            if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)){
                index = i;
                break;
            }
        }
        return index;
    }

    public void hesapla() {
        float hguc;
        float hsure;
        float hkwh;
        float hbirimfiyat;
        float hsonuc;

        hguc = Float.parseFloat(guc.getText().toString());
        hsure = Float.parseFloat(sure.getText().toString());
        hbirimfiyat = Float.parseFloat(birimfiyat.getText().toString());

        if(spguc.getSelectedItem().toString().contentEquals("Watt"))
        {
            hguc = hguc / 1000;
        }

        if(spsure.getSelectedItem().toString().contentEquals("Saniye"))
        {
            hsure = hsure / 3600;
        }

        if(spsure.getSelectedItem().toString().contentEquals("Dakika"))
        {
            hsure = hsure / 60;
        }

        hkwh = hguc * hsure;
        hsonuc = hkwh * hbirimfiyat;
        harcama.setText("Harcama : " + String.format("%.2f", hkwh)+ " Kwh & " + String.format("%.2f", hsonuc)+"Tl");
    }

    public void ayarlarioku() {
        // Ayarlar okunuyor
        guc.setText(sprefs.getString("Guc", "0"));
        sure.setText(sprefs.getString("Sure", "0"));
        birimfiyat.setText(sprefs.getString("BirimFiyat", "0"));
        harcama.setText(sprefs.getString("Harcama", "Harcama : 0 Kwh & 0 Tl"));
        spguc.setSelection(Index_Al(spguc, sprefs.getString("GucBirimi", "KWatt")));
        spsure.setSelection(Index_Al(spsure, sprefs.getString("SureBirimi", "Saat")));
    }

    public void ayarlarisakla() {
        SharedPreferences.Editor editor = sprefs.edit();
        // Ayarlar kaydediliyor
        editor.putString("Guc",guc.getText().toString());
        editor.putString("Sure",sure.getText().toString());
        editor.putString("BirimFiyat",birimfiyat.getText().toString());
        editor.putString("Harcama",harcama.getText().toString());
        editor.putString("GucBirimi", spguc.getSelectedItem().toString());
        editor.putString("SureBirimi", spsure.getSelectedItem().toString());
        editor.commit();
    }

    public void ayarlarisil() {
        SharedPreferences.Editor editor = sprefs.edit();
        // Ayarlar siliniyor
        editor.remove("Guc");
        editor.remove("Sure");
        editor.remove("BirimFiyat");
        editor.remove("Harcama");
        editor.remove("GucBirimi");
        editor.remove("SureBirimi");
        editor.clear();
        editor.commit();
    }
}

Aşağıda Samsung S4 mini cihazında gerçek uygulamanın alınmış ilk çalışma ve hesaplamadan sonrası ekran görüntüleri bulunmaktadır :

Not Bu uygulamada güç hesaplaması yapılırken DC sistem (Doğru akım) veya akım ve gerilimin aynı fazda olduğu (aralarında faz farkı olmadığı) tek fazlı bir AC sistem (Alternatif akım) olduğu varsayılmıştır. Akım ve gerilimin aralarında faz farkı olan tek veya çok fazlı AC sistemlerde bu faz farkı (ϕ) hesaba katılmalıdır.

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s