JAVA课设模拟计算机报告含源代码Word文件下载.docx
《JAVA课设模拟计算机报告含源代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《JAVA课设模拟计算机报告含源代码Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
2.2.2编译软件
Eclipse
2.2图形界面设计
通过图形界面设计,掌握JFrame类、JPanel类、5种布局管理器、文本框、标签及按钮的使用方法。
2.3基本功能
包括加减乘除四则运算、倒数、平方根及清除结果等功能。
2.4特殊功能
通过按钮点击实现数据的复位(清零),回退,以及记忆加,记忆减,记忆功能。
第三章.系统总体设计
3.1系统界面结构图
图3.1
3.2详细设计
3.2.1主界面设计
显示框数字及操作按钮菜单栏
图3.2.1
3.2.2具体功能设计
主框架及界面的设置
this.setLayout(newBorderLayout(5,5));
this.add(createPN(),BorderLayout.NORTH);
this.add(createPW(),BorderLayout.WEST);
this.add(createPC(),BorderLayout.CENTER);
Fontfonts=newFont("
楷体"
Font.PLAIN,25);
super.setFont(fonts);
tfNumber.setFont(fonts);
tfNumber.setHorizontalAlignment(JTextField.RIGHT);
this.setSize(400,250);
主界面包括数字按钮,功能按钮,显示栏以及菜单栏,显示栏用JTextField()实现,整体布局使用边界布局,菜单栏使用JMenu()实现,主界面用将不同的面板添加到一个框架上的方法实现。
为所有按钮添加事件的监听
jbt.addActionListener(this);
sech.addActionListener(newActionListener())
about.addActionListener(newActionListener())
为所有的按钮添加事件的监听,并绑定功能与事件的触发,
四则运算算法的实现
d1=Double.parseDouble(tfNumber.getText());
switch(k1){
case0:
k1=-1;
d2+=Double.parseDouble(tfNumber.getText());
tfNumber.setText(Double.toString(d2));
break;
case1:
d2-=Double.parseDouble(tfNumber.getText());
case2:
d2*=Double.parseDouble(tfNumber.getText());
case3:
if(tfNumber.getText().equals("
0"
)){
tfNumber.setText("
除数不能为零"
);
number=false;
}else{
k1=-1;
d2/=Double.parseDouble(tfNumber.getText());
}
第四章.系统调试
4.1系统功能界面
4.2课设过程中遇到的问题及解决方法
4.2.1记忆功能的实现
一般的计算器都具有记忆功能,为了实现计算器的记忆功能,设置了一个双精度型浮点数用来寄存所记忆的数字,从而实现了计算器的记忆功能。
4.2.2小数点问题的解决
在计算器中小数点只能输入一次,重复按小数点只显示一个小数点,只需设置一个标志位,便可以解决小数点的所有问题。
case'
.'
:
tcnt=tfNumber.getText();
booleang=false;
//对计算栏中的数据进行检验
//如果其中有小数点则用户再次单机按钮不添加小数点
for(inti=0;
i<
tcnt.length();
i++){
if(tcnt.charAt(i)=='
){
g=true;
//数据中已有小数点
if(g==true){
if(g==false){
tfNumber.setText(tcnt+"
."
第五章.收获与感想
这次Java课设是自己完全用心做的一次,由于知道自己能力水平,所以在选题的时候,选了这个比较简单的模拟计算器,题目虽然简单,但自己却是用心做了,而且在做的过程也学会了很多东西,从开始界面的布局,到最后附加功能的添加,事件的绑定,以及一些菜单栏的细节信息的添加,都是自己认证思考然后设计,有时候总做不出自己想要的界面,然后又去查相关界面布局等方面的知识,通过自己查到的以及参考其他程序相关的代码,终于写出了让自己满意的界面,但是最后不在异常的处理上自己还是有考虑不到的地方,有些比较明显的异常,并没有捕获并且处理,说明自己在写程序方面还是有考虑不周全,以后要多多注意这方面的问题,通过这次课设,自己对eclipse这个编译平台的了解也得到巩固,深刻体会到理论与实际相结合的重要性,也使自己明白只有不断的去尝试编写更多的程序,才能成为一名优秀的程序员,Java语言是所有高级语言中最受欢迎的语言之一,随着以后移动设备的发展,已经安卓系统在移动设备中所占用的份额,Java语言也将成为越来越重要的语言,因此,作为一名准程序员,熟悉以及精通Java语言的是基本技能之一,但是Java编程思想博大精深,自己还有很漫长的学习过程要经历,只有不断地尝试努力,才能成为一名优秀的程序员。
第六章.关键代码附录
请参考0909120716-马俊-源代码.docx
【参考文献】
《Java语言程序设计》……………………郭克华主编,清华大学出版社
《Java语言程序设计课程时间》……………………陈明主编,清华大学出版社
《Java程序设计实验指导与习题测试》……………………余青松主编,清华大学出版社
《Java编程思想》……………………埃克尔主编,机械工业出版社
附录:
packagecalc;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.lang.Math;
publicclassCalcextendsJFrameimplementsActionListener{
privateJMenuBarmb=newJMenuBar();
privateJMenuhelp=newJMenu("
帮助(H)"
privateJMenuauthor=newJMenu("
查看(S)"
privateJMenuItemsech=newJMenuItem("
查看帮助"
privateJMenuItemabout=newJMenuItem("
关于计算器"
privateJMenuItemauth=newJMenuItem("
关于作者"
privateImageimg;
privatedoubled0=0.0,d1=0.0,d2=0.0;
privateStringtcnt;
//用来存储计算栏中的内容
booleannumber=false;
//用来标记用户是否是数字
shortk1=-1;
//k1用来标示用户所按下的计算按钮即加减乘除,k1为0表示+,k1为1表示-,k1为2表示*,k1为3表示/
//k2取值-1~5,k2为-1,表示第一次按下=按钮,为5说明不是第一次按下=按钮
//k2为0,1,2,3分别代表+,-,*,/
shortk2=-1;
JTextFieldtfNumber=newJTextField(15);
//文本输入框
publicJPanelcreatePN(){
JPanelpn=newJPanel();
pn.setLayout(newBorderLayout(5,5));
pn.add(tfNumber,BorderLayout.CENTER);
returnpn;
}
//最左边的一栏
publicJPanelcreatePW(){
JPanelpw=newJPanel();
pw.setLayout(newGridLayout(5,1,5,5));
JButton[]jbts=newJButton[5];
String[]labels=newString[]{"
MC"
"
MR"
MS"
M+"
M-"
};
for(inti=0;
i<
jbts.length;
i++){
JButtonjbt=newJButton(labels[i]);
jbt.setForeground(Color.red);
pw.add(jbt);
jbt.addActionListener(this);
}
returnpw;
publicJPanelcreatePC(){
JPanelpc=newJPanel();
pc.setLayout(newBorderLayout(5,5));
pc.add(createPCN(),BorderLayout.NORTH);
pc.add(createPCC(),BorderLayout.SOUTH);
returnpc;
publicJPanelcreatePCN(){
JPanelpcn=newJPanel();
pcn.setLayout(newGridLayout(1,3,5,5));
JButton[]jbts=newJButton[3];
Backspace"
CE"
C"
pcn.add(jbt);
returnpcn;
publicJPanelcreatePCC(){
JPanelpcc=newJPanel();
pcc.setLayout(newGridLayout(4,5,5,5));
JButton[]jbts=newJButton[20];
7"
8"
9"
/"
sqrt"
4"
5"
"
6"
*"
%"
1"
2"
3"
-"
1/x"
+/-"
+"
="
if(labels[i].endsWith("
)||labels[i].endsWith("
)
||labels[i].endsWith("
jbt.setForeground(Color.red);
}else{
jbt.setForeground(Color.BLUE);
}
pcc.add(jbt);
returnpcc;
publicvoidactionPerformed(ActionEventae){
Strings;
s=ae.getActionCommand();
/*MS表示存储显示栏中的数字到d1
*MR表示在显示栏中显示存储的数字
*MC表示清除存储的数字
*M+表示将显示栏中的数字加到存储的数字上
*M-表示存储的数字减去显示栏中的数字
*/
if(s.equals("
)&
&
number){
d0=0.0;
d0=Double.parseDouble(tfNumber.getText());
tfNumber.setText(Double.toString(d0));
tfNumber.setText(Double.toString(d0+Double.parseDouble(tfNumber.getText())));
tfNumber.setText(Double.toString(d0-Double.parseDouble(tfNumber.getText())));
tcnt=tfNumber.getText();
tfNumber.setText("
"
//先将计算栏里的字符清空,再添加出最后一个字符的字符串
for(inti=0;
tcnt.length()-1;
charc=tcnt.charAt(i);
tfNumber.setText(tfNumber.getText()+c);
//清空计算栏
number=false;
d2=0.0;
d1=0.0;
if(tcnt.charAt(0)=='
-'
){
tfNumber.setText("
负数不能被开放"
number=false;
tfNumber.setText(Double.toString(Math.sqrt(Double
.parseDouble(tcnt))));
//点击1/x求倒数按钮&
求倒数分母不能为0
if(tcnt.equals("
求倒数分母不能为零"
tfNumber.setText(Double.toString(1/Double.parseDouble(tcnt)));
//取余数运算
if(d2==0){
tcnt=tfNumber.getText();
tfNumber.setText(tcnt);
booleang=false;
for(inti=0;
tfNumber.getText().length();
if(tfNumber.getText().charAt(i)=='
g=true;
break;
}
//double直接除100
if(g==true){
doubledtemp=Double.parseDouble(tfNumber.getText());
dtemp=dtemp/100.0;
tfNumber.setText(Double.toString(dtemp));
}else{
if(Integer.parseInt(tfNumber.getText())%100==0){
intitemp=Integer.parseInt(tfNumber.getText());
itemp/=100;
tfNumber.setText(Integer.toString(itemp));
}else{
doubledtemp=Double.parseDouble(tfNumber
.getText());
dtemp=dtemp/100.0;
tfNumber.setText(Double.toString(dtemp));
}
}
}}
//对正负数的处理
if(s.equals("
if(tcnt.charAt(0)=='
tfNumber.setText("
for(inti=1;
tcnt.length();
tfNumber.setText(tfNumber.getText()+tcnt.charAt(i));
}else{
+tcnt);
//按下+号
switch(k2){
case0:
d2+=Double.parseDouble(tfNumber.getText());
break;
case1:
case2:
case3:
if(tfNumber.getText().equals("
tfNumber.setText("
number=false;
k1=-1;
d2/=d1;
tfNumber.setText(Double.toString(d2));
default:
d2=Double.parseDouble(tfNumber.getText());
k2=k1=0;
//按下减号
if(s.equals("
)){
switch(k2){