Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 사전학습
- Database
- ObjectOutputStream
- Position
- css 기초
- 퍼셉트론
- 메서드
- FlowLayout
- FileWriter
- CSS
- 푸리에 변환
- iframe 태그
- inline
- 파이썬
- html 기초
- FFT
- 미디어쿼리
- rnn
- 반응형 웹 프로젝트
- g검정
- oracle
- Codility
- html 프로젝트
- 예제
- 상속
- GridLayout
- BorderLayout
- 반응형웹
- HTML
- java
Archives
- Today
- Total
도라에몽주머니
[Java/Eclipse] Java 45, 46일차 본문

setResizable
: 창의 크기를 고정할 때 사용하는 명령어(true: 크기 조절 가능, false: 크기 조절 불가능)
TextArea
: 여러 줄의 텍스트를 입력하거나 보여줄 수 있는 편집 가능한 컴포넌트. 많은 양의 텍스트를 담을 때 사용.
예제
27-File 성적관리 프로그램을 아래와 같이 윈도우 화면으로 꾸민 후,
학생들 성적을 출력하도록 프로그램을 작성하세요.
Class Name : score/ScoreForm.java (Frame 클래스 상속)
score/Prac4.java (main)
score/ScoreVO.java (27-File)
score/Score.java (27-File) → (수정)
score/ScoreImpl.java (27-File) → (수정)
score/ObjectInOut1.java (27-File)
// ScoreVO.java
package score;
import java.io.Serializable;
public class ScoreVO implements Serializable {
private String hak; // 학번
private String name; // 이름
private int kor, eng, mat; // 국어, 영어, 수학
private int tot; // 총점
private double avg; // 평균
public String toString() {
if (hak == null || name == null)
return null;
String str = String.format("%s\t%s\t%d\t%d\t%d\t%d\t%.1f",
hak, name, kor, eng, mat, tot, avg);
return str;
}
// getter / setter
public String getHak() {
return hak;
}
public void setHak(String hak) {
this.hak = hak;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getTot() {
return tot;
}
public void setTot(int tot) {
this.tot = tot;
}
public double getAvg() {
return avg;
}
public void setAvg(double avg) {
this.avg = avg;
}
}
// Score.java
package score;
public interface Score {
public void input(ScoreVO vo); // 입력
public String print(); // 출력
public String printTitle(); // 제목 출력
public String searchHak(String hak); // 검색 : 학번
public String searchName(String name); // 검색 : 이름
public String write(); // 파일 저장
public String read(); // 파일 읽기
}
// ScoreImpl.java
package score;
import java.util.ArrayList;
import java.util.List;
public class ScoreImpl implements Score {
// 선언
// 학생 전체 데이터 저장
List<ScoreVO> list = new ArrayList<ScoreVO>();
// 파일 입출력
ObjectInOut1 objectInOut = new ObjectInOut1();
@Override
public void input(ScoreVO vo) {
// 리스트에 저장
list.add(vo);
}
@Override
public String print() {
String result = printTitle();
for (int i = 0; i < list.size(); i++) {
ScoreVO vo = list.get(i);
result += vo.toString() + "\n";
}
return result;
}
@Override
public String printTitle() {
return String.format("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "NUM", "NAME", "KOR", "ENG", "MATH", "TOTAL", "AVERAGE");
}
@Override
public String searchHak(String hak) {
boolean is_exist = false;
String result = "";
for (int i = 0; i < list.size(); i++) {
ScoreVO vo = list.get(i);
if (hak.equals(vo.getHak())) {
result = printTitle();
result += vo.toString();
is_exist = true;
break;
}
}
if (!is_exist) {
result = hak + " 학번은 없습니다.";
}
return result;
}
@Override
public String searchName(String name) {
boolean is_exist = false;
String result = "";
for (int i = 0; i < list.size(); i++) {
ScoreVO vo = list.get(i);
if (name.equals(vo.getName())) {
if (!is_exist) result = printTitle();
result += vo.toString() + "\n";
is_exist = true;
}
}
if (!is_exist) result = name + " 학생은 없습니다.";
return result;
}
// 파일 저장
@Override
public String write() {
boolean result = objectInOut.write("score.txt", list);
if (result) {
return "파일 저장 성공";
} else {
return "파일 저장 실패";
}
}
// 파일 읽기
@Override
public String read() {
// 기존 데이터 삭제
list.clear();
list = objectInOut.read("score.txt");
if (list.size() > 0) {
return "파일 읽기 성공";
}
return "";
}
}
// ObjectInOut1.java
package score;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class ObjectInOut1 {
// 1) 파일 저장
public boolean write(String fileName, List<ScoreVO> list) {
boolean result = false;
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(fileName);
oos = new ObjectOutputStream(fos);
oos.writeInt(list.size());
for (int i = 0; i < list.size(); i++) {
ScoreVO vo = list.get(i);
oos.writeObject(vo);
}
result = true;
} catch (FileNotFoundException e) {
System.out.println("[ERROR] 파일 생성 실패");
} catch (IOException e) {
System.out.println("[ERROR] 파일 저장 실패");
} catch (Exception e) {
System.out.println("[ERROR] 알 수 없는 에러");
} finally {
try {
if (oos != null)
oos.close();
if (fos != null)
fos.close();
} catch (IOException e) {
System.out.println("[ERROR] 파일 닫기 에러");
}
}
return result;
}
// 2) 파일 읽기
public List<ScoreVO> read(String fileName) {
List<ScoreVO> list = new ArrayList<ScoreVO>();
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(fileName);
ois = new ObjectInputStream(fis);
int num = ois.readInt();
for (int i = 0; i < num; i++) {
ScoreVO vo = (ScoreVO) ois.readObject();
list.add(vo);
}
} catch (FileNotFoundException e) {
System.out.println("[ERROR] 파일의 경로를 찾을 수 없습니다. >> " + fileName);
} catch (IOException e) {
System.out.println("[ERROR] 파일 읽기 실패 >> " + fileName);
} catch (ClassNotFoundException e) {
System.out.println("[ERROR] 클래스가 없습니다. >> " + fileName);
} catch (Exception e) {
System.out.println("[ERROR] 알 수 없는 에러");
} finally {
try {
if (ois != null)
ois.close();
if (fis != null)
fis.close();
} catch (IOException e) {
System.out.println("[ERROR] 파일 닫기 실패");
}
}
return list;
}
}
// ScoreForm.java
package score;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ScoreForm extends Frame implements ActionListener {
// 선언
/* 데이터 처리 클래스 */
Score score = new ScoreImpl();
/* 컴포넌트 */
Button btn_input = new Button("입력");
Button btn_output = new Button("출력");
Button btn_num = new Button("학번검색");
Button btn_name = new Button("이름검색");
Button btn_save = new Button("파일저장");
Button btn_read = new Button("파일읽기");
Label labelNum = new Label("학번");
Label labelName = new Label("이름");
Label labelKor = new Label("국어");
Label labelEng = new Label("영어");
Label labelMat = new Label("수학");
TextField textFieldNum = new TextField(12);
TextField textFieldName = new TextField(12);
TextField textFieldKor = new TextField(12);
TextField textFieldEng = new TextField(12);
TextField textFieldMat = new TextField(12);
TextArea textArea = new TextArea(10, 48);
Panel panelInput = new Panel(); // 입력
Panel panelButton = new Panel(); // 버튼
Panel panelNum = new Panel(); // 학번
Panel panelName = new Panel(); // 이름
Panel panelKor = new Panel(); // 국어
Panel panelEng = new Panel(); // 영어
Panel panelMat = new Panel(); // 수학
public ScoreForm() {
// Frame 기본 설정
this.setTitle("성적관리");
this.setSize(600, 300);
this.setLocation(500, 400);
this.setResizable(false); // 화면 크기 고정
init();
start();
this.setVisible(true);
// 파일 읽기
textArea.setText(score.read());
}
// 화면 구성
private void init() {
// Frame 구성
this.setLayout(new BorderLayout());
this.add("West", panelInput);
this.add("East", textArea);
this.add("South", panelButton);
// textArea 입력 금지
textArea.setEditable(false);
textArea.setBackground(Color.WHITE);
// panelButton 구성
panelButton.setLayout(new GridLayout(1, 6));
panelButton.add(btn_input);
panelButton.add(btn_output);
panelButton.add(btn_num);
panelButton.add(btn_name);
panelButton.add(btn_save);
panelButton.add(btn_read);
// button 설정
btn_input.setBackground(Color.YELLOW);
btn_output.setBackground(Color.YELLOW);
btn_num.setBackground(Color.YELLOW);
btn_name.setBackground(Color.YELLOW);
btn_save.setBackground(Color.YELLOW);
btn_read.setBackground(Color.YELLOW);
// panelInput 구성
panelInput.setLayout(new GridLayout(5, 1));
panelInput.add(panelNum);
panelInput.add(panelName);
panelInput.add(panelKor);
panelInput.add(panelEng);
panelInput.add(panelMat);
// panelNum 구성
panelNum.setLayout(new FlowLayout());
panelNum.add(labelNum);
panelNum.add(textFieldNum);
// panelName 구성
panelName.setLayout(new FlowLayout());
panelName.add(labelName);
panelName.add(textFieldName);
// panelKor 구성
panelKor.setLayout(new FlowLayout());
panelKor.add(labelKor);
panelKor.add(textFieldKor);
// panelEng 구성
panelEng.setLayout(new FlowLayout());
panelEng.add(labelEng);
panelEng.add(textFieldEng);
// panelMat 구성
panelMat.setLayout(new FlowLayout());
panelMat.add(labelMat);
panelMat.add(textFieldMat);
}
// 이벤트 설정
private void start() {
// x버튼 이벤트 처리
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
});
// 버튼 이벤트 설정
btn_input.addActionListener(this);
btn_output.addActionListener(this);
btn_num.addActionListener(this);
btn_name.addActionListener(this);
btn_save.addActionListener(this);
btn_read.addActionListener(this);
}
// 이벤트 처리
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn_input) { // 입력
String str_num = textFieldNum.getText().trim();
String str_name = textFieldName.getText().trim();
String str_kor = textFieldKor.getText().trim();
String str_eng = textFieldEng.getText().trim();
String str_mat = textFieldMat.getText().trim();
// 입력 검사 : 학번, 이름
if(str_num.equals("") || str_name.equals("")) {
textArea.setText("학번과 이름을 입력하세요");
return; // 함수 강제 종료
}
// 입력 검사 : 국어, 영어, 수학
if(str_kor.equals("") || str_eng.equals("") || str_mat.equals("")) {
textArea.setText("국어, 영어, 수학 점수를 입력하세요");
return; // 함수 강제 종료
}
int kor = Integer.parseInt(str_kor);
int eng = Integer.parseInt(str_eng);
int mat = Integer.parseInt(str_mat);
int tot = kor + eng + mat;
double avg = (double)tot / 3;
ScoreVO vo = new ScoreVO();
vo.setHak(str_num);
vo.setName(str_name);
vo.setKor(kor);
vo.setEng(eng);
vo.setMat(mat);
vo.setTot(tot);
vo.setAvg(avg);
score.input(vo);
textArea.setText("입력되었습니다.");
// 화면 초기화
textFieldNum.setText("");
textFieldName.setText("");
textFieldKor.setText("");
textFieldEng.setText("");
textFieldMat.setText("");
} else if(e.getSource()==btn_output) { // 출력
textArea.setText(score.print());
} else if(e.getSource()==btn_num) { // 학번 검색
String hak = textFieldNum.getText().trim();
// 입력 검사
if(hak.equals("")) {
textArea.setText("학번을 입력해주세요");
return; // 함수 강제 종료
}
textArea.setText(score.searchHak(hak));
// 화면 초기화
textFieldNum.setText("");
} else if(e.getSource()==btn_name) { // 이름 검색
String name = textFieldName.getText().trim();
// 입력 검사
if(name.equals("")) {
textArea.setText("이름을 입력해 주세요");
return; // 함수 강제 종료
}
textArea.setText(score.searchName(name));
// 화면 초기화
textFieldName.setText("");
} else if(e.getSource()==btn_save) { // 파일 저장
textArea.setText(score.write());
} else if(e.getSource()==btn_read) { // 파일 읽기
textArea.setText(score.read());
}
}
}'Study > Java' 카테고리의 다른 글
| [Java/Eclipse] Java 48일차 (0) | 2022.11.22 |
|---|---|
| [Java/Eclipse] Java 47일차 (0) | 2022.11.21 |
| [Java/Eclipse] Java 44일차 (0) | 2022.11.16 |
| [Java/Eclipse] Java 43일차 (0) | 2022.11.15 |
| [Java/Eclipse] Java 42일차 (0) | 2022.11.15 |