본문으로 바로가기

간단한 회원관리 GUI SWING 툴

category Programing/JAVA 2023. 5. 8. 22:27
반응형

JAVA에서 SWING으로 GUI를 구현할 수 있습니다.
윈도우 툴로서 사용하기 간편합니다.

주로 회원관리 같은경우에는 DB를 이용하여 어플리케이션을 만들어 사용합니다.

허나, 간편하게 나혼자 보거나, 고시원 같은 작은 회원관리 하는 곳에서 간편하게 나만 사용하기에는 DB보다 엑셀이 간편하죠.

간단한 소스 업로드 합니다.
이 소스에서는 SWING을 이요하여 회원의 이름, 전화번호, 나이, 성별, 등급을 입력하면 동일한 aa.csv에 저장합니다.

이 소스를 토대로 편집하여 나만의 툴을 만들어서 사용하시면 간단한 회원관리나 고시원 등의 고객관리 에 사용할 수 있겠습니다

사용한 라이브러리는 csv 하나입니다.

gradle 의 경우 아래와 같이 추가하시면 됩니다
dependencies {
implementation 'com.opencsv:opencsv:5.5.2'

}
직접 라이브러리 다운받아 추가하셔도 됩니다.

다른거 필요없이 코드만 제공됩니다.

example.zip
0.00MB
Random Photo


MemberController

더보기
package com.example.healthcomplex.controller;

import com.example.healthcomplex.service.MemberService;
import com.example.healthcomplex.domain.Member1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

public class MemberController {
    private MemberService memberService;
    private JList<Member1> memberList;

    public MemberController() {
        memberService = new MemberService();
    }

    private void showMembersOnGUI() {
        List<Member1> members = memberService.getMembers();
        DefaultListModel<Member1> listModel = new DefaultListModel<>();
        for (Member1 member : members) {
            listModel.addElement(member);
        }
        memberList.setModel(listModel);
    }

    public static void main(String[] args) {
        MemberController memberController = new MemberController();

        // SWING GUI 생성 및 설정
        JFrame frame = new JFrame("회원 관리");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setLayout(new BorderLayout());

        // 회원 목록 패널
        JPanel memberListPanel = new JPanel(new BorderLayout());
        frame.add(memberListPanel, BorderLayout.CENTER);

        // 회원 목록
        memberController.memberList = new JList<>();
        memberListPanel.add(new JScrollPane(memberController.memberList), BorderLayout.CENTER);
        memberController.showMembersOnGUI();

        // 클릭 이벤트
        memberController.memberList.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    int selectedIndex = memberController.memberList.locationToIndex(e.getPoint());
                    Member1 selectedMember = memberController.memberList.getModel().getElementAt(selectedIndex);
                    JOptionPane.showMessageDialog(frame, selectedMember.toString(), "회원 정보", JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });

        // 입력 패널
        JPanel inputPanel = new JPanel();
        frame.add(inputPanel, BorderLayout.SOUTH);

        // 입력 필드 및 버튼
        JTextField nameField = new JTextField(10);
        JTextField phoneNumberField = new JTextField(10);
        JTextField ageField = new JTextField(5);
        JTextField sexField = new JTextField(5);
        JTextField gradeField = new JTextField(5);
        JButton addButton = new JButton("회원 추가");

        inputPanel.add(new JLabel("이름: "));
        inputPanel.add(nameField);
        inputPanel.add(new JLabel("전화번호: "));
        inputPanel.add(phoneNumberField);
        inputPanel.add(new JLabel("나이: "));
        inputPanel.add(ageField);
        inputPanel.add(new JLabel("성별: "));
        inputPanel.add(sexField);
        inputPanel.add(new JLabel("등급: "));
        inputPanel.add(gradeField);
        inputPanel.add(addButton);

        // 액션 리스너 추가
        addButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String name = nameField.getText();
                String phoneNumber = phoneNumberField.getText();
                int age = Integer.parseInt(ageField.getText());
                String sex = sexField.getText();
                int grade = Integer.parseInt(gradeField.getText());

                memberController.addMember(name, phoneNumber, age, sex, grade);

                // 입력값 초기화
                nameField.setText("");
                phoneNumberField.setText("");
                ageField.setText("");
                sexField.setText("");
                gradeField.setText("");

                // 목록 새로고침
                memberController.showMembersOnGUI();
            }
        });

        frame.setVisible(true);
    }

    public void addMember(String name, String phoneNumber, int age, String sex, int grade) {
        Member1 member = new Member1(name, phoneNumber, age, sex, grade);
        memberService.addMember(member);
        memberService.saveMemberToFile(member);
    }
}

 

 


Member.java

더보기
package com.example.healthcomplex.domain;

public class Member1 {
    private String name;
    private String phoneNumber;
    private int age;
    private String sex;
    private int grade;

    public Member1(String name, String phoneNumber, int age, String sex, int grade) {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.age = age;
        this.sex = sex;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "Member{" +
                "name='" + name + '\'' +
                ", phoneNumber='" + phoneNumber + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", grade=" + grade +
                '}';
    }
}

MemberRepository

더보기
package com.example.healthcomplex.repository;

import com.example.healthcomplex.domain.Member1;

import java.util.ArrayList;
import java.util.List;

public class MemberRepository {
    private List<Member1> members;

    public MemberRepository() {
        members = new ArrayList<>();
    }

    public void save(Member1 member) {
        members.add(member);
    }

    public List<Member1> findAll() {
        return members;
    }
}

MemberService

더보기
package com.example.healthcomplex.service;

import com.example.healthcomplex.domain.Member1;
import com.example.healthcomplex.repository.MemberRepository;

import java.io.*;
import java.util.List;

public class MemberService {
    private MemberRepository memberRepository;
    private final String FILE_PATH = "aa.csv";

    public MemberService() {
        memberRepository = new MemberRepository();
        loadMembersFromFile();
    }

    public void addMember(Member1 member) {
        memberRepository.save(member);
        saveMemberToFile(member);
    }

    public List<Member1> getMembers() {
        return memberRepository.findAll();
    }

    public void saveMemberToFile(Member1 member) {
        try (FileWriter fw = new FileWriter(FILE_PATH, true);
             BufferedWriter bw = new BufferedWriter(fw)) {
            bw.write(member.getName() + "," + member.getPhoneNumber() + "," + member.getAge() + "," + member.getSex() + "," + member.getGrade());
            bw.newLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void loadMembersFromFile() {
        try (FileReader fr = new FileReader(FILE_PATH);
             BufferedReader br = new BufferedReader(fr)) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] fields = line.split(",");
                Member1 member = new Member1(fields[0], fields[1], Integer.parseInt(fields[2]), fields[3], Integer.parseInt(fields[4]));
                memberRepository.save(member);
            }
        } catch (FileNotFoundException e) {
            // 파일이 없는 경우 새로 생성
            File file = new File(FILE_PATH);
            try {
                file.createNewFile();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void saveMembersToCSV() {
    }
}

 

반응형