第五次作业:结对项目-四则运算 “软件”之升级版

作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232

项目的github地址:https://github.com/ShumeiHe/FourArithmetic_android

结对同伴的学号:201606120102

结对同伴的姓名:万玙

结对同伴的博客地址:https://www.cnblogs.com/wan-y/p/9869394.html 

 

 

一、需求分析

基本要求:

  (1)   生成题目,单个题目最多不能超过4个运算符,操作数小于100;

  (2)   用户可以输入答案;

  (3)   若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少;

四个扩展方向:

  (4)   用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 

  (5)   用户答题结束以后,程序可以显示用户答题所用的时间;

  (6)   用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数;

  (7)   程序可以出单个整数阶乘的题目:如:4!=24。

 

二、同伴与我

  考虑到第四次作业中的需求已满足该作业需求的(1)(2)无需进行大量修改。

  同伴需要完成的需求:(4)(5)

  我需要完成的需求:(3)(6)(7)

 

三、开发环境

  工具:Android Stdio

  语言:JAVA

 

四、功能设计

(1)   页面布局:

  主页面布局:输入题目题数、是否存在阶乘的选择、是否存在负数的选择;

  做题页面布局:题目文本框(1个)、答案输入框(5个)、改错文本框(5个)、答案文本框(1个)、提交按钮、答案按钮。

(2)   题目数目的限制:只能输入不超过五道题的题数,如果输出大于5与小于1则提示输入错误;

(3)   题目输出:根据输入的题目个数输出相应数目的题目;

(4)   是否存在阶乘:是,则在最后一道题目中输出一道阶乘(随机产生一个1~10的整数);否,则只输入加减乘除四则运算;

(5)   答案的输入与改错:如果输入的答案与正确答案相符,则在提交的时候,在相应题目后面输出“√”,否则输出“X”

(6)   正确答案的输出:当提交时,答案按钮会显示,点击答案按钮,在底部输出正确答案。

 

五、详细设计

(1)   用户题目个数的输入:如果用户输入的题目个数小于则提示“您输入的题数小于1道请重新输入!”,如果用户输入的额题目个数大于5则提示“您输入的题数大于5道请重新输入!”:  

//传输数据、题目个数、是否存在阶乘。
    public void transferData(Intent intent){
        topicNum=et_topicnum.getText().toString().trim();
        if(0>=Integer.parseInt(topicNum)){
            Toast.makeText(TopicActivity.this,"您输入的题数小于1道请重新输入!",Toast.LENGTH_SHORT).show();
        }else if(Integer.parseInt(topicNum)>5){
            Toast.makeText(TopicActivity.this,"您输入的题数大于5道请重新输入!",Toast.LENGTH_SHORT).show();
        }else{
            intent.putExtra("topicNum",topicNum);
            intent.putExtra("factorial",factorial);
            startActivity(intent);
        }

    }

(2)   答案输入框与改错文本框个数的显示:如果输入题目个数为n,那么答案输入框与改错线束框的显示个数为n个,其余则隐藏:

<!--在布局中隐藏编辑文本框-->
<android:visibility="gone"/>
//编辑文本框的显示。
et_input_answer1.setVisibility(View.VISIBLE);  

(3)   提交按钮的隐藏:点击一次提交按钮后,提交按钮不能再次点击:  

(4)   答案按妞的显示:点击提交按钮后,在提交按钮左边显示答案按钮

/提交按钮事件。
btn_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                btn_answer.setVisibility(View.VISIBLE); //答案按钮的显示。
                Makking();
                int error=Integer.parseInt(topicNum)-score;
                Toast.makeText(DotopicActivity.this,"您答对"+score+"道题,答错"+error+"道题",Toast.LENGTH_SHORT).show();
                Et_enable();
                btn_submit.setEnabled(false); //提交按钮不可点击
            }
        });

(5)   答案文本框的显示:点击答案按钮,正确答案在底部输出:

(6)   答题结束,分别显示正确与错误的题目个数:每答对一道题则加一,否则不加:

(7)   阶乘运算:

 //阶乘运算。
    public static long getNFactorial(int n){
        if(n==0){
            return 1;
        }
        return n*getNFactorial(n-1);
    }

 

六、运行结果

 (1)用户名登录:

    

 (2)大于五道题:

    

 (3)小于1道题:

    

 (4)输入四道题目,有阶乘:

    

 (5)做题页面(四道题目,有阶乘):

    

    

 (6)输出答案:

    

 (7)输入五道题,无阶乘:

    

 

 

七、问题及解决办法

  由于我选择输出最多不超过五道题的需求,所以当时的想法限制了我:即一次性显示题目个数,并非显示一道题做一道题然后再显示一道题做一道题的想法。

  我完成了所有布局与一些需求的实现,所以修改布局是比较困难、繁杂的。

  我面临的问题是:一次性显示所有题目,那么如何完成3)需求里的若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

  我的理解是输入一道但则提示一道题目的正确答案。

  我的解决方法是只能等待用户输入所有的答案,提交后则输出以“√”“X”的形式提示用户哪道题正确,哪道题错误。同时添加一个提交后显示答案的按钮,点击答案按钮则在底部显示全部题目的正确答案。

  归根结底,我的问题在于在需求分析的时候不够明确清晰。整个软件开发流程,我认为最重要的时需求分析,但是,当时我对需求不够明确的时候,着急着手布局与编码的行为上犯了一个大忌。

  一次性显示题目仅限于该项目6)需求,即输入不超过5道题的题目。如果输入超过5道题,那么该功能的扩展对于本项目来说比较棘手。

该项目的布局大致如下:

    

  我的想法:如果超过5道题目,那么该页面上显示超过5道题的题目吗?不是,可以在另外一个页面显示剩余的题目或者动态刷新页面。该想法同时适用于显示一道题做一道题的功能。

  

   将经常修改的部分转换为动态视图: 

    

 

八、过程耗时估计统计表

 

PSP2.1

Personal Software Process Stages

Time Senior Studenh

Timeh

Planning

计划

2

1.5

Estimate

估计这个任务需要多少时间

20

25

Development

开发

6

7

Analysis

需求分析

1

1

Design Spec

生成设计文档

1

1

Design Review

设计复审

0.5

1.5

Coding Standard

代码规范

1

1.5

Design

具体设计

2

3

Coding

具体编码

13

15

Code Review

代码复审

1

1

Test

测试(自我测试,修改代码,提交修改)

1

2.5

Reporting

报告

1

1

 

测试报告

0

0

 

计算工作量

0

0

 

并提出过程修改计划

0

0

九、结对照片

        

posted @ 2018-10-29 11:56  不疯魔不成魔  阅读(203)  评论(1编辑  收藏  举报