Para Çekme Mantığı
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 25 / 61.
Görev
KolayBanka Hesabınız büyüyor! Şimdi para çekme özelliğini ekleyelim. Para yatırmanın aksine, para çekme işlemlerinin ek bir kısıtlaması vardır; sahip olduğunuzdan daha fazla parayı çekemezsiniz. withdraw fonksiyonunuzun, işleme izin vermeden önce bakiyeyi kontrol etmesi gerekir.
Mevcut Banka Hesabı projeniz üzerine inşa ederek, modülü para çekme işleviyle genişleteceksiniz. Kapsüllemenin (encapsulation) gerçekten parladığı yer burasıdır; fonksiyonunuz, yeterli bakiyeyi doğrulamak için gizli bakiyeye erişebilir, bu harici kodun asla doğrudan yapamayacağı bir şeydir.
Üç dosya ile çalışacaksınız:
account.h: Yeni bir fonksiyon prototipi ekleyin:withdraw. Bu fonksiyon bir Account pointer'ı ve birdoublemiktar alır, birintdöndürür (başarı için 1, para çekme başarısız olursa 0).create_account,destroy_accountvedepositiçin mevcut tüm bildirimlerinizi koruyun.account.c:withdrawfonksiyonunu uygulayın. Bir para çekme işlemi yalnızca iki koşul karşılandığında başarılı olmalıdır: miktar pozitif (sıfırdan büyük) olmalı VE hesapta yeterli bakiye (balance >= amount) bulunmalıdır. Her iki koşul da sağlanırsa, miktarı bakiyeden çıkarın ve 1 döndürün. Aksi takdirde, bakiyeyi değiştirmeden 0 döndürün.main.c: Tam para yatırma ve çekme iş akışınızı gösterin. Bir hesap oluşturun, bir bakiye oluşturmak için para yatırın, ardından hem başarılı hem de başarısız para çekme işlemlerini test edin.
Dört girdi alacaksınız: hesap ID'si (bir tam sayı), bir para yatırma miktarı (başlangıç fonlarını oluşturmak için), başarılı bir para çekme miktarı (yatırılan miktardan az veya ona eşit) ve başarısız bir para çekme miktarı (kalan bakiyeden fazla).
Ana dosyanızda bir hesap oluşturun ve bir onay mesajı yazdırın. Başlangıç fonlarını yatırın ve sonucu yazdırın. Ardından başarılı para çekme işlemini gerçekleştirin ve başarılı olup olmadığını yazdırın. Son olarak, başarısız olması gereken para çekme işlemini (yetersiz bakiye) deneyin ve bu sonucu yazdırın. Hesabı yok edin ve temizliği onaylayın.
Çıktıyı şu formatta yazdırın:
Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyedBurada 1001 hesap ID'si, 500.00 yatırılan miktar, 200.00 başarılı para çekme ve 400.00 başarısız para çekme işlemidir (çünkü ilk çekimden sonra sadece 300.00 kalmıştır). Tüm miktarları %.2f kullanarak iki ondalık basamakla formatlayın.
withdraw fonksiyonunuz kapsüllemenin gücünü gösterir; kararlar vermek için gizli bakiyeyi dahili olarak kontrol edebilirken, harici kodun bu doğrulamayı atlamasının veya bakiyeye doğrudan bakmasının hiçbir yolu yoktur.
Kendin dene
#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;
}Object Oriented Programming bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil Hiyerarşisi