• 排球比赛(第一次迭代)


    用户故事:作为一个排球比赛的观众,我希望获得一场比赛的得分,以便了解比赛的结果。
    由用户故事拆成任务:
    1.根据观众要求,显示某一场比赛的局分;(表现)
    2.记分员输入每一局比赛的分数,并保存;(表现)
    3.根据局分判断输赢;
    4.连接数据库保存局分。


    根据用户故事,创建以下包,类。
     
    util包:做数据连接。
    DBUtil.java类:

    package com.util;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class DBUtil {
     public static Connection getConn(){
      Connection conn=null;
      try {
       //加载驱动
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
       //连接数据库 conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=MySqlGames","sa","sa");
      }
       catch (ClassNotFoundException e) {
       e.printStackTrace();
       System.out.println("驱动加载失败");
      } catch (SQLException e) {
       e.printStackTrace();
       System.out.println("数据库连接失败");
      }
      return conn;
     }
    //释放资源
    public static void closeAll(Connection conn,Statement statement,ResultSet rs){
    try {
     if(rs!=null){
      rs.close();
      }
     if(statement!=null){
      statement.close();
      }
     if(conn!=null){
      conn.close();
      }
    } catch (SQLException e) {
     e.printStackTrace();
     System.out.println("释放资源出现异常");
    }
     
    }
    }


    User包下:bean包,和dao包:
    bean 包下GamesInfo类(get,set):
    package com.user.bean;

    public class GamesInfo {
    private int gID;//比赛场次
    private String gTeam1;//队伍1
    private int gOne;//第一局
    private int gTwo;
    private int gThree;
    private int gFour;
    private int gFive;
    private int gResult1;//队伍1结果
    private String gTeam2;//队伍2
    private int gResult2; //队伍2结果

    /**
     * 构造方法
     * */
    public GamesInfo() {
     super();
    }
    public GamesInfo(int gID, String gTeam1, int gOne, int gTwo, int gThree,
      int gFour, int gFive, int gResult1, String gTeam2, int gResult2) {
     super();
     this.gID = gID;
     this.gTeam1 = gTeam1;
     this.gOne = gOne;
     this.gTwo = gTwo;
     this.gThree = gThree;
     this.gFour = gFour;
     this.gFive = gFive;
     this.gResult1 = gResult1;
     this.gTeam2 = gTeam2;
     this.gResult2 = gResult2;
    }
    public int getgID() {
     return gID;
    }
    public void setgID(int gID) {
     this.gID = gID;
    }
    public String getgTeam1() {
     return gTeam1;
    }
    public void setgTeam1(String gTeam1) {
     this.gTeam1 = gTeam1;
    }
    public int getgOne() {
     return gOne;
    }
    public void setgOne(int gOne) {
     this.gOne = gOne;
    }
    public int getgTwo() {
     return gTwo;
    }
    public void setgTwo(int gTwo) {
     this.gTwo = gTwo;
    }
    public int getgThree() {
     return gThree;
    }
    public void setgThree(int gThree) {
     this.gThree = gThree;
    }
    public int getgFour() {
     return gFour;
    }
    public void setgFour(int gFour) {
     this.gFour = gFour;
    }
    public int getgFive() {
     return gFive;
    }
    public void setgFive(int gFive) {
     this.gFive = gFive;
    }
    public int getgResult1() {
     return gResult1;
    }
    public void setgResult1(int gResult1) {
     this.gResult1 = gResult1;
    }
    public String getgTeam2() {
     return gTeam2;
    }
    public void setgTeam2(String gTeam2) {
     this.gTeam2 = gTeam2;
    }
    public int getgResult2() {
     return gResult2;
    }
    public void setgResult2(int gResult2) {
     this.gResult2 = gResult2;
    }
    }
    Dao包下,接口类GamesInfoDao和GamesInfoDaoImpl包:
    GamesInfoDao.Java类:

    package com.user.dao;

    import com.user.bean.GamesInfo;

    public interface GamesInfoDao {
     /**
      * 接口
      * */
     //添加比赛
     boolean insertGame(GamesInfo gamesInfo);
     //根据场次查询比赛
     GamesInfo getgameByID(int id);
     
    }


    GamesInfoDaoImpl包下GamesInfoDaoImpl接口实现类继承DBUtil
    GamesInfoDaoImpl.java类:

    package com.user.dao.impl;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    import com.user.bean.GamesInfo;
    import com.user.dao.GamesInfoDao;
    import com.util.DBUtil;
    /**
     * 接口实现类
     * */
    public class GamesInfoDaoImpl extends DBUtil implements GamesInfoDao {
     //根据场次查询比赛
     public GamesInfo getgameByID(int id) {
      GamesInfo  game=null;
      Connection conn=null;
      PreparedStatement pstatement=null;
      ResultSet rs=null;
      
      try {
       conn=getConn();
       String sql="select *from games where gID=?";
       pstatement=conn.prepareStatement(sql);
       pstatement.setInt(1, id);
       rs=pstatement.executeQuery();
       if(rs.next()){
        int gID=rs.getInt("gID");
        String gTeam1=rs.getString("gTeam1");
        int gOne=rs.getInt("gOne");
        int gTwo=rs.getInt("gTwo");
        int gThree=rs.getInt("gThree");
        int gFour=rs.getInt("gFour");
        int gFive=rs.getInt("gFive");
        int gResult1=rs.getInt("gResult1");
        String gTeam2=rs.getString("gTeam2");
        int gResult2=rs.getInt("gResult2");
        game=new GamesInfo(gID, gTeam1, gOne, gTwo, gThree,gFour,gFive,gResult1,gTeam2,gResult2);
        
       }
       //抛出异常
      } catch (SQLException e) {
       e.printStackTrace();
      }finally{
       closeAll(conn, pstatement, rs);//释放资源
      }
      return game;
     }
     
     //添加比赛
     public boolean insertGame(GamesInfo gamesInfo) {
      boolean flag=false;
      Connection conn=null;
      PreparedStatement pstatement=null;
      try{
       conn=getConn();
       String sql="set identity_insert games ON;insert into games(gID,gTeam1,gOne,gTwo,gThree,gFour,gFive,gResult1,gTeam2,gResult2) values(?,?,?,?,?,?,?,?,?,?)";
       pstatement = conn.prepareStatement(sql);
       pstatement.setInt(1, gamesInfo.getgID());
       pstatement.setString(2, gamesInfo.getgTeam1());
       pstatement.setInt(3, gamesInfo.getgOne());
       pstatement.setInt(4, gamesInfo.getgTwo());
       pstatement.setInt(5, gamesInfo.getgThree());
       pstatement.setInt(6, gamesInfo.getgFour());
       pstatement.setInt(7, gamesInfo.getgFive());
       pstatement.setInt(8, gamesInfo.getgResult1());
       pstatement.setString(9, gamesInfo.getgTeam2());
       pstatement.setInt(10, gamesInfo.getgResult2());
       int rowNum=pstatement.executeUpdate();
       if(rowNum==1){
        flag=true;
       }
       //抛出异常
       }catch (SQLException e) {
        e.printStackTrace();
       }finally{
        closeAll(conn, pstatement, null);//释放资源
       } 
      
      return flag;
     }
    }

    Test包:表现层
    TestGetGameByID类:用户根据id场次查询结果:

    package com.test;

    import java.util.Scanner;

    import com.user.bean.GamesInfo;
    import com.user.dao.GamesInfoDao;
    import com.user.dao.impl.GamesInfoDaoImpl;

    public class TestGetGameByID {
    public static void main(String[] args) {
     /**
      * 用户查询比赛
      * */
     GamesInfoDao gamesInfoDao=new GamesInfoDaoImpl();//实例化接口实现类
     Scanner input=new Scanner(System.in);//输入实现类
     System.out.println("请输入比赛场次:");
     int RA=input.nextInt();//接收用户输入查询场次
     GamesInfo gamesInfo=gamesInfoDao.getgameByID(RA);//查询场次为RA的比赛详细信息
     
     System.out.println("比赛场次:"+gamesInfo.getgID());
     int one=gamesInfo.getgOne();
     int two=gamesInfo.getgTwo();
     int three=gamesInfo.getgThree();
     int four=gamesInfo.getgFour();
     int five=gamesInfo.getgFive();
     
     if(one+two+three+four+five>3){
      System.out.println(gamesInfo.getgTeam1()+":胜利");
      System.out.println(gamesInfo.getgTeam2()+":失败");
     }else{
      System.out.println(gamesInfo.getgTeam1()+":失败");
      System.out.println(gamesInfo.getgTeam2()+":胜利");
     }
     }
    }
    运行效果图如下:
     
    测试数据为:比赛场次为1;
    队伍一名称为:1;
    队伍二名称为:1;(随便写入的,这数据有点尴尬 = - =)

    TestInsertGame.Java类,记分员写入比赛数据:

    package com.test;

    import java.util.Scanner;

    import com.user.bean.GamesInfo;
    import com.user.dao.GamesInfoDao;
    import com.user.dao.impl.GamesInfoDaoImpl;

    public class TestInsertGame {
    public static void main(String[] args) {
     GamesInfoDao gamesInfoDao=new GamesInfoDaoImpl();//实例化接口实现类
     /**
      *
      * 接收教练输入比赛信息
      * */
     Scanner input=new Scanner(System.in);
     System.out.println("请输入比赛场次:");
     int RA=input.nextInt();
     System.out.println("请输入第一队伍名称");
     String  Team1=input.next();
     System.out.println("请输入第二队伍名称");
     String  Team2=input.next();
     int[] game=new int[5];
     int sum=0;
     int gResult1=0;
     int gResult2=1;
     for(int i=0;i<5;i++){
      System.out.println("请输入第"+(i+1)+"局"+Team1+"胜负情况。1/0(胜/负):");
      game[i]=input.nextInt();
       sum=sum+game[i];
        if(sum>=3){
         gResult1=1;
         gResult2=0;
         game[3]=0;
         game[4]=0;
         break;
        }
     }
     GamesInfo gamesInfo=new GamesInfo(RA,Team1,game[0],game[1],game[2],game[3],game[4],gResult1,Team2,gResult2);
     boolean flag=gamesInfoDao.insertGame(gamesInfo);//执行添加
     if(gResult1==1){
      System.out.println(Team1+"胜利");
     }else{
      System.out.println(Team2+"胜利");
     }
     if(flag){
      System.out.println("添加成功");
     }else{
      System.out.println("添加失败");
     }
    }
    }

    运行效果图:
     

    数据库数据添加成功:

     

    到此功能就完成的差不多了,接下来说说要注意的事项,以及在过程中遇到的问题:
    1.数据库连接驱动jar包,不要忘了提前准备好,放在WEB-INF的lib下,myeclipse会自动加载到上面。
     
    2.配置环境变量。不然数据库还是连不上(刚装系统的我已尝试过了 >=< ),这个随后我要写个傻瓜式操作。


    遇到的问题:
    1.有图有真相

     

    在写入数据库时不让写主键标识列
    解决办法:
     

    在写SQL语句时把它设为ON

    2.本以为要过的时候报错。(已搬个小马扎去反思 ==||)
     
    第五个总是过不去,判断都去了还是不行,最后找到了:


     

    看到没,数组下标是从0开始的。

    3.还有一个没有解决的问题:

    数据库是硬伤:来看看我建的表就知道了
     
    能看懂吗,连我自己都凌乱了。我知道这个肯定不行,仅限于这第一次能用,看了这么多,还希望各位小主给点建议and意见。


    总结下:我觉得最后表现层写的比较乱,都写在test里了,应该在写个逻辑工具类,这样关系应该更加明了了(就是传说中的高内聚低耦合吧)。


    总体下来思考了好几天(更多是做其他的了),最后否了自己的空想云云,按步骤下来,花了我一个午饭和一个晚饭的时间写下来。

    哦,no,还有我的现在,晚安。

  • 相关阅读:
    Eclipse IDE中Android项目打红叉的解决方法
    控件:PopupWindow 弹出窗口(基本操作)
    控件:AnalogClock与DigitalClock 时钟组件
    四大组件之一 BroadcastReceiver (拦截短信并屏蔽系统的Notification .)
    四大组件之一 文件存储_文本文件
    控件:Chronometer 计时器(定时震动)
    计算页面执行时间的两种方法
    URL解析的几种模式以及拟静态重定向问题
    SSH 文件上传错误:encountered 1 errors during the transfer终极解决方法:
    php过滤提交信息防注入
  • 原文地址:https://www.cnblogs.com/yangandjun/p/6209861.html
Copyright © 2020-2023  润新知