سرفصل‌های آموزشی
آموزش جاوا
پروژۀ محاسبۀ درآمد ماهیانه با استفاده از متدهای کلاس Scanner در زبان جاوا

پروژۀ محاسبۀ درآمد ماهیانه با استفاده از متدهای کلاس Scanner در زبان جاوا

در آموزش‌های قبل با برخی از متدهای کلاس Scanner آشنا شده و نحوۀ پیاده‌سازی هر یک را در قالب یکسری مثال مورد بررسی قرار دادیم و در این آموزش قصد داریم تا ببینیم هر یک از متدهای مذکور در یک پروژۀ واقعی چگونه مورد استفاده قرار گرفته و چه کاربردی می‌توانند داشته باشند.

در همین راستا، سناریویی مد نظر قرار می‌دهیم که طی آن برنامه‌ای طراحی خواهیم کرد تا قابلیت محاسبۀ دخل و خرج کاربر را داشته باشد به طوری که مقادیر مربوط به مخارجی نظیر اقساط، بدهی‌ها، هزینۀ آب، برق، تلفن و غیره را دریافت کرده و پس از کسر مجموع مخارج از درآمد ماهیانه، باقی‌مانده را در خروجی چاپ کند که برای این منظور پروژه‌ای جدید تحت عنوان MyFinancialTurnover ایجاد کرده و کلاسی تحت عنوان Project در آن می‌سازیم. اکنون کد خود را جهت دریافت ورودی از کاربر و همچنین چاپ عنوان برنامه در قالب استرینگی به صورت زیر تکمیل می‌نماییم:

import java.util.Scanner;
public class Project {
    public static void main(String[] args) {
        System.out.println("My Financial Turnover");
        Scanner myScanner = new Scanner(System.in);
    }
}

به محض اجرای این برنامه، پس از رسیدن به سطر چهارم استرینگ «My Financial Turnover» در کنسول چاپ می‌گردد که در اینجا کیورد System به منظور دسترسی به بخش‌هایی از سیستم مورد استفاده قرار می‌گیرد که ماشین مجازی جاوا امکان دسترسی به آن‌ها را ندارد و کیورد out نیز به بخش خروجی در محیط برنامه‌نویسی مورد نظر (در اینجا بخش کنسولِ نرم‌افزار اکلیپس) دسترسی داشته و استرینگ مد نظر را در آن چاپ می‌کند. در ادامه، آبجکتی تحت عنوان myScanner از روی کلاس Scanner تعریف کرده و با استفاده از دستور System.in امکان دریافت ورودی از سمت کاربر را برای برنامۀ خود فراهم می‌کنیم که در این مورد نیز کیورد in نیز به منظور دسترسی به بخش مربوط به دریافت ورودی از محیط برنامه‌نویسی مد نظر (کیبورد) به کار گرفته می‌شود.

حال به منظور ذخیره و نگهداری دیتای مربوط به میزان درآمد و هزینه‌های جاری کاربر، نیاز به تعریف متغیری داریم که دیتایی از جنس عدد اعشاری یا صحیح را در آن ذخیره نماییم. (در آموزش آشنایی با روش‌های نام‌گذاری متغیرها در زبان برنامه‌نویسی جاوا با دیتا تایپ‌های مختلف به منظور تعریف متغیرها آشنا شدیم.) در واقع، دیتا تایپ int به منظور تعریف مقداری معادل 2/340/000 تومان قابل‌استفاده می‌باشد که در این آموزش به منظور سادگی در انجام محاسبات، نوع دادۀ عدد صحیح را جهت نگهداری درآمد، هزینه‌ها و سایر مخارج مورد استفاده قرار داده‌ایم و به منظور جلوگیری از طولانی شدن سورس‌کد، کلیۀ متغیرها را با یکدیگر ادغام نموده و آن‌ها را به صورت زیر تعریف می‌کنیم:

int monthlyIncome, loanPayment, currentExpenses;

در واقع، متغیر monthlyIncome به منظور نگهداری مقدار درآمد ماهیانه، متغیر loanPayment به منظور ذخیرۀ مقدار اقسام پرداختیِ وام و متغیر currentExpenses نیز جهت نگهداری مقدار هزینه‌های جاری تعریف شده‌اند.

در ادامه، دستوری دیگر به منظور چاپ استرینگ «:Please enter your monthly income» به کد فوق اضافه می‌کنیم تا کاربر عدد مربوط به مقدار درآمد ماهیانۀ خود را وارد نماید. بنابراین کد فوق را به صورت زیر تکمیل می‌نماییم:

import java.util.Scanner;
public class Project {
    public static void main(String[] args) {
        // The title of the program
        System.out.println("My Financial Turnover");
        // Object from Scanner Class
        Scanner myScanner = new Scanner(System.in);
        // Variables
        int monthlyIncome, loanPayment, currentExpenses;
        // Code to ask for entering your income
        System.out.println("Please enter your monthly income:");
        myScanner.close();
    }
}

همان‌طور که اشاره کردیم، استرینگ «:Please enter your monthly income» چاپ شده و از کاربر می‌خواهیم تا مقدار مربوط به درآمد ماهیانۀ خود را وارد کند. حال در ادامه می‌توانیم با فراخوانی متد ()nextInt مقدار دریافتی را خوانده و آن را به یک متغیر منتسب کنیم که برای این منظور دستوری را به صورت زیر به برنامۀ خود اضافه می‌کنیم:

import java.util.Scanner;
public class Project {
    public static void main(String[] args) {
        // The title of the program
        System.out.println("My Financial Turnover");
        // Object from Scanner Class
        Scanner myScanner = new Scanner(System.in);
        // Variables
        int monthlyIncome, loanPayment, currentExpenses;
        // Code to ask for entering your income
        System.out.println("Please enter your monthly income:");
        monthlyIncome = myScanner.nextInt();
        myScanner.close();
    }
}

در کد فوق، بر اساس آنچه که در آموزش نحوۀ تعریف نوع ورودی کلاس Scanner در زبان برنامه‌نویسی جاوا آموختیم، متد ()nextInt متعلق به کلاس Scanner را روی آبجکت ساخته‌شده از این کلاس فراخوانی کرده‌ایم تا استرینگ مربوط به درآمد ماهیانۀ کاربر را از ورودی خوانده و دیتای مذکور را به متغیر monthlyIncome منتسب کند. در حقیقت، در سطر نهم با استفاده از دیتا تایپ int متغیر monthlyIncome را تعریف کرده اما مقداری به آن اختصاص نداده‌ایم که در ادامه با اجرای دستور سطر دوازدهم مقدار دیتای ورودی از سمت کاربر توسط متد ()nextInt خوانده شده و در این متغیر نگهداری می‌شود.

همچنین توجه داشته باشیم که متد ()nextInt را جهت محدود کردن کاربر به وارد کردن دیتایی از نوع عدد صحیح مورد استفاده قرار داده‌ایم چرا که پیش از این نوع دادۀ int را برای تعریف متغیر monthlyIncome به کار گرفته‌ایم که در صورت استفاده از دیتا تایپ double برای تعریف متغیر، متد ()nextDouble به منظور خواندن دیتای ورودی مناسب می‌بود. به همین ترتیب، به ازای هر یک از متغیرهای loadPayment و currentExpenses نیز متد ()nextInt جهت دریافت به ترتیب مقادیر مربوط به میزان اقساط پرداختی و هزینه‌های جاری به صورت زیر روی آبجکت ساخته‌شده فراخوانی می‌شوند:

import java.util.Scanner;
public class Project {
    public static void main(String[] args) {
        // The title of the program
        System.out.println("My Financial Turnover");
        // Object from Scanner Class
        Scanner myScanner = new Scanner(System.in);
        // Variables
        int monthlyIncome, loanPayment, currentExpenses;
        // Code to ask for entering your income
        System.out.println("Please enter your monthly income:");
        monthlyIncome = myScanner.nextInt();
        // Code to ask for entering your loan payment
        System.out.println("Please enter your loan payment:");
        loanPayment = myScanner.nextInt();
        // Code to ask for entering your current expense
        System.out.println("Please enter your current expenses:");
        currentExpenses = myScanner.nextInt();
        myScanner.close();
    }
}

در این مرحله، کد فوق را اجرا می‌کنیم به طوری که در خروجی خواهیم داشت:

My Financial Turnover
Please enter your monthly income:

همان‌طور که می‌بینیم، برنامۀ ما پس از چاپ استرینگ‌های فوق منتظر دریافت ورودی می‌ماند و بدین ترتیب کاربر در ابتدا عدد مربوط به میزان درآمد ماهیانهٔ خود را وارد نموده و به محض دریافت مقداری از جنس عدد صحیح، مرحلۀ بعدی اجرا شده و استرینگ مربوط به وارد کردن میزان اقساط پرداختیِ وام چاپ می‌گردد؛ سپس برنامه مجدداً منتظر دریافت ورودی از کاربر می‌ماند و در نهایت هم استرینگ «:Please enter your current expenses» چاپ شده و از کاربر درخواست می‌شود تا مقدار هزینه‌های جاری خود را وارد کند. بنابراین با توجه به آنچه که در بالا بدان اشاره کردیم، در خروجی خواهیم داشت:

My Financial Turnover
Please enter your monthly income:
1000000 
Please enter your loan payment:
120000 
Please enter your current expenses:
400000

نتیجۀ حاصل از اجرای برنامۀ فوق را مشاهده می‌کنیم که در آن به ازای درآمد ماهیانه، اقساط پرداختی وام و هزینه‌های جاری به ترتیب مقادیری فرضی معادل 1000000، 120000 و 400000 تومان را وارد کرده‌ایم. بنابراین تا این مرحله توانستیم با موفقیت اطلاعات مد نظر خود را وارد برنامه نماییم و در ادامه می‌باید مقادیر مربوط به میزان اقساط ماهیانه و هزینه‌های جاری را از درآمد ماهیانه کم کنیم تا در نهایت مقدار باقی‌مانده را به عنوان مقدار درآمد خالص ماهیانه در کنسول در معرض دید کاربر قرار دهیم که برای این منظور برنامۀ خود را به صورت زیر تکمیل می‌نماییم:

import java.util.Scanner;
public class Project {
    public static void main(String[] args) {
        // The title of the program
        System.out.println("My Financial Turnover");
        // Object from Scanner Class
        Scanner myScanner = new Scanner(System.in);
        // Variables
        int monthlyIncome, loanPayment, currentExpenses;
        // Code to ask for entering your income
        System.out.println("Please enter your monthly income:");
        monthlyIncome = myScanner.nextInt();
        // Code to ask for entering your loan payment
        System.out.println("Please enter your loan payment:");
        loanPayment = myScanner.nextInt();
        // Code to ask for entering your current expense
        System.out.println("Please enter your current expenses:");
        currentExpenses = myScanner.nextInt();
        // Calculating the remainder
        int result = monthlyIncome - (loanPayment + currentExpenses);
        System.out.println("The left over money equals to: " + result);
        myScanner.close();
    }
}

در حقیقت، با استفاده از دیتا تایپ int متغیری تحت عنوان result تعریف کرده و در ادامه مقدار حاصل از جمع مقادیر منتسب به هر یک از متغیرهای loanPayment و currentExpenses را از مقدار اختصاص‌یافته به متغیر monthlyIncome کم کرده و در نهایت نتیجۀ حاصل را به متغیر result منتسب نموده‌ایم (با توجه به آنچه در آموزش آشنایی با نحوۀ به‌کارگیری اپراتورها در زبان برنامه‌نویسی جاوا بدان اشاره کردیم، محاسبات ریاضیاتی داخل پرانتز در ابتدا اجرا شده و مقادیر منتسب به دو متغیر مربوطه با یکدیگر جمع می‌شوند و در ادامه مقدار حاصل از درآمد ماهیانه کسر می‌شود.) در نهایت، با اجرای سطر آخر استرینگ «:The left over money equals to» با مقدار منتسب به متغیر result به اصطلاح Concate (الحاق) شده و مقدار نهایی در قالب یک استرینگ در کنسول چاپ می‌شود به طوری که در خروجی خواهیم داشت:

My Financial Turnover
Please enter your monthly income:
1000000
Please enter your loan payment:
120000
Please enter your current expenses:
400000
The left over money equals to: 480000

به طور خلاصه می‌توان گفت که به عنوان درآمد ماهیانه، اقساط پرداختی وام و هزینه‌های جاری به ترتیب مقادیری فرضی معادل با 1/000/000، 120/000 و 400/000 تومان وارده کرده‌ايم كه جمع مخارج معادل عدد 520/000 تومان از درآمد ماهيانه كسر شده و مقدار خالص 480/000 تومان به عنوان الباقی درآمد ماهیانه در کنسول نمایش داده می‌شود.

در این آموزش توانستیم یک پروژۀ حسابداری کوچک طراحی کنیم که با کمی ذوق و خلاقیت بیشتر می‌توان برنامه‌های متعددی همچون برنامۀ محاسبۀ تناسب قد و وزن (BMI)، تبدیل سرعت ماشین بر اساس واحد مایل به واحد کیلومتر و بسیاری برنامه‌های کاربردی دیگر نیز توسعه دهیم.

online-support-icon