面向对象程序设计课程设计java设计一个计算器.doc_第1页
面向对象程序设计课程设计java设计一个计算器.doc_第2页
面向对象程序设计课程设计java设计一个计算器.doc_第3页
面向对象程序设计课程设计java设计一个计算器.doc_第4页
面向对象程序设计课程设计java设计一个计算器.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计(大作业)报告课程名称: 面向对象程序设计课程设计 设计题目: 计算器的设计 院 系: 信息技术学院 班 级:2015级计算机科学与技术(2 )班 设 计 者: 学 号: 指导教师: 设计时间: 2016.12.26-2016.12.30 信息技术学院课程设计(大作业)任务书姓 名: 院(系):信息技术学院专 业:计算机科学与技术(2 )班学号: 任务起止日期:2016-12- 26 2016-12- 30 课程设计题目: 计算器功能设计课程设计要求: 设计一个计算器,具有加减乘除的计算器,可扩展功能。1) 界面设计首先按设计要求实现其基本功能,其次设计布局,按照GridLayout的布局,将空间划分为由行和列组成的网格单元,每个单元放一个组件,网格单元大小可不同,尽量将相同属性的按钮放在一个区域,方便操作。2)计算器的基本功能:(1)加法:两个数据进行加操作,可以为小数。(2)减法:两个数据进行减操作,可以为负数相减。(3)乘法:两个数相乘操作。(4)除法:两个数相除操作。(5)开平方:对任意一个数进行开方运算,可以是小数。(6)求余:对任意一个数进行求余运算。(7)倒数:对任意一个数进行倒数运算。功能可自行增加。提示:添加相关组件并进行按钮事件处理。工作计划及安排:本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践。1.开始设计前学生一定要先回顾以前所学的内容,明确本课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。2.通过编写一个基于JAVA的应用系统综合实例,要求学生熟练掌握Java语言设计一个完整的应用程序的设计方法和步骤(软件的分析、设计、调试和总结)。 3要求每个学生应在规定时间内,在相关软、硬件的环境下,由指导老师指导独立完成各阶段设计任务。时间(天) 完成内容 说明1 明确选题,查阅相关资料2016.12.262 题目分析、总体设计、编写代码 2016.12.27-2016.12.281 调试测试、总结,撰写课程设计报告 2016.12.291 修改、完善课程设计报告2016.12.30 指导教师签字 年 月 日 课程设计(大作业)报告一、 总体设计1.系统需求分析程序中传递的有信息有:界面设计、各运算的实现界面设计采用边框布局和网格布局。先用边框布局画一个整体的画板,再用网格布局放三个小的面板。在这三个中,首先将pane1中北部放一个按钮,中部放一个按钮;然后是整体布局,将top的结果画板放在北部,pane1放在中部,其余一个放在西部。各运算的实现:、加法 else if (operator.equals(+) / 加法运算 resultNum += getNumberFromText(); 、减法 else if (operator.equals(-) / 减法运算 resultNum -= getNumberFromText(); 、乘法 else if (operator.equals(*) / 乘法运算 resultNum *= getNumberFromText(); 、除法 if (operator.equals(/) / 除法运算 / 如果当前结果文本框中的值等于0 if (getNumberFromText() = 0.0) / 操作不合法 operateValidFlag = false; resultText.setText(除数不能为0); else resultNum /= getNumberFromText(); 、开平方 else if (operator.equals(sqrt) / 平方根运算 resultNum = Math.sqrt(resultNum); 、求余 else if (operator.equals(%) / 百分号运算,除以100 resultNum = resultNum / 100; 、倒数 else if (operator.equals(1/x) / 倒数运算 if (resultNum = 0.0) / 操作不合法 operateValidFlag = false; resultText.setText(0没有倒数); else resultNum = 1 / resultNum; 、求三角函数 else if(operator.equals(cos) /如果按钮事件为cos键 resultNum=Math.cos(resultNum); else if(operator.equals(arcsin) /如果按钮事件为arcsin键 resultNum=Math.asin(resultNum); else if(operator.equals(arccos) /如果按钮事件为arccos键 resultNum=Math.acos(resultNum); else if(operator.equals(tan) /如果按钮事件为tan键 resultNum=Math.tan(resultNum); else if(operator.equals(sin) /如果按钮事件为sin键 resultNum=Math.sin(resultNum); 、求相反数 else if (operator.equals(+/-) / 正数负数运算 resultNum = resultNum * (-1); 、幂运算 else if(operator.equals(exp) /如果按钮事件为exp键 resultNum=Math.exp(resultNum); else if (operator.equals(=) / 赋值运算 resultNum = getNumberFromText(); 2.总体设计结构、加法 据进行加操作,可以为小数。、减法 据进行加减操作,可以为负数相减。、乘法 个数进行相乘操作。、除法 多个数进行相除操作。、开平方 任意一个数进行开方运算,可以是小数。、求余 一个数进行求余运算。、倒数 意一个数进行倒数运算。、求三角函数 一个弧度值求三角函数。、求相反数 对任意一个数求相反数。、清空 任意数或计算的任意结果进行清空。、后退 对输入的任意数进行一次后退。(12)幂运算对e的n次方计算计算器加法运算求余运算开平方运算减法运算倒数运算三角函数运算除法运算乘法运算相反数运算清空操作后退操作幂运算二. 各模块分析与实现 JFrame Calculator Calculator calculator1 = new Calculator(); public Calculator() private void init() Public void actionPerformed(ActionEvent e) private double getNumberFromText() private void createMenuBar() private final String KEYS private final String COMMAND private final String M private final String K private JButton keys private JButton commands private JButton m private JButton k private JTextField resultText private boolean firstDigit private double resultNum = 0.0; private double a = 0.0; private double b = 0.0; private String operator = =; private boolean operateValidFlag = true; private String operator = =; / 操作是否合法 private boolean operateValidFlag = true; JFrame Calculator Calculator calculator1 = new Calculator(); public Calculator() private void init() Public void actionPerformed(ActionEvent e) private double getNumberFromText() private void createMenuBar() private final String KEYS private final String COMMAND private final String M private final String K private JButton keys private JButton commands private JButton m private JButton k private JTextField resultText private boolean firstDigit private double resultNum = 0.0; private double a = 0.0; private double b = 0.0; private String operator = =; private boolean operateValidFlag = true; private String operator = =; / 操作是否合法 private boolean operateValidFlag = true; JFrame Calculator Calculator calculator1 = new Calculator(); public Calculator() private void init() Public void actionPerformed(ActionEvent e) private double getNumberFromText() private void createMenuBar() private final String KEYS private final String COMMAND private final String M private final String K private JButton keys private JButton commands private JButton m private JButton k private JTextField resultText private boolean firstDigit private double resultNum = 0.0; private double a = 0.0; private double b = 0.0; private String operator = =; private boolean operateValidFlag = true; private String operator = =; / 操作是否合法 private boolean operateValidFlag = true;一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘操作。建立一个JAVA project程序中使用到的类、包package jisuanqi;import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextField;main函数 public static void main(String args) Calculator calculator1 = new Calculator(); calculator1.setVisible(true); calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);构造函数:初始化计算器、设置计算器的背景颜色、在屏幕(400, 300)坐标处显示计算器。public Calculator() super(); init(); this.setBackground(Color.LIGHT_GRAY); this.setTitle(简易计算器); this.setLocation(400, 300); this.setSize(500, 500); createMenuBar();调用init()函数:初始化计算器private void init() 文本框中的内容采用右对齐方式、不允许修改结果文本框、设置文本框背景颜色为白色 resultText.setHorizontalAlignment(JTextField.RIGHT); resultText.setEditable(false); resultText.setBackground(Color.WHITE); 初始化计算器上键的按钮,将键放在一个画板内、 用网格布局器,5行,6列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 JPanel calckeysPanel = new JPanel(); calckeysPanel.setLayout(new GridLayout(5, 6, 3, 3); for (int i = 0; i KEYS.length; i+) keysi = new JButton(KEYSi); calckeysPanel.add(keysi); keysi.setForeground(Color.blue); keysi.setBackground(Color.green); / 运算符键用红色标示,其他键用蓝色表示 keys3.setForeground(Color.red); keys4.setForeground(Color.red); keys8.setForeground(Color.red); keys9.setForeground(Color.red); keys13.setForeground(Color.red); keys14.setForeground(Color.red); keys18.setForeground(Color.red); keys19.setForeground(Color.red); keys20.setForeground(Color.red); keys21.setForeground(Color.red); keys22.setForeground(Color.red); keys23.setForeground(Color.red); 初始化功能键,都用红色标示。将功能键放在一个画板内、用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 JPanel commandsPanel = new JPanel(); commandsPanel.setLayout(new GridLayout(1, 3, 3, 3); for (int i = 0; i COMMAND.length; i+) commandsi = new JButton(COMMANDi); commandsPanel.add(commandsi); commandsi.setForeground(Color.black); commandsi.setBackground(Color.green); 初始化M键,用红色标示,将M键放在一个画板内、 用网格布局管理器,6行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 JPanel calmsPanel = new JPanel(); calmsPanel.setLayout(new GridLayout(6, 1, 3, 3); for (int i = 0; i M.length; i+) mi = new JButton(Mi); calmsPanel.add(mi); mi.setForeground(Color.black); mi.setBackground(Color.green); 初始化K键,用红色标示,将K键放在一个画板内、 用网格布局管理器,6行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 JPanel KPanel = new JPanel(); KPanel.setLayout(new GridLayout(6, 1, 3, 3); for (int i = 0; i K.length; i+) ki = new JButton(Ki); calmsPanel.add(ki); ki.setForeground(Color.black); ki.setBackground(Color.green); 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部、 将文本框放在北部,将calms画板放在计算器的西部、 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内 JPanel panel1 = new JPanel();画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素 panel1.setLayout(new BorderLayout(3, 3); panel1.add(North, commandsPanel); panel1.add(Center, calckeysPanel);建立一个画板放文本框 JPanel top = new JPanel(); top.setLayout(new BorderLayout(); top.add(Center, resultText);整体布局 getContentPane().setLayout(new BorderLayout(3, 5); getContentPane().add(North, top); getContentPane().add(Center, panel1); getContentPane().add(West, calmsPanel); 为各按钮添加事件侦听器、 都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener for (int i = 0; i KEYS.length; i+) keysi.addActionListener(this); for (int i = 0; i COMMAND.length; i+) commandsi.addActionListener(this); for (int i = 0; i M.length; i+) mi.addActionListener(this); 调用createMenuBar()函数:在界面标题下添加查看、编辑、帮助三大操作private void createMenuBar() JMenuBar bar = new JMenuBar(); JMenu file = new JMenu(查看(V); JMenuItem open = new JMenuItem(打开。); JMenuItem save = new JMenuItem(保存。); JMenuItem state = new JMenuItem(状态.); JMenuItem exit = new JMenuItem(退出系统 ); file.add(open); file.add(save); file.addSeparator(); file.add(state); file.add(exit); JMenu edit = new JMenu(编辑(E); JMenuItem copy = new JMenuItem(复制); JMenuItem cut = new JMenuItem(剪切); JMenuItem paste = new JMenuItem(粘贴); edit.add(copy); edit.add(cut); edit.add(paste); JMenu help = new JMenu(帮助(H); JMenuItem error = new JMenuItem(文档-网站); help.add(error); bar.add(file); bar.add(edit); bar.add(help); setJMenuBar(bar); 从结果文本框中获取数字* return */ private double getNumberFromText() double result = 0; try result = Double.valueOf(resultText.getText().doubleValue(); catch (NumberFormatException e) return result; 三.系统调试分析1.当public class calculator extends JFrame implements ActionListener的calculator与我所建立的class中Caculator的名字不同时出现了2.在构造函数中没有调用createMenuBar时调用之后3.修改前public class Calculator extends JFrame implements ActionListener /* 计算器上的键的显示名字 */private final String KEYS = 7, 8, 9, +,exp, 4, 5, 6, -, sqrt, 1, 2, 3,*, log, 0, .,%, /, 1/x, sin, cos,tan, +/- ,=;错误显示修改为public class Calculator extends JFrame implements ActionListener /* * */private static final long serialVersionUID = 1L;/* 计算器上的键的显示名字 */private final String KEYS = 7, 8, 9, +,exp, 4, 5, 6, -, sqrt, 1, 2, 3,*, log, 0, .,%, /, 1/x, sin, cos,tan, +/- ,=;4.加法 5.减法 6.乘法 7.除法 8.开平方 9.求余 10.倒数 11.求三角函数 12.求相反数 13.清空 14.后退 15.e幂运算16.查看17.编辑18.帮助16.整个界面显示四.总结这个周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去探讨一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与我的小伙伴分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程.通过这次课程设计,我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础. 通过这次计算器设计,本人在多方面都有所提高。要面对社会的挑战只有不断的学习、实践,再学习、再实践。这对于我的将来也有很大的帮助。以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。这是一门纯属于设计的科目,它需用把理论变为上机调试。在学习科目的第一节课起,何老师就为我们阐述了它的重要性。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会让我们自己去做不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,这时图书馆是我最好的去处,把自己不懂的去通过看书来更深层次理解,逐渐能自己找出错误,并加以改正。在运行的时候,错误提示都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。此次的程序设计能够成功,是我和小伙伴同学两个人共同努力作用的结果。在这一段努力学习的过程中,我们的编程设计有了明显的提高。其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。只要努力去学习,就会灵活的去应用它。根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:1、认真上好专业实验课,多在实践中锻炼自己。2、写程序的过程中要考虑周到,严密。3、在做设计的时候要有信心,有耐心,切勿浮躁。4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。五.参考文献JAVA实例精通-北京:机械工业出版社,2009.3(编程实例大讲堂)JAVA案例开发集锦-北京:电子工业出版社,2005.9(商业开发代码库系列)六.附录(源代码)package jisuanqi;import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextField;/* 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘操作。*/public class Calculator extends JFrame implements ActionListener /* * */private static final long serialVersionUID = 1L;/* 计算器上的键的显示名字 */private final String KEYS = 7, 8, 9, +,exp, 4, 5, 6, -, sqrt, 1, 2, 3,*, log, 0, .,%, /, 1/x, sin, cos,tan, +/- ,=;/* 计算器上的功能键的显示名字 */ private final String COMMAND = Backspace, CE, C ; /* 计算器左边的M的显示名字 */ private final String M = MC, MR, MS, M+ ; /*计算器左边的K的显示名字*/ private final String K= 2, min, max, arcsin, arccos,欢迎使用 ; /* 计算器上键的按钮 */ private JButton keys = new JButtonKEYS.length; /* 计算器上的功能键的按钮 */ private JButton commands = new JButtonCOMMAND.length; /* 计算器左边的M的按钮 */ private JButton m = new JButtonM.length; /* 计算器左边的K的按钮 */ private JButton k = new JButtonK.length; /* 计算结果文本框 */ private JTextField resultText = new JTextField(0); / 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字 private boolean firstDigit = true; / 计算的中间结果。 private double resultNum = 0.0; private double a = 0.0; private double b = 0.0; / 当前运算的运算符 private String operator = =; / 操作是否合法 private boolean operateValidFlag = true; /* * 构造函数 */ public Calculator() super(); / 初始化计算器 init(); / 设置计算器的背景颜色 this.setBackground(Color.LIGHT_GRAY); this.setTitle(计算器); / 在屏幕(500, 300)坐标处显示计算器 this.setLocation(500, 300); / 设置计算器的大小 this.setSize(500, 500); createMenuBar(); /* * 初始化计算器 */ private void init() / 文本框中的内容采用右对齐方式 resultText.setHorizontalAlignment(JTextField.LEFT); / 不允许修改结果文本框 resultText.setEditable(false); / 设置文本框背景颜色为白色 resultText.setBackground(Color.WHITE); / 初始化计算器上键的按钮,将键放在一个画板内 JPanel calckeysPanel = new JPanel(); / 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calckeysPanel.setLayout(new GridLayout(5, 6, 3, 3); for (int i = 0; i KEYS.length; i+) keysi = new JButton(KEYSi); calckeysPanel.add(keysi); keysi.setForeground(Color.blue); keysi.setBackground(Color.green); / 运算符键用红色标示,其他键用蓝色表示 keys3.setForeground(Color.red); keys4.setForeground(Color.red); keys8.setForeground(Color.red); keys9.setForeground(Color.red); keys13.setForeground(Color.red); keys14.setForeground(Color.red); keys18.setForeground(Color.red); keys19.setForeground(Color.red); keys20.setForeground(Color.red); keys21.setForeground(Color.red); keys22.setForeground(Color.red); keys23.setForeground(Color

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论