模拟科学计算器课程设计
模拟计算器课程设计报告

合肥学院计算机科学与技术系课程设计报告2009~2010学年第二学期课程JAVA语言课程设计课程设计名称模拟计算器专业班级07网络工程(1)姓名舒业超指导教师许强张贯虹2010年9月一、需求分析程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入‘=’ 符号后,窗口显示出结果。
故需先定义一个类,继承Frame类,来实现一个窗口的显示,还需添加两个文本框,一个用于输入运算表达式,另一个显示运算结果,并以等‘=’号为表达式结束符,并触发运算的开始,所以还需设置一个键盘监听器,监听‘=’号的输入。
该计算器还要两个C(清除)、A(全清除)按钮,并予以监听,触发后进行相应操作。
如果用户输入的表达式不合法,需判别出来并给出相应的错误提示。
二. 设计1.设计思想:该程序有较好的用户操作界面,组件布局采用手动布局,并对相应组件设置监听器,触发后执行相应操作。
该程序主要的算法功能是如何利用栈实现运算符优先级的比较。
先是定义申请两个堆栈,一个作为运算数栈,另一个作为运算符栈,这两个堆栈是扫描表达式时的存储容器,在扫描过程中,扫描的单位是一个字符,扫描到的运算数入数栈,运算符入运算符栈,待比较优先级后,运算数出栈进行运算。
对于表达式的非法性判断,通过捕获异常来处理,捕获到异常后,弹出一个错误提示对话框,提示表达式的非法,并要求用户全清除后重新输入正确并完整的表达式。
2.功能设计定义一个myframe类来继承Frame类,实现窗口的显示,并在其中进行手动布局,即添加一个表达式输入文本框、一个结果显示文本框、C(清除)以及A(全清除)按钮。
在表达式文本框中输入完整表达式之后按下‘=’号后,通过键盘监听器的监听,开始进行运算。
运算过程如下:先在窗口类中将表达式提取出来,此时表达式为串字符串,需通过一个方法将其进行切割,切割成字符数组形式,然后将字符数组传递给一个Calculator类中的Calculator1方法(即运算引擎)进行表达式的计算,在这个方法执行结束时可返回运算的结果,接着将结果显示在结果文本框中即可。
计算器课程设计报告

计算器课程设计报告一、课程目标本节计算器课程设计以提升学生的数学计算能力、逻辑思维能力和实际应用能力为核心,结合三年级学生的认知特点和实际需求,制定以下课程目标:1. 知识目标:(1)学生能够掌握计算器的基本功能及操作方法;(2)学生能够运用计算器进行简单的四则运算,并理解相关数学概念;(3)学生能够运用计算器解决生活中的实际问题,提高数学应用能力。
2. 技能目标:(1)培养学生运用计算器进行快速、准确计算的能力;(2)培养学生运用计算器辅助解决数学问题的能力;(3)提高学生逻辑思维能力,培养学生独立思考和解决问题的能力。
3. 情感态度价值观目标:(1)激发学生对计算器的兴趣,培养学生主动探究新知的习惯;(2)培养学生合作交流、分享成果的团队精神;(3)培养学生将所学知识应用于实际生活的意识,增强学生的自信心和成就感。
本课程旨在通过计算器教学,使学生在掌握基本计算技能的同时,提高数学素养,培养实际应用能力,激发学生对数学学习的兴趣,为学生的终身学习打下坚实基础。
二、教学内容本节计算器课程依据课程目标,结合课本内容,选择以下教学材料和安排:1. 教学大纲:(1)计算器的基本功能介绍与操作方法;(2)使用计算器进行加、减、乘、除四则运算;(3)运用计算器解决实际问题。
2. 教学内容安排与进度:第一课时:认识计算器,了解计算器的基本功能和操作方法,包括开关机、清屏、数字键、运算符号键等。
第二课时:学习使用计算器进行加、减、乘、除四则运算,并通过练习巩固运算方法。
第三课时:运用计算器解决生活中的实际问题,如购物找零、计算面积等。
3. 教材章节及内容列举:(1)第三章《计算器与计算》:介绍计算器的基本功能、操作方法及四则运算;(2)第四章《计算器在实际应用中的作用》:举例说明计算器在生活中的应用,提高学生实际操作能力。
教学内容科学系统地组织,注重理论与实践相结合,使学生能够熟练掌握计算器的使用方法,并能在实际生活中运用计算器解决简单问题,提高学生的数学素养。
C 课程设计(计算器)[转载]
![C 课程设计(计算器)[转载]](https://img.taocdn.com/s3/m/02b46cf21b37f111f18583d049649b6649d70972.png)
存储模块:存储用户输入的历史记录和计 算结果
错误处理模块:处理用户输入错误和计算 错误
电源管理模块:管理计算器的电源状态, 包括开关机和电池管理
界面设计
简洁明了:界 面设计应简洁 明了,易于用 户理解和操作
色彩搭配:色 彩搭配应协调, 避免过于鲜艳
或过于暗淡
布局合理:布 局应合理,功 能按钮应易于
04
测试与优化
功能测试
输入测试:检查输入是否正确,包括数字、符号等 输出测试:检查输出是否正确,包括计算结果、错误提示等 边界测试:检查输入和输出在边界条件下的表现,如最大、最小值等 性能测试:检查计算器的运行速度和资源占用情况,如CPU、内存等
性能优化
优化算法:提高计算效率,减少计算时间 优化内存:减少内存占用,提高运行速度 优化界面:简化界面设计,提高用户体验 优化兼容性:提高与不同操作系统的兼容性,扩大用户群体
用户需求调研
调研对象:学生、 教师、家长等
调研内容:计算 器功能需求、卷 调查、访谈、观 察等
调研结果:分析 用户需求,为计 算器功能设计提 供依据
功能模块划分
输入模块:接收用户输入的数字和运算符 号
运算模块:进行加减乘除等基本运算
显示模块:显示计算结果和操作提示
沟通能力
计算器应用场景和需求
商业应用: 会计、金 融、统计 等领域
教育应用: 数学、物 理、化学 等学科教 学
家庭应用: 日常计算、 购物、理 财等
科研应用: 科学研究、 数据分析 等
特殊需求: 盲人、老 年人等特 殊人群使 用
便携性需 求:移动 设备、智 能手表等 便携设备 使用
02
计算器功能需求分析
一个模块
算法实现:使 用编程语言实
proteus仿真计算器课程设计

proteus仿真计算器课程设计一、课程目标知识目标:1. 学生能理解Proteus仿真软件的基本原理和操作流程;2. 学生能掌握利用Proteus进行简单计算器电路设计与仿真;3. 学生能了解并描述计算器电路中的基本电子元件及其功能;4. 学生掌握基本的数字电路知识,如逻辑门、触发器等。
技能目标:1. 学生能独立使用Proteus软件进行电路设计;2. 学生能通过Proteus软件进行电路仿真,并对结果进行分析;3. 学生能运用已学知识解决实际计算器电路设计中遇到的问题;4. 学生能通过团队协作,共同完成一个具有基本功能的计算器电路设计。
情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新意识和实践欲望;2. 学生在团队合作中学会沟通、协作,培养团队精神和责任感;3. 学生通过动手实践,体验成功的喜悦,增强自信心;4. 学生树立正确的价值观,认识到科技发展对国家和社会的重要性。
本课程针对高年级学生,结合电子技术课程内容,以Proteus仿真软件为载体,使学生掌握基本电子元件和数字电路知识。
课程注重实践操作和团队协作,旨在提高学生的实际动手能力和创新能力,为后续深入学习电子技术打下坚实基础。
通过本课程的学习,学生将能够独立完成一个简单计算器电路的设计与仿真,并在过程中培养良好的情感态度和价值观。
二、教学内容1. 计算器电路设计基础理论:- 简介计算器电路的组成和原理;- 学习基本电子元件:电阻、电容、二极管、三极管等;- 了解并掌握数字电路基础知识:逻辑门、触发器、计数器等。
2. Proteus仿真软件操作:- 学习Proteus软件的基本界面和功能;- 掌握Proteus软件的电路设计、仿真和调试方法;- 学习如何利用Proteus软件绘制电路图、设置元件参数等。
3. 计算器电路设计与仿真:- 根据计算器功能需求,设计电路原理图;- 利用Proteus软件进行电路仿真,观察并分析仿真结果;- 针对仿真过程中出现的问题,进行调试和优化。
模拟科学计算器

//if(space.getText().indexOf("E")>-1)
if(space.getText().contains("E"))
sf=false;
else
sf=true;
ssf=true;
df=true;
}
if(e.getSource()==bsin)
{
double x = Double.parseDouble(space.getText());
(1)小应用程序的生命周期相对于application而言较为复杂。在其生命周期中,涉及到Applet类的4个方法:init()、start()、stop()和destroy()。这次的程序中使用了init()是在小应用程序第一次被支持Java的浏览器加载时所要执行的方法,在小应用程序的生命周期中,只执行一次该方法。可以再该方法进行一些初始化操作。
课程设计报告
(本科)
课程:
Java程序设计
学号:
1210431070
1210431032
1210431096
1210431066
姓名:
耿沈阳
彭立洋
汪平阳
肖玲
班级:
计算机软件2班
教师:
朱强
时间:
2014.12.30
计算机学院
设计名称:
模拟科学计算器
设计内容、目的与要求:
内容:是实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。
space.setBorder(BorderFactory.createLoweredBevelBorder());
(7)Swing提供了很多类型的按钮,包括复选框,单选按钮等,所有的按钮组件都继承自AbstractButton类。只将部分代码展示如下;
计算器模拟系统设计-毕业设计

计算器模拟系统设计学生:XXX 指导教师:XXX内容摘要:本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。
设计过程在硬件与软件方面进行同步设计。
硬件选择AT89C51单片机和74lS164,输入用4×4矩阵键盘。
显示用5位7段共阴极LED静态显示。
软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
选用编译效率最高的Keil 软件用汇编语言进行编程,并用proteus仿真。
关键词:LED 计算器 AT89C51芯片 74LS164Calculator simulation system desig nAbstract:The design is a simple calculator based on 51 series microcontroller system design, to complete the calculator keyboard input, add, subtract, multiply, and in addition to three unsigned numeric simple four operations, and the corresponding result will be displayed on the LED.The design process of hardware and software aspects of the synchronous design. Hardware choose AT89C51 microcontroller and 74ls164--enter the 4 × 4 matrix keyboard. Static display with five 7-segment common cathode LED display. Software calculator function from the analysis, flow charts, design, and then program the preparation of system design. Selected to compile the most efficient Keil software in assembly language programming, and with proteus simulation.Keywords: LED calculator AT89C51 chip 74LS164目录前言 (1)1 设计任务和要求 (1)1.1 设计要求 (1)1.2 设计方案的确定 (2)2 单片机简要原理 (2)2.1 AT89c51介绍 (2)2.2 芯片74LS164介绍 (5)3 硬件设计 (6)3.1 键盘电路的设计 (6)3.2 显示电路的设计 (7)3.3 其他电路设计 (7)3.3.1 复位、时钟电路设计 (7)3.3.2 多位数码管电路显示的驱动电路 (8)4 软件设计 (9)4.1 主程序的设计 (9)4.2 显示、读键模块的设计 (10)4.3 其他内容说明 (11)4.3.1 定时查键的程序设计 (11)4.3.2 软件的可靠性设计 (12)4.4 源程序代码(见附录) (12)5 调试与仿真 (12)5.1 Keil C51单片机软件开发系统 (12)5.2 proteus的操作 (12)5.2.1 硬件电路图的接法操作 (12)5.2.2单片机系统PROTEUS设计与仿真过程 (13)6 结束语 (13)附录:计算器程序代码 (15)参考文献: (23)计算器模拟系统设计前言近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。
科学计算器课程设计

*课程设计设计题目:面向对象程序设计课程设计------科学计算器系别信息工程系班级*学生姓名*学号*指导教师* 职称*起止日期:**课程设计任务书课程设计题目:面向对象程序设计课程设计----科学计算器系别信息工程系班级*学生姓名*学号*指导教师* 职称*课程设计进行地点:*任务下达时间:*起止日期:*教研室主任* 20*日批准1.设计的原始资料及依据通过课程设计使学生进一步加深对课程内容的理解,利用程序设计的基本思想进行程序的开发,进一步掌握编程方法和技巧,提高学生用程序的思想来解决实际问题的能力。
2.设计的主要内容及要求设计题目:科学计算器需要完成的功能:⑴定义组件:0~9,+、-、*、/、sqrt()、1/x、%、C=按钮;显示屏文本行;⑵具有进制转换功能;⑶要求能关闭窗口;点击按钮,或键盘数字会在显示屏上输出结果。
3.对设计说明书撰写内容、格式、字数的要求⑴学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。
课程设计说明书(论文)的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
⑵装订格式封面、任务书、成绩评审意见表、摘要和关键词、目录、正文、结论、致谢、参考文献。
⑶课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。
打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。
文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,三级节标题采用黑体小四号字,表题与图题采用宋体五号字。
4. 设计完成后应提交成果的种类、数量、质量等方面的要求⑴课程设计任务书⑵课程设计报告⑶设计成品(光盘)5.时间进度安排6.主要参考资料(文献)[1] 耿祥义.JA V A2 实用教程.北京:清华大学出版社,2006[2] 朱仲杰.JA V A2 全方位学习.北京:机械工业出版社,2006[3] 张思民.JA V A程序设计实践教程.北京:清华大学出版社,2006[4] 汤一平.Java 语言程序设计.北京:科学出版社,2006[5] 刘艺.Java 程序设计大学教程.北京:机械工业出版社,2006*面向对象程序设计课程设计成绩评定表系(部):信息工程系班级:* 学生姓名:*摘要本文重点阐述了如何利用Java语言的特性和语法规则编写了一个科学计算器,实现对数据的简单运算和数据间进制转换的求解。
科学计算器课程设计

徐州师范大学物电学院课程设计报告课程名称:计算机程序设计实训题目:科学计算器专业班级:电子科学与技术说明:1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。
3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。
答辩小组成员应由2人及以上教师组成。
答辩后学生根据答辩情况填写答辩记录表。
4、报告正文字数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。
5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。
6、课程设计完成后,由指导教师根据完成情况写出总结。
7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。
指导教师签字:年月日目录摘要 (II)Abstract (II)1绪论 (1)1.1 背景、目的 (1)1.2 简易计算器的功能 (1)2 设计方案简述 (2)2.1 输入流程分析 (2)2.2 计算流程分析 (2)3 详细设计 (4)3.1 起始设计步骤 (4)3.1界面设计 (5)4 设计结果及分析 (10)4.1 测试设计结果 (10)4.2 设计分析 (10)5 总结 (12)参考文献 (13)附录程序代码 (14)摘要随着计算机网络通信技术、微电子技术的快速发展,作为21世纪的接班人,跟上时代的前进步伐,这就需要适应能够适应现实生活的节奏,现实生活中,很多时候要经行计算来处理一些事务,设计计算器可以帮助人们避免繁琐的计算,也可以加快人们办事效率,设计中运用MFC设计的是简单计算器,包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含三角函数,反三角函数,阶乘,对数,开方,倒数等方面的运算。
可对输入任意的操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
课程设计—模拟计算器设计..

嵌入式课程设计课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091 109031027小组成员:刘锋自动化091 109031023陈奇英自动化091 109031001彭桂贤自动化091 109031002指导老师:陈才摘要:计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。
现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。
所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。
引言:简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、/、=运算键等,还可以加入其他运算:如三角运算(sin,cos,tan,cot等),一些当木运算(平方,开方,阶乘等)。
由于条件和能力有限,所以就做个能实现四则运算的简易计算器。
计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。
通过本次设计,体会到了学习的不易,还有自己能力上的不足!一、课题描述:在STM32开发板上实现简易的计算器。
计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。
最后把运算的结果显示在彩屏。
最基本要求:有加减乘除运算,有带小数点的运算。
二、课题分析a)、硬件要求:处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。
TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。
JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。
py课程设计计算器

py课程设计计算器一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握Python编程语言的基本语法和结构,理解计算器的基本原理和功能。
2.技能目标:学生能够运用Python编程语言编写简单的计算器程序,进行基本的数学运算,并能对程序进行调试和优化。
3.情感态度价值观目标:学生通过学习计算器程序的设计与实现,培养逻辑思维能力、创新意识和团队协作精神。
在教学过程中,我们将根据学生的实际情况,有针对性地进行教学,确保学生达到上述学习目标。
二、教学内容本课程的教学内容主要包括以下几个部分:1.Python编程语言的基本语法和结构:包括变量、数据类型、运算符、控制结构等。
2.计算器的基本原理和功能:包括加、减、乘、除等基本运算,以及科学计算、统计等功能。
3.Python编程语言在计算器程序设计中的应用:包括编写、调试和优化计算器程序。
教学内容将按照教材的章节进行安排,确保学生能够系统地学习和掌握相关知识。
三、教学方法为了提高教学效果,我们将采用以下几种教学方法:1.讲授法:通过讲解Python编程语言的基本语法和结构,使学生掌握相关知识。
2.案例分析法:通过分析计算器程序的案例,使学生了解计算器的基本原理和功能。
3.实验法:让学生动手编写、调试和优化计算器程序,提高学生的实际操作能力。
4.讨论法:在课堂上引导学生进行讨论,培养学生的逻辑思维能力和团队协作精神。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用国内权威的Python编程语言教材,确保学生掌握正确的知识体系。
2.参考书:提供相关的计算器程序设计书籍,丰富学生的知识储备。
3.多媒体资料:制作精美的PPT,直观地展示计算器程序设计的过程和效果。
4.实验设备:提供计算机实验室,让学生进行实际操作和实验。
通过以上教学资源的支持,我们将努力提高教学质量,丰富学生的学习体验。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估学生的学习态度和积极性。
微机课设(模拟计算器运算)

一、设计题目及要求:模拟计算器运算(加,减,乘)设计要求:1.通过小键盘做加、减、乘、括号运算。
数码管显示输入数据和计算结果数据。
2.按键规定:(1)数字用小键盘0~9输入。
(2)功能按键设定:“A”——“+”“D”——“-”“B”——“*”“F”——“括号”“E”——“=”“C”——输入过程中撤消当前运算,此时屏幕显示“0”。
3.其它要求:(1)输入计算数据时,数码管应跟随显示。
若超出显示范围则不响应超出部分。
(2)按“+”、“-”、“*”或“括号”对应按键时,数码管当前显示内容不变。
(3)按“=”时,显示器显示最终计算结果。
若结果超出显示范围时,则显示“F”。
(4)按“C”时,屏幕显示“0”。
(5)需要考虑运算的优先级问题。
(6)只考虑正整数运算,不考虑负数和实数运算。
二、设计思想:调用键盘扫描子程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,并将输入的数字通过调用显示子程序显示到LED显示器上。
利用汇编的程序核对输入键的数值,并把输入的表达式存储为中缀表达式,之后转化为后缀表达式,通过调用加,减,乘,括号,子程序实现后缀表达式的加、减、乘运算。
运算完成后将运算的结果储存并显示到LED显示器上。
简要流程中五大步骤的具体描述步骤(一):从小键盘输入合法中缀算术表达式,并将其存储到S1中此处用系统功能1号调用,每次从键盘输入一个字符,就将其存入到数组S1中,然后在判断此字符是否为等号,如果不是,则循环,继续输入字符,否则,程序往下执行。
步骤(二):调用子程序CHANGE将中缀式转化为后缀式此处最核心的就是中缀表达式转化为后缀表达式的算法。
具体思路为:用一个栈来存储与运算符号.先将字符’@’压入栈中,并假设其优先级为0.然后遍历S1中的字符,遇到数字直接存入S2中并且输完数字后向S2中输入一空格以备计算结果时用。
遇到运算符则先判断其与栈顶运算符的优先级谁大。
如果S1中运算符号优先级大,则此运算符号直接入栈;否则栈顶符号先出栈到S2,待栈顶符号优先级小于S1中符号时,S1中元素入栈。
Java计算器课程设计报告模拟科学计算器

模拟科学计算器一.概述1.程序具备的功能:(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;(2)完成整数、实数的四则运算(加、减、乘、除)以及三角函数的运算等等;(3)通过按钮点击实现数据的复位(清零);(4)实数运算中小数位的精度一致。
实现要点:添加相关组件并进行按钮事件处理。
要求提交源程序。
2.课程设计的主要设计思想对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本,总体界面用布局管理器布局。
布局设计好后再添加按钮事件。
对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除以及三角函数等一系列的运算。
二.课程设计思路1.界面设计界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如下:2.功能介绍这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing 组件以及awt布局,所以简单易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算;还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按Clear撤销后重新输入新数据。
三.设计过程以及源代码程序流程图如下:UML图如下:附录源程序:import java.awt.*;import java.awt.event.*;import java.text.DecimalFormat;import javax.swing.*;public class Calucator extends JFrame {private JTextField tf;private JPanel panel1, panel2, panel3, panel4;private JMenuBar myBar;private JMenu menu1, menu2, menu3;private JMenuItem editItem1, editItem2, help1, help2, help3;private JRadioButtonMenuItem seeItem1, seeItem2;//单选框private JCheckBoxMenuItem seeItem3;//复选框private ButtonGroup bgb;private String back;private boolean IfResult = true, flag = false;private String oper = "=";private double result = 0;private Num numActionListener;private DecimalFormat df;public Calucator(){super("科学计算器");//设置标题栏df = new DecimalFormat("#.####");//保留四位小数this.setLayout(new BorderLayout(10, 5));panel1 = new JPanel(new GridLayout(1, 3, 10, 10));panel2 = new JPanel(new GridLayout(5, 6, 5, 5));//5行6列panel3 = new JPanel(new GridLayout(5, 1, 5, 5));panel4 = new JPanel(new BorderLayout(5, 5));/*** 菜单栏*/myBar = new JMenuBar();menu1 = new JMenu("编辑(E)");menu2 = new JMenu("查看(V)");menu3 = new JMenu("帮助(H)");menu1.setFont(new Font("宋体", Font.PLAIN, 12));menu2.setFont(new Font("宋体", Font.PLAIN, 12));menu3.setFont(new Font("宋体", Font.PLAIN, 12));/*** 编辑栏*/editItem1 = new JMenuItem("复制(C) Ctrl+C"); editItem2 = new JMenuItem("粘贴(P) Ctrl+V");editItem1.setFont(new Font("宋体",Font.PLAIN,12)); editItem2.setFont(new Font("宋体",Font.PLAIN,12));/*** 查看栏*/seeItem1 = new JRadioButtonMenuItem("科学型(T)"); seeItem2 = new JRadioButtonMenuItem("标准型(S)"); seeItem3 = new JCheckBoxMenuItem("数字分组(I)");seeItem1.setFont(new Font("宋体",Font.PLAIN,12)); seeItem2.setFont(new Font("宋体",Font.PLAIN,12)); seeItem3.setFont(new Font("宋体",Font.PLAIN,12));/*** 帮助栏*/help1 = new JMenuItem("帮助主题(H)");help2 = new JMenuItem("关于计算器(A)");help1.setFont(new Font("宋体",Font.PLAIN,12)); help2.setFont(new Font("宋体",Font.PLAIN,12));bgb = new ButtonGroup();//选项组menu1.add(editItem1);menu1.add(editItem2);menu2.add(seeItem1);menu2.add(seeItem2);menu2.addSeparator();//添加一条分割线menu2.add(seeItem3);menu3.add(help1);menu3.addSeparator();//添加一条分割线menu3.add(help2);myBar.add(menu1);myBar.add(menu2);myBar.add(menu3);this.setJMenuBar(myBar);numActionListener = new Num();//实现数字监听/*** 文本域,即为计算器的屏幕显示区域*/tf = new JTextField();tf.setEditable(false);//文本区域不可编辑tf.setBackground(Color.white);//文本区域的背景色tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐tf.setText("0");tf.setBorder(BorderFactory.createLoweredBevelBorder());init();//对计算器进行初始化}/*** 初始化操作* 添加按钮*/private void init(){addButton(panel1, "Backspace", new Clear(), Color.red);addButton(panel1, "CE", new Clear(), Color.red);addButton(panel1, "C", new Clear(), Color.red);addButton(panel2, "1/x", new Signs(), Color.magenta);addButton(panel2, "log", new Signs(), Color.magenta);addButton(panel2, "7", numActionListener, Color.blue);addButton(panel2, "8", numActionListener, Color.blue);addButton(panel2, "9", numActionListener, Color.blue);addButton(panel2, "÷", new Signs(), Color.red);addButton(panel2, "n!", new Signs(), Color.magenta);addButton(panel2, "sqrt", new Signs(), Color.magenta);addButton(panel2, "4", numActionListener, Color.blue);addButton(panel2, "5", numActionListener, Color.blue);addButton(panel2, "6", numActionListener, Color.blue);addButton(panel2, "×", new Signs(), Color.red);addButton(panel2, "sin", new Signs(), Color.magenta);addButton(panel2, "x^2", new Signs(), Color.magenta);addButton(panel2, "1", numActionListener, Color.blue);addButton(panel2, "2", numActionListener, Color.blue);addButton(panel2, "3", numActionListener, Color.blue);addButton(panel2, "-", new Signs(), Color.red);addButton(panel2, "cos", new Signs(), Color.magenta);addButton(panel2, "x^3", new Signs(), Color.magenta);addButton(panel2, "0", numActionListener, Color.blue);addButton(panel2, "-/+", new Clear(), Color.blue);addButton(panel2, ".", new Dot(), Color.blue);addButton(panel2, "+", new Signs(), Color.red);addButton(panel2, "tan", new Signs(), Color.magenta);addButton(panel2, "%", new Signs(), Color.magenta);addButton(panel2, "π", numActionListener, Color.orange);addButton(panel2, "e", numActionListener, Color.orange);addButton(panel2, "′″", new Signs(), Color.orange);addButton(panel2, "=", new Signs(), Color.red);JButton btns = new JButton("计算器");btns.setBorder(BorderFactory.createLoweredBevelBorder());btns.setEnabled(false);//按钮不可操作btns.setPreferredSize(new Dimension(20, 20));panel3.add(btns);//加入按钮addButton(panel3, "MC", null, Color.red);//用于清除存储区中的数值addButton(panel3, "MR", null, Color.red);//可将存储区中的数调出到显示栏中addButton(panel3, "MS", null, Color.red);//存储当前的显示值 addButton(panel3, "M+", null, Color.red);//将当前显示的数与存储区中的数相加panel4.add(panel1, BorderLayout.NORTH);panel4.add(panel2, BorderLayout.CENTER);this.add(tf, BorderLayout.NORTH);this.add(panel3, BorderLayout.WEST);this.add(panel4);pack();this.setResizable(false);//窗口不可改变大小this.setLocation(300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}/*** 统一设置按钮的的使用方式* @param panel* @param name* @param action* @param color*/private void addButton(JPanel panel, String name, ActionListener action, Color color){JButton bt = new JButton(name);panel.add(bt);//在面板上增加按钮bt.setForeground(color);//设置前景(字体)颜色bt.addActionListener(action);//增加监听事件}/*** 计算器的基础操作(+ - ×÷)* @param x*/private void getResult (double x){if(oper == "+"){result += x;}else if(oper == "-"){result -= x;}else if(oper == "×"){result *= x;}else if(oper == "÷"){result /= x;}else if(oper == "="){result = x;}tf.setText(df.format(result));}/*** 运算符号的事件监听*/class Signs implements ActionListener{public void actionPerformed(ActionEvent e) {/** 用ActionEvent对象的getActionCommand()方法* 取得与引发事件对象相关的字符串*/String str = e.getActionCommand();/* sqrt求平方根 */if(str.equals("sqrt")){double i = Double.parseDouble(tf.getText());if(i>=0){/** String.valueOf() 转换为字符串* df.format() 按要求保留四位小数* Math.sqrt() 求算数平方根*/tf.setText(String.valueOf(df.format(Math.sqrt(i))));}else{tf.setText("负数不能开平方根");}}/* log求常用对数 */else if(str.equals("log")){double i = Double.parseDouble(tf.getText());if(i>0){tf.setText(String.valueOf(df.format(Math.log(i))));}else{tf.setText("负数不能求对数");}}/* %求百分比 */else if(str.equals("%")){tf.setText(df.format(Double.parseDouble(tf.getText()) / 100));}/* 1/x求倒数 */else if(str.equals("1/x")){if(Double.parseDouble(tf.getText()) == 0){tf.setText("除数不能为零");}else{tf.setText(df.format(1 / Double.parseDouble(tf.getText())));}}/* sin求正弦函数 */else if(str.equals("sin")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.sin(i))));}/* cos求余弦函数 */double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.cos(i)))); }/* tan求正切函数 */else if(str.equals("tan")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.tan(i)))); }/* n!求阶乘 */else if(str.equals("n!")){double i = Double.parseDouble(tf.getText());if((i%2==0)||(i%2==1))//判断为整数放进行阶乘操作{int j = (int)i;//强制类型转换int result=1;for(int k=1;k<=j;k++)result *= k;tf.setText(String.valueOf(result));}else{tf.setText("无法进行阶乘");}}/* x^2求平方 */else if(str.equals("x^2")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i*i)));}/* x^3求立方 */else if(str.equals("x^3")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i*i*i)));}/* ′″角度转换 *//*** 将角度值转换成弧度值,方便三角函数的计算*/double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(i/180*Math.PI));}else{if(flag){IfResult = false;}if(IfResult){oper = str;}else{getResult(Double.parseDouble(tf.getText()));oper = str;IfResult = true;}}}}/*** 清除按钮的事件监听*/class Clear implements ActionListener{public void actionPerformed(ActionEvent e) {/** 用ActionEvent对象的getActionCommand()方法* 取得与引发事件对象相关的字符串*/String str = e.getActionCommand();if(str == "C"){tf.setText("0");IfResult = true;result = 0;}else if(str == "-/+"){double i = 0 - Double.parseDouble(tf.getText().trim());tf.setText(df.format(i));}else if(str == "Backspace"){if(Double.parseDouble(tf.getText()) > 0){if(tf.getText().length() > 1){tf.setText(tf.getText().substring(0,tf.getText().length() - 1));//使用退格删除最后一位字符}else{tf.setText("0");IfResult = true;}}else{if(tf.getText().length() > 2){tf.setText(tf.getText().substring(0, tf.getText().length() - 1));}else{tf.setText("0");IfResult = true;}}}else if(str == "CE"){tf.setText("0");IfResult = true;}}}/*** 数字输入的事件监听*/class Num implements ActionListener{public void actionPerformed(ActionEvent e) {String str = e.getActionCommand();if(IfResult){tf.setText("");IfResult = false;}if(str=="π"){tf.setText(String.valueOf(Math.PI));}else if(str=="e"){tf.setText(String.valueOf(Math.E));}else{tf.setText(tf.getText().trim() + str);if(tf.getText().equals("0")){tf.setText("0");IfResult = true;flag = true;}}}}/*** 小数点的事件监听*/class Dot implements ActionListener{public void actionPerformed(ActionEvent e) { IfResult = false;if(tf.getText().trim().indexOf(".") == -1){tf.setText(tf.getText() + ".");}}}/*** main方法*/public static void main(String[] args) {new Calucator().setVisible(true);}}四.程序的调试与运行结果说明界面展示:实际运算结果展示:55+45当除数为0时,对应的输出:“除数不能为0”的提示:五.课程设计总结在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。
c课程设计简易计算器

c 课程设计简易计算器一、课程目标知识目标:1. 让学生掌握简易计算器的基本功能与操作,包括加、减、乘、除等四则运算。
2. 使学生理解计算器的工作原理,了解显示屏、键盘等组成部分及其作用。
3. 帮助学生掌握计算器的使用规范,如开关机、输入输出等基本操作。
技能目标:1. 培养学生运用计算器解决实际问题的能力,提高计算速度和准确性。
2. 培养学生通过观察、尝试、探索等方法,自主发现计算器操作技巧和功能特点。
3. 培养学生合作交流的能力,学会在小组讨论中分享观点,共同解决问题。
情感态度价值观目标:1. 激发学生对计算器的学习兴趣,培养良好的学习习惯和探究精神。
2. 培养学生尊重科学、严谨求实的态度,树立正确的价值观。
3. 培养学生团队协作意识,增强合作解决问题的能力。
本课程针对小学四年级学生,结合教材内容,以实用性为导向,注重培养学生的动手操作能力和实际问题解决能力。
课程目标明确,易于衡量,为后续教学设计和评估提供依据。
在教学过程中,教师应关注学生个体差异,因材施教,确保每位学生都能在课程中收获知识和技能。
二、教学内容本章节教学内容主要包括以下几部分:1. 计算器的基本结构:介绍计算器的显示屏、键盘、电池等组成部分及其功能。
2. 四则运算操作:详细讲解加、减、乘、除四则运算在计算器上的操作步骤。
3. 计算器操作规范:教授计算器的开关机、清屏、输入输出等基本操作规范。
4. 实际问题解决:结合教材实例,引导学生运用计算器解决生活中的实际问题。
5. 操作技巧与功能探索:指导学生探索计算器的其他功能,如百分比、乘方等,并分享操作技巧。
教学内容安排如下:第一课时:计算器的基本结构及操作规范介绍。
第二课时:四则运算操作教学,以教材为例题进行讲解和实操。
第三课时:实际问题解决,分组讨论并运用计算器解决生活中的数学问题。
第四课时:操作技巧与功能探索,学生自主探究计算器其他功能并分享。
教学内容与教材紧密关联,确保科学性和系统性。
模拟计算器程序课程设计

模拟计算器程序-课程设计模拟计算器学生姓名:**** 指导老师:****摘要本课程设计的课题是设计一个模拟计算器的程序,能够进行表达式的计算,并且表达式中可以包含Abs()和Sqrt()运算。
在课程设计中,系统开发平台为Windows ,程序设计设计语言采用C++,程序运行平台为Windows 或*nix。
本程序的关键就是表达式的分离和处理,在程序设计中,采用了将输入的中缀表达式转化为后缀表达式的方法,具有可靠的运行效率。
本程序做到了对输入的表达式(表达式可以包含浮点数并且Abs()和Sqrt()中可以嵌套子表达式)进行判定表达式是否合法并且求出表达式的值的功能。
经过一系列的调试运行,程序实现了设计目标,可以正确的处理用户输入的表达式,对海量级数据都能够通过计算机运算快速解决。
关键词C++程序设计;数据结构;表达式运算;栈;中缀表达式;后缀表达式;字符串处理;表达式合法判定;目录1 引言 (4)1.1课程设计目的 (4)1.2课程设计内容 (5)2 设计思路与方案 (5)3 详细实现 (6)3.1 表达式的合法判定 (6)3.2 中缀表达式转化为后缀表达式 (7)3.3 处理后缀表达式 (10)3.4 表达式嵌套处理 (12)4 运行环境与结果 (13)4.1 运行环境 (13)4.2 运行结果 (13)5 结束语 (16)参考文献 (17)附录1:模拟计算器源程序清单 (18)1 引言本课程设计主要解决的是传统计算器中,不能对表达式进行运算的问题,通过制作该计算器模拟程序,可以做到快速的求解表达式的值,并且能够判定用户输入的表达式是否合法。
该模拟计算器的核心部分就在用户输入的中缀表达式的转化,程序中用到了“栈”的后进先出的基本性质。
利用两个“栈”,一个“数据栈”,一个“运算符栈”来把中缀表达式转换成后缀表达式。
最后利用后缀表达式来求解表达式的值。
该算法的复杂度为O(n),能够高效、快速地求解表达式的值,提高用户的效率。
科学计算器课程设计报告C++课程设计

科学计算器摘要摘要计算器的产生和发展是建立在电子计算机基础之上的。
硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。
软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。
在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。
能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。
此系统在Windows 7环境下,使用VC++ 6.0进行编写。
简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。
可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
并且包含清除,退格功能等。
我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。
关键词:计算器;运算;VC++等采用的类的数据类型:class CCalculatorDlg : public CDialog{public:void clean_aliter();CString OLD_ANSWER;void out_change(int system);CCalculatorDlg(CWnd* pParent = NULL); // standard constructorint Sel,EndSel; //定义输入或插入时光标的位置int Expr_pos; //词法分析表达式时,标记当前字符位置int OS_pos ; //操作数栈顶位置int old_pos; //历史表达式的位置int old_head; //历史表达式数组中最最前位置int old_back; //历史表达式数组中最最后位置int error_mark; //标记表达式错误int parentheses_count; //记录表达式中括号的个数double operand_Stack[200]; //操作数栈CString old_expression[20]; //表达式历史记录void getword(WordType & w_type ,Operator& Fun_Ope,int system); //词法分析函数int getword16(); int getword10(); int getword8(); int getword2();//将用字符表示的N(2,8,10,16)进制转为浮点型void E_AddSub(); //加减void T_MulDiv(); //乘除void F_Power(); //乘方void L_Function(); //函数void H_Digit(); //数字void Factorial(); //阶乘void P_expression(); //括号void compute(Operator Op); //计算void error(int ); //错误标记函数void clean_all(); //清空表达式和计算结果protected:HICON m_hIcon;DECLARE_MESSAGE_MAP()};程序中所用到相关专业知识:类,对象数组,友元函数,继承与派生,指针,枚举,,数栈,算法目录前言 (1)第一章系统需求 (2)1.1 简介说明 (2)1.1.1 系统要求 (2)1.1.2 具体任务 (2)1.1.3 研究目的 (2)1.2 设计分析 (3)1.2.1 可行性分析 (3)1.2.2 需求分析 (3)1.2.3设计结构 (3)1.3 开发环境 (3)1.3.1 运行环境 (3)1.3.2 开发工具 (3)1.3.3 关于Visual C++ 6.0 (4)第二章系统设计 (5)2.1功能说明 (5)2.1.1 系统总体功能分析 (5)2.1.2 系统功能 (5)2.1.3课程设计内容 (6)2.2设计大概 (6)2.2.1设计思路 (6)2.2.2控件定义 (7)2.2.3 变量的定义以及初始化 (8)第三章系统实现 (9)3.1窗体设计 (9)3.1.1设计步骤 (9)3.1.2控件定义 (9)3.1.3一部分操作截图 (10)3.2 程序核心代码 (11)3.2.1数字键和字母键核心代码 (11)3.2.2计算类型函数的核心代码 (11)3.2.3 提示错误的核心代码 (13)3.2.4进制转换的核心代码 (14)3.2.5八进制单选按钮消息响应函数代码 (16)3.2.6二进制单选按钮消息响应函数 (17)第四章系统运行 (20)4.1测试以及运行界面 (20)4.1.1 程序主界面测试 (20)4.1.2运行的计算结果 (20)4.1.3转换进制计算 (21)4.2 测试 (22)4.2.1测试研究与选择 (22)4.2.2测试环境 (22)总结 (23)参考文献 (24)前言Visual C++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。
课程设计设计计算器

课程设计设计计算器一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握计算器的基本原理和使用方法,理解计算器在数学和科学领域的应用。
技能目标要求学生能够熟练操作计算器,进行基本的算术运算、科学计算和数据处理。
情感态度价值观目标要求学生培养对科学技术的兴趣和好奇心,提高解决实际问题的能力,培养创新精神和团队合作意识。
通过分析课程性质、学生特点和教学要求,我们将目标分解为具体的学习成果。
课程目标明确,有利于学生和教师清晰地了解课程的预期成果,为后续的教学设计和评估提供依据。
二、教学内容根据课程目标,我们选择和了以下教学内容:1.计算器的基本原理:介绍计算器的电路结构、工作原理和编程方法。
2.计算器的使用方法:讲解计算器的各种功能键、操作界面和操作步骤。
3.计算器在数学领域的应用:举例说明计算器在代数、几何、概率等数学领域的应用。
4.计算器在科学领域的应用:介绍计算器在物理、化学、生物等科学领域的应用实例。
5.计算器编程:教授计算器的基本编程语言和编程技巧,让学生能够编写简单的计算器程序。
教学大纲将按照以上内容的安排和进度进行教学,确保内容的科学性和系统性。
三、教学方法为了激发学生的学习兴趣和主动性,我们选择以下教学方法:1.讲授法:教师讲解计算器的基本原理、使用方法和应用领域。
2.讨论法:学生分组讨论计算器编程技巧和解决实际问题的方法。
3.案例分析法:分析计算器在数学和科学领域中的应用案例,让学生加深理解。
4.实验法:学生动手操作计算器,进行编程和实践,提高操作技能。
通过多样化的教学方法,我们能够激发学生的学习兴趣,培养他们的创新精神和团队合作意识。
四、教学资源为了支持教学内容和教学方法的实施,我们选择和准备了以下教学资源:1.教材:选用权威、实用的计算器教材,为学生提供系统的学习材料。
2.参考书:提供相关的计算器参考书籍,丰富学生的知识储备。
3.多媒体资料:制作课件、视频等多媒体资料,生动展示计算器的使用和应用。
数据结构与算法课程设计--模拟简单计算器

数据结构与算法课程设计--模拟简单计算器数据结构与算法课程设计模拟简单计算器在计算机科学领域中,数据结构和算法是非常重要的基础知识。
本次课程设计的目标是模拟一个简单计算器,通过这个实践项目,深入理解和应用数据结构与算法的相关知识。
首先,让我们来明确一下简单计算器需要实现的功能。
它应该能够进行基本的四则运算,即加法、减法、乘法和除法。
同时,还需要支持输入多个操作数和运算符,能够按照正确的运算顺序进行计算。
为了实现这个简单计算器,我们需要选择合适的数据结构来存储输入的操作数和运算符。
考虑到操作的顺序性和灵活性,栈这种数据结构是一个不错的选择。
栈具有先进后出的特点,可以方便地处理运算的优先级。
接下来,我们开始设计算法。
当用户输入一个表达式时,程序需要对其进行解析。
首先,将表达式中的数字和运算符分别提取出来,并按照顺序存储在相应的栈中。
在计算过程中,从运算符栈中取出运算符,从操作数栈中取出相应的操作数进行计算,将结果重新压入操作数栈中。
在具体的实现过程中,我们需要处理一些特殊情况。
例如,除数不能为零的情况。
当遇到除法运算且除数为零时,程序应该给出相应的错误提示。
另外,对于表达式的合法性也需要进行检查。
比如,输入的表达式是否符合基本的数学运算规则,是否存在多余的字符或不匹配的括号等。
如果表达式不合法,程序也需要给出明确的提示信息,以便用户能够及时修正。
为了提高程序的可读性和可维护性,我们采用模块化的编程思想。
将表达式解析、运算处理、错误检查等功能分别封装成独立的函数,这样在后续的调试和优化过程中会更加方便。
```pythonclass Stack:def __init__(self):selfitems =def push(self, item):selfitemsappend(item)def pop(self):if not selfis_empty():return selfitemspop()else:return Nonedef is_empty(self):return len(selfitems) == 0def calculate(expression):operand_stack = Stack()operator_stack = Stack()num =""for char in expression:if charisdigit():num += charelif char in "+/":if num!="":operand_stackpush(int(num))num =""operator_stackpush(char)if num!="":operand_stackpush(int(num))while not operator_stackis_empty():operator = operator_stackpop()operand2 = operand_stackpop()operand1 = operand_stackpop()if operator =='+':result = operand1 + operand2 elif operator =='':result = operand1 operand2elif operator =='':result = operand1 operand2elif operator =='/':if operand2 == 0:print("除数不能为零!")returnresult = operand1 / operand2 operand_stackpush(result)return operand_stackpop()测试代码expression ="2+34-5/2"print(calculate(expression))```在上述代码中,我们首先定义了一个栈类`Stack`,用于存储操作数和运算符。
java课程设计模拟科学计算器共16页文档

JAVA课程设计说明书题目:模拟科学计算器姓名:学号:班级:网络工程11-2山东科技大学2019年11月7日目录1 课设任务及要求.............................. 错误!未定义书签。
1.1课设任务 (3)1.2设计要求 (3)2 需求分析 (2)2.1 设计背景 (2)2.2 需求获取 (3)2.3 程序功能图 (4)3 设计思路 (4)3.1 界面布局 (4)3.2 类的定义 (5)3.3变量的定义 (5)4 详细设计 (6)4.1整体概述 (6)4.2 误操作处理 (7)4.3流程图和结构图 (8)5 系统调试 (11)5.1 程序界面 (11)5.2 运行界面 (11)6 心得与体会 (15)7 参考文献 (16)8 附录 (16)1 课设任务及要求1.1课设任务:要求:界面模拟Windows中的计算器程序。
实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。
实现要点:添加相关组件并进行按钮事件处理。
要求提交Application和Applet两个版本的程序。
1.2设计要求①设计的java计算器应用程序可以完成加法、减法、乘法、除法和取余运算,和cos,sin,tan等三角函数功能以及阶乘和指数等运算,且有小数点、正负号、求倒数、退格和清零功能。
具体可参考windows附件下的计算器②课程设计使用Eclipse4.2等作为程序编译和运行测试的开发平台,采用JDK-7u25作为java开发环境,使用Microsoft Office Visio 2019作为绘图工具。
③认真按时完成课程设计报告,制作演讲PPT,积极报名上讲台向大家演示和讲解自己的程序。
提交打印版的报告以及电子版的原稿和Application和Applet两个版本的程序代码。
2 需求分析2.1 设计背景本程序是老师提供的几个课程设计题目中比较中等的题目。
要求实现模拟的科学计算器功能,主要包括加减乘除四则运算和阶乘,三角函数以及指数的运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件学院课程设计报告书课程名称面向对象程序设计设计题目模拟科学计算器专业班级软件工程11级1班学号姓名指导教师2013 年6 月目录1 设计时间 (3)2 设计目的 (3)3设计任务 (3)4 设计内容 (3)4.1需求分析 (3)4.1.1问题描述 (3)4.1.2基本要求 (3)4.2总体设计 (3)4.2.1 包的描述 (3)4.2.2 类的描述 (4)4.2.3类之间的关系 (4)4.3详细设计 (5)4.3.1类图 (5)4.3.2页面设计 (6)4.4测试与分析 (6)4.5 程序代码 (9)5总结与展望 (18)参考文献 (19)成绩评定 (19)1 设计时间2013年6月7日-14日2 设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能力。
3设计任务模拟科学计算器要求:界面模拟Windows中的计算器程序。
实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。
实现要点:添加相关组件并进行按钮事件处理。
4 设计内容4.1需求分析4.1.1问题描述日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet 中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。
4.1.2基本要求本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其他的辅助功能(阶乘、正弦、余弦、指数运算);界面简洁实用,模拟Windows中的计算器程序。
要提供主要的设计思路、类的设计。
4.2总体设计4.2.1 包的描述本程序导入了java.awt.BorderLayout包,java.awt.Color包,java.awt.GridLayout包,java.awt.event.ActionEvent包,java.awt.event.ActionListener包,java.text.DecimalFormat包,javax.swing.JButton包,javax.swing.JFrame包,javax.swing.JPanel包,javax.swing.JTextField包4.2.2 类的描述本程序共有五个类。
其中Calculator是主类,main方法里会建立一个Calculator对象。
Signs类为内部类,是一个监听器类,实现Actionlistener,实现运算符号的事件监听。
当运算符号为一目运算符(sin,cos,n!)时,实现该类的actionPerformed方法,对sin,cos,n!按钮进行事件处理。
Clear类为内部类,是一个监听器类,实现Actionlistener,实现清除按钮的事件监听。
当按钮为"C"(清零)或"Backspace"时,实现该类的actionPerformed方法,对C,Backspace按钮进行事件处理。
Num类为内部类,是一个监听器类,实现Actionlistener,实现数字输入的事件监听。
当点击0-9这十个数字按钮时,如果是要输入的运算数则将文本框清空后将数字显示在文本框中。
Dot类为内部类,是一个监听器类,实现Actionlistener,实现小数点的事件监听。
当点击小数点按钮时,如果文本框中输入值中没有小数点则在文本后加一个小数点。
4.2.3类之间的关系类Calculator与Signs类、Clear类、Num类、Dot类是依赖关系,Calculator依赖于Signs类、Clear类、Num类、Dot类。
Calculator类中初始化init方法中调用addButton 方法,其中创建了Signs类、Clear类、Num类、Dot类的实例,以实现Calculator类的实例的创建。
Signs类、Clear类、Num类、Dot类与Calculator类有关联关系。
Signs 类、Clear类、Num类、Dot类中的actionPerformed方法中调用了Calculator类中的私有变量tf、IfResult、oper、result、df,与Calculator类中这些变量值相关联。
4.3.1类图(1)Calculator 类图 (2)Signs 类图 (3)Clear 类图(4)Num 类 (5)Dot 类Calculator 类 tf panel1 Panel2 Panel3 IfResult oper result dfcalculator () init () addButton () getResult () main ()Signs 类actionPerformed ()Clear 类actionPerformed ()Num 类actionPerformed ()Dot 类actionPerformed ()图4.3.1-1Calculator 类 图4.3.1-3Clear 类图4.3.1-2Signs 类 图4.3.1-4Num 类图4.3.1-5Dot 类图4.3.2-1科学计算器页面4.4测试与分析(1)加运算(2)减运算图4.4-1加运算1+2结果图4.4-2减运算18-3结果(3)乘运算(4)除运算图4.4-3乘运算2×4结果图4.4-4除运算8÷5结果(5)退格(2)清零图4.4-5Backspace1.6退格结果图4.4-6C1.清零结果(7)正弦运算(8)余弦运算图4.4-7sin90结果图4.4-8cos90结果(9)指数运算(10)阶乘运算图4.4-9 2^3结果图4.4-10 8!结果4.5 程序代码import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.DecimalFormat;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class Calculator extends JFrame{private JTextField tf;private JPanel panel1, panel2, panel3;private boolean IfResult = true;private String oper = "=";private double result = 0;private DecimalFormat df;public Calculator(){super("科学计算器"); //设置标题栏df = new DecimalFormat("#.####"); //保留四位小数this.setLayout(new BorderLayout(10, 5));panel1 = new JPanel(new GridLayout(1, 2, 10, 10));panel2 = new JPanel(new GridLayout(5, 4, 5, 5));//5行4列panel3 = new JPanel(new BorderLayout(5, 5));tf = new JTextField(); //文本域,即为计算器的屏幕显示区域tf.setEditable(false); //文本区域不可编辑tf.setBackground(Color.white); //文本区域的背景色tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐tf.setText("0");init(); //对计算器进行初始化}private void init() //初始化操作,添加按钮{addButton(panel1, "Backspace", new Clear(), Color.orange);addButton(panel1, "C", new Clear(), Color.orange);addButton(panel2, "7", new Num(), Color.blue);addButton(panel2, "8", new Num(), Color.blue);addButton(panel2, "9", new Num(), Color.blue);addButton(panel2, "÷", new Signs(), Color.red);addButton(panel2, "4", new Num(), Color.blue);addButton(panel2, "5", new Num(), Color.blue);addButton(panel2, "6", new Num(), Color.blue);addButton(panel2, "×", new Signs(), Color.red);addButton(panel2, "1", new Num(), Color.blue);addButton(panel2, "2", new Num(), Color.blue);addButton(panel2, "3", new Num(), Color.blue);addButton(panel2, "-", new Signs(), Color.red);addButton(panel2, ".", new Dot(), Color.blue);addButton(panel2, "0", new Num(), Color.blue);addButton(panel2, "!", new Signs(), Color.magenta);addButton(panel2, "+", new Signs(), Color.red);addButton(panel2, "sin", new Signs(), Color.magenta);addButton(panel2, "cos", new Signs(), Color.magenta);addButton(panel2, "^", new Signs(), Color.magenta);addButton(panel2, "=", new Signs(), Color.cyan);panel3.add(panel1, BorderLayout.NORTH);panel3.add(panel2, BorderLayout.CENTER);this.add(tf, BorderLayout.NORTH);this.add(panel3);pack();this.setResizable(false); //窗口不可改变大小this.setLocation(300, 200);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}private void addButton(JPanel panel, String name, ActionListener action, Color color) { // 统一设置按钮的的使用方式JButton bt = new JButton(name);panel.add(bt); //在面板上增加按钮bt.setForeground(color); //设置前景(字体)颜色bt.addActionListener(action); //增加监听事件}private void getResult (double x) //+-×÷^=操作{if(oper == "+"){result += x;}elseif(oper == "-"){result -= x;}elseif(oper == "×"){result *= x;}elseif(oper == "÷"){result /= x;}elseif(oper=="^"){result=Math.pow(result, x);}elseif(oper == "="){result = x;}tf.setText(df.format(result));}class Signs implements ActionListener{public void actionPerformed(ActionEvent e){String str = e.getActionCommand();if(str.equals("sin")) // sin求正弦函数{double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.sin(i))));}else if(str.equals("cos")) // cos求余弦函数{double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.cos(i))));}else if(str.equals("!")) // n!求阶乘{double i = Double.parseDouble(tf.getText());if((i%2==0)||(i%2==1)) //如果是整数进行阶乘操作{int j = (int)i; //强制类型转换int result=1;for(int k=1;k<=j;k++)result *= k;tf.setText(String.valueOf(result));}else{tf.setText("无法进行阶乘");}}else{getResult(Double.parseDouble(tf.getText()));oper = str;IfResult = true;}}}class Clear implements ActionListener{public void actionPerformed(ActionEvent e){String str = e.getActionCommand();if(str == "C"){tf.setText("0");IfResult = true;result = 0;}else if(str == "Backspace"){if(Double.parseDouble(tf.getText()) > 0){if(tf.getText().length() > 1){tf.setText(tf.getText().substring(0, tf.getText().length() - 1));//使用退格删除最后一位字符}else{tf.setText("0");IfResult = true;}}else{if(tf.getText().length() > 2){tf.setText(tf.getText().substring(0, tf.getText().length() - 1));}else{tf.setText("0");IfResult = true;}}}}}class Num implements ActionListener{public void actionPerformed(ActionEvent e) {String str = e.getActionCommand();if(IfResult){tf.setText("");IfResult = false;}else{tf.setText(tf.getText().trim() + str);if(tf.getText().equals("0")){tf.setText("0");IfResult = true;}}}}class Dot implements ActionListener{public void actionPerformed(ActionEvent e) {IfResult = false;if(tf.getText().trim().indexOf(".") == -1){tf.setText(tf.getText() + ".");}}}public static void main(String[] args){new Calculator().setVisible(true);}}5总结与展望通过这次课程设计,我真的在实践中学到的不仅是课本知识的巩固和提高,而且还有在实践中使我着手解决不少程序设计的细节问题。