{}
run-icon
Main.cs
using System; using System.Collections.Generic; using System.IO; namespace ATMSystem { // الفئة الأساسية للحساب (Base Account Class) class Account { // رقم الحساب public int AccountNumber { get; set; } // رصيد الحساب public double Balance { get; set; } // مُنشئ الحساب (Constructor) public Account(int accountNumber, double initialBalance) { AccountNumber = accountNumber; Balance = initialBalance; } // عملية الإيداع (Deposit) - قابلة للتجاوز public virtual void Deposit(double amount) { Balance += amount; // تحديث الرصيد بعد الإيداع Console.WriteLine($"تم الإيداع بنجاح! الرصيد الجديد: {Balance}"); } // عملية السحب (Withdraw) - قابلة للتجاوز public virtual void Withdraw(double amount) { // التحقق من وجود رصيد كافٍ if (amount > Balance) { Console.WriteLine("الرصيد غير كافٍ."); } else { Balance -= amount; // تحديث الرصيد بعد السحب Console.WriteLine($"تم السحب بنجاح! الرصيد الجديد: {Balance}"); } } // عرض الرصيد الحالي (Display Balance) public void DisplayBalance() { Console.WriteLine($"رقم الحساب: {AccountNumber}, الرصيد الحالي: {Balance}"); } } // فئة حساب التوفير (Saving Account Class) - ترث من الفئة الأساسية class SavingAccount : Account { // مُنشئ حساب التوفير public SavingAccount(int accountNumber, double initialBalance) : base(accountNumber, initialBalance) { } // تجاوز طريقة الإيداع مع تطبيق رسوم (Deposit) public override void Deposit(double amount) { double fee = amount * 0.0005; // رسوم الإيداع (0.05%) base.Deposit(amount - fee); // خصم الرسوم من المبلغ المودع Console.WriteLine($"تم تطبيق رسوم الإيداع: {fee}"); } } // فئة الحساب الجاري (Checking Account Class) - ترث من الفئة الأساسية class CheckingAccount : Account { // مُنشئ الحساب الجاري public CheckingAccount(int accountNumber, double initialBalance) : base(accountNumber, initialBalance) { } // تجاوز طريقة السحب مع تطبيق رسوم المعاملة (Withdraw) public override void Withdraw(double amount) { const double fee = 1.0; // رسوم السحب الثابتة ($1) // التحقق من كفاية الرصيد بعد إضافة الرسوم if (amount + fee > Balance) { Console.WriteLine("الرصيد غير كافٍ."); } else { base.Withdraw(amount + fee); // خصم المبلغ بالإضافة إلى الرسوم Console.WriteLine($"تم تطبيق رسوم السحب: {fee}"); } } } // الفئة الرئيسية لنظام الصراف الآلي (ATM System Class) class ATM { // قائمة لتخزين الحسابات static List<Account> accounts = new List<Account>(); // مسار ملف تخزين الحسابات const string filePath = "accounts.txt"; // الوظيفة الرئيسية (Main) static void Main(string[] args) { LoadAccounts(); // تحميل الحسابات من الملف إذا كانت متوفرة bool exit = false; // متغير لإنهاء البرنامج while (!exit) { // عرض قائمة الخيارات للمستخدم Console.WriteLine("\n=== نظام الصراف الآلي ==="); Console.WriteLine("1. إنشاء حساب جديد"); Console.WriteLine("2. إيداع الأموال"); Console.WriteLine("3. سحب الأموال"); Console.WriteLine("4. عرض الرصيد"); Console.WriteLine("5. إنهاء البرنامج"); Console.Write("اختر خياراً: "); int choice = int.Parse(Console.ReadLine()); // تنفيذ الخيار المختار switch (choice) { case 1: CreateAccount(); // إنشاء حساب جديد break; case 2: PerformTransaction("deposit"); // تنفيذ عملية إيداع break; case 3: PerformTransaction("withdraw"); // تنفيذ عملية سحب break; case 4: DisplayAccountBalance(); // عرض الرصيد break; case 5: exit = true; // إنهاء البرنامج SaveAccounts(); // حفظ الحسابات إلى الملف Console.WriteLine("شكراً لاستخدام نظام الصراف الآلي. وداعاً!"); break; default: Console.WriteLine("خيار غير صالح. حاول مرة أخرى."); break; } } } // إنشاء حساب جديد (Create a new account) static void CreateAccount() { Console.Write("أدخل رقم الحساب: "); int accountNumber = int.Parse(Console.ReadLine()); Console.Write("أدخل الرصيد الابتدائي: "); double initialBalance = double.Parse(Console.ReadLine()); Console.WriteLine("اختر نوع الحساب:"); Console.WriteLine("1. حساب توفير"); Console.WriteLine("2. حساب جاري"); int accountType = int.Parse(Console.ReadLine()); Account account; if (accountType == 1) { account = new SavingAccount(accountNumber, initialBalance); // إنشاء حساب توفير } else if (accountType == 2) { account = new CheckingAccount(accountNumber, initialBalance); // إنشاء حساب جاري } else { Console.WriteLine("نوع الحساب غير صالح."); return; } accounts.Add(account); // إضافة الحساب إلى القائمة Console.WriteLine("تم إنشاء الحساب بنجاح!"); } // تنفيذ عملية إيداع أو سحب (Perform deposit or withdrawal) static void PerformTransaction(string transactionType) { Console.Write("أدخل رقم الحساب: "); int accountNumber = int.Parse(Console.ReadLine()); Account account = FindAccount(accountNumber); // البحث عن الحساب if (account == null) { Console.WriteLine("الحساب غير موجود."); return; } Console.Write($"أدخل المبلغ المراد {transactionType}: "); double amount = double.Parse(Console.ReadLine()); if (transactionType == "deposit") { account.Deposit(amount); // تنفيذ الإيداع } else if (transactionType == "withdraw") { account.Withdraw(amount); // تنفيذ السحب } } // عرض رصيد الحساب (Display account balance) static void DisplayAccountBalance() { Console.Write("أدخل رقم الحساب: "); int accountNumber = int.Parse(Console.ReadLine()); Account account = FindAccount(accountNumber); // البحث عن الحساب if (account != null) { account.DisplayBalance(); // عرض الرصيد } else { Console.WriteLine("الحساب غير موجود."); } } // البحث عن الحساب باستخدام رقم الحساب (Find an account by account number) static Account FindAccount(int accountNumber) { foreach (Account account in accounts) { if (account.AccountNumber == accountNumber) { return account; // إعادة الحساب إذا وُجد } } return null; // إعادة null إذا لم يتم العثور على الحساب } // حفظ بيانات الحسابات إلى ملف (Save account data to a file) static void SaveAccounts() { using (StreamWriter writer = new StreamWriter(filePath)) { foreach (Account account in accounts) { string accountType = account is SavingAccount ? "Saving" : "Checking"; writer.WriteLine($"{accountType},{account.AccountNumber},{account.Balance}"); // كتابة بيانات الحساب } } Console.WriteLine("تم حفظ الحسابات بنجاح."); } // تحميل بيانات الحسابات من ملف (Load account data from a file) static void LoadAccounts() { if (!File.Exists(filePath)) return; // التحقق من وجود الملف using (StreamReader reader = new StreamReader(filePath)) { string line; while ((line = reader.ReadLine()) != null) { string[] data = line.Split(','); // تقسيم البيانات string accountType = data[0]; int accountNumber = int.Parse(data[1]); double balance = double.Parse(data[2]); Account account; if (accountType == "Saving") { account = new SavingAccount(accountNumber, balance); // إنشاء حساب توفير } else // حساب جاري { account = new CheckingAccount(accountNumber, balance); } accounts.Add(account); // إضافة الحساب إلى القائمة } } Console.WriteLine("تم تحميل الحسابات بنجاح."); } } }
Output