Write a program to keep records and perform statistical analysis for a team of players. The information of each Player contains ID, Name, Gender, match scores int[] (size should be total matches played), The program will prompt the user to choose the operation of records from a menu on JFrame as shown below:
============================================
                                            Menu
============================================
1. Add Player record
2. Delete Player record
3. Update Player record
4. View all Players (in JTable on JFrame)
5. Calculate the average of a selected Player’s score.
6. Find Player by ID (display details of player in Jtextarea).
Ask the user to enter his/her choice then perform the desired function.
 Note: All records store in a Array List of Players and use JFrame.
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Main extends JFrame {
private ArrayList<Player> players;
private JPanel rootPanel;
public Main() {
players = new ArrayList<>();
players.add(new Player(1, "1", 'M', new int[]{1, 23}));
players.add(new Player(2, "22", 'F', new int[]{1, 2}));
players.add(new Player(3, "33", 'F', new int[]{0, 2}));
players.add(new Player(41, "11", 'M', new int[]{11, 223}));
rootPanel = new JPanel();
add(rootPanel);
menu();
//pack();
setSize(450, 300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
private void modifyList(int item) {
String[] labelsNames = {"ID", "Name", "Gender", "Scores"};
JLabel[] jLabels = new JLabel[labelsNames.length];
JTextField[] jTextFields = new JTextField[jLabels.length];
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
for (int i = 0; i < labelsNames.length; i++) {
jLabels[i] = new JLabel(labelsNames[i]);
jTextFields[i] = new JTextField();
jTextFields[i].setPreferredSize(new Dimension(100, 20));
if (i > 0) {
jTextFields[i].setEditable(item != 2);
}
JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
jPanel.add(jLabels[i]);
jPanel.add(jTextFields[i]);
mainPanel.add(jPanel);
}
JButton jButton = new JButton(item == 1 ? "Add" : item == 2 ? "Delete" : item == 3 ? "Update" : "?");
jButton.addActionListener(e -> {
if (item == 1) {
try {
if (findPlayer(Integer.parseInt(jTextFields[0].getText())) == null) {
String[] values = jTextFields[3].getText().split(" ");
int[] scores = new int[values.length];
for (int i = 0; i < values.length; i++) {
scores[i] = Integer.parseInt(values[i]);
}
players.add(new Player(Integer.parseInt(jTextFields[0].getText()), jTextFields[1].getText(),
jTextFields[2].getText().charAt(0), scores));
}
} catch (Exception ex) {
}
} else if (item == 2) {
try {
Player player = findPlayer(Integer.parseInt(jTextFields[0].getText()));
if (player != null) {
players.remove(player);
}
} catch (Exception ex) {
}
} else if (item == 3) {
try {
Player player = findPlayer(Integer.parseInt(jTextFields[0].getText()));
if (player != null) {
if (jTextFields[1].getText().length() > 0) {
player.setName(jTextFields[1].getText());
}
if (jTextFields[2].getText().length() > 0) {
player.setGender(jTextFields[2].getText().charAt(0));
}
if (jTextFields[3].getText().length() > 0) {
String[] values = jTextFields[3].getText().split(" ");
int[] scores = new int[values.length];
for (int i = 0; i < values.length; i++) {
scores[i] = Integer.parseInt(values[i]);
}
player.setMatchScores(scores);
}
}
} catch (Exception ex) {
}
}
});
JButton jBackButton = new JButton("Back");
jBackButton.addActionListener(e -> {
menu();
});
mainPanel.add(jButton);
mainPanel.add(jBackButton);
rootPanel.removeAll();
rootPanel.add(mainPanel);
refresh();
}
private void average() {
String[] labelsNames = {"ID", "Average"};
JLabel[] jLabels = new JLabel[labelsNames.length];
JTextField[] jTextFields = new JTextField[jLabels.length];
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
for (int i = 0; i < labelsNames.length; i++) {
jLabels[i] = new JLabel(labelsNames[i]);
jTextFields[i] = new JTextField();
jTextFields[i].setMaximumSize(new Dimension(100, 20));
if (i > 0) {
jTextFields[i].setEditable(false);
}
JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
jPanel.add(jLabels[i]);
jPanel.add(jTextFields[i]);
mainPanel.add(jPanel);
}
JButton jButton = new JButton("Average");
jButton.addActionListener(e -> {
try {
Player player = findPlayer(Integer.parseInt(jTextFields[0].getText()));
if (player != null) {
int[] scores = player.getMatchScores();
double average = 0;
for (int i = 0; i < scores.length; i++) {
average += scores[i];
}
jTextFields[labelsNames.length - 1].setText(String.format("%.2f", average / scores.length));
}
} catch (Exception ex) {
}
});
JButton jBackButton = new JButton("Back");
jBackButton.addActionListener(e -> {
menu();
});
mainPanel.add(jButton);
mainPanel.add(jBackButton);
rootPanel.removeAll();
rootPanel.add(mainPanel);
refresh();
}
private void displayTable() {
String[][] data = new String[players.size()][];
for (int i = 0; i < data.length; i++) {
data[i] = new String[4];
data[i][0] = Integer.toString(players.get(i).getId());
data[i][1] = players.get(i).getName();
data[i][2] = Character.toString(players.get(i).getGender());
data[i][3] = Arrays.toString(players.get(i).getMatchScores());
}
String[] columnNames = {"ID", "Name", "Gender", "Scores"};
JTable jTable = new JTable(data, columnNames);
JScrollPane jScrollPane = new JScrollPane(jTable);
jScrollPane.setPreferredSize(new Dimension(400, 180));
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JButton jBackButton = new JButton("Back");
jBackButton.addActionListener(e -> {
menu();
});
mainPanel.add(jScrollPane);
mainPanel.add(jBackButton);
rootPanel.removeAll();
rootPanel.add(mainPanel);
refresh();
}
private void findPlayer() {
JLabel jLabel = new JLabel("ID");
JTextField jTextField = new JTextField();
JTextArea jTextArea = new JTextArea();
jTextArea.setEditable(false);
jTextArea.setLineWrap(false);
jTextArea.setSize(200, 100);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
jPanel.add(jLabel);
jPanel.add(jTextField);
mainPanel.add(jPanel);
mainPanel.add(jTextArea);
JButton jButton = new JButton("Find");
jButton.addActionListener(e -> {
try {
Player player = findPlayer(Integer.parseInt(jTextField.getText()));
if (player != null) {
jTextArea.setText(player.toString());
}
} catch (Exception ex) {
}
});
JButton jBackButton = new JButton("Back");
jBackButton.addActionListener(e -> {
menu();
});
mainPanel.add(jButton);
mainPanel.add(jBackButton);
rootPanel.removeAll();
rootPanel.add(mainPanel);
refresh();
}
private void menu() {
String[] buttonsNames = {"1. Add Player record",
"2. Delete Player record",
"3. Update Player record",
"4. View all Players",
"5. Calculate the average of a selected Player’s score",
"6. Find Player by ID"};
JButton[] jButtons = new JButton[buttonsNames.length];
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
for (int i = 0; i < buttonsNames.length; i++) {
jButtons[i] = new JButton(buttonsNames[i]);
JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
jPanel.add(jButtons[i]);
mainPanel.add(jPanel);
}
jButtons[0].addActionListener(e -> {
modifyList(1);
});
jButtons[1].addActionListener(e -> {
modifyList(2);
});
jButtons[2].addActionListener(e -> {
modifyList(3);
});
jButtons[3].addActionListener(e -> {
displayTable();
});
jButtons[4].addActionListener(e -> {
average();
});
jButtons[5].addActionListener(e -> {
findPlayer();
});
rootPanel.removeAll();
rootPanel.add(mainPanel);
refresh();
}
private void refresh(){
revalidate();
repaint();
}
private Player findPlayer(int id) {
for (Player player : players) {
if (id == player.getId()) {
return player;
}
}
return null;
}
public static void main(String[] args) {
new Main();
}
}
import java.util.Arrays;
public class Player {
private int id;
private String name;
private char gender;
private int[] matchScores;
public Player(int id, String name, char gender, int[] matchScores) {
this.id = id;
this.name = name;
this.gender = gender;
this.matchScores = matchScores;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public int[] getMatchScores() {
return matchScores;
}
public void setMatchScores(int[] matchScores) {
this.matchScores = matchScores;
}
@Override
public String toString() {
return id + " " + name + " " + gender + "\nScores: " + Arrays.toString(matchScores);
}
}
Comments
Leave a comment