大作业————简单计算器二(已完结)

比上期多了一个跑马灯效果       

   效果图


                  简单计算器

1 功能需求及技术可行性分析

在开始编码之前,我们需要先对程序进行需求分析,想一想简单计算器中应该具备哪些功能。将这些功能全部整理出来之后,我们才好动手去一一实现。这里我认为简单计算器中至少应该具备以下功能。

 

1. 页面布局。

2. 事件监听及实现计算。

 

虽然看上去只有二个主要的功能点,但如果想要全部实现这些功能却需要用到UI、数据存储、服务等技术,因此还是非常考验你的综合应用能力的。不过好在这些技术在前面的章节中我们全部都学习过了,只要你学得用心,相信完成这些功能对你来说并不难。

分析完了需求之后,接下来就要进行技术可行性分析了。首先需要考虑的一个问题就是,我们如何才能计算简单的计算题呢,这就靠我们的以前学习的算法啦,这里面主要运用算法,

我们可以翻阅以前的书本或者上网搜索我们需要的算法,这里我就不一一细解释了,后面写代码的时候再详细说明。

2Git时间,将代码托管到GitHub

经过前面几章的学习,相信你已经可以非常熟练地使用Git了。本节依然是Git时间,这次我们将会把简单计算器的代码托管到GitHub上面。

GitHub是全球最大的代码托管网站,主要是借助Git来进行版本控制的。任何开源软件都可以免费地将代码提交到GitHub上,以零成本的代价进行代码托管。

上一节我们已经详细介绍了使用GitHub,本节不做详细说明。

3 创建好包

从本节开始,我们就要真正地动手编码了,为了要让项目能够有更好的结构,这里需要在ymq.demo03包下建一个包,如图15所示。

 

图 15

3. 主页面UI设计:

 

            

我这个样式主要分为三部分:上

 上是一个跑马灯,中是一个显示屏,下是一个按钮布局

layout.main.xml中建立,让它出来我们满意设计模式:

 

3.1   上跑马灯演示

 

首先我们先建一个textview用来做跑马灯效果:欢迎使用简单计算器,祝您生活愉快

<TextView

            android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:ellipsize="marquee" 

        android:focusable="true"

        android:focusableInTouchMode="true"

        android:singleLine="true"

            android:text="欢迎使用简单计算器,祝您生活愉快。欢迎使用简单计算器,祝您生活愉快" />

     详见博客

3.2        中 显示屏

 

     我们要建立一个EditText,使它能输入:

 

<EditText 

        android:text="TextView" 

        android:id="@+id/textView1" 

        android:textSize="25sp"

        android:textColor="#000000" 

        android:layout_gravity="center"

        android:gravity="left"

        android:cursorVisible="false"

        android:editable = "false" 

        android:layout_height="wrap_content" 

        android:layout_width="fill_parent" 

        android:layout_marginLeft="4dip" 

        android:layout_marginRight="4dip" 

        android:layout_marginTop="4dip" android:layout_weight="1.5">

        </EditText>

 

3.3   下 按钮布局 一共621个按钮

 

代码如下

 

<LinearLayout

        android:id="@+id/linearlayout02"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" 

        android:layout_weight="1">

         <Button

         android:layout_width="50dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:id="@+id/buttonc" android:text="@string/shan">

         </Button>

 

         <Button

         android:layout_width="50dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:id="@+id/buttonce" android:text="@string/shanchu">

         </Button>

        </LinearLayout>

         <TableRow

         android:id="@+id/row0"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:layout_weight="1">

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/one" android:id="@+id/button1">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/two" android:id="@+id/button2">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/three" android:id="@+id/button3">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/jia" android:id="@+id/button01">

         </Button>

         </TableRow>

        

         <TableRow

         android:id="@+id/row1"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:layout_weight="1">

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/fore" android:id="@+id/button4">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/five" android:id="@+id/button5">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/six" android:id="@+id/button6">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/jian" android:id="@+id/button02">

         </Button>

         </TableRow>

        

         <TableRow

         android:id="@+id/row2"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:layout_weight="1">

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/seven" android:id="@+id/button7">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/eight" android:id="@+id/button8">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/nine" android:id="@+id/button9">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/cheng" android:id="@+id/button03">

         </Button>

           </TableRow>

        

         <TableRow

         android:id="@+id/row3"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent"

         android:layout_weight="1">

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/zero" android:id="@+id/button0">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:id="@+id/button06" android:text="@string/dihao">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/dengyu" android:id="@+id/button05">

         </Button>

         <Button

         android:layout_width="40dip"

         android:layout_height="fill_parent"

         android:layout_weight="1"

         android:textSize="25sp" android:text="@string/chu" android:id="@+id/button04">

         </Button>

          </TableRow>

        <LinearLayout

        android:id="@+id/tableRow1" 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" 

        android:orientation="horizontal"

        android:layout_weight="1">

           <Button 

           android:textSize="25sp" 

           android:layout_height="fill_parent" 

           android:layout_width="50dp" android:layout_weight="1" android:text="@string/zhengfu" android:id="@+id/zheng">

           </Button>

           <Button 

           android:id="@+id/pingfang" 

           android:textSize="25sp" 

           android:layout_height="fill_parent" 

           android:layout_width="50dp" android:layout_weight="1" android:text="@string/ping">

           </Button>

           <Button 

           android:id="@+id/kaifang" 

           android:textSize="25sp" 

           android:layout_height="fill_parent" 

           android:layout_width="50dp" android:layout_weight="1" android:text="@string/kai">

           </Button>

4实例化控件(按钮及显示屏)

final Button number[]=new Button[10];

final Button fuhao[]=new Button[11];

                     //*按钮

fuhao[0]=(Button)findViewById(R.id.button01);

fuhao[1]=(Button)findViewById(R.id.button02);

fuhao[2]=(Button)findViewById(R.id.button03);

fuhao[3]=(Button)findViewById(R.id.button04);

fuhao[4]=(Button)findViewById(R.id.button05);

fuhao[5]=(Button)findViewById(R.id.button06);

fuhao[6]=(Button)findViewById(R.id.buttonce);

fuhao[7]=(Button)findViewById(R.id.buttonc);

fuhao[8]=(Button)findViewById(R.id.zheng);

fuhao[9]=(Button)findViewById(R.id.kaifang);

fuhao[10]=(Button)findViewById(R.id.pingfang);

number[0]=(Button)findViewById(R.id.button0);

number[1]=(Button)findViewById(R.id.button1);

number[2]=(Button)findViewById(R.id.button2);

number[3]=(Button)findViewById(R.id.button3);

number[4]=(Button)findViewById(R.id.button4);

number[5]=(Button)findViewById(R.id.button5);

number[6]=(Button)findViewById(R.id.button6);

number[7]=(Button)findViewById(R.id.button7);

number[8]=(Button)findViewById(R.id.button8);

number[9]=(Button)findViewById(R.id.button9);

        

        et=(EditText) findViewById(R.id.textView1);//*显示屏

 

        et.setText(str);

  fuhao[6].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

str="";

et.setText(str);

vi=v;

 

}

});

        

        fuhao[7].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

b=0.0;c=0;g=0.0;

str="";

et.setText(str);

 

}

});

        

        fuhao[8].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(vi!=fuhao[5]&&str!=""){

char ch=str.charAt(0);

if(ch=='-')

str=str.replace("-","");

else

str="-"+str;

et.setText(str);

}

}

});

        

        fuhao[9].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

double a=Double.parseDouble(str);

str=Math.sqrt(a)+"";

et.setText(str);

}}

});

        

        fuhao[10].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

double a=Double.parseDouble(str);

str=""+a*a;

et.setText(str);

}}

});

 

5.实现业务逻辑:

     5.1  添加计算方法,在demo03.java中写入代码:

//计算方法

public double calculater(){

switch(c){

case 0:f=g;break;

case 1:f=b+g;break;

case 2:f=b-g;break;

case 3:f=b*g;break;

case 4:f=b/g;break;

}

b=f;

c=0;

return f;

}

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

       5.2  设定数字按键,在demo03.java中写入代码:

//设定数字按键       

        number[0].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=0;

et.setText(str);

flag=0;

}

 else{

char ch1[];

ch1=str.toCharArray();

if(!(ch1.length==1&&ch1[0]=='0'))

{str+=0;

et.setText(str);}

 }

vi=v;

}

});

        

        

        number[1].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=1;

et.setText(str);

flag=0;

}

 else{

str+=1;

et.setText(str);

 }

vi=v;

}

});

 

        number[2].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=2;

et.setText(str);

flag=0;

}

 else{

str+=2;

et.setText(str);

 }

vi=v;

}

});

 

        number[3].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=3;

et.setText(str);

flag=0;

}

 else{

str+=3;

et.setText(str);

 }

vi=v;

}

});

 

        number[4].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=4;

et.setText(str);

flag=0;

}

 else{

str+=4;

et.setText(str);

 }

vi=v;

}

});

 

        number[5].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=5;

et.setText(str);

flag=0;

}

 else{

str+=5;

et.setText(str);

 }

vi=v;

}

});

 

        number[6].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=6;

et.setText(str);

flag=0;

}

 else{

str+=6;

et.setText(str);

 }

vi=v;

}

});

 

        number[7].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=7;

et.setText(str);

flag=0;

}

 else{

str+=7;

et.setText(str);

 }

vi=v;

}

});

 

        number[8].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=8;

et.setText(str);

flag=0;

}

 else{

str+=8;

et.setText(str);

 }

vi=v;

}

});

 

        number[9].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=9;

et.setText(str);

flag=0;

}

 else{

str+=9;

et.setText(str);

 }

vi=v;

}

});

 

 

 

5.3  设定符号键,  在demo03.java中写入代码:

5.3.1  设定符号键  加    +

fuhao[0].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){

c=1;

}

else{

g=Double.parseDouble(str);

calculater();

str=""+f;

et.setText(str);

c=1;

flag=1;

vi=v;

}}

}

});

5.3.2   设定符号键  减   ‘ — ’

   

fuhao[1].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){

c=2;

}

else{

g=Double.parseDouble(str);

calculater();

str=""+f;

et.setText(str);

c=2;

flag=1;

vi=v;

}}

}

});

5.3.3  设定符号键   乘   ‘ *

 

fuhao[2].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){

c=3;

}

else{

g=Double.parseDouble(str);

calculater();

str=""+f;

et.setText(str);

c=3;

flag=1;

vi=v;

}}

}

});

 

5.3.4  设定符号键   除 /

fuhao[3].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){

c=4;

}

else{

g=Double.parseDouble(str);

calculater();

str=""+f;

et.setText(str);

c=4;

flag=1;

vi=v;

}}

}

});

5.3.5  设定符号键  等号 =

 

 fuhao[4].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""&&vi!=fuhao[0]&&vi!=fuhao[1]&&vi!=fuhao[2]&&vi!=fuhao[3]){

g=Double.parseDouble(str);

calculater();

str=""+f;

et.setText(str);

flag=1;

vi=v;

 

}

}

});

5.3.6 审定符号键  小数点  .

fuhao[5].setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str==""){

str+=".";

et.setText(str);

}

else{

char ch1[];int x=0;

ch1=str.toCharArray();

for(int i=0;i<ch1.length;i++)

if(ch1[i]=='.')

x++;

if(x==0){

str+=".";

et.setText(str);

}

}

 

 

6.程序中调用的name,在string.xml 中写入以下程序:

   <string name="hello">Hello World, deom03!</string>

    <string name="app_name">简单计算器</string>

    <string name="one">1</string>

    <string name="two">2</string>

    <string name="three">3</string>

    <string name="fore">4</string>

    <string name="five">5</string>

    <string name="six">6</string>

    <string name="seven">7</string>

    <string name="eight">8</string>

    <string name="nine">9</string>

    <string name="zero">0</string>

    <string name="jia">+</string>

    <string name="jian">-</string>

    <string name="cheng">*</string>

    <string name="chu">/</string>

    <string name="dengyu">=</string>

    <string name="zhengfu">+/-</string>

    <string name="dihao">.</string>

    <string name="ping">x²</string>

    <string name="kai">x</string>

    <string name="shanchu">ce</string>

    <string name="shan">c</string>

</resources>

 

7 修改图标和名称

目前的简单计算器看起来还不太像是一个正式的软件,为什么呢?因为都还没有一个像样的图标呢。一直使用ADT自动生成的图标确实不太合适,是时候需要换一下了。

这里我事先准备好了一张图片来作为软件图标,由于我也不是搞美术的,因此图标设计得非常简单,如图21所示。

 

图 21

将这张图片命名成icon.png,放入res/ drawable-hdpi目录,然后修改main.xml中的代码,如下所示:

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.demo03.app"

    android:versionCode="1"

    android:versionName="1.0" >

    ……

    <application

        android:allowBackup="true"

        android:icon="@drawable/icon"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

……

    </application>

</manifest>

 

 

这里将<application>标签的android:icon属性指定成icon .png就可以修改程序图标了。接下来我们还需要修改一下程序的名称,打开res/values/string.xml文件,其中app_name对应的就是程序名称,将它修改成简单计算器即可,如下所示:

 

 

<resources>

    <string name="app_name">简单计算器</string>

    <string name="action_settings">Settings</string>

    <string name="hello_world">Hello world!</string>

</resources>

 

 

 

    由于更改了程序图标和名称,我们需要先将简单计算器卸载掉,然后重新运行一遍程序,这时观察简单计算器的桌面图标,如图所示。

 

 

养成良好的习惯,仍然不要忘记提交代码。

git add .

git commit -m "修改程序图标和名称。"

git push origin master

这样我们就终于大功告成了!

java 大作业 科学计算器 menu切换普通与科学计算器 部分代码: class MyKey extends KeyAdapter { public void keyPressed(KeyEvent e) { char c = e.getKeyChar(); System.out.print(c); boolean bFlag = false; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if(IfResult){ tf.setText(""); IfResult = false; } tf.setText(tf.getText().trim() + c); bFlag = true; break; case '.': if(tf.getText().trim().indexOf(".") == -1){ tf.setText(tf.getText() + "."); } bFlag = true; break; case '_': if(Double.parseDouble(tf.getText()) > 0){ if(tf.getText().length() > 1){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } }else{ if(tf.getText().length() > 2){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } } bFlag = true; break; case '+': if(flag){ IfResult = false; } if(IfResult){ oper = "+"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "+"; IfResult = true; } bFlag = true; break; case '-': if(flag){ IfResult = false; } if(IfResult){ oper = "-"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "-"; IfResult = true; } bFlag = true; break; case '*': if(flag){ IfResult = false; } if(IfResult){ oper = "*"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "*"; IfResult = true; } bFlag = true; break; case '/': if(flag){ IfResult = false; } if(IfResult){ oper = "/"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "/"; IfResult = true; } bFlag = true; break; case '=': if(flag){ IfResult = false; } if(IfResult){ oper = "="; }else{ getResult(Double.parseDouble(tf.getText())); oper = "="; IfResult = true; } bFlag = true; break; } if(bFlag && tf.getText().equals("0")){ tf.setText("0"); IfResult = true; flag = true; } } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值