Merhaba arkadaşlar, javada databasei dosya işlemleri tabanlı bir banka otomasyonu örneği yapacağız.Otomasyonun 2 kullanıcı girişi olacak:biri personel diğeri müşteri kullanımı için.Personel hesabından müşteriye özel şifre ataması yapılacak ve müşterinin ad-soyad bilgileri ile mevcut bakiyesi girilecek.Müşteri hesabına şifresi ve ad-soyad bilgileriyle giriş yapacak , bakiyesini sorgulayıp ödeme ya da para yatırma işlemi yapabilecek,işlemlerini sonlandırdıktan sonra kalan bakiyesini görebilecek.Tüm müşterilerin kayıtlarının bulunduğu databaseimiz dosya işlemleri kullanılarak bir dosyada saklanacak. Otomasyonu hazırlarken Abstract Classlar ve İnterfaceler hakkında bilgi sahibi olacağız ve küçük örneklerle nasıl kullanıldıklarını göreceğiz.
İlk olarak main metodumuzu içeren Bankaİşlemleri Classımızı oluşturuyoruz.
*** Personel girişi yapılacaksa , FileYazma Classından miras almanın avantajlarını kullanarak FY metodunu çağırıyoruz.FY metodunda müşteri bilgileri otomasyon.txt dosyasına yazılıyor.
***Müşteri girişi yapılacaksa FileOkuma Classından miras alınarak FO metodu çağırılıyor.Kullanıcının girdiği şifre ve kullanıcı ad-soyadı kontrolü yapıldıktan sonra doğru bilgiler girilmişse otomasyon.txt dosyasından veriler okunuyor ,okunan ad-soyad ve bakiye bilgisinin tutulması için og.txt adında File f2=new File("C://users//CANER//Documents//NetBeansProjects//BankaOtomasyonu//og.txt"); olarak geçici bir dosya oluşturuyoruz .Bu dosyanın sadece son verileri tutacağı için yapılan her işlemden sonra tutulan kaydın silinmesini istiyoruz.Bu nedenle FileOutputStream fo2=new FileOutputStream(f2,false) ; kod satırında false döndürüyoruz.True döndürseydik dosyaya yazılan tüm kayıtları tutacaktı.Daha sonra main class FO2 metodunu çağırıyor.FO2 metodunda geçici og.txt dosyamızdaki string tipinde tutulan bakiye çekiliyor ve mainin içinde casting yapılarak double tipine çevriliyor.Sonra müşteri konsoldan para yatırma ya da çekme işlemlerinden birini seçiyor buna bağlı olarak yatırma ya da ödeme metodu çağırılıyor.Müşteri tüm işlemlerini tamamladıktan sonra bakiye tutarının ana dosyamız olan otomasyon.txt de güncellenmesi gerekiyor.Bunun yanında ana dosyamızdaki diğer tüm kullanıcıların bilgilerinin de korunmasını istiyoruz bu amaçla tempd.txt olarak yeni bir dosya yaratıyoruz.Müşterimizin güncel bilgileriyle birlikte tüm kayıtları otomasyon.txt den okutup satır satır tempd.txt ye yazdırıyoruz.Databaseimizin adının otomasyon.txt olduğu için önce yedeklenen otomasyon.txt dosyamızı siliyoruz sonra tempd.txt dosyamızın adını if(f2.renameTo(f1)==true) satırında otomasyon.txt dosyası olarak değiştiriyoruz.Veee uygulamamız burada sonlanıyor.
Uygulamamızda abstract class ve interfaceden de faydalandık onları ayrıca açıklamak istiyorum.
*** İnterfaceler tamamen soyut metotlardan oluşmuş yapılardır.Kendisini implement eden metodun içinde @override edilmeleri gerekir.Mesela ödeme classı interface1 i implement edip ödemeyaz () metodunu @override layıp System.out.println("Odeme Isleminiz Tamamlandı."); yazısının yazmasını sağlamıştır.Benzer örneği interface2 yi implement eden yatırma classında da görebilirsiniz.
*** Abstract Classlar ise soyut metodları da barındıran ancak en az bir metodunun gövdesi olması gereken , extend edilen yapılardır.Bu classlar genellikle ortak özellikleri olan nesneleri tek çatı altında toplamak için kullanılır.Uygulamamızdaki AC1 classına bakacak olursak yatırmabakiye() adlı metoduna ve bir de soyut metod olarak abstract public double yatir(double a ); ı barındırır.Yatırma classında extend edilmiş ve soyut metodu @override edilmiştir.AC2 abstract classını da siz inceleyebilirsiniz.
Kaynak kod aşağıdadır arkadaşlar umarım yararlı olmuştur...
BOL KODLU GÜNLER ! :)
import java.util.*;
public class BankaIslemleri extends FileOkuma {
double bakiye;
public static void main (String args[]) throws IndexOutOfBoundsException {
String sifre;
double bakiye;
final String musteri; //final kullanarak musteri ad-soyadini sabitledik
System.out.println("Hesap acmak İcin 1 e ,giris yapmak icin 2'ye basın.");
Scanner tara=new Scanner(System.in);
int i =tara.nextInt();
switch(i){
case 1 : FileYazma a=new FileYazma();
a.FY();
break;
case 2 : FileOkuma b=new FileOkuma();
System.out.println("Ad-Soyad Giriniz: ");
Scanner tara1=new Scanner(System.in);
musteri=tara1.nextLine();
System.out.println("Sifrenizi Giriniz : ");
Scanner tara2=new Scanner(System.in);
sifre=tara2.nextLine();
b.FO(musteri,sifre);
b.FO2();
bakiye=Double.parseDouble(b.FO2());
for(int j=1;j!=-1;j++){
int k;
System.out.println("Odeme yapmak icin 1'e ,para yatirmak icin 2'ye , cikis yapmak icin 3'e basın.");
Scanner tara3=new Scanner(System.in);
k=tara3.nextInt();
switch(k){
case 1: Odeme c=new Odeme();
bakiye=c.ode(bakiye);
FileYazma e=new FileYazma();
e.FY2(musteri, sifre, bakiye);
System.out.println("Yeni bir islem icin 1'e basın basın.");
Scanner tara4=new Scanner(System.in);
j=tara4.nextInt();
break;
case 2: Yatirma d=new Yatirma();
bakiye=d.yatir(bakiye);
FileYazma f=new FileYazma();
f.FY2(musteri, sifre, bakiye);
System.out.println("Yeni bir islem icin 1'e basın.");
Scanner tara5=new Scanner(System.in);
j=tara5.nextInt();
break;
case 3 :System.out.println("Cikis İsleminiz Gerceklestirildi...");
System.exit(0);
break;
default:System.out.println("Gecersiz İslem.");
}
}
break;
default:System.out.println("Gecersiz İslem.");
}
}
}
import java.io.IOException;
import java.io.*;
public class FileOkuma extends Odeme {
public void FO (String b,String a){
String sifre;
String musteri;
String bakiye=null;
String hesapbilgisi="Okumadaki Hesap Bilgisi";
try{
File f1=new File("C://users//hellobinaryworld//Documents//NetBeansProjects//BankaOtomasyonu//otomasyon.txt");
FileReader fileReader = new FileReader(f1);
BufferedReader br = new BufferedReader(fileReader);
String line=br.readLine();
int i=0;
while (line!= null) {
i++;
if(i%3==1){
sifre=line.substring(9);
line=br.readLine();i++;
musteri=line.substring(20);
if(a.equals(sifre)&&b.equals(musteri)){
File f2=new File("C://users//hellobinaryworld//Documents//NetBeansProjects//BankaOtomasyonu//og.txt");
FileOutputStream fo2=new FileOutputStream(f2,false) ;
PrintStream yaz=new PrintStream(fo2);
System.out.println("Giris Isleminiz yapiliyor...");
System.out.println(super.hesapbilgisi); //super yapisi
//Odeme Classi extends edilerek Interface1'den miras alindi
System.out.println("Hesap Sahibi:"+musteri);
yaz.println(musteri);
line=br.readLine();i++;
bakiye=line.substring(7,13);
System.out.println("Bakiye Miktariniz:"+bakiye+" TL");
yaz.println(bakiye);
break;
}
}
line=br.readLine();
if(line==null&&bakiye==null){
System.out.println("Yanlis sifre girdiniz.");
System.exit(0);
}
}
fileReader.close();
br.close();
}
catch(FileNotFoundException f)
{System.out.println("Dosya yok");}
catch(IOException ioex)
{System.out.println("Baska bir hata oldu"); }
}
public String FO2 (){
String bakiye;
try{
File f2=new File("C://users//hellobinaryworld//Documents//NetBeansProjects//BankaOtomasyonu//og.txt");
FileReader fileReader2 = new FileReader(f2);
BufferedReader br2 = new BufferedReader(fileReader2);
String line2=br2.readLine();
int i=0;
while(i<1){
line2=br2.readLine();i++;}
bakiye=line2;
return bakiye;
}
catch(FileNotFoundException f)
{System.out.println("Dosya yok...");}
catch(IOException ioex)
{System.out.println("Baska bir hata oldu..."); }
return"" ;
}
FileOkuma() //constructor yapisi
{
System.out.println("Hesap Girisi");
}
}
import java.util.*;
import java.io.*;
public class FileYazma extends AC2 {
public void FY (){
int sifre;
String musteri;
String bakiye;
try{
File f1=new File("C://users//hellobinaryworld//Documents//NetBeansProjects//BankaOtomasyonu//otomasyon.txt");
FileOutputStream fo=new FileOutputStream(f1,true) ;
PrintStream yaz=new PrintStream(fo);
FileReader fr = new FileReader(f1);
BufferedReader br = new BufferedReader(fr);
System.out.println("Sifre Giriniz");
Scanner tara3=new Scanner(System.in);
sifre=tara3.nextInt();
String l=br.readLine();
while(l!=null){ //sifre kontrolu
if(l.equals("Sifreniz:"+sifre)){
System.out.println("Bu sifre kullanılıyor,lutfen baska sifre girin...");
Scanner tara4=new Scanner(System.in);
sifre=tara4.nextInt();
}
l=br.readLine();
}
Scanner tara=new Scanner(System.in);
System.out.println("Müsteri Adini ve Soyadini Giriniz");
musteri=tara.nextLine();
System.out.println("Müsteri Bakiyesini Giriniz");
Scanner tara2=new Scanner(System.in);
bakiye=tara2.nextLine();
yaz.println("Sifreniz:"+sifre);
yaz.println("Müsteri Adi Soyadı :"+musteri);
yaz.println("Bakiye:"+bakiye+" TL");
fo.close();
yaz.flush();
}
catch (IOException e)
{e.printStackTrace();}
}
public void FY2(String b,String c,double a){
try{
double bakiye=a;
String musteri=b;
String sifre=c;
File f1=new File("C://users//hellobinaryworld//Documents//NetBeansProjects//BankaOtomasyonu//otomasyon.txt");
File f2=new File("C://users//hellobinaryworld//Documents//NetBeansProjects//BankaOtomasyonu//tempd.txt");
FileOutputStream fo = new FileOutputStream(f2,true) ;
PrintStream yaz = new PrintStream(fo);
FileReader fileReader = new FileReader(f1);
BufferedReader br = new BufferedReader(fileReader);
String line= br.readLine();
while(line != null){
if(line.equals("Sifreniz:"+c)){
line=br.readLine();
if(line.equals("Müsteri Adi Soyadı :"+b)){
for(int i=1;i<=2;i++){
line=br.readLine();
}
yaz.println("Sifreniz:"+c);
yaz.println("Müsteri Adi Soyadı :"+b);
yaz.println("Bakiye:"+a+" TL");
if(line==null)
break;
}
}
yaz.println(line);
line=br.readLine();
}
yaz.flush();
yaz.close();
fo.close();
br.close();
fileReader.close();
if(f1.delete()==true){ //ana dosya siliniyor
hesapislemi();
}
if(f2.renameTo(f1)==true){ //gecici dosyanin adi degisiyor
System.out.println("");
}
}
catch (IOException e)
{e.printStackTrace();}
}
@Override
public void hata(){
System.out.println("Hata Oldu.");
}
}
import java.util.*;
public class Odeme extends Yatirma implements Interface1{
double ode (double a){
System.out.println("Odeme tutarinizi girin: ");
Scanner tara=new Scanner(System.in);
double harca=tara.nextInt();
double bakiye=a;
bakiye=bakiye-harca;
if(bakiye<0)
{
System.out.println("Yetersiz Bakiye.");
System.exit(0);
}
System.out.println("Odeme Gerceklestiriliyor...");
System.out.println("Yeni bakiyeniz:"+bakiye);
return bakiye;
}
@Override
public void odemeyaz(){
System.out.println("Odeme Isleminiz Tamamlandı.");
}
}
import java.util.*;
public class Yatirma extends AC1 implements Interface2 {
@Override
public double yatir(double a){
double bakiye=a;
System.out.println("Yatirilacak tutari girin: ");
Scanner y=new Scanner(System.in);
int ekle=y.nextInt();
bakiye=bakiye+ekle;
System.out.println("Para Yatirma Isleminiz Gerceklestiriliyor...");
yatirmabakiye(bakiye);
return bakiye;
}
@Override
public void yatirmayaz(){
System.out.println("Para Yatirma Isleminiz Tamamlandı.");
}
}
public interface Interface1 {
String hesapbilgisi ="Hesap Bilgisi";
public void odemeyaz();
}
public interface Interface2 {
public void yatirmayaz();
}
abstract public class AC1 {
abstract public double yatir(double a );
public void yatirmabakiye(double y){
System.out.println("Yeni Bakiyeniz:"+y);
}
}
abstract public class AC2 {
abstract public void hata();
public void hesapislemi(){
System.out.println("Hesap Isleminiz Gerceklestirildi");
}
}
Merhaba kod çalışmıyor acaba nedenini sorabilir miyim?
YanıtlaSil