Java程序设计实验报告计算器.doc

上传人:文库蛋蛋多 文档编号:2386907 上传时间:2023-02-17 格式:DOC 页数:18 大小:228KB
返回 下载 相关 举报
Java程序设计实验报告计算器.doc_第1页
第1页 / 共18页
Java程序设计实验报告计算器.doc_第2页
第2页 / 共18页
Java程序设计实验报告计算器.doc_第3页
第3页 / 共18页
Java程序设计实验报告计算器.doc_第4页
第4页 / 共18页
Java程序设计实验报告计算器.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《Java程序设计实验报告计算器.doc》由会员分享,可在线阅读,更多相关《Java程序设计实验报告计算器.doc(18页珍藏版)》请在三一办公上搜索。

1、 Java程序设计实验报告题 目 计算器 姓 名 学 号 学 院 软件学院 专 业 软件工程 年 级 2009 级 指导教师 2010年 4 月 9 日一、实验目的1、 熟练掌握java面向对象编程。2、 选择合适的数据结构实现需求。3、 熟练使用各种控制结构。4、 掌握GUI组件、事件处理技术。二、实验任务1、 设计一个简易的计算器,可以进行四则运算:加、减、乘、除等(限于十进制下)程序要求:(1)应具有相应的界面,可参考下图进行设计: 图示1 图示2(2)操作符号定为:“+”,“-”,“*”,“/”,“(”,“)”等。(按国际惯例设计)(3)用户通过点击面板中的各种组件输入的表达式,应在上

2、方文本框中显示。(4)当用户点击“=”时,文本框中之前的内容应清空,直接显示表达式运算结果。例如:输入表达式“3+2*(8-5)”之后按“=”,显示结果“9”。(5)具有菜单栏,内有相应的编辑“复制”、“粘贴”等菜单,提供相应的功能。(6)以上部分为必须完成的内容。2、选作功能,可参考windows系统附带计算器: (1)具有相应的科学计算功能。例如“图示2”中的各种科学计算功能。三、开发工具与平台1.开发工具:Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只 是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。如C/C+插件(CDT

3、)。2.开发平台:JDK1.5四、设计思路1.界面设计 (1)制作一个简单的面板JFrame,在其上面添加构造界面所需的各种组件其构造方法为:calculate()super();this.setBounds(10, 10, 300, 250);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setTitle(计算器);init();/创建菜单及各种组件(如按钮,文本框等)getContentPane().setLayout(new BorderLayout(3,3);getCo

4、ntentPane().add(panelCenter,BorderLayout.CENTER);getContentPane().add(panelNorth,BorderLayout.NORTH);(2)实现构造菜单及文本框等组件的函数init(),如下实现:Public void Init()/菜单项的构造形成; editor.add(copy);editor.addSeparator();editor.add(paste); editor.setMnemonic(E);look.setMnemonic(V);help.setMnemonic(H); copy.setAccelerato

5、r(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK); paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK); help.add(about); bar.add(editor);bar.add(look);bar.add(help); setJMenuBar(bar);/将菜单添加到JFrame; /* 接下来是文本或结果显示区及Backspace、功能键(CE、C)和的添加,采用 GridBagLayout布局方式,将它

6、们放在北部panelNorth面板。 其次,是数字键及其他功能键的的使用,我这里采用的是网格布局,setLayout(new GridLayout(4,6,5,5);将它们放在主面板中心区域。 这里给出网格包布布局的两个重要方法,由于代码段较长,故将其他的代码放在后面附录;private void makeShow(GridBagLayout gridBag,GridBagConstraints constraints, Component component) gridBag.setConstraints(component, constraints);/ 网格包布布局; panelNort

7、h2.add(component);private void addButton(GridBagLayout gridBag,/网格包布布局重要方法;GridBagConstraints constraints, Component component) gridBag.setConstraints(component, constraints); panelNorth1.add(component);总体界面如下:2.逻辑设计 为了能够得到我们想要的操作,比如让那些数字参与运算,做什么运算等等,我们就需要为每个按钮添加响应事件,通过响应事件来完成我们预期的结果。以下我们来分析下重要的事件是如

8、何响应的:.String str = e.getActionCommand();/ TODO Auto-generated method stubif(str.equals(Backspace)/点击 BackspacehanderBackspace();else if(str.equals(CE)/点击了CE的功能是清除当前显示的数值bool = false;show.setText(0);else if(str.equals(C)/点击了C的功能是清零copyText=;Div = 0.0;CalculateResult =;bool = false;show.setText(0);els

9、e if(str.equals(MC)/MC清楚存储器内容handerMC();else if(str.equals(MR)/MR将存于存储器的值显示在文本框中handerMR();else if(str.equals(MS)/MS将显示框得文字存于存储器handerMS();else if(str.equals(M+)/M+将显示框的数与存储器中的数相加并进行存储handerM();else if(0123456789.indexOf(str)=0)/按下的是数字键或者小数点正负号handerCenter(str);else if(str.equals(%)/将当前显示框里的数字用百分比表示

10、( x/100)String current = show.getText();double a = 0;if(!current.isEmpty() a = Double.parseDouble(current); Double result =(Double) a/100; String s4 = result.toString(); if(!isInt(s4) show.setText(s4);else show.setText(s4.substring(0,s4.indexOf(.); bool = true; else handerOperation(str);/响应的是运算符;处理运

11、算符操作3. 程序测试 程序测试过程中无较大BUG,基本上轻松搞定。五、实验总结 这是我第一次正式的java程序设计实验,感觉能够把学到的东西用到实际中是件非常有趣的事,更重要的是让我们真正明白了学贵致用的道理。 由于时间有限,本程序未能做到科学计算器,同时在这里也感谢老师的指导和同学的帮助。六、 附录public class calculate extends JFrame implements ActionListener /* * param args */private JMenuBar bar = new JMenuBar();private JMenu editor =new JM

12、enu(编辑(E);private JMenuItem copy =new JMenuItem(复制);private JMenuItem paste =new JMenuItem(粘贴);private JMenu look = new JMenu(查看(V);private JMenu help = new JMenu(帮助(H);private JMenuItem about = new JMenuItem(关于);private String copyText ;private JPanel panelWest= new JPanel();private JPanel panelCen

13、ter = new JPanel();/放Number键private JPanel panelNorth = new JPanel();/放功能键1与文本框private JPanel panelNorth1 = new JPanel();private JPanel panelNorth2 = new JPanel();/放显示框private JPanel panelEast = new JPanel();/放运算键;private String strNorth = new StringBackspace,CE,C;/功能键1private String strCenter = new

14、 String7,8,9,4,5,6,1,2,3,0,+/-,.;private String strEast = new String/,sqrt,*,%,-,1/x,+,=;private StringstrWest = new StringMC,MR,MS,M+;private JButton buttonCenter = new JButtonstrCenter.length;private JButton buttonEast= new JButtonstrEast.length;private JButton buttonNorth = new JButtonstrNorth.le

15、ngth;private JButton buttonWest = new JButtonstrWest.length;private String ch=new String();/保存当前运算符private Double Div;/保存中间运算数private String save = new String();/保存存储器中的数值private String CalculateResult= new String() ;/保存运算结果private boolean bool = false;/当前结果是否为运算结果private JTextField show = new JText

16、Field(0,24);/输出显示private JTextField label;private GridBagLayout gridBag = new GridBagLayout();/网格包布布局;private GridBagConstraints constraints = new GridBagConstraints();calculate()super();this.setBounds(10, 10, 300, 250);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);thi

17、s.setTitle(计算器);init();getContentPane().setLayout(new BorderLayout(3,3);getContentPane().add(panelCenter,BorderLayout.CENTER);getContentPane().add(panelNorth,BorderLayout.NORTH);public void init() editor.add(copy);editor.addSeparator();editor.add(paste); editor.setMnemonic(E);look.setMnemonic(V);hel

18、p.setMnemonic(H); copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK); paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK); help.add(about); bar.add(editor);bar.add(look);bar.add(help); setJMenuBar(bar); copy.addActionListener(this); paste.addAc

19、tionListener(this); about.addActionListener(this); panelNorth1.setLayout(gridBag);/ panelNorth2.setLayout(gridBag); show.setHorizontalAlignment(JTextField.RIGHT);/右对齐; show.setEditable(false); panelNorth.setLayout(new BorderLayout(); panelNorth.add(show,BorderLayout.NORTH); show.setBorder(new BevelB

20、order(BevelBorder.LOWERED);/让显示框凹陷下去 show.setBackground(Color.WHITE); /网格包布布局; constraints.gridx = 0; constraints.gridy = 0; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.CENTER; makeShow(gridBag,constraints,show); /* /设置箱式布局间隔 (另一种布局方式) * / box.add(label); for(

21、int i = 0;istrNorth.length;+i) buttonNorthi = new JButton(strNorthi); box.add(Box.createHorizontalStrut(10); box.add(buttonNorthi); buttonNorthi.addActionListener(this); buttonNorthi.setForeground(Color.RED); */ label = new JTextField(2); label.setEditable(false); label.setBorder(new BevelBorder(Bev

22、elBorder.LOWERED);/让文本框凹陷下去; constraints.gridx = 0; constraints.gridy = 0; constraints.fill = GridBagConstraints.NONE; constraints.insets = new Insets(10,5,10,10); addButton(gridBag,constraints,label); for(int j = 0;jstrNorth.length;+j) buttonNorthj = new JButton(strNorthj); buttonNorthj.addActionLi

23、stener(this); buttonNorthj.setForeground(Color.RED); constraints.gridx =j+1 ; constraints.gridy = 0; addButton(gridBag,constraints,buttonNorthj); panelNorth.add(panelNorth1,BorderLayout.CENTER); panelNorth.add(panelNorth2,BorderLayout.NORTH); panelCenter.setLayout(new GridLayout(4,6,5,5); for(int i

24、=0;istrWest.length;+i) buttonWesti = new JButton(strWesti); buttonWesti.setBorder(new BevelBorder(BevelBorder.RAISED); buttonWesti.setForeground(Color.RED); buttonWesti.addActionListener(this); for(int i =0;istrCenter.length;+i) buttonCenteri = new JButton(strCenteri); buttonCenteri.setBorder(new Be

25、velBorder(BevelBorder.RAISED); buttonCenteri.setForeground(Color.BLUE); buttonCenteri.addActionListener(this); for(int i =0;istrEast.length;+i) buttonEasti = new JButton(strEasti); buttonEasti.setBorder(new BevelBorder(BevelBorder.RAISED); buttonEasti.addActionListener(this); if(i%2=0|(i=7) buttonEa

26、sti.setForeground(Color.RED); else buttonEasti.setForeground(Color.BLUE); int w =0,e = 0, c = 0; for(int i = 0;i24;) if(i%6=0) buttonWestw.setBorder(new LineBorder(Color.GRAY); panelCenter.add(buttonWestw); +i; +w; else for(int j = 0;j3;+j) buttonCenterc.setBorder(new LineBorder(Color.GRAY); panelCe

27、nter.add(buttonCenterc); +i; +c; for(int j = 0;j=0)/按下的是数字键或者小数点正负号handerCenter(str);else if(str.equals(%)/将当前显示框里的数字用百分比表示( x/100)String current = show.getText();double a = 0;if(!current.isEmpty() a = Double.parseDouble(current); Double result =(Double) a/100; String s4 = result.toString(); if(!isI

28、nt(s4) show.setText(s4);else show.setText(s4.substring(0,s4.indexOf(.); bool = true; else handerOperation(str);private void handerMC() save = ;/ TODO Auto-generated method stublabel.setText();private void handerMR() if(!save.isEmpty() if(!isInt(save) show.setText(save); else show.setText(save.substr

29、ing(0,save.indexOf(.); private void handerMS() save = show.getText();/ TODO Auto-generated method stubprivate void handerM() String str = show.getText();/ TODO Auto-generated method stubdouble s=0,v=0;if(!str.isEmpty()&!save.isEmpty() s= Double.parseDouble(str); v = Double.parseDouble(save);save = S

30、tring.valueOf(s+v);label.setText(M);private void handerCenter(String str) String result = show.getText();if(str.equals(.)if(!(result.indexOf(.)=0)/判断是否已存在小数点if(bool)show.setText();result=;result+=str;show.setText(result);bool = false;String num = result;if(*-+/.indexOf(ch)=0) handerResult(ch,num); e

31、lse if(result.equals(0)result=str;show.setText(result);bool = false;String num = result;if(*-+/.indexOf(ch)=0)handerResult(ch,num); else if(bool)show.setText();/文本框不为0.既有数字或者0和小数点result = ;result+=str;show.setText(result);bool = false;String num = result;/保存if(*-+/.indexOf(ch)=0) handerResult(ch,num

32、); private void handerOperation(String str) String result = show.getText();if(str.equals(+/-)/处理正负号 if(result.indexOf(-)=0) StringBuffer e = new StringBuffer(result); e.deleteCharAt(0); show.setText(e.toString(); String num = e.toString(); if(*-+/.indexOf(ch)=0) handerResult(ch,num); else StringBuffer e = new StringBuffer

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号