实验报告高级计算器

https://github.com/lyn2313121/mm

package 高级计算器;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculater extends JFrame implements ActionListener{
JTextField x; //文本框
String preOperater=""; //上一次的运算符
double sum=0; //运算结果
public Calculater(String title){
super(title);
Container c=getContentPane(); //容器
c.setLayout(new BorderLayout()); //容器采用边缘布局
x=new JTextField(50);
c.add("North",x);
String buttoned[]={"0","1","2","3","+/-",".","C","退格","求倒","4","5","6","7","+","-","*","/","%","8","9","=","sqrt","pow","log","cos","tan","exp"};
JPanel p=new JPanel(); //面板
p.setLayout(new GridLayout(3,9,10,10)); //面板采用行列数3,6的网格布局
for(int k=0;k<buttoned.length;k++) { //用一个for循环将按钮添加进面板并注册监听器
JButton b=new JButton(buttoned[k]);
p.add(b);
b.addActionListener(this);
}
c.add("Center",p);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

//响应用户事件,根据点击按钮实现相关操作
public void actionPerformed(ActionEvent e){
String Command=e.getActionCommand();
try{
if(Character.isDigit(Command.charAt(0))){ //如果按钮事件为数字键
x.setText(x.getText()+Command); //添加数字
}
else if(Command.equals(".")){ //如果按钮事件为"."键
xiaoshu();
}
else if(Command.equals("+/-")) { //如果按钮事件为"+/-"键
fuhao();
}
else if (Command.equals("退格")){ //如果按钮事件为"退格"键
backspace();
}
else if(Command.equals("=")){ //如果按钮事件为"="键
dengyu();
}
else if(Command.equals("sqrt")){ //如果按钮事件为"sqrt"键
sqrt();
}
else if(Command.equals("log")){ //如果按钮事件为"log"键
log();
}
else if(Command.equals("cos")){ //如果按钮事件为"cos"键
cos();
}
else if(Command.equals("tan")){ //如果按钮事件为"tan"键
tan();
}
else if(Command.equals("exp")){ //如果按钮事件为"exp"键
exp();
}
else if (Command.equals("求倒")) { //如果按钮事件为"求倒"键
qiudao();
}
else if(Command.equals("C")){ //如果按钮事件为"C"键
clear();
}
else { doOperation(); //记录运算符和输入的数字
x.setText("");
preOperater=Command;
}
}catch(Exception ex) {sum=0; x.setText("");}
}

void xiaoshu(){ //添加小数点
String s=x.getText();
if(s.indexOf(".")==-1)
x.setText(s+".");
}

void fuhao(){ //添加负号
String s=x.getText();
if(s.indexOf("-")==-1)
x.setText("-"+x.getText());
}

void backspace(){ //退格
String s=x.getText();
if(s.length()>0)
x.setText(s.substring(0,s.length()-1)); //删除最后一个字符
}

void dengyu(){ //等号,显示计算结果
doOperation();
x.setText(""+sum);
preOperater="";
}

void sqrt(){ //求该数的平方根
double m=Double.parseDouble(x.getText());
if (m<0)
x.setText("负数不能开根号");
else
x.setText(""+Math.sqrt(m));
}

void log(){ //求该数的自然对数
double m=Double.parseDouble(x.getText());
if (m<0)
x.setText("负数不能进行自然对数运算");
else
x.setText(""+Math.log(m));
}

void cos(){ //求该数的余弦
double m=Double.parseDouble(x.getText());
x.setText(""+Math.cos(m));
}

void tan(){ //求该数的正切
double m=Double.parseDouble(x.getText());
x.setText(""+Math.tan(m));
}

void exp(){ //求e的幂
double m=Double.parseDouble(x.getText());
x.setText(""+Math.exp(m));
}

void qiudao(){ //求倒
if (Double.parseDouble(x.getText())==0)
x.setText("除数不能为零");
else{
x.setText(""+1/(Double.parseDouble(x.getText())));
preOperater="";
}
}

void clear(){ //清零
sum=0;
x.setText("");
preOperater="";
}

//根据记录的运算符将前面记录的结果sum与文本框中的数据进行运算
void doOperation(){
double m=Double.parseDouble(x.getText());
if(preOperater.equals("")) sum=m;
//将结果与文本框中的数据按照前一个运算符运算
if(preOperater.equals("+")) sum=sum+m; //加法运算
if(preOperater.equals("-")) sum=sum-m; //减法运算
if(preOperater.equals("*")) sum=sum*m; //乘法运算
if(preOperater.equals("/")) sum=sum/m; //除法运算
if(preOperater.equals("%")) sum=sum%m; //求余
if(preOperater.equals("pow")) sum=Math.pow(sum, m); //求幂
}

public static void main(String a[]){
JFrame x=new Calculater("计算器");
x.setSize(650,300);
x.setVisible(true);
}
}

实验心得

在这一系列的实验中,我基本掌握了Java的编程规则、知识要点和一些小技巧,特别是对面向对象的编程思想和风格有了进一步的认识和体会。同时,因正确的编出程序而带来的成就感让我对编程更加感兴趣。对于在这些实验过程中,请教老师、同学互助、查阅资料等基本的学习方式,使我更加领悟到集体和团队的力量,也树立了敢于攻坚的信心。说起来编程的经验应该是多了很多。但是在上机调试的时候还是遇到了相当多的问题。很多的错误都很难体会,有的时候是输入的错误,这种错误还是比较容易找出来的,但是有些问题,比如一些题目需要导入一些包,这一点就没有办法了。发现JAVA虽然看起来比C或C++要容易一点,但是由于它自身带有相当多的方法定义,这些个方法虽然不用我们自己再去编写了但是需要花相当多的时间去记忆那些方法是需要导入的,还有方法名……所以对我来说这真的是比C里简单几个文件的导入还要难上很多……还是觉得自己编的方法(函数)自己用的习惯。不过现在的编程的方向已经是面向对象和面向数据的了,所以我需要时间去适应这样的编程思想。
时间: 2024-10-10 03:47:38

实验报告高级计算器的相关文章

结对实验报告-android计算器设计

 一:引言  目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随着手机的发展变得丰富起来了,时至今日已经出现了很多专门制作手机软件的公司,虽然制作的多是游戏软件,但是一些辅助性的工具软件也有了很多.我们在此次系统中所做的工作主要是设计整个系统以及利用编程语言实现整个系统,使系统能够正确的运行计算功能. 二:需求分析 状态定义:能满足基本的数学运算.具体要求如下:

DAY01 WINDOWS 实验报告

DAY 01   Windows 实验一 实验名称:虚拟机的安装以及win7系统的安装 实验描述:学习安装虚拟机,以及安装不同的系统,可以满足用户不同时期的不同的需求 实验步骤: 步骤1:点击开始-选择vmware文件夹-点击Vmware Workstation                             步骤2:点击文件-新建虚拟机-下一步-选择客户机操作系统和版本-选择虚拟机安装位置-设置虚拟机的处理器.内存等信息-完成虚拟机裸机的安装 步骤3:点击编辑虚拟器-双击CD/DVD(

DAY03 WINDOWS 实验报告

实验一 实验名称:将用户加入内置组 实验描述:学习配置用户和组,将tom具有更改IP地址的权限 实验步骤: 步骤1:打开服务器管理器-配置-本地用户和组-用户-右击新用户-新建用户tom 步骤2:双击tom-点击添加-高级-立即查找-选择network configuration operators-确定-确定-确定 步骤3:切换到用户tom-开始-右击网络-更改适配器设置-属性-输入用户密码-设置IP地址 实验总结:如果不给用户tom添加到内置组network configuration op

DAY04 WINDOWS 实验报告

实验一实验名称:创建共享通过UNC及映射网络驱动器访问实验描述:在服务器E盘新建文件夹并创建共享,共享名为mp3,客户端通过UNC路径实验步骤:步骤1:在服务器与客户机设置其IP地址,使其可以交互. 步骤2:在服务器E盘新建文件夹-右击属性-共享-高级共享-勾选共享此文件夹,输入共享名mp3-确定 步骤3:切到客户机-开始-运行-输入\\192.168.1.5--连接到共享文件夹 步骤4:开始-运行-输入net use f:  \\192.168.1.5\mp3,访问共享文件夹  实验总结:输入

DAY05 WINDOWS 实验报告

DAY05 WINDOWS实验一实验名称:设置打印优先级实验描述:在服务器上重新设置管理员密码(要求与客户端管理员密码不同)创建user1(普通员工用户),jl(经理用户),安装两台逻辑打印机hp1,hp2,修改hp2属性优先级为99,安全选项删除everyone,添加jl用户.客户用UNV路径安装网络打印机,普通员工只能连接hp1实验步骤:步骤1:打开三个虚拟机,设置其桥接方式,IP地址,并关闭防火墙.修改服务器的管理员密码,新建两个用户user1和jl 步骤2:开始-设备和打印机-添加打印机

130242014045 林承晖 实验报告一 软件设计的网络支持环境

实验报告一 课程  软件系统设计与体系结构   实验名称   软件设计的网络支持环境     第      页 专业___软件工程_____  班级_ 2班____  学号____130242014045___   姓名  林承晖 实验日期:  2017  年 09  月 14  日 --    年   月   日 一.实验目的 了解主流软件体系结构与设计技术网站,不断丰富软件体系结构和软件设计技术最新知识的学习方法. 二.实验内容 1.概念理解 (1)请根据你的理解和看法,给出'软件体系结构'

面向对象实验报告二

面向对象分析与设计第二次实验报告   一.类的不同类型的方法,属性的可见性 可见/访问性 在同一类中 同一包中 不同包中 同一包子类中 不同包子类中 public yes yes yes yes yes protected yes yes no yes yes package yes yes no yes no private yes no no no no public  class Student { public String home; protected int age; privat

windows 实验报告

DAY windows 实验报告 实验一 实验名称:设置网络打印机的优先级 实验描述:在服务器上重新设置管理员密码(要求与客户端管理员密码不同)创建user1(普通员工用户) ji(经理用户),安装 两台逻辑打印机 hp1 hp2,修改hp2属性优先级为99,安全选项杀出everyone,添加ji用户 客户用unc路径安装网络打印机,普通员工只能连接HP1 实验步骤 步骤1:服务器端重新设置管理员密码.创建user1(普通员工用户) ji(经理用户) 步骤2:开始-控制面板---设备与打印机-添

DAY06 WINDOWS 实验报告

实验一 实验名称:域和域控制器的配置 实验描述:安装活动目录升级域空,域名为tarena.com 客户端加入域 实验步骤: 步骤1:设置服务器和客户机的IP地址,以及DNS服务器 步骤2:开始-运行-输入dcpromo 步骤3:运行向导-下一步-选择在新林中新建域-输入域名-选择林功能级别-选择域功能级别-下一步-下一步-下一步-设置还原模式的administrator密码-下一步-下一步-完成-重启电脑-修改密码 步骤4:客户机上右击计算机-属性-高级系统设置-计算机名-更改-输入域名-输入账