• 20165223 实验三 敏捷开发与XP实践


    目录

    一、实验报告封面

    北京电子科技学院(BESTI)

    实 验 报 告

    课程 Java程序设计 班级 1652班
    姓名 蔡霓 学号 20165223
    成绩 指导教师 娄嘉鹏
    实验日期 2018年4月28日 实验密级 非密级
    预习程度 已预习 实验时间 13:45 - 15:25
    必修/选修 选修 实验序号

    实验名称:敏捷开发与XP实践

    实验内容

    1. XP基础
    1. XP核心实践
    1. 相关工具

    实验要求

    1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》 《Vim编辑器》课程

    2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

    3.严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    返回目录

    二、具体实验内容

    (一)代码规范格式化

    1. 参考 IDEA简易教程-代码规范 安装alibaba 插件,解决代码中的规范问题。
    1. 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。
    public class CodeStandard {
        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());
            if(buffer.capacity()<20)
                buffer.append("1234567");
            for(int i=0; i<buffer.length();i++)
                System.out.println(buffer.charAt(i));
        }
    }
    
    

    (1)实验步骤

    • 打开IDEA,在SettingsPluginsBrowse repositories...中的搜索框输入alibaba
    • 看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效
    • 新建类:CodeStandard.java,输入题目给出的代码
    • 使用工具 Code → Reformate Code ,按提示修改并格式化代码
    • 了解Code菜单功能
    名称 快捷键 功能
    Override Methods Ctrl + O 重写覆盖方法
    Implements Methods Ctrl + I 实现接口方法
    Gengrate Alt + Insert 生成Construct、Getter/Setter、toString等
    Surround With Ctrl + Alt +T 生成包围代码
    Unwarp/Remove Ctrl + Shift + Delete 取消代码包围
    Cyclic Expand Word Alt + / 循环往上选择单词
    Cyclic Expand Word Backwrad 循环往下选择单词
    Comment with Line Comment Ctrl + / 行注释
    Comment with Block Comment Ctrl + Shift + / 块注释
    Reformat Code Ctrl + Alt + L 格式化代码
    Move Statement Down Ctrl + Shift + ↓ 方法、代码下移
    Move Statement Up Ctrl + Shift + ↑ 方法、代码上移

    (2)实验代码

    • CodeStandard.java
    public class CodeStandard {
        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());
            if(buffer.capacity()<20)
                buffer.append("1234567");
            for(int i=0; i<buffer.length();i++)
                System.out.println(buffer.charAt(i));
        }
    }
    
    

    (3)实验截图

    返回目录

    (二)添加搭档项目

    1.在码云上把自己的学习搭档加入自己的项目中

    2.确认搭档的项目加入自己后,下载搭档实验二的Complex代码

    3.加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;

    4.提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

    (1)实验步骤

    • 以开发者的身份在码云上将学习搭档加入自己的项目中

    • 下载搭档实验二的Complex代码,加入JUnit单元测试用例
    • 提交搭档项目git log的截图

    (2)实验代码

    • Complex
    public class Complex {
        // 定义属性并生成getter,setter
        double RealPart;
        double ImagePart;
    
        // 定义构造函数
        public Complex(double R, double I) {
            this.RealPart = R;
            this.ImagePart = I;
        }
    
        ;
    
        public Complex() {
        }
    
        ;
    
        //Override Object
        /*public boolean equals(Object obj){
    
        }
    
        public String toString();
        //Override Object
        public boolean equals(Object obj)
        public String toString()*/
    
    
    }
    class FourOperations{
        // 定义公有方法:加减乘除
        //Complex a = new Complex();
        // Complex b = new Complex();
    
        Complex ComplexAdd(Complex a,Complex b){
            Complex answer=new Complex();
            answer.RealPart=a.RealPart+b.RealPart;
            answer.ImagePart=a.ImagePart+b.ImagePart;
            return answer;
        }
        Complex ComplexSub(Complex a,Complex b){
            Complex answer=new Complex();
            answer.RealPart=a.RealPart-b.RealPart;
            answer.ImagePart=a.ImagePart-b.ImagePart;
            return answer;
        }
        Complex ComplexMulti(Complex a,Complex b){
            Complex answer=new Complex();
            answer.RealPart=(a.RealPart*b.RealPart)-(a.ImagePart*b.ImagePart);
            answer.ImagePart=(a.RealPart*b.ImagePart)+(a.ImagePart*b.RealPart);
            return answer;
        }
        Complex ComplexDiv(Complex a,Complex b){
            Complex answer=new Complex();
            double fenmu = b.RealPart*b.RealPart+b.ImagePart+b.ImagePart;
            answer.RealPart=(a.RealPart*b.RealPart+a.ImagePart*b.ImagePart)/fenmu;
            answer.ImagePart=(a.ImagePart*b.RealPart-a.RealPart*b.ImagePart)/fenmu;
            return answer;
        }
    }
    
    
    • 测试代码ComplexTest
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class ComplexTest {
        @Test
        public void testComplexAdd() throws Exception {
            assertEquals(5,2+3);
            System.out.println();
        }
        @Test
        public void testComplexSub() throws Exception {
            assertEquals(6,9 - 3);
        }
        @Test
        public void testComplexMulti() throws Exception {
            assertEquals(6,2 * 3);
        }
        @Test
        public void testComplexDiv() throws Exception {
            assertEquals(2,6 / 3);
        }
    }
    
    

    (3)实验截图

    返回目录

    (三)搭档代码重构

    完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

    (1)实验步骤

    • 下载搭档的代码Age.java,进行三项重构

    (2)实验代码

    • 原代码:
    import java.lang.*;
    import java.sql.*;
    
    public class Age {
        public static void main(String args[]) {
            Connection con = null;
            Statement sql;
            ResultSet rs;
            String name1 = new String("");
            String name2 = new String("");
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (Exception e) {
            }
            String uri = "jdbc:mysql://localhost:3306/world?useSSL=true";
            String user = "root";
            String password = "";
            // String sqlStr="select * from country where LifeExpectancy ";
            try {
                con = DriverManager.getConnection(uri, user, password);
            } catch (SQLException e) {
            }
            try {
                sql = con.createStatement();
                rs = sql.executeQuery("select * from country");
                float age1 = 0;
                float age2 = 100;
    
                while (rs.next()) {
                    float LifeExpectancy = rs.getFloat(8);
                    String Name = rs.getString(2);
                    if (LifeExpectancy >= age1) {
                        age1 = LifeExpectancy;
                        name1 = Name;
                    } else if (LifeExpectancy <= age2 && LifeExpectancy != 0.0) {
                        age2 = LifeExpectancy;
                        name2 = Name;
                    }
                }
                System.out.println("寿命最长的国家为:" + name1 + ",平均寿命" + age1+"岁");
                System.out.println("寿命最短的国家为:" + name2 + ",平均寿命" + age2+"岁");
                con.close();
            } catch (SQLException e) {
                System.out.println(e);
    
            }
    
    
        }
    }
    
    
    • 重构代码:
    import java.lang.*;
    import java.sql.*;
    public class zbyProgram {
        public static void main(String args[]) {
            Connection con = null;
            Statement sql;
            ResultSet rs;
            String longest_name = new String("");
            String shortest_name = new String("");
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (Exception e) {
            }
            String uri = "jdbc:mysql://localhost:3306/world?useSSL=true";
            String user = "root";
            String password = "";
            // String sqlStr="select * from country where LifeExpectancy ";
            try {
                con = DriverManager.getConnection(uri, user, password);
            } catch (SQLException e) {
            }
            try {
                sql = con.createStatement();
                rs = sql.executeQuery("select * from country");
                float longest_age = 0;
                float shortest_age = 100;
                while (rs.next()) {
                    float LifeExpectancy = rs.getFloat(8);
                    String Name = rs.getString(2);
                    if (LifeExpectancy >= longest_age) {
                        longest_age = LifeExpectancy;
                        longest_name = Name;
                    } else if (LifeExpectancy <= shortest_age && LifeExpectancy != 0.0) {
                        shortest_age = LifeExpectancy;
                        shortest_name = Name;
                    }
                }
                System.out.println("寿命最长的国家为:" + longest_name + ",平均寿命" + longest_age+"岁");
                System.out.println("寿命最短的国家为:" + shortest_name + ",平均寿命" + shortest_age+"岁");
                con.close();
            } catch (SQLException e) {
                System.out.println(e);
            }
        }
    }
    
    

    (3)实验截图

    返回目录

    (四)Java密码学相关内容学习

    1.参考《Java 密码学算法》,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。

    2.提交学习成果码云链接和代表性成果截图,要有学号水印。

    (1)实验步骤

    • 非对称加密-RSA算法1,创建RSA公钥和私钥
    • 非对称加密-RSA算法2,获取公钥私钥,并进行加密,获取密文
    • 非对称加密-RSA算法3,使用私钥文件对密文进行解密

    (2)实验代码

    • CaeserCipher.java代码:
    import java.util.*;
    import java.lang.*;
    
    public class CaeserCipher {//凯撒密码
    
        public static void main(String[] args) {
            System.out.println("输入一串字符串作为明文(回车结束):");
            Scanner input = new Scanner(System.in);
            String m = input.next();//读入一行字符串,以回车为标志
            System.out.println("输入密钥:");
            int k = input.nextInt();
            int key = k % 26;//防止密钥超界
            Arithmetic output = new Arithmetic();
            String c = output.encrpty(m, k);
            System.out.println("加密后的密文为:" + c);
            System.out.println("解密后的明文为:" + output.decrypt(c, key));
        }
    }
    
    
    • Arithmetic.java代码:
    import java.lang.*;
    
    public class Arithmetic {//加密和解密算法
    
        public String encrpty(String m, int k) {
            StringBuilder result = new StringBuilder();
            char[] mi = m.toCharArray();
            int n = mi.length;
            for (int c : mi) {
                if (c >= 'a' && c <= 'z') {
                    c += k; // 移动key%26位
                    if (c < 'a')
                        c += 26; // 向左超界
                    if (c > 'z')
                        c -= 26; // 向右超界
                }
                // 如果字符串中的某个字符是大写字母
                else if (c >= 'A' && c <= 'Z') {
                    c += k; // 移动key%26位
                    if (c < 'A')
                        c += 26;// 同上
                    if (c > 'Z')
                        c -= 26;// 同上
                }
                result.append((char) c);
            }
            return result.toString();
        }
    
        public String decrypt(String m, int k) {
            StringBuilder result = new StringBuilder();
            char[] mi = m.toCharArray();
            int n = mi.length;
            for (int c : mi) {
                if (c >= 'a' && c <= 'z') {
                    c -= k; // 向前移动k位
                    if (c < 'a')
                        c += 26; // 向左超界
                    if (c > 'z')
                        c -= 26; // 向右超界
                }
                // 如果字符串中的某个字符是大写字母
                else if (c >= 'A' && c <= 'Z') {
                    c -= k; // 向前移动3位
                    if (c < 'A')
                        c += 26;// 同上
                    if (c > 'Z')
                        c -= 26;// 同上
                }
                result.append((char) c);
            }
            return result.toString();
        }
    }
    
    

    (3)实验截图

    返回目录

    三、实验总结

    • 代码托管

    我的代码20165223
    搭档代码20165218

    • 参考资料
    1. Intellj IDEA 简易教程-代码规范
    2. 实验三 敏捷开发与XP实践
    3. 积极主动敲代码,使用JUnit学习Java
    4. Java 密码学算法

    返回目录

    四、PSP时间

    实验步骤 耗时 百分比
    题目分析 30min 15%
    思路设计 60min 30%
    代码实现 60min 30%
    调试测试 20min 10%
    实验总结 30min 15%

    返回目录

  • 相关阅读:
    SuSE上运行MyCat(二):配置单点MyCat
    mysql笔记系列(七)唯一索引和普通索引的性能区别
    LINUX中LS对文件进行按大小排序和按时间排序,设置LS时间格式
    Linux下查看网关方法:
    linux
    Linux ip命令详解
    suse下设置IP的3种方法
    linux配置虚拟IP--VIP
    chroot的用法
    91家纺网,十次更新
  • 原文地址:https://www.cnblogs.com/moddy13162201/p/8995782.html
Copyright © 2020-2023  润新知