پروژۀ محاسبۀ درآمد ماهیانه با استفاده از متدهای کلاس 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)، تبدیل سرعت ماشین بر اساس واحد مایل به واحد کیلومتر و بسیاری برنامه‌های کاربردی دیگر نیز توسعه دهیم.

دانلود فایل‌های تمرین


بهزاد مرادی

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
۱۳۹۷/۰۴/۰۵
میتونید پروژه ی تمرینی دیگری هم بنویسید و اونهم پروژه ی تبدیل واحد هست : مولفه ها : 1- کیلومتر 2- متر 3-سانتی متر 4- میلی متر 5- اینچ 6-مایل . هر کیلومتر 1000 متر ، هر متر 100 سانتی متر ، هر سانتی متر 10 میلیمتر ، هر اینچ 2.54 سانتی متر و هر مایل 1.61 کیلومتر است ، با احتساب خواهید تونست به راحتی متراژ متلوزیون های خونه ، مسیرهای دریای و خیلی چیزهای دیگه رو هم توی برنامه تون بگنجونید . موفق باشید
mostafa
mostafa BlockChain Expert , SmartContract Developer
۱۳۹۶/۰۵/۱۲
واقعا عالی بود زبان نوشته ها کاملا برای من که هیچی نمیدونستم قابل فهم بود ازتون نهایت تشکر رو دارم.
کاربر میهمان
Aqilhexمن یک کاربر مهمان هستم
۱۳۹۶/۰۱/۱۴
import java.util.scanner;

public class project {

public static void main(string[] args) {

scanner myscanner = new scanner (system.in);

double zamin;
double zohal = 2.54;
double moshtari = 1.08;

system.out.print(\"mohasebeye vazne shoma roye sayarat\\n\\n\");
system.out.print(\"vazne khod ra vared konid : \");
zamin = myscanner.nextdouble();
double zaminmoshtari = zamin * moshtari;
double zaminzohal = zamin * zohal;

system.out.println(\"vazne shoma roye sayareye moshtari: \" +zaminmoshtari);
system.out.println(\"vazne shoma roye sayareye zohal: \" +zaminzohal);


}

}
من تونستم با کلاس سکنر پروژه محسابه وزن روی سیارات رو بنویسم،شاید بدرد دوستان بخوره بتونن بیشتر مطلب رو همونطور که خودم کامل مطلب رو درک کنم بقیه دوستان هم کامل یاد بگیرن،خیلی ممنون واقعا زحمت کشیدین سکان آکادمی
کاربر میهمان
Fffمن یک کاربر مهمان هستم
۱۳۹۵/۱۱/۰۶
عکس مربوط به کد bmi
http://bayanbox.ir/download/7877607045084237783/bmi.png

عکس مربوط به کد تبدیل سرعت اتومبیل
http://bayanbox.ir/download/6377343960912071428/speed.png
yasaman_sh
yasaman_sh
۱۳۹۵/۰۷/۰۹
ایا میشود result را به صورت جداگانه حساب نکرد و در داخل print فرمول ان را نوشت؟
M-Yall
M-Yall
۱۳۹۵/۰۴/۱۶
از آموزش شیوا و صحیحتون ممنونم . فقط یه سوال داشتم ، بعد از اجرای برنامه هایی که ورودی میخواد Cursor روی قسمت کدنویسی میمونه تا زمانیکه پایین صفحه کلیک کنم.این طبیعیه؟
ASPIRIN
ASPIRIN
۱۳۹۵/۰۳/۰۵
سلام . ببخشید این هم عکس برنامه:
http://cdn.persiangig.com/preview/9fre5GR5KW/App.png
کاربر میهمان
Aminمن یک کاربر مهمان هستم
۱۳۹۵/۰۳/۰۴
با سلام خدمت استاد گرامی
من دارم با آموزش های خوبتون شروع به یادگیری زبان جاوا میکنم
تو این آموزش آخرش چندتا برنامه گفتید که من یکیشو نوشتم تبدیل کیلومتر به مایل و برعکس
این سورس کدمه :

import java.util.Scanner;

public class project {

public static void main(String[] args) {
// Title
System.out.println("App Tabdil Mile Be Km Va BarAx" );
//Variables
int Variables;
double km, mile, result1, result2;
//Coastion
System.out.print("Enter Number: " 1) KM Mile " 2) Mile KM " ?? " );
Scanner myScanner = new Scanner(System.in);
Variables = myScanner.nextInt();
if ( Variables == 1 ) {
System.out.print( "Enter Yoru km : " );
Scanner yourInputKm = new Scanner(System.in);
km = yourInputKm.nextInt();
result1 = km * 0.6213;
System.out.println( "Your mile is = " + result1 );
} else if ( Variables == 2 ) {
System.out.print( "Enter Yoru Mile : " );
Scanner yourInputMile = new Scanner(System.in);
mile = yourInputMile.nextInt();
result2 = mile * 1.6093;
System.out.println( "Your km is = " + result2 );
} else {
System.out.print( "Enter Number 1 or 2 . try again" );

}


}
}

به نظر شما چطوره؟ برای کسی که تازه داره اولین زبان برنامه نویسی رو یاد میگیره؟
طرز نام گذاریی وریبل ها و بقیه ی چیزها از نظر یه برنامه نویس حرفه ای چطوریه؟ و آیا مث برنامه ای ک نوشتم هست یا نه؟
javad
javad
۱۳۹۵/۰۱/۲۹
درود بیکران بر شما عزیزان
mohammad saberi
mohammad saberi
۱۳۹۴/۱۱/۲۹
بسیار عالی و روان ،برای جاوا کلی اینترنتو زیر رو کردم ولی هیچ جایی بهتر از اینجا پیدا نکردم..موفق و پیروز باشید ...3>