java课设计算器.docx

上传人:b****8 文档编号:11170619 上传时间:2023-02-25 格式:DOCX 页数:62 大小:821.14KB
下载 相关 举报
java课设计算器.docx_第1页
第1页 / 共62页
java课设计算器.docx_第2页
第2页 / 共62页
java课设计算器.docx_第3页
第3页 / 共62页
java课设计算器.docx_第4页
第4页 / 共62页
java课设计算器.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

java课设计算器.docx

《java课设计算器.docx》由会员分享,可在线阅读,更多相关《java课设计算器.docx(62页珍藏版)》请在冰豆网上搜索。

java课设计算器.docx

java课设计算器

存档资料成绩:

 

华东交通大学理工学院

课程设计报告书

 

所属课程名称Java语言程序设计

题目  简单计算器设计    

分院  电信分院   

专业班级12通信工程1班

学  号212        

学生姓名    

指导教师   

 

2014年6月20日

目 录

第1章计算器机要求与内容...........................................3

第2章计算器设计.............................................................4

第3章计算器程序代码...................................................14

第4章计算器测试.............................................................49

第5章课程设计心得.........................................................53

第6章参考文献..................................................................54

第1章计算器内容及要求

一设计内容:

1.实现基本的加减乘除法的运算;

2实现常用的函数计算功能;

3.实现将系统时间在界面上显示;

4.实现菜单对计算器的关闭、开启及设置运算法则的操作。

二设计要求

1.使用菜单控制计算器界面的显示,关闭;

2.使用菜单控制运算的法则;

3.使用菜单显示函数运算窗口及运算;

4.数据采用手工输入方式;

5.对异常的数据进行异常处理,比如1/0的情况。

 

第2章计算器设计

一.设计模式

采用MVC设计模式,将模型,视图,控制分别单独完成。

在模型中将视图,控制添加到其中,再分别完成视图的,控制的程序。

二.结构设计

在界面中分为四个视图的组件,控制分为按钮事件,菜单选择事件,以及键盘输入控制事件。

如图1

图1

在界面的布局上采用网格布局,将分别装填时间布局组件,操作模式布局组件,运算布局组件,结果布局组件。

如图3

组件上的相对应控件相应的事件分别封装按钮事件,菜单项选择事件,键盘输入事件。

选择相应的控件,产生对应的响应事件。

各组件对应控件的响应事件对应如图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)”的菜单项。

菜单使用JMenu,菜单项使用JMenuItem。

详见代码。

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()&&e.getKeyChar()<=KeyEvent.VK_9)

||(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获取时间线程组件:

Constant.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(";

 

}

 

Entry.java代码:

回到程序目录

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;

importjavax.swing.JMenuBar;

importjavax.swing.JMenuItem;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

importwgr.constant.Constant;

importwgr.event.MyButtonLisener;

import

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1