《Java语言程序设计B》结课大作业电子版.docx
- 文档编号:17778208
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:17
- 大小:50.62KB
《Java语言程序设计B》结课大作业电子版.docx
《《Java语言程序设计B》结课大作业电子版.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计B》结课大作业电子版.docx(17页珍藏版)》请在冰点文库上搜索。
《Java语言程序设计B》结课大作业电子版
学号
《Java语言程序设计B》
结课大作业
学生姓名
专业、班级
11测绘工程、一班
指导教师
成绩
计算机与信息工程学院
2013年11月20日
结课大作业:
计算器的设计与实现
一、作业要求
1.学生完成作业前应该复习课程所学知识以及阅读和理解相应的课外阅读资料;
2.学生独自完成作业指定内容;
3.用统一的作业模板编制。
4.提交说明:
(1)电子版提交说明:
a.需要提交Winrar压缩包,文件名为“《Java语言程序设计B》结课大作业_学号_姓名”,如“《Java语言程序设计B》结课大作业_09290101_张三”。
b.压缩包内为一个“《Java语言程序设计B》结课大作业_学号_姓名”命
名的顶层文件夹,其下为两个文件夹,一个文件夹命名为“源程序”,另一个文件
夹命名为“结课大作业电子版”。
其下分别放置对应相应成果物。
(2)打印版提交说明:
a不可随意更改模板样式。
b字体:
中文为宋体,大小为10号字,英文为TimeNewRoman,大小为10号
字。
c行间距:
单倍行距。
(3)提交截止时间:
2013年12月8日课前。
三、题目内容
1.学生通过对所学内容各章知识点的理解、融会贯通,利用所学知识,完成对《计算器的设计与实现》这一题目。
所设计的计算器具体的功能至少要包含如下几点:
(1)计算机器能够完成加法、减法、乘法、除法的运算;
(2)计算器应该提供至少10个中间结果保存功能;
(3)计算器在非断电且处于非计算功能状态时,屏幕默认显示的是时间和日期,也即可以当做时钟使用。
四、完成过程
1.计算器界面
(1)编译完成后在命令提示行输入javaCalculator回车出现如下运行效果:
(2)也可以直接双击源程序文件夹里的Calculator.jar文件运行此界面。
2.功能简介
1.可执行普通加减乘除计算,可连续计算至少十次;
2.显示系统时间,每秒刷新一次,
(这里本想做成老师要求的样子,但书上没有相似的例题,上网查了很多例子都没有相似的,所以只好尽力做成现在这样,只能不间断显示系统时间,不能清除,可以一直当时钟使用。
)
3.
退格键,若已输入1569,按此键后,显示屏上显示156;
4.
正负号键,可以将已输入数据置反,如输入12,按此键变为-12;
3.程序代码
importjava.lang.*;
importjavax.swing.event.*;
importjava.text.DecimalFormat;
importjava.util.Date;
importjavax.swing.Timer;
importjava.text.SimpleDateFormat;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classCalculatorextendsJFrame
{
privateJPanelpanel1,panel2,panel3,panel4;//上中下左三个面板
privateJTextFieldtextField1;//显示屏
privateJTextFieldtextField2;//时间显示屏
privateJTextFieldstoreField;//存储屏
privateJButtonbuttons[];
privatefinalStringbuttonNames[]={"←","CE","C","+/-","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
privatebooleanclear=true;//判断是否要清空文本框
privatedoublesum=0;
privatedoublesecondNumber=0;
privatecharoperate='+';
privatebooleanstop=false;//当除数为零时,stop变成true
privatestaticdoublestore=0;//记忆的数字,用于"MC","MR","MS","M+"功能
publicCalculator()
{
super("计算器");
//实例化四个面板
panel1=newJPanel();
panel1.setLayout(newGridLayout(2,1,0,0));
panel3=newJPanel();
panel3.setLayout(newGridLayout(4,5,5,5));
panel4=newJPanel();
panel4.setLayout(newGridLayout(5,1,5,5));
//实例化显示屏并进行相应设置
textField1=newJTextField("0");
textField2=newJTextField();
textFiel1d.setHorizontalAlignment(JTextField.RIGHT);//在文本框右侧现实文字
textField2.setHorizontalAlignment(JTextField.RIGHT);
textField1.setEditable(false);//把textField设置成不可编辑的
textField2.setEditable(false);
panel1.add(textField1);
panel1.add(textField2);
//实例化存储屏并进行相应设置
storeField=newJTextField("");
storeField.setHorizontalAlignment(JTextField.CENTER);
storeField.setEditable(false);
//实例化所有按钮,设置按钮字体颜色并注册监听器
buttons=newJButton[buttonNames.length];
for(intcount=0;count { buttons[count]=newJButton(buttonNames[count]); buttons[count].setForeground(Color.blue); buttons[count].setMargin(newjava.awt.Insets(0,0,0,0));//将按钮按照按钮的大小全部显示,而不改变按钮大小 buttons[count].addActionListener(newbuttonListener()); } //添加面板二中的按钮并设置其字体颜色 for(intcount=0;count<=2;count++) { buttons[count].setForeground(Color.red); panel3.add(buttons[count]); } //添加面板三中的按钮并设置其字体颜色 for(intcount=3;count { panel3.add(buttons[count]); } buttons[7].setForeground(Color.red);//将按钮"/"设成红色 buttons[11].setForeground(Color.red);//将按钮"*"设成红色 buttons[15].setForeground(Color.red);//将按钮"-"设成红色 buttons[17].setForeground(Color.red);//将按钮"."设成红色 buttons[19].setForeground(Color.red);//将按钮"+"设成红色 //添加面板四中的按钮并设置其字体颜色 for(intcount=0;count<4;count++) { buttons[count].setForeground(Color.red);//将按钮的文本设成红色 panel4.add(buttons[count]); } //用绝对定位将四个面板添加到框架中 this.getContentPane().setLayout(null); panel1.setBounds(10,15,280,50); this.getContentPane().add(panel1); panel3.setBounds(65,70,225,145); this.getContentPane().add(panel3); panel4.setBounds(10,70,45,180); this.getContentPane().add(panel4); setSize(303,280); setResizable(false);//禁止调整框架的大小 setVisible(true); TimertimeAction=newTimer(1000,newActionListener()//显示时间的方法 { publicvoidactionPerformed(ActionEvente) { longtimemillis=System.currentTimeMillis(); SimpleDateFormatdf=new SimpleDateFormat("yyyy-MM-ddHH: mm: ss"); textField2.setText(df.format(newDate(timemillis))); } }); timeAction.start(); } //主方法 publicstaticvoidmain(Stringargs[]) { Calculatorcalculator=newCalculator(); calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //用内部类的方法构造监听器 privateclassbuttonListenerimplementsActionListener { publicvoidactionPerformed(ActionEvente) { switch(e.getActionCommand().charAt(0))//得到按钮上的文本德首字母,注意这里不能用e.getSource() { case'0': case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': case'9': { if(clear)//clear为ture,说明上一个操作是输入操作符 { textField1.setText("0"); clear=false; } if(textField1.getText().equals("0")) { textField1.setText(e.getActionCommand()); } else { textField1.setText(textField1.getText()+e.getActionCommand()); } break; } case'.': { if(clear)//clear为ture,说明上一个操作是输入操作符 { textField1.setText("0"); clear=false; } if(textField1.getText().indexOf('.')==-1)//原来没有小数点 { textField1.setText(textField1.getText()+'.'); } break; } case'+': case'-': case'*': case'/': case'=': { secondNumber=Double.parseDouble(textField1.getText()); if(! clear)//clear为false,说明上一个操作是输入数字 { switch(operate)//计算 { case'+': sum=sum+secondNumber; break; case'-': sum=sum-secondNumber; break; case'*': sum=sum*secondNumber; break; case'/': if(secondNumber! =0) { sum=sum/secondNumber; } else { textField1.setText("除数不能为零! "); stop=true; } break; case'=': sum=secondNumber; break; } } if(stop==false) { operate=e.getActionCommand().charAt(0);//用operate记录下此次点击的操作符,在下次计算时用 clear=true; intchange=(int)sum; if(change==sum) { textField1.setText(Integer.toString(change)); } else { textField1.setText(Double.toString(sum)); } } else { sum=0; clear=true; operate='+'; stop=false; } break; } case'': //点击了"+/-" { secondNumber=Double.parseDouble(textField1.getText()); intchange=(int)secondNumber; if(change==secondNumber) { textField1.setText(Integer.toString(0-change)); } else { textField1.setText(Double.toString(0-secondNumber)); } break; } case'C': //点击"C"或"CE"按钮 { if(e.getSource()==buttons[1])//点击按钮"CE" { textField1.setText("0"); } elseif(e.getSource()==buttons[2])//点击按钮"C" { textField1.setText("0"); sum=0; clear=true; operate='+'; stop=false; } break; } case"←": //点击"←"按钮 { if(textField1.getText().length()>1)//显示两个或以上数字 { Stringstr=textField1.getText().substring(0,textField1.getText().length()-1); textField1.setText(str); } else { textField1.setText("0"); } break; } }//end----switch(e.getActionCommand().charAt(0)) }//end----publicvoidactionPerformed(ActionEvente) }//end----privateclassbuttonListenerimplementsActionListener }//end----publicclassCalculatorextendsJframe 4.遇到的问题 (1)界面代码写完后编译过程没有报错,但运行时界面却出不来,命令窗口如下图: 原来是用Containercontainer=getContentPane(); container.setLayout(null); panel1.setBounds(10,30,280,40); container.add(panel1); …… container.setSize(400,300); container.setVisible(true); 的方式添加面板的,这样界面就会出不来,就算不用setBounds()的方式,而是改成container.add(panel1,BorderLayout.NORTH);这种方式也出不来。 后来经过翻书和不断尝试发现解决方式如下: 直接用setLayout(null); panel1.setBounds(10,30,280,40); add(panel1); …… setSize(400,300); setVisible(true);的方式添加面板,就可以出来。 (2)设置鼠标监听时,用switch()语句,一开始在括号里写e.getSource(),提示错误如下图: 查书后发现这里switch()里不能放这种类型的数据,只能放char,byte,short或int型的值。 通过查看源代码发现getSource()方法返回的是最初发生Event的对象,而这里要返回或者字符类型,应该用e.getActionCommand()方法,再用.charAt(0)方法得到其首字母。 (3)因为每次运行程序都要打开命令窗口输命令十分麻烦,所以我参考书上《发布应用程序》这一节内容生成Calculator.jar文件,在命令行输入jarcvfCalculator.jar*.class生成一个jar文件但双击后发现无法运行然后翻书上网后发现这个jar属于不可执行的jar文件。 要创建可执行的jar文件,需要修改MANIFEST.MF文件。 可执行的jar文件包和不可执行的jar文件包都包含MANIFEST。 关键在于可执行jar文件中的MANIFEST.MF中对Main-Class项作了设置。 MANIFEST.MF中Main-Class的书写格式为: Main-Class: 可执行主类全名(包含包名) Main-Class指定的类,必须是完整的、包含包路径的类名,它是一个入口类。 据此修改MANIFEST.MF文件如下: Manifest-Version: 1.0 Main-Class: Calculator Created-By: 1.7.0_15(OracleCorporation) 再在命令行输入如下命令: >jarcvfmhellojar.jarMANIFEST.MF*.class 再双击Calculator.jar可以运行,运行效果同上 五、经验总结与归纳 通过做这次结课大作业,发现自己在知识的掌握上不够扎实,经常会出现这种情况,程序写到一半的时候,突然有个地方不知道怎么写,或者编译时发生错误,不知道怎么改,自己虽然不是计算机专业以后也不打算做java,但是因为自己上课不用功下课也不看书才搞成这样真的很不应该。 刚开始做的时候感觉无从下手,就从GUI编程开始看,逐渐做出用户界面,从简单的开始一步步做
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java语言程序设计B Java 语言程序设计 结课大 作业 电子版