java课程设计报告书模版.docx
《java课程设计报告书模版.docx》由会员分享,可在线阅读,更多相关《java课程设计报告书模版.docx(18页珍藏版)》请在冰点文库上搜索。
java课程设计报告书模版
课程设计(论文)任务书
学 院 专 业 班
一、课程设计(论文)题目
二、课程设计(论文)工作自09年6月22日起至09年6月26日止。
三、课程设计(论文)地点:
软件工程实训中心
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生巩固和提高Java编程技术
(2)培养学生掌握程序设计的基本思路和方法;
(3)加强学生研发、调试程序的能力;
(4)培养学生分析、解决问题的能力;
(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)任务:
在Applet画面中实现y=a*x*x+b*x+c函数曲线的绘制
(1)通过Applet参数传递a,b,c值;
(2)通过Applet参数控制曲线的粗细;
(3)曲线的颜色通过颜色对话框选取(通过一个颜色按钮控制)
(4)绘制一个小人沿曲线轨迹运动,到终点由头重新开始。
3)课程设计论文编写要求
(1)课程设计任务及要求
(2)需求分析
(3)设计思路--工作原理、功能规划
(4)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。
(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。
(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。
(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)
(7)报告按规定排版打印,要求装订平整,否则要求返工;
(8)课设报告的装订顺序如下:
封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)
(9)严禁抄袭,如有发现,按不及格处理。
4)答辩与评分标准:
(1)考勤:
10分;
(2)程序检查:
30分;
(3)答辩回答问题:
20分
(3)课程设计报告:
40分;
5)参考文献:
(1)丁振凡.《Java语言实用教程》北京邮电大学出版社
(2)耿祥义.《Java2实用教程》清华大学出版社
6)课程设计进度安排
内容天数 地点
构思及收集资料7 图书馆
编码与调试5 实验室
撰写论文3 图书馆、实验室
学生签名:
年月日
课程设计(论文)评审意见
(1)考勤(10分):
优()、良()、中()、一般()、差();
(2)程序检查(30分):
优( )、良( )、中( )、一般( )、差( );
(3)答辩回答问题(20分):
优( )、良( )、中( )、一般( )、差( );
(4)设计报告(40分):
优( )、良( )、中( )、一般( )、差( );
评阅人:
职称:
讲师
年月日
目 录
一、课设任务及要求1
二、需求分析1
三、设计思路1
四、详细设计2
五、运行调试与分析讨论8
六、设计体会与小结14
七、参考文献14
一、课设任务及要求
课程任务:
在Applet画面中实现y=a*x2+b*x+c函数曲线的绘制
设计要求:
1、通过Applet参数传递a,b,c值;
2、通过Applet参数控制曲线的粗细;
3、曲线的颜色通过颜色对话框选取(通过一个颜色按钮控制)。
4、绘制一个小人沿曲线轨迹运动,到终点由头重新开始。
二、需求分析
利用Java2D图形绘制,在Applet画面中实现一个二维图形,其中绘制二次函数(y=a*x*x+b*y+c)曲线,通过Applet参数来传递a,b,c的值,使得能够绘制任意二次函数曲线,并通过另一个Applet参数来控制二次函数曲线的线条粗细;建立一个颜色选择对话框来选择曲线的绘制颜色;在二次函数曲线上要实现以一个小人物,并能沿着曲线循环运动。
该实验考察的知识点是任何绘制图形以及用什么方法来控制图形的运动,通过建立一事件监听来实现人机交互。
三、设计思路
工作原理及功能规划:
我选择的这个课设题目,说实话,前面三部分思路非常清晰,但最后一部分思路稍稍有点难度。
正因如此,让我感觉富有挑战性。
下面我就介绍一下我的具体思路。
起先就是创建坐标的问题,先设置坐标原点(offx,offy),以原点为中心来绘制坐标轴,通过在paint()函数建立一个Graphics2D类对象g2d,再由g2d.draw()来绘制直线就很快实现了坐标轴。
其次是绘制曲线,曲线绘制是要通过applet参数来传递a,b,c及thick的值,这就要运用到getParameter()来获取HTML中的传递的各参数。
之后就利用多边形描绘曲线,简单,创建一个GeneralPath对象:
GeneralPathpolly=newGeneralPath(),再利用moveTo()和lineTo()来实现曲线。
有一点需得提出,绘制曲线时,我将曲线的横坐标值扩大了5倍,便于图形观察。
第三步就是颜色选择对话框,这个好办,创建一个下拉列表(Choice)将所有选项折叠在一起,Choicecolor=newChoice(),再对color设置一个监听者,color.addItemListener(this)。
而颜色的添加,是通过两个数组des[]、c[],数组des[]中存放颜色名称,放入到下拉列表中,数组c[]中存放对应的颜色,在事件监听时,将到得颜色选择赋给drawColor来改变曲线的颜色。
第四步就得实现一个小人物在曲线上的运动了。
先得绘制一个小人物,通过建立图形缓冲区createImage(width,height),再将曲线坐标参数传递给drawImage(),将图像缓存区的内容绘制到Applet面板上的。
之后呢是实现其移动,就是将曲线的各个点的坐标值参数传递给小人物图像。
四、详细设计
(1)数据分析:
1.变量a,b,c,thick是数值型,都为私有变量,通过Applet参数传递的。
2.变量x0,y0是数值型,曲线的顶点坐标,用于计算和控制人物图像的定位。
3.变量q,k同样是数值型,用来控制人物图像在曲线上的循环运动。
4.des[]字符串数组,其元素代表颜色的选择,通过Color类定义了一个color[]颜色数组,与des[]对应来控制曲线颜色变化。
5.原点坐标offx,offy数值型,通过改点来绘制坐标轴和定位二次曲线。
(2)算法思路:
1.基本算法:
for循环:
ⅰ.for(inti=0;iⅱ.for(;x<=50;x++){……}计算曲线上各点的坐标值,再通过直线连接各点绘制曲线。
ⅲ.for(inti=0;i2.计算几何算法:
由坐标原点(offx,offy)出发,通过g2d.draw(newLine2D.Float(……)计算绘制出坐标轴。
利用多边形描绘曲线,通过计算a*x*x+b*x+c,得到曲线上各点的坐标,在由moveTo()和lineTo()来连接各点。
同时通过计算得到人物图像在曲线上移动的坐标,将坐标值传递给drawImage().
(3)类设计:
classConic{
init();//用来完成对applet实例的初始化工作
paint();//用来在applet的界面中绘制文字、图形和其他界面元素
repaint();//用来对整个applet区域重画
Thread.sleep()//使用Thread类中的sleep()方法使小人物移动时睡眠一段时间后继续移动
itemStateChanged(ItemEvente);//对事件源进行监听,实现事件的选择
}
(4)功能实现:
①流程图:
②代码及注释:
importjava.awt.*;
importjava.awt.geom.*;
importjava.applet.*;
importjava.awt.event.*;
publicclassConicextendsAppletimplementsItemListener{
privateinta;
privateintb;
privateintc;
privateintthick;
intx0,y0;//曲线的顶点
Imageimg;
intq=x0-20;//小人物起点横坐标
intk=0;//控制小人物循环移动
ColordrawColor=Color.red;//曲线初始颜色设置
Stringdes[]={"红色","蓝色","绿色","黑色","灰色"};
Colorcolor2[]={Color.red,Color.blue,Color.green,
Color.black,Color.gray};
publicvoidinit(){
a=Integer.parseInt(getParameter("a"));//从applet参数中获取a的值
b=Integer.parseInt(getParameter("b"));//从applet参数中获取b的值
c=Integer.parseInt(getParameter("c"));//从applet参数中获取c的值
x0=-b/(2*a);//曲线顶点横坐标
thick=Integer.parseInt(getParameter("thick"));//从applet参数中获取thick的值
Choicecolor=newChoice();//创建下拉列表
for(inti=0;icolor.add(des[i]);//将颜色加入列表
}
color.addItemListener(this);//对下拉列表设置监听
this.add("north",color);//添加下拉列表及其位置
/*绘制小人物*/
img=createImage(20,30);//画板的长宽
Graphicsgimg=img.getGraphics();
gimg.setColor(Color.red);
gimg.drawOval(5,0,10,10);
gimg.drawLine(10,10,0,20);
gimg.drawLine(10,10,20,20);
gimg.drawLine(0,20,20,20);
gimg.drawLine(5,15,0,10);
gimg.drawLine(15,15,20,10);
gimg.drawLine(7,20,7,30);
gimg.drawLine(13,20,13,30);
}
publicvoidpaint(Graphicsg){
Graphics2Dg2d=(Graphics2D)g;
intoffx=200;//坐标轴原点的x
intoffy=250;//坐标轴原点的y
g2d.setPaint(Color.blue);//设置坐标轴的颜色
g2d.setStroke(newBasicStroke
(2));//坐标轴的线条宽度
/*绘制坐标轴*/
g2d.draw(newLine2D.Float(offx+0,offy-100,offx+0,offy+100));
g2d.draw(newLine2D.Float(offx-5,offy-97,offx+0,offy-100));
g2d.draw(newLine2D.Float(offx+5,offy-97,offx+0,offy-100));
g2d.draw(newLine2D.Float(offx-100,offy+0,offx+200,offy+0));
g2d.draw(newLine2D.Float(offx+195,offy-5,offx+200,offy+0));
g2d.draw(newLine2D.Float(offx+196,offy+5,offx+200,offy+0));
g2d.drawString("x",offx+205,offy);
g2d.drawString("y",offx,offy-106);
/*利用多边形描绘曲线*/
GeneralPathpolly=newGeneralPath();//创建一个GeneralPath对象
intx=-50;
floatx1=5*x;//将x坐标值放大5倍
floaty1=(float)(a*x*x+b*x+c);
polly.moveTo(offx+x1,offy-y1);//第一个点加入到路径
for(;x<=50;x++){
floatx2=5*x;
floaty2=(float)(a*x*x+b*x+c);
polly.lineTo(offx+x2,offy-y2);//将指定点加入路径,当前点与指定点连接
}
g2d.setPaint(drawColor);//绘制曲线的初始颜色
g2d.setStroke(newBasicStroke(thick));//曲线的宽度
g2d.draw(polly);//绘制曲线
intw=a*q*q+b*q+c;
g.drawImage(img,offx+5*q-10,offy-w-15,this);//绘制小人物,并定位人物在曲线上的位置
q++;
k++;
try{
Thread.sleep(100);
}catch(InterruptedExceptione){}
repaint();
if(k%40==0)q=x0-20;//控制小人物循环移动的范围
}
publicvoiditemStateChanged(ItemEvente){//事件监听
Choicetemp=(Choice)e.getItemSelectable();
for(inti=0;iif(temp.getSelectedIndex()==i){
drawColor=color2[i];
repaint();
break;
}
}
}
}
(5)界面:
五、运行调试与分析讨论
(1)以下为运行调试后的结果(部分截图):
①通过applet参数传递a,b,c及thick的值,thick为曲线的粗细。
可以发现曲线颜色变化了且小人物在曲线上运动:
红色曲线
颜色选择
绿色曲线
②改变参数c的值后的结果,可以发现曲线下移了:
③改变参数a,b,c及thick的值后的结果,可以发现曲线变化了且粗细变化了:
④改变参数thick的值后的结果,可以发现曲线变粗了:
⑤改变各参数的值,曲线变化,小人物同时在运动:
(2)分析运行结果
曲线是由参数a,b,c来控制,变量thick来控制曲线的粗细,其中这四个变量是通过applet来传递参数的,改变这四个变量的值,可以发现曲线也相应的改变了。
小人物是通过双缓冲区绘图,将曲线各点的参数值传递给它实现的,同样发现它一直在不停地运动。
还有改变曲线的颜色是通过建立一个下拉列表实现,下拉列表中存放了5中颜色,对下拉列表建立一个事件监听,通过鼠标点击来改变曲线颜色。
可见,其运行结果达到了预先的期望和要求。
(3)有何改进想法
像这个程序运行时看上去有些单调,虽然小人物运动的实现有些难度,但程序有些地方可以是改进的。
其中曲线坐标参数传递给小人物的方法可以改进,这里的方法稍微繁琐了一点,当然其考察到个人数学的能力;其次我感觉参数a,b,c及thick的控制应该在程序查看器中实现,通过重新载入来改变曲线图形,但这一知识点我还未掌握,由于课本上这一知识点涉及不深,未能成功实现该动作;再次可以设置上下左右四个Button来控制坐标轴的移动或通过鼠标来移动,这是一点创新功能,由于时间问题,在这里就不去实现了。
六、设计体会与小结
通过这次的Java课程设计,让我系统的复习了一下本学期所学的知识,不仅巩固了那些已掌握了的知识点,而且了解到许多还未掌握的方面。
尽管感觉自己学得还不错,但在这次的课设中还是遇到了许多问题,像这个小人物在双曲线上的移动问题,起先就让我感到头痛,研究了一下午,到网上又找不到相关的解决方法,但第二天上午上机时看到书上有一个被我遗漏的知识点:
双缓冲区绘图。
突然让我豁然开朗,不久就把这个问题解决了,效果还挺好的。
这次的课程设计给我的帮助非常大,尽管我做的题目没有涉及到好多的知识点,但通过考察,让我对Java产生的兴趣更浓厚,特别是按时完成任务时,比平时更有成就感。
我在这次的课程暴露的错误,让我意识到我还有许多的知识要去掌握,特别是教材之外的许多东西还不是很了解,另外是对某些知识点的了解还不够深,看来要多看点有关Java的课外书籍,及时补一补那些被遗漏的知识点。
七、参考文献
[1]丁振凡.Java语言实用教程.北京:
北京邮电大学出版社,2005.2
[2]耿祥义,张跃平.Java2实用教程.北京:
清华大学出版社,2006.8