İlginizi Çekebilir
JavaFX Form
featured
  1. Ana Sayfa
  2. Java Projeleri
  3. Java Json ile Döviz Uygulaması Yapımı

Java Json ile Döviz Uygulaması Yapımı

Java JSON ile Döviz Uygulaması Yapımı, başlığını belirlerken ve giriş cümlesine nasıl başlayacağım konusunda aklımda hep bir soru işareti olsa da, sizleri, sıkmak istemediğimden ve konunun işleyişine bir an önce devam etmek istediğimden dolayı sizleri fazla tutmadan bu projemizin konusu olan Java Json ile döviz uygulaması yapımı kararını nasıl aldığımı anlatmak istiyorum.

Java Projelerin Doğuşu

Bu kararımı alırken her zaman bireysellik yerine “ekip” kavramına ve ilk yazılarımda sürekli dile getirdiğim “birlikte” kelimesinden yola çıkarak sınıf arkadaşlarım ile birlikte küçük bir grup oluşturarak bu projeleri sürekli hale getirmek için karar aldık. Bu kararımızı alırken bizi en çok korkutan olayların üzerine gitmek ve kervan yolda düzülür atasözüne uymak için ilk proje olarak java ile döviz uygulaması yapımı fikri ortaya atıldı. Bu proje fikri ile artık başlamaya hazırdık, biz projelerden değil artık projeler bizden korkmalıydı 😄.

Kararın alındığı zaman araştırma yapmak için birçok yöntem olduğunu ve bu yöntemlerin ne yazık ki Java diline ait Türkçe bir kaynak olarak anlatılmadığının farkına vardım direkt yapılacaklar listesinde olan bir maddenin üstünü karalamak için bu yazıya kadar geçen 26 yazılık ve ilk yazımdan itibaren geçen 5 haftalık geçen zaman sonunda Java Projeler kategorisini oluşturdum. 👏🏻

📣 İlerleyen zamanlarda en azından bu süreci bir sistematiğe oturttuğumuz zaman sizler ile fikir alışverişi yapmak, proje ekiplerinde bulunmak ve hatalarımızdan birlikte ders çıkartmak için bir topluluğa katılmayı veya bu topluluğu kurma düşüncesindeyim. Bu düşüncem hakkında görüşlerinizi yorum olarak benimle paylaşırsanız gerçekten sevinirim diyerek projemizi oluşturmaya başlayabiliriz.

İlk Adım: Karar Verme

Öncelikle projenin anahtar kelimesi olan döviz uygulaması kavramına odaklanalım. Bu uygulamayı yapabilmem için öncelikle bazı verilere sahip olmam ve o verileri işlemem gerekiyor. Peki bu gerekli anlık döviz bilgilerini hangi yöntemler ile alabilirim bunu araştırmam ve projem için en doğru çözüme karar vermeliydim. Anlık olarak döviz bilgilerini çekmek için önümde bazı seçenekler vardı, bu seçenekleri şu şekilde sıralayabilirim;

  • JSON
  • JSOUP
  • XML
  • Java RSS

Önüme çıkan bazı seçenekler bu şekildeydi ve benim kullanım yapıma, projeye katacağı esneklik ve sürdürülebilirliği daha fazla olduğunu düşündüğümden dolayı başlıktan da görebileceğiniz üzere JSON ile döviz uygulaması yapımı kararını verdim. Bu kararımı verdikten sonra JSON kavramını programıma tanıtımının nasıl yapılacağını, json ile veri çekmek ve json dosyasından veri okuma gibi konularda araştırmalarıma başladım. Bu konu üzerinde öğrendiğim bilgileri başlıklar halinde sizlere anlatacağım merak etmeyin.

Kendinizi hazır hissediyorsanız kemerlerinizi bağlayın, veriyi nasıl alacağımızın kararını verdiğimize göre json ile döviz uygulaması yapımına başlayabiliriz.

Java Json ile Döviz Uygulaması Yapımı

Proje için gerek duyduğumuz veriyi hangi yöntemle elde edeceğimize karar verdiğimize göre, bu veriyi nereden elde edeceğime karar vermem ve nasıl işleyeceğimi öğrenmem gerekiyor. Bunun için yaptığım aramalar sonucunda bu işlemi gerçekleştirebilmem için maven kavramına göz atmam gerekiyor.

Bu Maven kavramını ilerleyen zamanlarda yazmak istediğim ve daha detaylı incelemek istediğim bir olay olmasına rağmen kısaca Java Maven kavramı hakkında öğrendiğim bilgileri şu şekilde sizlerle paylaşabilirim:

  • Projemizin okunabilirliğini arttırarak, kaliteli bir proje alt yapısı oluşturmak.
  • Projemizin bağımlı olduğu kütüphaneleri kolayca projelerimize tanıtabiliriz.
  • Proje hakkında meta bilgilerini güncelleyebilir veya tutabiliriz
  • Herhangi bir build işlemi gerçekleştireceğimiz zaman kolay bir şekilde projeyi derlememize imkan sağlar.

Bu araştırmam sonucunda elde ettiğim bilgileri analiz ettikten sonra Maven kavramının sağlamış olduğu belli başlı avantajlar bu şekilde karşıma çıktı. Projemizin bağımlılıklarını kontrol etmemizi, belirlememize imkan vermesi ve projemizin alt yapısını oluşturacak bağımlılığı tanıtmam gerektiği için pom.xml dosyasına erişerek gerekli bağımlılığımın tanıtımını gerçekleştirmem gerekiyor.

Java Maven pom.xml
Java Maven Projesi

Yukarıdaki görselde yer alan adımları izleyerek bir maven projesi oluşturdum. Oluşturmuş olduğum bu proje üzerinde pom.xml dosyasına girdikten sonra projemin json ile veri çekmek ve json dosyasından veri okuma işlemini gerçekleştirebilmesi için burada yer alan dosyayı projeme tanıtım işlemini gerçekleştirdim. Bu tanıtım işlemi için uygulamış olduğum 2 basit adım şu şekilde;

#1 Öncelikle açmış olduğum maven projesi içerisinde yer alan pom.xml dosyası içerisine girerek dependencies etiketlerinin tanıtımını gerçekleştirdim. Bu etiketler projemin bağımlı olduğu değerlerin tutulacağı genel etiket yapısı olarak düşünebilirsiniz.
#2 Etiketleri yazdıktan sonra yukarıda vermiş olduğum adreste paylaşılan bağımlılık kodlarını aldıktan sonra projeme tanıtımını gerçekleştirdim.

Bu işlemler sonucunda döviz uygulamamamın pom.xml dosyası şu hale geldi:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.doviz</groupId>
    <artifactId>firstDovizKuru</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>
</project>

Java Json ile Döviz Uygulaması Yapımı başlığındaki temel kavram olan “JSON” kavramını işleyebilmek için programımızın bağımlılığını oluşturduğuma göre artık veri çekeceğim güzel bir kaynak arayışında bulunmam gerekiyor. Bu işlemi nasıl gerçekleştirdiğim ve json ile veri çekmeyi nasıl gerçekleştirdiğimi bir alt başlıkta gelin birlikte inceleyelim.

JSON ile Veri Çekmek

Yapmak istediğim döviz uygulamasının temel mantığında anlık olarak, belli periyotlar içerisinde güncellenecek ve sorgulama esnasında bana alım, satım, verinin güncellenme zamanı gibi bilgilerin verilmesini istediğim için buna uygun bir kaynak arayışına girdim. Json ile veri çekmek için aradığım bu kaynağı fazla aramadan, bir kaç keyword ile arama yaptığım zaman uygulamam için en uygun json verisine ulaştım.

Java Json ile döviz uygulaması yapımı konusunun baş rolü olan json verisini bulduğumuza göre bu veriyi projem üzerinde nasıl kullanacağımı, hangi şekilde işleyeceğimi kararlaştırmam gerekiyordu ve belki de bir çok yöntemi bulunan bu veri çekme olayını kendimce en ideal yöntem ile çözecek adımları izlemeye başladım. Json ile veri çekmek için izlediğim bu adımlar şu şekildeydi:

  1. Aklımdaki fikri uygulamak için öncelikle bu işi yönetebileceğim, gerekli verilerin yazdırılmasını sağlayabileceğim, JSONWrite isimli bir sınıf oluşturdum. Bu sınıf içerisinde yapacağım işlemin direkt proje başladığı zaman çalışmasını, istediğim zaman bir metot aracılığı ile benim çağıracağım ve zamanlayıcı kuracağım için baslat() isminde bir metot tanımlaması gerçekleştirdim.
  2. Oluşturmuş olduğum metot içerisine işlemlerimin hata sonuçları olacağından dolayı try-catch yapısını oluşturduktan sonra projemizin ana kolonunu oluşturacak json verisini çekeceğim internet adresini URL ile tanıtımını gerçekleştiriyorum.
  3. Json verisini çekeceğim internet adresini belirledikten sonra o adrese bağlantı sağlayabilmek için HttpURLConnection tanımlamasını yaptıktan sonra bağlantı isteğimin geri dönüş cevabını öğrenmek için ekrana geriye dönen değeri yazdırmasını istiyorum.
    URL url = new URL("https://finans.truncgil.com/v3/today.json"); // Veriyi Alacağımız URL Giriyoruz.
    HttpURLConnection hr = (HttpURLConnection) url.openConnection();
    System.out.println(hr.getResponseCode()); //Bağlantı Cevap Numarasını öğreniyoruz.
  4. Bağlantı sağladığımız internet adresinde elde ettiğimiz byte türündeki veriyi okumak için InputStream ve arkasından bu gelen veriyi BufferedReader ile işleyecek tanımlamaları gerçekleştirdim.
    InputStream im = hr.getInputStream();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(im));
  5. Okuduğumuz bu veriyi projemiz içerisinde bir dosya içerisinde tutmak ve okuduğumuz veriyi yazdıracağımız dosyanın yolunu File tanımlamasını gerçekleştirdim. Bu tanımlamadan sonra okunan veriyi yazdırmak için gerekli BufferedWriter tanımlamasını gerçekleştirdikten sonra okunan veriyi bir değişkende tutmak için string veri tipine ait veri isminde bir değişken tanımlamasını gerçekleştirdim.
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
    String veri = (String) bufferedReader.readLine();
  6. Okuduğumuz ve “veri” ismindeki değişkenimize tanımladığımız değerin null bir değer döndürene kadar yazdırması için while döngüsü oluşturdum ve gerekli yazdırma işlemlerini gerçekleştirecek işlemleri oluşturdum. En sonunda yapmak istediğim işlemin bittiğini göstermek için tüm açık işlemlerimi kapatmak için verilerini kapatıyorum.

Genel olarak json ile veri çekmek için yazmış olduğum kodun teorik anlatımı bu şekilde olsa da anlamlandırabilmeniz için bu alana kadar yazmış olduğum kod şu şekildedir;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
//import java.util.Timer; Görev metodunu oluştururken kullanacağız.
//import java.util.TimerTask; Görev metodunu oluştururken kullanacağız.

public class JSONWrite {
    //static int saatBasi = 0; Görev metodunu oluştururken kullanacağız.
    public void baslat(){
        // JSON Dosyasındaki Verileri İnternet Sitesinden Çekerek "Veri.JSON" dosyasına yazdıracağız.
        try{
            URL url = new URL("https://finans.truncgil.com/v3/today.json"); // Veriyi Alacağımız URL Giriyoruz.
            HttpURLConnection hr = (HttpURLConnection) url.openConnection();
            //System.out.println(hr.getResponseCode()); //Bağlantı Cevap Numarasını öğreniyoruz.
            if(hr.getResponseCode() == 200){ // Eğerki bağlantı cevap numaramız bize lazım olan 200 ile aynı olduğu zaman işlemi gerçekleştiriyoruz.
                InputStream im = hr.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(im));
                File file = new File("C:/Users/winem/Desktop/Projeler/firstDovizKuru/src/main/java/dovizVeri.JSON"); // Dosya Yolunu Değiştirmeyi Unutmayın.
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
                String veri = (String) bufferedReader.readLine();
                while (veri!=null){
                    bufferedWriter.write(veri); // Okunan Veriyi Yazdırıyoruz.
                    bufferedWriter.newLine(); // Bir Aşağı Satıra Geçmesini İstiyoruz.
                    bufferedWriter.flush(); // Okunan verileri dosyada görmemiz için aktarım işlemini sağlıyor.
                    veri = bufferedReader.readLine(); // Yeni Veri Okutuyoruz.
                }
                // İşlemler Bitince Okuma ve Yazma İşlemlerini Kapatıyorum.
                bufferedWriter.close();
                bufferedReader.close();
                im.close();

            }
        }
        catch (Exception e){
            System.out.println("JSONWrite Sınıfı Exception Hatası.\n"+e);
        }
    }
    JSONWrite(){
        baslat(); // Main sınıfına tanımlama yaptıktan sonra ilk başta dosya oluşmasını istiyorum.
    }
    }
}

Normal şartlarda buraya kadar yazdığımız kod içerisinde json veri çekmek için kullanacağımız internet adresini tanıtıp bağlantı isteğinde bulunduk, bulunduğumuz isteğe gelen geri dönüşü değerlendirip veriyi okuyarak kendi projemiz içerisinde dovizVeri.JSON dosyası içerisinde kayıt altına aldık. İşimiz bitti olarak gözükebilir ama ilerleyen zamanlarda bu projeyi geliştirmek istediğim için şimdiden temellerini atmak adına programımım açık kaldığı süre boyunca JSON verimin güncellenme sıklığına göre gidip aynı işlemlerin yapılmasını ve dosyama yazdırılmasını istiyorum.

Bunun için bir zamanlayıcı ⏱ ve bu zamanlayıcının aktif olduğunda belli bir işlemi yerine getirmesi için görev tanımlaması yapmam gerekiyor. Form özelliklerinde aklımda kalan Timer ve TimerTask öğelerini kullanmanın bu aşama için doğru bir karar olacağını düşünerek küçük bir prototip zamanlayıcı ve görev tanımlaması gerçekleştirdim.

public  void alertTimer(){
      Timer alertTimer = new Timer();
      TimerTask alertTask = new TimerTask() {
          @Override
           public void run() {
               if(saatBasi < 4) {
                    System.out.println(ConsoleManager.RED + "-> Program 15 Dakkikadır Aktif." + ConsoleManager.RESET);
                    System.out.println(ConsoleManager.BLUE + "-> JSON Bilgileri Genelde 15 Dakkikada Bir Yenilenir." + ConsoleManager.RESET);
                    System.out.println(ConsoleManager.YELLOW + "-> Bu Yüzden JSON Bilgileri Güncellenmek İçin Program Yeniden Başlatıldı.\n" + ConsoleManager.RESET + BaseMenuCreateManager.menuAyrac);
                    baslat();
                    saatBasi++;
              }
              else {
                    System.out.println(ConsoleManager.RED + "-> Program 60 Dakkikadır Aktif. Program Kapatıldı Tekrar Çalıştırın.\n" + ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
                    alertTimer.cancel();
                    System.exit(0);
              }
          }
      };
      alertTimer.schedule(alertTask,900000,900000); // Program başladıktan sonra 15dk sonra ilk görev başladıktan sonra her 15 dk da bir tekrar edecek.
}

Json ile veri çekme işlemimizi bitirdiğimize göre artık bu çekilen veriyi işleyeceğimiz ve projemize dahil edeceğimiz aşama olan json dosyasından veri okuma işlemini nasıl gerçekleştireceğimize geçebiliriz.

JSON Dosyasından Veri Okuma

İşimizin temel kolonunu veriyi çekerek tamamladık, şimdi ise bu kolonun etrafında yapıyı inşa etmemiz ve kolonu doğru ve anlamlı bir şekilde kullanmamız gerekiyor. Açıkçası bu json dosyasından veri okuma işlemini nasıl, hangi şekil ile yapmam gerektiğini aslında projeye ilk başlarken pom.xml üzerinde belirttiğimiz bağımlılık ile çözmüştük. İşin anahtar kelimesi JSONParser‘ın ta kendisiydi. Anahtar olarak gördüğümüz JSONParser tanımlaması ile JSON dosyasından veri okuma işlemini sorunsuz ve doğru bir şekilde gerçekleştirebileceğiz.

Json dosyasından veri okuma işlemi için uyguladığım aşamalar bir önceki işlemim kadar uzun ve karışık değil, sadece gerekli görülen bazı tanımlamaları yaptıktan sonra sorgu işleminin gerçekleştirilmesini sağlamış olacağız. Json dosyasından veri okuma işlemi için uygulamış olduğum aşamalar şu şekildedir:

  1. İşlemlerimin ayrı sınıflarda olmasını ve katmanlar halinde ayrılmasını sevdiğim için bu işlemim için JSONReader isminde bir sınıf oluşturdum. Daha sonra oluşturmuş olduğum sınıf içerisinde json dosyasından veri okuma işleminden sonra elde edilen değerlerin tutulacağı değişkenlerin tanımlamasını gerçekleştirdim.
  2. Gerekli tanımlamalarım bittikten sonra işlemimin gerçekleştirilmesini sağlayacak showMe isminde bir metot tanımlaması gerçekleştirdikten sonra metot içerisine JSONParser tanımlamasını yaptım.
  3. Tanımlama işlemlerim bittikten sonra sorgulama işlemim esnasında bir hata ile karşılaşabileceğim için try-catch bloklarını oluşturuyorum. Daha sonra json dosyasından veri okumak için gerekli olan okunacak dosyanın tanımlamasını gerçekleştiriyorum.
  4. Okunan verilerimi bir json objesi içerisinde tutmak için sırasıyla Object tanımlaması daha sonra JSONObject tanımlamalarını gerçekleştirdim.
    FileReader fileReader = new FileReader("C:/Users/winem/Desktop/Projeler/firstDovizKuru/src/main/java/dovizVeri.JSON");
    Object obje = jsonParser.parse(fileReader);
    JSONObject jsonObject = (JSONObject) obje;
  5. Buraya kadar gerçekleştirdiğim işlem içerisinde json dosyasında bulunan verileri okumaya başlayabiliriz fakat JSON dizilerini okuyabilmemiz için JSONArray tanımlamasını yaptıktan sonra okuyacağımız veriyi bu dizi içerisine eklemek için “add” metodu ile verimizi dizi içerisine ekledim.
    JSONArray jsonArray = new JSONArray();
    jsonArray.add(jsonObject.get(hangiVeri)); //hangiVeri bir değişkendir. "USD,EUR,..." gibi değerlerde yazabilirsiniz bunun yerine.
  6. Elde ettiğimiz dizi içerisindeki verileri okuyabilmek için basit bir for döngüsü kurarak verilerimi okuyarak ilk başta tanımladığım değişkenlere atamasını gerçekleştiriyorum.
  7. İşlemlerimiz bittiğinde öğrendiğimiz bilgileri kullanmak ve kullanıcıya gerekli sorgulamayı göstermek için ekrana yazdırma işlemlerini gerçekleştirerek, dosya okumak için açmış olduğum FileReader öğesini “close” metodu ile kapatıyorum.

Görüldüğü gibi başta tanımladığımız bağımlılık sayesinde kullandığımız JSONParser sayesinde json dosyasından veri okuma işlemi oldukça basit bir hale geliyor. Her aşamada olduğu yazmış olduğum kodu sizlerle aşağıda paylaşıyorum. Her madde sonunda kodu incelerseniz akılda kalıcılığının daha fazla olacağını düşünüyorum.

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.FileReader;
import java.io.IOException;

public class JSONReader {
    static String dovizAlis = null;
    static String dovizSatis = null;
    static String degisimMiktari = null;
    static String jSONGuncelleme = null;


    public void showMe(String hangiVeri) {
        // JSON Tanımlaması :
        JSONParser jsonParser = new JSONParser();

        // Dosya Okuma:
        try {
            FileReader fileReader = new FileReader("C:/Users/winem/Desktop/Projeler/firstDovizKuru/src/main/java/dovizVeri.JSON");
            Object obje = jsonParser.parse(fileReader);
            JSONObject jsonObject = (JSONObject) obje;
            jSONGuncelleme = (String) jsonObject.get("Update_Date");
            // JSON Tablosunu Array olarak açma işlemi:
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(jsonObject.get(hangiVeri));
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject currency = (JSONObject) jsonArray.get(i);
                dovizAlis = (String) currency.get("Buying");
                dovizSatis = (String) currency.get("Selling");
                degisimMiktari = (String) currency.get("Change");

            }
            System.out.println(ConsoleManager.GREEN + "-> JSON Güncelleme Zamanı: " + ConsoleManager.RESET + jSONGuncelleme); // JSON Güncelleme Zamanını Yazdırtırıyoruz.
            System.out.println(ConsoleManager.RED + "-> Alış Miktarı: " + ConsoleManager.RESET + dovizAlis +
                    ConsoleManager.CYAN + "\n-> Satış Miktarı: " + ConsoleManager.RESET + dovizSatis +
                    ConsoleManager.YELLOW + "\n-> Degişim Miktarı: " + ConsoleManager.RESET + degisimMiktari);

            // İşlemlerin Kapatılması:
            fileReader.close();
        } catch (IOException e) {
            System.out.println("IOException Hatası !\n" + e);
        } catch (ParseException e) {
            System.out.println("ParseException Hatası !\n" + e);
        }
    }
}

Bu aşamaya kadar json ile veri çekmek, json dosyasından veri okuma gibi işlemleri gerçekleştirdik fakat henüz bir kod çıktısı göremedik. Doğru yolda olduğumuzu teyit etmek ve yazdığımız kodların çıktısını görerek motive olmak için Main sınıfımıza gelerek gerekli tanımlamaları sağladıktan sonra programımı çalıştırıyorum.

Kod Çıktısı:

Json dosyasından veri okuma işlemi
Java json dosyasından veri okuma

Java Json ile Döviz Uygulaması Yapımı işlemlerimizin temel yapısı buraya kadardı. Bundan sonraki aşamalar biraz kullanıcının göz zevkine ve bu projenin sunumu için bazı hazırlıklar ve süslemeler gerçekleştirmem gerektiği için bundan sonraki aşamalar biraz daha hızlı bir şekilde geçeceğim alanlar olacak.

Uygulamanın Sunum Aşaması

Bu başlığı gördüğünde aklınıza bir form yapısı gelebilir ama şuan için konsol üzerinde çalışmanın beni daha çok hızlandıracağını düşündüğüm için konsolun sağlamış olduğu imkanları kullanarak elimden geldiğince göze hoş gözüken bir şablon oluşturmak istiyorum. Sadece bu süsleme olayları değil aynı zamanda uygulamayı kullanacak kişiye kolaylık sağlaması ve bir, iki tuş ile hemen öğrenmek istediği döviz birimine ulaşmasını ve programın kimliğini oluşturacak menü yapıları oluşturmam gerektiği için bazı işlemler gerçekleştirdim.

Bu gerçekleştirmiş olduğum aşamalardan ilki konsol üzerinde renkli yazılar yazmama imkan veren tanımlamayı ve konsol üzerinde henüz sorunu geçici olarak çözmüş olsamda bir sonraki sorgu için konsolun temizlenme işlemlerini gerçekleştirecek ConsoleManager sınıfının tanımlamasına göz atalım.

Konsol Yönetimini Kuralım

Programımızın sıradanlığını bozarak renkli, kalın ve dikkat çekici bir şekilde yazılar ile geri dönüşler verebilmek için static tanımlama ile bazı değişkenler oluşturdum. Bu oluşturmuş olduğum değişkenlere ve geçici olarak çözüm bulduğum konsol temizleme işlemine aşağıdaki kod yapısından ulaşabilirsiniz.

public class ConsoleManager {
    BaseMenuCreateManager baseMenuCreateManager = new BaseMenuCreateManager();
    // Konsol Renkli Yazı Yazmak İçin Gerekli Tanımlamalar:
    public static final String RESET = "\033[0m";  // Text Reset
    // [1;xxm" kısmındaki 1'i değiştirerek altı çizgili, normal gibi çeşitli değişiklikler yapabilirsiniz.
    public static final String BLACK = "\033[1;30m";   // Siyah
    public static final String RED = "\033[1;31m";     // Kırmızı
    public static final String GREEN = "\033[1;32m";   // Yeşil
    public static final String YELLOW = "\033[1;33m";  // Sarı
    public static final String BLUE = "\033[1;34m";    // Mavi
    public static final String PURPLE = "\033[1;35m";  // Mor
    public static final String CYAN = "\033[1;36m";    // Turkuaz
    public static final String WHITE = "\033[1;37m";   // Beyaz

    // Konsol Temizleyici Metot Tanımlamamız:
    static void clear() {
       /* try {
            new ProcessBuilder("cmd","/c","cls").inheritIO().start().waitFor();
        }
        catch (Exception e){
            System.out.println("Konsol Temizlenirken Hata İle Karşılaştım.\n"+e);
        }*/ // Linux Kullanımında Açabilirsiniz.

        for (int i = 0; i < 100; i++) {
            System.out.println(" ");
        }
        baseMenuCreateManager.welcome();
    }
}

Evet, java json ile döviz uygulaması yapımı için gerekli olan renklendirmeyi ve yazılarımızın dikkat çekiciliğini arttırmak için kullanacağımız kalınlaştırma için gerekli tanımlamalarımızı yaptığıma göre artık sıradaki aşamamız program başlatıldıktan sonra bizi karşılayacak menü yapısını oluşturmaya geldi.

Projemizin Menüsünü Oluşturalım

Tam olarak aslında menü oluşumu haricinde giriş ekranımızda bizi karşılayacak bilgilerinde yazılmasını istediğim giriş karşılamasını da sağlama amacı ile gerekli metotlarımın oluşturulmasına başladım. Bu metotlar tamamen sizlerin kişisel zevklerinize kalmış bir detay olduğu için anlatımım içerisine dahil etmedim ama yazmış olduğum kodlara ve bunun sonucundaki çıktısına aşağıdan göz atabilirsiniz.

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class BaseMenuCreateManager {
    static String menuAyrac = ConsoleManager.CYAN+new String(new char[25]).replace("\0","-")+ConsoleManager.RESET;
    SimpleDateFormat zamanSekil = new SimpleDateFormat("d/M/y H:m:s");
    GregorianCalendar tarihVerisi = new GregorianCalendar();
    Object guncelZaman = zamanSekil.format(tarihVerisi.getTime());
    Scanner scanner = new Scanner(System.in);
    // Hoşgeldiniz ve Ön Bilgi Ekranı.
    void welcome(){
        System.out.println(menuAyrac);
        System.out.println(ConsoleManager.YELLOW+"< Döviz Console Uygulaması >\n"+ConsoleManager.RESET+menuAyrac);
        System.out.println(ConsoleManager.RED+"-> Uygulama Yapımcısı: "+ConsoleManager.RESET+ConsoleManager.GREEN+"Emre Çelen"+ConsoleManager.RESET);
        System.out.println(ConsoleManager.RED+"-> Uygulama Saati: "+ConsoleManager.RESET+ConsoleManager.GREEN+ guncelZaman+ConsoleManager.RESET);
        System.out.println(menuAyrac);
    }
    // Menü Seçenekleri:
    void startMenu(){
        String select;
        String ayrac = ConsoleManager.BLACK+"-"+ConsoleManager.RESET;
        String numaralar[] = {"[1] ","[2] ","[3] ","[4] "};

        System.out.println(ConsoleManager.RED+numaralar[0]+ConsoleManager.RESET+ayrac+ConsoleManager.BLUE+" Döviz Birimlerini Göster\n"+ConsoleManager.RESET
                +ConsoleManager.RED+numaralar[1]+ConsoleManager.RESET+ayrac+ConsoleManager.BLUE+" Döviz Sorgulaması Gerçekleştir\n"+ConsoleManager.RESET
                +ConsoleManager.RED+numaralar[2]+ConsoleManager.RESET+ayrac+ConsoleManager.BLUE+" JSON Bilgilerini Güncelle\n"+ConsoleManager.RESET
                +ConsoleManager.RED+numaralar[3]+ConsoleManager.RESET+ayrac+ConsoleManager.BLUE+" Programı Kapat"+ConsoleManager.RESET);
        System.out.println(menuAyrac);
        System.out.print(ConsoleManager.RED+"-> Hangi İşlemi Gerçekleştirmek İstiyorsunuz: "+ConsoleManager.RESET);
        select = scanner.nextLine();
        System.out.println(menuAyrac);
        selectMenu(select);
    }
    // Seçilen Menüye Yönlendirme:
    void selectMenu(String select){
        CurrencyUnitsManager currencyUnitsManager = new CurrencyUnitsManager();
        if(select.equalsIgnoreCase("bir")||select.equals("1") || select.equalsIgnoreCase("Döviz Birimlerini Göster")){
            currencyUnitsManager.currencyRead();
            currencyUnitsManager.currencyInfoMenu();
            currencyUnitsManager.currencyInfoBox();
            restartMenu();
        }
        else if(select.equalsIgnoreCase("iki")||select.equals("2") || select.equalsIgnoreCase("Döviz Sorgulaması Gerçekleştir")){
            currencyUnitsManager.currencyInfoMenu();
            currencyUnitsManager.currencyInfoBox();
            restartMenu();
        }
        else if(select.equalsIgnoreCase("üç")||select.equals("3") || select.equalsIgnoreCase("JSON Bilgilerini Güncelle")){
            JSONWrite jsonWrite = new JSONWrite();
            System.out.println(ConsoleManager.GREEN+"-> JSON Bilgileri Manuel Bir Şekilde Güncellendi.\n"+ConsoleManager.RESET+menuAyrac);
            restartMenu();
        }
        else if(select.equalsIgnoreCase("dört")||select.equals("4") || select.equalsIgnoreCase("Programı Kapat")){
            System.out.println(ConsoleManager.YELLOW+"-> Program Sonlandırıldı.\n"+ConsoleManager.RESET+menuAyrac);
            System.exit(0);
        }
        else {
            System.out.println(ConsoleManager.YELLOW+"-> Tanımsız Bir Değer Girdiniz. Program Sonlandırıldı.\n"+ConsoleManager.RESET+menuAyrac);
        }
    }
    void restartMenu(){
        String karar;
        System.out.print(ConsoleManager.YELLOW+"-> Ana menüye tekrar dönmek için"+ConsoleManager.RESET+ConsoleManager.GREEN+" [Y]"+ConsoleManager.RESET
                +ConsoleManager.YELLOW+", programı kapatmak için"+ConsoleManager.RESET
                +ConsoleManager.RED+" [N]"+ConsoleManager.RESET+ ConsoleManager.YELLOW+" tuşuna basın."+ConsoleManager.RESET);
        System.out.print(ConsoleManager.RED+"\n-> Kararınız: "+ConsoleManager.RESET);
        karar = scanner.nextLine();
        System.out.println(menuAyrac);
        if(karar.equalsIgnoreCase("y")){
            ConsoleManager.clear();
            startMenu();
        }
        else if(karar.equalsIgnoreCase("n")){
            System.out.println(ConsoleManager.RED+"-> Program Sonlandırıldı."+ConsoleManager.RESET);
            System.out.println(menuAyrac);
            System.exit(0);
        }
        else{
            System.out.println(ConsoleManager.RED+"-> Tanımsız Bir Değer Girdiniz."+ConsoleManager.RESET);
            System.out.println(menuAyrac);
            System.exit(0);
        }
    }
}

Kod Çıktısı:

Java Json ile Döviz Uygulaması Yapımı
Döviz uygulaması için menü oluşturma

BaseMenuCreateManager sınıfımızın tanımlamasını yaptığımıza göre son olarak yapmış olduğumuz konsol yapısına işlevsellik katacak, gerekli sorgulama taleplerini aldıktan sonra json dosyasından veri okuma işlemi için ilgili aramayı yapacak döviz birimlerinin yönetimini gerçekleştireceğimiz CurrencyUnitsManager sınıfını oluşturmaya başlayabiliriz.

Döviz Birimlerini Yönetelim

Son olarak json ile veri çekmek için kullandığım kaynaktan hangi döviz birimlerinin verilerini kullanıcıya sunmama karar vermek kaldı. Bu aşama içerisinde en çok merak edildiğini düşündüğüm bazı para birimlerinin json yapısındaki veri isimlerini unutmamak ve kullanıcıya bu bilgileri sunmak için bir enum kavramı tanımladım. Daha önce java’da enum kavramı içeriğime göz atmadıysanız ilgili içeriğime giderek bu işlemi nasıl yaptığımı detaylı bir şekilde inceleyebilirsiniz.

Para birimlerine karar verdiğime göre artık bu para birimlerinin sorgulanması ve sorgulanan para biriminden alınan verileri kullanıcıya iletimini sağlama aracında köprü görevi görecek metot tanımlamalarını gerçekleştirdim. Bu metotların oluşturulması tamamen sizin kişisel zevkinize kalmış bir olay olduğu için yazılarını veya yapısını değiştirmeniz herhangi bir sorun ile karşılaşmanıza sebebiyet sağlamayacaktır.

Bu son aşamamızda yazmış olduğum kod parçası ve çıktısını aşağıda görebilirsiniz.

import java.util.Scanner;

// Çekeceğimiz Dövizlerin JSON isimlerini aklımızda tutmak için enum tanımlaması gerçekleştirdik.
enum currencyUnits{
    USD("Amerikan Doları"),
    EUR("Euro"),
    GBP("Sterlin"),
    CHF("İsviçre Frangı"),
    CAD("Kanada Doları"),
    RUB("Rus Rublesi"),
    KWD("Kuveyt Dinarı");
    private String moneyName;
    currencyUnits(String moneyName){
        this.moneyName = moneyName;
    }
    public String getMoneyName() {
        return moneyName;
    }
}
public class CurrencyUnitsManager {
    // Döviz Birimlerini Yazdıracağımız Metot:
    void currencyRead(){
        int count=1;
        String ayrac = ConsoleManager.BLACK+"-"+ConsoleManager.RESET;
        System.out.println(ConsoleManager.YELLOW+"< Döviz Birimleri >\n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
        for(currencyUnits c:currencyUnits.values()){
            System.out.println(ConsoleManager.RED+"["+count+"] "+ConsoleManager.RESET+ayrac+ConsoleManager.BLUE+" ["+c.name()+"] "+ConsoleManager.RESET+
                    ConsoleManager.YELLOW+c.getMoneyName()+ConsoleManager.RESET);
            count++;
        }
        System.out.println(BaseMenuCreateManager.menuAyrac);
    }
    // Kullanıcıdan Döviz Birim Girişini İsteyeceğimiz Metot:
    String currencyInfo;
    JSONReader jsonReader = new JSONReader();
    void currencyInfoMenu(){
        Scanner scanner = new Scanner(System.in);
        System.out.print(ConsoleManager.RED+"-> Sorgulamak İstediğiniz Para Birimi: "+ConsoleManager.RESET);
        currencyInfo = scanner.nextLine();
        System.out.println(BaseMenuCreateManager.menuAyrac);
    }
    void currencyInfoBox(){
        if(currencyInfo.equalsIgnoreCase("USD") ||currencyInfo.equals("1") || currencyInfo.equalsIgnoreCase("Amerikan Doları")){
            System.out.println(ConsoleManager.BLUE+"< Amerikan Doları Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("USD");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else if(currencyInfo.equalsIgnoreCase("Eur") ||currencyInfo.equals("2") || currencyInfo.equalsIgnoreCase("Euro")){
            System.out.println(ConsoleManager.BLUE+"< Euro Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("EUR");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else if(currencyInfo.equalsIgnoreCase("GBP") ||currencyInfo.equals("3") || currencyInfo.equalsIgnoreCase("Sterlin")){
            System.out.println(ConsoleManager.BLUE+"< Sterlin Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("GBP");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else if(currencyInfo.equalsIgnoreCase("CHF") ||currencyInfo.equals("4") || currencyInfo.equalsIgnoreCase("İsviçre Frangı")){
            System.out.println(ConsoleManager.BLUE+"< İsviçre Frank Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("CHF");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else if(currencyInfo.equalsIgnoreCase("CAD") ||currencyInfo.equals("5") || currencyInfo.equalsIgnoreCase("Kanada Doları")){
            System.out.println(ConsoleManager.BLUE+"< Kanada Doları Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("CAD");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else if(currencyInfo.equalsIgnoreCase("RUB") ||currencyInfo.equals("6") || currencyInfo.equalsIgnoreCase("Rus Rublesi")){
            System.out.println(ConsoleManager.BLUE+"< Rus Rublesi Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("RUB");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else if(currencyInfo.equalsIgnoreCase("KWD") ||currencyInfo.equals("7") || currencyInfo.equalsIgnoreCase("Kuveyt Dinarı")){
            System.out.println(ConsoleManager.BLUE+"< Kuveyt Dinarı Bilgileri > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
            jsonReader.showMe("KWD");
            System.out.println(BaseMenuCreateManager.menuAyrac);
        }
        else {
            System.out.println(ConsoleManager.RED+"< Hatalı Giriş Yaptınız > \n"+ConsoleManager.RESET+BaseMenuCreateManager.menuAyrac);
        }
    }
}

Kod Çıktısı:

JSON Dosyasından Veri Okuma
Java Json ile Döviz Uygulaması Yapımı

🎯 İlk yazım içerisinde ve bu siteyi oluştururken koymuş olduğum ilk aşama projeler oluşturma eylemine kısa bir süre içerisinde başlamanın vermiş olduğu mutluluk ile yazı içeriğini fazla uzatmış olabilirim. İlk adımımızı tamamladığımıza göre artık java üzerinde “Türkçe” bir şekilde proje anlatımları ve konu anlatımlarının düzenli bir şekilde devam edeceğini söyleyebilirim.

💹 Java Json ile Döviz Uygulaması yapımı konusunda her ne kadar yazmış olduğum kod bloklarını yukarıda sizlerle teker teker paylaşmış olsamda bu projenin kodlarını GitHub üzerinden sizlerle paylaştım. GitHub hesabıma giriş yaparak java json ile döviz uygulaması yapımı proje dosyaları ulaşabilirsiniz.

Java Json ile Döviz Uygulaması Yapımı hakkında aklınıza takılan bir soru varsa veya projenin geliştirilmesinde bir öneride bulunmak istiyorsanız aşağıda bulunan yorum yap kısmından benim ile iletişime geçebilirsiniz.

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap

Yorumlar (1)

  1. 3 yıl önce

    Bu döviz uygulaması projesini oldukça merak uyandırıcı buldum, ellerinize sağlık.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir