五子棋JAVA语言课程设计报告

第一篇:五子棋JAVA语言课程设计报告

       《Java语言程序设计》

       课程设计报告

       学 院: 信息科学技术学院 班 级: 软件技术2班 姓 名: 王更新 学 号: 1108900505 指导教师: 郭韶升 课设时间: 2022-03-17 至2022-03-26

       二O一四 年 三月 二十六 日

       目 录

       一、设计要求…………………………………………....2

       二、设计步骤…………………………………………....2 2.1程序流程图………………………….…………...2 2.2程序的功能分配……………………….………...3

       三、设计正文…………………………………………....6 3.1创建棋盘类……………………………………….6 3.2判断输赢功能实现……………………………….9 3.3测试结果……………………………………….....9

       四、心得体会…………………………………………...12

       五、参考文献…………………………………………...12 附录(源代码)……………………………………….13

       一、课程设计要求

       设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示

       并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。最后判断某一方是否为五子连珠。

       实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌(执黑、执白)。

       (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);

       二、设计步骤

       2.1程序流程图

       2.2 程序的功能分配

       a.棋盘的绘制

       public void draw_qipan(Graphics G)//画棋盘 15*15{

       G.setColor(Color.lightGray);

       G.fill3DRect(10,10,300,300,true);

       G.setColor(Color.black);

       for(int i=1;i<16;i ){

       G.drawLine(20,20*i,300,20*i);

       G.drawLine(20*i,20,20*i,300);

       } } b.添加按钮

       Button b1=new Button(“开始”);Button b2=new Button(“重置游戏”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);public void init(){

       ckbHB[0]=new Checkbox(“执白”,ckgHB,false);

       ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);

       ckbHB[2]=new Checkbox(“观看”,ckgHB, false);}

       c.鼠标棋子的触发事件

       public void mouseClicked(MouseEvent e){

       Graphics g=getGraphics();

       int x1,y1;

       x1=e.getX();

       y1=e.getY();

       if(e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){

       return;

       }

       if(x1 >10){

       x1 =10;

       }

       if(y1 >10){ y1 =10;

       }

       x1=x1/20*20;

       y1=y1/20*20;

       set_Qizi(x1,y1);

       m*=(-1);}

       d.按钮的触发事件

       public void actionPerformed(ActionEvent e){

       Graphics g=getGraphics();

       if(e.getSource()==b1){

       Game_start();

       }

       else{

       Game_re();

       }

       if(e.getSource()==exist){

       Game_re();

       lblWin.setText(Get_qizi_color(color_Qizi) “输了!”);

       intGame_Start=0;

       }

       e.判断落子的位置及画出相应的黑白棋子 public void set_Qizi(int x,int y)//落子{

       if(intGame_Start==0)//判断游戏未开始{

       return;

       }

       if(intGame_Body[x/20][y/20]!=0){

       return;

       }

       Graphics g=getGraphics();

       if(color_Qizi==1)//判断黑子还是白子{

       g.setColor(Color.black);

       color_Qizi=0;

       }

       else{

       g.setColor(Color.white);

       color_Qizi=1;

       }

       g.fillOval(x-10,y-10,20,20);

       intGame_Body[x/20][y/20]=color_Qizi 1;}

       f.判断胜负

       if(Game_win_1(x/20,y/20))//判断输赢1{

       lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;

       }

       if(Game_win_2(x/20,y/20))//判断输赢2{

       lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;} if(Game_win_3(x/20,y/20))//判断输赢3{ lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);intGame_Start=0;} if(Game_win_4(x/20,y/20))//判断输赢4{ lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;} }

       三、设计正文

       3.1创建棋盘类

       Public class WcyChess extends Applet ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子

       int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

       int intGame_Body[][]=new int[16][16];//设置棋盘棋子状态

       int m=-1;Button b1=new Button(“开始”);Button b2=new Button(“重置游戏”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);CheckboxGroup ckgHB=new CheckboxGroup();NetchatClient chat=new NetchatClient();public void init(){

       setLayout(null);

       addMouseListener(this);

       add(b1);

       b1.setBounds(330,50,80,30);

       b1.addActionListener(this);

       add(b2);

       b2.setBounds(330,90,80,30);

       b2.addActionListener(this);

       ckbHB[0]=new Checkbox(“执白”,ckgHB,false);

       ckbHB[0].setBounds(320,20,60,30);

       ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);

       ckbHB[1].setBounds(380,20,60,30);

       ckbHB[2]=new Checkbox(“观看”,ckgHB, false);

       add(ckbHB[0]);

       add(ckbHB[1]);

       add(ckbHB[2]);

       ckbHB[0].addItemListener(this);

       ckbHB[1].addItemListener(this);

       add(lblWin);

       lblWin.setBounds(330,180,80,30);

       lblWin.setBackground(Color.red);

       lblWin.setText(“胜利者!”);//没有显示?

       ckbHB[2].setBounds(440, 20,60, 30);

       add(exist);

       exist.setBounds(330,130,80,30);

       implements

       //

       exist.addActionListener(this);add(chat);chat.setBounds(20, 500, 300, 300);chat.frame();chat.setVisible(true);Game_start_csh();setSize(500,600);setVisible(true);} public void itemStateChanged(ItemEvent e){ if(ckbHB[0].getState())//选择黑子还是白子{

       color_Qizi=0;} else{

       color_Qizi=1;} } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ Graphics g=getGraphics();int x1,y1;x1=e.getX();y1=e.getY();if(e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){

       return;} if(x1 >10){

       x1 =10;} if(y1 >10){

       y1 =10;} x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);m*=(-1);} public void actionPerformed(ActionEvent e){ Graphics g=getGraphics();if(e.getSource()==b1){

       Game_start();} else {

       Game_re();}

       } if(e.getSource()==exist){

       Game_re();

       lblWin.setText(Get_qizi_color(color_Qizi) “输了!”);

       intGame_Start=0;} } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){ draw_qipan(g);

       3.2判断输赢功能实现

       if(Game_win_1(x/20,y/20)){ //判断输赢1

       lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;} if(Game_win_2(x/20,y/20)){ //判断输赢2

       lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;}

       if(Game_win_3(x/20,y/20))//判断输赢3{

       lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;}

       if(Game_win_4(x/20,y/20))//判断输赢4{

       lblWin.setText(Get_qizi_color(color_Qizi) “赢了!”);

       intGame_Start=0;}

       3.3 测试结果

       a.进入游戏界面

       游戏开始的界面有三个选择项,用户可以选择相应的角色,选择 完毕后点击开始进入游戏。

       b.选择角色,开始下棋

       首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!c.下完后,重新开始

       下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.d.游戏中点退出,自动判输

       在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输

       四、课程设计心得体会

       通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。

       五、参考文献

       1.吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 2.柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 3.丁振凡 Java 语言实用教程 :北京邮电大学出版社

       附录(源代码)

       import java.net.*;import java.io.*;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;Public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子 int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

       int intGame_Body[][]=new int[16][16];//设置棋盘棋子状态

       int m=-1;Button b1=new Button(“开始”);Button b2=new Button(“重新开始”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);CheckboxGroup ckgHB=new CheckboxGroup();public void init(){

       setLayout(null);

       addMouseListener(this);

       add(b1);

       b1.setBounds(330,50,80,30);

       b1.addActionListener(this);

       add(b2);

       b2.setBounds(330,90,80,30);

       b2.addActionListener(this);

       ckbHB[0]=new Checkbox(“执白”,ckgHB,false);

       ckbHB[0].setBounds(320,20,60,30);

       ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);

       ckbHB[1].setBounds(380,20,60,30);

       ckbHB[2]=new Checkbox(“观看”,ckgHB, false);

       add(ckbHB[0]);

       add(ckbHB[1]);

       add(ckbHB[2]);

       ckbHB[0].addItemListener(this);

       ckbHB[1].addItemListener(this);

       add(lblWin);

       lblWin.setBounds(330,180,80,30);

       lblWin.setBackground(Color.red);

       e.getY()<20 || e.getY()>300){

       lblWin.setText(“胜利者!”);//没有显示?

       ckbHB[2].setBounds(440, 20,60, 30);add(exist);

       exist.setBounds(330,130,80,30);exist.addActionListener(this);Game_start_csh();setSize(500,600);setVisible(true);}

       public void itemStateChanged(ItemEvent e){ if(ckbHB[0].getState())//选择黑子还是白子 {

       color_Qizi=0;} else {

       color_Qizi=1;} }

       public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ Graphics g=getGraphics();int x1,y1;x1=e.getX();y1=e.getY();

       if(e.getX()<20 || e.getX()>300 ||

       return;}

       if(x1 >10){

       x1 =10;}

       if(y1 >10){

       y1 =10;}

       x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);m*=(-1)}

       public void actionPerformed(ActionEvent e){ Graphics g=getGraphics();if(e.getSource()==b1){

       Game_start();

       } else{

       // 输了!“);

       赢了!”);

       Game_re();}

       if(e.getSource()==exist){

       Game_re();

       color_Qizi=m;

       lblWin.setText(Get_qizi_color(color_Qizi) “

       intGame_Start=0;

       }

       }

       public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){ draw_qipan(g);}

       public void set_Qizi(int x,int y){ //落子

       if(intGame_Start==0){//判断游戏未开始

       return;}

       if(intGame_Body[x/20][y/20]!=0){

       return;}

       Graphics g=getGraphics();

       if(color_Qizi==1){//判断黑子还是白子

       g.setColor(Color.black);

       color_Qizi=0;} else{

       g.setColor(Color.white);

       color_Qizi=1;}

       g.fillOval(x-10,y-10,20,20);

       intGame_Body[x/20][y/20]=color_Qizi 1;if(Game_win_1(x/20,y/20)){ //判断输赢1 lblWin.setText(Get_qizi_color(color_Qizi) ”

       intGame_Start=0;

       了!“);

       赢了!”);

       赢了!“);

       15*15

       }

       if(Game_win_2(x/20,y/20)){ //判断输赢2{

       lblWin.setText(Get_qizi_color(color_Qizi) ”赢

       intGame_Start=0;}

       if(Game_win_3(x/20,y/20)){ //判断输赢3

       lblWin.setText(Get_qizi_color(color_Qizi) “

       intGame_Start=0;}

       if(Game_win_4(x/20,y/20)){ //判断输赢4

       lblWin.setText(Get_qizi_color(color_Qizi) ”

       intGame_Start=0;} }

       public String Get_qizi_color(int x){

       if(x==0){

       return “黑子”;} else {

       return “白子”;} }

       public void draw_qipan(Graphics G){ //画棋盘 G.setColor(Color.lightGray);

       G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(int i=1;i<16;i ){

       G.drawLine(20,20*i,300,20*i);

       G.drawLine(20*i,20,20*i,300);} }

       public void Game_start(){ //游戏开始

       intGame_Start=1;

       Game_btn_enable(false);

       b2.setEnabled(true);} public void Game_start_csh(){//游戏开始初始化

       intGame_Start=0;

       Game_btn_enable(true);

       b2.setEnabled(false);

       ckbHB[0].setState(true);

       for(int i=0;i<16;i ){

       for(int j=0;j<16;j ){

       intGame_Body[i][j]=0;

       }

       }

       lblWin.setText(“");} public void Game_re(){ //重新开始游戏

       repaint();

       Game_start_csh();} public void Game_btn_enable(boolean e){ //设置组件状态

       b1.setEnabled(e);

       b2.setEnabled(e);

       ckbHB[0].setEnabled(e);

       ckbHB[1].setEnabled(e);} public boolean Game_win_1(int x,int y){ //横向判断输赢

       int x1,y1,t=1;

       x1=x;

       y1=y;

       for(int i=1;i<5;i ){

       if(x1>15){

       break;

       }

       if(intGame_Body[x1 i][y1]==intGame_Body[x][y]){

       t =1;

       }

       else{

       break;

       }

       }

       for(int i=1;i<5;i ){

       if(x1<1){){

       t =1;

       }

       else{

       break;

       }

       }

       if(t>4){

       return true;

       }

       else{

       return false;

       } } public boolean Game_win_2(int x,int y){ //纵向判断输赢

       int x1,y1,t=1;

       x1=x;

       y1=y;

       for(int i=1;i<5;i ){

       if(x1>15){

       break;

       }

       if(intGame_Body[x1][y1 i]==intGame_Body[x][y]){

       t =1;

       }

       else{

       break;

       }

       }

       for(int i=1;i<5;i ){

       if(x1<1){

       break;

       }

       if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){

       t =1;

       }

       break;

       }

       if(intGame_Body[x1-i][y1]==intGame_Body[x][y]

       else{

       break;

       }

       }

       if(t>4){

       return true;

       }

       else{

       return false;

       } } public boolean Game_win_3(int x,int y){ //左斜判断输赢

       int x1,y1,t=1;

       x1=x;

       y1=y;

       for(int i=1;i<5;i ){

       if(x1>15){

       break;

       }

       if(intGame_Body[x1 i][y1-i]==intGame_Body[x][y]){

       t =1;

       }

       else{

       break;

       }

       }

       for(int i=1;i<5;i ){

       if(x1<1){

       break;

       }

       if(intGame_Body[x1-i][y1 i]==intGame_Body[x][y]){

       t =1;

       }

       else{

       break;

       }

       }

       if(t>4){

       return true;

       }

       else{

       return false;

       } } public boolean Game_win_4(int x,int y){ //左斜判断输赢

       int x1,y1,t=1;

       x1=x;

       y1=y;

       for(int i=1;i<5;i ){

       if(x1>15){

       break;

       }

       if(intGame_Body[x1 i][y1 i]==intGame_Body[x][y]){

       t =1;

       }

       else{

       break;

       }

       }

       for(int i=1;i<5;i ){

       if(x1<1){

       break;

       } if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){

       t =1;

       }

       else{

       break;

       }

       }

       if(t>4){

       return true;

       }

       else{

       return false;

       } } }

       

第二篇:Java五子棋实现报告

       一、实验目的

       (1)使用Java编写五子棋程序

       (2)掌握编写过程的一些类和类成员的使用,并且了解五子棋制作过程的一些步骤和了解一些算法。

       二、实验环境

       在电子楼2楼,装有My Eclipse 的计算机上进行

       三、实验内容

       编写一个五子棋程序。程序主要实现以下功能:

       1.实现五子棋界面,要求人性化界面简洁美观; 2.实现黑白色轮流下棋功能,能提示下棋方; 3.实现连成五子自动判断功能; 4.实现时间设置功能,认输功能;

       核心代码如下:

       1.我的第一步是设计界面。在这个过程的要使用到以下的步骤:

       1.使用MyEclipse 创建一个Project关于这个工程,加入两个类,分别是ChessFrame和Chess,而ChessFrame是这个工程中最重要的一个部分。创建过程中要继承JFrame类,并且要继承Runnable 和 MouseListener 这两个接口,分别是用来监听鼠标的移动和时间的变化。2.在给这个JFrame设置大小和颜色等一些东西。这里最主要的是使用了两个函数,是以前没见过的:

       1.这个是用来设置默认的窗口关闭事件的

       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2.这两个是用来获得屏幕的大小的

       Toolkit.getDefaultToolkit().getScreenSize().height;Toolkit.getDefaultToolkit().getScreenSize().width;

       3.把本地的背景图片加到这个窗口中,作为这个窗口的背景图:

       使用的到的类有BufferedImage和 ImageIO这两个类,这两个类是专门用来处理这种功能的。主要的代码如下:

       BufferedImage bg = null;bg = ImageIO.read(new File(“e:/background.jpg”));g.drawImage(bg,0,0,this);这样这个图片就加到了这个窗口的背景去了。

       这里有一个改进就是双缓冲技术,可以防止闪屏。这个技术就是在界面和内存都有一幅图,我们的改动不是直接画界面,而是内存中先画好然后把内存中直接显示出来,那样就没有了一前一后的,那就没有了闪屏的事情发生了。

       4.就是画棋盘和写一些游戏信息:

       这步比较简单,也没什么可以说的,用到的一些画线的函数,和写String的一些函数。

       以上做完以后就可以出现以下的界面:

       1.我的第二步就是增加对mouse的点击和移动的处理,这样以后就可以用来下棋。在这个过程的要使用到以下的步骤: 1.增加对mouse的监视,然后重写它的一些函数:

       1.我们在ChessFrame的构造函数中加入了addMouseListener()函数,然后重写关于这个的四个函数,我们这这里不重写所有的函数,就改写一个MousePress函数就可以了。改写的代码如下:

       public void mousePress(MouseEvent arg0){

       this.x = arg0.getX();this.y = arg0.getY();if(this.canplay)

       } this.repaint();现在要处理的就是加上棋子了,我在这个做了一下小改动可以更加准确的定位下棋的位置:

       if(x >= 10 && x <= 374 && y >= 72 && y <= 450){

       int sx1 =(this.x72)/ 20;int yx1 =(this.x72)% 20;if(yx1 >= 10){ } if(yy2 >= 10){ } sy2 ;sx1 ;就是这个,我们通过监控鼠标的就可以得到点击的X,Y坐标,我在这里通过对它求余,假如余数大于10(就是一个格子的一半)那就给 1,不然不变。后面的画棋子是很简单的一个过程,使用的是现成的函数(drawoval)

       2.这部要做的就是记录棋子和五子连的判断:

       1.我们通过一个数组int给保存棋子,如果是0就是没子,1表示是黑子,2表示白子。在每次重绘的时候遍历这个数组显示,这样就可以保存棋子了。2.判断五子连起来然后获胜的算法: 这个算法是鉴戒例子上的:

       private boolean isline(int x, int y, int xchange, int ychange, int color){

       int tempx = xchange;int tempy = ychange;int count = 1;while(x xchange >= 0 && y ychange >= 0

       && color == chess1[x xchange][y ychange]){ count ;if(xchange!= 0){ } if(ychange!= 0){ if(ychange < 0){ xchange ;

       }

       }

       }

       } ychange--;ychange ;} else { xchange = tempx;ychange = tempy;while(xychange >= 0

       } if(count >= 5){

       } return true;return false;} else { && color == chess1[xychange]){ count ;if(xchange!= 0){ } if(ychange!= 0){

       } if(ychange < 0){

       } ychange--;ychange ;} else { xchange ;中心思想就是要判断就要判断8个方向,其中有的只是相反的方向,我们使用关于X,Y的相对的变化来判断,并且使用count来计数,如果到了5个就可以判断胜利啦。

       1.我的第三步就是时间的变化和一些键的设置

       1.关于时间的变化主要是在于线程的使用,这里我们这个JFrame它继承了Runnable 这个接口,不过我们要重写Run函数,这个run函数的代码如下: public void run(){

       if(this.second > 0){

       while(true){

       this.repaint();if(this.isblack){

       this.ss1--;

       if(this.ss1 == 0){

       JOptionPane

       .showMessageDialog(this, “黑方超时~~~~¡¤游戏结束”);

       this.message1=“0:0:0”;

       {

       “白方超时~~~~¡¤¡¤游戏结束”);this.message2=“0:0:0”;this.canplay = false;

       {

       { }

       this.ss2--;

       if(this.ss2 == 0){

       this.message1 = this.ss

       1/ 3600 “ : ”

        (this.ss1 / 60this.ss1 / 60 *

       this.ss1=-1;

       this.canplay = false;

       }else if(this.ss1>0)3600 * 60)60this.ss2 / 3600 “ : ”

        (this.ss2this.ss2 / 3600 * 60 * 60);

       this.repaint();}else { }

       try {

       }

       Thread.sleep(1000);e.printStackTrace();} catch(InterruptedException e){ 这个函数是用来事时间的变化,所以每操作以后就让线程sleep(1000)就可以了,那样就是一秒钟。这样就可以倒计时了。2.现在我们要点击一个按钮要它有响应。

       这里我们其实就没用到什么button,那为什么会有反应呢,因为我们通过鼠标的点击范围来确定要响应什么函数,这就是这里面的秘密.在public void mouseClicked(MouseEvent arg0)函数里有下面这些if的判断

       if(x1 >= 404 && x1 <= 473 && y1 >= 74 && y1 <= 103)if(x1 >= 404 && x1 <= 473 && y1 >= 127 && y1 <= 155)if(x1 >= 404 && x1 <= 473 && y1 >= 179 && y1 <= 208)if(x1 >= 404 && x1 <= 473 && y1 >= 286 && y1 <= 316)if(x1 >= 404 && x1 <= 473 && y1 >= 338 && y1 <= 367)if(x1 >= 404 && x1 <= 473 && y1 >= 390 && y1 <= 419)这就是为了确定鼠标的范围,然后相对调用函数。

       其他还有就是一些Debug处理,在程序已经处理了,结果的还是蛮可以处理的,不过只能是人人对战。

       四、实验心得与小结

       这次试验总的来说没有想像中那么难,还有视屏的帮助,感觉起还是很容易动手的,不过由于自己没上心,没有做比较大的改动,最主要的人机的对战没做出来是满遗憾的,不过通过这个试验,让我学习了不少的知识,比如双缓冲,mouselistener 等许多许多的知识,还有关于五子棋算法的设计也是一部分。不管怎么说还是有学到知识的,没什么改动,但对现有的知识的掌握还是很可以的。

       五、指导教师评议

       成绩评定:

       指导教师签名:

第三篇:《JAVA语言》课程设计设计

       《面向对象程序设计JAVA》课程设计大纲

       课程名称:面向对象程序设计JAVA 适用专业:计算机及计算机相关专业

       学时数:20(上机实验)学 分: 1 配套教材:《JAVA语言与面向对象程序设计》印旻 编著 清华大学出版社 大纲编写者:周斌 编写日期:2022.2

       一、课程设计目的

       1、课程设计的教学任务是让学生通过动手动脑解决实际问题,是学生学完课程后进行 的一次全面的综合训练,是一个非常重要的教学环节,通过课程设计,使学生经受一次综合动用所学知识,解决实际问题的方法。

       2、使学生掌握使用各种计算机资料和有关参考资料,提高学生的基本设计能力。

       3、培养学生理论联系实际和独立思考的能力,并激发学生的实际开发创造的意识和能力。

       二、课程设计要求

       1、利用JAVA进行应用程序的设计。

       2、必须熟悉课程设计的各项内容和要求,明确课程设计的目的、方法和步骤;

       3、设计中必须独立地地完成每一阶段的设计任务,禁止抄袭他人的设计成果;

       4、所设计的程序必须满足实际使用要求,编译出可执行的程序。

       5、要求程序结构简单,功能齐全,使用方便。

       三、课程设计内容

       课程设计题目:

       1、已知银行整存整取存款不同期限的年息利率分别为: 0.63% 期限一年

       0.66% 期限二年

       年息利率= 0.69% 期限三年 0.75% 期限五年

       0.84% 期限八年

       要求输入存钱的本金和期限,求到期时能从银行的到的利息与本金的合计。

       程序如下:

       import java.io.*;public class myWork1 { public static void main(String args[]){ try { int m,n;BufferedReader br=new BufferedReader(new InputStreamReader(System.in));System.out.print(“请输入金额: ”);m=Integer.parseInt(br.readLine());System.out.print(“请输入年限: ”);n=Integer.parseInt(br.readLine());System.out.println();switch(n){ case 1: System.out.println(“得到的总额为 ” m*(1 n*0.0063));break;case 2: System.out.println(“得到的总额为 ” m*(1 0.0066*n));break;case 3: System.out.println(“得到的总额为 ” m*(1 0.0069*n));break;case 5: System.out.println(“得到的总额为 ” m*(1 0.0075*n));break;case 8: System.out.println(“得到的总额为 ” m*(1 0.0084*n));break;} } catch(IOException e){ System.out.println(e);} } } 截图如下:

       2、输入n值,打印边长为n的空心正六边形,其边由“*”组成。

       3、编写一个类,这个类同时求出n个学生成绩的最高分、最低分、平均分以及超过平均分的人数,并编写主类完成:(1)输入n个学生的成绩;(2)调用此类进行统计;(3)输出统计结果。

       4、编程实现实时动态运行的模拟时钟。以下题目选做:

       5、编程实现约瑟夫问题。8个人站成一圈,从第1个人开始报数,报到5的人出圈,第6个人再从1开始报。依次类推,求出圈的序列。

       6、编程实现俄罗斯方块游戏。

       说明:可以自行选择其他设计题目

       四、编写课程设计报告书

       课程设计报告书要求:

       1、文字叙述清楚,结构结构简洁明了,理论正确,程序功能完备。

       2、设计说明书要求文字工整,书写整齐。

       3、附参考资料名称说明。

       4、课程设计报告主要内容: 1)题目 2)问题需求分析 3)总体设计 4)详细设计

       5)测试数据和调试报告 6)小结

       五、成绩评定方式

       根据平时设计完成质量和课程设计报告确定成绩。分优秀、良好、中等、及格、不及格五档。

第四篇:Java课程设计报告

       课 程 设 计

       课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 指导教师 刘科峰

       2022 年 10 月 29

       日 一.设计内容

       自学Swing图形界面设计和数据库程序设计。开发用于某单位的人事管理系统。该系统要求实现以下功能:

       1.员工信息管理包括:员工信息一览表、新员工的建立、修改 2.薪资福利管理:考勤与薪资的连动计算、薪资与福利的设置

       3.考勤假期管理:考勤项目录入, 实现考勤信息的查询、统计、汇总 4.人事报表管理:按照员工性别,数目,薪酬自动生成相关报表, 可自定义统计分析条件并可对历史报表进行管理。

       设计亮点

       1.null布局方式

       Swing图形界面设计中有很多布局方式,通过本次学习了解到了FlowLayout,BorderLayout,GridLayout以及null布局,就这四种布局方式而言,null布局的优点在于可以将组建的位置精准到坐标值,可以把组件放到任意想放置的位置,另外可以通过null去设置组件的大小,相较于其他布局方式来说是一个很大的优势。但同时它的缺点在于不能根据Frame的大小变化而改变位置。

       2.组件部分属性的设计

       Swing中有很多方法是用来实现组件属性设置的,比如button.setVisible(false);按钮通过调用这个方法实现不可见,这是我此次课程设计中的一个亮点,因为组件是没有设置大小的方法的,只有依靠于相应的布局方式才能改变它的大小,通过设置多几个按钮设为不可见,将所要可见按钮实现大小以及位置的控制是一种很好的方法。

       二、设计方案

       1主界面(只列出界面设计方面的代码)

       JPanel panel=new JPanel();JTable table=null;JButton ibtn=new JButton(“员工信息”);JButton cbtn=new JButton(“考勤管理”);JButton mbtn=new JButton(“薪资管理”);JButton tbtn=new JButton(“人事报表”);ImageIcon rtou = new ImageIcon(“rentou.jpg”);

       JLabel imgLabel=new JLabel(rtou);

       //上面代码定义了一个面板与四个标签,并引入了一个图片

       panel.setLayout(new FlowLayout());//设置面板为流布局

       panel.add(ibtn);panel.add(cbtn);panel.add(mbtn);panel.add(tbtn);panel.setBackground(Color.GRAY);

       //将按钮加到面板中,设置面板为灰色

       this.add(imgLabel,BorderLayout.CENTER);this.add(panel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*图片标签以边框布局放置在中间,将面板也以边框布局放置在下面,可见,灰色,点击关闭程序*/

       (2)查询员工界面(只列出界面设计方面的代码)

       Label idlabel = new JLabel(“ID”);JLabel namelabel = new JLabel(“姓名”);JLabel bumenlabel = new JLabel(“部门”);JLabel zhiweilabel = new JLabel(“职位”);

       JTextField idfiled = new JTextField(8);JTextField namefield = new JTextField(8);JComboBox bumenbox =new JComboBox();JComboBox zhiweubox = new JComboBox();

       JButton btn=new JButton(“查询”);JButton ibtn=new JButton(“添加”)

       JPanel spanel=new JPanel();JPanel vpanel=new JPanel();

       /*定义和各个组件,4个标签,两个文本框,两个复选框,两个按钮,两个面板容器*/ spanel.setLayout(new FlowLayout());

       vpanel.setLayout(new FlowLayout(FlowLayout.CENTER,45,25));

       bumenbox.addItem(“");

       bumenbox.addItem(”管理部“);

       bumenbox.addItem(”生产部“);

       bumenbox.addItem(”业务部“);

       zhiweubox.addItem(”“);

       zhiweubox.addItem(”部长“);

       zhiweubox.addItem(”副部长“);

       zhiweubox.addItem(”普工“);

       spanel.add(idlabel);

       spanel.add(idfiled);

       spanel.add(namelabel);

       spanel.add(namefield);

       spanel.add(bumenlabel);

       spanel.add(bumenbox);

       spanel.add(zhiweilabel);

       spanel.add(zhiweubox);

       spanel.add(btn);

       vpanel.add(ibtn);

       spanel.setBackground(Color.GRAY);

       vpanel.setBackground(Color.GRAY);

       //将各个组件放进对应面板,设置相关属性

       this.add(spanel,BorderLayout.NORTH);

       this.add(vpanel,BorderLayout.SOUTH);

       this.setBounds(300, 180, 600, 350);

       this.setVisible(true);

       this.getContentPane().setBackground(Color.GRAY);

       //将面板以边框布局放入框架中,设置属性(3)增加员工信息界面

       JPanel panel=new JPanel();

       JLabel timeLabel=new JLabel(”时间“);JLabel allnumLabel=new JLabel(”员工总数“);

       JLabel staffMoLabel=new JLabel(”考勤“);JLabel entryLabel=new JLabel(”全勤“);

       JLabel quitLabel=new JLabel(”缺勤“);JLabel mwLabel=new JLabel(”性别比例“);

       JLabel manLabel=new JLabel(”男“);

       JLabel womanLabel=new JLabel(”女“);JLabel proportionLabel=new JLabel(”男女比例“);JLabel distributionLabel=new JLabel(”人员部门分布“);JLabel mdpLabel=new JLabel(”管理部“);

       JLabel pdpLabel=new JLabel(”生产部“);JLabel bdpLabel=new JLabel(”业务部“);JLabel xmLabel=new JLabel(”项目“);JLabel xzLabel=new JLabel(”细则“);JLabel stLabel=new JLabel(”数据统计“);

       JTextField timeFiled = new JTextField(8);

       JTextField allnumFiled = new JTextField(8);JTextField entryFiled = new JTextField(8);JTextField quitFiled = new JTextField(8);JTextField manFiled = new JTextField(8);JTextField womanFiled = new JTextField(8);JTextField proportionFiled = new JTextField(8);JTextField mdpFiled = new JTextField(8);JTextField pdpFiled = new JTextField(8);JTextField bdpFiled = new JTextField(8);// 定义所需组件

       public Selectrenshi(String tablename){

       super(”人事管理“);

       panel.setLayout(null);

       panel.setBackground(Color.GRAY);

       panel.add(xmLabel);

       panel.add(xzLabel);

       panel.add(stLabel);

       panel.add(timeLabel);

       panel.add(timeFiled);

       panel.add(allnumLabel);

       panel.add(allnumFiled);

       panel.add(staffMoLabel);

       panel.add(entryLabel);

       panel.add(entryFiled);

       panel.add(quitLabel);

       panel.add(quitFiled);

       panel.add(mwLabel);

       panel.add(manLabel);

       panel.add(manFiled);

       panel.add(womanLabel);

       panel.add(womanFiled);

       panel.add(proportionLabel);

       panel.add(proportionFiled);

       panel.add(distributionLabel);

       panel.add(mdpLabel);

       panel.add(mdpFiled);

       panel.add(pdpLabel);

       panel.add(pdpFiled);

       panel.add(bdpLabel);

       panel.add(bdpFiled);

       //将组件加到相应面板中

       xmLabel.setBounds(120,20,100,30);

       xzLabel.setBounds(240,20,100,30);

       stLabel.setBounds(360,20,100,30);

       timeLabel.setBounds(120,50,100,30);

       timeFiled.setBounds(360,50,100,30);

       allnumLabel.setBounds(120,100,100,30);

       allnumFiled.setBounds(360,100,100,30);

       staffMoLabel.setBounds(120,150,100,30);

       entryLabel.setBounds(240,150,100,30);

       entryFiled.setBounds(360,150,100,30);

       quitLabel.setBounds(240,200,100,30);

       quitFiled.setBounds(360,200,100,30);

       mwLabel.setBounds(120,250,100,30);

       manLabel.setBounds(240,250,100,30);

       manFiled.setBounds(360,250,100,30);

       womanLabel.setBounds(240,300,100,30);

       womanFiled.setBounds(360,300,100,30);

       proportionLabel.setBounds(240,350,100,30);

       proportionFiled.setBounds(360,350,100,30);

       distributionLabel.setBounds(120,400,100,30);

       mdpLabel.setBounds(240,400,100,30);

       mdpFiled.setBounds(360,400,100,30);

       pdpLabel.setBounds(240,450,100,30);

       pdpFiled.setBounds(360,450,100,30);

       bdpLabel.setBounds(240,500,100,30);

       bdpFiled.setBounds(360,500,100,30);

       //采用null布局,设置组建坐标值

       this.add(panel,BorderLayout.CENTER);

       this.setBounds(300, 100, 600, 600);

       this.setVisible(true);

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       this.getContentPane().setBackground(Color.GRAY);

       //将面板放入框架,设置相应属性(4)员工考勤界面

       JLabel idlabel = new JLabel(”ID“);JComboBox idbox =new JComboBox();CheckTable model = null;

       JButton wbtn=new JButton(”修改“);

       JButton cbtn=new JButton(”查询“);JButton mbtn=new JButton(”创建薪资表“);JButton rbtn=new JButton(”创建人事表“);

       JScrollPane scrollpane = null;JPanel spanel=new JPanel();JPanel vpanel=new JPanel();JTable table=null;spanel.add(idbox);panel.add(wbtn);spanel.add(cbtn);vpanel.add(mbtn);vpanel.add(rbtn);spanel.setBackground(Color.GRAY);vpanel.setBackground(Color.GRAY);this.add(spanel,BorderLayout.NORTH);this.add(vpanel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);

       (5)选择考勤表界面

       JLabel checklabel = new JLabel(”选择考勤表“);JLabel newlabel = new JLabel(”创建考勤表“);JComboBox timebox =new JComboBox();JTextField newfield = new JTextField();JButton btn=new JButton(”确认“);JButton nbtn=new JButton(”创建");JPanel spanel=new JPanel();spanel.add(checklabel);

       spanel.add(timebox);

       spanel.add(btn);

       spanel.add(newlabel);

       spanel.add(newfield);

       spanel.add(nbtn);

       checklabel.setBounds(30,90,100,30);

       timebox.setBounds(180,90,100,30);

       btn.setBounds(360,90,100,30);

       newlabel.setBounds(30,200,100,30);

       newfield.setBounds(180,200,100,30);

       nbtn.setBounds(360,200,100,30);

       this.add(spanel);

       this.setBounds(300, 180, 600, 350);

       this.setVisible(true);

       三、结果和数据处理

       四、结论

       1.Swing图形界面

       图形用户界面(GUI)是程序不可或缺的一部分,它便于用户和程序的交互。在Swing界面中是以Frame为框架,采用合理的布局方式(FlowLayout,BorderLayout,GridLayout,null),将Panel加入框架之中,而实现界面的各个组件将调用各种方法设置自身属性实行可视化界面以及加入到面板之中。再通过事件监听器实现事件的监听预处理机制。

       2.数据库

       在这次课程设计中哦我主要负责Swing图像界面,对于数据库只做了最简单的了解。程序中采用了最流行的关系型数据库mysql,雪化了mysql的建立,删除,与修改以及使用sql语言对数据库进行一些简单的操作,将按钮等设置的监听事件与数据库相连接。

       五、问题与讨论

       1.组件的方法调用

       在这次课程设计中,用到了很多的组件,例如Button,Jlabel,TextField,ComBox,等。Swing图形界面也确实提供了很多方法去设置相关组件的属性,例如label.setVisible(false);设置标签不可见等很多方法,只要查看API文档几乎就能实现很多功能,但是对于按钮等最常见的组件来说设置大小如果不依靠相关布局方式很难设置,我在程序中之所以运用了很多的bull布局方式就是为了实现组件大小的设置,如果说能有一个方法直接设置组件大小而不受其他组件或容器影响就能使代码很简洁了。2.相对布局

       在编写图像界面的程序的时候,我用了很多的布局方式,有FlowLayout,BorderLayout,GrirLayout,null等,其中null布局用的最多。null布局的优点在于可以将组建的位置精准到坐标值,可以把组件放到任意想放置的位置,另外可以通过null去设置组件的大小,相较于其他布局方式来说是一个很大的优势。但同时它的缺点在于不能根据Frame的大小变化而改变位置。其他三种布局方式虽然实现了岁Frame大小变动而改变组件大小及位置但是不容易控制,如果null布局能实现相对布局就是很好的一种布局方式了。

第五篇:java课程设计报告

       《Java语言程序设计》

       题 目:指导老师:姓 名:专 业:班 级:日 期:课程设计报告

       目 录

       一、系统总体设计.......................................1

       (一)设计目标及完成功能..............................1

       (二)系统结构设计...................................1

       二、数据库设计........................................1

       三、详细设计..........................................1(一)界面设计........................................1(二)系统设计........................................2(三)关键技术及算法..................................2

       四、测试..............................................2

       五、安装使用说明.......................................2 总结(体会)..........................................2 参考文献:............................................2

       《Java语言程序设计》课程设计报告

       一、系统总体设计

       (一)设计目标及完成功能

       此部分可以包括如下内容:

       1.窗口功能说明:设计了几个窗口,分别实现什么功能.2.菜单栏或工具栏说明:如果设计了菜单或工具栏,分别说明包括哪些项及其各自实现什么操作.……

       (二)系统结构设计

       说明:要绘出系统结构图

       二、数据库设计

       必须包含以下内容:E-R图(说明所有实体及其属性)、表结构列表(字段名、类型、主键、备注等)。

       没有用到数据库的不用写此部分

       三、详细设计

       (一)界面设计

       界面抓图,图要有编号和标题(格式:图1 主界面图),位于图的下方居中对齐。

       《Java语言程序设计》课程设计报告

       (二)系统设计

       1.共设计了几个类或接口,是否有继承关系,各实现什么功能,绘图(列表)说明。

       2.列表说明各类的方法及其功能。

       (三)关键技术及算法

       使用的主要算法分析、关键技术说明。如数据库连接技术、加密解密算法等。

       四、测试

       五、安装使用说明

       1.系统配置说明。是否需要配置数据源或安装补丁包、导入数据库等。

       2.登录的用户名、密码。3.其他特殊说明。

       总结(体会)

       (谈谈本次课程设计的心得体会)

       参考文献:

       [1] 窦万峰.软件工程方法与实践[M].机械工业出版社,2022 [2] 李兆锋,张得生.Java Web项目开发案例精粹[M].电子工业出版社,2022 [3] 沈泽刚,秦玉平.Java Web编程技术[M].清华大学出版社,2022

       《Java语言程序设计》课程设计报告

       包括书籍、网站、论坛等。

       说明:(以下内容作为要求)

       正文部分一律用小四号字,宋体,1.5倍行距。一级大标题黑体四号字靠左,加粗。二级大标题黑体四号靠左,不加粗。

       参考文献:

       (要求:五号字,宋体,左对齐,悬挂缩进,单倍行距。按、书名、出版社、出版时间格式逐一列出)