《最新SWT计算器的设计与实现.doc》由会员分享,可在线阅读,更多相关《最新SWT计算器的设计与实现.doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateSWT计算器的设计与实现 小型软件开发 面向对象程序设计课程设计报告题 目: 计算器的设计实现 院 (系): 计算机学院 专业班级: 学生姓名: 学 号: 指导教师: 20 12 年 6 月 4 日至20 12 年 6 月 15 日华中科技大学制计算器的设计实现课程设计任务书一、设计(调查报告/论文)题目计算器的设计实现二、设计(调查报告/论文)主要内容总体功能:计算
2、器具有基本的计算功能,而且还有显示计算过程、保存计算过程之功能。 具体功能与要求:1、单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置参与计算的运算数。2、单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。3、单击“计算器”上的函数按钮可以计算出相应的函数值。4、单击“计算器”上的“=”按钮显示计算结果。5、单击“保存”按钮可以将文本区中的全部计算过程保存到文件:单击“复制”按钮可以将文本区中选中的文本复制到剪切板;单击“清除”按钮可以清除文本区中的全部内容。三、原始资料1.面向对象程序设计课程设计指导书2. 耿祥义JAVA大学实用教程北京:清华大学出
3、版社,2009四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料1 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011. 2 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA大学实用教程北京:清华大学出版社,20094 邹林达陈国君 Java2程序设计基础北京:清华大学出版社,20105 邹林达Java2程序设计基础实验指导北京:清华大学,2010指导教师(签名): 20
4、年 月 日目 录1需求与总体设计11.1计算器需求分析11.2功能描述11.3系统功能图11.3系统主要类图22详细设计32.1类32.2成员变量32.3方法42.4详细类图43编码实现53.1计算器详细代码实现54系统测试284.1界面测试284.2计算器功能测试284.2.1四则运算284.2.2三角函数运算294.2.3特殊运算294.2.4计算过程清除304.2.5计算过程保存304.2.6关于计算机说明31总结32(要求:目录题头用三号黑体字居中书写,隔行书写目录内容。目录中各级题序及题标用小四号黑体字)-1需求与总体设计1.1计算器需求分析为了减轻人们日益繁琐的工作压力和负担,实现
5、高效统计和运算,在普通计算器上加入更多样更便捷的功能势在必行,普通计算器上加入三角函数功能和保存功能,可以大大减轻会计以及财务部门统计账目的压力。此次逻辑算术设计实践,利用java面向对象程序设计和SWT技术针对该程序显示GUI用户界面,能实现四则运算以及扩展函数运算,并用图形界面实现。够培养我们严谨务实的工作态度以及提高我们分析问题和解决问题的能力,也对于巩固和加深对面向对象程序设计的基本概念、基本理论和实现技术的理解起到了一定的意义。1.2功能描述(1)单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置参与计算的运算数。(2)单击“计算器”上的运算符按钮(+、-、
6、*、/)可以选择运算符号。(3)单击“计算器”上的函数按钮可以计算出相应的函数值。(4)单击“计算器”上的“=”按钮显示计算结果。(5)单击“保存”按钮可以将文本区中的全部计算过程保存到文件:单击“复制”按钮可以将文本区中选中的文本复制到剪切板;单击“清除”按钮可以清除文本区中的全部内容。1.3功能图如下:计算器的设计实现结果清除复制显示框内容保存计算过程显示运算结果函数计算加、减、乘、除计算错 图1-1系统主要功能图1.4系统主要类图Class Calc() 显示“+”“”按钮显示“*”“/”按钮显示Sin按钮显示Cos按钮显示Tan按钮显示退格按钮显示数字0-9按钮显示清除按钮显示结果文本
7、框显示计算过程显示文本框四则运算函数运算特殊运算计算过程保存、清楚计算过程复制到剪贴板main()显示按钮数据计算计算过程保存、清除 图1-2系统主要类图2详细设计2.1类clas calc:该类是程序的主类,显示了界面窗口,数据计算,计算过程保存、复制到剪贴板,以下是该类的说明。2.2成员变量l DecimalFormat df 设置数据输出精度(对于double型值)l boolean clickable 控制当前能否按键l double memory 内存中存储的double型数字l int memory 内存中存储的int型数字l double vard, 用来保存double型数据的
8、中间值l double answerd 用来保存最后结果l short key 用来保存当前进行何种运算,l short prekey 用来保存前次进行何种运算l int w=0 按钮前一动作为结果运算动作,比如“=”或是开方l int w=1 按钮前一动作为数值输出或是“-/+”l String mid 中间运算过程记录值l Display d 与系统交互类实例l Shell s 容器窗口实例l Text textanswer 计算结果显示框l Text t2 计算过程显示窗口l Menu m 菜单bar实例l Menu filemenu 菜单变量l MenuItem bzx “标准型”菜单
9、项目变量l Button b0 b9 数字键0到9l Button buttonSave 保存键按钮,保存计算过程l Button buttonCopy 复制键按钮,复制计算过程到剪贴板l Button buttonSqart 开方键按钮,进行开方运算l Button buttonMod “%”键按钮,进行模运算l Button buttonDot 小数点按钮l Button butonAdd buttonSub buttonMul buttonDiv “+” “-” “*” “/”键按钮,进行加减乘除运算l Button buttonSin buttonCos buttonAsin butt
10、onAcos buttonLog “sin”cos”asin”acos”按钮,进行三角函数运算2.3方法calc()是程序的主要方法,负责构造友好界面窗口,显示按钮、文本框,调用监听器进行按钮功能判断监听,实施四则运算和特殊函数,显示运算结果,保存运算结果到文件和剪贴板。2.4详细类图 Class CalcDecimalFormat df boolean clickabledouble memory int memorydouble vard, double answerdshort key short prekeyint w String midText textanswer Menu fi
11、lemenuDisplay d Shell s Menu m MenuItem bzx Button b0 b9Button buttonSave buttonCopybuttonSqart buttonMod buttonDot butonAdd buttonSub buttonMul buttonDivButton buttonSin buttonCos buttonAsin buttonAcos buttonLogCalc()Class main()calc ssclass calc 图2-1系统详细类图3编码实现3.1计算器详细代码实现package ZY04;import java.
12、text.DecimalFormat;import java.awt.Color;import java.io.*;import java.lang.NumberFormatException;import org.eclipse.swt.*;import org.eclipse.swt.events.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;public class calc DecimalFormat df = new Decima
13、lFormat(0.#); /设置数据输出精度(对于double型值) boolean clickable; /控制当前能否按键 double memoryd; /内存中存储的double型数字 int memoryi;/内存中存储的int型数字 double vard, answerd; /用来保存double型数据的中间值(vard)和最后结果(answerd) short key = -1, prekey = -1; /key用来保存当前进行何种运算,prekey用来保存前次进行何种运算 int w=0;/w=1,按钮前一动作为结果运算动作,比如“=”或是开方,w=0,按钮前一动作为数值
14、输出或是“-/+” String mid=;/中间运算过程记录值Display d;Shell s;calc()d=new Display();s=new Shell(d);s.setSize(220,380);s.setImage(new Image(d,c:123.jpg);s.setText(计算器);/* /设置菜单Menu m=new Menu(s,SWT.BAR);/创建查看菜单项final MenuItem file = new MenuItem(m,SWT.CASCADE);file.setText(查看(v);final Menu filemenu =new Menu(s,S
15、WT.DROP_DOWN);file.setMenu(filemenu);final MenuItem bzx=new MenuItem(filemenu,SWT.RADIO);bzx.setSelection(true);bzx.setText(标准型(T) Alt+1);final MenuItem kxx=new MenuItem(filemenu,SWT.RADIO);kxx.setText(科学型 (S) Alt+2);final MenuItem cxy=new MenuItem(filemenu,SWT.RADIO);cxy.setText(程序员 (P) Alt+3);fina
16、l MenuItem tjxx=new MenuItem(filemenu,SWT.RADIO);tjxx.setText(统计信息(A) Alt+4);final MenuItem separator1 =new MenuItem(filemenu,SWT.SEPARATOR);/分割线final MenuItem lsjl=new MenuItem(filemenu,SWT.CHECK);lsjl.setText(历史记录(Y) Ctrl+H);final MenuItem szfz=new MenuItem(filemenu,SWT.CHECK);szfz.setText(数字分组(I)
17、;final MenuItem separator2 =new MenuItem(filemenu,SWT.SEPARATOR);/分割线final MenuItem jb=new MenuItem(filemenu,SWT.RADIO);jb.setSelection(true);jb.setText(基本(B) Ctrl+F4);final MenuItem dwzh=new MenuItem(filemenu,SWT.RADIO);dwzh.setText(单位转换(U) Ctrl+U);final MenuItem rqjs=new MenuItem(filemenu,SWT.RADI
18、O);rqjs.setText(日期计算(D) Ctrl+E);/创建工作表子菜单final MenuItem gzb=new MenuItem(filemenu,SWT.CASCADE);gzb.setText(工作表(W);final Menu submenu=new Menu(s,SWT.DROP_DOWN);gzb.setMenu(submenu);final MenuItem dy=new MenuItem(submenu,SWT.RADIO);dy.setText(抵押(M);final MenuItem qczl=new MenuItem(submenu,SWT.RADIO);q
19、czl.setText(汽车租赁(V);final MenuItem yh1=new MenuItem(submenu,SWT.RADIO);yh1.setText(油耗(mpg)(F);final MenuItem yh2=new MenuItem(submenu,SWT.RADIO);yh2.setText(油耗(1/100km)(U);/创建编辑菜单final MenuItem edit = new MenuItem(m,SWT.CASCADE);edit.setText(编辑(E);final Menu editmenu =new Menu(s,SWT.DROP_DOWN);edit.
20、setMenu(editmenu);final MenuItem fz=new MenuItem(editmenu,SWT.PUSH);fz.setText(复制(C) Ctrl+C);final MenuItem zt=new MenuItem(editmenu,SWT.PUSH);zt.setText(粘贴 (V) Ctrl+V);final MenuItem separator3 =new MenuItem(filemenu,SWT.SEPARATOR);/分割线final MenuItem lsjl1=new MenuItem(editmenu,SWT.CASCADE);lsjl1.s
21、etText(历史记录(H);final Menu submenu1=new Menu(s,SWT.DROP_DOWN);lsjl1.setMenu(submenu1);final MenuItem fzlsjl=new MenuItem(submenu1,SWT.PUSH);fzlsjl.setText(复制历史记录(I);final MenuItem bj=new MenuItem(submenu1,SWT.PUSH);bj.setText(编辑(E) F2);final MenuItem qxbj=new MenuItem(submenu1,SWT.PUSH);qxbj.setText(
22、取消编辑(N) Esc);final MenuItem qc=new MenuItem(submenu1,SWT.PUSH);qc.setText(清楚(L) Ctrl+Shift+D);/创建帮助菜单final MenuItem help = new MenuItem(m,SWT.CASCADE);help.setText(帮助(H);/创建帮助菜单final Menu helpmenu =new Menu(s,SWT.DROP_DOWN);help.setMenu(helpmenu);final MenuItem ckbz=new MenuItem(helpmenu,SWT.PUSH);c
23、kbz.setText(查看帮助(V) F1);final MenuItem about=new MenuItem(helpmenu,SWT.PUSH);about.setText(关于计算机A); s.setMenuBar(m);/界面采用网格布局,5栏*GridLayout gl=new GridLayout();gl.numColumns=5;s.setLayout(gl);/创建计算窗口,设置样式 Final Texttext Answer=newText(s,SWT.SINGLE|SWT.BORDER|SWT.READ_ONLY | SWT.RIGHT); textAnswer.se
24、tText(); GridData gd=new GridData(GridData.FILL_BOTH); gd.horizontalSpan=5; textAnswer.setLayoutData(gd); /创建显示计算过程窗口,设置样式 final Text t2 = new Text(s,SWT.MULTI |SWT.BORDER|SWT.READ_ONLY | SWT.RIGHT | SWT.V_SCROLL | SWT.FocusOut); gd=new GridData(GridData.FILL_BOTH); gd.horizontalSpan=4; gd.verticalS
25、pan=3; t2.setLayoutData(gd); /创建复制、保存、清除按钮,对t2操作,由后方监听器实现 final Button buttonCopy=new Button(s,SWT.PUSH); buttonCopy.setText(复制); final Button buttonSave=new Button(s,SWT.PUSH); buttonSave.setText(保存); final Button buttonClear=new Button(s,SWT.PUSH); buttonClear.setText(清除); /创建三角函数按钮 final Button b
26、uttonLog=new Button(s,SWT.PUSH); buttonLog.setText(log); final Button buttonSin=new Button(s,SWT.PUSH); buttonSin.setText(sin); final Button buttonCos=new Button(s,SWT.PUSH); buttonCos.setText(cos); final Button buttonAsin=new Button(s,SWT.PUSH); buttonAsin.setText(asin); final Button buttonAcos=new
27、 Button(s,SWT.PUSH); buttonAcos.setText(acos); /按布局创建特殊键按钮和数字键按钮 final Button buttonBk=new Button(s,SWT.PUSH); buttonBk.setText(); final Button buttonCe=new Button(s,SWT.PUSH); buttonCe.setText(CE); final Button buttonC=new Button(s,SWT.PUSH); buttonC.setText(C); final Button buttonAddAndSub=new But
28、ton(s,SWT.PUSH); buttonAddAndSub.setText(); final Button buttonSqrt=new Button(s,SWT.PUSH); buttonSqrt.setText(); final Button b7=new Button(s,SWT.PUSH); b7.setText(7); final Button b8=new Button(s,SWT.PUSH); b8.setText(8); final Button b9=new Button(s,SWT.PUSH); b9.setText(9); final Button buttonDi
29、v=new Button(s,SWT.PUSH); buttonDiv.setText(/); final Button buttonMod=new Button(s,SWT.PUSH); buttonMod.setText(%); final Button b4=new Button(s,SWT.PUSH); b4.setText(4); final Button b5=new Button(s,SWT.PUSH); b5.setText(5); final Button b6=new Button(s,SWT.PUSH); b6.setText(6); final Button butto
30、nMul=new Button(s,SWT.PUSH); buttonMul.setText(*); final Button buttonDao=new Button(s,SWT.PUSH); buttonDao.setText(1/x); final Button b1=new Button(s,SWT.PUSH); b1.setText(1); final Button b2=new Button(s,SWT.PUSH); b2.setText(2); final Button b3=new Button(s,SWT.PUSH); b3.setText(3); final Button
31、buttonSub=new Button(s,SWT.PUSH); buttonSub.setText(-); final Button buttonEqual=new Button(s,SWT.PUSH); buttonEqual.setText(=); final Button b0=new Button(s,SWT.PUSH); b0.setText(0); final Button buttonDot=new Button(s,SWT.PUSH); buttonDot.setText(.); final Button buttonAdd=new Button(s,SWT.PUSH);
32、buttonAdd.setText(+);/对按钮设置样式并应用* gd=new GridData(GridData.FILL_HORIZONTAL); buttonCopy.setLayoutData(gd); gd=new GridData(GridData.FILL_HORIZONTAL); buttonSave.setLayoutData(gd); gd=new GridData(GridData.FILL_HORIZONTAL); buttonClear.setLayoutData(gd); gd=new GridData(GridData.FILL_HORIZONTAL); but
33、tonDot.setLayoutData(gd); gd=new GridData(GridData.FILL_HORIZONTAL); buttonAdd.setLayoutData(gd); /*/监听器部分 /为数字键按钮添加监听器 b1.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent e) if(w=1)/如果前一动作为运算,比如“=”或是开方,则运算窗口清零,监视值w置零,然后再输出数字 textAnswer.setText(); w=0; textAnswer
34、.setText(textAnswer.getText() + 1); mid=mid+1;/输出一个数,就加到计算记录过程值中(最后在计算过程显示出口输出) else/如果前一动作不为运算,直接输出数字,监视值w置零 textAnswer.setText(textAnswer.getText() + 1); mid=mid+1; w=0; ); . b0.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent e) if(w=1) textAnswer.setText(); w
35、=0; textAnswer.setText(textAnswer.getText() + 0); mid=mid+0; else textAnswer.setText(textAnswer.getText() + 0); mid=mid+0; w=0; ); /为“.”按钮添加监听器 buttonDot.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent e) /前一动作为结果运算,w=1,计算窗口直接置零,监视值置零 if(w=1) textAnswer.setText(
36、); w=0; else/按下.按钮时,判断当前文本框内字符串中含不含.,如果已含,则不允许再插入. boolean isDot = false; if (textAnswer.getText().length() = 0) isDot = true; for (int i = 0; i textAnswer.getText().length(); i+) if (. = textAnswer.getText().charAt(i) isDot = true; break; if (isDot = false) textAnswer.setText(textAnswer.getText() + .); mid=mid+.; );/为“+”“-”“*”“/”按钮添加监听器,mid中间过程添加“+”,switch语句为加减乘除通用代码