Logika Penarikan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 25 dari 61.
Tantangan
MudahRekening Bank-mu terus bertambah! Sekarang, mari tambahkan kemampuan untuk menarik dana. Tidak seperti penyetoran, penarikan memiliki batasan tambahan. Kamu tidak bisa menarik uang lebih banyak daripada yang kamu miliki. Fungsi withdraw-mu perlu memeriksa saldo sebelum mengizinkan transaksi.
Dengan melanjutkan proyek Rekening Bank yang sudah kamu buat, kamu akan memperluas module dengan fungsionalitas penarikan. Di sinilah enkapsulasi benar-benar bermanfaat. Fungsimu dapat mengakses saldo tersembunyi untuk memeriksa kecukupan dana, sesuatu yang tidak dapat dilakukan langsung oleh kode eksternal.
Kamu akan menggunakan tiga file:
account.h: Tambahkan prototipe fungsi baru:withdraw. Fungsi ini menerima pointer Account dan jumlahdouble, lalu mengembalikanint(1 jika berhasil, 0 jika penarikan gagal). Pertahankan semua deklarasi yang sudah ada untukcreate_account,destroy_account, dandeposit.account.c: Implementasikan fungsiwithdraw. Penarikan hanya boleh berhasil jika dua kondisi terpenuhi: jumlahnya harus positif (lebih besar dari nol), DAN rekening harus memiliki dana yang cukup (saldo >= jumlah). Jika kedua kondisi terpenuhi, kurangi saldo sebesar jumlah tersebut dan kembalikan 1. Jika tidak, kembalikan 0 tanpa mengubah saldo.main.c: Tunjukkan alur kerja penyetoran dan penarikan secara lengkap. Buat rekening, lakukan penyetoran untuk menambahkan saldo, lalu uji penarikan, baik yang berhasil maupun yang gagal.
Kamu akan menerima empat input: ID rekening (bilangan bulat), jumlah setoran (untuk menambahkan dana awal), jumlah penarikan yang berhasil (kurang dari atau sama dengan jumlah yang disetorkan), dan jumlah penarikan yang gagal (lebih besar daripada saldo yang tersisa).
Di file utama, buat rekening dan cetak konfirmasi. Setorkan dana awal dan cetak hasilnya. Lalu lakukan penarikan yang berhasil dan cetak apakah penarikan tersebut berhasil. Terakhir, coba lakukan penarikan yang seharusnya gagal karena dana tidak cukup, lalu cetak hasilnya. Hancurkan rekening dan konfirmasikan bahwa pembersihan telah selesai.
Cetak output dengan format ini:
Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyedDi sini, 1001 adalah ID rekening, 500.00 adalah jumlah setoran, 200.00 adalah jumlah penarikan yang berhasil, dan 400.00 adalah jumlah penarikan yang gagal (karena hanya tersisa 300.00 setelah penarikan pertama). Format semua jumlah dengan dua angka di belakang koma menggunakan %.2f.
Fungsi withdraw-mu menunjukkan manfaat enkapsulasi. Fungsi ini dapat memeriksa saldo tersembunyi secara internal untuk mengambil keputusan, sementara kode eksternal tidak dapat melewati validasi ini atau melihat saldo secara langsung.
Coba sendiri
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double valid_amount;
scanf("%lf", &valid_amount);
double invalid_amount;
scanf("%lf", &invalid_amount);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
int result_invalid = deposit(account, invalid_amount);
printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
int result_valid = deposit(account, valid_amount);
printf("Deposit %.2f: %d\n", valid_amount, result_valid);
destroy_account(account);
printf("Account destroyed\n");
return 0;
}Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online