• java课程设计(计算器)


    JAVA课程 设 计 报 告

                 1206401-18   瞿杰

    一、设计时间

       2013年6月 24日-----6月28日

    二、设计地点

       湖南城市学院实验楼计算机506机房

    三、设计目的

      1、巩固学习VB基础知识方面的基本算法,进一步熟悉基本概念。

      2、熟练常用控件,文件,图形等方面的操作,了解基本的流程。

      3、运用所用学的VB语言知识,编写出较为实用的小软件,增进对一些实际问题的软,硬件知识的掌握。

      4、培养查阅资料,独立思考问题的能力。

    四、设计小组成员

      1206401-27陈纪杭   1206401-32王婷     1206401-18瞿杰

    五、指导老师

       胡奇光老师、祝青老师.。

    六、设计课题

      经过小组大部分组员的讨论,决定选取选题(一):计算器的设计与实现

      理由:1、此程序中涉及了多种java组件,包括窗口,面板,按钮,组合框等等,综合性强。

           2、代码编写涉及面广,利用提高综合应用能力。

    七、基本思路及关键问题的解决方法

        设计一个简易计算器,在键盘上输入数字后可以在键盘上直接输入 “+  -  * /” 等运算符号进行运算。

     窗口上添加标签,文本行和“OK”按钮。

    输入完时要响应“OK”按钮事件:

    Text.add(text1);         //窗口添加文本行

    Text.add(text2);

    button.addActionListener(this);       //”ok”按钮事件监听器

    当用户单击鼠标右键按OK按钮时,触发按钮事件,执行ActionListener接口,开始执行计算器功能,按“+ -  *  /”的优先级计算,* 和 / 的优先级大于 + 和 -;在计算时先计算优先级小的或相等的,如果当前符号优先级大于符号栈中栈顶符号的优先级时,则放入符号栈中。

    八、算法及流程图

    九、调试过程中出现的问题及相应解决办法

    问题:

    1、int型和其他类型的转换方式不对。

    2、关于+、-、*、/的优先级的应用。

    3、输入时看不到输出结果。

    办法:

        通过一段一段的调试,最终全部解决了。

    十、课程设计心得体会

        心得体会:通过这次java课程设计编译一个简单的计算器,我对所编写的程序有了一定的认识。通过编写程序进一步熟悉了了按钮、对话框以及字符栈额度编写和使用,知道了怎样在键盘上直接快捷的输入运算符号。通过对java又了进一步的理解,掌握软件开发的基本流程,为软件课程设计打好基础。让我知道了留心字母的写法和字符串的应用等这些细小的地方,同时也明白了细心,严谨认真的重要性以及团队合作的重要性。

    十一、源程序(每句语言要有详细解释)

     

    import java.awt.*;
    import java.awt.event.*;
    public class 计算器 extends Frame implements ActionListener{
    
    	private TextField text1,text2;//文本行
    	private Button button;//按扭
    	
    	public 计算器()//构建框架
    	{
    		super ("计算器");//框架名
    		this.setBounds(280, 100, 300,240);//框架的大小
    		this.setBackground(java.awt.Color.lightGray);//背景颜色
    		this.setLayout(new java.awt.FlowLayout(FlowLayout.LEFT));//布局流
    		
    		this.add(new Label("输入"));//输入行
    		text1=new TextField(50);
    		this.add(text1);
    		button=new Button("OK");
    		this.add(button);
    		button.addActionListener(this);//按扭监听器
    		
    		this.add(new Label("结果"));//结果行
    		text2=new TextField(50);
    		this.add(text2);
    		this.addWindowListener(new WinClose());//控制程序开关
    		this.setVisible(true);//可视化
    	}
    		public void actionPerformed(ActionEvent e){//实现接听接口
    		
    		String str=text1.getText(),str0="";
    		char ch;
    		int i,top1=-1,top2=-1,j=-1,flog=0,len,str1[]=new int[122];
    		double  t,suz[]=new double[122],cha,cha1[]=new double[122];
    		
    		len=str.length();//输入的字符串长度
    		for(i=0;i<len;i++)
    		{
    			
    			ch=str.charAt(i);
    			if(ch>='0'&&ch<='9'||ch=='.')//先保存一个数字字符串
    			{
    				str0=str0+ch;flog=1;
    			}
    			else
    			{
    				
    				if(flog==1)//把保存的数字字符串转成数字,并放入数字栈中
    				{
    				   t=Double.parseDouble(str0);
    				   suz[++top1]=t;
    				   flog=0; str0="";//注意初始化
    				}
    				if(ch=='+'||ch=='-')//符号的优先级
    					cha=1;
    				else
    					cha=2;				
    				
    					if(top2>=0&&cha1[top2]>=cha)//满足条件时计算
    					{
    						
    						if(str1[j]==1)
    							suz[top1-1]=suz[top1]+suz[top1-1];
    						if(str1[j]==2)
    							suz[top1-1]=suz[top1-1]-suz[top1];
    						if(str1[j]==3)
    							suz[top1-1]=suz[top1]*suz[top1-1];
    						if(str1[j]==4)
    							suz[top1-1]=suz[top1-1]/suz[top1];
    						
    						top2--;top1--;
    						j--;i--;
    						
    					}
    				   else//把符号优先级大的放入符号栈中
    				    {
    					cha1[++top2]=cha;//优先级
    					if(ch=='+')
    					    str1[++j]=1;// 把符号保存在符号栈中,1表示符号为+,下面同理
    					if(ch=='-')
    						str1[++j]=2;
    					if(ch=='*')
    						str1[++j]=3;
    					if(ch=='/')
    						str1[++j]=4;
    			     	}
    			}
    		}
    		t=Double.parseDouble(str0);//最后一个是数字
    		   ++top1;suz[top1]=t;
    		   
    		   for(;j>=0;j--)//计算最后的结果
    		   {
    		       if(str1[j]==1) 
    				suz[top1-1]=suz[top1]+suz[top1-1];
    			if(str1[j]==2)
    				suz[top1-1]=suz[top1-1]-suz[top1];
    			if(str1[j]==3)
    				suz[top1-1]=suz[top1]*suz[top1-1];
    			if(str1[j]==4)
    				suz[top1-1]=suz[top1-1]/suz[top1];
    			top1--;
    		   }
    			text2.setText(""+suz[0]);//把最后的计算结果放入第二个文本行里显示出来
    		//}
    	}
    	public static void main(String[] args) {
    		
    		new 计算器();
    	}
    }
    class WinClose implements WindowListener{//实现关闭程序的接口
    	public void windowClosing(WindowEvent e)
    	{
    		System.exit(0);//执行关闭程序
    	}
    	public void windowOpened(WindowEvent e){}
    	public void windowActivated(WindowEvent e){}
    	public void windowDeactivated(WindowEvent e){}
    	public void windowClosed(WindowEvent e){}
    	public void windowIconified(WindowEvent e){}
    	public void windowDeiconified(WindowEvent e){}
    }
    
    


  • 相关阅读:
    linux下QT程序输出乱码解决方法
    Qt中新建类构造函数的初始化参数列表
    移植tslib1.4至mini2440
    Linux中总线设备驱动模型及平台设备驱动实例
    igntie实现数据同步
    django-初始化举例
    django-总体
    django-admin层
    django-view层
    django-template层
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3159743.html
Copyright © 2020-2023  润新知