1、JAVA课程设计报告书JAVA课程设计报告书院(系):计算机科技与技术学院年级专业: 指导老师: 学生姓名: 学生学号: 程序名称: 简易计算器开始时间:完成时间:目录:1. 需求分析2. 主要函数说明3. 特点算法4. 程序缺陷5. 使用说明6. 课程设计小结7. 程序源代码8.参考文献(JAVA5.0API,XX知道)一、需求分析:本程序是一简易实用的计算器,能对四则运算,及开根号、求倒数、百分数进行运算. 具体如下:序号 文件名 主要功能 1. + 加法 2 . - 减法 3. * 乘法 4. / 除法 5 . 根号 求平方根 6 . 倒数 求倒数 7. % 百分数 8. = 等于 9.
2、 CE 将当前文本框内数据清除 10. C 文本框内数据清除11. Backspace 撤销上次操作二、函数说明: main函数:主函数,整个程序的灵魂。 windowClosing()函数:用来实现单击窗口上的“X”符号退出程序。 actionListener()函数 与actionPerformed()函数:“监听器”用来实现各种事件,是所有事件的总控制函数,用于对捕捉到的事件进行处理. 三、特点算法: 1. 本程序可以实现连续三个以上数的计算,例如:输入3+3+3后,点击等号将输出9。2. 解决了输入多位数计算和计算精度的问题3. 在设计数字事件时,为避免数字事件代码重复出现,写了一个数
3、字事件函数给予每个数字事件的调运.四、程序缺陷:1、在制作此程序设计时,没有对该计算器的计算功能再扩展,如科学计算器,三角函数,反三角函数的计算等。2. 由于知识,时间有限,未能在计算器中实现MC,MR等功能。3、 在调试过程中,因为掌握的java知识及时间有限,因此自身无法实现连加、连减、连乘、连除的功能,此功能的实现参照了网络上的部分运算代码,出处:XX知道。4、在制作此程序设计时,因为没有特别了解java的功能,所以在制作过程中有许多的不足,后经过对程序中的成员变量及程序的设计有了一定的了解;五、使用说明: 1. 先参见上面需求分析中的各个按键功能. 2. 然后输入数据,单击个按钮, 最
4、后按“=”键实现结果。 3. 单击窗口上的“X”符号退出程序.六、课程设计小结及心得体会: 在此次java课程设计过程中,通过3,4天时间我们把一学期所学到的知识用于实践,设计一个属于我们自己的计算器.在这个过程中遇到了一些问题,但是也收获了很多. 1,整个计算器的布局是个考验.为了使得布局完美,我们将所学的各种布局管理器进行调试并设计,然后采用BorderLayout及flowLayout与GriderLayout布局管理器的综合布局,最终决定方案(此程序布局参考微软系统自带计算器布局)。 2,在实现计算器的计算和输入功能时,如何输入一位以上的数据进行计算成了一个障碍;在如何进行连续的3次以
5、上的连续运算也遇到了极大的困难,最后此运算算法参考了网上的编程网友的算法。 3,在设计小数点时,如何输入小数及只能输入一个小数点上也被遇到了困难.最后在老师的帮助下实现了此功能。 4,在实际运行中还有很多问题,通过一次次试验,最终完善了此计算器上的算法(比如负数开根号时,分母为0时,连续按功能键出错等)。 总之,通过这次java课程设计实践,使我们对这学期所学的java知识有了一个系统的了解并将其付诸于实践,其实更是一次彻底的大复习,使我们对JAVA这门语言有了更深入的了解并且这次借机会还很好的锻炼了我们的团队合作能力。七、程序源代码: import java.awt.*;import jav
6、ax.swing.*;import java.awt.event.*;import java.text.DecimalFormat;public class work1 implements ActionListener /导入动作监听接口 /设计面板中的单位 JFrame frame; JTextField textAnswer; JPanel panel, panel1, panel2, panel3; JMenuBar mainMenu; JLabel labelMemSpace; /labelMemSpace/控制面板的形状 JButton buttonBk, buttonCe, bu
7、ttonC; JButton button; JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul, buttonDiv, buttonMod,buttonSqrt, buttonDao, buttonEqual; JMenu makerMenu; JMenuItem makerItem; DecimalFormat df; /设置数据输出精度 boolean clickable; /控制当前能否按键 double vard, answerd; /用来保存double型数据的中间值(vard)和最后结果(answ
8、erd) short key = -1, prekey = -1; /key用来保存当前进行何种运算,prekey用来保存前次进行何种运算 JTextArea maker; /制作者 /构造函数 public work1() clickable = true; answerd = 0; frame = new JFrame(DIY计算器); df = new DecimalFormat(0.#); /设置数据输出精度,小数点后10位(对于double型值) textAnswer = new JTextField(16); textAnswer.setText(); textAnswer.set
9、Editable(false); textAnswer.setBackground(Color.white); panel = new JPanel(); frame.getContentPane().add(panel); panel1 = new JPanel(); panel2 = new JPanel(); panel.setLayout(new BorderLayout(); /设计整个面板 mainMenu = new JMenuBar(); makerMenu = new JMenu(制作者(Maker); makerItem = new JMenuItem(xxx,xxx );
10、 makerItem.addActionListener(this); makerMenu.add(makerItem); mainMenu.add(makerMenu); panel.add(mainMenu, BorderLayout.NORTH); panel.add(textAnswer, BorderLayout.CENTER); panel.add(panel1, BorderLayout.SOUTH); panel1.setLayout(new BorderLayout(); labelMemSpace = new JLabel( JAVA课程小设计 ); buttonBk =
11、new JButton(Backspace); buttonCe = new JButton(CE); buttonC = new JButton(C); buttonBk.addActionListener(this); buttonCe.addActionListener(this); buttonC.addActionListener(this); panel1.add(panel2, BorderLayout.NORTH); panel2.setLayout(new FlowLayout(FlowLayout.RIGHT); panel2.add(labelMemSpace); pan
12、el2.add(buttonBk); panel2.add(buttonCe); panel2.add(buttonC); panel3 = new JPanel(); panel1.add(panel3, BorderLayout.CENTER); button = new JButton10; for (int i = 0; i button.length; i+) buttoni = new JButton(Integer.toString(i); buttonDot = new JButton(.); buttonAddAndSub = new JButton(+/-); button
13、Add = new JButton(+); buttonSub = new JButton(-); buttonMul = new JButton(*); buttonDiv = new JButton(/); buttonMod = new JButton(%); buttonSqrt = new JButton(根号); buttonDao = new JButton(倒数); buttonEqual = new JButton(=); /将所有行为与监听绑定 panel3.setLayout(new GridLayout(4, 5); panel3.add(button7); butto
14、n7.addActionListener(this); panel3.add(button8); button8.addActionListener(this); panel3.add(button9); button9.addActionListener(this); panel3.add(buttonDiv); buttonDiv.addActionListener(this); panel3.add(buttonSqrt); buttonSqrt.addActionListener(this); panel3.add(button4); button4.addActionListener
15、(this); panel3.add(button5); button5.addActionListener(this); panel3.add(button6); button6.addActionListener(this); panel3.add(buttonMul); buttonMul.addActionListener(this); panel3.add(buttonMod); buttonMod.addActionListener(this); panel3.add(button1); button1.addActionListener(this); panel3.add(but
16、ton2); button2.addActionListener(this); panel3.add(button3); button3.addActionListener(this); panel3.add(buttonSub); buttonSub.addActionListener(this); panel3.add(buttonDao); buttonDao.addActionListener(this); panel3.add(button0); button0.addActionListener(this); panel3.add(buttonAddAndSub); buttonA
17、ddAndSub.addActionListener(this); panel3.add(buttonDot); buttonDot.addActionListener(this); panel3.add(buttonAdd); buttonAdd.addActionListener(this); panel3.add(buttonEqual); buttonEqual.addActionListener(this); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) Sys
18、tem.exit(0); ); frame.pack(); frame.show(); /设置各个按钮行为 public void actionPerformed(ActionEvent event) Object temp = event.getSource(); try /如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后 for (int i = 0; i = 9; i+) if (temp = buttoni & clickable = true) textAnswer.setText(textAnswer.getText() + Integer.toString(i)
19、; /按下.按钮时,判断当前文本框内字符串中含不含.,如果已含,则不允许再插入. if (temp = buttonDot & clickable = true) boolean isDot = false; if (textAnswer.getText().length() = 0) isDot = true; for (int i = 0; i textAnswer.getText().length(); i+) if (. = textAnswer.getText().charAt(i) isDot = true; break; if (isDot = false) textAnswer
20、.setText(textAnswer.getText() + .); if ( (temp = buttonAdd | temp = buttonSub | temp = buttonMul | temp = buttonDiv) & clickable = true) /+操作 if (temp = buttonAdd) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getT
21、ext(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(小学知识还给老师了?_除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(te
22、xtAnswer.getText(); textAnswer.setText(); prekey = key = 0; /-操作 if (temp = buttonSub) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); bre
23、ak; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(小学知识还给老师了?_除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 1; /*操作 if (temp = b
24、uttonMul) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setTe
25、xt(小学知识还给老师了?_除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 2; /操作 if (temp = buttonDiv) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.get
26、Text(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(小学知识还给老师了?_除数不能为零); clickable = false; else answerd /= Double.parseDouble(t
27、extAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 3; /=操作 if (temp = buttonEqual & clickable = true) /如果连续按=,则进行连续运算 if (prekey = 5) if (key = 0) answerd += vard; textAnswer.setText(df.format(answerd); if (key = 1) answerd -=
28、 vard; textAnswer.setText(df.format(answerd); if (key = 2) answerd *= vard; textAnswer.setText(df.format(answerd); if (key = 3) if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(小学知识还给老师了?_除数不能为零); clickable = false; else answerd /= vard; textAnswer.setText(df.format(answerd); else
29、 vard = Double.parseDouble(textAnswer.getText(); if (key = 0) prekey = -1; answerd += Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd); if (key = 1) prekey = -1; answerd -= Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd); if (key = 2) prekey = -1; answerd *= Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd);