范文一:简单计算器课程设计
课程设计说明书 NO.1
简单计算器课程设计
一.课程设计的目的
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布
应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具
有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及
其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实
际问题的能力,开设了Java程序设计课程设计。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑
基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽
常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加
以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为
今后从事实际工作打下坚实的基础。
二.设计方案论证
1.开发环境:
JAVA编程工具JDK 1.5.0 ,操作系统WindowsXP.
2.功能描述:
本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进
制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最
多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入
14位数,backspace表示退格,clear表示初始化,在window下直接运行
(Jsp2003.bat)即可,界面为灰白对称。
沈 阳 大 学
课程设计说明书 NO.2
3.概要设计:
**********************************************************
类名: This_number_too_big
作用: 自定义的异常类,用来处理计算结果溢出
继承的父类: Exception类
实现的接口: 没有
**********************************************************
class This_number_too_big extends Exception
{
}//自定义的一个结果溢出异常类
**********************************************************
类名: Jsp2003
作用: 主类
继承的父类: Frame类
实现的接口: ItemListener类,ActionListener类
**********************************************************
class Jsp2003 extends Frame implements ItemListener,ActionListener
{
public int number=0,length=18;
//number是用来记录输入的数字个数,
//length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制
沈 阳 大 学
课程设计说明书 NO.3
char mark='n';
//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’
public double data=0;
//设置运算数据为零
public char ch;
//用来临时存放所按按钮的第一个字符
public boolean Refresh=false;
//设置lab是否要在输入数据的时候刷新,初始为否
4.主要方法说明:
//用来处理按了运算符后的计算-
public void js() throws This_number_too_big //指定由method抛出异
常
{if (mark=='n') //没有运算符
{mark=ch; //,则设置运算符为刚刚输入的字符,
data=Double.parseDouble(lab.getText());//则设置运算数据为lab的值
Refresh=true;//则设置下一次输入的时候要刷新lab
}
else //如果采用的是连续运算(即没有使用‘=’号)则运行下面的语句
{switch (mark) //根据运算符计算结果,并把结果保存到data
{ case '+': data+=Double.parseDouble(lab.getText()); break;
case '-': data-=Double.parseDouble(lab.getText()); break;
case '*': data*=Double.parseDouble(lab.getText()); break;
case '/': data/=Double.parseDouble(lab.getText()); break;}
沈 阳 大 学
课程设计说明书 NO.4
lab.setText(Double.toString(data)); //显示运算结果
mark=ch;//设置运算符为刚刚按下的运算符
Refresh=true;//则设置下一次输入的时候要刷新lab
number=lab.getText().length();//设置输入的字符个数
// System.out.println(lab.getText());//用来调试用的
if (data>Double.MAX_VALUE)
//如果data超过double类型的最大值则抛出自定义的一个异常类
{throw new This_number_too_big(); }
}
}//end js() method
public void enter()//处理输入字符
{if(Refresh==true)
//如果已经设置了 运算符则在下一次输入数据的时候要把以前lab的内容
清除掉
{lab.setText("0"); number=0; Refresh=false;}
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
//如果lab的内容为0则,lab的内容将被所输入的字符代替,
//否则直接在lab的内容后面加上所输入的字符
{lab.setText(Character.toString(ch)); number++;}
else
if(number
{number++;lab.setText(lab.getText()+ch);}
}//end enter() method
沈 阳 大 学
课程设计说明书 NO.5
//八进制或十六进制转换成十进制
I public String goto_10(String s,long l)
//参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;
//参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值
为8或16;
{ String str=s; //用来转换的字符串
long j=l; //表示进制
long lg=0,jing=1;//lg用来记录权乘和,jing用来记录位权
char cha;//临时记录要转换的字符
for(int i=1;i<=str.length();i++)>=str.length();i++)>
{ cha=str.charAt(str.length()-i);
switch(cha) { case '1': lg=lg+1*jing;break;
case '2': lg=lg+2*jing;break;
case '3': lg=lg+3*jing;break; case '4': lg=lg+4*jing;break;
case '5': lg=lg+5*jing;break;
case '6': lg=lg+6*jing;break; case '7': lg=lg+7*jing;break;
case '8': lg=lg+8*jing;break;
case '9': lg=lg+9*jing;break; case 'A': lg=lg+10*jing;break;
case 'B': lg=lg+11*jing;break;
case 'C': lg=lg+12*jing;break; case 'D': lg=lg+13*jing;break;
case 'E': lg=lg+14*jing;break;
case 'F': lg=lg+15*jing;break;} jing*=j; //位权升一级,为下次使用做好准备
}
} 沈 阳 大 学
课程设计说明书 NO.6
return Long.toString(lg); }//end String goto_10() method }
3.系统流程图
开始
初始化数据 Double result=0; //存储结果
Boolean newnum=true; //是否新数
String lastop=”=”; /存储操作符
按下操作符(+-*、=)按钮 按下数字按钮
把当前文本框的内容转为double后传给 calc方法判断calc(double.parsedouble(txt.gettext())) newnum
True false
Lastop=”操作文本框显示新数;文本框接着显示
符”newnum=true txt.settext(“数txt.settext(txtgettext()+” 字”)newnum=false 数字”)
沈 阳 大 学
课程设计说明书 NO.7
4.详细设计
首先分析这个说要完成的任务,它的主要任务是完成十六进制、十进制、
八进制和二进制之间的相互转化,需要包含负数,但不用考虑小数。
其次,确定接口参数。根据功能可知,它传递给外部的就是一个转后的
数据,而外部除了需要传递给转化前的数据以外,是否还需要其他参数呢,
我们都知道,十进制的负数同样可以利用其他进制进行表示,例如二进制,
转化方法是:求十进制数的绝对值对应的二进制数,最高位为1;然后对二
进制逐位求反,最高位除外;接着最低一位加1,需要进位的话依次进位,
最高位除外。如今的问题就摆在了我们面前,我们如何知道这个数的最高位
是第几位呢,也许有人会说,那就用转化后的前面再加上一位,好,即使这
样可以成立,那么-1转化后就是11,3转化后也为11,现在如果需要现在的
把这个数二进制数再转化为十进制,那么我们如何知道原来的是正数还是负
数呢,如果要转化为十六进制,八进制又当如何呢,经过以上的分析发现,
还应该有另外一个参数——二进制时的宽度,只有这样才能知道谁是最高位,
因此就称这个参数为位宽。
最后,设计类。根据第二步的分析,因为位宽对每一个方法都是一样,
所以可能把它作为类的成员变量,而另外两个参数转化前的值和转化后的值
就分别作为输入参数和返回值。而类对外的接口只有各个转化的方法,因此
这几个方法设计为public权限,而其它所有的辅助方法都为private权限。
位宽通过构造函数传递,外部不能直接访问和修改,设置也设置为private
权限。为了减少计算量,所有的转化都以二进制为中介。例如十六进制到十
进制,是十六进制?二进制?十进制。
沈 阳 大 学
课程设计说明书 NO.8
5.运行结果
程序运行效果截图
图2 计算器运行效果图
图3 除法运算效果图
沈 阳 大 学
课程设计说明书 NO.9
6.程序测试分析
6.1程序运行情况:
程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行
混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,
就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理
科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结
果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内
设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类
型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进
行,重制归零的处理。
6.2程序异常处理:
当结果超出Double.MAX_VALUE时,将抛出一个This_number_too_big 类
的异常对象,这个是我自定义的一个异常类它继承自Exception 类,然后使 用try-catch去捕捉这个异常,异常的处理如下:
try
{ js();} catch(This_number_too_big e)
{
lab.setText("0"); number=0;
mark='n';
Refresh=false; System.out.println("The number is too big");
} //如果出现异常则初始化效果如同clear键
沈 阳 大 学
课程设计说明书 NO.10
7.总结
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设
计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努 力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限
的资料。通过对此课题的开发,使我对用JBuilder9.0开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经 验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界
面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。
8.参考文献
1.朱战立, 沈伟. Java程序设计实用教程[M]. 北京:电子工业出版社,2005.01:59-98
2.李诚等. Java2简明教程[M],第2版. 北京:清华大学出版社,2004.08:
165-201
3.耿祥义.Java课程设计[M]. 北京:清华大学出版社,2004.02:53-78
9.附录:源代码
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
import java.util.Vector;
public class Tuo {
沈 阳 大 学
课程设计说明书 NO.11
String str1="0"; //运算数1 初值一定为0 为了程序的安全 String str2="0"; //运算数2
String fh="+"; //运算符
String jg="";//结果 //状态开关 重要
int k1=1;//开关1 用于选择输入方向 将要写入str2或 str2 int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算 int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0
int k4=1;//开关4 str2 同上
int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉 JButton jicunqi; //寄存器 记录 是否连续按下符号键
Vector vt=new Vector(20,10);
JFrame frame=new JFrame("计算器"); JTextField jg_TextField=new JTextField(jg,20);//20列
JButton clear_Button=new JButton("清除");
JButton button0=new JButton("0"); JButton button1=new JButton("1");
JButton button2=new JButton("2");
JButton button3=new JButton("3"); JButton button4=new JButton("4");
JButton button5=new JButton("5");
JButton button6=new JButton("6"); JButton button7=new JButton("7");
JButton button8=new JButton("8");
JButton button9=new JButton("9"); JButton button_Dian=new JButton(".");
JButton button_jia=new JButton("+");
JButton button_jian=new JButton("-"); JButton button_cheng=new JButton("*");
JButton button_chu=new JButton("/");
JButton button_dy=new JButton("="); ////////////////////////////////////////////////////////////////////////
沈 阳 大 学
课程设计说明书 NO.12
public static void main(String[] args)
{ Tuo tuo=new Tuo();
}
///////////////////////////////////////////////////////////////////////// Tuo()
{
button0.setMnemonic(KeyEvent.VK_0);//等效键 //其它 等效键 略,
jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐
JPanel pan=new JPanel(); pan.setLayout(new GridLayout(4,4,5,5));//四行四列 边距为5像素
pan.add(button7);
pan.add(button8); pan.add(button9);
pan.add(button_chu);
pan.add(button4); pan.add(button5);
pan.add(button6);
pan.add(button_cheng); pan.add(button1);
pan.add(button2);
pan.add(button3); pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian); pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距 JPanel pan2=new JPanel();
pan2.add(jg_TextField);
JPanel pan3=new JPanel(); //为什么要 多此一句呢, 因为我不会设置 按钮的大小
沈 阳 大 学
课程设计说明书 NO.13
pan3.setLayout(new FlowLayout());
pan3.add(clear_Button); //clear_Button.setSize(10,10);//设置清零按钮的大小 吗的 不好使 ~~
frame.setLocation(300, 200); //主窗口 出现在位置 frame.setResizable(false); //不能调大小 frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH); frame.getContentPane().add(pan,BorderLayout.CENTER); frame.getContentPane().add(pan3,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true); //以上是 控件 和 布局
//下面是事件处理 程 序
//--------------- 数 字 键 ---------------- class JianTing implements ActionListener
{
public void actionPerformed(ActionEvent e) {
String ss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource(); vt.add(jicunqi);
if (k1==1)
{ if(k3==1)
{
str1=""; k5=1;//还原开关k5状态 }
str1=str1+ss;
//k2=1; k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示 }
if (k4==1)
沈 阳 大 学
课程设计说明书 NO.14
else if(k1==2)
{ if (k4==1)
{
str2=""; k5=1; //还原开关k5状态
}
str2=str2+ss; //k2=2;
k4=k4+1;
///////////////测试//////////////// jg_TextField.setText(str2);
}
} }
//,,,,,,,,符 号,,,,,,,,,,, class JianTing_fh implements ActionListener {
public void actionPerformed(ActionEvent e) { String ss2=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi); if(k2==1)
{
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写 k5=1;
fh=ss2;
k2=k2+1;//按符号键的次数 }
else
{ int a=vt.size();
JButton c=(JButton)vt.get(a-2);
沈 阳 大 学
课程设计说明书 NO.15
if(!(c.getText().equals("+"))&&!(c.getText().equals("-")) &&!(c.getText().equals("*"))&&!(c.getText().equals("/"))) //if(!(vt.get(a-2).getText().equals("-"))||!(vt.get(a-2).getText().
equals("+"))||!(vt.get(a-2).getText().equals("*"))||!(vt.get(a-2). getText().equals("/"))) { yuns();
str1=jg;
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写 k5=1;
k4=1;
fh=ss2; } k2=k2+1;
}
} }
//,,,,,,,,清除,,,,,,,
class JianTing_clear implements ActionListener {
public void actionPerformed(ActionEvent e)
{ jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
k5=1; k2=1;
k1=1;
k3=1; k4=1;
str1="0";
str2="0"; fh="";
jg="";
jg_TextField.setText(jg); vt.clear();
沈 阳 大 学
课程设计说明书 NO.16
}
} //----------------等 于 ---------------------
class JianTing_dy implements ActionListener { public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource(); vt.add(jicunqi);
yuns();
k1=1; //还原开关k1状态 //str1=jg;
k2=1;
k3=1;//还原开关k3状态 k4=1; //还原开关k4状态
str1=jg; //为7+5=12 +5=17 这种计算做准备 } }
//----------------小数点 --------------------- class JianTing_xiaos implements ActionListener {
public void actionPerformed(ActionEvent e) { jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k5==1) {
String ss2=((JButton)e.getSource()).getText();
if (k1==1) {
if(k3==1)
{ str1="";
k5=1; //还原开关k5状态
沈 阳 大 学
课程设计说明书 NO.17
}
str1=str1+ss2; //k2=1;
k3=k3+1;
//System.out.println(str1); jg_TextField.setText(str1);//显示
}
else if(k1==2) {
if (k4==1)
{ str2="";
k5=1; //还原开关k5状态
} str2=str2+ss2;
//k2=2;
k4=k4+1; ///////////////测试////////////////
jg_TextField.setText(str2);
} }
k5=k5+1; // }
}
//注册 监听器 JianTing_dy jt_dy=new JianTing_dy();
JianTing jt= new JianTing();//临听数字键 JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键 JianTing_clear jt_c=new JianTing_clear(); //清除键
JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键
沈 阳 大 学
课程设计说明书 NO.18
button7.addActionListener(jt);
button8.addActionListener(jt); button9.addActionListener(jt);
button_chu.addActionListener(jt_fh); button4.addActionListener(jt); button5.addActionListener(jt);
button6.addActionListener(jt);
button_cheng.addActionListener(jt_fh); button1.addActionListener(jt);
button2.addActionListener(jt);
button3.addActionListener(jt); button_jian.addActionListener(jt_fh);
button0.addActionListener(jt);
button_Dian.addActionListener(jt_xs); button_dy.addActionListener(jt_dy);
button_jia.addActionListener(jt_fh); clear_Button.addActionListener(jt_c); //关闭事件处理程序
frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e)
{
System.exit(0); }
});
} //---------------计 算------------------
public void yuns()
{ double a2;//运算数1
double b2;//运算数2
String c=fh;// 运算符 double jg2=0 ;//结果
沈 阳 大 学
课程设计说明书 NO.19
if (c.equals(""))
{ System.out.println("请输入运算符");
jg_TextField.setText("请输入运算符"); } else
{
System.out.println("str1:"+str1);//调试时 使 用 System.out.println("str2:"+str2);//调试时 使 用
System.out.println("运算符:"+fh);//调试时 使 用 if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错 所以手工转 str1="0.0";
if (str2.equals("."))
str2="0.0"; a2=Double.valueOf(str1).doubleValue();
b2=Double.valueOf(str2).doubleValue(); System.out.println("double型的a2:"+a2); //调试时 使 用 System.out.println(“double型的b2:”+b2);调试时使用
if (c.equals("+"))
{ jg2=a2+b2;
}
if (c.equals("-")) {
jg2=a2-b2;
} if (c.equals("*"))
{
jg2=a2*b2; }
if (c.equals("/"))
{ if(b2==0)
{
jg2=0;//0000000000000 by 0 cu!
沈 阳 大 学
课程设计说明书 NO.20
}
else
{
jg2=a2/b2; }
}
System.out.println("double型a2"+fh+"b2结果:"+jg2); System.out.println();
jg=((new Double(jg2)).toString());
jg_TextField.setText(jg); }
}
}
NO.30
沈 阳 大 学
范文二:简单计算器课程设计
《java》 课 程 设 计
设计题目 简单计算器
学生姓名 汪龙 学 号 08212155140 专业班级 08信息与计算科学 指导教师 尹春娇
信息工程学院信息与计算科学
2011年 11 月8日
安徽新华学院课程设计成绩评定表
课题名称 简单计算器
院 系 信息工程学院 年级专业 08信科 成员姓名 成员学号 承担的任务 成 绩 汪龙 08212155140 整个课程设计的编写及整理
1、课题设计目的:加强自己对java语言更一步的了解认识,检
验自己一学期对java的学习成果。
课题设计
2、课题设计意义:不同的语言有不同的语法,通过这个课题可目的与
以让我们了解java的语言魅力,同时对java编写一些小的应用设计意义
软件的一个探寻。
指导教师:尹春娇
2011年 11 月 8 日
摘 要
随着java语言的日益强大,用java开发的各种游戏应用软件不断更新,更是有替代传统C的趋势。Java的强大,是因为它的语法简单,应用方便,没有C的复杂。本课题是主要是利用java来开发的一个简单的计算器,能够进行最基本的加、减、乘除运算功能,界面是通过运用三个面板的叠加而成的。通过按钮来进行简易计算器的各种运算,并正确实现运算功能。如果输入错误,程序会自动提示你的输入错误。整个程序对话框可实现最小化,最大化,关闭。
关键词:java、强大、简单、计算器、实现
第一章 绪 论
1(1 什么是Java
Java是一个由Sun公司开发而成的新一代编程语言。使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。不论你使用的是哪一种WWW浏览器,哪一种计算机,哪一种操作系统,只要WWW浏览器上面注明了“支持Java”,你就可以看到生动的主页。Java正在逐步成为Internet应用的主要开发语言。它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。Sun的Java语言开发小组成立于1991年,其
Sun内部人目的是开拓消费类电子产品市场,例如,交互式电视、烤面包箱等。员把这个项目称为Green,那时WorldWideWeb还在图纸上呢。该小组的领导人是JamesGosling,是一位非常杰出的程序员。他出生于1957年,于1984年加盟SunMicrosystem公司,之前在一家IBM研究机构工作。他是SunNeWs窗口系统的总设计师。也是第一个用C实现的EMACS的文本编辑器COSMACS的开发者。在研究开发过程中,Gosling深刻体会到消费类电子产品和工作站产品在开发哲学上的差异:消费类电子产品要求可靠性高、费用低、标准化、使用简单,用户并不关心CPU的型号,也不欣赏专用昂贵的RISC处理器,他们需要建立在一个标准基础之上,具有一系列可选的方案,从8086到80586都可以选取。 1.2 java从C开始
为了使整个系统与平台无关,Gosling首先从改写C编译器着手。但是Gosling在改写过程中感到仅C是无法满足需要的,于是在1991年6月份开始准备开发一个新的语言,那么给它起一个什么名字呢?Gosling回首向窗外望去,看见一棵老橡树,于是建一个目录叫Oak,这就是Java语言的前身(后来发现Oak已是Sun公司另一个语言的注册商标,才改名为Java,即太平洋上一个盛产咖啡的岛屿的名字)。
Gosling在开始写Java时,并不局限于扩充语言机制本身,更注重于语言所运行的软硬件环境。他要建立一个系统,这个系统运行于一个巨大的、分布的、异构的网格环境中,完成各电子设备之间的通信与协同工作。Gosling在设计中采用了虚机器码(Virtual Machine Code)方式,即Java语言编译后产生的
是虚拟机,虚拟机运行在一个解释器上,每一个操作系统均有一个解释器。这样一来,Java就成了平台无关语言。这和Gosling设计的Sun NeWs窗口系统有着相同的技术味道。在NeWs中用户界面统一用Postscript描述,不同的显示器有不同的Postscript解释器,这样便保证了用户界面的良好的可移植性。
Patrick Naughton也是Sun公司的技术骨干,曾经是Open Windows项目的负责人。当Naughton加入该小组后,整个工作进展神速。经过17个月的奋战,整个系统胜利完成。它是由一个操作系统、一种语言(Java)、一个用户界面、一个新的硬件平台、三块专用芯片构成的。通常情况下,这样的项目在Sun公司要75个人干三年。项目完成后,在Sun公司内部做了一次展示和鉴定,观众的反应是:在各方面都采用了崭新的、非常大胆的技术。许多参观者对Java留下了非常深刻的印象,特别得到Sun的两位领导人Scott McNealy和Bill Joy的关注,但Java的前途未卜。
1.3 Java语言的转折点
到了1994年,WWW已如火如荼地发展起来。Gosling意识到WWW需要一个中性的浏览器,它不依赖于任何硬件平台和软件平台,它应是一种实时性较高、可靠安全、有交互功能的浏览器。于是Gosling决定用Java开发一个新的Web浏览器。这项工作由Naughton和Jonathan Payne负责,到1994年秋天,完成了Web Runner的开发工作。Web Runner是HotJava的前身,这个原型系统展示了Java可能带来的广阔市场前景。Web Runner改名为HotJava,并于1995年5月23日发表后,在产业界引起了巨大的轰动,Java的地位也随之而得到肯定。又经过一年的试用和改进,Java1.0版终于在1996年年初正式发表。
第二章 需求分析
需求分析是整个软件开发过程的指南,是软件开发人员开发出符合用户要求的软件的基础。需求分析为用户和软件开发者双方对该系统的初始框架有一个共同的理解,使之成为整个项目开发工作的基础。
2.1鼠标功能分析
在整个计算器画面由多个方格和一个文本框等组成。所有数字方块和一些运算符都连有触发事件,点击鼠标就会有相应的反应,具体操作由内部代码给予命令。
2.2 主界面显示功能
主界面需要有输入文本框,当在输入数字时要显示输入的数字和显示运算结果,同时文本框设计为不可编辑。有了文本框显示器,当然要有输入的数字和运算符,就需要有各相关按钮进行编排,按钮分别是0到9还有“+、-、*、/、.、C(清零)”。
控件显示:窗口中各文本框按钮的编排布局,要符合美学要求,可通过一些版面分配的相关类进行自动生成。需要五行四列。
错误处理:当输入的数字和步骤非法时要进行相关报错,比如没有输入数字的情况下就进行预算这是计算器要提示报错,在比喻,当进行除法运算时,当除数为零时,计算器要提示“除数不能为零”,这些提示应当都由一个弹出窗口进行提示。
2.3总框架分析
首先需要用一个counter类继承了JFrame类来形成一个视窗界面,然后通过JPanle定义三个面板,在用JTextField定义文本框,在用JButton定义相关按钮,在将这些仿佛JPanel中,通过GridLayout进行版面布局,在通过super设置窗体标题。在利用这些类的同时要知道需要引入哪些套件比如需要import java.awt.BorderLayout等。但整个过程由三个框架构成,一是主界面,二是版面配置及各相关按钮实现先关功能,三是运算出正确结果及相关报错。
计算器
及版关正钮
报实确主 相面 错现结 界 果关配 及面
相按置
代码的框架结构也是按照这样来划分的,主要就分为这三块,这样在程序代码编写过程中,已对各功能进行了模块化,然后对各个模块进行代码实现,在编写过程中一些小问题就很容易解决。这样,一个简单的计算器就开发好了。
第三章 代码实现
一、代码编写所需要个各套件
import javax.swing .*;
import java.io.*;
import java.awt.BorderLayout; import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout; import java.awt.event.*; 功能:这些套件为后面各按钮的相关功能提供的保障。 二、代码中各种类
1、counter类
public class counter extends JFrame implements ActionListener
{
JPanel txtpanel,btnpanel,southpanel;//定义三个面板 JTextField txtinput;//定义文本框
JButton
b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdes,multiply,add,divide,subtract,clear
btn,equalbtn;
GridLayout g1;//创建布局
double simpan,hasil;
String operasi;
。。。。。。
功能:形成主界面,然后对各组件进行声明。 二、各函数
1、构造函数 counter
public counter()
{
.
.
.
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置程序的关闭方式
}
功能:初始化各组件,并对一些组件进行大小位置等设计。 2、事件触发函数actionPerformed(ActionEvent e)
public void actionPerformed(ActionEvent e) {
try
{
.
.
.
}
catch(Exception ouch){
JOptionPane.showMessageDialog(null,"错误输入
","error",JOptionPane.ERROR_MESSAGE);
}//异常处理
}
功能:获取由计算器的到的数据并进行计算,同时加入try…catch,用于捕捉在输入当中出现的错误。
3、主函数
public static void main(String args[]){
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsL
ookAndFeel");
}catch(Exception e){}//异常处理
new counter();//创建窗体
}
功能:程序运行的开始,激活counter类。
三、各组件
1、版面及各组件生成布局
getContentPane().add(txtpanel,BorderLayout.NORTH);//设置面板位置 txtpanel.add(txtinput);//添加文本框到txtpanel面板中
g1=new GridLayout(4,4,5,5);//设置面板布局
btnpanel.setLayout(g1);
getContentPane().add(btnpanel);
2、清除键设计
public void btnCancelActionPerformed()//清空文本框内容 {
txtinput.setText("");
}
第四章 测试
1、窗口 2、加法 例子:4+5=9
3、减法 9-5=4 4、乘法 6*3=18
5、除法 20/8=2.5 6、除数为0时
第五章 心得体会
在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我
按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,通过网上求助和同学帮助,最后都克服了,最后我成功的完成了这次课程设计。从中我充分了解java面对对象的特性,并体会到java与C语言的不同之处。在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法,为今后的发展带来帮助。
第六章 总结
1、通过编写这个相对复杂的程序,让我认识解决实际问题前应先建立模型,再通过建立的模型使问题简单化,从而解决问题。
2、这次编写的程序大部分是通过调用各种包中的方法来实现的,这也让我充分理解了包和类调用的关系。
3、由于这次编写的程序对于我来说相对的比较复杂,所以不能一次性编写调试,也由此让我学会把程序分块,逐个编写、调试。
第七章 参考文献
【1】丁振凡.java语言实用教程(第二版)【M】.北京邮电大学出版社.2008.1【2】杨树林等.java语言最新实用案例教程(第二版)[M].清华大学出版社.2010.7
【3】叶核亚.java程序设计实用教程(第三版)[M].电子工业出版社.2010.2
**附录
import javax.swing .*;
import java.io.*;
import java.awt.BorderLayout; import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout; import java.awt.event.*;
public class counter extends JFrame implements ActionListener
{
JPanel txtpanel,btnpanel,southpanel;//定义三个面板 JTextField txtinput;//定义文本框
JButton
b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdes,multiply,add,divide,subtract,clear
btn,equalbtn;
GridLayout g1;//创建布局
double simpan,hasil;
String operasi;
public counter()
{
super("计算器——汪龙");//设置窗体标题
txtpanel=new JPanel();//创建面板
btnpanel=new JPanel();
southpanel=new JPanel();
txtinput=new JTextField(25);//创建文本框
txtinput.setEnabled(false);//设置文本框不可编辑
txtinput.setHorizontalAlignment(JTextField.RIGHT);
txtinput.setText("");//设置起始文本框内容为空
b1=new JButton("1");//创建按钮
b2=new JButton("2");
b3=new JButton("3");
b4=new JButton("4");
b5=new JButton("5");
b6=new JButton("6");
b7=new JButton("7");
b8=new JButton("8");
b9=new JButton("9");
b0=new JButton("0");
bdes=new JButton(".");
multiply=new JButton("x");
multiply.setFont(new Font("Gothic",Font.BOLD,20));//设置画笔属性
multiply.setBackground(Color.black);//设置按钮边框颜色
multiply.setForeground(Color.blue);//设置画笔颜色
divide=new JButton("/");
divide.setFont(new Font("Gothic",Font.BOLD,20));
divide.setBackground(Color.black);
divide.setForeground(Color.blue);
add=new JButton("+");
add.setFont(new Font("Gothic",Font.BOLD,20));
add.setBackground(Color.black);
add.setForeground(Color.blue);
subtract=new JButton("-");
subtract.setFont(new Font("Gothic",Font.BOLD,20));
subtract.setBackground(Color.black);
subtract.setForeground(Color.blue);
clearbtn=new JButton("C");
clearbtn.setFont(new Font("Arial",Font.ITALIC,16));
clearbtn.setBackground(Color.black);
clearbtn.setForeground(Color.green);
clearbtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent argh)
{
btnCancelActionPerformed();
}
});
equalbtn=new JButton("=");
equalbtn.setFont(new Font("Arial",Font.ITALIC,20)); equalbtn.setBackground(Color.black);
equalbtn.setForeground(Color.red);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bdes.addActionListener(this);
multiply.addActionListener(this);
divide.addActionListener(this);
add.addActionListener(this);
subtract.addActionListener(this);
equalbtn.addActionListener(this);
getContentPane().add(txtpanel,BorderLayout.NORTH);//设置面板位置
txtpanel.add(txtinput);//添加文本框到txtpanel面板中 g1=new GridLayout(4,4,5,5);//设置面板布局 btnpanel.setLayout(g1);
getContentPane().add(btnpanel);//窗体中加入第二个面板 //把下列按钮加入到btnpanel面板中
btnpanel.add(b7);
btnpanel.add(b8);
btnpanel.add(b9);
btnpanel.add(multiply);
btnpanel.add(b4);
btnpanel.add(b5);
btnpanel.add(b6);
btnpanel.add(divide);
btnpanel.add(b1);
btnpanel.add(b2);
btnpanel.add(b3);
btnpanel.add(add);
btnpanel.add(b0);
btnpanel.add(bdes);
btnpanel.add(equalbtn);
btnpanel.add(subtract);
getContentPane().add(southpanel,BorderLayout.SOUTH);//设置面板位置
southpanel.add(clearbtn); //把clearbtn加入到southpanel面板中 setSize(250,300);//设置窗体初始大小
setVisible(true);//设置窗体可见
setLocation(300,200);//设置初始窗体在屏幕上的位置
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置程序的关闭
方式
}
public void btnCancelActionPerformed()//清空文本框内容 {
txtinput.setText("");
}
public void actionPerformed(ActionEvent e)
{
try
{ // txtinput.setText("");
Object objkcal=e.getSource();//取得按钮
if(objkcal==b1)//如果按下b1,则把文本框中的内容置为1
txtinput.setText(txtinput.getText()+"1" );
else
if(objkcal==b2)
txtinput.setText(txtinput.getText()+"2");
else
if(objkcal==b3)
txtinput.setText(txtinput.getText()+"3" );
else
if(objkcal==b4)
txtinput.setText(txtinput.getText()+"4" );
else
if(objkcal==b5)
txtinput.setText(txtinput.getText()+"5" );
else
if(objkcal==b6)
txtinput.setText(txtinput.getText()+"6" );
else
if(objkcal==b7)
txtinput.setText(txtinput.getText()+"7" );
else
if(objkcal==b8)
txtinput.setText(txtinput.getText()+"8" );
else
if(objkcal==b9)
txtinput.setText(txtinput.getText()+"9" );
else
if(objkcal==b0)
txtinput.setText(txtinput.getText()+"0" );
else
if(objkcal==bdes)
txtinput.setText(txtinput.getText()+".");
else
if(objkcal==add){
simpan=Double.parseDouble(txtinput.getText());
operasi="plus";
txtinput.setText("");
}
else
if(objkcal==subtract){
simpan=Double.parseDouble(txtinput.getText());
operasi="minus";
txtinput.setText("");
}
else
if(objkcal==divide){
simpan=Double.parseDouble(txtinput.getText());
operasi="bagi";
txtinput.setText("");
}
else
if(objkcal==multiply){
simpan=Double.parseDouble(txtinput.getText());
operasi="kali";
txtinput.setText("");
}
else//如果按下=号,执行以下操作
if(objkcal==equalbtn){
if(operasi=="plus"){
hasil=simpan+Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(hasil));
}else
if(operasi=="minus"){
hasil=simpan-Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(hasil));
}else
if(txtinput.equals(txtinput.getText())&&objkcal=="subtract"){
hasil=simpan-Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(hasil));
}
else
if(operasi=="bagi"){
if(Double.parseDouble(txtinput.getText())==0)
JOptionPane.showMessageDialog(this, "被除数不能为0");
hasil=simpan/Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(hasil));
}
else
if(operasi=="kali"){
hasil=simpan*Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(hasil));
}
}
}
catch(Exception ouch){
JOptionPane.showMessageDialog(null,"错误输入","error",JOptionPane.ERROR_MESSAGE);
}//异常处理
}
public static void main(String args[]){
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsL
ookAndFeel");
}catch(Exception e){}//异常处理
new counter();//创建窗体
}
}
范文三:简单计算器课程设计
《 java 》 课 程 设 计
设计题目
学生姓名
学 号 08212155140 专业班级 08信息与计算科学
指导教师
安徽新华学院课程设计成绩评定表
摘 要
随着 java 语言的日益强大, 用 java 开发的各种游戏应用软件不断更新, 更是 有替代传统 C 的趋势。 Java 的强大,是因为它的语法简单,应用方便,没有 C 的 复杂。 本课题是主要是利用 java 来开发的一个简单的计算器, 能够进行最基本的 加、减、乘除运算功能,界面是通过运用三个面板的叠加而成的。通过按钮来进 行简易计算器的各种运算,并正确实现运算功能。如果输入错误,程序会自动提 示你的输入错误。整个程序对话框可实现最小化,最大化,关闭。
关键词:java 、强大、简单、计算器、实现
第一章 绪 论
1. 1 什么是 Java
Java 是一个由 Sun 公司开发而成的新一代编程语言。 使用它可在各式各样不 同种机器、不同种操作平台的网络环境中开发软件。不论你使用的是哪一种 WWW 浏览器, 哪一种计算机, 哪一种操作系统, 只要 WWW 浏览器上面注明了 “支持 Java ” , 你就可以看到生动的主页。 Java 正在逐步成为 Internet 应用的主要开发语言。 它彻底改变了应用软件的开发模式, 带来了自 PC 机以来又一次技术革命, 为迅速 发展的信息世界增添了新的活力。 Sun 的 Java 语言开发小组成立于 1991年,其 目的是开拓消费类电子产品市场,例如,交互式电视、烤面包箱等。 Sun 内部人 员把这个项目称为 Green , 那时 WorldWideWeb 还在图纸上呢。 该小组的领导人是 JamesGosling ,是一位非常杰出的程序员。他出生于 1957年,于 1984年加盟 SunMicrosystem 公司, 之前在一家 IBM 研究机构工作。 他是 SunNeWs 窗口系统的 总设计师。也是第一个用 C 实现的 EMACS 的文本编辑器 COSMACS 的开发者。在研 究开发过程中, Gosling 深刻体会到消费类电子产品和工作站产品在开发哲学上 的差异:消费类电子产品要求可靠性高、费用低、标准化、使用简单,用户并不 关心 CPU 的型号, 也不欣赏专用昂贵的 RISC 处理器, 他们需要建立在一个标准基 础之上,具有一系列可选的方案,从 8086到 80586都可以选取。
1.2 java从 C 开始
为了使整个系统与平台无关, Gosling 首先从改写 C 编译器着手。但是 Gosling 在改写过程中感到仅 C 是无法满足需要的, 于是在 1991年 6月份开始准 备开发一个新的语言,那么给它起一个什么名字呢 ?Gosling 回首向窗外望去, 看 见一棵老橡树,于是建一个目录叫 Oak ,这就是 Java 语言的前身(后来发现 Oak 已是 Sun 公司另一个语言的注册商标, 才改名为 Java , 即太平洋上一个盛产咖啡 的岛屿的名字) 。
Gosling在开始写 Java 时, 并不局限于扩充语言机制本身, 更注重于语 言所运行的软硬件环境。他要建立一个系统,这个系统运行于一个巨大的、分布 的、异构的网格环境中,完成各电子设备之间的通信与协同工作。 Gosling 在设 计中采用了虚机器码(Virtual Machine Code )方式,即 Java 语言编译后产生的
是虚拟机,虚拟机运行在一个解释器上,每一个操作系统均有一个解释器。这样 一来, Java 就成了平台无关语言。这和 Gosling 设计的 Sun NeWs窗口系统有着 相同的技术味道。在 NeWs 中用户界面统一用 Postscript 描述,不同的显示器有 不同的 Postscript 解释器,这样便保证了用户界面的良好的可移植性。
Patrick Naughton也是 Sun 公司的技术骨干,曾经是 Open Windows项 目的负责人。当 Naughton 加入该小组后,整个工作进展神速。经过 17个月的奋 战, 整个系统胜利完成。 它是由一个操作系统、 一种语言 (Java ) 、 一个用户界面、 一个新的硬件平台、三块专用芯片构成的。通常情况下,这样的项目在 Sun 公司 要 75个人干三年。 项目完成后, 在 Sun 公司内部做了一次展示和鉴定, 观众的反 应是:在各方面都采用了崭新的、 非常大胆的技术。 许多参观者对 Java 留下了非 常深刻的印象,特别得到 Sun 的两位领导人 Scott McNealy和 Bill Joy的关注, 但 Java 的前途未卜。
1.3 Java语言的转折点
到了 1994年, WWW 已如火如荼地发展起来。 Gosling 意识到 WWW 需要一 个中性的浏览器, 它不依赖于任何硬件平台和软件平台, 它应是一种实时性较高、 可靠安全、有交互功能的浏览器。于是 Gosling 决定用 Java 开发一个新的 Web 浏览器。这项工作由 Naughton 和 Jonathan Payne 负责,到 1994年秋天,完成了 Web Runner的开发工作。 Web Runner是 HotJava 的前身,这个原型系统展示了 Java 可能带来的广阔市场前景。 Web Runner改名为 HotJava ,并于 1995年 5月 23日发表后, 在产业界引起了巨大的轰动, Java 的地位也随之而得到肯定。 又经 过一年的试用和改进, Java1.0版终于在 1996年年初正式发表。
第二章 需求分析
需求分析是整个软件开发过程的指南,是软件开发人员开发出符合用户要求 的软件的基础。需求分析为用户和软件开发者双方对该系统的初始框架有一个共 同的理解,使之成为整个项目开发工作的基础。
2.1鼠标功能分析
在整个计算器画面由多个方格和一个文本框等组成。 所有数字方块和一些运 算符都连有触发事件,点击鼠标就会有相应的反应,具体操作由内部代码给予命 令。
2.2 主界面显示功能
主界面需要有输入文本框, 当在输入数字时要显示输入的数字和显示运算结 果,同时文本框设计为不可编辑。有了文本框显示器,当然要有输入的数字和运 算符,就需要有各相关按钮进行编排,按钮分别是 0到 9还有“ +、 -、 *、 /、 . 、 C (清零) ” 。
控件显示:窗口中各文本框按钮的编排布局,要符合美学要求,可通过一些 版面分配的相关类进行自动生成。需要五行四列。
错误处理:当输入的数字和步骤非法时要进行相关报错, 比如没有输入数字 的情况下就进行预算这是计算器要提示报错,在比喻,当进行除法运算时,当除 数为零时, 计算器要提示 “除数不能为零” , 这些提示应当都由一个弹出窗口进行 提示。
2.3总框架分析
首先需要用一个 counter 类继承了 JFrame 类来形成一个视窗界面,然后通 过 JPanle 定义三个面板,在用 JTextField 定义文本框,在用 JButton 定义相关 按钮,在将这些仿佛 JPanel 中,通过 GridLayout 进行版面布局,在通过 super 设置窗体标题。在利用这些类的同时要知道需要引入哪些套件比如需要 import java.awt.BorderLayout 等。但整个过程由三个框架构成,一是主界面,二是版 面 配 置 及 各 相 关 按 钮 实 现 先 关 功 能 , 三 是 运 算 出 正 确 结 果 及 相 关 报 错 。
代码的框架结构也是按照这样来划分的, 主要就分为这三块, 这样在程序代码 编写过程中,已对各功能进行了模块化,然后对各个模块进行代码实现,在编写 过程中一些小问题就很容易解决。这样,一个简单的计算器就开发好了。
第三章 代码实现
一、 代码编写所需要个各套件
import javax.swing .*;
import java.io.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.*;
功能 :这些套件为后面各按钮的相关功能提供的保障。
二、代码中各种类
1、 counter 类
public class counter extends JFrame implements ActionListener {
JPanel txtpanel , btnpanel , southpanel ; //定义三个面板
JTextField txtinput ; //定义文本框
JButton
b1, b2, b3, b4, b5, b6, b7, b8, b9, b0, bdes , multiply , add , divide , subtract , clear btn , equalbtn ;
GridLayout g1; //创建布局
double simpan , hasil ;
String operasi ;
。。。。。。
功能:形成主界面,然后对各组件进行声明。
二、各函数
1、构造函数 counter
public counter()
{
.
.
. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置程序的关闭 方式
}
功能:初始化各组件,并对一些组件进行大小位置等设计。
2、事件触发函数 actionPerformed(ActionEvent e)
public void actionPerformed(ActionEvent e)
{
try
{
.
.
.
}
catch (Exception ouch){
JOptionPane. showMessageDialog (null ,
}//异常处理
}
功能:获取由计算器的到的数据并进行计算, 同时加入 try…catch , 用于捕捉在 输入当中出现的错误。
3、主函数
public static void main(String args[]){
try {
UIManager. setLookAndFeel (
}catch (Exception e){}//异常处理
new counter();//创建窗体
}
功能:程序运行的开始,激活 counter 类。
三、各组件
1、版面及各组件生成布局
getContentPane().add(txtpanel ,BorderLayout. NORTH ); //设置面板位置 txtpanel .add(txtinput ); //添加文本框到 txtpanel 面板中
g1=new GridLayout(4,4,5,5);//设置面板布局
btnpanel .setLayout(g1);
getContentPane().add(btnpanel );
2、清除键设计
public void btnCancelActionPerformed()//清空文本框内容 {
txtinput .setText(
}
第四章 测试
1、窗口 2、加法 例子:4+5=9
3、减法 9-5=4 4、乘法 6*3=18
5、除法 20/8=2.5 6、除数为 0时
第五章 心得体会
在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我
按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,通过 网上求助和同学帮助,最后都克服了,最后我成功的完成了这次课程设计。从中 我充分了解 java 面对对象的特性, 并体会到 java 与 C 语言的不同之处。 在实践的 同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧 和方法,为今后的发展带来帮助。
第六章 总结
1、通过编写这个相对复杂的程序,让我认识解决实际问题前应先建立模型,再 通过建立的模型使问题简单化,从而解决问题。
2、这次编写的程序大部分是通过调用各种包中的方法来实现的,这也让我充分 理解了包和类调用的关系。
3、由于这次编写的程序对于我来说相对的比较复杂,所以不能一次性编写调试, 也由此让我学会把程序分块,逐个编写、调试。
第七章 参考文献
【 1】 丁振凡 .java 语言实用教程 (第二版) 【 M 】 . 北京邮电大学出版社 .2008.1【 2】杨树林等 .java 语言最新实用案例教程(第二版) [M].清华大学出版 社 .2010.7
【 3】 叶核亚 .java 程序设计实用教程 (第三版) [M].电子工业出版社 .2010.2
**附录
import javax.swing .*;
import java.io.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.*;
public class counter extends JFrame implements ActionListener
{
JPanel txtpanel , btnpanel , southpanel ; //定义三个面板
JTextField txtinput ; //定义文本框
JButton
b1, b2, b3, b4, b5, b6, b7, b8, b9, b0, bdes , multiply , add , divide , subtract , clear btn , equalbtn ;
GridLayout g1; //创建布局
double simpan , hasil ;
String operasi ;
public counter()
{
super (
txtpanel =new JPanel();//创建面板
btnpanel =new JPanel();
southpanel =new JPanel();
txtinput =new JTextField(25);//创建文本框
txtinput .setEnabled(false ); //设置文本框不可编辑
txtinput .setHorizontalAlignment(JTextField.RIGHT );
txtinput .setText(
b1=new JButton(
b2=new JButton(
b3=new JButton(
b4=new JButton(
b5=new JButton(
b6=new JButton(
b7=new JButton(
b8=new JButton(
b9=new JButton(
b0=new JButton(
bdes =new JButton(
multiply =new JButton(
multiply .setFont(new Font(
multiply .setForeground(Color.blue ); //设置画笔颜色
divide =new JButton(
divide .setFont(new Font(
divide .setForeground(Color.blue );
add =new JButton(
add .setFont(new Font(
add .setBackground(Color.black );
add .setForeground(Color.blue );
subtract =new JButton(
subtract .setFont(new Font(
subtract .setForeground(Color.blue );
clearbtn =new JButton(
clearbtn .setFont(new Font(
clearbtn .setForeground(Color.green );
clearbtn .addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent argh) {
btnCancelActionPerformed();
}
});
equalbtn =new JButton(
equalbtn .setFont(new Font(
equalbtn .setForeground(Color.red );
b1.addActionListener(this );
b2.addActionListener(this );
b3.addActionListener(this );
b4.addActionListener(this );
b5.addActionListener(this );
b6.addActionListener(this );
b7.addActionListener(this );
b8.addActionListener(this );
b9.addActionListener(this );
b0.addActionListener(this );
bdes .addActionListener(this );
multiply .addActionListener(this );
divide .addActionListener(this );
add .addActionListener(this );
subtract .addActionListener(this );
equalbtn .addActionListener(this );
getContentPane().add(txtpanel ,BorderLayout. NORTH ); //设置面板位置
txtpanel .add(txtinput ); //添加文本框到 txtpanel 面板中
g1=new GridLayout(4,4,5,5);//设置面板布局
btnpanel .setLayout(g1);
getContentPane().add(btnpanel ); //窗体中加入第二个面板
//把下列按钮加入到 btnpanel 面板中
btnpanel .add(b7);
btnpanel .add(b8);
btnpanel .add(b9);
btnpanel .add(multiply );
btnpanel .add(b4);
btnpanel .add(b5);
btnpanel .add(b6);
btnpanel .add(divide );
btnpanel .add(b1);
btnpanel .add(b2);
btnpanel .add(b3);
btnpanel .add(add );
btnpanel .add(b0);
btnpanel .add(bdes );
btnpanel .add(equalbtn );
btnpanel .add(subtract );
getContentPane().add(southpanel ,BorderLayout. SOUTH ); //设置面板位置 southpanel .add(clearbtn ); //把 clearbtn 加入到 southpanel 面板中 setSize(250,300);//设置窗体初始大小
setVisible(true ); //设置窗体可见
setLocation(300,200);//设置初始窗体在屏幕上的位置
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置程序的关闭 方式
}
public void btnCancelActionPerformed()//清空文本框内容
{
txtinput .setText(
}
public void actionPerformed(ActionEvent e)
try
{ // txtinput.setText(
Object objkcal=e.getSource();//取得按钮
if (objkcal==b1) //如果按下 b1,则把文本框中的内容置为 1
txtinput .setText(txtinput .getText()+
else
if (objkcal==b2)
txtinput .setText(txtinput .getText()+
if (objkcal==b3)
txtinput .setText(txtinput .getText()+
if (objkcal==b4)
txtinput .setText(txtinput .getText()+
if (objkcal==b5)
txtinput .setText(txtinput .getText()+
if (objkcal==b6)
txtinput .setText(txtinput .getText()+
if (objkcal==b7)
txtinput .setText(txtinput .getText()+
if (objkcal==b8)
txtinput .setText(txtinput .getText()+
if (objkcal==b9)
txtinput .setText(txtinput .getText()+
if (objkcal==b0)
txtinput .setText(txtinput .getText()+
else
if (objkcal==bdes )
txtinput .setText(txtinput .getText()+
if (objkcal==add ){
s impan =Double.parseDouble (txtinput .getText()); o perasi =
t xtinput .setText(
}
else
simpan =Double.parseDouble (txtinput .getText());
operasi =
txtinput .setText(
}
else
if (objkcal==divide ){
simpan =Double.parseDouble (txtinput .getText());
operasi =
txtinput .setText(
}
else
if (objkcal==multiply ){
simpan =Double.parseDouble (txtinput .getText());
operasi =
txtinput .setText(
}
else //如果按下 =号,执行以下操作
if (objkcal==equalbtn ){
if (operasi ==
h asil =simpan +Double.parseDouble (txtinput .getText()); t xtinput .setText(Double.toString (hasil ));
}else
if (operasi ==
h asil =simpan -Double. parseDouble (txtinput .getText()); t xtinput .setText(Double.toString (hasil ));
}else
if (txtinput .equals(txtinput .getText())&&objkcal==
h asil =simpan -Double. parseDouble (txtinput .getText()); t xtinput .setText(Double.toString (hasil ));
}
else
if (operasi ==
i f (Double.parseDouble (txtinput .getText())==0) JOptionPane. showMessageDialog (this ,
hasil =simpan /Double.parseDouble (txtinput .getText());
t xtinput .setText(Double.toString (hasil ));
}
else
if (operasi ==
hasil =simpan *Double.parseDouble (txtinput .getText());
txtinput .setText(Double.toString (hasil )); }
}
}
catch (Exception ouch){
JOptionPane. showMessageDialog (null ,
}//异常处理
}
public static void main(String args[]){
try {
UIManager. setLookAndFeel (
}catch (Exception e){}//异常处理
new counter();//创建窗体
}
}
范文四:ANDROID简单计算器课程设计
摘要
Android 是当今最重要的手机开发平台之一, 它是建立在 Java 基础之上的, 能够迅速建 立手机软件的解决方案。 Android 的功能十分强大,成为当今软件行业的一股新兴力量。 Android 基于 Linux 平台,由操作系统、中间件、用户界面和应用软件组成,具有以下 5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松 的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次 创新实践很有意义。并且具有很强的使用性。
关键字:Android Java 基础 计算器
目录
第 1章 开发工具与环境 ........................................................................................................1 1.1Android 平台 ............................................................................................................. 1 1.2Java 开发环境 ........................................................................................................... 1 1.3Eclipse........................................................................................................................1 1.4Android 程序基础— Android 应用程序的构成 ...................................................... 2第 2章 系统分析与设计 ........................................................................................................4 2.1系统的可行性分析 ................................................................................................... 4 2.2系统的需求分析 ...................................................................................................... 4 2.3系统的优势 .............................................................................................................. 4 2.4系统的流程图 .......................................................................................................... 5第 3章 系统详细设计 ............................................................................................................6 3.1动作 Activity.......................................................................................................... 6 3.2布局文件 XML...................................................................................................... 6 3.3Activity 的详细设计 .............................................................................................. 7 3.2布局文件 XML 的详细设计 ............................................................................... 21 3.2系统的运行结果 .................................................................................................. 24结论 ........................................................................................................................................25参考文献 ................................................................................................................................26
第 1章 开发工具与环境
1.1Android 平台
1. 谷歌与开放手机联盟合作开发了 Android, 这个联盟由包括中国移动、摩托罗拉、高 通、宏达和 T-Mobile 在内的 30多家技术和无线应用的领军企业组成。
2.Android 是一个真正意义上的开放性移动设备综合平台。 通过与运营商、 设备制造商、 开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软 件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在 最大程度上得到保持。
3. 所有的 Android 应用之间是完全平等的。
4. 所有的应用都运行在一个核心的引擎上面, 这个核心引擎其实就是一个虚拟机, 它提 供了一系列用于应用和硬件资源间进行通讯的 API 。 撇开这个核心引擎, Android 的所有其 他的东西都是“应用” 。
5.Android 打破了应用之间的界限, 比如开发人员可以把 Web 上的数据与本地的联系人, 日历,位置信息结合起来,为用户创造全新的用户体验。
1.2Java 开发环境
Java 技术包含了一个编程语言及一个平台。 Java 编程语言具有很多特性, 如面向对象、 跨平台、分布式、多线程、解释性等等。 Java 编程语言起源于 Sun 公司的一个叫“ Green ” 的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。 1996年 1月发布 了 JDK1.1版本,一门新语言自此走向世界。之后, 1998年 12月发布了 1.2版本, 2002年 2月发布 1.4版本, 2004年 10月发布 1.5版本(5.0) , 2006年 12月发布 1.6(6.0)版本, 这是目前的最新版本。 Java1.2版本是一个重要的版本, 基于该版本, Sun 将 Java 技术分为 J2SE 、 J2ME 、 J2EE, 其中 J2SE 为创建和运行 Java 程序提供了最基本的环境, J2ME 与 J2EE 建立在 J2SE 的基础上, J2ME 为嵌入式应用 (如运行在手机里的 Java 程序) 提供开发与运 行环境, J2EE 为分布式的企业应用提供开发与运行环境。
1.3Eclipse
沈阳理工大学课程设计专用纸 No
2
Eclipse 的基础是富客户机平台(Rich Client Platform, 即 RCP ) 。
RCP 包括下列组件:
●核心平台(Eclipse ,运行插件)
●标准集束框架(OSGi :Open Service Gateway initiative )
●可移植构件工具包(SWT :Eclipse's Standard Widget Toolkit )
●JFace (文件缓冲,文本处理,文本编辑器)
Eclipse 采用的技术是 IBM 公司开发的 SWT , 这是一种基于 Java 的窗口组件, 类似 Java 本身提供的 AWT 和 Swing 窗口组件:不过 IBM 声称 SWT 比其他 Java 窗口组件更有效率。 Eclipse 的用户界面还使用了 GUI 中间层 JFace , 从而简化了基于 SWT 的应用程序的构建。 Eclipse 的设计思想是:一切皆插件。 Eclipse 核心很小, 其他所有功能都以插件的形式附加 于 Eclipse 核心之上。 Eclipse 基于内核包括:图形 API (SWT/JFace) , Java 开发环境插件 (JDT), 插件开发环境 (PDE ) 等。 Eclipse 的插件机制是轻型软件组件化架构。 在富客户机平台上, Eclipse 使用插件来提供所有的附加功能, 例如支持 Java 以外的其他语言。 已有的分离的插 件已经能够支持 C/C++(CDT)、 Perl 、 Ruby 、 Python 、 telnet 和数据库开发。插件架构能够 支持将任意的扩展加入到现有环境中, 例如配置管理, 而决不仅仅限于支持各种编程语言。
1.4Android 程序基础— Android 应用程序的构成
1.Activity 顾名思义, Activity 就是活动。 应用程序必须至少包含一个 Activity 。 Activity 提供了一个虚拟的用户接口, 每一个 Activity 都有一个默认的窗口可以用来显示用 户界面, 一般情况下, 它是全屏的窗口。 例如, 影音播放软件的每个用户界面就是 Activity 。 2.Service Service 与 Activity 的主要区别在于, Service 是在后台活动的,它 没有用户界面。典型的应用场景是,用户选择了一个播放列表开始播放后,离开了该用户 界面 (Activity),如果仍然希望歌曲不会暂停,就可以用 Service 去调用播放器,而不是在 Activity 中调用播放器。
3.Intent 在 Android 中,每一个行为都可以抽象为一个 Intent 。可以简单地 把 Intent 理解为一个包含了数据的消息。 Intent 可以用于启动一个 Act-ivity 或者 Service , 可以用于进程间的通信。事实上,应用程序的启动也是通过 Intent 实现的。
4.Content providers Android 平台内置了一套 SQLite 数据储存机制,并包含一系列 管理 SQLite Database 的相关方法。 在应用程序中, 可以通过 Content prov-iders 访问数据库。 每个 Content provider 都定义了一系列的方法用于访问它对应的数据库。 应用程序在新建数 据库时也可以定义相应的 Con-tent provider 用于向其他应用程序共享数据。一般情况下, 应用程序不直接调用 Content provider 定义的函数,而是通过 ContentResolver 间接调用。
第 2章 系统分析与设计
2.1系统的可行性分析
可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实 际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要 的,也是很重要的,经过最初的设计目标和进行的实时调查得出以下四点的可行性分析: (1)技术可行性:Eclipse +Android ADT 的技术已经较为成熟,通过 SUN 公司(现 被 ORCEL 公司收购)推出的跨平台、动态的 JAV A 语言进行开发。
(2)运行可行性:该系统需要 Android 虚拟机环境, Eclipse 中安装 ADT , DDMS 等 Google Android 相关插件。其运行环境已经相当稳定,它功能丰富,包括了完备的 Android 程序的编码、调试、测试和发布功能,其中支持所有 Android 应用开发相关技术,包括 SQLite , Skia , 3D 制作, Android XML ,能够很好的发布 Android 的应用程序 APK 包。 (3)法律可行性:因为是自主开发设计,所以不会构成侵权,在法律上是可行的。 通过以上的可行性分析, 将采用 Eclipse+AndroidADT +DDMS 技术, 运用 JA V A 语言 进行系统的开发。
2.2系统的需求分析
根据分析需求,这个系统必须实现以下的功能:
(1)实现简单的数字计算功能。
作为计算器,其核心就是加减乘除。
(2)能够在手机里面以良好的界面。
简单计算器能够给予用户良好的人机互动界面。
2.3系统的优势
Android 是以 Linux 为核心的手机操作平台,作为一款开放式的操作系统,随着 Android 的快速发展,如今已允许开发者使用多种编程语言来开发 Android 应用程序,而 不再是以前只能使用 Java 开发 Android 应用程序的单一局面,因而受到众多开发者的欢
迎,成为真正意义上的开放式操作系统。本次课程设计一个简易的计算器。主要了解 Activity 的创建和 Intent 的使用。 Intent 不仅可以连接两个 Activity。 而且可以传递数 据。下面是整个程序的设计流程。
2.4系统的流程图
本程序的流程是一个开机画面,开机画面之后就是计算机的主页面了所有这个简单程序的流程 图如图 2.1所示。
第一个
Activity
第二个
Activit
加法 减法 除法 乘法
图 2.1程序流程图
沈阳理工大学课程设计专用纸
No
6
第 3章 系统详细设计
3.1动作 Activity 参照程序的流程图,设计五个 Activity。分别为进入页面的 Activity,和选择运 算方式的 Activity。 在这里应该注意的是每当创建一个新的 class, 就要继承 Activity 如图 3.1所示。
图 3.1程序所需的 Activity
3.2布局文件 XML
相应的,需要在 res/layout文件夹中建立 3个 XML 文件来对上述的十个 Activity 进行 布局,如图 3.2所示。
图 3.23个 XML 布局文件
总体上所需要的 Activity 和 XML 布局文件已经建立完毕,下面开始对进入计算器的 Activity 进行编写,
沈阳理工大学课程设计专用纸 No 7
3.3Activity 的详细设计
动作模块中 CalculatorActivity.java 的详细代码如下:
package com.calculator.apk;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class CalculatorActivity extends Activity {
/**
*对 layout 中各组件进行定义
*/
Button btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn0,btnPoint;
Button btnJia,btnJian,btnCheng,btnChu;
Button btnC,btnE,btnA,btnB;
Button btnJieGuo;
TextView textView01;
EditText et;
//定义一个 float 类型,用于数字的运算
float num1;
//定义一个 float 类型,用于数字的运算
float num2;
@Override
protected void onCreate(BundlesavedInstanceState) {
沈阳理工大学课程设计专用纸 No 8
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);
//定义一个方法,完成对个组件的初始化
init();
//设置 btn1的监听事件
btn1.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 1,然后再将值赋给 EditText
et.setText(num1+1);
}
});
//设置 btn2的监听事件
btn2.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 2,然后再将值赋给 EditText
et.setText(num1+2);
}
});
//设置 btn3的监听事件
btn3.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 3,然后再将值赋给 EditText et.setText(num1+3);
}
});
//设置 btn4的监听事件 btn4.setOnClickListener(newOnClickListener(){ @Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 4,然后再将值赋给 EditText et.setText(num1+4);
}
});
//设置 btn5的监听事件 btn5.setOnClickListener(newOnClickListener(){ @Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 5,然后再将值赋给 EditText et.setText(num1+5);
}
});
//设置 btn6的监听事件 btn6.setOnClickListener(newOnClickListener(){ @Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 6,然后再将值赋给 EditText et.setText(num1+6);
}
});
//设置 btn7的监听事件 btn7.setOnClickListener(newOnClickListener(){ @Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 7,然后再将值赋给 EditText et.setText(num1+7);
}
});
//设置 btn8的监听事件 btn8.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 8,然后再将值赋给 EditText et.setText(num1+8);
}
});
//设置 btn9的监听事件 btn9.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//将 num1后面连接 9,然后再将值赋给 EditText
et.setText(num1+9);
}
});
//设置 btn0的监听事件 btn0.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 中的值
String num1=et.getText().toString();
//判断,如果 0为首次输入,并且 0为首位数字,则将下列按钮设为不可用 if(num1.length()<>
btn1.setEnabled(false);
btn2.setEnabled(false);
btn3.setEnabled(false);
btn4.setEnabled(false);
btn5.setEnabled(false);
btn6.setEnabled(false);
btn7.setEnabled(false);
btn8.setEnabled(false);
btn9.setEnabled(false);
btn0.setEnabled(false);
btnJieGuo.setEnabled(false);
btnJia.setEnabled(false);
btnJian.setEnabled(false);
btnCheng.setEnabled(false);
btnChu.setEnabled(false);
et.setText(
}else{
//如果 0不为第一个数字,则将 num1后面连接 0,然后再将值赋给 EditText et.setText(num1+0);
}
}
});
//设置 btnPoint 的监听事件 btnPoint.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//不论下列按钮可不可用,都将设为可用
btn1.setEnabled(true);
btn2.setEnabled(true);
btn3.setEnabled(true);
btn4.setEnabled(true);
btn5.setEnabled(true);
btn6.setEnabled(true);
btn7.setEnabled(true);
btn8.setEnabled(true);
btn9.setEnabled(true);
btn0.setEnabled(true);
btnJieGuo.setEnabled(true);
btnJia.setEnabled(true);
btnJian.setEnabled(true);
btnCheng.setEnabled(true);
btnChu.setEnabled(true);
//获取 EditText 中的值
String num1=et.getText().toString();
//此处方法是判断小数点是否存在
if(num1.indexOf(
if(num1.length()>0){
//如果不是在字符串的开头,则将 num1后面连接“ . ”,然后再将值赋给 EditText et.setText(num1+
}else{
//如果小数点在字符串的开头,则将 EditText 的值设为空
et.setText(
}
}else{
//如果小数点在前面的数字中已经出现,则 EditText 的值不变
et.setText(num1);
}
}
});
//设置 btnC 的监听事件
btnC.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
btn1.setEnabled(true);
btn2.setEnabled(true);
btn3.setEnabled(true);
btn4.setEnabled(true);
btn5.setEnabled(true);
btn6.setEnabled(true);
btn7.setEnabled(true);
btn8.setEnabled(true);
btn9.setEnabled(true);
btn0.setEnabled(true);
btnJieGuo.setEnabled(true);
btnJia.setEnabled(true);
btnJian.setEnabled(true);
btnCheng.setEnabled(true);
btnChu.setEnabled(true);
//清空 EditText
et.setText(
//清空 TextView
textView01.setText(
//num1和 num2的值归零
num1=0;
num2=0;
}
});
//设置 btnE 的监听事件
btnE.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//设置一个显式意图,用于 CalculatorActivity 和 AboutActivity 之间的跳转
Intent intent =new Intent(CalculatorActivity.this,MainActivity.class);
startActivity(intent);
}
});
//设置 btnJia 的监听事件
btnJia.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 的值
String num =et.getText().toString().trim();
//判断,如果 EditText 为空,则将 EditText 设置为空,如果不为空,则将 EditText 的 值转化为 float 类型
if(num.length()==0){
et.setText(
}else{
num1=Float.parseFloat(num);
}
//将符号
textView01.setText(
//清空 EidtText
et.setText(
}
});
//设置 btnJian 的监听事件
btnJian.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 的值
String num =et.getText().toString().trim();
//判断,如果 EditText 为空,则将 EditText 设置为空,如果不为空,则将 EditText 的 值转化为 float 类型
if(num.length()==0){
et.setText(
}else{
num1=Float.parseFloat(num);
}
//将符号
textView01.setText(
//清空 EidtText
et.setText(
}
});
//设置 btnCheng 的监听事件
btnCheng.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 的值
String num =et.getText().toString().trim();
//判断,如果 EditText 为空,则将 EditText 设置为空,如果不为空,则将 EditText 的 值转化为 float 类型
if(num.length()==0){
et.setText(
}else{
num1=Float.parseFloat(num);
}
//将符号
textView01.setText(
//清空 EidtText
et.setText(
}
});
//设置 btnChu 的监听事件
btnChu.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 的值
String num =et.getText().toString().trim();
//判断,如果 EditText 为空,则将 EditText 设置为空,如果不为空,则将 EditText 的 值转化为 float 类型
if(num.length()==0){
et.setText(
}else{
num1=Float.parseFloat(num);
}
//将符号
textView01.setText(
//清空 EidtText
et.setText(
}
});
//设置 btnJieGuo 的监听事件
btnJieGuo.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//获取 EditText 的值
String num22=et.getText().toString().trim();
//判断, 如果 EditText 的值为空, 则将 EditText 的值设为空, 如果不为空, 则将 EditText 的值转化为 float 类型
if(num22.length()<>
et.setText(
}else{
num2=Float.parseFloat(num22);
}
//获取 TextView 的值
String fuhao =textView01.getText().toString().trim();
//如果 TextView 的符号为“ +”,将 num1和 num2相加,并把值赋给 EditText
if(
float numjiguo1=num1+num2;
et.setText(
}else
//如果 TextView 的符号为“ -”,将 num1和 num2相减,并把值赋给 EditText if(
float numjiguo1=num1-num2;
et.setText(
}else
//如果 TextView 的符号为“ *”,将 num1和 num2相乘,并把值赋给 EditText if(
float numjiguo1=num1*num2;
et.setText(
}else
//如果 TextView 的符号为“ /”,将 num1和 num2相除,并把值赋给 EditText if(
float numjiguo1=num1/num2;
et.setText(
}
}
});
//设置 btnB 的监听事件 , 此处为这只退格键 btnB.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//不论下列按钮是否为可用,都将设置为可用
btn1.setEnabled(true);
btn2.setEnabled(true);
btn3.setEnabled(true);
btn4.setEnabled(true);
btn5.setEnabled(true);
btn6.setEnabled(true);
btn7.setEnabled(true);
btn8.setEnabled(true);
btn9.setEnabled(true);
btn0.setEnabled(true);
btnJieGuo.setEnabled(true);
btnJia.setEnabled(true);
btnJian.setEnabled(true);
btnCheng.setEnabled(true);
btnChu.setEnabled(true);
//获取 EditText 的值
String num =et.getText().toString().trim();
//获得 EditText 的长度
int length =et.length();
//判断, 如果 EditText 的长度大于 0, 则获取 length-1的字符串赋给 EditText , 否则设 置 EditText 为空
if(length>0){
String numRe =num.substring(0,length-1);
et.setText(numRe);
}else{
et.setText(
}
}
});
//设置 btnA 的监听事件
btnA.setOnClickListener(newOnClickListener(){
@Override
public void onClick(Viewv) {
//设置一个显式意图,用于 CalculatorActivity 和 AboutActivity 之间的跳转
Intent intent =new Intent(CalculatorActivity.this,AboutActivity.class);
startActivity(intent);
}
});
}
/**
*定义一个方法,完成对个组件的初始化
*/
void init(){
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn3=(Button)findViewById(R.id.btn3);
btn4=(Button)findViewById(R.id.btn4);
btn5=(Button)findViewById(R.id.btn5);
btn6=(Button)findViewById(R.id.btn6);
btn7=(Button)findViewById(R.id.btn7);
btn8=(Button)findViewById(R.id.btn8);
btn9=(Button)findViewById(R.id.btn9);
btn0=(Button)findViewById(R.id.btn0);
btnPoint =(Button)findViewById(R.id.btnPiont);
btnJia =(Button)findViewById(R.id.btnJia);
btnJian =(Button)findViewById(R.id.btnJian);
btnCheng =(Button)findViewById(R.id.btnCheng);
btnChu =(Button)findViewById(R.id.btnChu);
btnC =(Button)findViewById(R.id.btnC);
btnE =(Button)findViewById(R.id.btnE);
btnA =(Button)findViewById(R.id.btnA);
btnB =(Button)findViewById(R.id.btnB);
btnJieGuo =(Button)findViewById(R.id.btnJieguo);
et =(EditText)findViewById(R.id.ed);
textView01=(TextView)findViewById(R.id.textView01);
}
}
3.2布局文件 XML 的详细设计
布局文件 main.xml 编写布局代码如下:
<?xmlversion=
<>
android:orientation=
android:layout_width=
android:layout_height=
android:background=
android:gravity=
>
<>
android:layout_width=
android:layout_height=
android:layout_marginBottom=
android:id=
三个 Activity 创建完成后, 我们需要实现以下动作:在用户打开软件之后, 点击 “开 始计算” ,然后跳转到选择运算法则的界面,当用户输入数字点击加减乘除后运算得到结 果。由此可见,在整个动作中,需要使用侦听代码来识别用户的操作,然后使用 Intent 来实现 Activity 的切换。
例如开始界面跳转到主界面:首先在“开始计算”按钮上设置侦听代码如下: button1.setOnClickListener(newbutton1Listener());
然后开始侦听,当用户点击“开始计算”时,启动 Intent 来将本界面切换到主界面, 在这里需要 JAVA 中侦听的方法和 Intent 方法,代码如下
class button1Listener implements OnClickListener{
@Override
public void onClick(Viewv) {
//TODO Auto-generated method stub
//生成一个 Intent 对象
Intent intent =new Intent();
intent.setClass(jisuanqi.this,Activityone.class);
jisuanqi.this.startActivity(intent);
}
}
在这句代码当中 intent.setClass(jisuanqi.this,Activityone.class);是规定了本 次跳转是从哪个 Activity 跳转到 Activity,在这里是从 jisuanqi.java 跳转到 Activity.java。
完成了 Activity 之间的切换,下面我们开始进行运算的编辑,在加法界面,我们编 写如下代码来实现将用户输入的两个数传送到 Intent 中:
//生成一个 Intent 对象
//取得两个值
String FactorOnestr=FactorOne.getText().toString();
String FactorTwostr=FactorTwo.getText().toString();
//取得两个值放在 Intent 中
Intent intent =new Intent();
intent.putExtra(
intent.putExtra(
//使用这个 Intent 来激活答案页
intent.setClass(plus.this,resultplus.class);
plus.this.startActivity(intent);
接下来要进行的是显示答案的 Activity 的编写,在这里我们要注意的是 Intent 传过来 的是两个字符串,字符串是不能相加的,因此我们要将两个字符串强制转换为整形,然后 才可以相加,代码如下:
plusresult =(TextView)findViewById(R.id.plusresult);
//得到 Intent 对象当中的值
Intent intent =getIntent();
String FactorOnestr=FactorOne.getText().toString();
String FactorTwostr=FactorTwo.getText().toString();
//将字符串转为整形
Log.i(
Log.i(
//计算两数之和
int result =jiashuone +jiashutwo;
plusresult.setText(result+
减法,乘法,除法的界面类似于加法的界面,这里不再过多介绍了。
最后需要注意的是要在 AndroidMainfest.xml 文件中将所有的 Activity 进行注册, 然后才可以运行。
沈阳理工大学课程设计专用纸
No 24
3.2系统的运行结果
计算机运行的欢迎界面如图
3.1所示:
图 3.1计算器进入欢迎界面
当用户点击“开始计算”进入主页面。
计算机的主页面如图 3.2所示:
图 3.2计算机主界面
结论
这次课程设计虽然很简单但是需要注意的地方很多,比如 ID 的声明,经常由于 ID 的 问题出现程序出现错误。然后就是 Activity 的注册的问题,还有每个 class 创建要继承 Activity,到后来计算的问题,然后开始找相关的资料才知道需要将字符串进行转换才能 进行运算。这次课程设计真正的锻炼了我的的耐心和细心,虽然程序很简单,但是真正的 从头编到尾才知道。努力解决调试中遇到的许多问题,这样可以在过程中才能更好地 锻炼自己的能力,认识到自己的不足。通过这次课设认识到自己在编程中的缺陷,我 查了不少的资料获益匪浅需要好好学习更深入的理解。
参考文献
[1]余志龙,陈昱勋 . Google Android SDK 开发范例大全(第二版) [M].人民邮电出版 社 .2010
[2]王志超, 王敏 . 基于 Android 平台的 MP3播放器的分析与设计 .[J].Forum论坛 .2011.9 [3]何晓杰 . Android 开发经验谈 [J].移动开发大势图 .2010.9
[4]Ed Burnette. Android 基础教程 [J ].人民邮电出版社 .2010.8
[5]Google Android 开发入门与实战
[6]Android 开发者网站:http://developer.android.com
[7]Android 中文网:http://hiapk.com
范文五:课程设计_简单计算器
目录
简单计算器设计 . .................................................................................................................................................... 1
一、系统开发的背景 . ............................................................................................................................................ 1
二、系统分析与设计 . ............................................................................................................................................ 1
(一) 系统功能要求 ....................................................................................................................................... 1
(二) 系统模块结构设计 ............................................................................................................................... 1三、 系统的设计与实现 .................................................................................................................................... 2
(一)菜单选项:VOID MENU1() ; ....................................................................................................................... 3
(二)标准型:MENU 4() 、 ADD () 、 SUB () 、 PRO () 、 DIV () ; ....................................................................... 3
(三)科学型:MENU 2() 、 ADD 1() 、 SUB 1() 、 PRO 1() 、 DIV 1() 、 FUN () ; . ................................................ 6四、系统测试 . ........................................................................................................................................................ 9
(一) 测试 MENU 4() 、 ADD () 、 SUB () 、 PRO () 、 DIV ()函数 ................................................................... 9
(二) 测试 FUN () 、 ADD 1() 、 SUB 1() 、 PRO 1() 、 DIV 1()函数 ............................................................ 10
五、总结 . .............................................................................................................................................................. 11
六、附件(代码、部分图表) ........................................................................................................................... 12
(一)程序代码 . .................................................................................................................................................. 12
(二)部分图表 . .................................................................................................................................................. 19
简单计算器设计
一、系统开发的背景
当今社会是信息社会, 科技经济高速发展的社会! 为了更方便人们的 工作生活和加速人们处理信息的速度, 计算器应运而生。 由于它体积小巧, 携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品! 随着科技的发展计算器的种类变得更多, 功能变得更强大, 体积变得更小! 电脑的出现改变人们的生活习惯, 很多事情都可以电脑来完成! 电脑的更 大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延! 因此我 们将用我们学习的 c 语言编写一个简易的计算器程序! 实现简单的初步的 计算功能!
二、系统分析与设计
(一) 系统功能要求
可以实现两个数加、减、乘、除的基本运算同时也可以实现多个数的加、 减、乘、除的混合运算以及实现了一些基本的进制之间的互相转换。
1、进制转换(包括二进制、十进制、十六进制) ;
2、混合运算可以实现用上一次的计算结果接着用进行下一步运算;
3、两个数之间的基本运算只能计算两个数;
(二) 系统模块结构设计
通过对系统功能的分析,简单计算器功能如图 1所示。
图 1简单计算器系统功能图
通过上图的功能分析,把整个系统划分为标准型、科学型 2大模块,标 准型之中只有一个算数运算模块,科学型之中包括算数运算和进制转换 2个 模块:
1. 标准型,该模块主要实现:两个数加、减、乘、除的基本运算,借助函数 add () 、 sub () 、 pro () 、 div ()来实现;
2. 科学型,该模块主要实现:多个数的加、减、乘、除的混合运算以及实现 了一些基本的进制之间的互相转换,算术运算借助函数 add1 ()、 sub1()、 pro1() 、 div1()来实现;进制转换借助函数 fun ()来实现。
三、 系统的设计与实现
简单计算机系统
标准型
科学型
算 术 运 算
进 制 转 换
算 术 运 算
(一)菜单选项:void menu1() ;
分析:首先输出表头, 然后依次输出供用户选择的菜单。流程图如图 2所示。
该模块的具体代码如下所示。
void menu1()
{
printf(
printf(
printf(
}
(二)标准型:menu4() 、 add () 、 sub () 、 pro () 、 div () ;
分析:1. 首先用 menu4()输出供用户选择的加、减、乘、除四个菜单。 流程图如图 3所示。
该模块的具体代码如下所示。
void menu4()
{
printf(
2. 之后用 add () 、 sub () 、 pro () 、 div ()四个函数进行运算;流 程图如图 4所示。
图 4:add ()流程图
3.sub () 、 pro () 、 div ()三个函数的流程图与 add ()函数相同,只 需将图四中的处理框的表达式做相应的改动。
该模块的具体代码如下所示。
int add()
{
int add(int x,int y);
int a,b,c;
printf(
scanf(
c=add(a,b);
printf(
return 0;
}
int add(int x,int y)
{
int z;
z=x+y;
return (z);
}
float sub()
{
float sub(float x,float y); float a,b,c;
printf(
c=sub(a,b);
printf(
}
float sub(float x,float y)
{
float z;
z=x-y;
return (z);
}
float pro()
{
float pro(float x,float y); float a,b,c;
printf(
c=pro(a,b);
printf(
}
float pro(float x,float y)
{
float z;
z=x*y;
return (z);
}
float div()
{
float div(float x,float y); float a,b,c;
printf(
c=div(a,b);
printf(
return 0;
}
float div(float x,float y)
{
float z;
z=x/y;
return (z);
}
(三)科学型:menu2() 、 add1() 、 sub1() 、 pro1() 、 div1() 、 fun () ;
分析:1. 首先用 menu2()输出供用户选择的算术运算、与进制转换两个菜 单。流程图如图 5所示。
图 5:menu2()流程图
该模块的具体代码如下所示。
void menu2()
{
printf(
printf(
printf(
2. 之后用 add1() 、 sub1() 、 pro1() 、 div1()四个函数进行运算;流程
图如图 6所示。
图 6:add1()流程图
Sub1() 、 pro1() 、 div1()三个函数的流程图与 add ()函数相同。 该模块的具体代码如下所示。
void add1(double x,double y)
{
double n,z;
char t,c;
z=x+y;
printf(
c=getchar();
scanf(
if(t!='0')
scanf(
switch(t)
{
case '+':add1(z,n);break;
case '-':sub1(z,n);break;
case '*':pro1(z,n);break;
case '/':div1(z,n);break;
case '0':return;break; // 返回一般计算 }
}
void sub1(double x,double y)
{
double n,z;
char t,c;
z=x-y;
printf(
c=getchar();
scanf(
if(t!='0')
scanf(
switch(t)
{
case '+':add1(z,n);break;
case '-':sub1(z,n);break;
case '*':pro1(z,n);break;
case '/':div1(z,n);break;
case '0':return;break;
}
}
void pro1(double x,double y)
{
double n,z;
char t,c;
z=x*y;
printf(
c=getchar();
scanf(
if(t!='0')
scanf(
switch(t)
{
case '+':add1(z,n);break;
case '-':sub1(z,n);break;
case '*':pro1(z,n);break;
case '/':div1(z,n);break;
case '0':return;break;
}
}
void div1(double x,double y)
{
double n,z;
char t,c;
z=x/y;
printf(
c=getchar();
scanf(
if(t!='0')
scanf(
switch(t)
{
case '+':add1(z,n);break;
case '-':sub1(z,n);break;
case '*':pro1(z,n);break;
case '/':div1(z,n);break;
case '0':return;break;
}
}
四、系统测试
(一) 测试 menu4() 、 add () 、 sub () 、 pro () 、 div ()函数
图 7 menu4() 、 add () 、 sub () 、 pro () 、 div ()函数
(二) 测试 fun () 、 add1() 、 sub1() 、 pro1() 、 div1()函 数
图 8 add1() 、 sub1() 、 pro1() 、 div1()函数
10
图 9 fun()函数
五、总结
系统完成了两数之间的加、减、乘、除最基本运算和多个数的加、减、 乘、除的混合运算以及实现了一些基本的进制之间的互相转换的功能。系统 虽然完成了简单的运算达到了基本的目的但是系统还存在着许多不足之处, 系统完成的运算项目太少,只能完成加、减、乘、除四个运算项目的运算, 不能满足实际生活中的需要,以及在进制转换方面互相转换的进制类型比较 少。同时系统在设计中主次没能很好地把握,使系统显得比较生硬。这些方 面在以后的学习中我们都要加强了解。
通过这次课程设计发现了要想做好一个是比较难的,仅仅有一些基本的 从课堂上学到 c 语言基础是不够的还需要我们查阅更多的资料。这次课程设
11
计不仅让我找到了自己在程序设计方面存在的问题与不足,同时还让我对 C 语言的认识程度上升到了另一个高度,理解更加深刻了,为以后的学习找到 了方向。同时此次课程设计我熟悉并掌握了模块化程序设计方法,理解和运 用结构化程序设计的思路和方法。
六、附件
(一)程序代码
#include #include void add1(double x,double y); void sub1(double x,double y); void pro1(double x,double y); void div1(double x,double y); void menu1() { printf( printf( printf( void menu2() { printf( printf( printf( void menu3() { printf( printf( printf( void menu4() { printf( printf( void add1(double x,double y) { double n,z; char t,c; z=x+y; printf( c=getchar(); scanf( if(t!='0') scanf( switch(t) { case '+':add1(z,n);break; case '-':sub1(z,n);break; case '*':pro1(z,n);break; case '/':div1(z,n);break; case '0':return;break; // 返回一般计算 } } void sub1(double x,double y) { double n,z; char t,c; z=x-y; printf( c=getchar(); scanf( if(t!='0') scanf( switch(t) { case '+':add1(z,n);break; case '-':sub1(z,n);break; case '*':pro1(z,n);break; case '/':div1(z,n);break; case '0':return;break; } } void pro1(double x,double y) { double n,z; char t,c; z=x*y; printf( c=getchar(); scanf( if(t!='0') scanf( { case '+':add1(z,n);break; case '-':sub1(z,n);break; case '*':pro1(z,n);break; case '/':div1(z,n);break; case '0':return;break; } } void div1(double x,double y) { double n,z; char t,c; z=x/y; printf( c=getchar(); scanf( if(t!='0') scanf( { case '+':add1(z,n);break; case '-':sub1(z,n);break; case '*':pro1(z,n);break; case '/':div1(z,n);break; case '0':return;break; } } int add() int add(int x,int y); int a,b,c; printf( printf( } int add(int x,int y) { int z; z=x+y; return (z); } float sub() { float sub(float x,float y); float a,b,c; printf( c=sub(a,b); printf( } float sub(float x,float y) { float z; z=x-y; return (z); } float pro() { float pro(float x,float y); float a,b,c; printf( c=pro(a,b); printf( } float pro(float x,float y) { z=x*y; return (z); } float div() { float div(float x,float y); float a,b,c; printf( scanf( c=div(a,b); printf( return 0; } float div(float x,float y) { float z; z=x/y; return (z); } void fun2()//进制转换 { int choice,value,i,j=0,k,t; char s[50]; int a[4]; printf( scanf( switch(choice) { case 1:printf( while(value>=2) { if(value%2!=0) s[j++]='1'; else s[j++]='0'; value=value/2; } if(value==1) printf( for(i=j;i>=0;i--) printf( break; case 2:printf( case 3:printf( for(i=0;s[i]!='\0';i++); i--;value=0; for(j=0;j<> { t=1; if(s[j]=='1') { for(k=i-j;k>0;k--) t*=2; value+=t; } } printf( case 4:printf( scanf( for(i=0;s[i]!='\0';i++); i--;value=0; for(j=0;j<> { t=1; if(s[j]=='1') { for(k=i-j;k>0;k--) t*=2; value+=t; } } printf( case 5:printf( scanf( while(value>=2) { if(value%2!=0) s[j++]='1'; else s[j++]='0'; value=value/2; } if(value==1) s[j]='1'; printf( for(i=j;i>=0;i--) printf( break; case 6:printf( scanf( printf( default:printf( break; } } void main() { printf( int choice; while(choice!=0) { menu1(); printf( scanf( if(choice==1) { menu3(),menu4(); printf( scanf( if(choice==1) add(); if(choice==2) sub(); if(choice==3) pro(); if(choice==4) div(); } if(choice==5) { menu2(); printf( scanf( if(choice==1) { printf( double a,b; char c; scanf( if(c!='0') scanf( switch(c) { case '+':add1(a,b);break; case '-':sub1(a,b);break; case '*':pro1(a,b);break; case '/':div1(a,b);break; case '0':return;break; } } else fun2(); } printf( printf( } (二)部分图表 图 10 程序总体运行情况