第一个android程序——贷款计算器

第一个android程序比较简单,具体的要求是,编写一个简单的贷款计算器,根据输入的贷款金额、期限和利率,显示每月应还款的金额。要求合理的使用布局进行界面设计,对输入的数据错误使用toast通知机制显示。

 

<?xml version="1.0" encoding="utf-8"?>

<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:useDefaultMargins="true"
    android:columnCount="5">
    <!-- 标题 -->
    <TextView
        android:layout_columnSpan="5"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dip"
        android:text="银行利息计算器"
        android:textSize="20dip"/>
    <!-- 贷款金额-->
    <TextView 
        android:text="贷 款 金 额:"
        android:layout_gravity="right"
        android:textSize="20dip"
        android:layout_marginLeft="6dip"
        android:width="100dip"/>
    <EditText android:id="@+id/loanSum"
        android:ems="8"
        android:layout_columnSpan="3"
        android:layout_marginLeft="-5dip"
        android:hint="单位:元(RMB)"
        android:inputType="numberDecimal"/>
    <!-- 贷款期限 -->
    <TextView 
        android:text="期限(月数):"
        android:layout_column="0"
        android:layout_gravity="right"
        android:textSize="20dip"
        android:width="100dip"
        android:layout_marginLeft="6dip"/>
    <EditText android:id="@+id/month"
        android:ems="8"
        android:layout_columnSpan="3"
        android:layout_marginLeft="-5dip"
        android:hint="单位:月(Month)"
        android:inputType="number"/>
    <!-- 每月利息 -->
    <TextView
        android:text="每 月 利 率:"
        android:layout_column="0"
        android:layout_gravity="right"
        android:textSize="20dip"
        android:width="100dip"
        android:layout_marginLeft="6dip"/>
    <EditText android:id="@+id/rate"
        android:ems="8"
        android:layout_columnSpan="3"
        android:layout_marginLeft="-5dip"
        android:hint="单位:元(RMB)"
        android:inputType="numberDecimal"
        />
    <!-- 提交和清空按钮 -->
    <Button android:id="@+id/reset"
        android:text="清空输入"
        android:layout_column="0"
        android:layout_columnSpan="2"
        android:layout_gravity="right"
        android:width="100dip"
        android:layout_marginLeft="40dip"/>
    <Button android:id="@+id/submit"
        android:text="提交计算"
        android:layout_column="2"
        android:layout_columnSpan="3"
        android:width="100dip"
        android:layout_gravity="left"/>
    <!-- 计算结果显示 ,使用Toast消息机制显示-->
    
</GridLayout>

 

package com.sevend;

import java.text.DecimalFormat;

import android.app.Activity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class CalculatorActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final EditText loanSum=(EditText)findViewById(R.id.loanSum);
        final EditText month=(EditText)findViewById(R.id.month);
        final EditText rate=(EditText)findViewById(R.id.rate);
        Button submit=(Button)findViewById(R.id.submit);
        Button reset=(Button)findViewById(R.id.reset);
        /**
         * 提交事件处理
         */
        submit.setOnClickListener(new View.OnClickListener() {
        	
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if("".equals(month.getText().toString().trim())||
						"".equals(loanSum.getText().toString().trim())||
						"".equals(rate.getText().toString().trim())){
					Toast.makeText(CalculatorActivity.this, "输入信息不能为空!", Toast.LENGTH_SHORT).show();
				}else{
					double allMoney=0.0;
					double loanMoney=Double.parseDouble(loanSum.getText().toString());
			        int loanMonth=Integer.parseInt(month.getText().toString());
			        double loanRate=Double.parseDouble(rate.getText().toString());
			        System.out.println("loanMoney="+loanMoney);
					allMoney=loanMoney*loanRate*loanMonth+loanMoney;
					DecimalFormat df=new DecimalFormat("0.000");
					Toast.makeText(CalculatorActivity.this, "您应缴纳的利息为:"+df.format(allMoney), Toast.LENGTH_SHORT).show();
				}
			}
		});
        /**
         * 清空事件处理
         */
        reset.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				loanSum.setText("");
				month.setText("");
				rate.setText("");
			}
		});
    }
}


1、对于输入框输入数据的类型控制:

 

根据要求,本程序的三个输入框只允许用户输入数字,其中,贷款总额和月利率必须是浮点数,期限必须为整数

实现该功能可以有两种方式:

在main.xml中,通过EditText中的inputType来设置或者在activity中setInputType()函数来设置,其有如下属性:

//文本类型,多为大写、小写和数字符号。

android:inputType="none"
android:inputType="text"
android:inputType="textCapCharacters"
android:inputType="textCapWords"
android:inputType="textCapSentences"
android:inputType="textAutoCorrect"
android:inputType="textAutoComplete"
android:inputType="textMultiLine"
android:inputType="textImeMultiLine"
android:inputType="textNoSuggestions"
android:inputType="textUri"
android:inputType="textEmailAddress"
android:inputType="textEmailSubject"
android:inputType="textShortMessage"
android:inputType="textLongMessage"
android:inputType="textPersonName"
android:inputType="textPostalAddress"
android:inputType="textPassword"
android:inputType="textVisiblePassword"
android:inputType="textWebEditText"
android:inputType="textFilter"
android:inputType="textPhonetic"
//数值类型
android:inputType="number"
android:inputType="numberSigned"
android:inputType="numberDecimal"
android:inputType="phone"//拨号键盘
android:inputType="datetime"
android:inputType="date"//日期键盘
android:inputType="time"//时间键盘

输入数据类型的设置不仅能够控制输入的数据类型,还能控制android键盘的输入类型,是非常方便的一种控制方式。

2、输入框空提交的判断

有输入必有验证,验证的时候不仅要保证数据类型的合法性还要防止用户的空提交。

 

if("".equals(month.getText().toString().trim())||
"".equals(loanSum.getText().toString().trim())||
	"".equals(rate.getText().toString().trim())){
	Toast.makeText(CalculatorActivity.this, "输入信息不能为空!", Toast.LENGTH_SHORT).show();
}

这段输入空验证可以看出,输入框为空时返回的是空字符串,并非null

 

3、界面布局

常见的界面布局有以下几种:

a、LinearLayout(线性布局)

线性布局从外框上可以理解为一个DIV,它首先是一个一个从上往下罗列在屏幕上。LinearLayou又分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal")。垂直布局是每行只有一个元素,多个元素一次垂直往下。水平布局时,只有一行,每一个元素一次向右排列。LinearLayout中有一个重要的属性android:layout_weight="1",weight在垂直布局是代表行距。水平的时候代表列宽。

纯线性布局的缺点是很不方便修改控件的位置,在开发中经常会用线性布局与相对布局嵌套的形式设置布局。

b、FrameLayout(框架布局)

这个布局可以看成是在墙角堆东西,每放一个东西,后放的都会覆盖之前的。它的原理就是在控件中绘制任何一个控件都会被后绘制的控件覆盖,最后绘制的控件会盖住之前的控件。

c、AbsoluteLayout(绝对布局)

AbsoluteLayout和div中的绝对布局是一样的,用X,Y坐标来指定元素的位置。android:layout_x="20px"/android:layout_y="20px"。这种布局方式比较简单,但是在屏幕垂直切换时,往往会出现问题,而且元素较多的时候,计算也比较麻烦。一般不推荐使用,因为android的手机屏幕五花八门,所以不同的分辨率可能导致显示效果大不相同。

d、TableLayout(表格布局)

类似于html中的table,每一个TableLayout中有表格行TableRow,TableRow里面可以具体定义每个元素,也可以再嵌套表格。对齐方式的设定:android:gravity="".

e、RelativeLayoiut(相对布局)

相对布局是以某一个元素为参照的对齐方式。主要属性有:
相对某一个元素:android:layout_below="@id/aaa"该元素在id为aaa的元素的下面 android:layout_toLeftOf="@id/bbb"该元素的左边是bbb;相对于父元素的地方:android:layout_alignParentLeft="true"在父元素左对齐 android:layout_alignParentRight="true"在父元素右对齐,还可以指定间距等。

4、java中关于幂计算的问题

在计算银行贷款利息的时候用到了幂计算,java中提供了相应的计算函数。Math类中的pow(double m,double n)方法可以进行幂计算。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值