1. 程式人生 > >用三種語言寫的人民幣小寫轉換大寫的小程式

用三種語言寫的人民幣小寫轉換大寫的小程式

package cn.faisco.jenkin.lowToUper;

import java.awt.GridLayout;
import java.awt.LinearGradientPaint;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.Array;

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

public class LowToUper {

	JFrame jf;
	JLabel jl;
	JLabel jl1;
	JTextArea jta;
	JTextField jtf;
	JButton jb;
	int num_t;

	private void init() {
		GridLayout gl = new GridLayout(5, 1);
		MouseAdapter ma = new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				int num = -1;
				super.mouseClicked(e);
				try {
					num = Integer.parseInt(jtf.getText().toString());
				} catch (ClassCastException cce) {
					System.out.println("輸入有誤!");
				}
				num_t = num;
				String str = transform(num);
				jta.setText(str);

			}
		};
		jl = new JLabel();
		jl.setText("請輸入要轉換的金額:");

		jtf = new JTextField();

		jl1 = new JLabel();
		jl1.setText("對應的大寫金額為:");

		jta = new JTextArea();
		jta.setAutoscrolls(true);
		jta.setLineWrap(true);

		jb = new JButton("轉換");
		jb.addMouseListener(ma);

		jf = new JFrame("小寫金額化大寫金額");
		jf.setBounds(300, 200, 400, 300);

		jf.setLayout(gl);
		jf.add(jl);
		jf.add(jtf);
		jf.add(jl1);
		jf.add(jta);
		jf.add(jb);
		jf.pack();

		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
		jf.setResizable(true);

	}

	String toUper(int num) {
		switch (num) {
		case 1:
			return "壹";
		case 2:
			return "貳";
		case 3:
			return "叄";
		case 4:
			return "肆";
		case 5:
			return "伍";
		case 6:
			return "陸";
		case 7:
			return "柒";
		case 8:
			return "捌";
		case 9:
			return "玖";
		case 0:
			return "零";
		default:
			return "k";

		}
	}

	String transform(int num) {

		String str = "";
		int flag = -1;
		int[] tmp = new int[10];
		String arr[] = { "億", "仟", "佰", "拾", "萬", "仟", "佰", "拾", "" };

		if (num_t < 0) {

			return "非法的輸入!";
		}
		// /////////////////////////////////////////////////////////////////////////////////////////////////////
		// 這裡是對陣列的處理過程,這個陣列的每一個元素,依次從高位到低位對應要轉換數字的各位 //
		// /////////////////////////////////////////////////////////////////////////////////////////////////////

		for (int i = 8; i > 0; i--)// 這裡是將陣列與要轉換的數字的各位一一對應
		{
			int tm;
			tm = (int) Math.pow(10, i);

			tmp[8 - i] = (int) (num / tm);
			num %= tm;
		}
		tmp[8] = num % 10;

		System.out.println(tmp[0]);

		for (int i = 1; i < 5; i++)
			// 這裡是對"萬"的處理過程,明確哪裡需要加"萬",將這個索引賦給flag標記
			if (tmp[i] != 0 && tmp[4] == 0)
				flag = i;

		int i = 0;
		if (tmp[0] == 0) // 這裡是對開頭位數為0的處理,僅將前面的0標記為-1
			while (tmp[i] == 0) {
				tmp[i] = -1;
				i++;
			}

		for (i = 0; i < 9; i++) // 這裡是對中間為0的情況的處理,將中間n(n>1)個0中的n-1個標記為-1,最低位的0保持不變
		{
			if (tmp[i] == 0 && tmp[i + 1] == 0)
				tmp[i] = -1;
		}

		if (tmp[8] == 0) // 這裡上面的特殊情況,最低位的0在個位,實際上不需要改成大寫,因此直接賦值為-1
			tmp[8] = -1;

		// for(int j:tmp)
		// System.out.println(j);

		// /////////////////////////////////////////////////////////////////////////////////////////////////////
		// 這裡是對陣列的處理過程,這個陣列的每一個元素,依次從高位到低位對應要轉換數字的各位 //
		// /////////////////////////////////////////////////////////////////////////////////////////////////////

		for (i = 0; i < 9; i++)// 這裡是由數字到漢字的轉換,而且是有選擇的轉換
		{
			if (tmp[i] == -1) // 這裡是根據已整理好的換算關係進行換算
				continue;
			str += toUper(tmp[i]);// 加數字

			if (tmp[i] != 0) // 加單位
				str += arr[i];

			if (flag == i) // 這裡是對"萬"這個單位的特殊處理,根據flag標記在字串中加入"萬",上面有具體的處理過程
				str += "萬";

		}

		if (num_t == 0) {
			return "金額為零";
		}
		return str + "圓整";

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new LowToUper().init();
	}

}
執行起來是這樣的: