Para Çekme Mantığı
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama 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şlemleri ek bir kısıtlamaya sahiptir. Sahip olduğunuzdan daha fazla para çekemezsiniz. withdraw işlevinizin, işleme izin vermeden önce bakiyeyi kontrol etmesi gerekir.
Mevcut Banka Hesabı projenizi temel alarak modüle para çekme işlevselliği ekleyeceksiniz. Kapsülleme gücünü asıl burada gösterir. İşleviniz, yeterli bakiye olup olmadığını doğrulamak için gizli bakiyeye erişebilir; harici kod ise bunu doğrudan asla yapamaz.
Üç dosyayla çalışacaksınız:
account.h: Yeni bir işlev prototipi ekleyin:withdraw. Bu işlev bir Account işaretçisi ve birdoubletutarında miktar alır ve birintdöndürür (başarılı işlem için 1, para çekme işlemi başarısız olursa 0).create_account,destroy_accountvedepositiçin mevcut tüm bildirimlerinizi koruyun.account.c:withdrawişlevini uygulayın. Para çekme işlemi yalnızca iki koşul karşılanırsa başarılı olmalıdır: miktar pozitif olmalıdır (sıfırdan büyük) VE hesapta yeterli bakiye bulunmalıdır (balance >= amount). 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 para çekme iş akışınızı gösterin. Bir hesap oluşturun, bakiye oluşturmak için para yatırın, ardından para çekme işlemlerini test edin: hem başarılı hem de başarısız olanları.
Dört girdi alacaksınız: hesap kimliği (bir tamsayı), para yatırma miktarı (başlangıç bakiyesini oluşturmak için), başarılı para çekme miktarı (yatırılan miktara eşit veya daha az) ve başarısız para çekme miktarı (kalan bakiyeden fazla).
Ana dosyanızda bir hesap oluşturun ve onay mesajı yazdırın. Başlangıç bakiyesini 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 sonucu yazdırın. Hesabı yok edin ve temizleme işlemini onaylayın.
Çıktıyı şu biçimde yazdırın:
Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyedBurada 1001 hesap kimliği, 500.00 para yatırma miktarı, 200.00 başarılı para çekme miktarı ve 400.00 başarısız para çekme miktarıdır (ilk para çekme işleminden sonra yalnızca 300.00 kaldığı için). Tüm miktarları %.2f kullanarak iki ondalık basamakla biçimlendirin.
withdraw işleviniz kapsüllemenin gücünü gösterir. Harici kodun bu doğrulamayı aşmasının veya bakiyeye doğrudan erişip bakiyeyi görmesinin hiçbir yolu yokken, işlev karar vermek için gizli bakiyeyi dahili olarak kontrol edebilir.
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;
}Nesne Yönelimli Programlama 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şisiKendi başına pratik yap: Online C derleyicisi