Untitled

 avatar
user_8125782
dart
2 months ago
3.5 kB
4
Indexable
import 'dart:io';

class BankAccount {
  String _pin; // Properti private
  double _saldo; // Properti private

  // Constructor
  BankAccount(this._pin, this._saldo);

  // Getter untuk membaca saldo
  double get saldo => _saldo;

  // Metode untuk autentikasi PIN
  bool authenticate(String inputPin) {
    return inputPin == _pin;
  }

  // Metode untuk menyetor uang
  void deposit(double jumlah) {
    if (jumlah > 0) {
      _saldo += jumlah;
      print('Deposit berhasil: $jumlah');
    } else {
      print('Jumlah harus positif');
    }
  }

  // Metode untuk menarik uang
  void withdraw(double jumlah) {
    if (jumlah > 0 && jumlah <= _saldo) {
      _saldo -= jumlah;
      print('Penarikan berhasil: $jumlah');
    } else {
      print('Penarikan gagal. Saldo tidak mencukupi.');
    }
  }

  // Metode untuk mengganti PIN
  void changePin(String oldPin, String newPin) {
    if (oldPin == _pin) {
      _pin = newPin;
      print('PIN berhasil diubah!');
    } else {
      print('PIN lama tidak valid.');
    }
  }
}

void main() {
  // Membuat akun bank
  var account = BankAccount('123456', 500.0);

  print('Selamat datang di sistem Bank!');

  int percobaan = 0;
  bool isAuthenticated = false;

  // Loop autentikasi dengan batasan 3 kali percobaan
  while (percobaan < 3 && !isAuthenticated) {
    stdout.write('Masukkan PIN Anda: ');
    String? inputPin = stdin.readLineSync();

    if (inputPin != null && account.authenticate(inputPin)) {
      isAuthenticated = true;
      print('Autentikasi berhasil! Selamat datang.');
    } else {
      percobaan++;
      print('PIN salah! Percobaan tersisa: ${3 - percobaan}');
    }
  }

  // Jika gagal autentikasi setelah 3 percobaan, keluar
  if (!isAuthenticated) {
    print('Anda telah gagal memasukkan PIN 3 kali. Akses ditolak.');
    return;
  }

  // Jika autentikasi berhasil, tampilkan menu
  while (true) {
    print('\nPilih aksi:');
    print('1. Cek Saldo');
    print('2. Deposit');
    print('3. Withdraw');
    print('4. Ganti PIN');
    print('5. Keluar');

    stdout.write('Masukkan pilihan Anda: ');
    String? pilih = stdin.readLineSync();

    if (pilih == '1') {
      print('Saldo Anda saat ini: ${account.saldo}');
    } else if (pilih == '2') {
      stdout.write('Masukkan jumlah deposit: ');
      String? jumlahInput = stdin.readLineSync();
      double? jumlah = double.tryParse(jumlahInput ?? '');
      if (jumlah != null) {
        account.deposit(jumlah);
      } else {
        print('Input tidak valid.');
      }
    } else if (pilih == '3') {
      stdout.write('Masukkan jumlah penarikan: ');
      String? jumlahInput = stdin.readLineSync();
      double? jumlah = double.tryParse(jumlahInput ?? '');
      if (jumlah != null) {
        account.withdraw(jumlah);
      } else {
        print('Input tidak valid.');
      }
    } else if (pilih == '4') {
      stdout.write('Masukkan PIN lama: ');
      String? oldPin = stdin.readLineSync();
      stdout.write('Masukkan PIN baru: ');
      String? newPin = stdin.readLineSync();

      if (oldPin != null && newPin != null && newPin.length >= 4) {
        account.changePin(oldPin, newPin);
      } else {
        print('PIN baru harus terdiri dari minimal 4 angka.');
      }
    } else if (pilih == '5') {
      print('Terima kasih telah menggunakan layanan kami. Sampai jumpa!');
      break;
    } else {
      print('Pilihan tidak valid.');
    }
  }
}
Editor is loading...
Leave a Comment