From de253de79d20edd7d9deb12860bc8300be0dd14f Mon Sep 17 00:00:00 2001 From: yujeongFE <109844803+yujeongFE@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:20:53 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EB=A0=A5=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/model/Resume.java | 68 +++++++++ .../com/example/model/WorkExperience.java | 19 +++ src/main/java/com/example/ui/ResumeApp.java | 129 ++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 src/main/java/com/example/model/Resume.java create mode 100644 src/main/java/com/example/model/WorkExperience.java create mode 100644 src/main/java/com/example/ui/ResumeApp.java diff --git a/src/main/java/com/example/model/Resume.java b/src/main/java/com/example/model/Resume.java new file mode 100644 index 0000000..261fd84 --- /dev/null +++ b/src/main/java/com/example/model/Resume.java @@ -0,0 +1,68 @@ +package main.java.com.example.model;// Resume.java +import main.java.com.example.model.WorkExperience; + +import java.util.ArrayList; +import java.util.Date; +import java.text.SimpleDateFormat; + +public class Resume { + String employeeId; + public String title; + public String address; + public String phoneNumber; + public String instagram; + Date updatedAt; + public ArrayList workExperience; + + public Resume(String employeeId, String title, String address, String phoneNumber, String instagram) { + this.employeeId = employeeId; + this.title = title; + this.address = address; + this.phoneNumber = phoneNumber; + this.instagram = instagram; + this.updatedAt = new Date(); + this.workExperience = new ArrayList<>(); + } + + @Override + public String toString() { + return title + " - " + phoneNumber + " - " + instagram; + } + + public String toDetailString() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + StringBuilder details = new StringBuilder(); + details.append("Employee ID: ").append(employeeId).append("\n"); + details.append("Title: ").append(title).append("\n"); + details.append("Updated At: ").append(sdf.format(updatedAt)).append("\n"); + details.append("Address: ").append(address).append("\n"); + details.append("Phone Number: ").append(phoneNumber).append("\n"); + details.append("Instagram: ").append(instagram).append("\n\n"); + + details.append("Work Experience:\n"); + for (WorkExperience exp : workExperience) { + details.append("- ").append(exp.workplaceName).append(" (") + .append(sdf.format(exp.startDate)).append(" ~ ") + .append(sdf.format(exp.endDate)).append(")\n"); + details.append(" Content: ").append(exp.workContent).append("\n\n"); + } + return details.toString(); + } + + // ResumeService (내부 클래스) + public static class ResumeService { + private ArrayList resumes = new ArrayList<>(); + + public void addResume(Resume resume) { + resumes.add(resume); + } + + public void deleteResume(int index) { + resumes.remove(index); + } + + public ArrayList getResumes() { + return resumes; + } + } +} diff --git a/src/main/java/com/example/model/WorkExperience.java b/src/main/java/com/example/model/WorkExperience.java new file mode 100644 index 0000000..ffcc737 --- /dev/null +++ b/src/main/java/com/example/model/WorkExperience.java @@ -0,0 +1,19 @@ +package main.java.com.example.model; + +import java.util.Date; + +public class WorkExperience { + int workExperienceId; + public String workplaceName; + public Date startDate; + public Date endDate; + public String workContent; + + public WorkExperience(int workExperienceId, String workplaceName, Date startDate, Date endDate, String workContent) { + this.workExperienceId = workExperienceId; + this.workplaceName = workplaceName; + this.startDate = startDate; + this.endDate = endDate; + this.workContent = workContent; + } +} diff --git a/src/main/java/com/example/ui/ResumeApp.java b/src/main/java/com/example/ui/ResumeApp.java new file mode 100644 index 0000000..b2ff5da --- /dev/null +++ b/src/main/java/com/example/ui/ResumeApp.java @@ -0,0 +1,129 @@ +package main.java.com.example.ui; + +import main.java.com.example.model.Resume; +import main.java.com.example.model.WorkExperience; +import javax.swing.*; +import java.awt.*; +import java.util.Date; +import java.text.SimpleDateFormat; + +public class ResumeApp extends JFrame { + private Resume.ResumeService resumeService = new Resume.ResumeService(); + private DefaultListModel listModel = new DefaultListModel<>(); + private JList resumeList = new JList<>(listModel); + + public ResumeApp() { + setTitle("이력서 리스트"); + setSize(600, 500); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + + JButton addButton = new JButton("추가"); + JButton editButton = new JButton("수정"); + JButton detailButton = new JButton("상세보기"); + JButton deleteButton = new JButton("삭제"); + JPanel buttonPanel = new JPanel(); + buttonPanel.add(addButton); + buttonPanel.add(editButton); + buttonPanel.add(detailButton); + buttonPanel.add(deleteButton); + + add(new JScrollPane(resumeList), BorderLayout.CENTER); + add(buttonPanel, BorderLayout.SOUTH); + + addButton.addActionListener(e -> showFormDialog(new Resume("", "", "", "", ""), false)); + editButton.addActionListener(e -> { + int selectedIndex = resumeList.getSelectedIndex(); + if (selectedIndex != -1) { + Resume resume = resumeService.getResumes().get(selectedIndex); + showFormDialog(resume, true); + } else { + JOptionPane.showMessageDialog(this, "수정할 이력서를 선택하세요.", "오류", JOptionPane.ERROR_MESSAGE); + } + }); + + detailButton.addActionListener(e -> { + int selectedIndex = resumeList.getSelectedIndex(); + if (selectedIndex != -1) { + Resume resume = resumeService.getResumes().get(selectedIndex); + JOptionPane.showMessageDialog(this, resume.toDetailString(), "이력서 상세보기", JOptionPane.INFORMATION_MESSAGE); + } + }); + + deleteButton.addActionListener(e -> { + int selectedIndex = resumeList.getSelectedIndex(); + if (selectedIndex != -1) { + resumeService.getResumes().remove(selectedIndex); + listModel.remove(selectedIndex); + JOptionPane.showMessageDialog(this, "이력서가 성공적으로 삭제되었습니다."); + } + }); + } + + private void showFormDialog(Resume resume, boolean isEdit) { + JDialog dialog = new JDialog(this, isEdit ? "이력서 수정" : "이력서 추가", true); + dialog.setSize(400, 600); + dialog.setLayout(new GridLayout(12, 2)); + + JTextField titleField = new JTextField(resume.title); + JTextField addressField = new JTextField(resume.address); + JTextField phoneField = new JTextField(resume.phoneNumber); + JTextField instagramField = new JTextField(resume.instagram); + JTextField workPlaceField = new JTextField(); + JTextField workContentField = new JTextField(); + JTextField startDateField = new JTextField("yyyy-MM-dd"); + JTextField endDateField = new JTextField("yyyy-MM-dd"); + + dialog.add(new JLabel("제목:")); + dialog.add(titleField); + dialog.add(new JLabel("주소:")); + dialog.add(addressField); + dialog.add(new JLabel("전화번호:")); + dialog.add(phoneField); + dialog.add(new JLabel("인스타그램:")); + dialog.add(instagramField); + + dialog.add(new JLabel("직장명:")); + dialog.add(workPlaceField); + dialog.add(new JLabel("업무 내용:")); + dialog.add(workContentField); + dialog.add(new JLabel("시작 날짜:")); + dialog.add(startDateField); + dialog.add(new JLabel("종료 날짜:")); + dialog.add(endDateField); + + JButton saveButton = new JButton("저장"); + dialog.add(saveButton); + + saveButton.addActionListener(e -> { + resume.title = titleField.getText(); + resume.address = addressField.getText(); + resume.phoneNumber = phoneField.getText(); + resume.instagram = instagramField.getText(); + + try { + Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse(startDateField.getText()); + Date endDate = new SimpleDateFormat("yyyy-MM-dd").parse(endDateField.getText()); + int newId = resume.workExperience.size() + 1; // 자동 증가 ID + resume.workExperience.add(new WorkExperience(newId, workPlaceField.getText(), startDate, endDate, workContentField.getText())); + } catch (Exception ex) { + JOptionPane.showMessageDialog(dialog, "유효하지 않은 날짜 형식입니다.", "오류", JOptionPane.ERROR_MESSAGE); + return; + } + + if (!isEdit) { + resumeService.addResume(resume); + listModel.addElement(resume.toString()); + } else { + listModel.setElementAt(resume.toString(), resumeList.getSelectedIndex()); + } + dialog.dispose(); + }); + + dialog.setVisible(true); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> new ResumeApp().setVisible(true)); + } +} \ No newline at end of file