Menu
Coddy logo textTech

Para Çekme Mantığı

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 25 / 61.

challenge icon

Görev

Kolay

Banka 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 bir double miktar alır, bir int döndürür (başarı için 1, para çekme başarısız olursa 0). create_account, destroy_account ve deposit için mevcut tüm bildirimlerinizi koruyun.
  • account.c: withdraw fonksiyonunu 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 destroyed

Burada 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