Java课程设计论文复杂计算器的设计_第1页
Java课程设计论文复杂计算器的设计_第2页
Java课程设计论文复杂计算器的设计_第3页
Java课程设计论文复杂计算器的设计_第4页
Java课程设计论文复杂计算器的设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录一 绪论 4二 设计思路 42.1 工作原理图 . .42.2 功能规划 .5三 具体实现 53.1 类设计与功能实现.53.2 界面 .5四 运行调试与分析讨论 94.1 运行屏幕截图与分析 .94.2 改进想法 .12五 设计体会与小结 12六 参考文献12七 附录 13一 题目内容及要求:我选择的是“复杂计算器的设计”,其目的主要是因为windows里有计算器,可以参照那个模板,并且对界面很熟悉,做起来更得心应手。其次,我对链接数据库还不太熟练,计算器可以由代码直接生成,更符合我的知识水平。设计一个图形界面(gui)的复杂计算器应用程序,其组件包括09,+、-、*、/、c=按钮,显示

2、屏文本行和菜单。其功能完成简单的加法、减法、乘法、除法算术运算,具有进制转换功能,能关闭窗口,点击按钮或键盘数字会在现实屏上输出结果。在计算器的界面上小数点、正负号、求倒数、退格和清零按钮要实现其功能练习使用布局管理器设计一个计算器的界面,并练习使用事件监听器处理数据的输入,并完成相关的计算。在我的计算器上实现了以上要求的基本功能,其界面参照系统的计算器。选中菜单项“查看”中的“标准型”菜单子项,可以实现其加减乘除基本运算,选中“科学型“可以实现进制之间的转换。在菜单项条中也设置了“编辑”,“帮助”等菜单项,点击相关按钮可实现相关其功能。二 设计思路 2.1工作原理图: 2.2功能规划: 在本

3、程序中主要有四个类,分别是 jisuanqi , computepad ,numberbutton,operationbutton,其主类是jisuanqi。主类jisuanqi主要实现二,八,十 ,十六之间进制转换,但不能实现加减乘除基本运算。computepad类,在此类中主要实现“查看”中的“标准型”,即实现十进制的加减乘除基本运算。在此类中记入numberbutton,operationbutton类,简化程序。在菜单条中设置了“编辑”,“查看”“帮助”等菜单项,“编辑”中可实现“复制”“粘帖”功能,在“查看”中可以选择“科学型”“标准型”在“帮助”中实现“关于计算器”“作者主页”点击

4、相关按钮可实现相关其功能。三 具体实现 3.1类设计及功能实现:(1) 主类jisuanqi,即是“查看”中的科学性,主要实现二,八,十,十六之间进制转换,但不能实现加减乘除基本运算。引入的包有:package my;import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; 3.2 界面如下:图3.1界面设计思路:创建容器cp,创建3个面板cp1,cp2,cp3并加入到cp中,三个面板按照边缘布局,cp.add(cp1,"north"); cp.

5、add(cp2,"center"); cp.add(cp3,"south");在cp1中放置文本框,在cp2中放置进制和c,ce,backspace按钮,剩余的放置在cp3中。功能设计思路:先获取点击或者输入的数字,再将其转换成十进制。代码如下:int jin=10;string hex=text.gettext(); int inthex=integer.parseint(hex,jin);/先把数变为10进制 text.settext(convert.dechex(inthex);再将十进制转换成相应进制。代码如下:例string strdecnum

6、 = integer.tostring(decnum); /10 for (int i = strdecnum.length(); i < 3; i+) strdecnum = "0" + strdecnum; / return strdecnum; return invert (strdecnum, 5); string strhexnum = "" /10 to 16 int currentnum = 0; while (decnum != 0) if (decnum > 15) currentnum = decnum % 16; dec

7、num /= 16; else currentnum = decnum; decnum = 0; 选中相应的进制后,键盘上数字会有相应的显示和隐藏,例如,在选中十进制后,a,b,c,d,e,f就会隐藏。代码如下: (部分) aa.setenabled(false); /a bb.setenabled(false); /b在菜单条中设置了“编辑”,“查看”“帮助”等菜单项,“编辑”中可实现“复制”“粘帖”功能,在“查看”中可以选择“科学型”“标准型”在“帮助”中实现“关于计算器”“作者主页”点击相关按钮可实现相关其功能。代码如下:(一部分)if(temp=copy) copycontent =

8、text.gettext(); if(temp=about) joptionpane.showmessagedialog(frame," java计算器 孙丹丹","关于计算器",joptionpane.information_message); ; if(temp=me) try process p = runtime.getruntime().exec("explorer "); catch(exception eeee) 实现关闭窗口函数,代码如下: class windowdestroyer extends windowada

9、pter /退出窗口动作 public void windowclosing(windowevent e) system.exit(0); 实现正负号的转换:if (isnumber = true) /如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉 if (s.charat(0) = '-') text.settext("");对窗体事件进行监听,在监听者的windowclosing方法中实现窗口的关闭处理。在处理窗体的“关闭”事件的监听者则采用继承windowadapter的方式。 class closew ex

10、tends windowadapter/关闭窗口功能public void windowclosing(windowevent e)system.exit(0);(2) computepad类,在此类中主要实现“查看”中的“标准型”,即实现十进制的加减乘除基本运算。引入的包:package my;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import my.jisuanqi.windowdestroyer;import java.util.linkedli

11、st;import java.text.numberformat;界面如下:图3.2界面设计思路:,一开始先把图形界面的布局考虑好。首先是计算机显示输入及输出的文本框:jtextfield field=new jtextfield(17);/定义最上面那个框,括号里的数字是框的长度界面采用边缘布局,panel.setlayout(new gridlayout(4,5);四行五列排放。设计比较简单。功能设计思路:次程序借助链表存储数据及符号。并运用了numberbutton类来定义按钮上的数字,operationbutton类来定义按钮上的符号,先获取按钮上的数字,代码如下:if(e.getso

12、urce() instanceof numberbutton)numberbutton b=(numberbutton)e.getsource(); if(链表.size()=0) int number=b.getnumber(); /获取按钮上的数字 链表.add(" "+number); resultshow.settext(" "+number); 是否按下等号=false;在链表中根据链表的长度和是否按下等号来判断是输出数字还是进行结算,代码如下: else if (e.getsource()=等号按钮)是否按下等号=true;if(链表.siz

13、e()=1|链表.size()=2) string num=(string)链表.getfirst();resultshow.settext(""+num);如果按下等号切链表长度为3,则取中间的为运算符号,代码如下:else if(链表.size()=3)string number1=(string)链表.getfirst();string number2=(string)链表.getlast();string 运算符号=(string)链表.get(1);进行加减乘除运算时判断符号类型,并返回计算后的数值。(部分代码)if(运算符号.equals("+&quo

14、t;)n=n1+n2;else if(运算符号.equals("/") n=n1/n2;resultshow.settext(""+n); 菜单条中的设置和方法也主类一致.在实现“科学型”与“标准型”之间的转换时应用的代码: 标准型.addactionlistener(/标准型和科学型进行切换new actionlistener()public void actionperformed(actionevent e)/处理事件new computerpad();/生成一个科学计算机的对象 就会出现科学计算器的窗口exit(); (3)numberbutto

15、n,operationbutton类主要是实现获取数字键上的数字和符号键上的符号,并返回按钮上的字符,用for循环直接可定义10个数字和4个运算符号,可以简化程序。for (int i=0;i<4;i+)operationbuttoni=new operationbutton(运算符号i);operationbuttoni.addactionlistener(this);四运行调试与分析讨论 4.1 运行屏幕截图与分析:1.运行主类后,进行运算,首先选中十进制,并从键盘上输入445后,如图: 图4.12.在将其转换成十六进制,选中十六进制后,如图显示: 图4.23.当选中十六进制后,键盘

16、上的数字全部显示。经计算后校对结果准确。在选中八进制后,如图显示: 图4.34.经计算后校对结果准确。在选中二进制后,如图显示: 图4.45.经计算后校对结果准确。在点击正负号后,如图显示: 图4.56.由于原来得到的是正数,点击正负号后,变成负数。既主类实现了进制的转换,并且计算无误,测试成功。点击“编辑”则出现“复制 ”“粘帖”功能均可实现。当点击“帮助”后出现“关于计算器”和“作者主页”,当点击“作者主页”后,联网可进入baidu主页。当点击“关于计算器”后,弹出对话框。如图: 图4.67.点击“查看”下的“标准型”就可以进入下一个十进制计算页面。如图:输入了“1.9”“+”“3”按下“

17、=”后: 图4.78.在按下“1/x”后,显示如图: 图4.89.当点击“退格”后,显示如图: 图4.9当按下“/”“0”后,则返回初值“0”。即测试成功。4.2 改进想法:俩个计算器布局方式相同,显示不太相同,“科学型”的比“标准型”的更好看一点,可以改一下。在“标准型”中只能实现+,-,×,/和1/x运算,可以再添加sin,cos,tan,cot等运算,增强实用型。五设计体会与小结大约一个星期的编写java程序,发现自己不懂的地方很多,在做这个课程设计之前,我可以独立编写一些小程序,还很有成就感,以为自己的java语言水平还可以。但是在完成这个设计的时候,我总是被一些小的,细的问

18、题挡住前进的步伐,让我总是为了解决一个小问题而花费很长的时间,甚至做到晚上二点多钟,最好猛然发现自己缺少一个定义或者还要查阅其他的书籍才能找出解决的办法。例如,我定义了一个链表,可是向里面添加东西的时候,总是出错,后来在上机的时候问老师,才知道链表没有初始化,这是自己的粗心造成的。我在做设计的过程中发现有很多东西,我都还不知道。在做进制转换时不知道函数怎么写,是我上网查到的,再经过修改查到我的程序中。其实在用语言来编程的时候,基础是一个不可缺少的知识,但是往往一些核心的高层次的东西更是不可缺少。 在这次编程中,更加深我对事件监听,各方法的实现功能,还有布局方式及常用的gui标准组件更深刻的认识

19、。同时,也巩固了数据结构的链表的应用。在经过这次课设使我知道在设计的过程中最好学习自己解决问题,无论是通过书籍还是网络,这样可以增强自己解决问题的能力,同时加强记忆。任意一次实践都是在检验自己学习的水平,也是强迫自己再提高编程水平。六参考文献 1丁振凡 .java语言实用教程m. 北京邮电大学出版社2006.9 2丁振凡 .java语言实用教程实验指导m. 北京邮电大学出版社. 2006.93严蔚敏.数据结构(c语言版).清华大学出版社.2008.34耿祥义.java课程设计.清华大学出版社.2004.15第 10 页 七、附录:源程序:(主类jisuanqi)package my; /把生成

20、的所有class文件保存到一个文件夹里,便于引用。import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class jisuanqi extends jframe implements actionlistener jframe frame; jbutton deng=new jbutton("="); /定义按钮 jbutton fu=new jbutton("+/-"); jbutton aa=new j

21、button("a"); jbutton bb=new jbutton("b"); jbutton cc=new jbutton("c"); jbutton dd=new jbutton("d"); jbutton ee=new jbutton("e"); jbutton ff=new jbutton("f"); textfield k1=new textfield(); objconversion convert = new objconversion(); jmenuit

22、em copy,paste,科学型,标准型,help,about,me; jradiobutton sixteen,ten,eight,two; jbutton backspace,ce,c,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9; container cp; /容器名为cp jtextfield text; /文本条 string copycontent="" boolean clickable=true,clear=true; /控制符号位 int all=0; double qian; string fuha

23、o; int jin=10,first=1; /默认选中十进制 public jisuanqi() /此类的构造函数 super("计算器"); /最上面的起名为计算器setsize(400,300); setlocation(250,200); text=new jtextfield(25); /文本框最多可输入25位数text.settext("0."); /默认文本框为0text.sethorizontalalignment(jtextfield.right);/从右到左 jpanel cp1=new jpanel(); /设置3个面板jpanel

24、 cp2=new jpanel(); jpanel cp3=new jpanel(); cp=getcontentpane(); cp.add(cp1,"north"); /界面布局cp.add(cp2,"center"); cp.add(cp3,"south"); cp1.setlayout(new gridlayout(1,6); cp2.setlayout(new gridlayout(2,4); cp3.setlayout(new gridlayout(6,6); sixteen=new jradiobutton("

25、十六进制"); sixteen.setvisible(true); ten=new jradiobutton("十进制",true); ten.setvisible(true); eight=new jradiobutton("八进制"); eight.setvisible(true); two=new jradiobutton("二进制"); two.setvisible(true); sixteen.addactionlistener(this); /事件监听者ten.addactionlistener(this); e

26、ight.addactionlistener(this); two.addactionlistener(this); buttongroup btg=new buttongroup(); btg.add(sixteen); btg.add(ten); btg.add(eight); btg.add(two); jtextfield t3=new jtextfield(25); /向各个面板中添加按钮cp1.add(text); text.seteditable(true); text.setbackground(new color(255, 255, 255); cp2.add(sixteen

27、); cp2.add(ten); cp2.add(eight); cp2.add(two); backspace=new jbutton("backspace"); backspace.setforeground(new color(255,0,0); backspace.addactionlistener(this); ce=new jbutton("ce"); ce.setforeground(new color(255,0,0); ce.addactionlistener(this); c=new jbutton("c"); c

28、.setforeground(new color(255,0,0); c.addactionlistener(this); k1.setvisible(false); cp2.add(k1); cp2.add(backspace); cp2.add(ce); cp2.add(c); num0=new jbutton("0"); num1=new jbutton("1"); num2=new jbutton("2"); num3=new jbutton("3"); num4=new jbutton("4&q

29、uot;); num5=new jbutton("5"); num6=new jbutton("6"); num7=new jbutton("7"); num8=new jbutton("8"); num9=new jbutton("9"); cp3.add(num7); num7.addactionlistener(this); /数字事件监听者,以获取按钮上的数字cp3.add(num8); num8.addactionlistener(this); cp3.add(num9); num9.

30、addactionlistener(this); cp3.add(num4); num4.addactionlistener(this); cp3.add(num5); num5.addactionlistener(this); cp3.add(num6); num6.addactionlistener(this); cp3.add(num1); num1.addactionlistener(this); cp3.add(num2); num2.addactionlistener(this); cp3.add(num3); num3.addactionlistener(this); cp3.a

31、dd(num0); num0.addactionlistener(this); cp3.add(fu); fu.addactionlistener(this); cp3.add(deng); deng.setforeground(new color(255,0,0); /符号事件监听者deng.addactionlistener(this); cp3.add(aa); aa.addactionlistener(this); cp3.add(bb); bb.addactionlistener(this); cp3.add(cc); cc.addactionlistener(this); cp3.

32、add(dd); dd.addactionlistener(this); cp3.add(ee); ee.addactionlistener(this); cp3.add(ff); ff.addactionlistener(this); aa.setvisible(false); bb.setvisible(false); cc.setvisible(false); dd.setvisible(false); ee.setvisible(false); ff.setvisible(false); jmenubar mainmenu = new jmenubar(); /菜单条setjmenub

33、ar(mainmenu); jmenu editmenu = new jmenu("编辑"); jmenu viewmenu = new jmenu("查看"); jmenu helpmenu = new jmenu("帮助"); mainmenu.add(editmenu); mainmenu.add(viewmenu); mainmenu.add(helpmenu); copy = new jmenuitem(" 复制"); paste = new jmenuitem(" 粘贴"); key

34、stroke copyks=keystroke.getkeystroke(keyevent.vk_c,event.ctrl_mask); copy.setaccelerator(copyks);/设置退出菜单选项加上快捷键 keystroke pasteks=keystroke.getkeystroke(keyevent.vk_v,event.ctrl_mask); paste.setaccelerator(pasteks);/设置退出菜单选项加上快捷键 editmenu.add(copy); editmenu.add(paste); copy.addactionlistener(this);

35、 paste.addactionlistener(this); 标准型=new jmenuitem("标准型");科学型 = new jmenuitem(" 科学型"); viewmenu.add(标准型); viewmenu.add(科学型); 标准型.addactionlistener(/标准型和科学型进行切换new actionlistener()public void actionperformed(actionevent e)/处理事件new computerpad();/生成一个科学计算机的对象 就会出现科学计算器的窗口exit();abou

36、t = new jmenuitem(" 关于计算器"); me = new jmenuitem(" 作者主页"); helpmenu.add(about); helpmenu.add(me); about.addactionlistener(this); me.addactionlistener(this); addwindowlistener(new windowdestroyer();/结束窗口 protected void exit() / todo auto-generated method stubpublic void actionperfo

37、rmed(actionevent e) /响应动作代码if(first=1) text.settext(""); first=0; /第一次把文本框0.清空 object temp = e.getsource(); sixteen.setvisible(true); ten.setvisible(true); eight.setvisible(true); two.setvisible(true); 科学型.settext(" 标准型"); 标准型.settext("科学型"); aa.setvisible(true); bb.set

38、visible(true); cc.setvisible(true); dd.setvisible(true); ee.setvisible(true); ff.setvisible(true); aa.setenabled(false); bb.setenabled(false); cc.setenabled(false); dd.setenabled(false); ee.setenabled(false); ff.setenabled(false); if(temp=copy) /点击“复制“后执行 copycontent = text.gettext(); if(temp=paste)

39、 /点击“粘帖”后执行 text.settext(text.gettext()+copycontent); if(temp=help) /打开系统帮助文件 要查资料 try string filepath = "c:/" runtime.getruntime().exec("cmd.exe /c "+filepath); catch(exception eeee) system.out.println("打开系统的计算器出错"); if(temp=about) joptionpane.showmessagedialog(frame,&

40、quot; java计算器 孙丹丹","关于计算器",joptionpane.information_message); ; if(temp=me) try process p = runtime.getruntime().exec("explorer "); catch(exception eeee) system.out.println("打开指定网页出错"); try if(temp=sixteen) /十六进制转换 string hex=text.gettext(); int inthex=integer.parse

41、int(hex,jin);/先把数变为10进制 text.settext(convert.dechex(inthex) ; jin=16; aa.setenabled(true); bb.setenabled(true); cc.setenabled(true); dd.setenabled(true); ee.setenabled(true); ff.setenabled(true); num2.setenabled(true); num3.setenabled(true); num4.setenabled(true); num5.setenabled(true); num6.setenab

42、led(true); num7.setenabled(true); num8.setenabled(true); num9.setenabled(true); if(temp=eight) /八进制转换 string oct =text.gettext(); int intoct=integer.parseint(oct,jin); text.settext(convert.decoct(intoct) ; jin=8; aa.setenabled(false); /不显示bb.setenabled(false); cc.setenabled(false); dd.setenabled(fal

43、se); ee.setenabled(false); ff.setenabled(false); num2.setenabled(true); num3.setenabled(true); num4.setenabled(true); num5.setenabled(true); num6.setenabled(true); num7.setenabled(true); num8.setenabled(false); num9.setenabled(false); if(temp=two) string bin=text.gettext(); int intbin=integer.parsei

44、nt(bin,jin); text.settext(convert.decbin(intbin); jin=2; aa.setenabled(false); bb.setenabled(false); cc.setenabled(false); dd.setenabled(false); ee.setenabled(false); ff.setenabled(false); num2.setenabled(false); num3.setenabled(false); num4.setenabled(false); num5.setenabled(false); num6.setenabled

45、(false); num7.setenabled(false); num8.setenabled(false); num9.setenabled(false); if(temp=ten) string dec=text.gettext(); int intdec=integer.parseint(dec,jin); text.settext(intdec+""); jin=10; aa.setenabled(false); bb.setenabled(false); cc.setenabled(false); dd.setenabled(false); ee.setenab

46、led(false); ff.setenabled(false); num2.setenabled(true); num3.setenabled(true); num4.setenabled(true); num5.setenabled(true); num6.setenabled(true); num7.setenabled(true); num8.setenabled(true); num9.setenabled(true); catch(exception ee) system.out.println("转换出错,可能你没有输入任何字符"); text.settext

47、("转换出错"); clear=false; if(temp=backspace) /退格 string s = text.gettext(); text.settext(""); for (int i = 0; i < s.length() - 1; i+) char a = s.charat(i); text.settext(text.gettext() + a); if (temp=ce) /还原0 text.settext("0."); clear=true; first=1; if (temp=c) text.sett

48、ext("0."); ; clear=true; first=1; if(temp=num0) if(clear=false)/判断是否点击了符号位 text.settext(""); text.settext(text.gettext()+"0"); if(temp=num1) if(clear=false) text.settext(""); text.settext(text.gettext()+"1"); clear=true;/第二次不在清空(前二句) if(temp=num2) /获

49、取数字 if(clear=false) text.settext(""); text.settext(text.gettext()+"2"); clear=true; if(temp=num3) if(clear=false) text.settext(""); text.settext(text.gettext()+"3"); clear=true; if(temp=num4) if(clear=false) text.settext(""); text.settext(text.gettex

50、t()+"4"); clear=true; if(temp=num5) if(clear=false) text.settext(""); text.settext(text.gettext()+"5"); clear=true; if(temp=num6) if(clear=false) text.settext(""); text.settext(text.gettext()+"6"); clear=true; if(temp=num7) if(clear=false) text.sette

51、xt(""); text.settext(text.gettext()+"7"); clear=true; if(temp=num8) if(clear=false) text.settext(""); text.settext(text.gettext()+"8"); clear=true; if(temp=num9) if(clear=false) text.settext(""); text.settext(text.gettext()+"9"); clear=true

52、; if(temp=aa) text.settext(text.gettext()+"a"); if(temp=bb) text.settext(text.gettext()+"b"); if(temp=cc) text.settext(text.gettext()+"c"); if(temp=dd) text.settext(text.gettext()+"d"); if(temp=ee) text.settext(text.gettext()+"e"); if(temp=ff) text.s

53、ettext(text.gettext()+"f"); try if(temp=deng) clear=false;/要清空前一次的数据 if (temp = fu) /此方法参考书中例子 boolean isnumber = true; string s = text.gettext(); for (int i = 0; i < s.length(); i+) if (! (s.charat(i) >= '0' && s.charat(i) <= '9' | s.charat(i) = '.'

54、; | s.charat(i) = '-') isnumber = false; break; if (isnumber = true) /如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉 if (s.charat(0) = '-') text.settext(""); for (int i = 1; i < s.length(); i+) char a = s.charat(i); text.settext(text.gettext() + a); /如果当前字符串第一个字符不是符号,则添加一个符号在首字母处 else text.settext

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论