zoukankan      html  css  js  c++  java
  • 实验3

    20182320 2019-2020-1 《数据结构与面向对象程序设计》实验3报告

    课程:《程序设计与数据结构》
    班级: 1823
    姓名: 郑力元
    学号:20182320
    实验教师:王志强
    实验日期:2019年9月27日
    必修/选修: 必修

    1.实验内容

    (1)初步掌握单元测试和TDD

    (2)理解并掌握面向对象三要素:封装、继承、多态(自己去学!)

    (3)初步掌握UML建模

    (4)完成蓝墨云上 (1)-(5)实验。

    2. 实验过程及结果

    2.1 第一个提交点

    首先,参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习,并写出用于检测成绩的类。

    代码如下:

    public class MyUtil{
        public static String percentage2fivegrade(int grade){
            //如果成绩小于0,转成“错误”
            if ((grade < 0))
                return "错误";
                //如果成绩小于60,转成“不及格”
            else if (grade < 60)
                return "不及格";
                //如果成绩在60与70之间,转成“及格”
            else if (grade < 70)
                return "及格";
                //如果成绩在70与80之间,转成“中等”
            else if (grade < 80)
                return "中等";
                //如果成绩在80与90之间,转成“良好”
            else if (grade < 90)
                return "良好";
                //如果成绩在90与100之间,转成“优秀”
            else if (grade <= 100)
                return "优秀";
                //如果成绩大于100,转成“错误”
            else
                return "错误";
        }
    }
    

    因为这里没有构造方法,因此这些代码无法运行。

    第二步,编写类的测试代码,并按照实验要求,提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图。

    代码如下:

    import org.junit.Test;
    import junit.framework.TestCase;
    public class MyUtilTest extends TestCase {
        @Test
        public void testNormal() {
            assertEquals("不及格", MyUtil.percentage2fivegrade(55));
            assertEquals("及格", MyUtil.percentage2fivegrade(65));
            assertEquals("中等", MyUtil.percentage2fivegrade(75));
            assertEquals("良好", MyUtil.percentage2fivegrade(85));
            assertEquals("优秀", MyUtil.percentage2fivegrade(95));
        }
        @Test
        public void testExceptions() {
            assertEquals("错误", MyUtil.percentage2fivegrade(-55));
            assertEquals("错误", MyUtil.percentage2fivegrade(105));
        }
        @Test
        public void testBoundary() {
            assertEquals("不及格", MyUtil.percentage2fivegrade(0));
            assertEquals("及格", MyUtil.percentage2fivegrade(60));
            assertEquals("中等", MyUtil.percentage2fivegrade(70));
            assertEquals("良好", MyUtil.percentage2fivegrade(80));
            assertEquals("优秀", MyUtil.percentage2fivegrade(90));
            assertEquals("优秀", MyUtil.percentage2fivegrade(100));
        }
    }
    

    运行结果如下:

    2.2 第二个提交点

    第一步,参考 积极主动敲代码,使用JUnit学习Java,以TDD的方式研究学习StringBuffer。

    用普通测试方法探究StringBuffer,代码如下:

    public class StringBufferDemo{
      public static void main(String [] args){
                 StringBuffer buffer = new StringBuffer();
                 buffer.append('S');
                 buffer.append("tringBuffer");
                 System.out.println(buffer.charAt(1));
                 System.out.println(buffer.capacity());
                 System.out.println(buffer.indexOf("tring"));
                 System.out.println("buffer = " + buffer.toString());
             }
    }
    

    运行结果如下:

    用TDD探究StringBuffer,代码如下:

    import junit.framework.TestCase;
    
    public class StringBufferDemoTest extends TestCase {
        StringBuffer a = new StringBuffer("qwerabcdhij");
        StringBuffer b = new StringBuffer("qwer12345678910");
        StringBuffer c = new StringBuffer("tiyioyuoiyu");
    
        public void testcharAt() throws Exception{
            assertEquals('q',a.charAt(0));
            assertEquals('1',b.charAt(4));
            assertEquals('o',c.charAt(4));
        }
    
        public void testcapacity() throws Exception{
            assertEquals(27,a.capacity());
            assertEquals(31,b.capacity());
            assertEquals(27,c.capacity());
        }
    
        public void testlength() throws Exception{
            assertEquals(11,a.length());
            assertEquals(15,b.length());
            assertEquals(11,c.length());
        }
    
        public void testindexOf() throws Exception{
            assertEquals(0,a.indexOf("qwer"));
            assertEquals(4,b.indexOf("123"));
            assertEquals(5,c.indexOf("yuo"));
        }
    }
    

    运行结果如下:

    2.4第四个提交点

    第一步,用TDD开发一个Complex复数类。

    要求如下:

    // 定义属性并生成getter,setter
    double RealPart;
    double ImagePart;
    // 定义构造函数
    public Complex()
    public Complex(double R,double I)
    
    //Override Object
    public boolean equals(Object obj)
    public String toString()
    
    // 定义公有方法:加减乘除
    Complex ComplexAdd(Complex a)
    Complex ComplexSub(Complex a)
    Complex ComplexMulti(Complex a)
    Complex ComplexDiv(Complex a)
    

    代码如下:

    public class Complex{
        private double RealPart;
        private double ImagePart;
    
            //构造函数
            public Complex(){}
            public Complex(double R,double I){
                RealPart=R;
                ImagePart=I;
            }
    
            //返回
            public double getRealPart(){
            return RealPart;
            }
    
            public double getImagePart(){
            return ImagePart;
            }
    
            //接收
            public void setRealPart(double realPart){
                RealPart=realPart;
            }
    
            public void setImagePart(double imagePart){
                ImagePart=imagePart;
            }
    
            //重写函数toString
            public String toString(){
                return "Complex{" +
                "RealPart=" + RealPart +
                ", ImagePart=" + ImagePart +
                '}';
            }
            public boolean equals(Object a){
                if (a==this){
                    return true;
            }
                else{
                    return false;
            }
            }
    
            // 定义公有方法:加减乘除
            public Complex ComplexAdd(Complex a){
                Complex b = new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);
                return b;
            }
            public Complex ComplexSub(Complex a){
                Complex b = new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);
                return b;
            }
            public Complex ComplexMulti(Complex a){
                Complex b = new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
                return b;
            }
            public Complex ComplexDiv(Complex a){
                double scale = a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart();
                Complex b = new Complex(a.getRealPart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()),
                - a.getImagePart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()));
                return this.ComplexMulti(b);
            }
    }
    

    第二步,编写测试代码。

    代码如下:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    
    public class ComplexTest extends TestCase {
        Complex a=new Complex(8.0,4.0);
        Complex b=new Complex(-4.0,2.0);
        @Test
        public void testComplexAdd() {
            assertEquals(4.0, a.ComplexAdd(b).getRealPart());
            assertEquals(6.0,a.ComplexAdd(b).getImagePart());
        }
        @Test
        public void testComplexSub() {
            assertEquals(12.0, a.ComplexSub(b).getRealPart());
            assertEquals(2.0,a.ComplexSub(b).getImagePart());
        }
        @Test
        public void testComplexMulti() {System.out.println(a.ComplexMulti(b).getImagePart());
            assertEquals(-40.0, a.ComplexMulti(b).getRealPart());
            assertEquals(0.0,a.ComplexMulti(b).getImagePart());
        }
        @Test
        public void testComplexDiv() {
            assertEquals(-1.2000000000000002, a.ComplexDiv(b).getRealPart());
            assertEquals(-1.6,a.ComplexDiv(b).getImagePart());
        }
    }
    

    结果如下:

    2.5 第五个提交点

    第一步:参考 https://www.cnblogs.com/rocedu/p/4472842.html 中的UML建模规范,对某一自编写的类的代码进行建模。

    编写类的代码如下:

    public class Complex{
        private double RealPart;
        private double ImagePart;
    
            //构造函数
            public Complex(){}
            public Complex(double R,double I){
                RealPart=R;
                ImagePart=I;
            }
    
            //返回
            public double getRealPart(){
            return RealPart;
            }
    
            public double getImagePart(){
            return ImagePart;
            }
    
            //接收
            public void setRealPart(double realPart){
                RealPart=realPart;
            }
    
            public void setImagePart(double imagePart){
                ImagePart=imagePart;
            }
    
            //重写函数toString
            public String toString(){
                return "Complex{" +
                "RealPart=" + RealPart +
                ", ImagePart=" + ImagePart +
                '}';
            }
            public boolean equals(Object a){
                if (a==this){
                    return true;
            }
                else{
                    return false;
            }
            }
    
            // 定义公有方法:加减乘除
            public Complex ComplexAdd(Complex a){
                Complex b = new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);
                return b;
            }
            public Complex ComplexSub(Complex a){
                Complex b = new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);
                return b;
            }
            public Complex ComplexMulti(Complex a){
                Complex b = new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
                return b;
            }
            public Complex ComplexDiv(Complex a){
                double scale = a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart();
                Complex b = new Complex(a.getRealPart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()),
                - a.getImagePart() / (a.getRealPart()*a.getRealPart() + a.getImagePart()*a.getImagePart()));
                return this.ComplexMulti(b);
            }
    }
    

    测试代码如下:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    
    public class ComplexTest extends TestCase {
        Complex a=new Complex(8.0,4.0);
        Complex b=new Complex(-4.0,2.0);
        @Test
        public void testComplexAdd() {
            assertEquals(4.0, a.ComplexAdd(b).getRealPart());
            assertEquals(6.0,a.ComplexAdd(b).getImagePart());
        }
        @Test
        public void testComplexSub() {
            assertEquals(12.0, a.ComplexSub(b).getRealPart());
            assertEquals(2.0,a.ComplexSub(b).getImagePart());
        }
        @Test
        public void testComplexMulti() {System.out.println(a.ComplexMulti(b).getImagePart());
            assertEquals(-40.0, a.ComplexMulti(b).getRealPart());
            assertEquals(0.0,a.ComplexMulti(b).getImagePart());
        }
        @Test
        public void testComplexDiv() {
            assertEquals(-1.2000000000000002, a.ComplexDiv(b).getRealPart());
            assertEquals(-1.6,a.ComplexDiv(b).getImagePart());
        }
    }
    

    根据以上代码建模,图如下:

    3. 实验过程中遇到的问题和解决过程

    在使用IDEA的Git功能时,遇到许多困难与阻碍,并且由于当时解决问题心情急切,没有截图。

    • 问题1:在使用Git上传代码的时候,右下角弹窗提示上传被拒绝。目前原因未知。
    • 问题1解决方案:
      首先,将本地的代码库删除并提前备份代码。

    其次,将码云上的代码重新clone至本地。

    最后,将备份好的代码复制到本地的库中,再一起上传。

    • 问题2:在使用IDEA时,环境设置比较复杂,很多配置需要手动设置,例如生成.class文件的路径、手动设置源代码文件夹和测试文件夹等等。
    • 问题2解决方案:参考 https://www.cnblogs.com/rocedu/p/4472842.html ,但是有许多图片无法加载,所提供的帮助有限。

    其他(感悟、思考等)

    虽然集成开发环境IDEA很强大,但是它的强大建立在我们熟练运用的基础上。因此我们要认真阅读IDEA的使用教程,充分利用它的优势为我们编写代码提供便利。

    参考资料

  • 相关阅读:
    虚函数和纯虚函数
    MS CRM 2011中PartyList类型字段的实例化
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(2)
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
    MS CRM 2011 SDK 5.08已经发布
    MS CRM 2011 Q2的一些更新
    最近很忙
    Microsoft Dynamics CRM 2011最近的一些更新
    补一篇,Update Rollup 12 终于发布了
  • 原文地址:https://www.cnblogs.com/leonzheng/p/11602196.html
Copyright © 2011-2022 走看看