目录

一、实验报告封面

北京电子科技学院(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%

返回目录

20165223 实验三 敏捷开发与XP实践的更多相关文章

  1. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  2. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  3. JAVA课程实验报告 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  4. 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"

    20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...

  5. 20145215实验三 敏捷开发与XP实践

    20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...

  6. 20145325张梓靖 实验三 "敏捷开发与XP实践"

    20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...

  7. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  8. 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...

  9. 20175314 实验三 敏捷开发与XP实践

    20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...

随机推荐

  1. MySQL设计SQL语句优化规范

    原文:http://bbs.landingbj.com/t-0-240751-1.html 1. 使用mysql explain 对sql执行效率进行检测 ,explain显示了mysql如何使用索引 ...

  2. 关于微信小程序使用canvas生成图片,内容图片跨域的问题

    最近有个项目是保存为名片(图片),让用户发送给朋友或朋友圈,找了很多方案都不适用,绞尽脑汁之后还是选了使用canvas,但是用这玩意儿生成图片最大的缺点就是,如果你的内容中有图片,并且这个图片是通过外 ...

  3. js去除数组重复成员

    js去除数组重复成员 第一种思路是:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中 用到两个函数:for ...in 和 indexOf() ...

  4. laravel服务容器

    laravel框架底层解析 本文参考陈昊<Laravel框架关键技术解析>,搭建一个属于自己的简化版服务容器.其中涉及到反射.自动加载,还是需要去了解一下. laravel服务容器 建立项 ...

  5. [转帖] BMC安全隐患

    BMC再现漏洞,裸金属云服务器岌岌可危 https://zhuanlan.kanxue.com/article-8006.htm 之前有vt-x 可能有隐患 现在看起来BMC 也就是IPMI 也有隐患 ...

  6. 过滤数组中的空数组array_filter()

    手册查询array_filter()的使用细节时,看到了:If no callback is supplied, all entries of input equal to FALSE (see co ...

  7. C# Note31: 如何使用Visual Studio做单元测试

    待更! 使用Visual Studio 2013进行单元测试--初级篇 带你玩转Visual Studio——单元测试(C++例)

  8. java学习之—队列

    /** * 队列 * Create by Administrator * 2018/6/11 0011 * 下午 3:27 **/ public class Queue { private int m ...

  9. Fabric运维从入门到精通

    1. fabric的安装 在windows下的python3中安装fabric: 在python安装根目录下使用pip install fabric 安装 如图: fabric只支持python2不支 ...

  10. jqGrid选中行、格式化、自定义按钮、隐藏

    获取选择一行的id: var id=$('#jqGrid').jqGrid('getGridParam','selrow'); 获取选择多行的id: var ids=$('#jqGrid').jqGr ...