در این مقاله، ما در مورد آموزش ایجاد برنامه ماشین حساب سریع در اندروید صحبت خواهیم کرد که برای به دست آوردن نتایج سریع ریاضی مفید است

ماشین حساب اندروید

این نرم افزار عملیات اصلی ریاضی را انجام می دهد مانند:

  • جمع دو عدد
  • تفریق دو عدد
  • ضرب دو عدد
  • بخش از دو عدد

این نرم افزار متشکل از دو لی اوت (Layout) و دو کلاس اصلی جاوا است.

لی اوت ها :

لی اوت home.xml :

این لی اوت ، لی اوت خوش آمدگویی (Splash) برای استفاده از ماشین حساب است. در این لی اوت، یک تصویر به عنوان پس زمینه از طرح تنظیم شده است. وقتی برنامه اجرا می شود ؛ به مدت سه ثانیه این صفحه نمایش داده می شود:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/calc"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="25dp"
android:text="@string/app_name"
android:textColor="#000"
android:textSize="25sp" />

</LinearLayout>

نکته :

هر پروژه اندروید شامل یک پوشه به نام Res وجود دارد که در آن عکس های برنامه قرار می گیرد.

لی اوت calc.xml :

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Home"
android:background="#fff" >

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/disp"
android:id = "@+id/display"
android:hint="@string/dispHint" />
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="20dp">
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/seven"
android:text="@string/seven"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/eight"
android:text="@string/eight"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/nine"
android:text="@string/nine"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/div"
android:text="@string/div"
/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="20dp">
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/four"
android:text="@string/four"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/five"
android:text="@string/five"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/six"
android:text="@string/six"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/mul"
android:text="@string/mul"
/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="20dp">
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/one"
android:text="@string/one"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/two"
android:text="@string/two"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/three"
android:text="@string/three"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/sub"
android:text="@string/sub"
/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="20dp">
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/cancel"
android:text="@string/cancel"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/zero"
android:text="@string/zero"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/equal"
android:text="@string/equal"
/>
<Button
android:layout_width="55dp"
android:layout_height="wrap_content"
android:id = "@+id/add"
android:text="@string/add"
/>
</LinearLayout>
</LinearLayout>

در این لی اوت ؛  یک EditText به عنوان فیلد و بقیه شی های مورد استفاده دکمه هستند، که شامل اعداد طبیعی، عملیات ریاضی، دکمه نتیجه و دکمه تنظیم مجدد است.

دو کلاس جاوا به منظور مدیریت این دو لی اوت برای این نرم افزار ساخته شده است، کلاس اول به نام کلاس home لی اوت home.xml را به مدت 3 ثانیه اجرا می کند و بعد وارد لی اوت بعدی می شود (home.xml).

کلاس Home در فایل Home.java نوشته می شود :

package ir.hossein.calc;
import ir.hossein.calc.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class Home extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
Thread th = new Thread(){
public void run(){
try{
sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
finally{
onPause();
startActivity(new Intent("ir.hossein.calc.Calc"));
}
}
};
th.start();
}
@Override
public void onPause(){
super.onPause();
finish();
}

}

این کلاس ؛ کلاس فعالیت است (Activity Class). دو متد از کلاس فعالیت در این کلاس، یکی (OnCreate(Bundle فرم  و دیگری ()onPause است. متد ()OnCreate تعریف می کند، که لی اوت با استفاده از این روش بارگذاری می شود:

 setContentView(R.layout.home);

مرحله ی بعد، تعریف یک نخ جدید است که لی اوت را به مدت 3 ثانیه نمایش دهد و بارگذاری لی اوت که شامل فعالیت های بعدی را با شروع یک فعالیت جدید اجرا کند : 

startActivity(new Intent("ir.hossein.calc.Calc"));

قبل از شروع یک فعالیت جدید، ما باید فعالیت های در حال اجرا را ببندیم. این را می توان با استفاده از متد  ()onPause انجام داد.

کلاس ماشین حساب در فایل Calc.java :

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Calc extends Activity implements View.OnClickListener{

Button one, two, three, four, five, six, seven, eight, nine, zero, add, sub, mul, div, cancel, equal;
EditText disp;
int op1;
int op2;
String optr;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

one = (Button) findViewById(R.id.one);
two = (Button) findViewById(R.id.two);
three = (Button) findViewById(R.id.three);
four = (Button) findViewById(R.id.four);
five = (Button) findViewById(R.id.five);
six = (Button) findViewById(R.id.six);
seven = (Button) findViewById(R.id.seven);
eight = (Button) findViewById(R.id.eight);
nine = (Button) findViewById(R.id.nine);
zero = (Button) findViewById(R.id.zero);
add = (Button) findViewById(R.id.add);
sub = (Button) findViewById(R.id.sub);
mul = (Button) findViewById(R.id.mul);
div = (Button) findViewById(R.id.div);
cancel = (Button) findViewById(R.id.cancel);
equal = (Button) findViewById(R.id.equal);

disp = (EditText) findViewById(R.id.display);

try{
one.setOnClickListener(this);

two.setOnClickListener(this);

three.setOnClickListener(this);

four.setOnClickListener(this);

five.setOnClickListener(this);

six.setOnClickListener(this);

seven.setOnClickListener(this);

eight.setOnClickListener(this);

nine.setOnClickListener(this);

zero.setOnClickListener(this);

cancel.setOnClickListener(this);

add.setOnClickListener(this);

sub.setOnClickListener(this);

mul.setOnClickListener(this);

div.setOnClickListener(this);

equal.setOnClickListener(this);
}
catch(Exception e){

}
}
public void operation(){
if(optr.equals("+")){
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 + op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
else if(optr.equals("-")){
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 - op2;
disp.setText("نتیجه: " + Integer.toString(op1));
}
else if(optr.equals("*")){
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 * op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
else if(optr.equals("/")){
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 / op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
}
@Override
public void onClick(View arg0) {
Editable str = disp.getText();
switch(arg0.getId()){
case R.id.one:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(two.getText());
disp.setText(str);
break;
case R.id.two:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(two.getText());
disp.setText(str);
break;
case R.id.three:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(three.getText());
disp.setText(str);
break;
case R.id.four:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(four.getText());
disp.setText(str);
break;
case R.id.five:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(five.getText());
disp.setText(str);
break;
case R.id.six:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(six.getText());
disp.setText(str);
break;
case R.id.seven:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(eight.getText());
disp.setText(str);
break;
case R.id.eight:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(nine.getText());
disp.setText(str);

break;
case R.id.nine:
if(op2 != 0){
op2 = 0;
disp.setText("");
}
str = str.append(zero.getText());
disp.setText(str);

break;
case R.id.cancel:
op1 = 0;
op2 = 0;
disp.setText("");
disp.setHint("نتیجه ی علمیات :)");

break;
case R.id.add:
optr = "+";
if(op1 == 0){
op1 = Integer.parseInt(disp.getText().toString());
disp.setText("");
}
else if(op2 != 0){
op2 = 0;
disp.setText("");
}
else{
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 + op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
break;
case R.id.sub:
optr = "-";
if(op1 == 0){
op1 = Integer.parseInt(disp.getText().toString());
disp.setText("");
}
else if(op2 != 0){
op2 = 0;
disp.setText("");
}
else{
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 - op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
break;
case R.id.mul:
optr = "*";
if(op1 == 0){
op1 = Integer.parseInt(disp.getText().toString());
disp.setText("");
}
else if(op2 != 0){
op2 = 0;
disp.setText("");
}
else{
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 * op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
break;
case R.id.div:
optr = "/";
if(op1 == 0){
op1 = Integer.parseInt(disp.getText().toString());
disp.setText("");
}
else if(op2 != 0){
op2 = 0;
disp.setText("");
}
else{
op2 = Integer.parseInt(disp.getText().toString());
disp.setText("");
op1 = op1 / op2;
disp.setText("نتیجه : " + Integer.toString(op1));
}
break;
case R.id.equal:
if(!optr.equals(null)){
if(op2 != 0){
if(optr.equals("+")){
disp.setText("");
/*op1 = op1 + op2;*/
disp.setText("نتیجه : " + Integer.toString(op1));
}
else if(optr.equals("-")){
disp.setText("");/*
op1 = op1 - op2;*/
disp.setText("نتیجه : " + Integer.toString(op1));
}
else if(optr.equals("*")){
disp.setText("");/*
op1 = op1 * op2;*/
disp.setText("نتیجه: " + Integer.toString(op1));
}
else if(optr.equals("/")){
disp.setText("");/*
op1 = op1 / op2;*/
disp.setText("نتیجه : " + Integer.toString(op1));
}
}
else{
operation();
}
}
break;
}
}
}

این کلاس تمام قابلیت های کامل برای یک ماشین حساب را توصیف می کند . این کلاس ؛ کلاس فعالیت گسترش را گسترش می دهد و در متد رابط View.OnClickListener قابل پیاده سازی است.

متد (OnCreate (Bundle لی اوت calc.xml را بار می کند.
متد ()operation تمام عملیات اساسی را برای ماشین حساب تعریف می کند.
متد ()onclick قسمتی از نمایش رابط OnClickListener است که مسئولیت مدیریت تمام دکمه های کلیک شونده در برنامه ماشین حساب را دارد.
همه این دکمه ها کلیک شونده ؛ توسط عبارت شرطی Switch Case مورد استفاده قرار گرفته است، که در آن صورت هر شرط  نشان دهنده ویژگی ها و قابلیت های آن دکمه است.

(setOnClickListener(thisاشاره به رویداد کلیک را به عنوان یک مورد switch در متد ()onclick دارد.

فایل مانیفست - XML :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ir.hossein.calc"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ir.hossein.calc.Home"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ir.hossein.calc.Calc"
android:label="@string/app_name" >
<intent-filter>
<action android:name="ir.hossein.calc.CALC" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>

</manifest>

فایل AndroidManifest.xml فایل پیکربندی اصلی برای ماشین حساب در اندروید است.

از ماشین حساب تان لذت ببرید :)

دانلود سورس ماشین حساب اندروید