天天看點

排球比賽(第一次疊代)

使用者故事:作為一個排球比賽的觀衆,我希望獲得一場比賽的得分,以便了解比賽的結果。

由使用者故事拆成任務:

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) {

   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) {

 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) {

public String getgTeam1() {

 return gTeam1;

public void setgTeam1(String gTeam1) {

public int getgOne() {

 return gOne;

public void setgOne(int gOne) {

public int getgTwo() {

 return gTwo;

public void setgTwo(int gTwo) {

public int getgThree() {

 return gThree;

public void setgThree(int gThree) {

public int getgFour() {

 return gFour;

public void setgFour(int gFour) {

public int getgFive() {

 return gFive;

public void setgFive(int gFive) {

public int getgResult1() {

 return gResult1;

public void setgResult1(int gResult1) {

public String getgTeam2() {

 return gTeam2;

public void setgTeam2(String gTeam2) {

public int getgResult2() {

 return gResult2;

public void setgResult2(int 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.PreparedStatement;

import com.user.dao.GamesInfoDao;

import com.util.DBUtil;

 * 接口實作類

public class GamesInfoDaoImpl extends DBUtil implements GamesInfoDao {

 public GamesInfo getgameByID(int id) {

  GamesInfo  game=null;

  PreparedStatement pstatement=null;

  ResultSet rs=null;

   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);

   }

   //抛出異常

  }finally{

   closeAll(conn, pstatement, rs);//釋放資源

  return game;

 public boolean insertGame(GamesInfo gamesInfo) {

  boolean flag=false;

  try{

   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.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類,記分員寫入比賽資料:

public class TestInsertGame {

  *

  * 接收教練輸入比賽資訊

 Scanner input=new Scanner(System.in);

 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+"勝利");

  System.out.println(Team2+"勝利");

 if(flag){

  System.out.println("添加成功");

  System.out.println("添加失敗");

運作效果圖:

排球比賽(第一次疊代)

資料庫資料添加成功:

排球比賽(第一次疊代)

到此功能就完成的差不多了,接下來說說要注意的事項,以及在過程中遇到的問題:

1.資料庫連接配接驅動jar包,不要忘了提前準備好,放在WEB-INF的lib下,myeclipse會自動加載到上面。

排球比賽(第一次疊代)

2.配置環境變量。不然資料庫還是連不上(剛裝系統的我已嘗試過了 >=< ),這個随後我要寫個傻瓜式操作。

遇到的問題:

1.有圖有真相

排球比賽(第一次疊代)

在寫入資料庫時不讓寫主鍵辨別列

解決辦法:

排球比賽(第一次疊代)

在寫SQL語句時把它設為ON

2.本以為要過的時候報錯。(已搬個小馬紮去反思 ==||)

排球比賽(第一次疊代)

第五個總是過不去,判斷都去了還是不行,最後找到了:

排球比賽(第一次疊代)

看到沒,數組下标是從0開始的。

3.還有一個沒有解決的問題:

資料庫是硬傷:來看看我建的表就知道了

排球比賽(第一次疊代)

能看懂嗎,連我自己都淩亂了。我知道這個肯定不行,僅限于這第一次能用,看了這麼多,還希望各位小主給點建議and意見。

總結下:我覺得最後表現層寫的比較亂,都寫在test裡了,應該在寫個邏輯工具類,這樣關系應該更加明了了(就是傳說中的高内聚低耦合吧)。

總體下來思考了好幾天(更多是做其他的了),最後否了自己的空想雲雲,按步驟下來,花了我一個午飯和一個晚飯的時間寫下來。

哦,no,還有我的現在,晚安。