




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*实践教学*XXXX大学计算机与通信学院秋季学期java 课程设计题 目: 迷你计算器 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 目录序言2摘要2系统分析与设计3设计方案构思:3详细设计6数字按键监听类6运算按键监听类7记忆操作监听类9测试方案9测试用例10测试结果10软件使用说明书14按键说明:14设计总结16参考文献16附录代码:17application版本的迷你计算器17applet版本的迷你计算器25序言学习完Java语言课程以后,利用这一次的课程设计进行自我检验的一次实践。通过该题目的设计,培养面向对象程序设计的思想,要求达到熟练掌握Java语言的基本知识和技能,基本掌
2、握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时强调好的程 序设计风格,提高解决实际问题的能力。而我的课题是设计迷你计算器,它要求利用所学过的java语言进行设计,并要求可视化界面。通过查阅有关java知识方面的书籍资料来帮助自己完成课程设计,涉及的知识点有以下几点:利用面向对象的思想首先考虑设计程序的大致框架结构以及相关功能,设计相关的类结构;由于使用可视化界面,免不了要使用有关界面的设计知识,有AWT、swing来设计人机交互的界面。而事件的相关知识起到人机媒介的作用,要求利用到接口(interface)实现事件的监听;此次的课程设计包
3、括两个版本:application 和 Applet小应用程序,所以需要了解两个的开发流程,以及两者的区别点。有关这次是的设计只是简略的迷你计算器的设计,采用清晰,简明的设计层次,同时可以检验对java语言的基本掌握情况。摘要计算器是一种很常用的计算工具,它在计算方面、日常生活中给我们提供很大的方便,在编辑此程序时,除了包括常用的加法运算算法、减法运算算法、乘法运算算法、除法运算算法等四大模块之外。还特意添加了阶乘、正弦、余弦和指数运算。其次程序按照要求利用AWT、swing图形界面技术进行windows系统迷你计算器的模拟设计,用到的接口、对象、类等方法,同时对编程过程中所编写的实验代码也不
4、同程度的进行细化的要求,所以在编程的过程中难免遇到了一些困难,所以在完成本次系统的过程中过程中充满了挑战与机遇。关键字: AWT、swing、类、接口、事件监听系统分析与设计设计方案构思:本程序采用模块化设计,调试方便,程序的可读性好。在老师的指导下,由主程序启动简易计算器,根据使用者的需要可以在简易计算器中进行运算操作,若不能满足用户功能,可以选择使用科学计算器,具体操作与目前市面上的计算器差不多,用户还可以选择使用说明进行查看具体操作。由于时间及个人水平的问题,科学计算中还有很多功能未实现。具体思路:用户输入(点击)某一数字或操作符,程序将自行判断是操作数还是操作符。 迷你计算器包括以下部
5、分:MC MRMSM+M-<CEC±Sin7 89+Cos4 56-xy123*n!0. /= 表 按键布局数字按钮(09):10个内存操作按钮(MC、MR、MS、M+、M-):5个运算按钮(+、-、*、/、n!、cos、sin、xy、±、=):10个清零操作按钮(<-、CE、C):3个事件分为三个类进行操作,如以下部分:Public class NumberListener implements ActionListener/监听数字按钮public class OperatorListenerimplements ActionListener/监听运算按钮p
6、ublicclassMemoryListenerimplements ActionListener/监听MC、MR、MS、M+、M-等按钮Application版本中,以上三个个类作为主类的内部类,即public class MyCalculator extends JFrame/主类直接继承swing的框架类JFrame,并采用网格包布局Applet版本中,以上三个类也作为其内部类,即public class AplCalculator extends Applet/主类继承Applet类采用网格包布局方案设计步骤:1、 创建主类MyCalculator并继承JFrame2、 创建以上三个类
7、做为MyCalculator类的内部类Application版本图 application版本类层次结构表MyCalculator的成员声明类型描述数据成员contentPane;private Container容器变量,获取面板show1;private JTextField文本框,显示数据layout;private GridBagLayout网格包布局变量constraints;private GridBagConstraints网格包辅助变量StartSymbol;private boolean判断输入开始结束ResultSymbol;private boolean判断结果是否可修改
8、result;private double保存结果memory;private double保存要记忆的数operator;private String运算符号MemoryListenerpublic class记忆按键监听类OperatorListenerpublic class运算符号监听类NumberListenerpublic class数字按钮监听类成员函数MyCalculator(String title)public初始化函数addButton(JPanelp,String label,int row,int column, int with, int height, Actio
9、nListenerlistener)private void添加按键函数main(String args)public static void主函数Applet版本图 applet版本类层次结构表ApCalculator的成员声明类型描述数据成员showprivate JTextField文本框,显示数据layout;private GridBagLayout网格包布局变量constraints;private GridBagConstraints网格包辅助变量StartSymbol;private boolean判断数据输入开始ResultSymbol;private boolean判断结果
10、是否可修改result;private double保存计算结果memory;private double记忆数据operator;private String运算符号MemoryListenerpublic class记忆按键监听OperatorListenerpublic class运算符号监听NumberListenerpublic class数字按键监听成员函数init()public void初始化函数addButton(JPanelp,String label,int row, int column, int with, int height,ActionListenerliste
11、ner)private void添加按键函数详细设计数字按键监听类实现用户输入数据时进行监听并在文本框做出相应按键的显示,以下是该类的详细设计。public class NumberListener implements ActionListener /实现动作监听public void actionPerformed(ActionEvent e)/覆盖actionPerformed函数String input = e.getActionCommand();if(StartSymbol)/判断输入数字是否开始StartSymbol = false;show1.setText("&qu
12、ot;);if(input.equals("±")show1.setText(show1.getText() + "-");if (!input.equals("±") if(input = "CE") show1.setText("");/input=null;StartSymbol = true; else if(input = "C") show1.setText("0"); /input=null; operator = &qu
13、ot;="StartSymbol = true; else if(input = "<") String str = show1.getText(); if(!ResultSymbol&&str.length() > 0) show1.setText(str.substring(0, str.length() - 1);else show1.setText("" + result); else show1.setText(show1.getText() + input);ResultSymbol = false; 运
14、算按键监听类用来实现当用户使用计算某个已有的运算时,时间监听类监听并做出相应的运算操作,以下是详细的类设计。public class OperatorListener implements ActionListenerpublic void actionPerformed(ActionEvent e)String command = e.getActionCommand();if(StartSymbol)operator = command;SGCalculator(operator);/SGCalculator(Double.valueOf(show1.getText();elseDBCal
15、culator(Double.valueOf(show1.getText();operator = command;SGCalculator(operator);StartSymbol = true;ResultSymbol = true;public void DBCalculator(double y)if(operator = "+")result += y;else if(operator = "-")result -= y;else if(operator = "*")result *= y;else if(operator
16、 = "/")result /= y;else if(operator = "xy")double x = result;for(;y>1;y-) result *= x;else if(operator = "=")result = y; show1.setText("" + result);public void SGCalculator(String operator)if(operator = "sin")result = Math.sin(result);else if(oper
17、ator = "cos")result = Math.cos(result);else if(operator = "n!")for(double x = result -1;x>1;x-) result *= x;show1.setText("" + result);记忆操作监听类实现方便用户记忆计算结果,当用户使用监听的按键时,该类进行监听并做出相应的判断,从而记忆当前显示的数据。public class MemoryListener implements ActionListenerpublic void actionPe
18、rformed(ActionEvent e)String press = e.getActionCommand();if(press = "MC") memory = 0; show1.setText(""+memory); else if(press = "MR") show1.setText(""+memory); else if(press = "MS") memory = Double.valueOf(show1.getText(); else if(press = "M+&q
19、uot;) memory += Double.valueOf(show1.getText(); else if(press = "M-") memory -= Double.valueOf(show1.getText(); StartSymbol = true;在函数addButton(JPanel p,String label, int row, int column, int with, int height, ActionListener listener)中将以上三个事件监听类添加到相应的按钮。测试方案Manual Test 手动测试:虽然手动测试最大的缺点就是技术
20、含量低,单调乏味,容易废人,但是手动测试比较适合此次迷你计算器的测试,因为是小程序,手动测试能够细致的检查程序的细节。1、 先进行MC、MR、MS、M+、M-等的按键的检查。2、 进行09等的按键的检查3、 进行各个运算按键的检查4、 进行<-、CE、C按键的测试5、 与windows7系统自带的计算器进行数据比对。测试用例CE键,只是清除当前输入的数据或符号,例如:计算4+2,输入4+3后,发现2输错了。此时按CE键,将3清除,再输入2,即可计算出结果。 按C键,则表述全部清零。MS:存当前显示的数值MR:读取存储器中的数值,并显示出来MC:清除已存的数据M-:用已存的数值减去当前显示
21、的数值后,再将结果保存M+:用已存的数值加上当前显示的数值后,再将结果保存用M+或者M-计算完成之后,计算结果不会直接显示,它需要再点击下MR,这样的话就可以将最后的计算结果显示出来。例如:输入5,再按MS键,再按M+键,再按MR,结果显示6.。 cos运算:先输入45(弧度计算),再按cos键,结果显示:0.5253219888177297Sin运算:先输入45(弧度计算),再按sin键,结果显示:0.820930352453411824286237967n!运算:先输入5,再按n!键,结果显示120.0xy运算:先输入2,在按xy键,再输入3,再按“=”键,结果显示:8基本的加减乘除四则运
22、算由于篇幅限制省略。测试结果所有的测试结果都与windows7自带的计算器进行比对。图 乘法运算用例图 cos运算用例图 sin运算用例图 n!运算用例软件可靠性分析程序实例表明计算值精确到0.0000000000000001上限值使用科学计数值表示。程序满足日常生活中的基本使用。如图:图 计算器精确值软件使用说明书按键说明:MS:存当前显示的数值MR:读取存储器中的数值,并显示出来MC:清除已存的数据M-:用已存的数值减去当前显示的数值后,再将结果保存M+:用已存的数值加上当前显示的数值后,再将结果保存用M+或者M-计算完成之后,计算结果不会直接显示,它需要再点击下MR,这样的话就可以将最后
23、的计算结果显示出来。CE:清除当前显示的数字C:清除表达式Sin:进行正弦运算Cos:进行余弦运算xy:进行x的幂运算<: 消除当前数据一位+: 进行加运算-:进行减法运算*:进行乘法运算/:进行除法运算。图 计算器界面设计总结在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,通过网上的交流,和同学的帮助,最后都克服,最终我成功的完成了这次课程设计。从中我充分理解了Java面对对象的特性,并体会到Java与C语言的不同之处在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法
24、,为今后的其他计算机语言的学习奠定了一定的基础。在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。如何保存结果与如何进行登陆注册页面的添加及用户信息的储存,经过不断地尝试与调整,此次课程设计让我们更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我们对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。(1)通过编写这个相对复杂的程
25、序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。(2)这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我充分理解了包和类调用的关系。(3)由于这次编写的程序相对比较复杂,所以不能一次性编写、调试,也由让我学会把程序分块,逐个编写、调试。参考文献1曲朝阳,杨杰明等.Java程序设计. 北京: 清华大学出版社,2008.102耿祥以,张跃平.Java大学生实用教程. 北京: 电子工业出版社,2012.6 3明日科技.Java经典编程.北京:清华大学出版社,2012.104李尊朝,苏军.Java语言程序设计.北京:中国铁道出版社,2004.25高宏静,从
26、入门到精通.北京工业出版社附录代码:application版本的迷你计算器package design;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import jav
27、ax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextField;SuppressWarnings("serial")public class MyCalculator extends JFrame/* * param args */private Container contentPane; private JTextField sh
28、ow1;private GridBagLayout layout; private GridBagConstraints constraints; private boolean StartSymbol;private boolean ResultSymbol;private double result;private double memory;private String operator;public class NumberListener implements ActionListener public void actionPerformed(ActionEvent e)Strin
29、g input = e.getActionCommand();if(StartSymbol)StartSymbol = false;show1.setText("");if(input.equals("±")show1.setText(show1.getText() + "-");if (!input.equals("±") if(input = "CE") show1.setText("");/input=null;StartSymbol = true;
30、 else if(input = "C") show1.setText("0"); /input=null; operator = "="StartSymbol = true; else if(input = "<") String str = show1.getText(); if(!ResultSymbol&&str.length() > 0) show1.setText(str.substring(0, str.length() - 1);else show1.setText(&q
31、uot;" + result); else show1.setText(show1.getText() + input);ResultSymbol = false; public class OperatorListener implements ActionListenerpublic void actionPerformed(ActionEvent e)String command = e.getActionCommand();if(StartSymbol)operator = command;SGCalculator(operator);/SGCalculator(Double
32、.valueOf(show1.getText();elseDBCalculator(Double.valueOf(show1.getText();operator = command;SGCalculator(operator);StartSymbol = true;ResultSymbol = true;public void DBCalculator(double y)if(operator = "+")result += y;else if(operator = "-")result -= y;else if(operator = "*&
33、quot;)result *= y;else if(operator = "/")result /= y;else if(operator = "xy")double x = result;for(;y>1;y-) result *= x;else if(operator = "=")result = y; show1.setText("" + result);public void SGCalculator(String operator)if(operator = "sin")resu
34、lt = Math.sin(result);else if(operator = "cos")result = Math.cos(result);else if(operator = "n!")for(double x = result -1;x>1;x-) result *= x;show1.setText("" + result);public class MemoryListener implements ActionListenerpublic void actionPerformed(ActionEvent e)Str
35、ing press = e.getActionCommand();if(press = "MC") memory = 0; show1.setText(""+memory); else if(press = "MR") show1.setText(""+memory); else if(press = "MS") memory = Double.valueOf(show1.getText(); else if(press = "M+") memory += Double.va
36、lueOf(show1.getText(); else if(press = "M-") memory -= Double.valueOf(show1.getText(); StartSymbol = true;/*public void NumberButton()for(int i=0;i<=9;i+)numberi = new JButton(String.valueOf(i);numberi.setForeground(Color.blue);*/ public MyCalculator(String title) /程序初始化super(title);con
37、tentPane = getContentPane();contentPane.setLayout(new FlowLayout(FlowLayout.CENTER); JMenuBar menubar = new JMenuBar(); JMenu editmenu = new JMenu("编辑"); JMenu helpmenu = new JMenu("帮助"); JMenuItem copyitem = new JMenuItem("复制"); JMenuItem pasteitem = new JMenuItem(&quo
38、t;粘贴"); editmenu.add(copyitem); editmenu.add(pasteitem); menubar.add(editmenu); menubar.add(helpmenu);setJMenuBar(menubar);JPanel jp1 = new JPanel();/添加文本框show1 = new JTextField(20);show1.setEditable(false);show1.setBackground(Color.white);jp1.add(show1);contentPane.add(jp1);JPanel jp2 = new JP
39、anel();/向jp2面板添加按钮layout = new GridBagLayout();constraints = new GridBagConstraints(); jp2.setLayout(layout);NumberListener number_listener = new NumberListener(); OperatorListener operator_listener = new OperatorListener(); MemoryListener memory_listener = new MemoryListener();addButton(jp2,"M
40、C",0,1,1,1,memory_listener);/加入按钮addButton(jp2,"MR",1,1,1,1,memory_listener);addButton(jp2,"MS",2,1,1,1,memory_listener);addButton(jp2,"M+",3,1,1,1,memory_listener);addButton(jp2,"M-",4,1,1,1,memory_listener);addButton(jp2,"<",0,2,1,1,number_
41、listener);addButton(jp2,"CE",1,2,1,1,number_listener);addButton(jp2,"C",2,2,1,1,number_listener);addButton(jp2,"±",3,2,1,1,number_listener);addButton(jp2,"sin",4,2,1,1,operator_listener);addButton(jp2,"7",0,3,1,1,number_listener);addButton(jp2,&
42、quot;8",1,3,1,1,number_listener);addButton(jp2,"9",2,3,1,1,number_listener);addButton(jp2,"+",3,3,1,1,operator_listener);addButton(jp2,"cos",4,3,1,1,operator_listener);addButton(jp2,"4",0,4,1,1,number_listener);addButton(jp2,"5",1,4,1,1,number_l
43、istener);addButton(jp2,"6",2,4,1,1,number_listener);addButton(jp2,"-",3,4,1,1,operator_listener);addButton(jp2,"xy",4,4,1,1,operator_listener);addButton(jp2,"1",0,5,1,1,number_listener);addButton(jp2,"2",1,5,1,1,number_listener);addButton(jp2,"3
44、",2,5,1,1,number_listener);addButton(jp2,"*",3,5,1,1,operator_listener);addButton(jp2,"n!",4,5,1,1,operator_listener);addButton(jp2,"0",0,6,2,1,number_listener);addButton(jp2,". ",2,6,1,1,number_listener);addButton(jp2,"/",3,6,1,1,operator_liste
45、ner);addButton(jp2,"=",4,6,1,1,operator_listener);contentPane.add(jp2);StartSymbol = true;ResultSymbol = true;result = 0;operator = "="private void addButton(JPanel p,String label, int row, int column, int with, int height, ActionListener listener) JButton button = new JButton(la
46、bel); button.setBounds(10,10,10,10);constraints.gridx = row; constraints.gridy = column; constraints.ipady = 10;constraints.gridwidth = with; constraints.gridheight = height; constraints.fill = GridBagConstraints.HORIZONTAL;button.addActionListener(listener); layout.setConstraints(button, constraint
47、s); p.add(button); public static void main(String args) / TODO Auto-generated method stubMyCalculator myc = new MyCalculator("计算器");myc.setSize(300,400);myc.setResizable(false);myc.setVisible(true); applet版本的迷你计算器package designApplet;import java.applet.Applet;import java.awt.FlowLayout;imp
48、ort java.awt.GridBagLayout;import java.awt.GridBagConstraints;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JPanel;import javax.swing.JTextField;public class AplCalculator extends Appletprivate GridBagLayout layout; private GridB
49、agConstraints constraints; JTextField show;public boolean StartSymbol;private boolean ResultSymbol;private double result;private double memory;private String operator;public class NumberListener implements ActionListener public void actionPerformed(ActionEvent e)String input = e.getActionCommand();i
50、f(StartSymbol)StartSymbol = false;show.setText("");if(input.equals("±")show.setText(show.getText() + "-");if (!input.equals("±") if(input = "CE") show.setText("");/input=null;StartSymbol = true; else if(input = "C") show
51、.setText("0"); /input=null; operator = "="StartSymbol = true; else if(input = "<") String str = show.getText(); if(!ResultSymbol&&str.length() > 0) show.setText(str.substring(0, str.length() - 1);else show.setText("" + result); else show.setText(show.getText() + input);ResultSymbol = false; public c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐理论习题回顾题及答案
- 装配工培训试题及答案
- 足球考试题大题及答案
- 警用常识考试题及答案
- 语言规范化试题及答案
- 河南今年单招试题及答案
- 营销招聘考试题及答案
- 音理结合的音乐实践试题及答案
- 家具知识考试试题及答案
- 安全技术检测师考试试题及答案
- 2025专利代理师笔试考试题库带答案
- 第3课《校园文化活动我参与》教案 海燕版综合实践活动 三年级下册
- 2025年保密教育线上培训考试试题及答案
- 大学生职业规划大赛《运动康复专业》生涯发展展示
- 高楼遮光补偿协议书范本
- 课题申报书:生成式人工智能赋能高职教学变革研究
- 2025-2030专用车产业规划及发展研究报告
- 《自由现金流折现法对东鹏特饮公司的财务估值实例分析》2000字
- 2024年四川绵阳科技城新区招聘社区工作者考试真题
- 2025-2030中国甘蔗收割机行业市场现状供需分析及投资评估规划分析研究报告
- 二零二五简短美发店劳动合同
评论
0/150
提交评论