软件工程Ⅱ:四则运算升级版

作业要求来自 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",""));

 


 

五、成果图片

posted on 2018-10-29 12:21  WAN*Y  阅读(130)  评论(0编辑  收藏  举报

导航