目录

一、实验报告封面

北京电子科技学院(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. react 组件列表

    let data=[ [ '同时入选IMDB250和豆瓣电影250的电影', '带你进入不正常的世界', '用电[影]来祭奠逝去的岁月', '女孩们的故事[电影]', '', '使用 App [找电影 ...

  2. EntityFrameworkCore中的实体状态

    Entry表示一个追踪,里面有state属性,是EntityState的枚举类型. 每一个实体都有一个相对应的Entry: var entry = dbContext.ChangeTracker.En ...

  3. LLDB 3.9.1 安装方法

    1. baidu到一个安装方法 进行尝试: 来源: https://zhuanlan.zhihu.com/p/40780819https://www.jianshu.com/p/f965bbba6eb ...

  4. 【学亮IT手记】angularJS+select2多选下拉框实例

     永远保持对大部分知识的好奇心,学习从不枯燥,也没有被逼学习一说,乐此不疲才是该有的心态和境界!!! 引入相关js库: html部分代码: angularJS定义数据源变量:

  5. C# Note11:如何优雅地退出WPF应用程序

    前言 I should know how I am supposed to exit my application when the user clicks on the Exit menu item ...

  6. app自动化测试Appium+python

    一.node.js安装 https://nodejs.org/en/download/ ##一直下一步 ###cmd查看 二.  .NET Framework安装 https://www.micros ...

  7. 集合之ArrayList(含JDK1.8源码分析)

    一.ArrayList的数据结构 ArrayList底层的数据结构就是数组,数组元素类型为Object类型,即可以存放所有类型数据.我们对ArrayList类的实例的所有的操作(增删改查等),其底层都 ...

  8. JQ查找到带有某个字符,并起类名,然后替换这个某个字符

    <script> setTimeout("asdasd()",1000); //定时器是为了防止其他JS影响到它,可以不加 function asdasd() { $( ...

  9. JQ判断在不同分辨率电脑下使用不同的banner尺寸

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. JQuery invoke remote webservice

    Sending the Access-Control-Allow-Origin header allows basic cross-origin access, but calling ASP.NET ...