计算器课程设计.docx
计算器课程设计 枣庄学院 信息科学与工程学院 课程设计任务书 题目:计算器的设计与实现 学号:202212220241 姓名:赵文正 专业:计算机应用技术 课程:java程序设计 指导教师:刘梦琳职称:讲师 完成时间:2022年月-2022 年月枣庄学院信息科学与工程学院制 课程设计任务书及成绩评定 目录 一.课程设计研究背景及意义 (4) 二.课程设计题目描述和要求 (4) 三.设计思路 (4) 四.课程设计报告内容 (5) 1、题目求解的理论依据及算法 (5) 2、数据结构: (6) 3、主要事件处理: (6) 4、简要的设计流程: (7) 5、代码 (7) 五、运行结果 (24) 六、总结: (24) 一.课程设计研究背景及意义 这次课程设计是通过JAVA编程来实现计算器的功能。以前,人们用来计算的工具不管从方便的角度还是速度的角度来看都不及现代计算器,计算器的发明是人类进步的有力证明。电子技术的不断发展使得计算器的功能不断的完善。人们通过使用计算器来提高自己的工作效率,计算器是高科技的产物,是以往任何时代都无法比拟的。在二十一世纪的今天,计算器依然是人们重要的计算工具,所以,对计算器的研究的课程设计具有重大意义。 本次课程设计题目主要应用到JAVA面向对象程序设计语言中Swing组件和GUI(图形用户界面)当中的一些知识,当然也用到JAVA中大部分基础知识,如JAVA的基本控制结构、数组、输入与输出等等。 二.课程设计题目描述和要求 通过JAVA中的Swing组件来制作一个计算器的界面包括09的十个数字按键,小数点键,+-*/开方百分比,倒数运算符键,=运行符键以及M 组合键等。以及实现计算器的一些基本的计算功能。这个模拟计算器能进行连加,连减,连乘,连除,求二次平方根,求百分比,求倒数以及负数运算等操作。 要求界面逼真,按键布局美观,要求实现加、减、乘、除等基本计算功能 三.设计思路 本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入相应区域,包含各种按纽的面板buttonpanel加入相应区域 还可以将进制转换的面板与单行文本框放一块 包含各种按纽的面板buttonpanel采用N行N列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中,同时注册按钮事件监听器日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。本 项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面简洁适用;要提供主要的设计思路、类的设计,本次设计添加转进制等功能 四.课程设计报告内容 1、题目求解的理论依据及算法 解题原理: (1)界面布局。创建一个面板,先将所有按钮:所有数字键和运算符键 等放在面板上,采用网格布局,具体设计为4行,5列的网格,二十个格子;接着添加一个1行3列的网格布局来放置三个功能键:清零,检测,退格键;然后,再添加一个5行一列的网格布局来放置四个M组合功能键和一个空键,其目的在于美化界面,使其与现实中的计算器更接近,同时也是为了满足这次课程设计的要求。最后,对以上三个面板,采用 BorderLayout布局,将按键面板放在计算器的中部,功能键面板放北部,作为一个新的面板。最后,将文本框放在界面的北部,新面板放在界面的中央,MKpanel放在界面的西部,采用边界布局管理器,做为界面的整体布局,这样界面布局就搞定了。 (2)输入数字、小数点、符号时按输入的顺序显示在单行文本框中,并 按右对齐方式显示,且不允许修改文本行中的内容。 (3)输入运算符时,说明前一个数已经输入完毕,保存第一个数 firstDigit,同时保存运算符,显示firstDigit。 (4)输入第二个数,按等号,保存第二数,根据输入的运算符进行相应 的运算,文本行中显示运算结果resultNum。 (5)按退格键Backspace,将返回到前一次输入状态。 (6)按Check键,输入的数字第一个数字为零。 (7)按复位键键Again,归零。 (8)由于M组合键没有实现其功能,所以暂不能用,待更进一步研究。 (8)第三、四步可以重复操作。 2、数据结构: 面板:数字等按键面板calckeysPanel,功能键面板calmsPanel,M组合键面板MKpanel,组合面板panel1,整体布局:top 第一个数firstDigit,运算结果resultNum,运算符operator,文本行组件result 3、主要事件处理: 1、数字输入及小数点事件,输入后直接显示在文本行。 2、双目运算符输入事件:输入后,保存第一个数,同时保存运算符。 3、单目运算符和等于符=输入事件:保存第二个数,取出原有数据和 运算符算出结果,并显示在文本行组件。 4、处理Backspace键被按下事件。 5、以上几类事件都归为行为类对象ActionListener. 负责部分的主要事件处理: 1、“+”,“-”,“*”,“/”四个双目运算符被按下,当前面没有输 入第一个数时,或当按下双目运算符后没输入第二个数就按下“=” 符,计算器不做任何反应。只有等按规则输入数字时才按正确运 算输出结果。 2、“sqrt”,“%”,“1/x”,“+/-”四个单目运算符被按下,只有 当前面输入一个数后按下单目运算符键再按“=”,才输出正确结 果。而“+/-”第一次按下时执行,第二次按下时取消。 4、简要的设计流程: 5、代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator extends Frame implements ActionListener, WindowListener private Container container; private GridBagLayout layout; private GridBagConstraints constraints; private JTextField displayField; /计算结果显示区private String lastCommand; /保存+,-,*,/,=命令0 private double result; /保存计算结果 private boolean start; /判断是否为数字的开始private JMenuBar menubar; private JMenuItem m_exit,m2_ejz,m2_bjz; private Dialog dialog; private Label label_dialog; private JButton button_sqrt,button_plusminus,button_CE,button_cancel,button _1,button_2, button_3,button_4,button_5,button_6,button_7,button_8,butto n_9,button_0, button_plus,button_minus,button_multiply,button_divide,butt on_point, button_equal,button_log,button_tan,button_cos,button_sin,bu tton_exp; public Calculator() /构造方法设置布局、为按钮注册事件监听器 super("Calculator"); this.setLocation(240,200); this.setSize(350,300); this.setResizable(true); this.setLayout(new GridLayout(7,1); this.addmyMenu(); /调用成员方法添加菜单displayField=new JTextField(30); this.add(displayField); displayField.setEditable(true); start=true; result=0; lastCommand = "=" JPanel panel0=new JPanel(); panel0.setLayout(new GridLayout(1,4,4,4); JPanel panel1=new JPanel(); panel1.setLayout(new GridLayout(1,5,4,4); this.add(panel1); button_sqrt=new JButton("sqrt"); button_plusminus=new JButton("+/-"); button_exp=new JButton("exp"); button_CE=new JButton("退格"); button_cancel=new JButton("C"); JPanel panel2=new JPanel(); panel2.setLayout(new GridLayout(1,5,4,4); this.add(panel2); button_7=new JButton("7"); button_8=new JButton("8"); button_9=new JButton("9"); button_log=new JButton("log"); button_divide=new JButton("/");