第五次课总结及思考

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">第五次课,老师考虑到到这节课为止,我们已经写了很多代码,但是不知道如何管理,所以把源代码管理这方面的知识传授给我们。</span>

一、讲到了源代码管理的重要性:

     (1)源代码是重要知识资产;

     (2)源代码中涉及的敏感信息泄露可能会带来数据安全性问题,要做好数据安全方面的保密工作;

     (3)另外,源代码也需具有一定的开放性;

     (4)管理好源代码可以避免重复造“车轮子”的问题。

二、源代码的管理措施

     (1)严格控制工作设备;
     (2)使用管理工具:git、svn、cvs、tfs等
     (3)提高员工工作素质,特别是职业道德。

三、源代码的管理工具

     (1)cvs:通过一个中心版本控制系统来记录文件版本-->早期
     (2)svn:即版本控制系统,Subversion的简称。是一个开发源代码的版本控制系统。它采用分支管理系统。-->现在比较流行

     (3)git:开源的分布式版本控制系统。能敏捷高效地处理小、大型项目。-->现在比较流行

               国内源代码管理软件:code csdn;国外:github、gitlab。

     (4)tfs:Taobao FileSystem,分布式文件系统

四:svn安装及使用:

      安装完VisualSVN Server和TortoiseSVN后,新建仓库,选择“Single-project respository(with the top-level 'trunk','branches' and ‘tag’ folders)”,以下是这三个文件的介绍:

         (1)trunk:主分支,主开发目录,日常开发的地方
         (2)branches:分支线,分支开发目录,一些阶段性的release版本,这些版本可以继续开发和维护,如修复bug
         (3)tags:标签干线,tag存档目录,存储阶段性的发布版本,不应修改

五、在使用svn以小组形式优化上次作业代码时的总结及思考:

       这次,老师让我们以小组的形式,使用svn对上次的作业(把数字转成人民币大写形式)进行优化。

       我和宏心是一组,一开始,我用我的代码建立一个仓库(名称为rmb),并创建了两个用户,rmb这个仓库允许这两个用户读和写仓库。接着我们就进行优化代码的工作,由于事先我们没有沟通好,导致我的修改后代码在提交时和宏心的发生了冲突(他已经提交了一次代码)。通过这个,我真正明白了团队合作中沟通的重要性,一开始我把代码的总的处理方法(我命名为handle)都修改了,而宏心只是修改除了handle外的其他分支方法,所以导致了他提交了一次代码,但是我提交的时候,发生了冲突。事后,我们虽然也做了一些沟通协调,但是我们深深领悟到:在进行团队合作之前沟通好、明确自己负责哪一部分工作这一个步骤是多么重要。前车之鉴,后事之师!!!希望以后这个教训都要牢记于心!

六、在上次作业代码的优化过程中的思考:

附上代码:
/*  在使用svn时,对上次作业代码进行了如下优化:
    因为上次代码有太多的冗余部分,比如,GUI的文本框获得的String类型的数据,转换为double类型的数据,这是可以优化的。
    优化之前,程序一个很低效率的地方是:对转换后的double类型变量的值(一开始是文本框得到的字符串)还要进行是否为科学计数法形式的数的判断(1000万以上的数,控制台输出为“x.xxEx”这种形式,如1.0E8,1000万以下的数就直接输出)以及根据不同的判断结果执行不同的步骤;
    优化后,输入的数要求如下:整数1-12位,必须有小数点,小数部分1-2位。接着,以小数点位基准,分离输入的数(String类型),根据整数部分的长度进行相应的前补0操作,以得到包含了12个数字的字符串,然后进行相应高四位(千亿、百亿、十亿、亿)、中四位(千万、百万、十万、万)、低四位(千、百、十、个)的人民币大写转换操作;小数部分的处理步骤:如果用户输入的是一个数,则在分位补0,接着进行小数部分的人民币大写转换操作
*/
package homework;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * 
 * @author cmz
 * @version v2.3
 * @dateTime 2016/05/23
 */
public class RMBChange extends JFrame {
	/**
	 * 输入一个double类型的数,格式为xxx.xx,把它转为人民币大写的形式
	 * 
	 * @remark 根据所输入的数,对它的小数位、
	 *         低四位(个十百千)、中四位(萬、十萬、百萬、千萬)、高四位(亿、十亿、百亿、千亿)各自进行处理
	 */
	String result = "";
	JLabel jl_d;
	JTextField jtf_d;
	JButton jbt_submit, jbt_reset, jbt_cancel;
	JTextArea jta_result;

	
	public RMBChange() {
		jl_d = new JLabel("请输入一个double类型最高12位的数,格式为xx.xx:");
		jtf_d = new JTextField();
		jbt_submit = new JButton("确定");
		jbt_reset = new JButton("重置");
		jbt_cancel = new JButton("取消");
		jta_result = new JTextArea("");
		// JTextArea为不可编辑
		jta_result.setEditable(false);
		// 设置JTextArea内的字体、风格、字号
		Font f = new Font("Courier", Font.BOLD, 20);
		jta_result.setFont(f);
		
		jl_d.setHorizontalAlignment(0);
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(1, 2, 5, 5));
		p1.add(jl_d);
		p1.add(jtf_d);

		JPanel p2 = new JPanel();
		p2.setLayout(new GridLayout(1, 3, 5, 5));
		p2.add(jbt_submit);
		p2.add(jbt_reset);
		p2.add(jbt_cancel);

		JPanel p3 = new JPanel();
		p3.setLayout(new GridLayout(2, 1, 5, 5));
		p3.add(p1);
		p3.add(p2);

		add(p3, BorderLayout.NORTH);
		add(jta_result, BorderLayout.CENTER);
		// 提交输入的数字
		jbt_submit.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				String number = jtf_d.getText();
				//规定用户输入数字时应遵守的格式:整数部分1-12位,必须有小数点,小数部分1-2位
                                     Pattern pattern = Pattern
						.compile("^\\d{1,12}\\.{1}\\d{1,2}$");
				Matcher matcher = pattern.matcher(number);
				if (number.equals(new String(""))) {
					JOptionPane.showMessageDialog(null, "输入的数字为空!");
				} else {
					if (matcher.matches()) {
						// 获取用户输入的数字,字符串形式
						result = handle(number);
						jta_result.setText(result);
					} else {
						JOptionPane.showMessageDialog(null, "数字格式错误!");
					}
				}
			}
		});
		// 重置
		jbt_reset.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				jtf_d.setText("");
				jta_result.setText("");
			}
		});
		// 取消退出
		jbt_cancel.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
	}

	public static void main(String[] args) {
		RMBChange rmbChange = new RMBChange();
		rmbChange.setVisible(true);
		rmbChange.setTitle("人民币大写转换");
		rmbChange.setSize(650, 450);
		rmbChange.setLocationRelativeTo(null);
		rmbChange.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public String handle(String number) {
		String result = "";
		//以小数点位分界分解数字
		String [] splitIntegerAndDecimal = number.split("\\.");
		int lengthOfNumber = splitIntegerAndDecimal[0].length();

		//根据整数部分的长度进行相应的前补0操作,从而得到12个数字
                  // number == 1亿
		//number=100亿
		if (lengthOfNumber == 11) {
			number = "0"+ number;
		} 
		// number=10亿
		else if (lengthOfNumber == 10) {
			number = "00"+ number;
		} 
		else if (lengthOfNumber == 9) {
			number = "000"+ number;
		}
		
		//number=1000萬
		else if (lengthOfNumber == 8) {
			number = "0000"+ number;
		} 
		//number=100萬
		else if (lengthOfNumber == 7) {
			number = "00000"+ number;
		} 
		//number=10萬
		else if (lengthOfNumber == 6) {
			number = "000000"+ number;
		}
		//number=1萬
		else if (lengthOfNumber == 5) {
			number = "0000000"+ number;
		} 
		
		//number=1000
		else if (lengthOfNumber == 4) {
			number = "00000000"+ number;
		}
		//number=100
		else if (lengthOfNumber == 3) {
			number = "000000000"+ number;
		}
		//number=10
		else if (lengthOfNumber == 2) {
			number = "0000000000"+ number;
		}
		//number=1
		else if (lengthOfNumber == 1) {
			number = "00000000000" + number;
		}
		
		String[] arrayOfNumber = number.split("");
		int [] valueOfWei = new int [12];
                  //获取整数部分每一位的值
		for (int i = 1; i <= 12; i++) {
			valueOfWei[i - 1] = Integer.parseInt(arrayOfNumber[i]);
		}
		result += meiSiWei(valueOfWei[0], valueOfWei[1], valueOfWei[2], valueOfWei[3],0);
		
		result += meiSiWei(valueOfWei[4], valueOfWei[5], valueOfWei[6], valueOfWei[7],1);
		
		//取小数
		int decimal;
		int lengthOfDecimal = splitIntegerAndDecimal[1].length();
                  //如果小数部分只有一位,则在分位补0
		if(lengthOfDecimal == 1){
			decimal = Integer.parseInt(splitIntegerAndDecimal[1]);
			decimal *= 10;
		}
		else {
			decimal = Integer.parseInt(splitIntegerAndDecimal[1]);
		}
		
		result += meiSiWei(valueOfWei[8], valueOfWei[9], valueOfWei[10], valueOfWei[11], 2)
				+ decimal(decimal);
		//处理一些特殊情况
                  //前面有“零”,去掉
		String [] arrayOfResult = result.split("");
		if (arrayOfResult[1].equals(new String("零"))) {
			result = result.substring(1);
		}
		//处理“0.00”这种特殊情况,因为输出的是“整”,所以需要修改为“零圆”
		if (arrayOfResult.length == 2 && arrayOfResult[1].equals(new String("整"))) {
			result = "零圆";
		}
		return result;

	}

         //整数部分12位,即3段中,以及每一段的每一位都转换成人民币大写形式	
	public String meiSiWei(int qian, int bai, int shi, int ge ,int index) {
		String result = "";
		//单位分高四位、中四位、低四位这3种情况
		String unit [] = {"亿","萬","圆"};
		int i = -1;
		if (index == 0) {
			i = 0;
		}
		else if (index == 1) {
			i = 1;
		}
		else if (index == 2) {
			i = 2;
		}
		// 16种(2*2*2*2),integer为0或非0两种选择,x代表为0,,y代表非0
		// xxxx
		if (qian == 0 && bai == 0 && shi == 0 && ge == 0) {
			result += "";
		}
		// xxxy
		else if (qian == 0 && bai == 0 && shi == 0 && ge != 0) {
			result += "零" + digitToChinese(ge) + unit[i];
		}
		// xxyx
		else if (qian == 0 && bai == 0 && shi != 0 && ge == 0) {
			result += "零" + digitToChinese(shi) + "拾" + unit[i];
		}
		// xyxx
		else if (qian == 0 && bai != 0 && shi == 0 && ge == 0) {
			result += "零" + digitToChinese(bai) + unit[i];
		}
		// xyyx
		else if (qian == 0 && bai != 0 && shi != 0 && ge == 0) {
			result += "零" + digitToChinese(bai) + "佰"
					+ digitToChinese(shi) + "拾" + unit[i];
		}
		// xyxy
		else if (qian == 0 && bai != 0 && shi == 0 && ge != 0) {
			result += "零" + digitToChinese(bai) + "佰零"
					+ digitToChinese(ge) + unit[i];
		}
		// xyyy
		else if (qian == 0 && bai != 0 && shi != 0 && ge != 0) {
			result += "零" + digitToChinese(bai) + "佰"
					+ digitToChinese(shi) + "拾" + digitToChinese(ge) + unit[i];
		}
		// xxyy
		else if (qian == 0 && bai == 0 && shi != 0 && ge != 0) {
			result += "零" + digitToChinese(shi) + "拾"
					+ digitToChinese(ge) + unit[i];
		}

		// yyyy
		else if (qian != 0 && bai != 0 && shi != 0 && ge != 0) {
			result += digitToChinese(qian) + "仟" + digitToChinese(bai)
					+ "佰" + digitToChinese(shi) + "拾" + digitToChinese(ge)
					+ unit[i];
		}
		// yxxx
		else if (qian != 0 && bai == 0 && shi == 0 && ge == 0) {
			result += digitToChinese(qian) + "仟" + unit[i];
		}
		// yxxy
		else if (qian != 0 && bai == 0 && shi == 0 && ge != 0) {
			result += digitToChinese(qian) + "仟零" + digitToChinese(ge)
					+ unit[i];
		}
		// yxyx
		else if (qian != 0 && bai == 0 && shi != 0 && ge == 0) {
			result += digitToChinese(qian) + "仟零" + digitToChinese(shi)
					+ "拾" + unit[i];
		}
		// yyxx
		else if (qian != 0 && bai != 0 && shi == 0 && ge == 0) {
			result += digitToChinese(qian) + "仟" + digitToChinese(bai)
					+ "佰" + unit[i];
		}
		// yxyy
		else if (qian != 0 && bai == 0 && shi != 0 && ge != 0) {
			result += digitToChinese(qian) + "仟零" + digitToChinese(shi)
					+ "拾" + digitToChinese(ge) + unit[i];
		}
		// yyxy
		else if (qian != 0 && bai != 0 && shi == 0 && ge != 0) {
			result += digitToChinese(qian) + "仟" + digitToChinese(bai)
					+ "佰零" + digitToChinese(ge) + unit[i];
		}
		// yyyx
		else if (qian != 0 && bai != 0 && shi != 0 && ge == 0) {
			result += digitToChinese(qian) + "仟" + digitToChinese(bai)
					+ "佰" + digitToChinese(shi) + "拾" + unit[i];
		}
		return result;
	}
         //小数部分转换成人民币大写形式
	public String decimal(int decimal) {
		String result = "";
		int jiao = decimal / 10;
		int fen = decimal % 10;
		if (jiao == 0 && fen == 0) {
			result += "整";
		} else {
			if (jiao != 0 && fen == 0) {
				result += digitToChinese(jiao) + "角";
			} else if (jiao == 0 && fen != 0) {
				result += digitToChinese(fen) + "分";
			} else if (jiao != 0 && fen != 0) {
				result += digitToChinese(jiao) + "角" + digitToChinese(fen)
						+ "分";
			}
		}
		return result;
	}
         //每个阿拉伯数字转换成人民币大写形式
	public String digitToChinese(int integer) {
		String result = "";
		if (integer == 1) {
			result = "壹";
		} else if (integer == 2) {
			result = "贰";
		} else if (integer == 3) {
			result = "叁";
		} else if (integer == 4) {
			result = "肆";
		} else if (integer == 5) {
			result = "伍";
		} else if (integer == 6) {
			result = "陆";
		} else if (integer == 7) {
			result = "柒";
		} else if (integer == 8) {
			result = "捌";
		} else if (integer == 9) {
			result = "玖";
		}
		return result;
	}
}

       1、部分结构、实现相似的的方法可以合并成一个方法。上个版本(v2.2)的处理高四位(千亿、百亿、十亿、亿)的方法highFour、处理中四位(千万、百万、十万、万)的方法middleFour、处理低四位(千、百、十、个)的方法lowFour,这3个方法结构和实现都相似,所以在优化版本(v2.3)中,我把这3个方法整合为一个方法meisiwei。

       2、当代码比较长、显得比较冗余时,试着去再优化一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值