基本面向对象编程-计算机基本功能实现_

《C/S项目实训》实验报告

实验名称:  基本面向对象编程-计算机基本功能实现_    

一、实验目的

通过综合实践项目,理解Java 程序设计是如何体现面向对象编程基本思想,掌握OOP方法,掌握事件触发、消息响应机制。进一步巩固面向对象编程基本知识和技能,为C/S模式项目开发打下基础。

二、实验题目及要求

1.实验题目

运用GUI技术,事件触发、消息响应机制,实现一个完整综合设计项目“模拟基本的计算机程序”的设计开发开发。

2.实验要求

(1)客户体验

以组为单位,分别体验不同计算机类型的计算流程以及计算的结果展现方式,根据体验结果,总结体验感受,并根据个人用户需求,提出更人性化、功能更完善的系统,使得实验项目更接近实战,让学生理解一切项目都来源于应用,归于用户体验和使用。

三、实验步骤、结果(程序代码)

计算器的运行页面

源代码如下:

package cacu;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Mycacu extends JFrame{

     JTextField tfResult;

     //输入结果显示框

     JButton btNum[],btOper[],btEqual,btPoint;//设计输入按钮分为四种数字按钮,加减乘除操作按钮,等于号按钮, 小数点按钮.

     boolean isNum,isOper;//设计两个布尔型变量

     double firstNum,secondNum;//定义两个双精度的变量

     String operStr;

     public void init(){

          //定义各个功能输入按钮的内容

          tfResult=new JTextField();

          btNum=new JButton[10];

          for(int i=0;i<=9;i++)

          btNum[i]=new JButton(i+"");

          btOper=new JButton[4];

          btOper[0]=new JButton("+");

          btOper[1]=new JButton("-");

          btOper[2]=new JButton("*");

          btOper[3]=new JButton("/");

          btEqual=new JButton("=");

          btPoint=new JButton(".");

         

    

          JPanel panel=new JPanel();

          panel.setLayout(new GridLayout(4,4));//创建流失布局依次部署按钮

          panel.add(btNum[1]);

          panel.add(btNum[2]);

          panel.add(btNum[3]);

          panel.add(btOper[0]);

         

          panel.add(btNum[4]);

          panel.add(btNum[5]);

          panel.add(btNum[6]);

          panel.add(btOper[1]);

         

          panel.add(btNum[7]);

          panel.add(btNum[8]);

          panel.add(btNum[9]);

          panel.add(btOper[2]);

         

          panel.add(btPoint);

          panel.add(btNum[0]);

          panel.add(btEqual);

          panel.add(btOper[3]);

         

          //设计窗体的显示功能

          this.add(tfResult,"North");

          this.add(panel);

          this.setFont(new Font("宋体",Font.BOLD,18));

          this.setTitle("浩宇牌计算器");

          this.setSize(400,400);

          this.setVisible(true);

          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         

          //窗体居中显示

          // 得到显示器屏幕的宽、高

          int width = Toolkit.getDefaultToolkit().getScreenSize().width;

          int height = Toolkit.getDefaultToolkit().getScreenSize().height;

          // 得到窗体的宽、高

          int windowsWidth = this.getWidth();

          int windowsHeight = this.getHeight();

         

          this.setBounds((width - windowsWidth) / 2,(height - windowsHeight) / 2, windowsWidth, windowsHeight);

         

          //注册监听

          MyActLis mal=new MyActLis();

          for(int i=0;i<=9;i++){

               btNum[i].addActionListener(mal);

          }

          for(int i=0;i<4;i++){

               btOper[i].addActionListener(mal);

          }

          btEqual.addActionListener(mal);

         

     }

     public static void main(String[] args) {

          // TODO Auto-generated method stub

          new Mycacu().init();

     }

//监听器类设计

     class MyActLis implements ActionListener{

               public void actionPerformed(ActionEvent e) {

               // TODO Auto-generated method stub

               String s=e.getActionCommand();

          if(s.equals("0")||s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")){

                    isOper=false;

                    if(isNum==false){

                         isNum=true;

                         tfResult.setText(s);

                    }else{

                         tfResult.setText(tfResult.getText()+s);

                    }

               }

               else if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){

                    isOper=true;

                    isNum=false;

                    firstNum=Double.parseDouble(tfResult.getText());

                    operStr=s;

                   

               }

               else if(s.equals("=")){

                    isNum=false;

                    isOper=false;

                   

                    if(operStr.equals("+")){

                         secondNum=Double.parseDouble(tfResult.getText());

                         tfResult.setText(firstNum+secondNum+"");

                    }

                    else if(operStr.equals("-")){

                         secondNum=Double.parseDouble(tfResult.getText());

                         tfResult.setText(firstNum-secondNum+"");

                    }

                    else if(operStr.equals("*")){

                         secondNum=Double.parseDouble(tfResult.getText());

                         tfResult.setText(firstNum*secondNum+"");

                    }

                    else if(operStr.equals("/")){

                         if(firstNum==0){

                              JOptionPane.showMessageDialog(Mycacu.this, "输入错误,除数不为0");

                              //优化1:数学规则除数不为0,当除数为0的时候弹出 框体提示   

                         }

                         else if(secondNum==0) {

                              secondNum=Double.parseDouble(tfResult.getText());

                              tfResult.setText(secondNum+"");

                              //优化2:当除数为0 的时候系统输出结果为0,而不是计算机当中的infinite

                             

                         }

                        

                         else {

                              secondNum=Double.parseDouble(tfResult.getText());

                              tfResult.setText(firstNum/secondNum+"");

                        

                         }

                        

                    }

                    else if(1>0){

                         firstNum=Double.parseDouble(tfResult.getText());

                         //取出第一个输入的数字,并以文本的方式来展现出来。

                         tfResult.setText(firstNum+"");

            

}

四、实验中的问题以及解决方案

1、

 

问题:在实际的计算过程中出现了,被除数为0,计算结果出错的情况。不符合实际的数学定理以及实际的应用的过程。

解决措施:利用else-if语句对其进行了多条的验证,判断第一个数字是否为0,要是为0,则弹出提示框,提示被除数不为0,达到了预期的效果;

解决后的运行结果截图:

 

2、问题:当只点击一个数字的时候,就点击等于号程序会在展示页面,没有反应,出现上图的类似的状况。

 

  解决:也是借用else-if语句,设置了一个我自己认为的永真条件,只输出和展示一个数字的结果

解决代码截图:

3、问题:当出现一个不为零的数除以0的时候运算结果不清楚,与实际的数学意义上的结果存在差异

 

 

解决:当进行除数运算的时候判断第二个数是否为0,要是为0则输出设定好的答案。

4.问题:当你只输入一个数字并点击运算符号,而不输入第二个数字的时候它会将当前的数字当为第二个数字

解决:正在解决当中ing~~~~~

  • 总结

通过此次的cs项目的编程试验,使我进一步了解和体会了事件响应机制的原理,自己在实际的编程过程中对于Java的基本知识,也有了更为深入的理解。对于功能不同的按键的归纳总结有了更为深入的了解,通过功能输入键的相同可以减少所编写的代码量,减少工作量,通过此次的实际编程对于java的基本知识,和实际的操作流程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙小小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值