import javax.swing.
*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.io.*;
public class GymManagementSystem {
public static void main(String[] args) {
new GymGUI();
class GymGUI extends JFrame implements ActionListener {
private ArrayList<GymMember> memberList;
// Main components
private JTabbedPane tabbedPane;
private JPanel regularMemberPanel, premiumMemberPanel, displayPanel;
// Common components
private JTextField tfId, tfName, tfLocation, tfPhone, tfEmail;
private JComboBox<String> dobYearComboBox, dobMonthComboBox, dobDayComboBox;
private JComboBox<String> msYearComboBox, msMonthComboBox, msDayComboBox;
private JRadioButton rbMale, rbFemale;
private ButtonGroup genderGroup;
// Regular member components
private JTextField tfReferralSource, tfRemovalReason;
private JComboBox<String> planComboBox;
// Premium member components
private JTextField tfTrainerName, tfPaidAmount;
private JLabel lblPremiumCharge, lblDiscountAmount;
// Display components
private JTextArea displayArea;
public GymGUI() {
// Initialize member list
memberList = new ArrayList<>();
// Set up main frame
setTitle("Gym Management System");
setSize(900, 700);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// Create tabbed pane
tabbedPane = new JTabbedPane();
// Create panels
regularMemberPanel = createRegularMemberPanel();
premiumMemberPanel = createPremiumMemberPanel();
displayPanel = createDisplayPanel();
// Add panels to tabbed pane
tabbedPane.addTab("Regular Member", regularMemberPanel);
tabbedPane.addTab("Premium Member", premiumMemberPanel);
tabbedPane.addTab("Display Members", displayPanel);
// Add tabbed pane to frame
add(tabbedPane, BorderLayout.CENTER);
// Add menu bar
createMenuBar();
setVisible(true);
private JPanel createRegularMemberPanel() {
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(new Color(240, 248, 255)); // Light blue background
// Common fields
createCommonFields(panel, 20);
// Regular member specific fields
JLabel labelReferralSource = new JLabel("Referral Source:");
labelReferralSource.setBounds(20, 290, 150, 20);
panel.add(labelReferralSource);
tfReferralSource = new JTextField();
tfReferralSource.setBounds(180, 290, 200, 20);
panel.add(tfReferralSource);
JLabel labelRemovalReason = new JLabel("Removal Reason:");
labelRemovalReason.setBounds(20, 320, 150, 20);
panel.add(labelRemovalReason);
tfRemovalReason = new JTextField();
tfRemovalReason.setBounds(180, 320, 200, 20);
panel.add(tfRemovalReason);
JLabel labelPlan = new JLabel("Plan:");
labelPlan.setBounds(20, 350, 150, 20);
panel.add(labelPlan);
String[] plans = {"Basic", "Standard", "Deluxe"};
planComboBox = new JComboBox<>(plans);
planComboBox.setBounds(180, 350, 200, 20);
panel.add(planComboBox);
// Regular member buttons
JButton btnAddRegular = createStyledButton("Add Regular Member", 20, 400, 200, 30, new
Color(100, 200, 100));
btnAddRegular.addActionListener(e -> addRegularMember());
panel.add(btnAddRegular);
JButton btnRevertRegular = createStyledButton("Revert Regular Member", 240, 400, 200, 30, new
Color(200, 100, 100));
btnRevertRegular.addActionListener(e -> revertRegularMember());
panel.add(btnRevertRegular);
JButton btnUpgradePlan = createStyledButton("Upgrade Plan", 20, 440, 200, 30, new Color(100,
150, 200));
btnUpgradePlan.addActionListener(e -> upgradePlan());
panel.add(btnUpgradePlan);
return panel;
private JPanel createPremiumMemberPanel() {
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(new Color(255, 240, 245)); // Light pink background
// Common fields
createCommonFields(panel, 20);
// Premium member specific fields
JLabel labelTrainerName = new JLabel("Trainer's Name:");
labelTrainerName.setBounds(20, 290, 150, 20);
panel.add(labelTrainerName);
tfTrainerName = new JTextField();
tfTrainerName.setBounds(180, 290, 200, 20);
panel.add(tfTrainerName);
JLabel labelPaidAmount = new JLabel("Paid Amount:");
labelPaidAmount.setBounds(20, 320, 150, 20);
panel.add(labelPaidAmount);
tfPaidAmount = new JTextField();
tfPaidAmount.setBounds(180, 320, 200, 20);
panel.add(tfPaidAmount);
lblPremiumCharge = new JLabel("Premium Charge: 50000.0");
lblPremiumCharge.setBounds(20, 350, 200, 20);
panel.add(lblPremiumCharge);
lblDiscountAmount = new JLabel("Discount Amount: 0.0");
lblDiscountAmount.setBounds(20, 380, 200, 20);
panel.add(lblDiscountAmount);
// Premium member buttons
JButton btnAddPremium = createStyledButton("Add Premium Member", 20, 420, 200, 30, new
Color(100, 100, 200));
btnAddPremium.addActionListener(e -> addPremiumMember());
panel.add(btnAddPremium);
JButton btnRevertPremium = createStyledButton("Revert Premium Member", 240, 420, 200, 30,
new Color(200, 100, 100));
btnRevertPremium.addActionListener(e -> revertPremiumMember());
panel.add(btnRevertPremium);
JButton btnPayDueAmount = createStyledButton("Pay Due Amount", 20, 460, 200, 30, new
Color(100, 200, 150));
btnPayDueAmount.addActionListener(e -> payDueAmount());
panel.add(btnPayDueAmount);
JButton btnCalculateDiscount = createStyledButton("Calculate Discount", 240, 460, 200, 30, new
Color(200, 150, 100));
btnCalculateDiscount.addActionListener(e -> calculateDiscount());
panel.add(btnCalculateDiscount);
return panel;
private JPanel createDisplayPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.setBackground(new Color(240, 255, 240)); // Light green background
// Create display area
displayArea = new JTextArea();
displayArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(displayArea);
// Create buttons panel
JPanel buttonPanel = new JPanel(new FlowLayout());
JButton btnDisplay = createStyledButton("Display Members", 10, 10, 180, 30, new Color(150, 150,
200));
btnDisplay.addActionListener(e -> displayMembers());
buttonPanel.add(btnDisplay);
JButton btnSaveToFile = createStyledButton("Save to File", 10, 10, 180, 30, new Color(150, 200,
150));
btnSaveToFile.addActionListener(e -> saveToFile());
buttonPanel.add(btnSaveToFile);
JButton btnReadFromFile = createStyledButton("Read from File", 10, 10, 180, 30, new Color(200,
150, 150));
btnReadFromFile.addActionListener(e -> readFromFile());
buttonPanel.add(btnReadFromFile);
JButton btnClear = createStyledButton("Clear Display", 10, 10, 180, 30, new Color(200, 100, 100));
btnClear.addActionListener(e -> displayArea.setText(""));
buttonPanel.add(btnClear);
// Add components to panel
panel.add(buttonPanel, BorderLayout.NORTH);
panel.add(scrollPane, BorderLayout.CENTER);
return panel;
private void createCommonFields(JPanel panel, int yOffset) {
// ID
JLabel labelId = new JLabel("Member ID:");
labelId.setBounds(20, yOffset, 150, 20);
panel.add(labelId);
tfId = new JTextField();
tfId.setBounds(180, yOffset, 200, 20);
panel.add(tfId);
// Name
JLabel labelName = new JLabel("Name:");
labelName.setBounds(20, yOffset + 30, 150, 20);
panel.add(labelName);
tfName = new JTextField();
tfName.setBounds(180, yOffset + 30, 200, 20);
panel.add(tfName);
// Location
JLabel labelLocation = new JLabel("Location:");
labelLocation.setBounds(20, yOffset + 60, 150, 20);
panel.add(labelLocation);
tfLocation = new JTextField();
tfLocation.setBounds(180, yOffset + 60, 200, 20);
panel.add(tfLocation);
// Phone
JLabel labelPhone = new JLabel("Phone:");
labelPhone.setBounds(20, yOffset + 90, 150, 20);
panel.add(labelPhone);
tfPhone = new JTextField();
tfPhone.setBounds(180, yOffset + 90, 200, 20);
panel.add(tfPhone);
// Email
JLabel labelEmail = new JLabel("Email:");
labelEmail.setBounds(20, yOffset + 120, 150, 20);
panel.add(labelEmail);
tfEmail = new JTextField();
tfEmail.setBounds(180, yOffset + 120, 200, 20);
panel.add(tfEmail);
// Gender
JLabel labelGender = new JLabel("Gender:");
labelGender.setBounds(20, yOffset + 150, 150, 20);
panel.add(labelGender);
rbMale = new JRadioButton("Male");
rbMale.setBounds(180, yOffset + 150, 80, 20);
panel.add(rbMale);
rbFemale = new JRadioButton("Female");
rbFemale.setBounds(260, yOffset + 150, 80, 20);
panel.add(rbFemale);
genderGroup = new ButtonGroup();
genderGroup.add(rbMale);
genderGroup.add(rbFemale);
// Date of Birth
JLabel labelDOB = new JLabel("Date of Birth:");
labelDOB.setBounds(20, yOffset + 180, 150, 20);
panel.add(labelDOB);
String[] years = new String[100];
String[] months = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
String[] days = new String[31];
for (int i = 0; i < 100; i++) years[i] = String.valueOf(2023 - i);
for (int i = 0; i < 31; i++) days[i] = String.valueOf(i + 1);
dobYearComboBox = new JComboBox<>(years);
dobYearComboBox.setBounds(180, yOffset + 180, 60, 20);
panel.add(dobYearComboBox);
dobMonthComboBox = new JComboBox<>(months);
dobMonthComboBox.setBounds(250, yOffset + 180, 50, 20);
panel.add(dobMonthComboBox);
dobDayComboBox = new JComboBox<>(days);
dobDayComboBox.setBounds(310, yOffset + 180, 50, 20);
panel.add(dobDayComboBox);
// Membership Start Date
JLabel labelMembershipStartDate = new JLabel("Membership Start Date:");
labelMembershipStartDate.setBounds(20, yOffset + 210, 150, 20);
panel.add(labelMembershipStartDate);
msYearComboBox = new JComboBox<>(years);
msYearComboBox.setBounds(180, yOffset + 210, 60, 20);
panel.add(msYearComboBox);
msMonthComboBox = new JComboBox<>(months);
msMonthComboBox.setBounds(250, yOffset + 210, 50, 20);
panel.add(msMonthComboBox);
msDayComboBox = new JComboBox<>(days);
msDayComboBox.setBounds(310, yOffset + 210, 50, 20);
panel.add(msDayComboBox);
// Common buttons
JButton btnActivate = createStyledButton("Activate Membership", 400, yOffset, 200, 30, new
Color(100, 200, 100));
btnActivate.addActionListener(e -> activateMembership());
panel.add(btnActivate);
JButton btnDeactivate = createStyledButton("Deactivate Membership", 400, yOffset + 40, 200, 30,
new Color(200, 100, 100));
btnDeactivate.addActionListener(e -> deactivateMembership());
panel.add(btnDeactivate);
JButton btnMarkAttendance = createStyledButton("Mark Attendance", 400, yOffset + 80, 200, 30,
new Color(100, 150, 200));
btnMarkAttendance.addActionListener(e -> markAttendance());
panel.add(btnMarkAttendance);
private JButton createStyledButton(String text, int x, int y, int width, int height, Color color) {
JButton button = new JButton(text);
button.setBounds(x, y, width, height);
button.setBackground(color);
button.setForeground(Color.WHITE);
button.setFocusPainted(false);
button.setBorder(BorderFactory.createRaisedBevelBorder());
return button;
private void createMenuBar() {
JMenuBar menuBar = new JMenuBar();
// File menu
JMenu fileMenu = new JMenu("File");
JMenuItem saveItem = new JMenuItem("Save Members");
saveItem.addActionListener(e -> saveToFile());
JMenuItem loadItem = new JMenuItem("Load Members");
loadItem.addActionListener(e -> readFromFile());
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(e -> System.exit(0));
fileMenu.add(saveItem);
fileMenu.add(loadItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
// Help menu
JMenu helpMenu = new JMenu("Help");
JMenuItem aboutItem = new JMenuItem("About");
aboutItem.addActionListener(e -> JOptionPane.showMessageDialog(this,
"Gym Management System\nVersion 1.0", "About", JOptionPane.INFORMATION_MESSAGE));
helpMenu.add(aboutItem);
// Add menus to menu bar
menuBar.add(fileMenu);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
// Action methods
private void addRegularMember() {
try {
int id = Integer.parseInt(tfId.getText());
if (isMemberIdExists(id)) {
JOptionPane.showMessageDialog(this, "Member ID already exists!", "Error",
JOptionPane.ERROR_MESSAGE);
return;
String name = tfName.getText();
String location = tfLocation.getText();
String phone = tfPhone.getText();
String email = tfEmail.getText();
String gender = rbMale.isSelected() ? "Male" : "Female";
String dob = dobYearComboBox.getSelectedItem() + "-" +
dobMonthComboBox.getSelectedItem() + "-" +
dobDayComboBox.getSelectedItem();
String membershipStartDate = msYearComboBox.getSelectedItem() + "-" +
msMonthComboBox.getSelectedItem() + "-" +
msDayComboBox.getSelectedItem();
String referralSource = tfReferralSource.getText();
RegularMember newMember = new RegularMember(id, name, location, phone, email,
gender, dob, membershipStartDate, referralSource);
memberList.add(newMember);
JOptionPane.showMessageDialog(this, "Regular member added successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid ID format!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
private void addPremiumMember() {
try {
int id = Integer.parseInt(tfId.getText());
if (isMemberIdExists(id)) {
JOptionPane.showMessageDialog(this, "Member ID already exists!", "Error",
JOptionPane.ERROR_MESSAGE);
return;
String name = tfName.getText();
String location = tfLocation.getText();
String phone = tfPhone.getText();
String email = tfEmail.getText();
String gender = rbMale.isSelected() ? "Male" : "Female";
String dob = dobYearComboBox.getSelectedItem() + "-" +
dobMonthComboBox.getSelectedItem() + "-" +
dobDayComboBox.getSelectedItem();
String membershipStartDate = msYearComboBox.getSelectedItem() + "-" +
msMonthComboBox.getSelectedItem() + "-" +
msDayComboBox.getSelectedItem();
String trainerName = tfTrainerName.getText();
PremiumMember newMember = new PremiumMember(id, name, location, phone, email,
gender, dob, membershipStartDate, trainerName);
memberList.add(newMember);
JOptionPane.showMessageDialog(this, "Premium member added successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid ID format!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
private boolean isMemberIdExists(int id) {
for (GymMember member : memberList) {
if (member.getId() == id) {
return true;
return false;
}
private void activateMembership() {
try {
int id = Integer.parseInt(tfId.getText());
GymMember member = findMemberById(id);
if (member != null) {
member.activateMembership();
JOptionPane.showMessageDialog(this, "Membership activated successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "Member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void deactivateMembership() {
try {
int id = Integer.parseInt(tfId.getText());
GymMember member = findMemberById(id);
if (member != null) {
member.deactivateMembership();
JOptionPane.showMessageDialog(this, "Membership deactivated successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "Member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void markAttendance() {
try {
int id = Integer.parseInt(tfId.getText());
GymMember member = findMemberById(id);
if (member != null) {
if (member.isActiveStatus()) {
member.markAttendance();
JOptionPane.showMessageDialog(this, "Attendance marked successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "Member is not active!", "Error",
JOptionPane.ERROR_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "Member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
}
private void upgradePlan() {
try {
int id = Integer.parseInt(tfId.getText());
String plan = (String) planComboBox.getSelectedItem();
for (GymMember member : memberList) {
if (member.getId() == id && member instanceof RegularMember) {
RegularMember rm = (RegularMember) member;
String result = rm.upgradePlan(plan.toLowerCase());
JOptionPane.showMessageDialog(this, result, "Plan Upgrade",
JOptionPane.INFORMATION_MESSAGE);
return;
JOptionPane.showMessageDialog(this, "Regular member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void revertRegularMember() {
try {
int id = Integer.parseInt(tfId.getText());
String removalReason = tfRemovalReason.getText();
for (GymMember member : memberList) {
if (member.getId() == id && member instanceof RegularMember) {
((RegularMember) member).revertRegularMember(removalReason);
JOptionPane.showMessageDialog(this, "Regular member reverted successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
return;
JOptionPane.showMessageDialog(this, "Regular member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void revertPremiumMember() {
try {
int id = Integer.parseInt(tfId.getText());
for (GymMember member : memberList) {
if (member.getId() == id && member instanceof PremiumMember) {
((PremiumMember) member).revertPremiumMember();
JOptionPane.showMessageDialog(this, "Premium member reverted successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
return;
JOptionPane.showMessageDialog(this, "Premium member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void payDueAmount() {
try {
int id = Integer.parseInt(tfId.getText());
double amount = Double.parseDouble(tfPaidAmount.getText());
for (GymMember member : memberList) {
if (member.getId() == id && member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
String result = pm.payDueAmount(amount);
JOptionPane.showMessageDialog(this, result, "Payment",
JOptionPane.INFORMATION_MESSAGE);
lblDiscountAmount.setText("Discount Amount: " + pm.getDiscountAmount());
return;
JOptionPane.showMessageDialog(this, "Premium member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid amount format!", "Error",
JOptionPane.ERROR_MESSAGE);
private void calculateDiscount() {
try {
int id = Integer.parseInt(tfId.getText());
for (GymMember member : memberList) {
if (member.getId() == id && member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
pm.calculateDiscount();
lblDiscountAmount.setText("Discount Amount: " + pm.getDiscountAmount());
JOptionPane.showMessageDialog(this, "Discount calculated successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
return;
JOptionPane.showMessageDialog(this, "Premium member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void displayMembers() {
displayArea.setText("");
if (memberList.isEmpty()) {
displayArea.append("No members found in the system.\n");
return;
for (GymMember member : memberList) {
displayArea.append("Member Type: " + (member instanceof RegularMember ? "Regular" :
"Premium") + "\n");
displayArea.append("ID: " + member.getId() + "\n");
displayArea.append("Name: " + member.getName() + "\n");
displayArea.append("Location: " + member.getLocation() + "\n");
displayArea.append("Phone: " + member.getPhone() + "\n");
displayArea.append("Email: " + member.getEmail() + "\n");
displayArea.append("Gender: " + member.getGender() + "\n");
displayArea.append("DOB: " + member.getDOB() + "\n");
displayArea.append("Membership Start Date: " + member.getMembershipStartDate() + "\n");
displayArea.append("Attendance: " + member.getAttendance() + "\n");
displayArea.append("Loyalty Points: " + member.getLoyaltyPoints() + "\n");
displayArea.append("Active Status: " + member.isActiveStatus() + "\n");
if (member instanceof RegularMember) {
RegularMember rm = (RegularMember) member;
displayArea.append("Plan: " + rm.getPlan() + "\n");
displayArea.append("Price: " + rm.getPrice() + "\n");
displayArea.append("Referral Source: " + rm.getReferralSource() + "\n");
if (!rm.getRemovalReason().isEmpty()) {
displayArea.append("Removal Reason: " + rm.getRemovalReason() + "\n");
} else if (member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
displayArea.append("Personal Trainer: " + pm.getPersonalTrainer() + "\n");
displayArea.append("Paid Amount: " + pm.getPaidAmount() + "\n");
displayArea.append("Premium Charge: " + pm.getPremiumCharge() + "\n");
displayArea.append("Is Full Payment: " + pm.getIsFullPayment() + "\n");
if (pm.getIsFullPayment()) {
displayArea.append("Discount Amount: " + pm.getDiscountAmount() + "\n");
displayArea.append("\n----------------------------------------\n\n");
private void saveToFile() {
try (FileWriter writer = new FileWriter("MemberDetails.txt")) {
writer.write(String.format("%-5s %-15s %-15s %-15s %-25s %-20s %-10s %-10s %-10s %-15s %-10s
%-15s %-15s %-15s\n",
"ID", "Name", "Location", "Phone", "Email", "Membership Start Date", "Plan", "Price",
"Attendance", "Loyalty Points", "Active", "Full Payment", "Discount", "Net Paid"));
for (GymMember member : memberList) {
String type = member instanceof RegularMember ? "Regular" : "Premium";
String plan = "";
double price = 0;
boolean fullPayment = false;
double discount = 0;
double netPaid = 0;
if (member instanceof RegularMember) {
RegularMember rm = (RegularMember) member;
plan = rm.getPlan();
price = rm.getPrice();
} else if (member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
plan = "Premium";
price = pm.getPremiumCharge();
fullPayment = pm.getIsFullPayment();
discount = pm.getDiscountAmount();
netPaid = pm.getPaidAmount();
writer.write(String.format("%-5d %-15s %-15s %-15s %-25s %-20s %-10s %-10.2f %-10d %-15.2f
%-10s %-15s %-15.2f %-15.2f\n",
member.getId(), member.getName(), member.getLocation(), member.getPhone(),
member.getEmail(), member.getMembershipStartDate(), plan, price,
member.getAttendance(), member.getLoyaltyPoints(), member.isActiveStatus(),
fullPayment, discount, netPaid));
JOptionPane.showMessageDialog(this, "Member details saved to file successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "Error saving to file: " + e.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
private void readFromFile() {
try (BufferedReader reader = new BufferedReader(new FileReader("MemberDetails.txt"))) {
// Skip header line
reader.readLine();
String line;
displayArea.setText("");
displayArea.append("Member Details from File:\n\n");
while ((line = reader.readLine()) != null) {
displayArea.append(line + "\n");
JOptionPane.showMessageDialog(this, "Member details loaded from file successfully!",
"Success", JOptionPane.INFORMATION_MESSAGE);
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(this, "File not found!", "Error", JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "Error reading file: " + e.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
private GymMember findMemberById(int id) {
for (GymMember member : memberList) {
if (member.getId() == id) {
return member;
return null;
@Override
public void actionPerformed(ActionEvent e) {
// Implemented for interface, but we're using lambda expressions for button actions
}
}