Skip to content

Commit de253de

Browse files
committed
이력서
1 parent 47911f9 commit de253de

3 files changed

Lines changed: 216 additions & 0 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package main.java.com.example.model;// Resume.java
2+
import main.java.com.example.model.WorkExperience;
3+
4+
import java.util.ArrayList;
5+
import java.util.Date;
6+
import java.text.SimpleDateFormat;
7+
8+
public class Resume {
9+
String employeeId;
10+
public String title;
11+
public String address;
12+
public String phoneNumber;
13+
public String instagram;
14+
Date updatedAt;
15+
public ArrayList<WorkExperience> workExperience;
16+
17+
public Resume(String employeeId, String title, String address, String phoneNumber, String instagram) {
18+
this.employeeId = employeeId;
19+
this.title = title;
20+
this.address = address;
21+
this.phoneNumber = phoneNumber;
22+
this.instagram = instagram;
23+
this.updatedAt = new Date();
24+
this.workExperience = new ArrayList<>();
25+
}
26+
27+
@Override
28+
public String toString() {
29+
return title + " - " + phoneNumber + " - " + instagram;
30+
}
31+
32+
public String toDetailString() {
33+
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
34+
StringBuilder details = new StringBuilder();
35+
details.append("Employee ID: ").append(employeeId).append("\n");
36+
details.append("Title: ").append(title).append("\n");
37+
details.append("Updated At: ").append(sdf.format(updatedAt)).append("\n");
38+
details.append("Address: ").append(address).append("\n");
39+
details.append("Phone Number: ").append(phoneNumber).append("\n");
40+
details.append("Instagram: ").append(instagram).append("\n\n");
41+
42+
details.append("Work Experience:\n");
43+
for (WorkExperience exp : workExperience) {
44+
details.append("- ").append(exp.workplaceName).append(" (")
45+
.append(sdf.format(exp.startDate)).append(" ~ ")
46+
.append(sdf.format(exp.endDate)).append(")\n");
47+
details.append(" Content: ").append(exp.workContent).append("\n\n");
48+
}
49+
return details.toString();
50+
}
51+
52+
// ResumeService (내부 클래스)
53+
public static class ResumeService {
54+
private ArrayList<Resume> resumes = new ArrayList<>();
55+
56+
public void addResume(Resume resume) {
57+
resumes.add(resume);
58+
}
59+
60+
public void deleteResume(int index) {
61+
resumes.remove(index);
62+
}
63+
64+
public ArrayList<Resume> getResumes() {
65+
return resumes;
66+
}
67+
}
68+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main.java.com.example.model;
2+
3+
import java.util.Date;
4+
5+
public class WorkExperience {
6+
int workExperienceId;
7+
public String workplaceName;
8+
public Date startDate;
9+
public Date endDate;
10+
public String workContent;
11+
12+
public WorkExperience(int workExperienceId, String workplaceName, Date startDate, Date endDate, String workContent) {
13+
this.workExperienceId = workExperienceId;
14+
this.workplaceName = workplaceName;
15+
this.startDate = startDate;
16+
this.endDate = endDate;
17+
this.workContent = workContent;
18+
}
19+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package main.java.com.example.ui;
2+
3+
import main.java.com.example.model.Resume;
4+
import main.java.com.example.model.WorkExperience;
5+
import javax.swing.*;
6+
import java.awt.*;
7+
import java.util.Date;
8+
import java.text.SimpleDateFormat;
9+
10+
public class ResumeApp extends JFrame {
11+
private Resume.ResumeService resumeService = new Resume.ResumeService();
12+
private DefaultListModel<String> listModel = new DefaultListModel<>();
13+
private JList<String> resumeList = new JList<>(listModel);
14+
15+
public ResumeApp() {
16+
setTitle("이력서 리스트");
17+
setSize(600, 500);
18+
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
19+
setLayout(new BorderLayout());
20+
21+
JButton addButton = new JButton("추가");
22+
JButton editButton = new JButton("수정");
23+
JButton detailButton = new JButton("상세보기");
24+
JButton deleteButton = new JButton("삭제");
25+
JPanel buttonPanel = new JPanel();
26+
buttonPanel.add(addButton);
27+
buttonPanel.add(editButton);
28+
buttonPanel.add(detailButton);
29+
buttonPanel.add(deleteButton);
30+
31+
add(new JScrollPane(resumeList), BorderLayout.CENTER);
32+
add(buttonPanel, BorderLayout.SOUTH);
33+
34+
addButton.addActionListener(e -> showFormDialog(new Resume("", "", "", "", ""), false));
35+
editButton.addActionListener(e -> {
36+
int selectedIndex = resumeList.getSelectedIndex();
37+
if (selectedIndex != -1) {
38+
Resume resume = resumeService.getResumes().get(selectedIndex);
39+
showFormDialog(resume, true);
40+
} else {
41+
JOptionPane.showMessageDialog(this, "수정할 이력서를 선택하세요.", "오류", JOptionPane.ERROR_MESSAGE);
42+
}
43+
});
44+
45+
detailButton.addActionListener(e -> {
46+
int selectedIndex = resumeList.getSelectedIndex();
47+
if (selectedIndex != -1) {
48+
Resume resume = resumeService.getResumes().get(selectedIndex);
49+
JOptionPane.showMessageDialog(this, resume.toDetailString(), "이력서 상세보기", JOptionPane.INFORMATION_MESSAGE);
50+
}
51+
});
52+
53+
deleteButton.addActionListener(e -> {
54+
int selectedIndex = resumeList.getSelectedIndex();
55+
if (selectedIndex != -1) {
56+
resumeService.getResumes().remove(selectedIndex);
57+
listModel.remove(selectedIndex);
58+
JOptionPane.showMessageDialog(this, "이력서가 성공적으로 삭제되었습니다.");
59+
}
60+
});
61+
}
62+
63+
private void showFormDialog(Resume resume, boolean isEdit) {
64+
JDialog dialog = new JDialog(this, isEdit ? "이력서 수정" : "이력서 추가", true);
65+
dialog.setSize(400, 600);
66+
dialog.setLayout(new GridLayout(12, 2));
67+
68+
JTextField titleField = new JTextField(resume.title);
69+
JTextField addressField = new JTextField(resume.address);
70+
JTextField phoneField = new JTextField(resume.phoneNumber);
71+
JTextField instagramField = new JTextField(resume.instagram);
72+
JTextField workPlaceField = new JTextField();
73+
JTextField workContentField = new JTextField();
74+
JTextField startDateField = new JTextField("yyyy-MM-dd");
75+
JTextField endDateField = new JTextField("yyyy-MM-dd");
76+
77+
dialog.add(new JLabel("제목:"));
78+
dialog.add(titleField);
79+
dialog.add(new JLabel("주소:"));
80+
dialog.add(addressField);
81+
dialog.add(new JLabel("전화번호:"));
82+
dialog.add(phoneField);
83+
dialog.add(new JLabel("인스타그램:"));
84+
dialog.add(instagramField);
85+
86+
dialog.add(new JLabel("직장명:"));
87+
dialog.add(workPlaceField);
88+
dialog.add(new JLabel("업무 내용:"));
89+
dialog.add(workContentField);
90+
dialog.add(new JLabel("시작 날짜:"));
91+
dialog.add(startDateField);
92+
dialog.add(new JLabel("종료 날짜:"));
93+
dialog.add(endDateField);
94+
95+
JButton saveButton = new JButton("저장");
96+
dialog.add(saveButton);
97+
98+
saveButton.addActionListener(e -> {
99+
resume.title = titleField.getText();
100+
resume.address = addressField.getText();
101+
resume.phoneNumber = phoneField.getText();
102+
resume.instagram = instagramField.getText();
103+
104+
try {
105+
Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse(startDateField.getText());
106+
Date endDate = new SimpleDateFormat("yyyy-MM-dd").parse(endDateField.getText());
107+
int newId = resume.workExperience.size() + 1; // 자동 증가 ID
108+
resume.workExperience.add(new WorkExperience(newId, workPlaceField.getText(), startDate, endDate, workContentField.getText()));
109+
} catch (Exception ex) {
110+
JOptionPane.showMessageDialog(dialog, "유효하지 않은 날짜 형식입니다.", "오류", JOptionPane.ERROR_MESSAGE);
111+
return;
112+
}
113+
114+
if (!isEdit) {
115+
resumeService.addResume(resume);
116+
listModel.addElement(resume.toString());
117+
} else {
118+
listModel.setElementAt(resume.toString(), resumeList.getSelectedIndex());
119+
}
120+
dialog.dispose();
121+
});
122+
123+
dialog.setVisible(true);
124+
}
125+
126+
public static void main(String[] args) {
127+
SwingUtilities.invokeLater(() -> new ResumeApp().setVisible(true));
128+
}
129+
}

0 commit comments

Comments
 (0)