SWT计算器的设计与实现Word文档格式.doc
《SWT计算器的设计与实现Word文档格式.doc》由会员分享,可在线阅读,更多相关《SWT计算器的设计与实现Word文档格式.doc(38页珍藏版)》请在冰点文库上搜索。
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]张广彬.Java课程设计案例精编(第二版).北京:
清华大学出版社,2011.
[2]耿祥义.Java课程设计(第二版).北京:
清华大学出版社,2008.
[3]耿祥义.JAVA大学实用教程.北京:
[4]邹林达.陈国君Java2程序设计基础.北京:
清华大学出版社,2010.
[5]邹林达.Java2程序设计基础实验指导.北京:
清华大学,2010.
指导教师(签名):
20年月日
目录
1需求与总体设计……………………………………………………………………………1
1.1计算器需求分析………………………………………………………………………1
1.2功能描述………………………………………………………………………1
1.3系统功能图………………………………………………………………………1
1.3系统主要类图………………………………………………………………………2
2详细设计…………………………………………………………………………………3
2.1类…………………………………………………………………………………3
2.2成员变量………………………………………………………………………3
2.3方法………………………………………………………………………4
2.4详细类图………………………………………………………………………4
3编码实现…………………………………………………………………………………5
3.1计算器详细代码实现……………………………………………………………………5
4系统测试…………………………………………………………………………………28
4.1界面测试……………………………………………………………………………28
4.2计算器功能测试…………………………………………………………………………28
4.2.1四则运算…………………………………………………………………………28
4.2.2三角函数运算…………………………………………………………………………29
4.2.3特殊运算…………………………………………………………………………29
4.2.4计算过程清除…………………………………………………………………………30
4.2.5计算过程保存…………………………………………………………………………30
4.2.6关于计算机说明…………………………………………………………………………31
总结…………………………………………………………………………………32
(要求:
目录题头用三号黑体字居中书写,隔行书写目录内容。
目录中各级题序及题标用小四号黑体字)
1需求与总体设计
1.1计算器需求分析
为了减轻人们日益繁琐的工作压力和负担,实现高效统计和运算,在普通计算器上加入更多样更便捷的功能势在必行,普通计算器上加入三角函数功能和保存功能,可以大大减轻会计以及财务部门统计账目的压力。
此次逻辑算术设计实践,利用java面向对象程序设计和SWT技术针对该程序显示GUI用户界面,能实现四则运算以及扩展函数运算,并用图形界面实现。
够培养我们严谨务实的工作态度以及提高我们分析问题和解决问题的能力,也对于巩固和加深对面向对象程序设计的基本概念、基本理论和实现技术的理解起到了一定的意义。
1.2功能描述
(1)单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置参与计算的运算数。
(2)单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。
(3)单击“计算器”上的函数按钮可以计算出相应的函数值。
(4)单击“计算器”上的“=”按钮显示计算结果。
(5)单击“保存”按钮可以将文本区中的全部计算过程保存到文件:
1.3功能图如下:
结果清除
复制显示框内容
保存计算过程
显示运算结果
函数计算
加、减、乘、除计算
错
图1-1系统主要功能图
1.4系统主要类图
ClassCalc()
显示“+”“—”按钮
显示“*”“/”按钮
显示Sin按钮
显示Cos按钮
显示Tan按钮
显示退格按钮
显示数字0-9按钮
显示清除按钮
显示结果文本框
显示计算过程显示文本框
四则运算
函数运算
特殊运算
计算过程保存、清楚
计算过程复制到剪贴板
main()
显示按钮
数据计算
计算过程保存、清除
图1-2系统主要类图
2详细设计
2.1类
clascalc:
该类是程序的主类,显示了界面窗口,数据计算,计算过程保存、复制到剪贴板,以下是该类的说明。
2.2成员变量
lDecimalFormatdf设置数据输出精度(对于double型值)
lbooleanclickable控制当前能否按键
ldoublememory内存中存储的double型数字
lintmemory内存中存储的int型数字
ldoublevard,用来保存double型数据的中间值
ldoubleanswerd用来保存最后结果
lshortkey用来保存当前进行何种运算,
lshortprekey用来保存前次进行何种运算
lintw=0按钮前一动作为结果运算动作,比如“=”或是开方
lintw=1按钮前一动作为数值输出或是“-/+”
lStringmid中间运算过程记录值
lDisplayd与系统交互类实例
lShells容器窗口实例
lTexttextanswer计算结果显示框
lTextt2计算过程显示窗口
lMenum菜单bar实例
lMenufilemenu菜单变量
lMenuItembzx“标准型”菜单项目变量
lButtonb0–b9数字键0到9
lButtonbuttonSave保存键按钮,保存计算过程
lButtonbuttonCopy复制键按钮,复制计算过程到剪贴板
lButtonbuttonSqart开方键按钮,进行开方运算
lButtonbuttonMod“%”键按钮,进行模运算
lButtonbuttonDot小数点按钮
lButtonbutonAddbuttonSubbuttonMulbuttonDiv“+”“-”“*”“/”键按钮,进行加减乘除运算
lButtonbuttonSinbuttonCosbuttonAsinbuttonAcosbuttonLog“sin””cos””asin””acos”按钮,进行三角函数运算
2.3方法
calc()是程序的主要方法,负责构造友好界面窗口,显示按钮、文本框,调用监听器进行按钮功能判断监听,实施四则运算和特殊函数,显示运算结果,保存运算结果到文件和剪贴板。
2.4详细类图
ClassCalc
DecimalFormatdfbooleanclickable
doublememoryintmemory
doublevard,doubleanswerd
shortkeyshortprekey
intwStringmid
TexttextanswerMenufilemenu
DisplaydShellsMenum
MenuItembzxButtonb0–b9
ButtonbuttonSavebuttonCopy
buttonSqartbuttonModbuttonDotbutonAddbuttonSubbuttonMulbuttonDiv
ButtonbuttonSinbuttonCosbuttonAsinbuttonAcosbuttonLog
Calc()
Classmain()
calcss
classcalc
图2-1系统详细类图
3编码实现
3.1计算器详细代码实现
packageZY04;
importjava.text.DecimalFormat;
importjava.awt.Color;
importjava.io.*;
importjava.lang.NumberFormatException;
importorg.eclipse.swt.*;
importorg.eclipse.swt.events.*;
importorg.eclipse.swt.graphics.*;
importorg.eclipse.swt.layout.*;
importorg.eclipse.swt.widgets.*;
publicclasscalc{
DecimalFormatdf=newDecimalFormat("
0.##############"
);
//设置数据输出精度(对于double型值)
booleanclickable;
//控制当前能否按键
doublememoryd;
//内存中存储的double型数字
intmemoryi;
//内存中存储的int型数字
doublevard,answerd;
//用来保存double型数据的中间值(vard)和最后结果(answerd)
shortkey=-1,prekey=-1;
//key用来保存当前进行何种运算,prekey用来保存前次进行何种运算
intw=0;
//w=1,按钮前一动作为结果运算动作,比如“=”或是开方,w=0,按钮前一动作为数值输出或是“-/+”
Stringmid="
"
;
//中间运算过程记录值
Displayd;
Shells;
calc(){
d=newDisplay();
s=newShell(d);
s.setSize(220,380);
s.setImage(newImage(d,"
c:
\\123.jpg"
));
s.setText("
计算器"
//**************************************************************************
//设置菜单
Menum=newMenu(s,SWT.BAR);
//创建查看菜单项
finalMenuItemfile=newMenuItem(m,SWT.CASCADE);
file.setText("
查看(v)"
finalMenufilemenu=newMenu(s,SWT.DROP_DOWN);
file.setMenu(filemenu);
finalMenuItembzx=newMenuItem(filemenu,SWT.RADIO);
bzx.setSelection(true);
bzx.setText("
标准型(T)Alt+1"
finalMenuItemkxx=newMenuItem(filemenu,SWT.RADIO);
kxx.setText("
科学型(S)Alt+2"
finalMenuItemcxy=newMenuItem(filemenu,SWT.RADIO);
cxy.setText("
程序员(P)Alt+3"
finalMenuItemtjxx=newMenuItem(filemenu,SWT.RADIO);
tjxx.setText("
统计信息(A)Alt+4"
finalMenuItemseparator1=newMenuItem(filemenu,SWT.SEPARATOR);
//分割线
finalMenuItemlsjl=newMenuItem(filemenu,SWT.CHECK);
lsjl.setText("
历史记录(Y)Ctrl+H"
finalMenuItemszfz=newMenuItem(filemenu,SWT.CHECK);
szfz.setText("
数字分组(I)"
finalMenuItemseparator2=newMenuItem(filemenu,SWT.SEPARATOR);
finalMenuItemjb=newMenuItem(filemenu,SWT.RADIO);
jb.setSelection(true);
jb.setText("
基本(B)Ctrl+F4"
finalMenuItemdwzh=newMenuItem(filemenu,SWT.RADIO);
dwzh.setText("
单位转换(U)Ctrl+U"
finalMenuItemrqjs=newMenuItem(filemenu,SWT.RADIO);
rqjs.setText("
日期计算(D)Ctrl+E"
//创建工作表子菜单
finalMenuItemgzb=newMenuItem(filemenu,SWT.CASCADE);
gzb.setText("
工作表(W)"
finalMenusubmenu=newMenu(s,SWT.DROP_DOWN);
gzb.setMenu(submenu);
finalMenuItemdy=newMenuItem(submenu,SWT.RADIO);
dy.setText("
抵押(M)"
finalMenuItemqczl=newMenuItem(submenu,SWT.RADIO);
qczl.setText("
汽车租赁(V)"
finalMenuItemyh1=newMenuItem(submenu,SWT.RADIO);
yh1.setText("
油耗(mpg)(F)"
finalMenuItemyh2=newMenuItem(submenu,SWT.RADIO);
yh2.setText("
油耗(1/100km)(U)"
//创建编辑菜单
finalMenuItemedit=newMenuItem(m,SWT.CASCADE);
edit.setText("
编辑(E)"
finalMenueditmenu=newMenu(s,SWT.DROP_DOWN);
edit.setMenu(editmenu);
finalMenuItemfz=newMenuItem(editmenu,SWT.PUSH);
fz.setText("
复制(C)Ctrl+C"
finalMenuItemzt=newMenuItem(editmenu,SWT.PUSH);
zt.setText("
粘贴(V)Ctrl+V"
finalMenuItemseparator3=newMenuItem(filemenu,SWT.SEPARATOR);
finalMenuItemlsjl1=newMenuItem(editmenu,SWT.CASCADE);
lsjl1.setText("
历史记录(H)"
finalMenusubmenu1=newMenu(s,SWT.DROP_DOWN);
lsjl1.setMenu(submenu1);
finalMenuItemfzlsjl=newMenuItem(submenu1,SWT.PUSH);
fzlsjl.setText("
复制历史记录(I)"
finalMenuItembj=newMenuItem(submenu1,SWT.PUSH);
bj.setText("
编辑(E)F2"
finalMenuItemqxbj=newMenuItem(submenu1,SWT.PUSH);
qxbj.setText("
取消编辑(N)Esc"
finalMenuItemqc=newMenuItem(submenu1,SWT.PUSH);
qc.setText("
清楚(L)Ctrl+Shift+D"
//创建帮助菜单
finalMenuItemhelp=newMenuItem(m,SWT.CASCADE);
help.setText("
帮助(H)"
//创建帮助菜单
finalMenuhelpmenu=newMenu(s,SWT.DROP_DOWN);
help.setMenu(helpmenu);
finalMenuItemckbz=newMenuItem(helpmenu,SWT.PUSH);
ckbz.setText("
查看帮助(V)F1"
finalMenuItemabout=newMenuItem(helpmenu,SWT.PUSH);
about.setText("
关于计算机A)"
s.setMenuBar(m);
//界面采用网格布局,5栏**************************************************
GridLayoutgl=newGridLayout();
gl.numColumns=5;
s.setLayout(gl);
//创建计算窗口,设置样式
FinalTexttextAnswer=newText(s,SWT.SINGLE|SWT.BORDER|
SWT.READ_ONLY|SWT.RIGHT);
textAnswer.setText("
GridDatagd=newGridData(GridData.FILL_BOTH);
gd.horizontalSpan=5;
textAnswer.setLayoutData(gd);
//创建显示计算过程窗口,设置样式
finalTextt2=newText(s,SWT.MULTI|SWT.BORDER|SWT.READ_ONLY|SWT.RIGHT|SWT.V_SCROLL|SWT.FocusOut);
gd=newGridData(GridData.FILL_BOTH);
gd.horizontalSpan=4;
gd.verticalSpan=3;
t2.setLayoutData(gd);
//创建复制、保存、清除按钮,对t2操作,由后方监听器实现
finalButtonbuttonCopy=newButton(s,SWT.PUSH);
buttonCopy.setText("
复制"
finalButtonbuttonSave=newButton(s,SWT.PUSH);
buttonSave.setText("
保存"
finalButtonbuttonClear=newButton(s,SWT.PUSH);
buttonClear.setText("
清除"
//创建三角函数按钮
finalButtonbuttonLog=newButton(s,SWT.PUSH);
buttonLog.setText("
log"
finalButtonbuttonSin=newButton(s,SWT.PUSH);
buttonSin.setText("
sin"
finalButtonbuttonCos=newBut