Index.java
import?java.io.BufferedWriter;import?java.io.FileWriter;
import?java.io.IOException;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;
public?class?Index?{
//?創建全局鍵盤輸入對象.
static?Scanner?sc;
public?static?void?main(String[]?args)?throws?IOException?{
sc?=?new?Scanner(System.in);
//?創建Map映射,鍵為球隊編號,值為球隊類.
HashMap<String,?Team>?teams?=?new?HashMap<String,?Team>();
//?循環命名,用於指定退出和繼續.
Loop:?while?(true)?{
//?打印選項
System.out.println("1.添加球隊?2.查看球隊?3.刪除球員信息?4.導出球隊信息?5.退出");
String?option?=?sc.nextLine();
switch?(option)?{
case?"1":? //?1.添加球隊
addTeam(teams);
break;
case?"2":? //?2.查看球隊
viewTeam(teams);
break;
case?"3": //?3.刪除球員
deletePlayer(teams);
break;
case?"4":? //?4.導出信息
exportInfo(teams);
break;
case?"5":? //?5.退出系統
exit();
sc.close();?//?退出此系統之前關閉輸入流.
break?Loop;
default:? //?其他情況
System.out.println("錯誤輸入,請重新輸入:");
continue?Loop;
}
}
}
//?根據球隊編號添加隊伍,添加隊伍的同時在球隊中添加球員對象.
public?static?void?addTeam(Map<String,?Team>?teams)?{
System.out.println("請輸入球隊編號:");
String?teamID?=?sc.nextLine();
//?創建新球隊對象.
Team?team?=?new?Team();
team.setTeamID(teamID);
//?把創建的球隊對象加入map映射中.
teams.put(teamID,?team);
System.out.println("請輸入球隊名字:");
String?teamName?=?sc.nextLine();
team.setTeamName(teamName);
System.out.println("請輸入球隊所在城市:");
String?teamCity?=?sc.nextLine();
team.setTeamCity(teamCity);
//?新建壹個布爾變量用於判斷是否繼續添加.
boolean?flag?=?true;
while?(flag)?{
System.out.println("請輸入球員名字:");
String?playerName?=?sc.nextLine();
System.out.println("請輸入球員場均得分:");
double?pointsPerGame?=?sc.nextDouble();
sc.nextLine();
System.out.println("請選擇球員類型:?1.前鋒?2.中鋒?3.後衛");
//?新建壹個position變量,判斷添加的球員類型.
int?position?=?sc.nextInt();
sc.nextLine();
if?(position?==?1)?{
Forward?player?=?new?Forward();
team.setPlayers(player);
player.setPlayerPosition("前鋒");
System.out.println("請輸入場均籃板:");
double?reboundsPerGame?=?sc.nextDouble();
sc.nextLine();
player.setPlayerName(playerName);
player.setPointsPerGame(pointsPerGame);
player.setReboundsPerGame(reboundsPerGame);
}?else?if?(position?==?2)?{
Center?player?=?new?Center();
team.setPlayers(player);
player.setPlayerPosition("中鋒");
System.out.println("請輸入場均蓋帽:");
double?blocksPerGame?=?sc.nextDouble();
sc.nextLine();
player.setPlayerName(playerName);
player.setPointsPerGame(pointsPerGame);
player.setBlocksPerGame(blocksPerGame);
}?else?{
Guard?player?=?new?Guard();
team.setPlayers(player);
player.setPlayerPosition("後衛");
System.out.println("請輸入場均助攻:");
double?assistsPerGame?=?sc.nextDouble();
sc.nextLine();
player.setPlayerName(playerName);
player.setPointsPerGame(pointsPerGame);
player.setAssistsPerGame(assistsPerGame);
}
System.out.println("是否繼續添加:(Y/N)");
String?isAdd?=?sc.nextLine();
if?(isAdd.equalsIgnoreCase("y"))
flag?=?true;
else
flag?=?false;
}
System.out.println("球隊編號\t球隊名稱\t球隊所在城市");
System.out.println(team.getTeamID()?+?"\t\t"?+?team.getTeamName()?+?"\t\t"?+?team.getTeamCity());
}
//?根據隊伍,輸出球員信息.
public?static?void?viewTeam(Map<String,?Team>?teams)?{
//?用keySet方法取出map映射中的鍵.用於叠代取Team對象.
Set<String>?keyset?=?teams.keySet();
for?(Iterator<String>?itt?=?keyset.iterator();?itt.hasNext();)?{
String?tmp?=?itt.next();
Team?team?=?teams.get(tmp);
System.out.println("球隊編號\t球隊名稱\t球隊所在城市");
System.out.println(team.getTeamID()?+?"\t\t"?+?team.getTeamName()?+?"\t\t"?+?team.getTeamCity());
//?得到Team對象之後,叠代其中的ArrayList,其中存儲了球員對象.
System.out.println("球員名字\t場均得分\t球員類型");
for?(Iterator<Player>?itp?=?team.getPlayers().iterator();?itp.hasNext();)?{
Player?player?=?itp.next();
if?(player.getPlayerPosition().equals("前鋒"))
player?=?(Forward)?player;
else?if?(player.getPlayerPosition().equals("中鋒"))
player?=?(Center)?player;
else
player?=?(Guard)?player;
System.out.println(player);
}
}
}
//?先根據球隊編號,再刪除球員,如沒有球隊/員則會提示.
public?static?void?deletePlayer(Map<String,?Team>?teams)?{
System.out.println("請輸入要刪除的球隊編號");
String?teamID?=?sc.nextLine();
//?判斷map映射中是否存在輸入的球隊編號,無則跳回選擇界面.
if?(teams.containsKey(teamID))?{
Team?team?=?teams.get(teamID);
System.out.println("請輸入球員姓名:");
String?playerName?=?sc.nextLine();
boolean?flag?=?false;
for?(Iterator<Player>?it?=?team.getPlayers().iterator();?it.hasNext();)?{
Player?tmp?=?it.next();
if?(playerName.equals(tmp.getPlayerName()))?{
flag?=?true;
it.remove();
System.out.println("刪除成功");
break;
}
}
if?(!flag)
System.out.println("刪除失敗,無此球員");
}?else
System.out.println("無此球隊,請重新選擇功能.");
}
//?導出球隊信息到當前目錄.
public?static?void?exportInfo(Map<String,?Team>?teams)?throws?IOException?{
Set<String>?keyset?=?teams.keySet();
//?通過判斷keySet的長度判斷是否輸入過球隊信息.
if?(keyset.size()?!=?0)?{
BufferedWriter?bfw?=?new?BufferedWriter(new?FileWriter("Teams.txt"));
for?(Iterator<String>?it?=?keyset.iterator();?it.hasNext();)?{
String?tmp?=?it.next();
Team?team?=?teams.get(tmp);
bfw.write("球隊編號\t球隊名稱\t球隊所在城市");
bfw.newLine();
bfw.write(team.getTeamID()?+?"\t\t"?+?team.getTeamName()?+?"\t\t"?+?team.getTeamCity());
bfw.newLine();
}
bfw.close();
}?else?{
System.out.println("請先輸入球隊信息,再導出.");
}
}
//?退出系統.
public?static?void?exit()?{
System.out.println("歡迎下次再來.");
}
}
Team.java
import?java.util.ArrayList;public?class?Team?{
private?String?teamID; //?球隊編號
private?String?teamName; //?球隊名字
private?String?teamCity; //?球隊所在城市
private?ArrayList<Player>?players; //?球員集合
public?Team()?{?//?實例化Team的同時,實例化ArrayList集合.
players?=?new?ArrayList<>();
}
//?各屬性get和set方法
public?String?getTeamID()?{
return?teamID;
}
public?void?setTeamID(String?teamID)?{
this.teamID?=?teamID;
}
public?String?getTeamName()?{
return?teamName;
}
public?void?setTeamName(String?teamName)?{
this.teamName?=?teamName;
}
public?String?getTeamCity()?{
return?teamCity;
}
public?void?setTeamCity(String?teamCity)?{
this.teamCity?=?teamCity;
}
public?ArrayList<Player>?getPlayers()?{
return?players;
}
//?players的set方法,直接將球員添加到ArrayList中.
public?void?setPlayers(Player?player)?{
players.add(player);
}
}
Player.java
public?class?Player?{protected?String?playerName; //?球員姓名
protected?double?pointsPerGame; //?場均得分
protected?String?playerPosition; //?球員類型
//?各個屬性的get,set方法
public?String?getPlayerName()?{
return?playerName;
}
public?void?setPlayerName(String?playerName)?{
this.playerName?=?playerName;
}
public?double?getPointsPerGame()?{
return?pointsPerGame;
}
public?void?setPointsPerGame(double?pointsPerGame)?{
this.pointsPerGame?=?pointsPerGame;
}
public?String?getPlayerPosition()?{
return?playerPosition;
}
public?void?setPlayerPosition(String?playerPosition)?{
this.playerPosition?=?playerPosition;
}
//?重寫toString方法,方便輸出
public?String?toString()?{
return?playerName?+?"\t\t"?+?pointsPerGame?+?"\t\t"?+?playerPosition;
}
}
Forward.java
public?class?Forward?extends?Player?{private?double?reboundsPerGame;?//?場均籃板
//?get,set方法
public?double?getReboundsPerGame()?{
return?reboundsPerGame;
}
public?void?setReboundsPerGame(double?reboundsPerGame)?{
this.reboundsPerGame?=?reboundsPerGame;
}
//?重寫toString方法,方便輸出
public?String?toString()?{
return?playerName?+?"\t\t"?+?pointsPerGame?+?"\t\t"?+?playerPosition?+?"\t\t"?+?"場均籃板\t\t"?+?reboundsPerGame;
}
}
Center.java
public?class?Center?extends?Player?{private?double?blocksPerGame;?//?場均蓋帽
//?get,set方法
public?double?getBlocksPerGame()?{
return?blocksPerGame;
}
public?void?setBlocksPerGame(double?blocksPerGame)?{
this.blocksPerGame?=?blocksPerGame;
}
//?重寫toString方法,方便輸出
public?String?toString()?{
return?playerName?+?"\t\t"?+?pointsPerGame?+?"\t\t"?+?playerPosition?+?"\t\t"?+?"場均蓋帽\t\t"?+?blocksPerGame;
}
}
Guard.java
public?class?Guard?extends?Player?{private?double?assistsPerGame;?//?場均助攻
//?get,set方法
public?double?getAssistsPerGame()?{
return?assistsPerGame;
}
public?void?setAssistsPerGame(double?assistsPerGame)?{
this.assistsPerGame?=?assistsPerGame;
}
//?重寫toString方法,方便輸出
public?String?toString()?{
return?playerName?+?"\t\t"?+?pointsPerGame?+?"\t\t"?+?playerPosition?+?"\t\t"?+?"場均助攻\t\t"?+?assistsPerGame;
}
}
除了註釋外有不懂的追問,功能都測試過可以使用,求采納.