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


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

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

در ابتدا یک شیئ از روی کلاس Scanner به نام myScanner می سازیم سپس از آنجا که نیاز داریم تا عنوان نرم افزاری که طراحی می کنیم روی صفحه به نمایش در آید در دستور ;()System.out.println جمله My Financial Turnover به معنی گردش مالی من را نوشته تا در بخش کنسول به نمایش درآید. حال نیاز داریم تا متغیری از جنس عددی برای میزان درآمد و هزینه های جاری خود در نظر بگیریم. برای این منظور یکی از دو گزینه int و یا double را که قبلا در آموزش انواع متغیرها توضیح داده شد را می توانیم استفاده کنیم. چنانچه بخواهیم این امکان را به خود بدهیم که اعداد اعشاری برای میزان حقوق خود وارد کنیم می بایست از متغیر double استفاده کنیم (مثلا قبض آب معادل با 23000.120 تومان) ولی اگر بخواهیم ورودی های ما به صورت عدد صحیح باشند بایستی از متغیر int استفاده کنیم (مثلاً 2340000 تومان) که در این برنامه ما از متغیرهایی از جنس int استفاده خواهیم کرد.

حال نیاز داریم تا متغیرهایی برای درآمد ماهیانه، اقساط و هزینه های جاری ایجاد کنیم. به منظور جلوگیری از طولانی شدن سورس کد خود، کلیه متغیرها را با یکدیگر ادغام خواهیم کرد و به صورت زیر می نویسیم:

int monthlyIncome, loanPayment, currentExpenses;

حال یک دستور دیگر مبنی بر نوشتن جمله :Please enter your monthly income به معنی لطفا درآمد ماهیانه خود را وارد نمایید: به کد خود به همراه کامنت های مورد نیاز می نویسیم و کد ما به صورت زیر در خواهد آمد:

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

جمله :Please enter your monthly income  از ما می خواهد تا عددی را وارد برنامه کنیم، از این رو می بایست مقدار متغیر monthlyIncome که در خط بالا ایجاد کردیم را با استفاده از کلاس Scanner وارد برنامه خود کنیم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

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

در حقیقت ما یک متغیر از جنس int یا عدد صحیح تحت عنوان monthlyIncome ایجاد کرده ایم اما هیچ گونه مقداری برای آن در نظر نگرفته ایم. حال با نوشتن کد ;()monthlyIncome = myScanner.nextInt به برنامه می گوییم که با استفاده از شیئ ساخته شده از روی کلاس Scanner که قبلاً به اسم myScanner ایجاد کردیم، مقداری را از طریق صفحه کلید برای متغیر monthlyIncome در حافظه ذخیره سازد. از سوی دیگر متد ()nextInt نشانگر نوع ورودی است که ما اجازه داریم به برنامه بدهیم و از آنجا که نوع متغیر ما از جنس int است، نوع ورودی هم می بایست از نوع عدد صحیح باشد (به طور مثال اگر نوع متغیر ما از جنس double بود می بایست از متد ()nextDouble استفاده می کردیم.) به همین صورت، برای متغیرهای loadPayment و currentExpenses به معنی به ترتیب پرداخت وام و هزینه های جاری، از کلاس Scanner استفاده می کنیم تا اطلاعات وارد برنامه شوند:

import java.util.Scanner;
class Project {
    public static void main(String[] args) {
	Scanner myScanner = new Scanner(System.in);
	// The title of the program
	System.out.println("My Financial Turnover");
	// 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 expenses
	System.out.println("Please enter your durrent expenses:");
	currentExpenses = myScanner.nextInt();
    }
}

چنانچه برنامه را اجرا کنیم تصویر زیر را مشاهده خواهیم کرد:

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


تا اینجای کار ما توانسته ایم با موفقیت اطلاعات ورودی را وارد برنامه خود کنیم اما این در حالی است که ما نیاز داریم تا میزان اقساط ماهیانه و هزینه های جاری را از درآمد ماهیانه کم کنیم و مانده موجودی را نمایش دهیم. برای این منظور می بایست کد خود را به شکل زیر تکمیل کنیم:

import java.util.Scanner;
class Project {
    public static void main(String[] args) {
	Scanner myScanner = new Scanner(System.in);
	// The title of the program
	System.out.println("My Financial Turnover");
	// 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 expenses
	System.out.println("Please enter your durrent expenses:");
	currentExpenses = myScanner.nextInt();
	// Calculating the remainder
	int result = monthlyIncome - (loanPayment + currentExpenses);
	System.out.println("The left over money equals to: " + result);
    }
}


در حقیقت یک متغیر از جنس int تحت عنوان result به معنی نتیجه ایجاد می کنیم. مقدار این متغیر را درآمد ماهیانه منهای حاصل جمع میزان قسط وام و هزینه های جاری قرار می دهیم. از آنجا که می خواهیم دو عمل اصلی جمع و تفرین با یکدیگر تداخل نداشته باشند حاصل جمع loanPayment و currentExpenses را داخل پرانتز قرار می دهیم که در این صورت برنامه اول مقدار داخل پرانتز را محاسبه کرده و سپس مقدار آن را از monthlyIncome کم می کند. سپس با قرار دادن ;(System.out.println("The left over money equals to: " + result جمله :The left over money equals to به معنی میزان پول باقیمانده معادل است با: را در بخش کنسول به نمایش در می آوریم. یکی از ویژگی های اپراتورها یا همان اعمال اصلی ریاضیاتی ادغام کردن چند چیز علاوه بر محاسبات ریاضیاتی است، از همین رو با قرار دادن علامت + پس از جمله ":The left over money equals to" و نوشتن نام متغیر result می توانیم نتیجه نهایی را به صورت یک string یا رشته به شکل زیر نمایش دهیم:

به طور خلاصه میزان درآمدی که وارد کرده ایم سه میلیون و یکصد هزار تومان است که جمع مخارج (قسط وام و هزینه های جاری) معادل با یک میلیون و دویست هزار تومان از آن کم شده و در نهایت نتیجه حاصل کسر مخارج از درآمد ماهیانه به میزان یک میلیون و نهصد هزار تومان نمایش داده شده است.

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

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
میتونید پروژه ی تمرینی دیگری هم بنویسید و اونهم پروژه ی تبدیل واحد هست : مولفه ها : 1- کیلومتر 2- متر 3-سانتی متر 4- میلی متر 5- اینچ 6-مایل . هر کیلومتر 1000 متر ، هر متر 100 سانتی متر ، هر سانتی متر 10 میلیمتر ، هر اینچ 2.54 سانتی متر و هر مایل 1.61 کیلومتر است ، با احتساب خواهید تونست به راحتی متراژ متلوزیون های خونه ، مسیرهای دریای و خیلی چیزهای دیگه رو هم توی برنامه تون بگنجونید . موفق باشید
mostafa
mostafa BlockChain Expert , SmartContract Developer
واقعا عالی بود زبان نوشته ها کاملا برای من که هیچی نمیدونستم قابل فهم بود ازتون نهایت تشکر رو دارم.
کاربر میهمان
کاربر میهمان
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);


}

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

عکس مربوط به کد تبدیل سرعت اتومبیل
http://bayanbox.ir/download/6377343960912071428/speed.png
Mohsen Afkar
Mohsen Afkar
فایل تمرین چرا مشکل داره؟!
ادمین سایت
ادمین سایت
با سلام
احتراما فایل تست شد و مشکلی نداشت.

با تشکر
تیم سکان آکادمی

در پاسخ به

yasaman_sh
yasaman_sh
ایا میشود result را به صورت جداگانه حساب نکرد و در داخل print فرمول ان را نوشت؟
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
تا جایی که بنده متوجه شدم این امکان برای شما فراهم نیست ، نه در سایت استک آور فلو راجع به محاسبه درون این متد چیزی دیدم و نه تونستم در اندروید استودیو این رو عملی کنم . فکر نکنم ممکن باشه

در پاسخ به

Hossein94
Hossein94
چرا دانلود نمیشه؟
M-Yall
M-Yall
از آموزش شیوا و صحیحتون ممنونم . فقط یه سوال داشتم ، بعد از اجرای برنامه هایی که ورودی میخواد Cursor روی قسمت کدنویسی میمونه تا زمانیکه پایین صفحه کلیک کنم.این طبیعیه؟
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
بله طبیعی هست ، این حالت غیر عادی بدین خاطر اتفاق میفته که شما به سیستم دارید دستور میدید که از کاربر ورودی بگیر ، برای گرفتن این ورودی نیاز هست که سیستم Listening بکنه ( به دستور گوش بده ) .

در پاسخ به

ASPIRIN
ASPIRIN
سلام . ببخشید این هم عکس برنامه:
http://cdn.persiangig.com/preview/9fre5GR5KW/App.png
کاربر میهمان
کاربر میهمان
با سلام خدمت استاد گرامی
من دارم با آموزش های خوبتون شروع به یادگیری زبان جاوا میکنم
تو این آموزش آخرش چندتا برنامه گفتید که من یکیشو نوشتم تبدیل کیلومتر به مایل و برعکس
این سورس کدمه :

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" );

}


}
}

به نظر شما چطوره؟ برای کسی که تازه داره اولین زبان برنامه نویسی رو یاد میگیره؟
طرز نام گذاریی وریبل ها و بقیه ی چیزها از نظر یه برنامه نویس حرفه ای چطوریه؟ و آیا مث برنامه ای ک نوشتم هست یا نه؟
CIna Deuxshiri
CIna Deuxshiri
سلام. دوست عزیز لطف کنید از کدتون یه عکس تهیه کنید و عکس و قرار بدین. کد به این صورت خیلی بهم ریخته میشه، اصلا نمیشه خوند.

در پاسخ به

ASPIRIN
ASPIRIN
جواب منو نمیدید؟؟

در پاسخ به

CIna Deuxshiri
CIna Deuxshiri
سلام. ابتدا اینکه هر موقع برای من نظری ارسال می‌کنید، ابتدای نظرتون اسم من و بنویسید. چون نظرات زیاده من گاهی اوقات گیج میشم.
در مورد برنامه: برنامه بد نیست، خوبه. اما چند تا نکته. اول اینکه برای مستند سازی برنامه (کامنت گذاری) دقیقا کاری که اون شی قرار است انجام بده رو بنویس. حالا در اینجا کد واضح است و خیلی نیازی به کامنت گذاری نیست، ولی مثلا نوشتن question در یک برنامه کاربردی شاید دقیقا هدف مشخص نکنه. باید توضیحات کامل‌تر باشه. نکته‌ی مهم دیگه اینکه وقتی می‌خوای متغیر تعریف کنی، در هر خط فقط یک متغیر تعریف کنید. حتی اگر قرار بود چند تا متغیر double تعریف کنید، در هر خط جداگانه تعریف کن، پشت سر هم ننویس. دلیلش این که هم کد واضح‌تر میشه و هم اینکه اگر بخوای برای یک متغیر کامنت بذاری، راحت در جلوی متغیر توضیحاتش و بنویسی. و در آخر اینکه از Enter استفاده کن. مثلا می‌خوای دستور if و بنویسی، ابتدا یه اینتر بزن، یه خط برنامه بره پایین بعد if و بنویس که باز هم این کار به خوانا بودن کد کمک می‌کنه. موفق باشید.

در پاسخ به

ASPIRIN
ASPIRIN
ممنون ازپاسختون آقای دوشیری
حتما از نظراتتون استفاده میکنم
این اولین برنامه ای بود که خودم نوشتم مطمئنن هرچی جلوتر برم اصولش برنامه نویسی رو بهتر یادمیگیرم.
3>

در پاسخ به

CIna Deuxshiri
CIna Deuxshiri
موفق باشید :)

در پاسخ به

javad
javad
درود بیکران بر شما عزیزان
mohammad saberi
mohammad saberi
بسیار عالی و روان ،برای جاوا کلی اینترنتو زیر رو کردم ولی هیچ جایی بهتر از اینجا پیدا نکردم..موفق و پیروز باشید ...3>
حسین
حسین
بینهایت ممنون...
کاربر میهمان
کاربر میهمان
با سلام و تشکر از سایت عالیتون و خسته نباشید به همه اعضا . بعد از مطالعه این مبحث یه سوالی در ذهنم ایجاد شده اونم اینکه فرق متغییر با شی در چیست و آیا عملیاتی مثل جمع ، ضرب، تفریق و غیره را روی شی هم میشه انجام داد یا اول باید حتما شی در یک متغیر ریخته بشه. باز هم ممنون امیدوارم که به سوالم جواب بدیید.
CIna Deuxshiri
CIna Deuxshiri
سلام
دوست عزیز متغیر و شی زمین تا آسمون با هم فرق دارند. وقتی شما یه متغیری و می سازید، یعنی مقداری از حافظه رو با توجه به نوع متغیرتون به برنامتون اختصاص دادین. اما شی اصلا یه بحث دیگست. شی برای دسترسی به متغیر های یه کلاس دیگه و یا متد های یه کلاس دیگه به کار میره.
مسلما در یک کامنت نمیشه شی و توضیح داد. شما بهتره که برید مباحث مربوط به شی گرایی و مطالعه کنید تا کاملا با مفهوم شی آشنا بشین. در کل پیشنهاد می کنم کل مباحث پایه جاوا رو خوب مطالعه کنید.

در پاسخ به

کاربر میهمان
کاربر میهمان
چگونه در حلقه عدد را از ورودی دریافت کنیم
محمد صالح
محمد صالح
با سلام ابتدا یک متغیر از نوع int تعریف می کنیم
سپس توسط کاربر تعداد دفعات اجرای حلقه را می پرسیم و در متغیری که تعریف کرده ایم ذخیره می کنیم
در نهایت آن متغییر را در دستور حلقه استفاده می کنیم

در پاسخ به

bijan9
bijan9
همه چیز عالیه دمتون گرم
درضمن این بند نیاز به اصلاح داره
System.out.println("Please enter your durrent expenses:");

کلمه current به اشتباه تایپ شده
کاربر میهمان
کاربر میهمان
با سلام خدا قوت خدمت تیم سکان اکادمی
من یه برنامه ساده تبدیل سرعت نوشتم حالا میخوام کاملش کنم که نتیجه ی نهایی رو ببینم ممنون میشم کمکم کنید(aliparyafar@gmai.com
mostafa
mostafa
خیلی ممنون از اموزش های خوبتون
کاربر میهمان
کاربر میهمان
با سلام به شما تیم سکان آکادمی من واقعا تشکر می کنم به خاطر این همه آموزش های بسیار زیبا خدا همیشه پشت وپناه شما موفق باشید
محمد
محمد
َدَمِتون گرم
lona
lona
واقعا عالیه، نمی دونم به چه زبانی از شما تشکر کنم.من کامپیوتر خوندم ولی همیشه از کد نویسی فراری بودم.با این آموزش شما دارم عاشق کدنویسی میشم.خدا خیرتون بده
بهزاد مرادی
بهزاد مرادی دولوپر، کپی‌رایتر و علاقمند به کامیونیتی اپن‌سورس
نظر لطف شماست

در پاسخ به

کاربر میهمان
کاربر میهمان
آموزش هاتون بسیار بسیار شسته رفته هست.دقیقا مانند یه استاد مسلط که برای جزوه اش کلی فکر کرده. این تلاش و زحمات شما قطعا بی نتیجه نخواهد بود.انشالا که روز به روز به دانشتون افزوده بشه
ادمین سایت
ادمین سایت
نظر لطف شماست.

ارادتمند
تیم سکان آکادمی

در پاسخ به