-1-课程设计报告实验内容:综合课程设计相关课程:Java程序设计学期:2009-2010学年第2学期学时学分:48学时3学分专业班级:xxxxxxxx学号:xxxxxxxxxxx姓名:xxxxxxx指导老师:xxx提交日期:xxxx年xx月xx日-2-题目JAVA课程设计一、实验目的通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。信科0821班学生的课程设计主要是Java语言程序设计的实现。通过该课程设计,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。二、实验环境硬件环境CPU:AMD5000+双核主板:华硕M2N-X显示器:1024x768/256色操作系统:WindowsXP;JDK:jdk-6u18-windows-i586;运行环境以及调试软件:JCreatorPro三、实验内容内容一:设计一个计算器,利用它可以进行简单的四则运算(加、减、乘、除、开方)等,但仅限于十进制下,此外还可以进行(八进制,十进制,十六进制)之间的相互转换。内容二:设计一个记事本,菜单中要求有文件,编辑,和帮助。文件中有新建、打开、保存和退出;编辑中有剪切、复制和粘贴;帮助中显示开发人和版本信息。内容三:编写tic-tac-toe游戏程序。即3*3的9个方格子,每人下一次看谁先连成一行3个四、算法分析、设计与描述1.算法分析和设计内容(1)算法分析:首先,设计对输入数字的进行转换,不进行转换操作则默认为十进制,然后进行符号转换操作以及正弦函数等,接着可以进行加减乘除等运算,添加“C”、“CE”按钮进行退格和清空操作,清空操作显示“0”,最后在帮助中显示开发人信息。功能及界面设计:功能1:按下数字键在液晶平上会显示数字,这时计算器最基本的功能。功能2:输入数字后,点击进制转换,可转换成二、八进制;按“exp”“log”键,则进行e次幂运算和自然对数运算;按“tan”“cos”“sin”则进行三角函数运算。功能3:按“+”“-”“*”“/”分别进行四则运算功能4:在任何时候按下“+/-”键,计算器文本框上的数字置反号。功能5:第一次按下“运算”键,再按下数字键,将重新输入第二个数字。再次按下“运算”键,将算出前两个数字运算的结果,然后按下数-3-字,将又重新输入新的数字。功能6:按下“C”键向前退格,按下“CE”键,数据被全部清除功能7:按下“帮助”键查看制作人信息功能8:按下“选项”键,点“退出”键退出计算器面板设计算法描述选项进制转换帮助(输出区域)sqrt+/-expCCE789log/456tan*123cos-0.=sin+-4-内容(2)算法分析:此程序应当符合大众化,因为记事本是一个常用程序,因此我们常用计算机系统带的记事本进行设计本程序,其功能有以下几个方面:(1)“菜单”中有“文件”,“编辑”,“帮助”三个主菜单。(2)“文件”中有“新建”,“打开”,“保存”,“退出”四个子菜单:分别用于新建文件,打开文件,保存文件,退出记事本。(3)“编辑”中有“剪切”,“复制”,“粘贴”三个子菜单:用于剪切文字,复制文字,粘贴文字。(4)“帮助”菜单中有“关于”用来显示作者信息计算结果显示接受用户输入是否再次计算退出是否处理异常默认十进制十六进制八进制开始选择你要计算运行的进制10、8、16进制转换刷新-5-记事本面板设计:文件编辑帮助(文本区)内容(3)算法分析:1初始化游戏,2检查棋子是否布满游戏格局,格局被布满则进行赢者判断,没布满则“X”下棋,3再次检查游戏格局是否被棋子布满,没布满则轮到“O”下棋,且跳到步骤2,若布满格局则进行赢者判断-6-算法描叙:五、程序设计1.程序设计的基本思路内容(1):计算结果显示区设计privateJTextFielddisplayField保存+,-,*,/,=命令privateStringlastCommand保存计算结果privatedoubleresult判断是否为数字的开始privatebooleanstart设置布局、为按钮注册事件监听器publicCalculator()是否占满游戏格局初始化游戏平局是否有玩家赢是否占满游戏格局输出赢家“O”下棋“X”下棋YYNNNY是否有玩家赢NY-7-调用成员方法添加菜单this.addmyMenu()按钮的单击事件处理方法publicvoidactionPerformed(ActionEvente)退格键的实现方法if(input.equals(C)){if(str.length()0)displayField.setText(str.substring(0,str.length()-1));//清零键的实现方法input.equals(CE)displayField.setText(0);start=true;内容(2):使用的包如下:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;为按钮添加行为监听器:ActionListener为按钮添加键盘适配器:KeyListener菜单设计:JMenuBarmbar;JMenumnuFile,mnuEdit,mnuHelp;JMenuItemfileNew,fileOpen,fileSave,fileExit;JMenuItemeditCut,editCopy,editPaste,editSelectAll,editDel;JMenuItemhelpAbout;JToolBartlbr;ImageIconiconNew,iconOpen,iconSave;ImageIconiconCut,iconCopy,iconPaste;JButtonbttnNew,bttnOpen,bttnSave;JButtonbttnCut,bttnCopy,bttnPaste;打开异常处理:catch(Exceptionex){JOptionPane.showMessageDialog(-8-this,ex.getMessage(),打开失败,JOptionPane.ERROR_MESSAGE);}退出异常处理:if(txtChanged){intres;res=JOptionPane.showConfirmDialog(this,保存更改?,退出,JOptionPane.YES_NO_CANCEL_OPTION);if(res==JOptionPane.YES_OPTION){saveFile();}elseif(res==JOptionPane.CANCEL_OPTION){return;}内容(3)创建并且初始化盘区单位privatecharwhoseTurn='X';创建并且初始化状态标签privateCell[][]cells=newCell[3][3];privateJLabeljlblStatus=newJLabel(X'sturntoplay);确认玩家顺序publicTicTacToe(){JPanelp=newJPanel(newGridLayout(3,3,0,0));for(inti=0;i3;i++)for(intj=0;j3;j++)p.add(cells[i][j]=newCell());判断盘区单位全部是否被棋子占领publicbooleanisFull(){-9-for(inti=0;i3;i++)for(intj=0;j3;j++)if(cells[i][j].getToken()=='')returnfalse;returntrue;}判断有指定的象征的玩家胜利publicbooleanisWon(chartoken){for(inti=0;i3;i++)if((cells[i][0].getToken()==token)&&(cells[i][1].getToken()==token)&&(cells[i][2].getToken()==token)){returntrue;}for(intj=0;j3;j++)if((cells[0][j].getToken()==token)&&(cells[1][j].getToken()==token)&&(cells[2][j].getToken()==token)){returntrue;}if((cells[0][0].getToken()==token)&&(cells[1][1].getToken()==token)&&(cells[2][2].getToken()==token)){returntrue;}if((cells[0][2].getToken()==token)&&(cells[1][1].getToken()==token)&&(cells[2][0].getToken()==token)){returntrue;}returnfalse;}2.程序代码内容(1):importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;-10-publicclassCalculatorextendsFrameimplementsActionListener,WindowListener{privateContainercontainer;privateGridBagLayoutlayout;privateGridBagConstraintsconstraints;privateJTextFielddisplayField;//计算结果显示区privateStringlastCommand;//保存+,-,*,/,=命令0privatedoubleresult;//保存计算结果privatebooleanstart;//判断是否为数字的开始privateJMenuBarmenubar;privateJMenuItemm_exit,m2_ejz,m2_bjz;privateDialogdialog;privateLabellabel_dialog;privateJButtonbutton_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,button_plus,button_minus,button_multiply,button_divide,button_point,button_equal,button_log,button_tan,button_cos,button_sin,button_exp;publicCalculator()//构造方法设置布局、为按钮注册事件监听器{super(Calculator);this.setLocation(240,200);this.setSize(350,300);this.setResizable(true);this.setLayout(newGridLayout(7,1));this.addmyMenu();//调用成员方法添加菜单displayField=newJTextField(30);this.add(displayField);displayField.setEditable(true);start=true;result=0;lastCommand==;JPanelpanel0=newJPanel();panel0.setLayout(newGridLayout(1,4,4,4));JPanelpanel1=newJPanel();panel1.setLayout(newGridLayout(1,5,4,4));this.add(panel1);button