Menambahkan setter

 avatar
AhmadAbdillah
dart
3 months ago
4.1 kB
3
Indexable
Tugas IDN
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.');
    }
  }

  // Setter untuk pin
  set pin(newPin) {
    if (newPin.length > 3) {
      _pin = newPin;
    } else {
      print('Pin harus lebih dari 3 huruf');
    }
  }
}

void main()  {
  // Membuat akun bank
  var account = BankAccount('1234', 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. Ubah Pin');
    print('5. Keluar');

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

    if (pilih == '1') {

      // menampilkan saldo
      print('Saldo Anda saat ini: ${account.saldo}');
    } else if (pilih == '2') {

      // Deposit
      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') {

      // Withdrawl
      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') {

      // Ubah PIN
      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)) {
          stdout.write('Masukkan PIN baru: ');
          String? jumlah = stdin.readLineSync();
          isAuthenticated = true;
          if (jumlah != null) {
            account.pin = jumlah;
          }
          print('Berhasil merubah pin.');
          break;
        } 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;
      }
    } else if (pilih == '5') {

      // keluar
      print('Terima kasih telah menggunakan layanan kami. Sampai jumpa!');
      break;
    } else {
      print('Pilihan tidak valid.');
    }
  }
}
Editor is loading...
Leave a Comment