1 packagecom.example.lenovo.calculator;2
3
4
5 importandroid.app.Activity;6 importandroid.content.Context;7 importandroid.os.Bundle;8 importandroid.view.View;9 importandroid.view.View.OnClickListener;10 importandroid.widget.Button;11 importandroid.widget.CheckBox;12 importandroid.widget.EditText;13
14 importjava.io.FileInputStream;15 importjava.io.FileNotFoundException;16 importjava.io.FileOutputStream;17 importjava.io.IOException;18
19 public class MainActivity extendsActivity {20 /**
21 * Called when the activity is first created.22 */
23 private EditText output = null;24 private EditText input = null;25 private Button btn0 = null;26 private Button btn1 = null;27 private Button btn2 = null;28 private Button btn3 = null;29 private Button btn4 = null;30 private Button btn5 = null;31 private Button btn6 = null;32 private Button btn7 = null;33 private Button btn8 = null;34 private Button btn9 = null;35 private Button btnadd = null;36 private Button btnsubtract = null;37 private Button btnmultiply = null;38 private Button btndivide = null;39 private Button btnclear = null;40 private Button btnresult = null;41 private Button btndot = null;42
43 private EditText errorzero = null;44
45 private EditText resultText = null;46 private Button writeButton = null;47 private Button readButton = null;48 private CheckBox appendBox = null;49 private EditText textView = null;50 private EditText displayView = null;51 public String FILE_NAME = "fileDemo.txt";52
53
54 private String str = "";//保存数字
55 private String strold = "";//原数字
56 private char act = ' ';//记录“加减乘除等于”符号
57 private int count = 0;//判断要计算的次数,如果超过一个符号,先算出来一部分
58 private Float result = null;//计算的输出结果
59 private Boolean errBoolean = false;//有错误的时候为true,无错为false
60 private Boolean flagBoolean = false;//一个标志,如果为true,可以响应运算消息,如果为false,不响应运算消息,只有前面是数字才可以响应运算消息
61 private Boolean flagDot = false; //小数点标志位
62
63
64
65 @Override66 public voidonCreate(Bundle savedInstanceState) {67 super.onCreate(savedInstanceState);68 setContentView(R.layout.activity_main);69
70 output =(EditText) findViewById(R.id.output);71 input =(EditText) findViewById(R.id.input);72
73 errorzero =(EditText) findViewById(R.id.errorzero);74 resultText =(EditText) findViewById(R.id.resultText);75 writeButton =(Button) findViewById(R.id.writeButton);76 readButton =(Button) findViewById(R.id.readButton);77 textView =(EditText) findViewById(R.id.textView);78 displayView =(EditText) findViewById(R.id.displayView);79 appendBox =(CheckBox) findViewById(R.id.appendBox);80
81 btn0 =(Button) findViewById(R.id.zero);82 btn1 =(Button) findViewById(R.id.one);83 btn2 =(Button) findViewById(R.id.two);84 btn3 =(Button) findViewById(R.id.three);85 btn4 =(Button) findViewById(R.id.four);86 btn5 =(Button) findViewById(R.id.five);87 btn6 =(Button) findViewById(R.id.six);88 btn7 =(Button) findViewById(R.id.seven);89 btn8 =(Button) findViewById(R.id.eight);90 btn9 =(Button) findViewById(R.id.nine);91 btnadd =(Button) findViewById(R.id.add);92 btnsubtract =(Button) findViewById(R.id.subtract);93 btnmultiply =(Button) findViewById(R.id.multiply);94 btndivide =(Button) findViewById(R.id.divide);95 btnclear =(Button) findViewById(R.id.clear);96 btnresult =(Button) findViewById(R.id.result);97 btndot =(Button) findViewById(R.id.dot);98 //设置按钮侦听事件
99 btn0.setOnClickListener(listener);100 btn1.setOnClickListener(listener);101 btn2.setOnClickListener(listener);102 btn3.setOnClickListener(listener);103 btn4.setOnClickListener(listener);104 btn5.setOnClickListener(listener);105 btn6.setOnClickListener(listener);106 btn7.setOnClickListener(listener);107 btn8.setOnClickListener(listener);108 btn9.setOnClickListener(listener);109 //执行运算
110 btnadd.setOnClickListener(listener);111 btnsubtract.setOnClickListener(listener);112 btnmultiply.setOnClickListener(listener);113 btndivide.setOnClickListener(listener);114 btnclear.setOnClickListener(listener);115 btnresult.setOnClickListener(listener);116
117 btndot.setOnClickListener(listener);118
119 writeButton.setOnClickListener(writelistener);120 readButton.setOnClickListener(readlistener);121
122
123 //ATTENTION: This was auto-generated to implement the App Indexing API.124 //Seehttps://g.co/AppIndexing/AndroidStudiofor more information.
125 }126
127
128 private OnClickListener listener = newOnClickListener() {129
130 public voidonClick(View v) {131 //TODO Auto-generated method stub
132 switch(v.getId()) {133 //输入数字
134 caseR.id.zero:135 num(0);136 break;137 caseR.id.one:138 num(1);139 break;140 caseR.id.two:141 num(2);142 break;143 caseR.id.three:144 num(3);145 break;146 caseR.id.four:147 num(4);148 break;149 caseR.id.five:150 num(5);151 break;152 caseR.id.six:153 num(6);154 break;155 caseR.id.seven:156 num(7);157 break;158 caseR.id.eight:159 num(8);160 break;161 caseR.id.nine:162 num(9);163 break;164
165 caseR.id.dot:166 dot();167 break;168 //执行运算
169 caseR.id.add:170 add();171 break;172 caseR.id.subtract:173 sub();174 break;175 caseR.id.multiply:176 multiply();177 break;178 caseR.id.divide:179 divide();180 break;181 caseR.id.clear:182 clear();183 break;184 //计算结果
185 caseR.id.result:186 result();187 if (!errBoolean &&flagBoolean) {188 output.setText(String.valueOf(result));189 }190 resultText.setText(strold + act + str + "=" + result+" ");191 break;192
193 default:194 break;195
196 }197 input.setText(strold + act +str);198 output.setText(String.valueOf(result));199
200
201 }202 };203
204 private OnClickListener writelistener = newOnClickListener() {205 @Override206 public voidonClick(View view) {207 //textView.setText("");
208
209 FileOutputStream fos = null;210 try{211 if(appendBox.isChecked()) {212 fos =openFileOutput(FILE_NAME, Context.MODE_APPEND);213 } else{214 fos =openFileOutput(FILE_NAME, Context.MODE_PRIVATE);215 }216 String text =resultText.getText().toString();217 fos.write(text.getBytes());218 textView.setText("文件写入成功,写入长度:" +text.length());219 //resultText.setText("");
220
221 } catch(FileNotFoundException e) {222 e.printStackTrace();223 } catch(IOException e) {224 e.printStackTrace();225 }226 finally{227 if (fos != null)228 try{229 fos.flush();230 fos.close();231 } catch(IOException e) {232 e.printStackTrace();233 }234 }235 }236 };237 private OnClickListener readlistener = newOnClickListener() {238 @Override239 public voidonClick(View view) {240
241 displayView.setText("");242 FileInputStream fis = null;243 try{244 fis =openFileInput(FILE_NAME);245 if (fis.available() == 0) {246 return;247 }248 byte[] readBytes = new byte[fis.available()];249 while (fis.read(readBytes) != -1) {250
251 }252 String text = newString(readBytes);253 displayView.setText(text);254 textView.setText("文件读取成功,写入长度:" +text.length());255
256 } catch(FileNotFoundException e) {257 e.printStackTrace();258 } catch(IOException e) {259 e.printStackTrace();260 }261
262 }263 };264
265 private voiddot() {266 //TODO Auto-generated method stub
267
268 if (!flagDot) {269 str = str + ".";270 flagBoolean = false;271 flagDot = true;272 }273 }274
275 private voidclear() {276 //TODO Auto-generated method stub
277 str = strold = "";278 count = 0;279 act = ' ';280 result = null;281 flagBoolean = false;282 flagDot = false;283 input.setText(strold + act +str);284 output.setText("");285 errorzero.setText("");286 displayView.setText("");287 textView.setText("");288 resultText.setText("");289 }290
291 private voiddivide() {292 //TODO Auto-generated method stub
293 if(flagBoolean) {294 check();295 act = '/';296 flagBoolean = false;297 }298 }299
300 private voidmultiply() {301 //TODO Auto-generated method stub
302 if(flagBoolean) {303 check();304 act = '*';305 flagBoolean = false;306 }307 }308
309 private voidsub() {310 //TODO Auto-generated method stub
311 if(flagBoolean) {312 check();313 act = '-';314 flagBoolean = false;315 }316 }317
318 private voidadd() {319 //TODO Auto-generated method stub
320 if(flagBoolean) {321 check();322 act = '+';323 flagBoolean = false;324 }325 }326
327 private voidcheck() {328 //TODO Auto-generated method stub
329 if (count >= 1) {330 result();331 str =String.valueOf(result);332 }333 strold =str;334 str = "";335 count++;336 flagDot = false;337 errorzero.setText("");338 }339
340 //计算输出结果
341 private voidresult() {342 //TODO Auto-generated method stub
343 if(flagBoolean) {344 Float a, b;345
346 a =Float.parseFloat(strold);347 b =Float.parseFloat(str);348
349 if (b == 0 && act == '/') {350 clear();351 errorzero.setText("除数不能为零!");352 //output.setText("除数不能为零!");353
354
355 //errBoolean=true;
356 }357
358
359 if (!errBoolean) {360 switch(act) {361 case '+':362 result = a +b;363 break;364 case '-':365 result = a -b;366 break;367 case '*':368 result = a *b;369 break;370 case '/':371 result = a /b;372 break;373
374 default:375 break;376 }377 }378
379
380 }381 }382
383 private void num(inti) {384 //TODO Auto-generated method stub
385 str = str +String.valueOf(i);386 flagBoolean = true;387 errorzero.setText("");388 }389
390 }