用java写一个计算器(简单版本)包括一些简单的输入错误处理

题目要求

自己编写所有代码,设计一个程序的界面。该程序的功能要求是:运行之后,界面要求基本如左 图所示。其中界面设计时的顶层容器要求使用 JFrame(或 Frame), 界面上的“简易计算器”、“运算数一”、“运算数二”、“运算结果” 这些提示标签使用组件 JLabel(或 Label) ,输入运算数和输出运 算结果使用 JTextField(或 TextField),“相加”、“相减”和“全 部清零”使用按钮 JButton(或 Button)。 请注意查阅 JDK 的 API 文档中这些相关的类,看看它们具有哪些构造函数可以用来生成 所需的对象,它们具有哪些方法可以用来进行调用。注意保存好 本次实验代码,下一次实验将会要求实现其事件处理以继续完善。
在上一个实验(实验三)的第 1 题中,我们设计了一个简易计算器的界面。但仅仅要求设计出其 界面,而没有要求进行事件处理。在本次实验中,请实现其事件处理。使得程序运行之后,当输入两个 小数作为运算数后,点击“相加”或者“相减”按钮,两数相加或相减的结果就会显示在“运算结果” 框中。 如果点击“全部清零”按钮,那么两个运算数输入框和运算结果框中就会完全被清空。 2、对于第 1 题,除了正常数据之外,用户还可能因为好奇或误操作导致这样几种情况: (1)1 个 或 2 个运算数均未输入;(2)输入的数据串中含有除小数点和数字之外的非法字符;(3)输入的数据串 中不含有除小数点和数字之外的非法字符,但小数点的个数超过 1 个或小数点的位置在数据的开头或结 尾处。 请改进你的程序,对这几种情况进行判断,不允许使用正则表达式或异常处理机制,完全使用字 符串类的各种方法,对这几种输入情况得到的用户所输入的字符串进行分析判断,并在你的程序图形界 面上向用户进行相应的提示。

题目所预期的效果图

上代码

说明:这是我第一次做页面,感觉很棒,但是花的时间太长,而且找bug找的很鸡肋,最后发现这个bug不是我逻辑上的问题,而是由于复制粘贴的时候没有好好修改要修改的内容,所以我告诉大家:复制粘贴一时爽,一直复制粘贴一直爽爆。

发现这个代码块用不了了,算了直接复制过来吧


import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class FrameApp extends JFrame{
	JFrame jfr = new JFrame("计算器");//搞个容器先
	JButton b1 = new JButton("相加");
	JButton b2 = new JButton("相减");
	JButton b3 = new JButton("全部清零");
	JTextField text1;
	JTextField text2;
	JTextField text3;
	JLabel lable1;
	JLabel lable2;
	JLabel lable3;
	
	public FrameApp (){
		jfr.setSize(410,550);//容器页面大小
		jfr.setLayout(null);//设置为null布局	
		
		b1.setSize(100,35);
	 
		b1.setLocation(70,305);
		b2.setSize(100,35);
		b2.setLocation(210,305);
		b3.setSize(100,35);
		b3.setLocation(135,390);
		lable1 =   new JLabel("第一个数字:");		
		lable1.setSize(100,100);
		lable1.setLocation(58,62);
		
		
		lable2 =   new JLabel("第二个数字:");		
		lable2.setSize(100,100);
		lable2.setLocation(58,127);
		
		
		lable3 =   new JLabel("运算的结果:");		
		lable3.setSize(100,100);
		lable3.setLocation(58,191);
		
		text1 = new JTextField();
		text2 = new JTextField();
		text3 = new JTextField();text3.setEditable(false);
		
		
		text1.setSize(145,30);
		text1.setLocation(129,95);
		
		text2.setSize(145,30);
		text2.setLocation(129,160);
		
		text3.setSize(145,30);
		text3.setLocation(129,224);
		
		jfr.add(lable1);jfr.add(text1);
		jfr.add(lable2);jfr.add(text2);
		jfr.add(lable3);jfr.add(text3);
		
		jfr.add(b1);
		jfr.add(b2);
		jfr.add(b3);
		
		
		//添加监听器
		b3.addActionListener(new MyEvent());
		b1.addActionListener(new MyEvent());
		b2.addActionListener(new MyEvent());
		
		
		
		jfr.setResizable(true);
		jfr.setVisible(true);//得放最后
		//pack();
		jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//可以关闭
	
	}
	public static void main(String args[]) {
		FrameApp a = new FrameApp();
	}
	
	
	
	/*监听器实现类*/
class MyEvent implements ActionListener{
	int i;
	
	public void actionPerformed(ActionEvent evt) {
		if((evt.getSource() == b3))//清零效果
		{
			
			 
			
			text1.setText("");
			text2.setText("");
			text3.setText("");
		}
		
		else if((evt.getSource() == b1))//相加效果
		{
			 
			if(judge() == 0)
			{
				text1.setText("");
				text2.setText("");
				
				return;
			}
			double a = Double.parseDouble(text1.getText());
			double b = Double.parseDouble(text2.getText());
			String reslut = Double.toString(a+b);
			text3.setText(reslut);
			
		}
		else //相减效果
		{
			 
			if(judge() == 0)
			{
				text1.setText("");
				text2.setText("");
				text3.setText("");
				
				return;
			}
			double a = Double.parseDouble(text1.getText());
			double b = Double.parseDouble(text2.getText());
			String reslut = Double.toString(a-b);
			text3.setText(reslut);
		}
		
			
			
	}
	private int judge() {//用于判断输入是否合法
		int i =0;
		String a = null;
		String b = null;
		int sumOfPoint = 0;
		
//		for( i =0;i<a.length();i++)
//			System.out.print(a.charAt(i));
//		System.out.println("");
//		for( i =0;i<a.length();i++)
//			System.out.print(b.charAt(i));
		
		if(text1.getText().length() == 0 || text2.getText().length() == 0)//判断运算符输入完整没有
		{
			JOptionPane.showMessageDialog(null, "你没有填完整运算数字,请重新输入");
			return 0;	
		}
		
		a = text1.getText();
		b = text2.getText();
		
		
		
		 if( a.charAt((a.length()-1)) == '.' || a.charAt(0) == '.' || b.charAt((b.length()-1)) == '.' || b.charAt(0) == '.')
		{
			JOptionPane.showMessageDialog(null, "你输入的小数点处于最前面或者最后面,请重新输入");
			return 0;
		}
		
		
		
		
		for( i = 0;i<a.length();i++)//判断运算符一有没有包含非法运算符,即输入了除了小数点和数字的字符
		{
			if(a.charAt(i) == '.')//计数运算数一的小数点数,如果大于一个就是错误的
				sumOfPoint++;
			if(sumOfPoint>1 )
			{
				JOptionPane.showMessageDialog(null, "你输入的小数太多了,请重新输入");
				return 0;
			}
			
			if(a.charAt(i) !='.' &&  a.charAt(i) !='0' &&  a.charAt(i) !='1' &&  a.charAt(i) !='2' &&  a.charAt(i) !='3' &&  a.charAt(i) !='4' && a.charAt(i) !='5' &&  a.charAt(i) !='6' &&  a.charAt(i) !='7' &&  a.charAt(i) !='8' &&  a.charAt(i) !='9' )
			{
				JOptionPane.showMessageDialog(null, "你输入含有非法字符,请重新输入");
				return 0;
			}
		}
		
		
		
			sumOfPoint = 0;//计数运算符二里边的小数点
			
			
			
			
		for( i = 0;i<b.length();i++) //判断运算符二有没有包含非法运算符,即输入了除了小数点和数字的字符
		{
			if(b.charAt(i) == '.')//计数运算符二的小数点数,如果大于一个就是错误的
				sumOfPoint++;
			
			
			if(sumOfPoint>1)
			{
				JOptionPane.showMessageDialog(null, "你输入的小数点太多了,请重新输入");
				return 0;
			}
			if(b.charAt(i) !='.' &&  b.charAt(i) !='0' &&  b.charAt(i) !='1' &&  b.charAt(i) !='2' &&  b.charAt(i) !='3' &&  b.charAt(i) !='4' && b.charAt(i) !='5' &&  b.charAt(i) !='6' &&  b.charAt(i) !='7' &&  b.charAt(i) !='8' &&  b.charAt(i) !='9' )
				
			{
				JOptionPane.showMessageDialog(null, "你输入含有非法字符,请重新输入");
				return 0;
			}
		}
		
		
		
		
		
		
	
	
	
	return 1;
		}
}}
	


                                  









目 录 一、课设任务及要求 1 二、需求分析 2 三、设计思路 3 四、详细设计 5 五、运行调试与分析讨论 9 六、设计与小结 14 七、参考文献 15 附录 16 中文摘要 Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现 的HotJava浏览器,显示了Java的魅力:跨平台、动感的Web、Internet计算。从此,Ja va被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。Java平台由Java虚拟机和Java 应用编程接口构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩 展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现 在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在 各种系统中运行。 Java分为三个体系J2SE,J2EE,J2ME。 说起计算器,值得我们骄傲的是,最早的计算工具的诞生地是中国。 在17世纪初,西方国家的计算工具才有了较大的发展,英国数学家纳皮尔发明的"纳 皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、 乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带 动了计算器的发展,也为现代计算器发展奠定了良好的基础,进而成为了现代社应用 广泛的计算工具。 关键词:java Java平台 计算器 课设任务及要求 1.课设任务 这次课程设计选择的题目为设计一个图形界面(GUI)的计算器应用程序,完成简单 的算术运算。 这次课程设计的基本要求为设计计算器应用程序可以完成加法、减法、乘法、除 法和取余运算,且有小数点、正负号、求倒数、退格和清零功能。拓展功能根据自己的 能力添加。 这次课程设计的我选择添加的拓展功能为开平方根,平方,立方,判断素数,求lo g的功能。 本程序主要练习使用布局管理器设计一个计算器的界面,并练习使用事件监听器处 理数据的输入,并完成相关的计算。数据和运算符号的存储采用动态链表这种数据结构 实现。 这次课程设计选择的Java运行环境为: Windows XP sp3 +Eclipse+JDK 1.6 二、需求分析 1.系统功能需求分析 计算器是现在一个普遍应用的工具,能够解决许多人所无法计算的数据,节省大量 宝贵的时间。 2.系统功能分析 为了实现计算器系统的功能.主要有二个功能模块:输入、输出。 3.系统设计原则 基于计算器系统要具有适用性广、操作简便等特点.本系统预计要达到以下几个目标 : (1)、满足以上的功能要求; (2)、能够运行在常见的计算机及其配置上; 三、设计思路 1.关于布局问题 本次课程设计程序继承来自框架类(Frame),总体布局上选用布局管理器BorderLayout: (1)将单行文本框加入到"North"区域 (2)将面板panel加入到"Center"区域,同时panel包含了各种数字按钮和符号按钮。 面板panel采用Girdlayout布局,选用5行*5列,将各种按钮添加到面板panel,并增加按 钮监听事件。 布局完成后的效果图如下: 2.关于数据存储问题 计算器完成的是一个数学表达式,本次课程设计我选用的是使用链表(Linkedlist类 )来存储数字和运算符号。程序运行后,输入的所有数字及运算符号都全部存储在链表中 ,待最后运算时,再一一求出来进行计算。 3.关于事件监听的处理问题 计算器的各种按钮都需要一个对象来进行监视,以便对发生的事件做出处理。计算器 的各种按钮通过调用相应的方法将某个对象作为自己的监视器。 例如计算器中的数字按钮,其方法为: AddActionListener(监视器); 对于获取了监视器的数字按钮,通过相应的操作就导致事件的发生,并通知监视器 ,监视器就做出相应的处理。 四、详细设计 1.计算器系统主要功能模块 (1)、系统主要模块实现的功能 系统输入模块实现数字以及计算符号输入的功能,输出模块的结果在文本框中实现显 示。 (2)、系统输入窗体实现的效果 系统输入窗体设计效果如图所示: 上图为按数字键1234567890后,在文本框中的显示 (3)、系统主要模块功能描述 功能描述: 菜单项"计算器"主要服务于使用者.它包含了"输入"、"输出"、 两个功能。 输入功能:当使用者将数字输入后,出现数字的显示;当使用者将计算符号输入时 候有计算符号的录入。 输出功能:点击"输出"选项后.可实现计算的结果。 2.系统的实现 (1) 系统源文件类之间的关系 计算器系统共有3个java源文件:Calcul
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值