我的课程设计完成版1.docx
- 文档编号:20156211
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:20
- 大小:236.70KB
我的课程设计完成版1.docx
《我的课程设计完成版1.docx》由会员分享,可在线阅读,更多相关《我的课程设计完成版1.docx(20页珍藏版)》请在冰豆网上搜索。
我的课程设计完成版1
滁州学院计算机系
课程设计教学大纲
课程名称:
JAVA语言程序设计
开课教研室:
专业教研室
撰写人:
审核人:
修(制)订日期:
2007年8月8日
系(院)主管领导签章:
滁州学院计算机科学与技术系
前言:
通过上课学习了java程序设计的基本原理和模式,这次又以java语言为基本结合其图形应用界面来设计一个包括加、减、乘、除。
还有带括号以及带负号、小数运算的计算程序。
系统功能和使用说明:
一.硬件环境:
本系统适用于现应用各种类型的计算机,内存容量为128MB以上,不必配备的外部附加设备。
二.软件环境:
本系统的设计采用的是JAVA语言,应在JDK5.0或者其更高版软件环境下本使用。
三.系统流程图:
1.下图是本程序的运行后的界面,其标注是此组件在程序中的名字
2.系统流程图中各个模块的功能说明:
本程序一共包括:
构造方法A5i13w(),setup(),windowClosing(),actionPerformed(),appendchar(),countall(),counting(),Iscountnum()和一个windowcloser类。
(1).A5i13w()是构造方法,在程序创建其对象时就调用,初始化次程序的事件的监听机制。
(2).setup()是我定义的方法,是用来初始化程序的图形应用界面,由A5i13w()来调用。
(3).windowClosing()是用来响应用户的关闭功能。
(4).actionPerformed()是用来处理每个事件的响应的方法
(5).appendchar()方法的作用是在用户产生事件后向Textshow追加产生此事件的字符串
(6).countall()的意义是在用户按“=”号后,从最里层括号向最外层逐层把括号里的内容传递给counting()方法,并负责对括号本身是否符合数学语法要求进行检验。
(7).counting()方法的作用是首先对无括号的数学表达式有关的数学计算符号进行调整,并检验所有的数学符号,如发现错误的数学符号立即在Labelnow中显示出来。
(8).Iscountnum()方法的作用是把“+-×÷%.()”算术符号转化相应的数字,便于程序的流程控制。
3.此计算器的基本的计算过程说明:
当用户发出计算整个数学表达式的命令后,本计算器首先是对用户向Textshow(即文本域)输入的数学表达式经行括号索检。
如果有一层括号,则对括号的内容进行优先计算。
如果有多层括号,则按先计算里层括号后计算外层括号的原则进行计算。
如果没有发现括号,则只进行一次无括号计算即可。
现在是关于要计算的数学表达式,本计算器也能检验此即将计算的数学表达式是否符合数学语法规则。
如发现符合数学规则的表达式,则在Labelnow中提示用户,并且Labelnow的背景颜色将变成红色。
在计算的开始,计算的过程,计算的出错,计算的成功,我都设计好不同的背景颜色与之对应。
用户要注意Labelnow的提示信息。
在提示信息的对应要求,我认为次程序是不符合要求的。
有几条提示信息只是告诉用户你输入的表达式有问题,并不能很明确的告诉用户他的出错的地方。
这是我作为程序的开发者对错误的分类标准把握的不好造成的。
是的,这是我的作品的不足。
但是,我要说一句话,本程序的重点是计算出合法的数学表达式,而对非法的表达式过于重视是否有一点本末倒置呢?
四.程序执行的流程图
五.程序的调试出错情况:
我在程序的调试过程中最容易发生的错误就是:
就是我画红线的句子即是“Exceptioninthread"AWT-EventQueue-0"java.lang.NumberFormatException”。
用户输入的数学表达式在我设计的程序转化为数学计算形式是不可行的。
假如是正确的数学表达式,则我的程序在处理数字转化方面是有问题的,为了解决这个问题我花大时间去重写我的程序的核心代码。
终于,我找到了一种捷径——把无括号的数学表达式进行校正合理的转化为在数字和数字之间只有一个运算符。
虽然我就摆平这个问题,但是我为了解程序执行的具体的过程,在DOS中都有关于每一步的提示信息。
六.结论:
1.这次课程设计心得
是的,JAVA的功能是十分强大的。
借助其强大的平台。
我的程序不仅有不错(至少我这样认为)的图形界面,而且其程序本身的功能也得到很好的发挥。
次程序支持一般的四则运算(包括括号)。
更有状态栏,以便程序在执行过程中向用户反馈一些必要的信息。
2.总结
通过这次课程设计,我真的在实践中学到的不仅是课本知识的巩固和提高,而且还有在实践中使我着手解决不少程序设计的细节问题。
它们包括程序算法的设计和图形界面的构建的两大方面。
这些问题是我在从低级的程序员向高级程序设计师过度的过程必须要解决的。
而我个人认为我越早接触,越多接触,越快解决对我本人缩短次过程有重要的意义。
这些细节的问题只有在自己在程序的设计的过程才能体会啊!
我想啊!
这写小程序王导师,您定时定量的布置一些,多好啊!
好老师难求啊!
是的!
恭喜你考博考走!
再过半年你就要去读博了!
我真的好想好想你可以多传授一些JAVA方面有指导性的编程实例和编程思想!
在这样的一所大学后,是你给我带来了学术上的希望,到你走后我要给我自己带来希望
8月8日晚上10:
24
于家中
七.原程序
importjava.awt.*;
importjava.awt.event.*;
publicclassA5i13wextendsFrameimplementsActionListener
{
privateLabelLabelshow=newLabel("显示区:
");
privateLabelLabelsay=newLabel("状态:
",Label.CENTER);
privateLabelLabelnow=newLabel("欢迎使用我,艾全通为你带来的科学计算器",Label.LEFT);
privateLabelLabeltime=newLabel("暂且为空");
//为以后添加其他的辅助功能
privateTextFieldTextshow=newTextField(40);
privatePanelpan1=newPanel();
privatePanelpan2=newPanel();
privatePanelpan3=newPanel();
privateButtonbutton1=newButton("1");
privateButtonbutton2=newButton("2");
privateButtonbutton3=newButton("3");
privateButtonbutton4=newButton("4");
privateButtonbutton5=newButton("5");
privateButtonbutton6=newButton("6");
privateButtonbutton7=newButton("7");
privateButtonbutton8=newButton("8");
privateButtonbutton9=newButton("9");
privateButtonbutton10=newButton("0");
privateButtonbutton11=newButton("+");
privateButtonbutton12=newButton("-");
privateButtonbutton13=newButton("×");
privateButtonbutton14=newButton("÷");
privateButtonbutton15=newButton("%");
privateButtonbutton16=newButton("(");
privateButtonbutton17=newButton(")");
privateButtonbutton18=newButton("清零");
privateButtonbutton19=newButton(".");
privateButtonbutton20=newButton("=");
privateFontwordFont1=newFont("TimesRoman",Font.BOLD,13);
privateFontwordFont2=newFont("TimesRoman",Font.BOLD,30);
publicA5i13w()//构造方法来初始化本程序的变量
{
super("我的科学计算器");
setup();
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
button7.addActionListener(this);
button8.addActionListener(this);
button9.addActionListener(this);
button10.addActionListener(this);
button11.addActionListener(this);
button12.addActionListener(this);
button13.addActionListener(this);
button14.addActionListener(this);
button15.addActionListener(this);
button16.addActionListener(this);
button17.addActionListener(this);
button18.addActionListener(this);
button19.addActionListener(this);
button20.addActionListener(this);
addWindowListener(newwindowcloser());
setResizable(false);//设置此图形界面是不可以改变大小的
pack();
setVisible(true);
}
publicvoidsetup()//搭建次程序的图形应用界面
{
pan1.setLayout(newBorderLayout());
Labelshow.setFont(wordFont1);
pan1.add("West",Labelshow);
Textshow.setFont(wordFont1);
pan1.add("Center",Textshow);
pan2.setLayout(newGridLayout(4,5,5,6));
button1.setFont(wordFont2);pan2.add(button1);
button2.setFont(wordFont2);pan2.add(button2);
button3.setFont(wordFont2);pan2.add(button3);
button4.setFont(wordFont2);pan2.add(button4);
button5.setFont(wordFont2);pan2.add(button5);
button6.setFont(wordFont2);pan2.add(button6);
button7.setFont(wordFont2);pan2.add(button7);
button8.setFont(wordFont2);pan2.add(button8);
button9.setFont(wordFont2);pan2.add(button9);
button10.setFont(wordFont2);pan2.add(button10);
button11.setFont(wordFont2);pan2.add(button11);
button12.setFont(wordFont2);pan2.add(button12);
button13.setFont(wordFont2);pan2.add(button13);
button14.setFont(wordFont2);pan2.add(button14);
button15.setFont(wordFont2);pan2.add(button15);
button16.setFont(wordFont2);pan2.add(button16);
button17.setFont(wordFont2);pan2.add(button17);
button18.setFont(wordFont2);pan2.add(button18);
button19.setFont(wordFont2);pan2.add(button19);
button20.setFont(wordFont2);pan2.add(button20);
pan3.setLayout(newFlowLayout(FlowLayout.CENTER,2,2));
Labelsay.setFont(wordFont1);
Labelsay.setBackground(Color.blue);
pan3.add(Labelsay);
Labelnow.setFont(wordFont1);
Labelnow.setBackground(Color.gray);
pan3.add(Labelnow);
Labeltime.setBackground(Color.gray);
Labeltime.setFont(wordFont1);
pan3.add(Labeltime);
setLayout(newBorderLayout());
add("North",pan1);
add("Center",pan2);
add("South",pan3);
}
publicclasswindowcloserextendsWindowAdapter//通过构建类部类来使本程序可通过图形关闭
{
publicvoidwindowClosing(WindowEventw)
{System.exit(0);}
}
publicvoidactionPerformed(ActionEvente)//事件响应的处理
{
if(e.getSource()==button18)
{Textshow.setEditable(true);
Textshow.setText("");
Labelnow.setBackground(Color.green);
Labelnow.setText("请按标准的数学形式输入数字!
");}
else
{
if(e.getSource()==button20)
{
StringQU=newString(Textshow.getText());
System.out.println();
System.out.println();//在DOS中显示计算过程前,先空两行。
便于前后计算的区分!
System.out.println("即将计算的表达式是:
"+QU);
Labelnow.setText("计算程序正在运行");
appendchar(button20.getLabel());
appendchar(countall(QU));
Textshow.setEditable(false);//设置次文本域不可编辑
}
else
{appendchar(e.getActionCommand());}
}
}
publicvoidappendchar(Stringaa)//追加被激活按钮的对应事件名字
{
StringBuffertt=newStringBuffer(Textshow.getText().trim());//去除空格等无用字符
tt.append(aa);
Textshow.setText(newString(tt));
}
publicStringcountall(Stringtt)//从整体上,来以括号为单位分解来用户输入的数学表达式的方法
{
StringBuffermm=newStringBuffer(tt);
Booleanerrorstop=true;
inti,j,m=0,n=0;
for(;m!
=-1;)//开始对括号内容经行优先处理
{m=-1;n=-2;
for(i=0;i if(mm.charAt(i)=='('){m=i;System.out.println("在"+m+"处找到'('");} for(n=-1,j=m+1;j if(mm.charAt(j)==')'){n=j;System.out.println("在"+n+"处找到')'");break;} if(m<0&&n<0)break;//如没有找到括号,则跳出次部分 else { if(m*n<0||m>=n-1||m>0&&Iscountnum(mm.charAt(m-1))==0||n Iscountnum(mm.charAt(n+1))==0)//如找到: 半个括号,无内容的括号,前半个括号一个字符是数字或者是小数点,后一个括号的下一个字符是数字或者是小数点都提示一下错误 {Labelnow.setBackground(Color.red); Labelnow.setText("小括号语法错误,请纠正! "); System.out.println("发生小括号语法错误。 "); System.out.println(mm); mm.setLength(0);//强行清空字符变量的内容,使此方法此次计算的返回值为空 errorstop=false; break;} else {System.out.println("正在计算括号内的数据! "+mm.substring(m+1,n)); mm.replace(m,n+1,counting(mm.substring(m+1,n)));//把括号的部分用计算的结果来取代 System.out.println("经过括号计算后的字符串的值是: "+mm);} } } if(errorstop)//进行最后一级运算(即无括号计算) {System.out.println("正在进行无括号计算! "); mm.replace(0,mm.length(),counting(mm.substring(0,mm.length()))); System.out.println("最终的结果为: "+mm);} return(mm.toString()); } publicStringcounting(Stringqq)//处理无括号部分计算的核心方法 { StringBuffernn=newStringBuffer(qq); Doublenumgroup[]=newDouble[20]; numgroup[0]=Double.MIN_VALUE; StringBufferresult=newStringBuffer(Double.toString(numgroup[0])); Booleancancounting0=true; Booleancancounting1=true; Booleancancounting2=true; Booleancancounting3=true; Charactercountnum[]=newCharacter[20]; inti,j,t=0; if(Iscountnum(nn.charAt(0))>2&&Iscountnum(nn.charAt(0))<7||Iscountnum(nn.charAt(nn.length()-1))<7&&Iscountnum(nn.charAt(nn.length()-1))>0)//如此部分的第一个字符是小数点或是“×”、“÷”、“%”其中之一,此部分的最后一个字符不是以数字结尾都是非法数学表达式 {cancounting0=false; System.out.println("此部分的数据有问题"+nn+"不可以进行计算啊"); Labelnow.setBackground(Color.red); Labelnow.setText("请纠正数据后再按=键进行计算1");} if(cancounting0) { for(j=2;j {if(Iscountnum(nn.charAt(j-2))! =0&&Iscountnum(nn.charAt(j-1))! =0&&Iscountnum(nn.charAt(j))! =0) //如出现连续三个数学计算(包括小数点)是非法数学表达式 {cancounting1=false; System.out.println(nn); Labelnow.setBackground(Color.red); Labelnow.setText("请纠正数据运算符号后再按=键进行计算2");} } for(i=0,j=1;j { if(0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 完成