Java课程设计报告.docx
《Java课程设计报告.docx》由会员分享,可在线阅读,更多相关《Java课程设计报告.docx(51页珍藏版)》请在冰豆网上搜索。
Java课程设计报告
JAVA课程设计
一、实验目的(小四号宋体加粗)
通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。
信科09级学生的课程设计主要是Java语言程序设计的实现。
通过该课程设计,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。
二、实验环境(如软硬件)
CPU:
Inter(R)Pentium(R)CPUP6000@1.87GHz;
显卡:
NVIDIAGeForce310M;
硬盘:
320G;
内存:
2G;
操作系统:
Windows7;
编译器:
JDK1.6
三、实验内容
1、内容一设计一个计算器,利用它可以进行简单的四则运算(加、减、乘、除、开方)等,但仅限于十进制下,此外还可以进行(八进制,十进制,十六进制)之间的相互转换。
要求:
有简单的需求分析,功能设计,详细设计(程序流程),异常处理,测试,源程序清单,总结,具体格式见附件。
知识点:
掌握图形用户界面设计;
掌握基本类的设计与使用;
掌握事件处理机制;
掌握使用异常处理方法。
2、内容二利用JAVA的输入输出流,打开文件iris.txt,求出该文件每列的总和及平均值。
(注意观察iris.txt文件的分割符)
知识点:
掌握使用JAVA的输入输出流
掌握使用String类以及和基本数据类型的转换。
3、内容三“湖南经视台猜“黄金卡”节目简介如下:
有三张卡,其中两张银卡,一张黄金卡,放在把背面提供给竞猜者来猜,本节目存在三种选择方法。
方法一:
在竞猜者随机三选一后,不再改变选择的结果;
方法二:
在竞猜者随机三选一后,主持人再翻开剩下两张中没有被选中的一张银卡,竞猜者再重新在剩下的两张卡中随机选择。
方法三:
在竞猜者随机三选一后,主持人再翻开剩下两张中没有被选中的一张银卡,竞猜者改变原来的选择,选取剩下的唯一那张没有翻开的卡。
要求:
(1)请用图形用户界面设计方法一的竞猜过程,
(2)利用蒙特卡洛仿真方法验证湖南经视台猜“黄金卡”节目三种不同方法的优劣。
知识点:
掌握事件处理机制;
掌握随机采样的方法;
掌握图形用户界面设计;
(注:
采用图形用户方式设计)
4、内容四:
设计一个记事本,菜单中要求有文件,编辑,和帮助。
文件中有新建、打开、保存和退出;编辑中有剪切、复制和粘贴;帮助中显示开发人和版本信息。
知识点:
掌握图形用户界面设计;
掌握基本类的设计与菜单设计;
掌握事件处理机制;
掌握使用异常处理方法。
5、内容五:
一个多线程的动画
知识点:
Java中线程的实现;
线程的优先级、调度与同步;
设计步骤:
窗口布局设计
设计线程类
MainPanel类的设计
实验效果为:
程序功能:
每点击一次“Start”按钮,就会在画面上出现一个新的小球。
这些小球按照一定的线路移动,而且小球的移动速度是相同的。
四、算法分析、设计与描述
1.算法分析、设计
内容一:
首先,完成计算器界面的设计,构造Calculator类,申明基本属性,包括框架属性和按钮属性。
另外在构造器中完成界面布局和各种按钮以及文本框的初始化,并且添加事件响应。
其次在构造方法中,使用String数组存储每个按钮的名称,同时使用for循环完成每个按钮的显示初始化。
最后在写出各事件,如数字事件、符号事件、等号事件,并写出各类运算函数,如加法、减法、乘法、除法,最后于主函数中调用各功能及运算
内容二:
本实验算法是要实现对iris.txt文件的读取并对此文件的每列元素进行处理(求和、求平均值)。
为保证读取文件的正确性,采用字符流读取文件,然后再按行读取,读取一行处理一行。
内容三:
本程序算法要实现模拟黄金卡猜选的第一种方法,并且要通过蒙特卡罗仿真法比较三种方法的优劣。
该算法主要是Math类产生随机数方法的运用。
通过Jframe进行布局分别用,并统计出三种猜测方法的猜中次数以及概率。
模拟方法一:
采用产生随机数的方法并判断两次产生的随机数是否相等,若相等则猜中,若不等则相反,并根据实验次数得出最后的正确结果的概率与次数。
内容四:
在算法设计上,先设计出计算器面板,菜单放在菜单条里,菜单项放在菜单里,在本程序中,设计了一个菜单栏和文本区,设计过程中用到了JScrollPane,JMenu,JTextPane,JMenuBar用来用菜单,菜单包括“文件”“编辑”“帮助”,JMenuItem用来用菜单子项,JTextPane主要用来输入文本。
内容五:
在本程序中,创建一个窗体对象,把小球所在的内容面板添加到窗体中,把按钮所在的面板添加到内容面板的下方。
创建一个线程类,创建了小球对象的同时,创建并启动线程。
以实现多线程动画的操作。
2.算法描述(可插入流程图)
内容一:
用switch语句判断点击的是什么类型的按钮,是数字键则接受数字到输入框,是运算符则执行相应的运算,
加减乘除算法的描述:
用switch语句判断点击的是何种算法,定义一个变量mark存放运算符,实现对应的运算。
进制转换算法描述:
用if语句判断选中的进制对应的选择框(默认选中的是十进制),并对该事件做对应的按钮处理,用变量length判断上次选中的是哪个进制的选择框,用来进行相互转换,然后进行运算。
假如是非十进制,则先转化成十进制,然后再转化成需要的进制。
内容二:
用while循环对文件按行读取存放到字符型变量s里,只要s不为null则循环,在循环里加一个计数器count,用于记录文件的行数用于求平均值,每行按分隔符\t进行行的分割,把每行的第i个元素累加到浮点型数组sum[i]里,读取完后在进行求平均值的运算。
最后打印出每列总和及每列平均值。
内容三:
按钮界面:
黄金卡中要设计到相应的一个开始游戏的按钮和一个重新开始的按钮,我采用的是JButton,分别建立的一个有“开始”和“重玩”文字的按钮。
文本框设计:
用JTextField来构建相应的文本框,用JTextField()来构建单行文本框,以满足程序的要求和图形设计。
颜色背景及字体的设定:
JLabel对象可以显示文本、图像或同时显示二者。
内容四:
记事本设计图如下,前先要创建一个Jishiben的类继承JFrame类作为最底层的容器。
在构建Jishiben类时要初使化容器,初使化组件。
内容五:
事件的面板要有两个按钮,Start按钮用来创建小球和启动线程,Close按钮用来关闭窗口结束进程。
程序中小球类(ClassBall)有多个方法:
Ball()构建小球的方法;draw()画填充小球的方法;move()小球移动的方法,当小球移动到屏幕边界则反弹。
循环对线程进行处理:
每隔5毫秒运行一次。
运行一次小球前进一个像素。
五、程序设计
1.程序设计的基本思路
内容一:
先在主函数里把计算器的布局写好,然后写一个设置各个按钮行为的方法,在这个方法里给出一个最初发生的Event对象,由它来判断鼠标点击算法操作(加、减、乘除等),判断好了,然后就把文本框制空,然后定义一个int变量mark,mark用来保存当前进行何种运算。
用户另输数字,点击“=”在“=”操作里判断mark值,根据mark值判断是哪种算法,然后算出来,把结果射入文本框中,在文本框不为空时,改变进制选择框,则进行进制转换,把结果射入文本框中。
内容二:
在主函数里把要用到的变量定义好,然后尝试开始读取文件,并对读取的数据相应的进行处理,若读取失败则打印“文件读取失败”。
内容三:
设计中,把布局设置为空布局,以设置各按钮的准确位置,利用JButton、JLavel和JTextField设定界面,设定出黄金卡图形界面的布局等因素,以此满足程序的基本设计要求。
内容四:
内容五:
在窗体构造函数BounceFrame()对窗体进行初始化,单机start按钮,就马上调用创建小球,启动线程的方法addBall(),当小球运动到边界的时候要反弹,并重画面板。
单机Close按钮则退出程序。
2.程序代码
内容一:
importjava.awt.*;
importjava.awt.event.*;
classThis_number_too_bigextendsException{}//自定义的一个结果溢出异常类
classJsq2011extendsFrameimplementsItemListener,ActionListener
{publicJsq2011()
{addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{dispose();
System.exit(0);
}
});
}
staticJsq2011mainFrame=newJsq2011();
staticLabellab=newLabel("0");//创建标签
staticPanelpnl1=newPanel(newGridLayout(4,3,3,3));//网格布局
staticPanelpnl2=newPanel(newGridLayout(4,1,3,3));
staticPanelpnl3=newPanel(newGridLayout(1,2,3,3));
staticPanelpnl4=newPanel(newGridLayout(6,1,3,3));
staticButtonbt9=newButton("9");
staticButtonbt8=newButton("8");
staticButtonbt7=newButton("7");
staticButtonbt6=newButton("6");
staticButtonbt5=newButton("5");
staticButtonbt4=newButton("4");
staticButtonbt3=newButton("3");
staticButtonbt2=newButton("2");
staticButtonbt1=newButton("1");
staticButtonbt0=newButton("0");
staticButtonbtdot=newButton(".");
staticButtonbtequ=newButton("=");
staticButtonbtadd=newButton("+");
staticButtonbtsub=newButton("-");
staticButtonbtmul=newButton("*");
staticButtonbtdev=newButton("/");
staticButtonbtA=newButton("A");
staticButtonbtB=newButton("B");
staticButtonbtC=newButton("C");
staticButtonbtD=newButton("D");
staticButtonbtE=newButton("E");
staticButtonbtF=newButton("F");
staticCheckboxckb8=newCheckbox("八进制");//创建八进制选择框
staticCheckboxckb10=newCheckbox("十进制");
staticCheckboxckb16=newCheckbox("十六进制");
staticButtonbtc=newButton("clear");
staticButtonbtt=newButton("backspace");
publicintnumber=0,length=18;
/**number是用来记录输入的数字个数,
*length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制**/
publiccharmark='n';/**设置运算符号为没有即为'n',它的值是'+''-''*''/'**/
publicdoubledata=0;/**设置运算数据为零**/
publiccharch;/**用来临时存放所按按钮的第一个字符**/
publicbooleanRefresh=false;/**设置lab是否要在输入数据的时候刷新,初始为否**/
publicstaticvoidmain(Stringargs[])
{System.out.println("StartingJsq2011...");
lab.setAlignment(Label.RIGHT);//标签上名称右对齐
lab.setBackground(Color.white);
lab.setForeground(Color.BLUE);
lab.setFont(newFont("Serief",Font.BOLD,20));
lab.setBounds(20,33,330,40);
mainFrame.add(lab);
btadd.setForeground(Color.red);
btsub.setForeground(Color.red);
btmul.setForeground(Color.red);
btdev.setForeground(Color.red);
btA.setForeground(Color.blue);
btB.setForeground(Color.blue);
btC.setForeground(Color.blue);
btD.setForeground(Color.blue);
btE.setForeground(Color.blue);
btF.setForeground(Color.blue);
btc.setBackground(Color.red);
btt.setBackground(Color.red);
bt0.setBackground(newColor(200,250,200));
bt1.setBackground(newColor(200,250,200));
bt2.setBackground(newColor(200,250,200));
bt3.setBackground(newColor(200,250,200));
bt4.setBackground(newColor(200,250,200));
bt5.setBackground(newColor(200,250,200));
bt6.setBackground(newColor(200,250,200));
bt7.setBackground(newColor(200,250,200));
bt8.setBackground(newColor(200,250,200));
bt9.setBackground(newColor(200,250,200));
btdot.setBackground(newColor(200,250,200));
btequ.setBackground(newColor(200,250,200));
btadd.setBackground(newColor(200,250,200));
btmul.setBackground(newColor(200,250,200));
btdev.setBackground(newColor(200,250,200));
btsub.setBackground(newColor(200,250,200));
btA.setBackground(newColor(200,250,200));
btB.setBackground(newColor(200,250,200));
btC.setBackground(newColor(200,250,200));
btD.setBackground(newColor(200,250,200));
btE.setBackground(newColor(200,250,200));
btF.setBackground(newColor(200,250,200));
CheckboxGroupgrp=newCheckboxGroup();
ckb8.setCheckboxGroup(grp);
ckb10.setCheckboxGroup(grp);
ckb16.setCheckboxGroup(grp);
ckb8.setBounds(30,75,80,25);
ckb10.setBounds(140,75,80,25);
ckb16.setBounds(250,75,80,25);
ckb8.setState(false);
ckb10.setState(true);//设置初始状态为选中十进制
ckb16.setState(false);
mainFrame.add(ckb8);
mainFrame.add(ckb10);
mainFrame.add(ckb16);
pnl1.setBounds(90,160,180,160);
pnl2.setBounds(280,160,70,160);
pnl3.setBounds(90,110,260,40);
pnl4.setBounds(20,110,60,210);
pnl1.add(bt7);
pnl1.add(bt8);
pnl1.add(bt9);
pnl1.add(bt4);
pnl1.add(bt5);
pnl1.add(bt6);
pnl1.add(bt1);
pnl1.add(bt2);
pnl1.add(bt3);
pnl1.add(bt0);
pnl1.add(btdot);
pnl1.add(btequ);
pnl2.add(btadd);
pnl2.add(btsub);
pnl2.add(btmul);
pnl2.add(btdev);
pnl3.add(btt);
pnl3.add(btc);
pnl4.add(btA);
pnl4.add(btB);
pnl4.add(btC);
pnl4.add(btD);
pnl4.add(btE);
pnl4.add(btF);
btA.enable(false);
btB.enable(false);
btC.enable(false);
btD.enable(false);
btE.enable(false);
btF.enable(false);
mainFrame.add(pnl1);
mainFrame.add(pnl2);
mainFrame.add(pnl3);
mainFrame.add(pnl4);
mainFrame.setResizable(false);
mainFrame.setLayout(null);
//mainFrame.setSize(375,340);
mainFrame.setBounds(100,100,370,340);
mainFrame.setBackground(Color.LIGHT_GRAY);
mainFrame.setTitle("计算器");
mainFrame.setVisible(true);
ckb8.addItemListener(mainFrame);
ckb10.addItemListener(mainFrame);
ckb16.addItemListener(mainFrame);
/**把事件监听者向各个组键注册**/
bt1.addActionListener(mainFrame);
bt2.addActionListener(mainFrame);
bt3.addActionListener(mainFrame);
bt4.addActionListener(mainFrame);
bt5.addActionListener(mainFrame);
bt6.addActionListener(mainFrame);
bt7.addActionListener(mainFrame);
bt8.addActionListener(mainFrame);
bt9.addActionListener(mainFrame);
bt0.addActionListener(mainFrame);
btadd.addActionListener(mainFrame);
btsub.addActionListener(mainFrame);
btmul.addActionListener(mainFrame);
btdev.addActionListener(mainFrame);
btt.addActionListener(mainFrame);
btc.addActionListener(mainFrame);
btdot.addActionListener(mainFrame);
btequ.addActionListener(mainFrame);
btA.addActionListener(mainFrame);
btB.addActionListener(mainFrame);
btC.addActionListener(mainFrame);
btD.addActionListener(mainFrame);
btE.addActionListener(mainFrame);
btF.addActionListener(mainFrame);
}/**endmain()mothed**/
/*************************/
/**checkbox事件的处理**/
/*************************/
publicvoiditemStateChanged(ItemEvente)
{mark='n';
Refresh=false;/**规定当进制转换时以前输入的运算符失效**/
if(ckb8.getState()==true