结对项目 实践三

一:题目简介

该次实践作业主要实现一个手机的简单应用,计算器。可以在手机平台上实现,这里模拟的安卓环境。

二:结对分工及过程

这次结对的同学是郭淑涛,主要是两人确定了题目后,编写代码,之后在各自的电脑环境平台下进行运行,有问题互相交流,互相学习,也收获很多。

三:代码地址

https://github.com/githubmengqian/partner-project

四:测试情况

首先电脑需要有安卓的eclipse的软件,配置好相应环境后,在平台上建项目,之后进行运行,这里模拟的是安卓环境,这次使用的是bluestack,主要实现代码为:

CalculatorActivity.java

import android.widget.EditText;

public class CalculatorActivity extends Activity implements OnClickListener{

EditText rsText = null; //显示器
boolean isClear = false; //用于记录依稀
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);

//fun 功能按钮
rsText = (EditText)findViewById(R.id.rsText);
Button btnDel = (Button)findViewById(R.id.delete);
Button btnPlu = (Button)findViewById(R.id.plus);
Button btnMin = (Button)findViewById(R.id.minus);
Button btnMul = (Button)findViewById(R.id.multiply);
Button btnDiv = (Button)findViewById(R.id.division);
Button btnEqu = (Button)findViewById(R.id.equ);
Button btnTono = (Button)findViewById(R.id.tonone);
Button btnLeft = (Button)findViewById(R.id.left);
Button btnRight = (Button)findViewById(R.id.right);

//num 数字按钮
Button num0 = (Button)findViewById(R.id.num0);
Button num1 = (Button)findViewById(R.id.num1);
Button num2 = (Button)findViewById(R.id.num2);
Button num3 = (Button)findViewById(R.id.num3);
Button num4 = (Button)findViewById(R.id.num4);
Button num5 = (Button)findViewById(R.id.num5);
Button num6 = (Button)findViewById(R.id.num6);
Button num7 = (Button)findViewById(R.id.num7);
Button num8 = (Button)findViewById(R.id.num8);
Button num9 = (Button)findViewById(R.id.num9);
Button dot = (Button)findViewById(R.id.dot);

//listener
btnTono.setOnClickListener(this);
btnLeft.setOnClickListener(this);
btnRight.setOnClickListener(this);
btnDel.setOnClickListener(this);
btnPlu.setOnClickListener(this);
btnMin.setOnClickListener(this);
btnMul.setOnClickListener(this);
btnDiv.setOnClickListener(this);
btnEqu.setOnClickListener(this);
num0.setOnClickListener(this);
num1.setOnClickListener(this);
num2.setOnClickListener(this);
num3.setOnClickListener(this);
num4.setOnClickListener(this);
num5.setOnClickListener(this);
num6.setOnClickListener(this);
num7.setOnClickListener(this);
num8.setOnClickListener(this);
num9.setOnClickListener(this);
dot.setOnClickListener(this);
}

@Override
public void onClick(View e) {
Button btn = (Button)e;
String exp = rsText.getText().toString();
if(isClear &&(
btn.getText().equals("0")
||btn.getText().equals("1")
||btn.getText().equals("2")
||btn.getText().equals("3")
||btn.getText().equals("4")
||btn.getText().equals("5")
||btn.getText().equals("6")
||btn.getText().equals("7")
||btn.getText().equals("8")
||btn.getText().equals("9")
||btn.getText().equals("."))
||btn.getText().equals("算数公式错误")){
rsText.setText("");
isClear = false;
}
if(btn.getText().equals("C")){
rsText.setText("");
}else if(btn.getText().equals("清除")){
if(exp==null || exp.trim().length()==0)
return;
else
rsText.setText(exp.substring(0, exp.length()-1));
}else if(btn.getText().equals("=")){
if(exp==null || exp.trim().length()==0)
return;
exp = exp.replaceAll("×", "*");
exp = exp.replaceAll("÷", "/");
exp = getRs(exp);
if(exp.endsWith(".0")){
exp = exp.substring(0, exp.indexOf(".0"));
}
rsText.setText(exp);
isClear = false;
}else{
rsText.setText(rsText.getText()+""+btn.getText());
isClear = false;
}
//按键完成后始终保持光标在最后一位
rsText.setSelection(rsText.getText().length());
}

/***
* @param exp 算数表达式
* @return 根据表达式返回结果
*/
private String getRs(String exp){
Interpreter bsh = new Interpreter();
Number result = null;
try {
exp = filterExp(exp);
result = (Number)bsh.eval(exp);
} catch (EvalError e) {
e.printStackTrace();
isClear = true;
return "算数公式错误";
}
return result.doubleValue()+"";
}

/**
* @param exp 算数表达式
* @return 因为计算过程中,全程需要有小数参与.
*/
private String filterExp(String exp) {
String num[] = exp.split("");
String temp = null;
int begin=0,end=0;
for (int i = 1; i < num.length; i++) {
temp = num[i];
if(temp.matches("[+-/()*]")){
if(temp.equals(".")) continue;
end = i - 1;
temp = exp.substring(begin, end);
if(temp.trim().length() > 0 && temp.indexOf(".")<0)
num[i-1] = num[i-1]+".0";
begin = end + 1;
}
}
return Arrays.toString(num).replaceAll("[\\[\\], ]", "");
}

}

上述是该实践的主代码,具体运行截图如下:

之后进行运行,在bluestacks上进行运行:

当然可以实现简单的数学运算。

五:问题及心得。

通过这次实践,自己感觉到团队的力量,和互相学习的重要性,未来会用更多注重团队合作。也感觉到自己的不足,也很感谢自己的同伴,收获很多,也找到许多不足,未来会用更多时间来丰富自己的知识面。最后附上一张合作时的照片:

时间: 2024-12-21 18:20:54

结对项目 实践三的相关文章

Python 项目实践三(Web应用程序)第二篇

接着上节的继续学习,使用Django创建网页的过程通常分三个阶段:定义URL.编写视图和编写模板.首先,你必须定义URL模式,每个URL都被映射到特定的视图--视图函数获取并处理网页所需的数据.视图函数通常调用一个模板,后者生成浏览器能够理解的网页.为明白其中的工作原理,我们来创建学习笔记的主页.我们将定义该主页的URL.编写其视图函数并创建一个简单的模板. 一 创建网页:学习笔记主页 1 映射URL 用户通过在浏览器中输入URL以及单击链接来请求网页,因此我们需要确定项目需要哪些URL .主页

Python 项目实践三(Web应用程序) 第三篇

接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数据的网页. 一 显示所有主题的页面 1 URL模式 #定义learning_logs的URL模式 from django.conf.urls import url from . import views app_name='learning_logs' urlpatterns=[ #主页 url(r

Python 项目实践三(Web应用程序)第五篇

接着上节继续学习,在这一节,我们将建立一个用户注册和身份验证系统,让用户能够注册账户,进而登录和注销.我们将创建一个新的应用程序,其中包含与处理用户账户相关的所有功能.我们还将对模型Topic稍做修改,让每个主题都归属于特定用户. 一 创建用户账号 1 应用程序users 我们首先使用命令startapp来创建一个名为users的应用程序:(ll_env)learning_log$ python manage.py startapp users 1.1 将应用程序users添加到settings

实践作业3 结对项目

结对项目 一.实践目的 1.熟悉Java GUI相关类的API. 2.理解并实践事件驱动程序设计中的监听器.监听器方法.监听器适配器接口.   二.实践要求 利用Java GUI的组件类.容器类和辅助类设计所选项目的用户界面,并在深入理解并掌握事件驱动程序设计原理的基础上,实现事件驱动的程序设计.   三.项目需求 所选项目名称:万年历. 项目需求描述,主要指应实现的主要功能. 实现了日历的查询,方便使用.界面主要是由查询输入部分和结果显示部分两部分组成. 查询输入:①一个文本域,用于输入年份.

React 实践项目 (三)

React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! 上回说到使用Redux进行状态管理,这次我们使用Redux-saga 管理 Redux 应用异步操作 React 实践项目 (一)React 实践项目 (二)React 实践项目 (三) - 首先我们来看看登陆的 Reducer export const auth = (state = initialState, actio

结对项目之小游戏编程(斗地主)

一.题目简介    本次的项目是编写一个斗地主的小游戏,实现语言:java:主要完成了GUI设计.计时线程.算法.本次项目的主要目的是对算法的学习.算法分析在心得里面. 技术难点:1.图片的移动    2.计时线程的设定   3.对牌的分割,必须考虑到优先拆分方案,将权值低的拆分方案舍去. 4.在删除的时候遇到问题了,删除不了. 二.结对分工及过程 本次结对项目的成员有两个,张国伟:负责对GUI界面的设计,完成功能:洗牌功能,发牌功能,打牌功能的图片的位移处理,基本打牌的桌面等等. 我主要负责对

软工_结对项目总结博客

关于结对编程 第一次进行真正的结对编程,而且我们组又是最奇葩的三人组合(14061183韩青长)(14061195陈彦吉),在经历了三天的合作以后,感觉收获还是蛮多的,下面是我对于结对编程的一些个人体验. 优点 在结对编程的过程中,两个人共同面对同一份代码,编码时旁边时刻有人提示监督.这样写出的代码,首先考虑的特殊情况会更多,能避免很多一个人编程时因为考虑不周而在某个不起眼的地方产生的Bug,代码质量更高,少了很多调试时间. 同时,由于两个人交替工作,一方面可以缓解疲劳,同时又因为身旁有人共同工

高级四则运算器—结对项目总结(193 &amp;105)

高级四则运算器—结对项目总结 为了将感想与项目经验体会分割一下,特在此新开一篇博文. 界面设计 啥都不说,先上图震慑一下... 上面的三个界面是我们本次结对项目的主界面,恩,我也觉得挺漂亮的!你问我界面设计花了多久?其实只有6个小时,然后6个小时中有2个小时都是为了一个bug,这个bug之后我们会提到,也是让我长了一回见识. 关于整个界面的美化 关于整个界面的美化,因为之前做Java的Swing开发,知道有这种控件的皮肤(Swing里是叫LAF=LookAndFeel),所以在一开始我就敲定了要

结对项目——博客记录

结对项目内容:http://www.cnblogs.com/jiel/p/4830912.html 结对成员:康家华,马腾跃(http://www.cnblogs.com/summerMTY) 关于结对编程 “在结对编程模式下,一对程序员肩并肩地.平等地.互补地进行开发工作.两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作.他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等.”——<构建之法> 通过阅读教科书和网络上的参