تمرین‌های آموزشی

لیست حقوق (تا پایان جلسه یازدهم)

سطح سوال: ساده

آنچه از این جلسه باید بدانید: آشنایی با مفهوم چندریختی و استفاده از کلاس‌ها و متدهای انتزاعی

بسته‌ی ir.javacup.salary را دانلود کنید. در این بسته دو کلاس Employee و SalaryListCreator و یک کلاس انتزاعیEncoder وجود دارد. برنامه‌ی شما قرار است لیست حقوق کارمندهای یک شرکت را برای دو سیستم مدیریت منابع انسانی (HRM) و مدیریت مالی (FM) آماده کند. برنامه‌ی شما باید بتواند محتوای (رشته) لیست حقوق را برای این سیستم‌ها تولید کند.

برای این کار دو کلاس به صورت زیر ایجاد کنید:

  • برای سیستم مدیریت منابع انسانی: کلاس HrmSalaryListCreator که زیرکلاس SalaryListCreator باید تعریف شود.
  • برای سیستم مدیریت مالی: کلاس FmSalaryListCreator که زیر کلاس SalaryListCreator باید تعریف شود.

هر سطر از این لیست شامل اطلاعات یک کارمند است که هر سیستم قالب مخصوصی را برای نمایش آن دارد:

  • سیستم مدیریت منابع انسانی (از چپ به راست):
  1. کد کارمند: شامل 8 کاراکتر است و اگر طول کد کارمند کمتر از 8 بود، از کاراکتر 0 در سمت چپ به مقدار لازم استفاده می‌شود.
  2. فاصله: از رشته‌ی برگردانده‌شده توسط متد getItemSeparator از کلاس SalaryListCreator استفاده می‌شود.
  3. حقوق: شامل 10 کاراکتر است و اگر تعداد ارقام حقوق کمتر از 10 بود، از کاراکتر 0 در سمت چپ به مقدار لازم استفاده می‌شود.
  • سیستم مدیریت مالی (از چپ به راست):
  1. حقوق: شامل 10 کاراکتر است و اگر تعداد ارقام حقوق کمتر از 10 بود، از کاراکتر ‘0′ در سمت چپ به مقدار لازم استفاده می‌شود.
  2. فاصله: از رشته‌ی برگردانده‌شده توسط متد getItemSeparator از کلاس SalaryListCreator استفاده می‌شود.
  3. کد کارمند: شامل 10 کاراکتر است و اگر طول کد کارمند کمتر از 10 بود، از کاراکتر ‘0′ در سمت چپ به مقدار لازم استفاده می‌شود.

برای قراردادن کارکتر 0′ در سمت چپ یک رشته، یک متد با نام (addZeroPrefix(String str, int length در کلاس SalaryListCreator قرار دارد که باید آن را پیاده‌سازی و از آن استفاده کنید. این متد باید رشته‌ی ‘str’ داده‌شده را به اندازه‌ی طول length داده شده با کارکتر 0′ (در سمت چپ) گسترش دهد.

protected static String addZeroPrefix(String str, int length) {
   // TODO implement 
}

 مثال:

به ازای کد زیر:

System.out.println(addZeroPrefix("1234", 8));
System.out.println(addZeroPrefix("0234", 8));
System.out.println(addZeroPrefix("12345678", 8));

باید خروجی زیر تولید شود:

00001234
00000234 
12345678

راهنمایی و نکات:

  •  برای فاصله‌ی بین هر سطر (در هر دو لیست) از رشته‌ی برگردانده‌شده توسط متد getRecordSeparator از کلاس SalaryListCreator استفاده می‌شود.
  • پس از آخرین سطر نباید از هیچ کاراکتری استفاده شود.
  • در کلاس‌های HrmSalaryListCreator و SalaryListCreator، تنها متد doCreate را پیاده‌سازی کنید و از پیاده‌سازی (override کردن) سایر متدها خودداری کنید.

مثال 1:

HrmSalaryListCreator creator = new HrmSalaryListCreator(encoder);
Employee[] employees = new Employee[2]; 
employees[0] = new Employee("71235", 1_500_000); 
employees[1] = new Employee("03451", 3_200_000);
System.out.println(creator.doCreate(employees));

خروجی 1:

00071235 0001500000 
00003451 0003200000

مثال 2:

FmSalaryListCreator creator = new FmSalaryListCreator(encoder); 
Employee[] employees = new Employee[2]; 
employees[0] = new Employee("31235", 2_000_000); 
employees[1] = new Employee("00531", 1_200_000); 
System.out.println(creator.doCreate(employees));;

خروجی 2:

0002000000 0000031235 
0001200000 0000000531

آنچه باید آپلود کنید:

یک فایل زیپ شامل بسته‌ی ir.javacup.salary است. به صورتی که وقتی فایل زیپ را باز می‌کنیم، دقیقا شاخه‌ی ir را ببینیم که درون آن شاخه‌ی javacup و درون آن نیز شاخه‌ی salary قرار دارد. در داخل شاخه‌ی salary باید سه فایل با نام‌های SalaryListCreator.java و FmSalaryListCreator.java و HrmSalaryListCreator.java وجود داشته باشد.

برای داوری تمرین، می‌توانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.

 

با ما همراه باشید:

آدرس کانال تلگرام: IranianJavaDevelopers@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

نوشته های مشابه

‫4 دیدگاه ها

  1. سلام
    من پاسخ این سوال را چندین مرتبه ارسال کردم ولی جواب تست فقط خطای زیر را نشان میدهد
    در ضمن متد های doCreate با مقادیر نمونه بالا دقیقا خروجی درست و مورد نظر را برمیگردانند.
    لطفا در مورد پاس شدن جواب اطلاعات بیشتری بدهید.
    متشکر.

    Test finished successfully

    testHrmSalaryListCreator
    FAILED

    testFmSalaryListCreator
    FAILED

    testAddZeroPrefix
    PASSED

    1. سلام
      لطفا اینگونه مشکلات را در کوئرا و در بخش «سوال بپرسید» مطرح کنید تا همکاران ما بتوانند پاسخی که به سوال داده‎اید را بررسی کرده و همانجا به شما پاسخ دهند.

      با تشکر

    1. سلام
      ما بررسی کردیم و ظاهرا مشکلی وجود نداشت.
      لطفا یکبار دیگر تلاش کنید.
      با تشکر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا