目录

一、实验报告封面

北京电子科技学院(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. opencv2\core\cuda.hpp(106): error C2059: 语法错误:“常量”

    在 cuda.hpp 中, virtual void free(GpuMat* mat) = 0;   -> virtual void _free(GpuMat* mat) = 0;

  2. linux 服务器名 访问 shh免密码登录

    以根用户登录,或者登录后切换到根用户,然后在提示符下输入hostname命令,可以看出当前系统的主机名为localhost.localdomain.   更改/etc/sysconfig下的netwo ...

  3. Azure系列2.1.14 —— CopyState

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...

  4. Redis 使用命令行的方式 获取 hash type key 的value值

    1. 之前只是非常简单的看了下 get key 和 set key 但是这样 设置的 key value 应该是都 string 类型的 2. 但是没考虑过其他类型的 是如何获取 相关内容的 ,一直 ...

  5. hihoCoder1033 交错和 数位DP

    题目:交错和 链接:http://hihocoder.com/problemset/problem/1033# 题意:对于一个十进制整数x,令a0.a1.a2.....an是x从高位到低位的数位,定义 ...

  6. day 7-20 视图,触发器,事务

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  7. UTF-8编码与GBK编码下的字符长度

    源码: package lsh.java.charset; import java.nio.charset.Charset; public class LengthOfUTF_8 { public s ...

  8. hive子查询

    如果集合中含有空值,不能使用not in的语法指令:但是可以使用in

  9. drf图片字段序列化完整路径

    一.需求 前端需要它想要的数据格式: 原有的数据格式: 二.定制化: 1.可以嵌套序列化pol_type,lit_des,area_detail,但结构如下: class ChrDetailSeria ...

  10. 使用synchronized 实现ReentrantLock(美团面试题目)

    刚看到这个题目的时候无从下手,因为觉得synchronized和lock在加锁的方式上有很大不同,比如,看看正常情况下synchronized时如何加锁的. 方式一: public synchroni ...