《Java课程设计--简单计算器.docx》由会员分享,可在线阅读,更多相关《Java课程设计--简单计算器.docx(16页珍藏版)》请在第壹文秘上搜索。
1、第1章课题概述11. 1课题的目的11.2课题的要求1I .2.1布局要求1II 2.2输入输出的要求1III 2.3报错条件与报错内容1第2章概要设计22. 1整个程序的模块结构及流程22. 2实现可显示窗口界面2第3章程序功能的实现33.1 整个程序的构成模块33.2 构成模块的介绍与分析33.2.1构造按键33.2.2设置按键监听器并完成按键的布局43.2.3事件响应的处理63.2.4运算算法的构造73.3程序的报错处理与分析93.3.1输入格式错误时的报错处理93.3.2当除数为O时的报错处理10第4章调试及发现问题的解决11第5章程序测试及分析12第6章总结14参考文献15第1章课题
2、概述本次java课程设计的题目是仿照Window系统中的“计算器”,利用Java的GUI实现一个简单的计算器。1.1 课题的目的仿照Window系统中的“计算器”,利用JaVa的GUI实现一个简单的计算器,并能实现两个数的简单运算,以及输入错误的报错,使其有一定的实用性1.2 课题的要求1.2.1布局要求(1)需有数字键(0-9)、运算键(+、-、*、/、=)、重置键以及输入输出框一起构成。(2)布局排列有序,输入输出框应在窗口最顶部。(3)需设置使程序停止运作的退出键。L2.2输入输出的要求(1)只能用计算器上的按键进行输入,对键盘输入进行限制。(2)输入的数字与符号要与运算结果一起输出。(
3、3)输出结果要准确无误。(4)若输入信息有误需及时报错。(5)单击“计算器”上的数字按钮(0-9)可以设置参与计算的运算数。(6)单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。(7)单击“计算器”上的“二”按钮显示计算结果。(8)按重置键需清空输入输出框。L2.3报错条件与报错内容(1)当算式中连续存在两个或两个以上的运算符号时(不包含等号),需跳出对话框“输入格式错误!”并重置输入框。(2)当除数为。时,需跳出对话框除数不能为0!并重置输入框。(3)当进行三个或三个以上数字同时运算的情况下,需跳出对话框输入格式错误!并重置输入框。第2章概要设计2.1 整个程序的模块结构及流
4、程根据课题要求,整个程序按分为数字键及加减乘除按键和显示屏。为更好地提供程序的人机交互能力,程序还应提供退出程序、重置等功能。照吊川利答案并场N式起饰”1分区”的两敏相以/分M算我以-分MW式2.2 实现可显示窗口界面由于用户需要在程序一次运行后能够获取按键(键盘按键除外)以及所的答案的信息,也就是说,这个运行结果要始终保留给用户,所以可以通过一个可视化的窗口把信息呈现给用户。这个可视化的窗口要求可以显示给用户,它应该相应的信息输出。第3章程序功能的实现3.1整个程序的构成模块本程序只存在一个类,但由四个模块构成分别为:构造按键、设置按键监听器并完成按键的布局、事件响应的处理的显示以及运算算法
5、的构造。图3-1整个程序各构成模块3.2构成模块的介绍与分析3.2.1构造按键booleanP=true;JTextFielddisplay=newJTetField(20);JButtonbutton_num=newJButtonll;3Buttonbutton_bol=newJBUttOn5;3Buttonbutton_fun=newJButtonl;for(inti=0;i10;i+)button_numi=newJButton(,+i);button_num10=newJButton(.);newJButton(,);newJButton(,);newJButton(H*);newJB
6、uttonC/);newJButton(=);newJBUttOn(“重置”);button_bol0=button_boll=button_bol2=button_bol3=button_bol4=button_fun0=本程序在构造按键的过程中先将按键分为三个种类,分别为数字键、运算符号键以及其他键,并设置了输入输出框的大小以及不同种类的按键的个数。紧接着通过一个for循环给数字键赋予相应的显示。然后设置符号键与其它键的按键表示O3.2.2设置按键监听器并完成按键的布局calculater()inti=0;for(i=0;ill;i+)button_numi.addActionListen
7、er(this);for(i=0;i5;i+)button_boli.addActionListener(this);button_fun0.addActionListener(this);用两个for循环完成了对buttonnumi以及buttonboli的监听器的设置(也就是对数字键和符号键的监听器的设置)。因button_funi只存在一个键(也就是重置键)所以直接对其进行监听,不需要用到for循环。JPanelpl=newJPanel();JPanelp2=newJPanel();构造Pl与p2两个容器,用以存放案件。FlowLayoutflow=newFlowLayout();flo
8、wSetAlignment(FIowLayout.LEFT);pl.setLayout(flow);pl.add(display);pl.add(button-fun0);将出入输出框(display)以及重置键(buttonfunO)存放入容器pl,pl的布局管理器类型为FIoWLayoUt型,右对齐,其布局结构如下:重置图3-2容器Pl的布局显示p2.SetLayout(newGridLayoUt(4,4);for(i=l;i4;i+)p2.add(button_numi);p2.add(button_bol0);for(i=4;i7;i+)p2.add(button_numi);p2.a
9、dd(button-bol1);for(i=7;i10;i+)p2.add(button_numi);p2.add(button_bol2);p2.add(button_num10);p2.add(button_num0);p2.add(button_bol4);p2.add(button_bol3);将数字键(buttonnumi)与运算符号键(button.boli)存放入容器p2,p2的布局管理器类型为GriCILayOUt型,4行*4歹J,其布局结构如下:123456-7890=/图2-3容器p2的布局显示add(pl,BorderLayout.ORH);add(p2,BorderLa
10、yout.CENTER);窗体布局使用BorderLayout布局,按图所示分别使pl在NORTH位置,p2在CENTER位置。重置123456-789禽0=/图2-3窗体布局的布局显示display.setEditable(false);SetTitIe(“计算器”);setBounds(100,100,350,220);SetVisible(true);setResizable(false);SetDefaultcioseOperation(JFname.EXIT_ON_CLOSE);对计算器的其他布局进行构造,具体为:(1)使输入输出框中的数字输入只能按键输入,使键盘输入无效化。(2)程
11、序的执行窗口上显示“计算器”。(3)确定执行窗口的大小以及在屏幕上出现的位置。(4)使执行窗口可见。(5)使执行窗口大小不可改变。(6)设置是结束程序运行的按键。图3-4简单计算器布局完成图3.2.3事件响应的处理publicvoidactIonPerformed(ActionEvente)Stringstr=;for(inti=0;ill;i+)if(e.getSource()=button_numi)str=display.getText()+button_numi.getActionCommand();display.setTet(str);for(inti=0;i4;i+)if(e.g
12、etSource()=button_boli)str=display.getText()+button_boli.getActionCommand();display.setTet(str);在首先在构造方法中为所有的JBUttOrI对象添加监听器,在actiOnPerformed(ActionEventC)方法中,首先有一个JBUttOn类型的变量用来获取事件源的引用,然后程序根据事件源的不同做出不同的响应。if(e.getSource()=button_bol4)getValue();当事件源为“二”按钮时,除了在display后添加字符“二”,还要调用自定义的方法getValue()得到
13、表达出曲值并将此值添加在display之后。elseif(e.getSource()=button_fun0)display.setText(,);当事件源为“重置”按钮时,Iable中的字符清空。3.2.4运算算法的构造publicvoidgetValue()Stringtext=display.getText();doubleresult=0;Strings=+,-,*7);将四个运算符号作为一个数组。Stringtmp=;intcount=0;for(inti=0;il)DOptionPane.shoiMessageDiaLog(thisi”输入格式错误!”);display.setTe
14、t();找出输入的算式中的运算符号并将它赋值于tmp0if(tmp.equals(,+)tmp=M:H;tet=tet,replace(,+j:elseif(tmp.equals(-)trnp=”;text=text.replace(*-,j,);)elseif(tmp.equals(,*)tmp=;tet=text.replace(*j);)elseif(tmp.equals()tmp=;tet=text.replace(/j,因CCliPSe中无法用“+”、“钎、“/”作为分割字符的标志故分别将其用“:”、“”、“,”、”取代。Stringstr=tet.split(tmp);以tmp为标志将算式进行分割,分割出的两数分别为str0(前者)和str1