سلام دوست عزیز😃👋
به مسابقه «مسابقه رایانکد» خوش آمدی!
هرگونه ارتباط با سایر شرکتکنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT
و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.
لینکهای مفید برای شرکت در مسابقه:
سوالات و مشکلات خودتان را میتوانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.
سه سوال اول مسابقه به ارزیابی توانایی شما در حل مسائل الگوریتمی (با زبان جاوا) اختصاص دارد، در حالی که دو سوال آخر به پیادهسازی با زبان جاوا مربوط میشوند.
موفق باشید و بهتون خوش بگذره 😉✌
بعد از تلاشهای بسیار و حل چالشهای قبلی، شما به شرکت رایان همافزار پیوستهاید!
از شما خواسته شده است تا سیستم پرداختهای مختلفی را که مشتریان استفاده میکنند، طراحی کنید. این سیستم باید بهطور کامل پرداختهای مختلف از جمله پرداخت با کارت اعتباری، کیف پول دیجیتال و نقدی را مدیریت کند. جزئیات این تسک بهشرح زیر است.
هدف شما این است که سیستم پرداختهای مختلف را در یک محیط شبیهسازی کنید که از حسابهای بانکی مختلف برای انجام تراکنشها استفاده کند. پرداختها باید به حساب مقصد منتقل شوند و موجودی حسابها بهروزرسانی گردد. در صورت بروز هرگونه کمبود موجودی، باید پیغام خطای مناسب نمایش داده شود.
پروژه شما باید شامل چند کلاس اصلی باشد که سیستم پرداختها را مدیریت کنند. ساختار فایلهای پروژه بهصورت زیر است:
پروژهی اولیهی این سؤال را میتوانید از این لینک دانلود کنید.
در این ساختار، شما با چندین کلاس مختلف برای مدیریت پرداختها سر و کار دارید. Account
نمایانگر حسابهای بانکی است که هر حساب میتواند یک موجودی داشته باشد. Payment
کلاس پایهای است که پرداختها را مدیریت میکند. شما باید از این کلاس برای ساخت انواع مختلف پرداختها استفاده کنید.
Account
🔗کلاس Account
نمایانگر یک حساب بانکی است. هر حساب دارای نام و موجودی است. همچنین، میتوان موجودی حساب را بررسی کرده و واریز یا برداشت از آن انجام داد. در این کلاس باید امکان برداشت از حسابها و مدیریت موجودی را داشته باشد. همچنین، در صورت تلاش برای برداشت بیشتر از موجودی، خطای کمبود موجودی به کاربر نمایش داده میشود.
Payment
🔗کلاس Payment
یک کلاس انتزاعی است که روشهای پرداخت مختلف از جمله پرداخت با کارت اعتباری، کیف پول دیجیتال و پرداخت نقدی از آن ارث میبرند. این کلاس متدی به نام processPayment()
دارد که فرایند هر پرداخت را انجام میدهد.
شما باید سه روش پرداخت مختلف را پیادهسازی کنید:
CreditCardPayment
): این کلاس باید اطلاعات مربوط به کارت اعتباری را نگهداری کرده و عملیات برداشت از حساب و واریز به حساب مقصد را انجام دهد.DigitalWalletPayment
): این کلاس باید اطلاعات مربوط به کیف پول دیجیتال و ایمیل صاحب کیف پول را نگهداری کرده و مانند پرداخت کارت اعتباری، عملیات مالی را انجام دهد.CashPayment
): این کلاس باید میزان مبلغ نقدی را مشخص کرده و مشابه دو نوع دیگر، پرداخت را انجام دهد.جزئیات پیادهسازی این سه کلاس در ادامه آورده شده است.
CreditCardPayment
پرداخت با کارت اعتباری باید شامل ویژگیها و متدهای زیر باشد:
sourceAccount
: حساب مبدا که پرداخت از آن انجام میشود.destinationAccount
: حساب مقصد که پرداخت به آن انجام میشود.amount
: مبلغ پرداخت.سازنده این کلاس بهصورت زیر است:
این سازنده باید ویژگیهای کلاس را مقداردهی کند.
متد processPayment()
باید بررسی کند که حساب مبدا موجودی کافی برای پرداخت دارد. اگر موجودی کافی بود، مبلغ مشخصشده را از حساب مبدا کم کند و مبلغ را به حساب مقصد واریز کند.
در صورت موفقیتآمیز بودن پرداخت، پیام
برگردانده شود که در آن {amount}
، یک عدد است که مقدار تراکنش را نشان میدهد.
همچنین اگر موجودی کافی نبود، پیغام خطای زیر را برگرداند:
DigitalWalletPayment
پرداخت با کیف پول دیجیتال باید شامل ویژگیها و متدهای زیر باشد:
sourceAccount
: حساب مبدا که پرداخت از آن انجام میشود.destinationAccount
: حساب مقصد که پرداخت به آن انجام میشود.walletName
: نام کیف پول دیجیتال.email
: ایمیل صاحب کیف پول دیجیتال.amount
: مبلغ پرداخت.سازنده این کلاس بهصورت زیر است:
این سازنده باید ویژگیهای کلاس را مقداردهی کند.
متد processPayment()
باید بررسی کند که حساب مبدا موجودی کافی برای پرداخت دارد. اگر موجودی کافی بود مبلغ مشخصشده را از حساب مبدا کم کند و مبلغ را به حساب مقصد واریز کند. سپس یک پیام موفقیت به صورت زیر برگرداند:
و اگر موجودی کافی نبود، پیغام خطای زیر را برگرداند:
CashPayment
پرداخت نقدی باید شامل ویژگیها و متدهای زیر باشد:
sourceAccount
: حساب مبدا که پرداخت از آن انجام میشود.destinationAccount
: حساب مقصد که پرداخت به آن انجام میشود.amount
: مبلغ پرداخت.سازنده این کلاس بهصورت زیر است:
این سازنده باید ویژگیهای کلاس را مقداردهی کند.
متد processPayment()
باید بررسی کند که حساب مبدا موجودی کافی برای پرداخت دارد.
اگر موجودی کافی بود، مبلغ مشخصشده را از حساب مبدا کم کند، مبلغ را به حساب مقصد واریز کند و یک پیام موفقیت به صورت زیر برگرداند:
اگر موجودی کافی نبود، پیغام خطای زیر را برگرداند:
پس از پیادهسازی کامل، مطمئن شوید که برنامه شما تست میشود و تمامی سناریوها (مانند موفقیت در پرداخت یا خطای کمبود موجودی) به درستی مدیریت شدهاند.
get
و set
برای دسترسی به ویژگیهای آنها ایجاد کنید.Payment
ارثبری کنند و متد processPayment()
را پیادهسازی نمایند.Account
برای برداشت و واریز استفاده کنید.در زیر نمونهای از نحوه استفاده از کلاسها برای انجام پرداختها آورده شده است:
در این مثال، حسابها مقدار اولیهای دارند و پرداختها بهصورت مختلف پردازش میشوند. خروجی باید بهصورت زیر باشد:
پس از پیادهسازی سیستم، تنها فایلهای کلاسهای پیادهسازیشده را در قالب یک فایل فشرده ارسال کنید. از درج کردن package
در فایلها پرهیز کنید. انتظار میرود باقی فایلها را تغییر ندهید و میتوانید فرض کنید که همین فایلها به همین شکل در زمان اجرای پروژه نیز در کنار برنامهی شما موجودند.