计算器程序设计报告

JAVA课程设计报告

 设计题目:   计算器

     学    院 :  计算机学院

 班    级:  3110901

     学    号:   2009214344

姓    名:  胡松

        



1      需求分析

(1)    课程设计目的

1、  复习巩固java语言的基础知识,进一步加深对java语言的理解和掌控。

2、  锻炼分析解决实际问题的能力,提高我们适应实际,实践编程的能力。

3、  提高我们在项目中的开发创新能力。

(2)    题目分析

1、该计算器程序除了具备加减乘除基本功能外,还有清零键AC和一些部分的科学计算方法,包括开方、二进制、十六进制。

                                    

2、计算器的基本功能:

加法运算:用数字按钮和“+”按钮进行运算;

减法运算:用数字按钮和“-”按钮进行运算;

乘法运算:用数字按钮和“*”按钮进行运算;

除法运算:用数字按钮和“/”按钮进行运算;

清零键:  用”AC”按钮实现;

计算器的科学计算方法:

开方:用数字按钮和“Sqrt”按钮进行运算;

二进制:用数字按钮和“two”按钮进行运算;

十六进制:用数字按钮和“tsex”按钮进行运算;        

2      设计

(1)    系统功能模块图

 

(2)    程序设计

1、用户界面包括Swing组件,不过程序中大都使用的是AWT组件

import java.awt.*;

import java.awt.event.*;

2、一些类功能的说明:

Panel panel; 定义面板

Button b[],add,sub,mul,div,cle,定义按钮

(3)    概要设计

该部分主要阐述整个程序包括哪些类,各个类的类名、功能,以及各类中具有什么样的public成员方法(方法访问修饰符、返回值类型、名字、参数列表、方法的功能),以及这些类的对象之间有什么样的关系(或类和类之间有什么关系,即,函数调用关系)。

(4)    运行环境

WindowsXP

JDK1.6

Eclipse SDK

3      实现

程序源代码实现:

package Counters;

import java.awt.*;

import java.awt.event.*;

@SuppressWarnings("serial")

public class Counters extends Frame{

 Panel panel;

 TextField tf;

 Button b[],add,sub,mul,div,cle,

 equ,dot,two,sqr,tsex;

 Boolean isDot,operated,equaled;

 double storedNumber;

 char lastOperator;

 public Counters(){

  isDot=false;

  operated=false;

  equaled=false;

  storedNumber=0;

  lastOperator='?';

  panel=new Panel();

  tf=new TextField();

  b=new Button[10];

  for(int i=0;i<10;i++){b[i]=new Button(""+i);}

  add=new Button("+");

  sub=new Button("-");

  mul=new Button("*");

  div=new Button("/");

  cle=new Button("AC");

  equ=new Button("=");

  dot=new Button(".");

  two=new Button("二进制");

  sqr=new Button("平方根");

  tsex=new Button("十六进制");

 

  this.add(tf,BorderLayout.NORTH);

  this.add(panel,BorderLayout.CENTER);

 

  panel.setLayout(new GridLayout(5,4,10,10));

  panel.add(b[1]);

  panel.add(b[2]);

  panel.add(b[3]);

  panel.add(add);

  panel.add(b[4]);

  panel.add(b[5]);

  panel.add(b[6]);

  panel.add(sub);

  panel.add(b[7]);

  panel.add(b[8]);

  panel.add(b[9]);

  panel.add(mul);

  panel.add(b[0]);

  panel.add(dot);

  panel.add(cle);

  panel.add(div);

  panel.add(two);

  panel.add(tsex);

  panel.add(sqr);

  panel.add(equ);

 

  this.setTitle("计算器");

  this.setSize(250,350);

  this.setVisible(true);

 

  for(int i=0;i<10;i++){b[i].addActionListener(new Monitor());}

  add.addActionListener(new Monitor());

  sub.addActionListener(new Monitor());

  mul.addActionListener(new Monitor());

  div.addActionListener(new Monitor());

  dot.addActionListener(new Monitor());

  sqr.addActionListener(new Monitor());

  equ.addActionListener(new Monitor());

  cle.addActionListener(new Monitor());

 

  this.addWindowListener(new WindowAdapter(){

   public void windowClosing(WindowEvent e){

    System.exit(0);

    }

   });

  

  two.addActionListener(new ActionListener(){

   public void actionPerformed(ActionEvent e){

    int temp=Integer.parseInt(tf.getText());

    tf.setText(""+Integer.toBinaryString(temp));

    }

   });

  

  tsex.addActionListener(new ActionListener(){

   public void actionPerformed(ActionEvent e){

    int temp=Integer.parseInt(tf.getText());

    tf.setText(""+Integer.toHexString(temp));

    }

   });

  }

 

  class Monitor implements ActionListener{

   public void actionPerformed(ActionEvent e){

    Button btn=(Button)e.getSource();

    if(btn==cle){

     tf.setText("0");

     isDot=false;

     storedNumber=0;

     lastOperator='?';

     }

     else if(btn==equ){

      operate('=');

      equaled=true;

      }

      else if(btn==add){

       operate('+');

       equaled=false;

       }

       else if(btn==sub){

        operate('-');

        equaled=false;

        }

        else if(btn==mul){

         operate('*');

         equaled=false;

         }

         else if(btn==div){

          operate('/');

          equaled=false;

          }

          else if(btn==sqr){

           operate('s');

           operate('=');

           equaled=true;

           }

             else{

              if(equaled) storedNumber=0;

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

               if(btn==b[i]){

                if(tf.getText().equals("0"))

                tf.setText(""+i);

                else if(!operated)

                tf.setText(tf.getText()+i);

                else{

                 tf.setText(""+i);

                 operated=false;

                 }

               }

               if(btn==dot&&!isDot){

               tf.setText(tf.getText()+".");

               isDot=true;

               }

              }

    }

   }

  

  public void operate(char operator){

   double currentNumber = Double.valueOf(tf.getText()).doubleValue();

   if (lastOperator == '?')

   storedNumber = currentNumber;

   else if (lastOperator == '+')

   storedNumber += currentNumber;

   else if (lastOperator == '-')

   storedNumber -= currentNumber;

   else if (lastOperator == '*')

   storedNumber *= currentNumber;

   else if (lastOperator == '/')

   storedNumber /= currentNumber;

   else if (lastOperator == 's')

   storedNumber = Math.sqrt(currentNumber);

   else if (lastOperator == '=' && equaled)

   storedNumber = currentNumber;

   tf.setText("" + storedNumber);

   operated = true;

   lastOperator = operator;

   }

 

  public static void main(String args[]){

   new Counters();

   }

 }

4      测试

(1)    简单运算

1、  加法5+34=

 

2、  减、乘、除略。

(2)    简单科学运算

1、  开平方运算

 

2、  二进制运算13

 

3、  十六进制、清零略。

5      总结和体会

做完这次程序设计,我学到了很多知识。

大家都说计算机程序比较简单。可我觉得虽然简单,但也有许多不清楚的地方。尤其是刚开始编写程序的时候,好多地方都出错,做着总是比想象的难。学习JAVA快半年了,没学习前只是听说过,现在对JAVA也有了一些更深入的了解。比起C语言,JAVA语言的确先进了许多。

我们大一下学期也做了一个课程设计,那个是用C语言做的,现在大二了,用JAVA 语言做程序设计,这次程序设计跟大一的那次是截然不同的,这次似乎更难。不过,我不会气馁,我还想学习更多的JAVA知识。即使JAVA课结束了,我还会继续学习它。

通过这次课程设计,我体会了JAVA广泛的运用性。由于时间仓促还有很多有待完善的地方,在今后的学习中,我会加倍努力去做好。

 

第二篇:计算器程序设计报告

计算机科学与技术学部

面向对象程序课程设计

题      目                

学      部    计算机科学与技术   

班      级                       

指 导 教 师                      

姓      名                       

  20##年6月16日


课程设计任务分配表

Visual C++的课程设计成绩表


摘 要

随着当今社会的发展,越来越多的人开始使用电子商品,新的高考制度也允许使用计算器,而作为一名计算机专业的学生,在使用工具的同时也应该学会制作这类工具。该系统则是与Windows附件里的计算器相仿的一个计算器。

计算器的产生和发展是建立在电子计算机基础之上的。硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。

在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁明了,使人员能快捷简单的操作。能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。此系统在Windows XP环境下,使用VC++ 6.0进行编写。

简单计算器包括双目运算和单目运算功能。

双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数等运算。可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。并且包含清除,退格功能以及有与所有按钮相对应的菜单项。

通过C++课程设计,将学到的面相对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,提高学生分析问题,解决问题从而运用所学知识解决实际问题的能力。

关键词: 计算器,运算,VC++等。


目  录


第1章  前 言... 1

1.1  简介说明... 1

1.1.1 研究目的... 1

1.1.2可行性分析... 1

1.1.3 关于Visual C++ 6.0. 1

1.2  题目要求... 2

1.3  设计思路... 2

第2章 系统功能分析... 4

2.1  系统总体功能分析... 4

2.1.1 控件定义... 5

2.1.2 变量的定义... 6

2.1.3 变量的初始化... 6

2.2 程序核心代码... 6

2.2.1数字键和符号键的核心代码... 6

2.2.2调用科学型、标准计算器的核心代码... 7

2.2.3 退格键的核心代码... 7

2.2.4进制和弧度的核心代码... 8

第3章  系统测试... 11

3.1 程序变量添加... 11

3.1.1 显示变量的添加截图... 11

3.1.2 相关按键的实现截图... 12

3.2 程序运行测试... 12

3.2.1 程序主界面截图... 12

3.2.2数字键和符号键截图... 13

3.2.3科学型计算器截图... 13

3.2.4退格键截图... 14

3.2.5进制和弧度截图... 14

第4章 总结... 15

参考文献... 16


第1章  前 言

1.1  简介说明

1.1.1 研究目的

制作此工具主要有四个目的:

1、熟悉掌握基于对话框的程序编写。

2、熟练掌握放置控件及control 工具条的使用。

 3、掌握控件摆放的基本方法,熟练掌握Dialog 工具条的使用。

4、熟悉建立对话框步骤。

1.1.2可行性分析

伴随着经济全球化,计算机的普及发展,软件行业在社会占着举足轻重的作用。我们在学校生活中常会遇到一些繁杂的数值运算,我们必须要用到科学计算器,所以便着手开发了这个计算器程序,既紧随科技发展的前沿,又方便了我们的生活,具有一定的现实意义。

1.1.3 关于Visual C++ 6.0

Visual C++ 6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C++6.0不仅包括编辑器,还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件、编辑资源以及对程序的编译、连接和调试等各项工作。VC++6.0是Windows 95/98、XP或Windows NT下的一个应用程序,本身对软件没有特殊要求。就是说它对环境的要求与Windows 95/98、Windows NT的要求是一致的。VC++6.0系统可以在一张CD盘上,也可以在“Visual Studio (Visual C++、Visual Foxpro)”等产品的第一张CD盘上。一般都有一个VC的


自动安装程序,也可以执行VC++6.0目录下的Setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。

在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行Setup.exe安装程序,安装程序会检测当前系统安装VC6.0的组件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要与一般的应用软件一样,有以下两种启动方式:

(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual C++6.0中文版”子菜单中的“Microsoft Visual C++6.0中文版”程序。

(2)用户也可以使用命令行启动VC,单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入C:\program Files\Microsoft Visual Studio\VC98\VC6.exe(按默认盘符和路径安装即可)。

1.2  题目要求

所编写的计算器是基于对话框的程序,能够进行加减乘除的运算,开方,立方,三角函数,反三角函数等功能。仿照Windows 自带的计算器进行编写。

1.3  设计思路

<1> 首先考虑所有按键分为两类,即数字键和符号类,0、1、2、3、4、5、6、7、8、9为数字键,其余均为符号键,如’+’、’-’、’C’等等。数字在计算的过程中最多需要保存两个,所以定义了两个double型变量m_first和m­_second来进行存储。符号用一个CString型变量m_operator来存储。

   <2> 其次,考虑在计算的过程中,m_first和m_second的存储状态有三种,一种是m_first==0&&m_second==0也就是程序刚开始运行还没有开始录入数字的状态;第二种是m_first!=0&&m_second==0也就是第一个数字已经录入,符号也已经录入的时候,直接将其值赋给m_first,并通过UpdateDisplay()函数输出;第三种是m_first!=0&&m_second!=0,其表示可以通过m_operator的计算把两个数合并为一个数。

   <3>考虑到所有的计算结果必须在按下’=’按钮后都会将其数据进行计算,并显示到编辑框,因此,将符号判断放在’=’按钮的函数体内,当其按下时逐一判


断此数据应当进行何种操作。

 <4> 考虑到数字全部使用的都是double型,键入的数字必须通过一定的处理达到其计算的效果,特别是当其数据有小数和整数处理时,其差异性大,所以分别用m_coff来判断小数和整数。

 <5> 考虑到科学型计算器的使用,和科学型计算器与标准型计算器之间的切换,在其菜单中通过菜单的调用间接调用其科学型计算器对话框,所以使用了非模式对话框的调用。


第2章 系统功能分析

2.1  系统总体功能分析

此程序采用VC++编写,是一个基于对话框的应用程序,当用户在对话框点击相应按钮时,先执行输出按钮对应字符串,用户可以在对话框上选择相应地科学计算操作按钮,通过程序内相关代码完成相应地科学计算功能。

它的设计按软件工程的方法进行,系统具有良好的界面,必要的交互信息,简约的美观效果。使用人员能快捷简单地进行操作,,即可单机按钮进行操作,也可直接通过键盘输入。即时准确地获取所需要的计算结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定帮助。

其具体的功能有:

(1)包含的功能有:加、减、乘、除运算,开方、求倒数等功能。

(2)计算器上数字0-9为一个控件数组,加、减、乘、除为一个控件数组,其余的为单一控件。

(3)给对话框添加菜单。

(4)输入的原始数据、运算的中间数据和结果都显示在窗口顶部的同一个标签中。

(5)实现对话框的扩展功能。

(6)计算功能基本上是用系统内部函数。

(7)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点以0开头等不正常现象。


(8)“C”按钮可以清除所有已输出的数据从头计算。

2.1.1 控件定义

如表2.1.1

2.1.2 变量的定义

double m_coff;//保存小数点的位置

double  m_first;//保存计算过程中的前一个数字

double m_second;//保存计算过程中的第二个数字

CString m_operator;//记录当前的计算符号

CString m_display;//保存编辑框上需要显示的数字

void UpdateDisplay(double lval);//将需要输出的数据格式化处理

2.1.3 变量的初始化

 m_second=0.0;

m_coff=1.0;

m m_first=0.0;

_operator="+";

m_display = _T("");

2.2 程序核心代码

2.2.1数字键和符号键的核心代码

 void CSecondDlg::Num(int n)

{

if(m_coff==1.0)

              m_second=m_second*10+n;

else

{

              m_second=m_second+m_coff*n;

              m_coff*=0.1;

       }

       UpdateDisplay(m_second);

}

void CMyCalculatorDlg::On1()             //数字1的处理

{

       Num(1);

}

2.2.2调用科学型、标准计算器的核心代码

void CMyCalculatorDlg::OnScience()        //调用科学型计算器

{

       CSecondDlg *pDlg2=new CSecondDlg;

       pDlg2->Create(IDD_DIALOG2);

       pDlg2->ShowWindow(SW_SHOW);

}

void CMyCalculatorDlg::OnNormal()          //调用标准型计算器

{

       CMyCalculatorDlg *pDlg=new CMyCalculatorDlg;

       pDlg->Create(IDD_DIALOG1);

       pDlg->ShowWindow(SW_SHOW);

}

2.2.3 退格键的核心代码

void CMyCalculatorDlg::OnBackspace()            //退格键的实现

{

       char buffer[15];

       if(m_second-(int)m_second==0)           //如果是整数,则以除以10的方式退格

              m_second=(int)m_second/10;

       else                                                  //小数方式的退格

       {

              *gcvt(m_second,sizeof(m_second),buffer); //将输入的浮点数转换为字符串


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

                     if(buffer[i]==0)

                     {

                            buffer[i-1]=0;

                            m_second=strtod(buffer,NULL);   //将字符串转换回为浮点数

                            break;

                     }

       }

       UpdateDisplay(m_second);

       m_coff=1.0;

}

2.2.4进制和弧度的核心代码

void CSecondDlg::OnBa()             //八进制的实现

{

       char string[8]={'0','1','2','3','4','5','6','7'};

       char dis[20]=" ",temp[20];

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

       {

              if((int)m_second!=0)

              {

                     dis[i]=string[(int)m_second%8];

                     m_second=m_second/8;

              }

              else break;

       }

       dis[i]='\0';

       for(int k=0,j=i-1;j>=0;j--)

              temp[k++]=dis[j];


       temp[k]='\0';

       m_display.Format(_T("%s"),temp);

       int m=m_display.GetLength();

       while(m_display.GetAt(m-1)=='\0')

       {

              m_display.Delete(m-1);

              m--;

       }

       UpdateData(false);

}

void CSecondDlg::OnJiaoDu()      //角度制的实现

{

       HUDU=0;

}

void CSecondDlg::OnHudu()       //弧度制的实现

{

HUDU=1;

}

void CSecondDlg::OnPi()      //∏

{

       m_second=3.1415926535897932384626433832795;

       UpdateDisplay(m_second);

}

void CSecondDlg::OnSin()            //sin的实现

{

       if(HUDU==1)

              m_first=sin(m_second);

       else

              m_first=sin(m_second*(PI/180));

       UpdateDisplay(m_first);

       m_second=0.0;

}


             


第3章  系统测试

3.1 程序变量添加

3.1.1 显示变量的添加截图

图3.1.1


3.1.2 相关按键的实现截图

图3.1.2

3.2 程序运行测试

3.2.1 程序主界面截图

 

图3.2.1

3.2.2数字键和符号键截图

当用户按下数字键和符号键时显示如下界面:

 

图3.1.2

图3.2.2

3.2.3科学型计算器截图

当用户选择科学型计算器时显示如下界面:

 

图3.2.3


3.2.4退格键截图

当用户按下退格键前后显示界面:

 

图3.2.4.1                                                        图3.2.4.2

3.2.5进制和弧度截图

当用户选择相应的进制或者弧度之间的转换时显示如下界面:

 

图3.2.5.1                                                                                    图3.2.5.2



第4章 总结

经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。经过几个星期的VC++课程设计,我们顺利完成该课程设计,并收获良多。我们大体总结了以下几点:

基本功要过硬,不能马虎经常犯的小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。

要善于查找资料,提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么,这些问题这要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。

要善于思考,程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足,并使其更加人性化。

这次课程设计让我们学到了很多,不仅巩固了MFC程序设计知识,而且也培养了我们的动手能力,令我们的创造性思维得到拓展。期待今后有更多类似的锻炼机会。

通过这次课程设计,可以明显的感觉到它弥补了课程教学的和实验中知识的深度和广度方面的不足,也让我们进一步掌握了面向对象程序设计的基本方法和编程技巧,同时也巩固所学理论知识,似然花费了不止一点点的时间和精力,不过那确实挺值得的,既让我们认识到自己知识方面的缺陷,又培养了我独立分析问题、解决问题的能力。

课程设计是需要大量时间去动手练习才能体验到它的内涵的,同时还需要用心地投入,时间和情感花下去之后,的确感受到有所收获,增加了对编程的兴趣。通过这次课程设计,掌握了对话框的相关操作,也体会到书写代码一定要仔细,有时候一小点拼写错误会浪费很多调试程序的时间,再有一点就是要好好学习英语,对编程有很大帮助。总之,这次课程设计学到了很多,通过实践真正的做到了学有所用。



参考文献

[1] Visual C++实用程序100例  人民邮电出版社  段兴主编

                                              刘元刚、宋雷、张敬韶、张轩编著

相关推荐