编程语言
首页 > 编程语言> > 20175306 结对编程项目-四则运算 总结博客

20175306 结对编程项目-四则运算 总结博客

作者:互联网

20175205 20175306 结对编程项目-四则运算 总结博客

一、第二阶段预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
• Estimate • 估计这个任务需要多少时间 600 900
Development 开发
• Analysis • 需求分析(包括学习新技术) 20 30
• Design Spec • 生成设计文档 20 30
• Design Review • 设计复审 20 30
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 20 40
• Design • 具体设计 30 40
• Coding • 具体编码 400 600
• Code Review • 代码复审 30 40
• Test • 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告
• Test Repor • 测试报告 10 20
• Size Measurement • 计算工作量 10 10
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 20 30
合计 600 900

二、需求分析

需求分析步骤:

三、设计思路(同时输出UML类图)

由于上课时老师讲了SOLID原则,让我们灵机一动,发现第一阶段的代码不适合扩展,于是便重新构思了一下。

SOLID

本周设计

四、实现过程中键代码解释

import java.util.Locale;
import java.util.ResourceBundle;
public abstract class Language {
    public abstract void Print(String s);
}
public class Chinese extends Language{
    public Chinese(){}
    public void Print(String s){
        Locale locale1 = new Locale("zh","CN");
        ResourceBundle res1 = ResourceBundle.getBundle("zh_CN",locale1);
        System.out.print(res1.getString(s));
    }
}
public class English extends Language{
    public English(){}
    public void Print(String s) {
        Locale locale2 = new Locale("en", "US");
        ResourceBundle res2 = ResourceBundle.getBundle("en_US", locale2);
        System.out.print(res2.getString(s));
    }
}
public class TChinese extends Language {
    public TChinese(){}
    public void Print(String s){
        Locale locale3 = new Locale("zh","TW");
        ResourceBundle res3 = ResourceBundle.getBundle("zh_TW",locale3);
        System.out.print(res3.getString(s));
    }
}

注:此处代码是为了实现程序的多语言切换(国际化),软件实现国际化,需具备以下两个特征:
1、对于程序中固定使用的文本元素,例如菜单栏、导航条等中使用的文本元素、或错误提示信息,状态信息等,需要根据来访者的地区和国家,选择不同语言的文本为之服务。
2、对于程序动态产生的数据,例如(日期,货币等),软件应能根据当前所在的国家或地区的文化习惯进行显示。

 public void Question2(int n,int stage,int grade,String Lan) {          //产生真分数
        String k = "";
        String r = "";
        for(int i=1;i<=n;i++) {
            if(Lan.equals("中文"))
                language.中文("c");
            else if(Lan.equals("英文"))
                language.英文("c");
            else
                language.繁体("c");
            System.out.println(i+":");
            int choice = op.RandomNum(3) + 1;               //随机产生运算符号的个数
            int count = 0;
            String fraction = "";
            for (int j = 1; j <= choice + 1; j++) {        //产生题目,一共应该2*choice+1个元素
                int a = num.RandomNum(10) + 1;
                int b = num.RandomNum(10) + 1;
                int gcd = GCD(a, b);
                if (gcd == a) fraction = "1";            //分子分母相同
                else {
                    if (gcd != 1) {                         //可约分
                        a = a / gcd;
                        b = b / gcd;
                    }
                    if (a < b) fraction = a + "/" + b;
                    else fraction = b + "/" + a;
                }
                s = s + fraction;                      //产生十以内的个数字
                if (count < choice) {
                    s = s + " " + op.RandomChar(4) + " ";             //在原基础上再产生字符
                    count++;
                }
            }
            s = op.RandomBranket(s,choice);
            k = Key.Key1(s);
            while(k.equals("")){
                choice = op.RandomNum(3) + 1;               //随机产生运算符号的个数
                count = 0;
                fraction = "";
                for (int j = 1; j <= choice + 1; j++) {        //产生题目,一共应该2*choice+1个元素
                    int a = num.RandomNum(10) + 1;
                    int b = num.RandomNum(10) + 1;
                    int gcd = GCD(a, b);
                    if (gcd == a) fraction = "1";            //分子分母相同
                    else {
                        if (gcd != 1) {                         //可约分
                            a = a / gcd;
                            b = b / gcd;
                        }
                        if (a < b) fraction = a + "/" + b;
                        else fraction = b + "/" + a;
                    }
                    s = s + fraction;                      //产生十以内的个数字
                    if (count < choice) {
                        s = s + " " + op.RandomChar(4) + " ";             //在原基础上再产生字符
                        count++;
                    }
                }
                s = op.RandomBranket(s,choice);
                k = Key.Key1(s);
            }

注:这里是产生真分数,真分数的难点是在约分,那么约分就要求分子分母的最大公因子,下面是求最大公因子的代码。

 public static int GCD(int a,int b){
        int m = a;
        int n = b;
        while (m != n) {
            if (m > n)
                m -= n;
            else
                n -= m;
        }
        return m;
    }

五、测试方法

六、运行过程截图

七、代码托管地址

码云链接:>https://gitee.com/wjs123456/wjs20175306/tree/master/%E7%BB%93%E5%AF%B9%E5%AD%A6%E4%B9%A0-%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%97/stage7

八、遇到的困难及法解决方法

九、对结对的小伙伴做出评价

我的小伙伴实在是太给力了!!!她的思想不断更新,一直在完善着我们的程序,让我们的程序一步步的接近实用阶段,虽然我们经过了一波好几折,但在这个过程中,我只是负责帮她梳理一下思路,给她一些建议和我的想法,然后她便能很快的将我们的想法构思出来,佩服!佩服!

十、总结(我在结对学习过程中学到的)

在本次结对过程中,由于我的小伙伴很给力,以至于我们这次的程序比较顺利的完成了,而且也完成的比较好,这样的一个程序一个人是无法写出来的,即使写出来也会漏洞百出,这就让我看到了结对学习的重要性,两个人的思想要比一个人的宽泛很多。下面来总结一下在这个过程中我学到的知识:

标签:20175306,结对,30,int,四则运算,程序,Locale,ResourceBundle,public
来源: https://www.cnblogs.com/wjs123456/p/10697335.html