import [Link].
*;
import [Link].*;
import [Link].*;
import [Link];
import [Link].*;
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
[Link]("Regular Member", regularMemberPanel);
[Link]("Premium Member", premiumMemberPanel);
[Link]("Display Members", displayPanel);
// Add tabbed pane to frame
add(tabbedPane, [Link]);
// Add menu bar
createMenuBar();
setVisible(true);
private JPanel createRegularMemberPanel() {
JPanel panel = new JPanel();
[Link](null);
[Link](new Color(240, 248, 255)); // Light blue background
// Common fields
createCommonFields(panel, 20);
// Regular member specific fields
JLabel labelReferralSource = new JLabel("Referral Source:");
[Link](20, 290, 150, 20);
[Link](labelReferralSource);
tfReferralSource = new JTextField();
[Link](180, 290, 200, 20);
[Link](tfReferralSource);
JLabel labelRemovalReason = new JLabel("Removal Reason:");
[Link](20, 320, 150, 20);
[Link](labelRemovalReason);
tfRemovalReason = new JTextField();
[Link](180, 320, 200, 20);
[Link](tfRemovalReason);
JLabel labelPlan = new JLabel("Plan:");
[Link](20, 350, 150, 20);
[Link](labelPlan);
String[] plans = {"Basic", "Standard", "Deluxe"};
planComboBox = new JComboBox<>(plans);
[Link](180, 350, 200, 20);
[Link](planComboBox);
// Regular member buttons
JButton btnAddRegular = createStyledButton("Add Regular Member", 20, 400, 200, 30, new
Color(100, 200, 100));
[Link](e -> addRegularMember());
[Link](btnAddRegular);
JButton btnRevertRegular = createStyledButton("Revert Regular Member", 240, 400, 200, 30, new
Color(200, 100, 100));
[Link](e -> revertRegularMember());
[Link](btnRevertRegular);
JButton btnUpgradePlan = createStyledButton("Upgrade Plan", 20, 440, 200, 30, new Color(100,
150, 200));
[Link](e -> upgradePlan());
[Link](btnUpgradePlan);
return panel;
private JPanel createPremiumMemberPanel() {
JPanel panel = new JPanel();
[Link](null);
[Link](new Color(255, 240, 245)); // Light pink background
// Common fields
createCommonFields(panel, 20);
// Premium member specific fields
JLabel labelTrainerName = new JLabel("Trainer's Name:");
[Link](20, 290, 150, 20);
[Link](labelTrainerName);
tfTrainerName = new JTextField();
[Link](180, 290, 200, 20);
[Link](tfTrainerName);
JLabel labelPaidAmount = new JLabel("Paid Amount:");
[Link](20, 320, 150, 20);
[Link](labelPaidAmount);
tfPaidAmount = new JTextField();
[Link](180, 320, 200, 20);
[Link](tfPaidAmount);
lblPremiumCharge = new JLabel("Premium Charge: 50000.0");
[Link](20, 350, 200, 20);
[Link](lblPremiumCharge);
lblDiscountAmount = new JLabel("Discount Amount: 0.0");
[Link](20, 380, 200, 20);
[Link](lblDiscountAmount);
// Premium member buttons
JButton btnAddPremium = createStyledButton("Add Premium Member", 20, 420, 200, 30, new
Color(100, 100, 200));
[Link](e -> addPremiumMember());
[Link](btnAddPremium);
JButton btnRevertPremium = createStyledButton("Revert Premium Member", 240, 420, 200, 30,
new Color(200, 100, 100));
[Link](e -> revertPremiumMember());
[Link](btnRevertPremium);
JButton btnPayDueAmount = createStyledButton("Pay Due Amount", 20, 460, 200, 30, new
Color(100, 200, 150));
[Link](e -> payDueAmount());
[Link](btnPayDueAmount);
JButton btnCalculateDiscount = createStyledButton("Calculate Discount", 240, 460, 200, 30, new
Color(200, 150, 100));
[Link](e -> calculateDiscount());
[Link](btnCalculateDiscount);
return panel;
private JPanel createDisplayPanel() {
JPanel panel = new JPanel(new BorderLayout());
[Link](new Color(240, 255, 240)); // Light green background
// Create display area
displayArea = new JTextArea();
[Link](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));
[Link](e -> displayMembers());
[Link](btnDisplay);
JButton btnSaveToFile = createStyledButton("Save to File", 10, 10, 180, 30, new Color(150, 200,
150));
[Link](e -> saveToFile());
[Link](btnSaveToFile);
JButton btnReadFromFile = createStyledButton("Read from File", 10, 10, 180, 30, new Color(200,
150, 150));
[Link](e -> readFromFile());
[Link](btnReadFromFile);
JButton btnClear = createStyledButton("Clear Display", 10, 10, 180, 30, new Color(200, 100, 100));
[Link](e -> [Link](""));
[Link](btnClear);
// Add components to panel
[Link](buttonPanel, [Link]);
[Link](scrollPane, [Link]);
return panel;
private void createCommonFields(JPanel panel, int yOffset) {
// ID
JLabel labelId = new JLabel("Member ID:");
[Link](20, yOffset, 150, 20);
[Link](labelId);
tfId = new JTextField();
[Link](180, yOffset, 200, 20);
[Link](tfId);
// Name
JLabel labelName = new JLabel("Name:");
[Link](20, yOffset + 30, 150, 20);
[Link](labelName);
tfName = new JTextField();
[Link](180, yOffset + 30, 200, 20);
[Link](tfName);
// Location
JLabel labelLocation = new JLabel("Location:");
[Link](20, yOffset + 60, 150, 20);
[Link](labelLocation);
tfLocation = new JTextField();
[Link](180, yOffset + 60, 200, 20);
[Link](tfLocation);
// Phone
JLabel labelPhone = new JLabel("Phone:");
[Link](20, yOffset + 90, 150, 20);
[Link](labelPhone);
tfPhone = new JTextField();
[Link](180, yOffset + 90, 200, 20);
[Link](tfPhone);
// Email
JLabel labelEmail = new JLabel("Email:");
[Link](20, yOffset + 120, 150, 20);
[Link](labelEmail);
tfEmail = new JTextField();
[Link](180, yOffset + 120, 200, 20);
[Link](tfEmail);
// Gender
JLabel labelGender = new JLabel("Gender:");
[Link](20, yOffset + 150, 150, 20);
[Link](labelGender);
rbMale = new JRadioButton("Male");
[Link](180, yOffset + 150, 80, 20);
[Link](rbMale);
rbFemale = new JRadioButton("Female");
[Link](260, yOffset + 150, 80, 20);
[Link](rbFemale);
genderGroup = new ButtonGroup();
[Link](rbMale);
[Link](rbFemale);
// Date of Birth
JLabel labelDOB = new JLabel("Date of Birth:");
[Link](20, yOffset + 180, 150, 20);
[Link](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] = [Link](2023 - i);
for (int i = 0; i < 31; i++) days[i] = [Link](i + 1);
dobYearComboBox = new JComboBox<>(years);
[Link](180, yOffset + 180, 60, 20);
[Link](dobYearComboBox);
dobMonthComboBox = new JComboBox<>(months);
[Link](250, yOffset + 180, 50, 20);
[Link](dobMonthComboBox);
dobDayComboBox = new JComboBox<>(days);
[Link](310, yOffset + 180, 50, 20);
[Link](dobDayComboBox);
// Membership Start Date
JLabel labelMembershipStartDate = new JLabel("Membership Start Date:");
[Link](20, yOffset + 210, 150, 20);
[Link](labelMembershipStartDate);
msYearComboBox = new JComboBox<>(years);
[Link](180, yOffset + 210, 60, 20);
[Link](msYearComboBox);
msMonthComboBox = new JComboBox<>(months);
[Link](250, yOffset + 210, 50, 20);
[Link](msMonthComboBox);
msDayComboBox = new JComboBox<>(days);
[Link](310, yOffset + 210, 50, 20);
[Link](msDayComboBox);
// Common buttons
JButton btnActivate = createStyledButton("Activate Membership", 400, yOffset, 200, 30, new
Color(100, 200, 100));
[Link](e -> activateMembership());
[Link](btnActivate);
JButton btnDeactivate = createStyledButton("Deactivate Membership", 400, yOffset + 40, 200, 30,
new Color(200, 100, 100));
[Link](e -> deactivateMembership());
[Link](btnDeactivate);
JButton btnMarkAttendance = createStyledButton("Mark Attendance", 400, yOffset + 80, 200, 30,
new Color(100, 150, 200));
[Link](e -> markAttendance());
[Link](btnMarkAttendance);
private JButton createStyledButton(String text, int x, int y, int width, int height, Color color) {
JButton button = new JButton(text);
[Link](x, y, width, height);
[Link](color);
[Link]([Link]);
[Link](false);
[Link]([Link]());
return button;
private void createMenuBar() {
JMenuBar menuBar = new JMenuBar();
// File menu
JMenu fileMenu = new JMenu("File");
JMenuItem saveItem = new JMenuItem("Save Members");
[Link](e -> saveToFile());
JMenuItem loadItem = new JMenuItem("Load Members");
[Link](e -> readFromFile());
JMenuItem exitItem = new JMenuItem("Exit");
[Link](e -> [Link](0));
[Link](saveItem);
[Link](loadItem);
[Link]();
[Link](exitItem);
// Help menu
JMenu helpMenu = new JMenu("Help");
JMenuItem aboutItem = new JMenuItem("About");
[Link](e -> [Link](this,
"Gym Management System\nVersion 1.0", "About", JOptionPane.INFORMATION_MESSAGE));
[Link](aboutItem);
// Add menus to menu bar
[Link](fileMenu);
[Link](helpMenu);
setJMenuBar(menuBar);
// Action methods
private void addRegularMember() {
try {
int id = [Link]([Link]());
if (isMemberIdExists(id)) {
[Link](this, "Member ID already exists!", "Error",
JOptionPane.ERROR_MESSAGE);
return;
String name = [Link]();
String location = [Link]();
String phone = [Link]();
String email = [Link]();
String gender = [Link]() ? "Male" : "Female";
String dob = [Link]() + "-" +
[Link]() + "-" +
[Link]();
String membershipStartDate = [Link]() + "-" +
[Link]() + "-" +
[Link]();
String referralSource = [Link]();
RegularMember newMember = new RegularMember(id, name, location, phone, email,
gender, dob, membershipStartDate, referralSource);
[Link](newMember);
[Link](this, "Regular member added successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid ID format!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
[Link](this, "Error: " + [Link](), "Error",
JOptionPane.ERROR_MESSAGE);
private void addPremiumMember() {
try {
int id = [Link]([Link]());
if (isMemberIdExists(id)) {
[Link](this, "Member ID already exists!", "Error",
JOptionPane.ERROR_MESSAGE);
return;
String name = [Link]();
String location = [Link]();
String phone = [Link]();
String email = [Link]();
String gender = [Link]() ? "Male" : "Female";
String dob = [Link]() + "-" +
[Link]() + "-" +
[Link]();
String membershipStartDate = [Link]() + "-" +
[Link]() + "-" +
[Link]();
String trainerName = [Link]();
PremiumMember newMember = new PremiumMember(id, name, location, phone, email,
gender, dob, membershipStartDate, trainerName);
[Link](newMember);
[Link](this, "Premium member added successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid ID format!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
[Link](this, "Error: " + [Link](), "Error",
JOptionPane.ERROR_MESSAGE);
private boolean isMemberIdExists(int id) {
for (GymMember member : memberList) {
if ([Link]() == id) {
return true;
return false;
}
private void activateMembership() {
try {
int id = [Link]([Link]());
GymMember member = findMemberById(id);
if (member != null) {
[Link]();
[Link](this, "Membership activated successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} else {
[Link](this, "Member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void deactivateMembership() {
try {
int id = [Link]([Link]());
GymMember member = findMemberById(id);
if (member != null) {
[Link]();
[Link](this, "Membership deactivated successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} else {
[Link](this, "Member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void markAttendance() {
try {
int id = [Link]([Link]());
GymMember member = findMemberById(id);
if (member != null) {
if ([Link]()) {
[Link]();
[Link](this, "Attendance marked successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} else {
[Link](this, "Member is not active!", "Error",
JOptionPane.ERROR_MESSAGE);
} else {
[Link](this, "Member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
}
private void upgradePlan() {
try {
int id = [Link]([Link]());
String plan = (String) [Link]();
for (GymMember member : memberList) {
if ([Link]() == id && member instanceof RegularMember) {
RegularMember rm = (RegularMember) member;
String result = [Link]([Link]());
[Link](this, result, "Plan Upgrade",
JOptionPane.INFORMATION_MESSAGE);
return;
[Link](this, "Regular member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void revertRegularMember() {
try {
int id = [Link]([Link]());
String removalReason = [Link]();
for (GymMember member : memberList) {
if ([Link]() == id && member instanceof RegularMember) {
((RegularMember) member).revertRegularMember(removalReason);
[Link](this, "Regular member reverted successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
return;
[Link](this, "Regular member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void revertPremiumMember() {
try {
int id = [Link]([Link]());
for (GymMember member : memberList) {
if ([Link]() == id && member instanceof PremiumMember) {
((PremiumMember) member).revertPremiumMember();
[Link](this, "Premium member reverted successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
return;
[Link](this, "Premium member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void payDueAmount() {
try {
int id = [Link]([Link]());
double amount = [Link]([Link]());
for (GymMember member : memberList) {
if ([Link]() == id && member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
String result = [Link](amount);
[Link](this, result, "Payment",
JOptionPane.INFORMATION_MESSAGE);
[Link]("Discount Amount: " + [Link]());
return;
[Link](this, "Premium member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid amount format!", "Error",
JOptionPane.ERROR_MESSAGE);
private void calculateDiscount() {
try {
int id = [Link]([Link]());
for (GymMember member : memberList) {
if ([Link]() == id && member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
[Link]();
[Link]("Discount Amount: " + [Link]());
[Link](this, "Discount calculated successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
return;
[Link](this, "Premium member not found!", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
[Link](this, "Invalid member ID!", "Error",
JOptionPane.ERROR_MESSAGE);
private void displayMembers() {
[Link]("");
if ([Link]()) {
[Link]("No members found in the system.\n");
return;
for (GymMember member : memberList) {
[Link]("Member Type: " + (member instanceof RegularMember ? "Regular" :
"Premium") + "\n");
[Link]("ID: " + [Link]() + "\n");
[Link]("Name: " + [Link]() + "\n");
[Link]("Location: " + [Link]() + "\n");
[Link]("Phone: " + [Link]() + "\n");
[Link]("Email: " + [Link]() + "\n");
[Link]("Gender: " + [Link]() + "\n");
[Link]("DOB: " + [Link]() + "\n");
[Link]("Membership Start Date: " + [Link]() + "\n");
[Link]("Attendance: " + [Link]() + "\n");
[Link]("Loyalty Points: " + [Link]() + "\n");
[Link]("Active Status: " + [Link]() + "\n");
if (member instanceof RegularMember) {
RegularMember rm = (RegularMember) member;
[Link]("Plan: " + [Link]() + "\n");
[Link]("Price: " + [Link]() + "\n");
[Link]("Referral Source: " + [Link]() + "\n");
if (![Link]().isEmpty()) {
[Link]("Removal Reason: " + [Link]() + "\n");
} else if (member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
[Link]("Personal Trainer: " + [Link]() + "\n");
[Link]("Paid Amount: " + [Link]() + "\n");
[Link]("Premium Charge: " + [Link]() + "\n");
[Link]("Is Full Payment: " + [Link]() + "\n");
if ([Link]()) {
[Link]("Discount Amount: " + [Link]() + "\n");
[Link]("\n----------------------------------------\n\n");
private void saveToFile() {
try (FileWriter writer = new FileWriter("[Link]")) {
[Link]([Link]("%-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 = [Link]();
price = [Link]();
} else if (member instanceof PremiumMember) {
PremiumMember pm = (PremiumMember) member;
plan = "Premium";
price = [Link]();
fullPayment = [Link]();
discount = [Link]();
netPaid = [Link]();
[Link]([Link]("%-5d %-15s %-15s %-15s %-25s %-20s %-10s %-10.2f %-10d %-15.2f
%-10s %-15s %-15.2f %-15.2f\n",
[Link](), [Link](), [Link](), [Link](),
[Link](), [Link](), plan, price,
[Link](), [Link](), [Link](),
fullPayment, discount, netPaid));
[Link](this, "Member details saved to file successfully!", "Success",
JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e) {
[Link](this, "Error saving to file: " + [Link](), "Error",
JOptionPane.ERROR_MESSAGE);
private void readFromFile() {
try (BufferedReader reader = new BufferedReader(new FileReader("[Link]"))) {
// Skip header line
[Link]();
String line;
[Link]("");
[Link]("Member Details from File:\n\n");
while ((line = [Link]()) != null) {
[Link](line + "\n");
[Link](this, "Member details loaded from file successfully!",
"Success", JOptionPane.INFORMATION_MESSAGE);
} catch (FileNotFoundException e) {
[Link](this, "File not found!", "Error", JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
[Link](this, "Error reading file: " + [Link](), "Error",
JOptionPane.ERROR_MESSAGE);
private GymMember findMemberById(int id) {
for (GymMember member : memberList) {
if ([Link]() == id) {
return member;
return null;
@Override
public void actionPerformed(ActionEvent e) {
// Implemented for interface, but we're using lambda expressions for button actions
}
}