简单计算器设计java课程设计Word格式.docx
- 文档编号:19360623
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:54
- 大小:784.19KB
简单计算器设计java课程设计Word格式.docx
《简单计算器设计java课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《简单计算器设计java课程设计Word格式.docx(54页珍藏版)》请在冰豆网上搜索。
5.对异常的数据进行异常处理,比如1/0的情况。
第2章计算器设计
一.设计模式
采用MVC设计模式,将模型,视图,控制分别单独完成。
在模型中将视图,控制添加到其中,再分别完成视图的,控制的程序。
二.结构设计
在界面中分为四个视图的组件,控制分为按钮事件,菜单选择事件,以及键盘输入控制事件。
如图1
模型
时间布
局组件
操作模式
布局组件
函数运算组件
结果布
按钮
事件
菜单选
择事件
键盘输
入事件
菜单布
运算布
图1
在界面的布局上采用网格布局,将分别装填时间布局组件,操作模式布局组件,运算布局组件,结果布局组件。
如图3
组件上的相对应控件相应的事件分别封装按钮事件,菜单项选择事件,键盘输入事件。
选择相应的控件,产生对应的响应事件。
各组件对应控件的响应事件对应如图2。
图2
图3
三.代码设计
本程序共有六个包wgr.constant,wgr.entry,wgr.event,wgr.layout,wgr.otherlayout,wgr.thread。
分别用来盛装各个组件,如图4。
图4
(1)wgr.constant包中有一个Constant类用来盛放程序设计中用到的字符串常量。
例如:
加法,减法,乘法及运算符号等。
详见代码。
(2)wgr.entry包中有个一Entry类,此类是程序的入口,也是程序的模型,所有的组件都加载到这里。
此类中定义了两个方法main和loadwidge。
Loadwidge的方法获取各个组件中的控件。
然后在主方法中对获得的控件添加对应的事件处理机制。
例如JButton的点击事件,菜单选择菜单项等。
(3)wgr.event包中含有四个类分别是MyButtonLisener、MyKeyPress、
MyMenu_1_Listner、MyMenu_2_listener。
MyButtonLisener作用是按钮的点击响应,MyKeyPress作用是键盘输入数据控制的作用,防止非法的输入,MyMenu_1_Listner的作用是对计算器菜单进行选择的响应,MyMenu_2_listener的作用是对运算模式菜单进行选择的响应,MyMenu_3_listener是对选择运算函数的监听相应。
MyButtonLisener中对运算组件中的“运算”按钮与返回结果组件中的“清除”按钮进行做对应的相应。
此类中带有一个MyButtonLisener的有参数构造函数,从Entry类中得到需要操作的控件,比如获得输入框的数据,获得运行模式等。
继承了ActionListener接口,实现了actionPerformed方法,在响应“运算”按钮时对输入的数据进行了判断,判断是否可以进行运算,比如数据的不完整,在除法时不能除以0的情况进行了处理。
详见代码。
下面是点击运行时对输入的数据进行判断是否为空,当不为空时再根据计算模式进行计算。
if((textField_shuru1.getText().toString()!
=null)
&
&
(textField_shuru1.getText().toString()!
=null))
当有空时将有提示对话框
else{
JOptionPane.showMessageDialog(jFrame,"
输入的数据不可以为空"
"
警告"
JOptionPane.OK_OPTION);
}
在进行除法的运算是,会判断被除数是否为零,如果是会弹出一个提示对话框
//运算除法时需要对输入的数据进行处理,判断是否不能进行运算
if(simble.equals(Constant.DIVISION)){
if(shuru2!
=0.0){
textField_jieguo.setText(String.valueOf(shuru1
/shuru2));
}else{
JOptionPane
.showConfirmDialog(jFrame,"
输入有误,不可以除以0"
"
提示"
JOptionPane.OK_OPTION);
}
}
点击“清空”按钮时会将所有的数据清空
elseif(e.getSource().equals(button_clear)){//将数据清空的按钮
textField_shuru1.setText(null);
textField_shuru2.setText(null);
textField_jieguo.setText(null);
}
MyKeyPress是对输入框输入数据进行了处理,阻止非法的输入,此类继承了KeyListener接口,实现了keyPressed方法,此类有一个MyKeyPress含有参数的构造方法,用来获得需要的控件。
详见代码。
//构造函数,获得面板的需要进行操作的控件
publicMyKeyPress(JFrameframe,JTextFieldtextField_shuru1,
JTextFieldtextField_shuru2){
this.frame=frame;
this.textField_shuru1=textField_shuru1;
this.textField_shuru2=textField_shuru2;
}
对非法的输入将弹出提示对话框,然后清除非法的输入。
if((KeyEvent.VK_0<
=e.getKeyChar()&
e.getKeyChar()<
=KeyEvent.VK_9)
||(e.getKeyChar()==KeyEvent.VK_BACK_SPACE)
||(e.getKeyChar()==KeyEvent.VK_ENTER)
||(e.getKeyChar()==KeyEvent.VK_PERIOD)){
}else{
JOptionPane.showConfirmDialog(frame,"
输入有误"
JOptionPane.OK_CANCEL_OPTION);
MyMenu_1_Listner是对计算器菜单进行选择的操作事件,此类继承了ActionListener接口,实现actionPerformed了方法。
对“开启计算器”,“关闭计算器”,“退出”的菜单项进行了实现。
选择“开启计算器”时,就将运算模式组件,运算组件,返回结果组件的setVisible设为true实现“开启计算器”功能。
if(e.getSource().equals(menuitem_start)){
//将模板组件隐藏
panel_2_method.setVisible(true);
panel_3_commond.setVisible(true);
panel_4_result.setVisible(true);
menu.setVisible(true);
menu2.setVisible(true);
}
同理,单击“关闭计算器”时,就将运算模式组件,运算组件,返回结果组件的setVisible设为false实现“关闭计算器”功能。
选择“退出”时,将退出程序,同时将获取时间的线程中断。
//退出程序
if(e.getSource().equals(menuItem_exit)){
TimeThread.setSTATE(false);
jFrame.dispose();
MyMenu_2_listener是对计算器的运算法则进行设置,该类继承了ActionListener接口,实现actionPerformed了方法。
该类有一个MyMenu_2_listener有参数的构造方法,获得需要操作的显示运算法则的控件及菜单项。
MyMenu_3_listener是对计算器的函数运算进行设置,该类继承了ActionListener接口,实现actionPerformed了方法。
该类有一个MyMenu_3_listener有参数的构造方法,获得需要操作菜单项。
详见代码。
(4)wgr.layout包中是组件的布局,其中含有Commond_layout、Model_layout、MyMenu1、MyMenu2、Result_layout、Time_layout六个类的布局组件。
Commond_layout是运行数据的组件,其中有JLabel,JTextField,JButton,JPanel详见代码。
JPanel使用FlowLayout布局,将JLabel,JTextField,JButton加入JPanel中,效果如上图。
Model_layout是显示运行模式的布局组件,Jpanel使用GridLayout的布局,其中有2个JLabel,分别是当前“当前操作模式:
”和显示运算法则的JLabel。
详见代码。
MyMenu1、MyMenu2、MyMenu3都是菜单,MyMenu1是“计算器”菜单里面含有“开启计算器”、“关闭计算器”、“退出”的菜单项。
MyMenu2是“计算模式”菜单,里面含有“加法”、“减法”、“乘法”、“除法”的菜单项。
菜单使用JMenu,菜单项使用JMenuItem。
MyMenu3是“函数”菜单,里面含有“sin(x)”、“cos(x)”、“tan(x)”、“ln(x)”、“sqrt(x)”的菜单项。
详见代码。
Result_layout是显示运算结果的布局组件,Jpanel使用FlowLayout的布局,Jpanel中加入JLabel、JTextField、JButton的控件。
详见代码。
JLabel是“结果”的控件,JTextField用来显示得到的结果,JButton是“清除”的按钮,作用是将输入的输入与输出的数据清空。
Time_layout是显示时间的布局组件,Jpanel使用FlowLayout的布局,Jpanel中加入两个JLabel的控件。
分别“显示时间”,另一个是将系统的时间显示在另一个JLabel上。
详见代码。
(5)wgr.otherlayout包中含有一个Hanshu_layout的类,该是是显示函数运算的窗口,并且还有输入框的键盘输入监听事件。
还对输入的数据进行的控制。
以防止非法的数据输入,运算产生错误。
该类是根据获得函数类型进行相应的运算。
publicvoidkeyPressed(KeyEvente){
if((KeyEvent.VK_0<
||(e.getKeyChar()==KeyEvent.VK_BACK_SPACE)
||(e.getKeyChar()==KeyEvent.VK_ENTER)
||(e.getKeyChar()==KeyEvent.VK_PERIOD)){
if(e.getKeyChar()==KeyEvent.VK_PERIOD){
}elseif(!
field.getText().toString().equals(null)
&
(e.getKeyChar()==KeyEvent.VK_ENTER)){
doubled=Double.parseDouble(field.getText()
.toString());
if(MyMenu_3_listener.getString()==Constant.F_Sin){
field2.setText(String.valueOf(Math.sin(d)).substring(0,5));
if(MyMenu_3_listener.getString()==Constant.F_Cos){
field2.setText(String.valueOf(Math.cos(d)).substring(0,5));
if(MyMenu_3_listener.getString()==Constant.F_Tan){
field2.setText(String.valueOf(Math.tan(d)).substring(0,5));
if(MyMenu_3_listener.getString()==Constant.F_Sqrt){
field2.setText(String.valueOf(Math.sqrt(d)));
if(MyMenu_3_listener.getString()==Constant.F_Log){
field2.setText(String.valueOf(Math.log(d)).substring(0,5));
}elseif(e.getKeyChar()==KeyEvent.VK_BACK_SPACE){
field.setText(null);
field2.setText(null);
;
}else{
JOptionPane.showConfirmDialog(frame,"
JOptionPane.OK_CANCEL_OPTION);
//如果输入了非法的数据,将非法输入的数据删除掉
field.setText(field
.getText()
.toString()
.substring(0,
field.getText().toString().length()-1));
}
(6)wgr.thread包中只含有一个TimeThread类,该类继承了Thread。
该类有一个TimeThread有参数的构造方法,用来获得Time_layou中的显示系统时间的Jlabel。
publicTimeThread(JLabellabel){
jLabel=label;
该类重写了run方法,获得系统的时间,将时间显示获得的jlabel上。
publicvoidrun(){
super.run();
while(true){
//当程序退出时,使此线程中断
if(isSTATE()){
jLabel.setText(time.format(newDate()));
elsebreak;
此类还有一个来获取程序是否推退出的的方法setSTATE,如果程序退出了,将会得到false,线程的run方法就会终止。
publicstaticbooleanisSTATE(){
returnSTATE;
publicstaticvoidsetSTATE(booleansTATE){
STATE=sTATE;
第3章计算器程序代码
(1)常量包:
Constant.java代码:
(2)模型包,即入口包
Entry.java代码:
(3)响应事件包:
MyButtonLisener.java按钮响应事件:
MyKeyPress.java键盘输入事件:
MyMenu_1_Listner.java计算机菜单选择事件:
MyMenu_2_listener.java操作模式菜单选择事件:
MyMenu_3_listenerjava操作函数运算选择事件:
(4)各个界面布局组件包:
Commond_layout.java运算布局组件:
Model_layout.java显示运算模式布局组件:
MyMenu1.java计算器菜单组件:
MyMenu2.java运算模式菜单组件:
MyMenu3.java函数运算菜单组件:
Result_layout.java运算结果布局组件:
Time_layout.java显示时间布局组件:
(5)函数运算包
Hanshu_layout.java函数运算窗口:
(6)获取事件线程包:
TimeThread.java获取时间线程组件:
回到程序目录
packagewgr.constant;
publicclassConstant{
//菜单一的常量
publicstaticfinalStringCOUNTER="
计算器"
;
publicstaticfinalStringSTART="
启动计算器"
publicstaticfinalStringCLOSE="
关闭计算器"
publicstaticfinalStringEXIT="
退出"
//运算的常量,也是菜单2的常量
publicstaticfinalStringMODEL="
运算模式"
publicstaticfinalStringADDITION="
加法"
publicstaticfinalStringSUBDUCTION="
减法"
publicstaticfinalStringMULTIPLICATION="
乘法"
publicstaticfinalStringDIVISION="
除法"
//运算模式符号
publicstaticfinalStringADDITION_SYMBOL="
+"
publicstaticfinalStringSUBDUCTION_SYMBOL="
—"
publicstaticfinalStringMULTIPLICATION_SYMBOL="
*"
publicstaticfinalStringDIVISION_SYMBOL="
/"
//函数字符串
publicstaticfinalStringFX="
函数"
publicstaticfinalStringF_Cos="
Cos(X)"
publicstaticfinalStringF_Sin="
Sin(X)"
publicstaticfinalStringF_Tan="
Tan(X)"
publicstaticfinalStringF_Log="
Ln(X)"
publicstaticfinalStringF_Sqrt="
Sqrt(X)"
publicstaticfinalStringF_Cos_SYMBOL="
Cos("
publicstaticfinalStringF_Sin_SYMBOL="
Sin("
publicstaticfinalStringF_Tan_SYMBOL="
Tan("
publicstaticfinalStringF_Log_SYMBOL="
Ln("
publicstaticfinalStringF_Sqrt_SYMBOL="
Sqrt("
packagewgr.entry;
importjava.awt.GridLayout;
importjava.awt.Toolkit;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
impo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 计算器 设计 java 课程设计