⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rmbchange.java

📁 实现人民币面值中
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class RMBChange extends JApplet
implements ActionListener
{
	JLabel upperLabel,lowerLabel;
	JTextField upperField,lowerField;
	String ss=new String("零壹贰叁肆伍陆柒捌玖");//初始化数字的大写形式
	int flag1=1;//用户输入的数字正确则为1,不正确则为零
	String strr;
	public void init()
	{
		Container container=getContentPane();
		container.setLayout(new GridLayout(2,2,20,20));
		
		lowerLabel=new JLabel("输入人民币金额");
		container.add(lowerLabel);
		lowerField=new JTextField(15);
		lowerField.addActionListener(this);//监听数字输入形式
		container.add(lowerField);
		upperLabel=new JLabel("该金额的大写形式为");
		container.add(upperLabel);
		upperField=new JTextField(25);
		upperField.setEditable(false);
		container.add(upperField);
	}
	public void actionPerformed(ActionEvent actionEvent)
	{
		String str;
		double input;
	   	str=lowerField.getText();
    	try{input=Double.parseDouble(str);flag1=1;} //对输入形式进行判断,无异常则证明输入形式正确
	   	catch(NumberFormatException arithmeticException)
	   	{
	   		JOptionPane.showMessageDialog(null,arithmeticException.toString(),
	   		"Arithmetic Exception",JOptionPane.ERROR_MESSAGE);
	   		lowerField.setText(""); 
	   		flag1=0;	   		
	   	}
	   	if(flag1==1) //输入的为double型数字
	   	{
	   		StringTokenizer tokens=new StringTokenizer(str,".");
	    	int count=0;
	    	count=tokens.countTokens();
	    	if(count==1) //输入的数不带小数部分
	    	{   strr="";
	    		if(str.length()>12) //整数部分最多处理到万亿,超过则报错
                {
            	   JOptionPane.showMessageDialog(null,"超过可显示金额的最大面值\n请重新输入");
            	   lowerField.setText("");
             	   upperField.setText("");
                }
	    		else
	    		{
	    			int fflag=1;
	    			for(int i=0;i<str.length()-1;i++)
	    				if(str.charAt(i)!='0') fflag=0;
	    			if(fflag==0) {ChangeRMB(str);strr=strr+"整";upperField.setText(strr);} //输入为非零
	    			else {strr="零元整";upperField.setText(strr);}  //输入为零
	        	}
	    	}
	       if(count==2) //输入的数字含小数部分
	    	{
	    		strr="";
	    		if(str.length()>15) //小数部分只能少于等于两位
                {
            	   JOptionPane.showMessageDialog(null,"超过可显示金额的最大面值\n请重新输入");
            	   lowerField.setText("");
             	   upperField.setText("");
                }
                else {
            	int flag2=0,flag3=1;
                while(tokens.hasMoreTokens()) //取小数点两边的部分
	    		{
	    			flag2++;
	    			if(flag2==1) //对整数部分的处理
	    		    {
	    		    	String str1=tokens.nextToken();
	    		    	for(int i=0;i<str1.length();i++)
	    				if(str1.charAt(i)!='0') flag3=0;
	    			    if(flag3==0) {ChangeRMB(str1);}
	    			    else {strr="";}
	    		    }
	    	        if(flag2==2) //对小数部分的处理
	    	        {
	    	        	String a=strr;
	    	        	int i,c=0;
	    	        	String str2=tokens.nextToken();
	    	            for(i=0;i<str2.length();i++)
	             	    {
	             	    	c++;
	             	    	int k=str2.charAt(i)-48;
	             	    	strr+=ss.charAt(k);
	             	        if(i==0) strr+="角";
		                    if(i==1) strr+="分";
		              	}
		              	String st1=strr;
		              	String st2;
		              	if(c==2){ //含两位小数时候的处理
		              	if(a.equals(""))
		               	   st2=st1.replaceAll("零角零分","零元整");
		               	else
		              	   st2=st1.replaceAll("零角零分","整");
		              	String st3=st2.replaceAll("零分","");
		              	if(a.equals(""))
		               	   strr=st3.replaceAll("零角","");
		               	else strr=st3.replaceAll("零角","零");}
		               	if(c==1){//只有一位小数时候的处理
		               	 if(a.equals(""))
		               	   strr=st1.replaceAll("零角","零元整");
		               	  else strr=st1.replaceAll("零角","整");}
	                  	upperField.setText(strr);
	        	    }
	            }
	           }
	        }
    	}
	}
	
	public void ChangeRMB(String string) //对输入数字形式的人名币转换过程
	{
		StringBuffer buffer=new StringBuffer();
		int i,j,f=1;
		for(i=string.length()-1;i>=0;i--)
		{
			int k=string.charAt(string.length()-1-i)-48; //数字相应中文形式的转换
            buffer.append(ss.charAt(k));
		    if((i+1)%4==0&&k!=0) buffer.append("千"); //单位的添加
		    if((i+1)%4==3&&k!=0) buffer.append("百");
		    if((i+1)%4==2&&k!=0) buffer.append("十");
		    if((i+1)/4==1&&(i+1)%4==1) buffer.append("万");
		    if((i+1)/4==2&&(i+1)%4==1) buffer.append("亿");
		}
	    buffer.append("元");
	    String str3=new String(buffer); //下面为一些特殊情况的处理
	    String str4=str3.replaceAll("零零零零","零"); //将多个零连续的以一个零代替
	    String str5=str4.replaceAll("零零零","零");
	    String str6=str5.replaceAll("零零","零");
	    String str7=str6.replaceAll("零亿","亿"); //将输出中含有的零亿,零万,零元,分别以亿,万或元代替
	    String str8=str7.replaceAll("零万","万");
	    String str9=str8.replaceAll("零元","元");
	    String str10=str9.replaceAll("亿万","亿");
	    if(str10.startsWith("零万")) //以下为用户输入的数字前面含有一个或多个零的处理
	    	strr=str10.substring(2,str10.length());
	    else if(str10.startsWith("万零"))
	    	strr=str10.substring(2,str10.length());
	    else if(str10.startsWith("零亿"))
	    	strr=str10.substring(2,str10.length());
	    else if(str10.startsWith("亿零"))
	    	strr=str10.substring(2,str10.length());
	    else if(str10.startsWith("零"))
	       strr=str10.substring(1,str10.length());
	    else strr=str10;
	}
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -