

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、“ / 胆上丫SHANDONG UNIVERSITY OF SCIENCE AWD TECHNOLOGYJAVA 课程设计说明书题目:模拟科学计算器姓名:学号:班级:网络工程 11-211-2山东科技大学20132013 年 1111 月 7 7 日目录1 课设任务及要求. 31.1 课设任务. 31.2 设计要求. 32 需求分析 . 22.1 设计背景. 22.2 需求获取. 32.3 程序功能图. 43 设计思路. 43.1 界面布局. 43.2 类的定义. 53.3 变量的定义. 54 详细设计. 64.1 整体概述. 64.2 误操作处理. 74.3 流程图和结构图. 85 系统调试
2、. 115.1 程序界面. 115.2 运行界面. 116 心得与体会. 157 参考文献. 168 附录. 16第3页1 课设任务及要求1.1课设任务:要求:界面模拟Windows中的计算器程序。实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。实现要点:添加相关组件并进行按钮事件处理。要求提交Application和Applet两个版本的程序。1.2设计要求1设计的java计算器应用程序可以完成加法、减法、乘法、除法和取余运算,和cos,sin,tan等三角函数功能以及阶乘和指数等运算,且有小数点、正负号、求倒数、退格和清零功能。具体可参考windows附件下的计算
3、器2课程设计使用Eclipse4.2等作为程序编译和运行测试的 开发平台,采用JDK-7u25作为java开发环境,使用Microsoft Office Visio 2007作为绘图工具。第4页3认真按时完成课程设计报告,制作演讲PPT积极报名上 讲台向大家演示和讲解自己的程序。提交打印版的报告以及电子 版的原稿和Application和Applet两个版本的程序代码。2需求分析2.1设计背景本程序是老师提供的几个课程设计题目中比较中等的题目。 要求实现模拟的科学计算器功能,主要包括加减乘除四则运算和 阶乘,三角函数以及指数的运算。具体的功能我参考了Windows7下的计算机小程序,并根据其界
4、面设计了java小程序界面,根据其功能对自己设计的计算器小程序进行了功能的适当增加与 修改。在实现了课程设计题目要求的基础上,自己又增添了对数 函数,幕函数,三角函数,取余等我们常用到的功能比较简单的 函数。由于本函数涉及的函数以及按键数目较多,故没有采用面向对象的设计方法,没有对每个功能封装成函数调用,而是针对 每个按键的动作事件直接采用了算法的编写。最终实现了全部的功能,但是由于时间有限,许多功能没有坐到很到位的优化,或 许还存在着许多了漏洞,欢迎老师和同学的批评指正,我一定会第5页不断完善。2.2需求获取本程序的设 计过程,按照题 目的要 求,我认 真参考了Win dows7下计算器小程
5、序的运行界面与运行操作与结果, 对我自 己设计的程序的需求展开了进一步的研究。 主要得到以下几点需 求:1.必须实现题目要求的和Windows7下计算器下的基本功能, 并能正确运行。2.必须使程序具有清空,清除,退格和正负数,小数点的基 本功能。3.必须要修程序可以进行连续运算,即如“1+2+3+4,1*2+4-4”等连续运算4.必须使用可视化界面,按键布局简单明了,使人一看就懂,直接可以上手操作。界面要做到简单明了,通俗易懂,和蔼可亲。5.必须有用户错误操作, 输入不规范的警告与提示, 提醒用 户正确操作。6.程序必须经过严格的测试与运行,保证没有明显的BUG和 程序崩溃状况,要经得起用户的
6、长时间使用。第6页2.3程序功能图功能图如下:-E-E-模 拟 科 学 计 算 器u- E-Z=T-1I-rZ- - i=1.可视优 操作算商:数据输入:四则运算 角函数=:-抬数运算:=阶乘运算:;*结采输出“3设计思路3.1界面布局本应用程序继承自框架类 (JFrame),采用BorderLayout边缘布局和GridLayout网格布局相结合的布局管理方式,将单行文本框加入到“North”区域,包含各种按钮的面板JPanel p按 照网格布局的顺序加入到其他区域。 将文本框放到界面上方,将 指数函数放到界面下方,将三角函数放到界面左边,将基本四则 运算放到界面的右面,使得界面第7页的整体
7、布局合理整洁,易于上手。3.2类的定义本程序主要定义了一个主函数和三个类:public static void mai n(Stri ng args):程序的主函数,Application程序的主要实现标志,调用上文中定义的类class C1:程序主类,定义了整个界面的布局,和针对每个按钮的动作监听,以及每个动作所对应的具体的操作, 计算的运行和输出主函数。class jiecheng:定义了阶乘运算(fff)的算法实现。class Mymath定义了asinh、acosha、tanh三个Math.中不包含的三角函数及其算法实现3.3变量的定义字符串变量String a,c,s用来储存数字和符
8、号以及运算结 果。整形变量flagdenghao,flagyunsuan,lastyunsuanCount变量countxiaoshudian用来统计小数点出现的次数第8页4 详细设计4.1.整体概述首先,程序定义了三个类:一个主类,两个主类里调用的辅 助类。分别实现,计算器主要功能的实现,阶乘算法的实现,和 反三角函数算法的实现。其次,对于C1主类,首先在框架JFrame下定义了每个触击 式组件,即JButton命令式按钮。并采用了BorderLayout边缘 布局和GridLayout网格布局相结合的布局管理方式。将文本框,Str1(数字运算),Str2(三角函数),Str3(反三角函数)
9、和Str4(指数函数)合理的排布在整个框架下。然后,定义了每个JButton命令式按钮代表的数字,符号和 函数,并且通过public void actionPeformed(ActionEvente)函数定义了每个按钮对应的动作监听,从而确定了鼠标点击每个按钮时可以实现对应的不同的算法。接下来,就是每个运算所对应的算法实现,这里以加法运算为 例:1.首先用户输入一个数字, 程序用String s暂时储存, 并 通过JTexField()文本编辑框显示出来。2.接着,用户按下“+”按钮,触发按钮事件,先判断是数字或者是符号,当触发事件之前输入的是符号时“.”没有输入 数字时,程序采用Double
10、.valueOf(),将输入的“.”进行强制 类型转换成“0.”。当用第9页户输入正常数字时,程序首先将s内的数据储存到a中,同时将a中的内容清空,以便输入加数,并再 次储存到s中,并通过JTexField()文本编辑框显示出来。3.当用户按下“二”按钮时,程序首先进行判断是否flagyunsuan=0,当flagyunsuan=0是说明是第一次按“二”按 钮,接下在判断“二”之前是否是空值或符号,当判断flagdenghao =ture的时候可以进行运算。将运算结果存入a中,并再次通过JTexField()文本编辑框显示出来。4.接下来还要对运行的结果通过Double.valueOf()进行
11、强 制类型转换。因为储存数据的s和a都是String型变量,而要 求的输出结果却是double类型的变量,所以要转换以后输出。5.输出完毕以后,必须判断是否使用本次运算结果进行下一 步的运算,如果是的话则通过switch (lastyunsuan)来判断接下 来需要进行的运算,再重复上面的步骤。4.2.误操作处理由于用户操作的不确定性,有时可能不会严格按照程序说明 书进行对应的操作,经常会发生误操作。这便对程序的操作性要求大大提高。这就要求程序做到以下几点:1.程序不能因为操作失误而崩溃。第10页2.程序要可以给用户发出错误警报。3.程序要可以对错误进行适当的修改。而本程序经过反复误操作运行,
12、已经可以保证程序不会因为 误操作而发生崩溃。其次,本程序采用了Toolkit.getDefaultToolkit().beep()函数, 可以使程序发出“beep”声音的警报。最后,本程序对一些显而易见的错误,比 如输入小数时可以自动把用户输入的“.”强制转化为“0.”等。 从而保证了,当遇到各种误操作的时候程序可以正常运行。43流程图和结构图1.程序流程图第11页4 a ! UJa模拟科学订篦器I Jt = I LS flHI I J I ia Lal I a I L I I It I,! I I d I *1TFB :Classjicchcng-类的芮明界面布总设汁T:Classynuit
13、h:刈作Pfl迄文!”T肋迫函数:rn :i X X、/ ! - T-沪dvt HIK-91霊程序IVB.i r *F第13页5 运行与调试5.1程序界面计算器界面如下:5.2运行界面注:由于本程序要实现的功能过多,这里只采用部分具有代表性的功能的截图作为参考。1.加法操作第14页程序可以正确运行8+5=132.除操作第15页程序可以正确运行9/3=33.sin函数运算可以正确运行sin(n) = 0(由于本函数采用弧度运算,这里取 了n的近似值3.14进行的运算,所以运算结果只能约等于1)4.指数运算第16页本程序可以正确运行2的立方二85.阶乘运算第17页本程序正确实现了9的阶乘二3628
14、806 心得与体会本次课程设计在我的努力编写下顺利完成了。 设计过程中我 付出了劳动与汗水,遇到过很多的困难和挫折,而且我们最终都 战胜了他们,获得的最大收货,我认为并不是我设计成功了一个 多么了不起的程序,而是我在设计过程中遇到的困难和解决它的 方法与经验才是最值得我认真体会的地方。通过本次设计过程我发现了我们学习知识的严重不足,许多设计过程中常用到的知识,我们掌握的并不好。还要时常去查课 本,有的甚至一点印象都没有,我认为这一切的原因在于我们不 去用他,俗话说孰能生巧。对于所学的知识我们要善于使用。我还发现,一些问题不能只凭借自己的主观去臆想判断,实 践才是硬道理,实践出真知。只有通过自身
15、去调查去分析得出的 结论,才最接近事实,软件的开发切忌不能想当然的去看问题, 毕竟只有动手做了才知道对与不对。本次实验过后,不仅锻炼了我的设计分析能力,编程能力,最重要的是锻炼了我面对问题的应变与解决能力。 只有把自己所 学的知识,和自己的经验,老师的指导相互结合起来,才能在学 习的道路上少走弯第18页路,并实现自己想要的目标。最后,再次感谢java程序设计赵建立老师的指导,感 谢有关同学提供的帮助,最后祝愿java这门课越学越好。7 参考资料Java程序设计教程(第2版)雍俊海 清华大学出版社Java程序设计实验指导雍俊海清华大学出版社Java语言使用教程丁振凡北京邮件大学出版社8 附录由于
16、本程序涉及的代码量过于庞大,这里只给出几个有代表 性的算法的代码,完整的代码请参考电子版的代码附录。部分程序源代码如下:class jiecheng public static double fff(double n)if(n=0)return 1;elsereturn n*fff(n-1);class Mymath public static double asinh(double x)return Math.log(x+Math.sqrt(x*x+1);public static double acosh(double x)return Math.log(x+Math.sqrt(x*x-1
17、);第19页public static double atanh(double x)return 0.5*Math.log(1+x)/(1-x);public class C1 implements ActionListener/,KeyListenerpublic C1() JFrame frame = new JFrame();Container con = frame.getContentPane();con.setLayout(new BorderLayout(10,10);panel1 = new JPanel();panel2 = new JPanel();panel3 = new
18、 JPanel();panel4 = new JPanel();panel1.setLayout(new GridLayout(6,4,5,5);panel2.setLayout(new GridLayout(4,2,2,2);panel3.setLayout(new GridLayout(4,2,3,3);panel4.setLayout(new GridLayout(2,4,4,4);panel5 = new JPanel();panel5.setLayout(new CardLayout();Stringstr1for(int i=0;istr1 .l ength;i+)bi = new
19、 JButton(str1i);bi.addActionListener(this);panel1.add(bi);String str2 = lnv,ln,sin,cos,tan,sinh,cosh,tanh; for(int i = 0;istr2.length;i+)b2i = new JButton(str2i);b2i.addActionListener(this);panel2.add(b2i);String str3 = lnv,ex,asin,acos,atan,asinh,acosh,atanh; for(int i =0;istr3.length;i+)b3i = new
20、JButton(str3i);b3i.addActionListener(this);第20页panel3.add(b3i);panel5.add(one,panel2);panel5.add(two,panel3);(CardLayout)panel5.getLayout().show(panel5, one);String str4 = 1/x,sqrt,xA2,xA3,xAy,3V,yVx,log,10Ax,n!;for(int i=0;i= 1)第21页Toolkit.getDefaultToolkit().beep(); elses+=.;System.out.println(s);
21、System.out.println(sength(); if(s.equals(.)System.out.println(true); elseSystem.out.println(false);textfield.setText(s);textfield.requestFocus(); countxiaoshudian+;/-else if(e.getSource()=b3)/if(flagyunsuan=0)if(s = )if(flagdenghao = false) a = 0;elseflagdenghao = false;elseif(s.equals(.)s = 0.;a = Double.valueOf(s);elseif(s !=)if(s.equals(.)s = 0.;c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武汉工程大学《基础朝鲜语Ⅱ》2023-2024学年第二学期期末试卷
- 新乡学院《神经病学》2023-2024学年第二学期期末试卷
- 上海第二工业大学《外科学(一)》2023-2024学年第二学期期末试卷
- 莱芜职业技术学院《三维动画(二)》2023-2024学年第一学期期末试卷
- 衡水健康科技职业学院《人类遗传病》2023-2024学年第一学期期末试卷
- 公司合租房协议合同
- 法律合同法规知识要点梳理
- 工程劳务分包施工合同书
- 医疗器械质量保证合同协议书
- 恒大工程承包合同
- 初中道德与法治公民权利作业设计
- 动物的迁徙行为与地球生态系统
- 仙家送钱表文-文字打印版
- LY-T 3332-2022 森林保险查勘定损技术规程
- 总成修理工安全操作规程
- led灯具的技术协议
- 两会安全施工方案
- 《销售配合带动》课件
- 2023年10月自考试题00341公文写作与处理
- 《餐具我来摆》 课件
- 2025年日历日程表含农历可打印
评论
0/150
提交评论