软件工程Ⅱ:四则运算升级版
作业要求来自 https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232
我的结对同伴 https://www.cnblogs.com/bufengdianbuchengmo/p/9867075.html
我们的程序代码 https://github.com/ShumeiHe/FourArithmetic_android
一、基本要求
从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:
- 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
- 用户可以输入答案。
- 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
二、扩展功能
同学两两结对,在8个可扩展方向理选取4个加以实现。
- 用户答题结束以后,程序可以显示用户答题所用的时间。
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数。
- 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名。
- 程序可以出单个整数阶乘的题目:如:4!=24。
三、编程时间
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 0.5 | 0.5 |
· Estimate | 估计这个任务需要多少时间 | 6 | 8 |
Development | 开发 | 6 | |
· Analysis | 需求分析 (包括学习新技术) | 1.5 | 1.5 |
· Design Spec | 生成设计文档 | 0.5 | 0.5 |
· Design Review | 设计复审 | 0 | 0 |
· Coding Standard | 代码规范 | 0.2 | 0.1 |
· Design | 具体设计 | 2 | 2 |
· Coding | 具体编码 | 2 | 2 |
· Code Review | 代码复审 | 0.5 | 1 |
· Test | 测试(自我测试,修改代码,提交修改) | 1 | 2.5 |
Reporting | 报告 | 0 | |
· | 测试报告 | 0 | |
· | 计算工作量 | 0 | |
· | 并提出过程改进计划 | 0 |
四、实现代码
开发环境:Android Studio 结对伙伴:201606120100 何淑媚
在这次结对编程过程中,我做了显示答题时间和输入用户名的部分,我的同伴做了选择出题个数、判断对错和阶乘的部分。
由于在做个人项目的时候,我用的是C语言,而她是Java,所以我们这次结对编程用的是她的基础代码。
1.计时器(Chronometer)
这个计时方法需要在布局里加一个控件,界面上会显示出00:00格式的时间(可调整)。
之后我做了一个开始答题的按钮,并在上面加了个监听功能,点击按钮开始计时。
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
input(); //显示题目
btn_start.setVisibility(View.INVISIBLE); //隐藏开始按钮
chronometer.setBase(SystemClock.elapsedRealtime()); //重置计时器
chronometer.start(); //开始计时
}
});
当用户交卷之后停止计时,计时器显示最终时间。
chronometer.stop();
2.用户名(SharedPreferences)
首先做一个登录页面,内容有一个提示输入用户名的TextView、输入栏EditText和Button登录按钮。
监听登录按钮,若输入栏为空,提示输入用户名;否则跳转到出题界面并保存用户信息。
//登录按钮的点击事件
btn_login.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
userName=username.getText().toString().trim();
if(TextUtils.isEmpty(userName)){
Toast.makeText(MainActivity.this,"请输入用户名",Toast.LENGTH_SHORT).show();
return;
}else{
saveLoginStatus(true,userName);
Intent data=new Intent(MainActivity.this,TopicActivity.class);
data.putExtra("isLogin",true);
setResult(RESULT_OK,data);
startActivity(data);
return;
}
}
});
//保存登录信息
private void saveLoginStatus(boolean status,String userName){
sp=getSharedPreferences("loginInfo",MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();
//editor.putBoolean("isLogin",status);
editor.putString("userName",userName);
editor.commit();
}
下一次登录时若已有储存用户名,自动填入到输入栏内。
username=(EditText)findViewById(R.id.username);
sp=getSharedPreferences("loginUserName",MODE_PRIVATE);
username.setText(sp.getString("userName",""));
五、成果图片