zoukankan      html  css  js  c++  java
  • 软件工程Ⅱ:四则运算升级版

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

     


     

    五、成果图片

  • 相关阅读:
    使用MyBatis生成插件
    关联源码及日志
    下载依赖
    框架简介及基本使用
    注解的本质 及 反射读取属性值
    元注解
    广告系统学习笔记(一)
    Nginx学习笔记(三)
    Nginx学习笔记(二)
    Nginx学习笔记(一)
  • 原文地址:https://www.cnblogs.com/wan-y/p/9869394.html
Copyright © 2011-2022 走看看