< 성적프로그램 >
1. 조건
- Swing패키지의 컨테인와 컴포넌트를 사용
- 한 학생에 대한 학생 정보 및 성적 정보 → 학번, 성명, 학년, 반, 국어, 영어, 수학, 과학, 총점, 평균
- 입력 : JTextField를 사용하여 입력 받는다.
- 입력받은 정보를 기번으로 2번의 내용을 JTable에 출력
- MVC model 사용여부는 선택
- 실행화면
2. 코드
M
- StudentScoreVO, StudentScoreDVO
package score.vo;
public class StudentScoreVO {
private int stuId; //학번
private String name; //이름
private int grade; //학년
private int ban; //반
private int kor; //영어
private int eng; //영어
private int math; //수학
private int sci; //과학
private int total; //총점
private double avg; //평균
public StudentScoreVO() {
}
public StudentScoreVO(int stuId, String name, int grade, int ban, int kor, int eng, int math, int sci, int total,
double avg) {
super();
this.stuId = stuId;
this.name = name;
this.grade = grade;
this.ban = ban;
this.kor = kor;
this.eng = eng;
this.math = math;
this.sci = sci;
this.total = total;
this.avg = avg;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getBan() {
return ban;
}
public void setBan(int ban) {
this.ban = ban;
}
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 getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getSci() {
return sci;
}
public void setSci(int sci) {
this.sci = sci;
}
public int getTotal() {
return total;
}
public void setTotal() {
this.total = kor + sci + math + eng;
}
public double getAvg() {
return avg;
}
public void setAvg() {
this.avg = total / 4.0;
}
@Override
public String toString() {
return "StudentScoreVO [stuId=" + stuId + ", name=" + name + ", grade=" + grade + ", ban=" + ban + ", kor="
+ kor + ", eng=" + eng + ", math=" + math + ", sci=" + sci + ", total=" + total + ", avg=" + avg + "]";
}
}
package score.vo;
import java.util.ArrayList;
public class StudentScoreDAO {
// ArrayList 만들기
ArrayList<StudentScoreVO> scoList = new ArrayList();
// insert 만들기
public void insert(StudentScoreVO sco) {
scoList.add(sco);
}
// select
public ArrayList<StudentScoreVO> select(){
return scoList;
}
//delete 삭제 메소드
public void delete(int row){
scoList.remove(row);
}
}
- V
- StudentScoreView
package score.view;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import score.vo.StudentScoreVO;
public class StudentScoreView extends JPanel {
// 5,4
JTable table;
DefaultTableModel model;
ArrayList<StudentScoreVO> scoreVOList;
String header[] = { "학번", "이름", "학년", "반", "국어", "영어", "수학", "과학", "총점", "평균" };
// 패널 선언
JPanel panS;
JLabel lbls[] = new JLabel[header.length - 2];
JTextField tf[] = new JTextField[header.length - 2];
// 버튼 추가
JButton btnAdd = new JButton("성적 추가");
// 생성자
public StudentScoreView() {
setLayout(new BorderLayout());
panS = new JPanel();
panS.setLayout(new GridLayout(5, 4)); // 행 열
for (int i = 0; i < lbls.length; i++) {
lbls[i] = new JLabel(header[i]);
panS.add(lbls[i]);
tf[i] = new JTextField();
panS.add(tf[i]);
}
// 빈칸추가
for (int i = 0; i < 3; i++) {
panS.add(new JLabel(" "));
}
panS.add(btnAdd);
}
// initView : JLable
public void initView() {
model = new DefaultTableModel(header, scoreVOList.size()) {
@Override
public boolean isCellEditable(int row, int column) {
return false; // 편집 안되게
}
};
// 컬럼들의 너비 설정
table = new JTable(model);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(50);
table.getColumnModel().getColumn(2).setPreferredWidth(50);
table.getColumnModel().getColumn(3).setPreferredWidth(50);
table.getColumnModel().getColumn(4).setPreferredWidth(50);
table.getColumnModel().getColumn(5).setPreferredWidth(50);
table.getColumnModel().getColumn(6).setPreferredWidth(50);
table.getColumnModel().getColumn(7).setPreferredWidth(50);
table.getColumnModel().getColumn(8).setPreferredWidth(50);
table.getColumnModel().getColumn(9).setPreferredWidth(50);
// 스크롤바 만들기
JScrollPane scroll = new JScrollPane(table);
putResult();
add("Center", scroll);
add("South", panS);
}
public void putResult() {
// modelml 행 개수 설정
model.setRowCount(scoreVOList.size());
StudentScoreVO vo = null;
for (int i = 0; i < scoreVOList.size(); i++) {
vo = scoreVOList.get(i);
model.setValueAt(vo.getStuId(), i, 0);
model.setValueAt(vo.getName(), i, 1);
model.setValueAt(vo.getGrade(), i, 2);
model.setValueAt(vo.getBan(), i, 3);
model.setValueAt(vo.getKor(), i, 4);
model.setValueAt(vo.getEng(), i, 5);
model.setValueAt(vo.getMath(), i, 6);
model.setValueAt(vo.getSci(), i, 7);
model.setValueAt(vo.getTotal(), i, 8);
model.setValueAt(vo.getAvg(), i, 9);
}
}
public void setscoreVOList(ArrayList<StudentScoreVO> scoreVOList) {
this.scoreVOList = scoreVOList;
}
public JButton getBtnAdd() {
return btnAdd;
}
public StudentScoreVO neededInsertData() {
StudentScoreVO vo = new StudentScoreVO();
vo.setStuId(Integer.parseInt(tf[0].getText()));
vo.setName((tf[1].getText()));
vo.setGrade(Integer.parseInt(tf[2].getText()));
vo.setBan(Integer.parseInt(tf[3].getText()));
vo.setKor(Integer.parseInt(tf[4].getText()));
vo.setEng(Integer.parseInt(tf[5].getText()));
vo.setMath(Integer.parseInt(tf[6].getText()));
vo.setSci(Integer.parseInt(tf[7].getText()));
vo.setTotal();
vo.setAvg();
return vo;
}
public void initInsertData() {
for (int i = 0; i < tf.length; i++) {
tf[i].setText("");
}
}
public JTable getTable() {
return table;
}
}
- C
- StudentScoreController
package score.controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import score.vo.StudentScoreVO;
import score.view.StudentScoreView;
import score.vo.StudentScoreDAO;
import score.vo.StudentScoreVO;
public class StudentScoreController extends JFrame {
StudentScoreDAO dao;
ArrayList<StudentScoreVO> scoreVOLIst;
StudentScoreView view;
JTable table;
public StudentScoreController() {
dao = new StudentScoreDAO();
view = new StudentScoreView();
scoreVOLIst = dao.select();
view.setscoreVOList(scoreVOLIst);
view.initView();
JButton btnAdd = view.getBtnAdd();
btnAdd.addActionListener(btnAddL);
// table 만들기
table = view.getTable();
table.addMouseListener(tableL);
add(view, "Center");
setTitle("성적 관리 시스템");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(200, 100);
setSize(600, 500);
setVisible(true);
}
public static void main(String[] args) {
new StudentScoreController();
}
ActionListener btnAddL = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// neededInsertData() : panS에 있는 JTextField에 입력된 값들과 JCombobox의 값
// BookVO에 필드값들을 초기화하여 BookVO 객체에 참조값을 변환하는 메소드
StudentScoreVO vo = view.neededInsertData();
dao.insert(vo);
scoreVOLIst = dao.select();
view.setscoreVOList(scoreVOLIst);// bookVOLIst를 다시 view에 넣어주기
view.putResult();
view.initInsertData(); // (사용자의 편리를 위한것) 기존의 입력됐던 값들을 처음으로 초기화시켜줌
}
};
// 마우스로 더블 클릭했을 때
MouseAdapter tableL = new MouseAdapter() { //필요한 메소드만 오버라이딩해서 사용할 수 있음
public void mouseClicked(MouseEvent e) {
int state = 1;
// 클릭된 횟수
if (e.getClickCount() == 2) { // 더블클릭
state = JOptionPane.showConfirmDialog(StudentScoreController.this, "정말 삭제하시겠습니까?", "삭제여부",
JOptionPane.YES_NO_OPTION); // 그냥 this 쓰면 리스너 참조값이 되어버림 JFrame의 상속을 받은 StudentScoreController를 tkdyd
if (state == JOptionPane.YES_OPTION) {
dao.delete(table.getSelectedRow());
scoreVOLIst = dao.select();
view.setscoreVOList(scoreVOLIst);
view.putResult();
//view.initInsertData();
}
}
}
};
}
3. 실행 화면
4. 마우스 만드는법
첫번째 방법
new MouseListener() {
5개 메소드 오버라이딩
}
단점 : 5개의 메소드를 오버라이딩 해야됨 하나만 필요한데
두번째 방법
MouseAdapter tableL = new MouseAdapter() {
public void MouseAdapter tableL = new MouseAdapter() {
}
};
<체질량지수(BMI)>
1. 조건
- bmi(kg/m^) = 체중 / (키/100)^
- String.format(”%.2f”, bmi)
- 키, 체중, bmi
2. 코드
- M
- BMIVO
package bmi.vo;
public class BMIVO {
private double weight;
private double height;
private double bmi;
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getBmi() {
return bmi;
}
public void setBmi() {
this.bmi = weight / Math.pow(height/100, 2);
}
}
- BMIDAO
package bmi.vo;
import java.util.ArrayList;
public class BMIDAO {
//ArrayList
ArrayList<BMIVO> bmiList = new ArrayList();
//Insert
public void insert(BMIVO bmi) {
bmiList.add(bmi);
}
//select
public ArrayList<BMIVO> select() {
return bmiList;
}
}
- V
- BMIView
package bmi.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import bmi.vo.BMIVO;
public class BMIView extends JFrame {
JTextField tfWeight, tfHeight;
JLabel lblIcon, lblResult;
public BMIView() {
add(new PanelAbove(),"North");
add(new PanelBelow(),"Center");
setTitle("BMI(Body Measure Index)");
setResizable(false); // 화면 크기 고정하는 작업
setLocationRelativeTo(null); //윈도우 창을 화면의 가운데에 띄우는 역할
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(50, 50);
setSize(400, 600);
setVisible(true);
}
//inner 클래스
class PanelAbove extends JPanel{
public PanelAbove() {
setBackground(new Color(204, 204, 255));
setLayout(new BorderLayout());
JLabel lblTitle = new JLabel("체질량지수(BMI)", JLabel.CENTER);
Font font = new Font("맑은 고딕", Font.BOLD, 25);
lblTitle.setFont(font);
JLabel lblWeight = new JLabel("체중: ");
JLabel lblHeight = new JLabel("신장: ");
JLabel lblkg = new JLabel("㎏");
JLabel lblcm = new JLabel("㎝");
JButton btnResult = new JButton("결과확인");
btnResult.addActionListener(btnL);
tfWeight = new JTextField(10);
tfHeight = new JTextField(10);
add(lblTitle, "North");
JPanel panCenter = new JPanel(new BorderLayout());
JPanel[] pans = new JPanel[3];
for (int i = 0; i < pans.length; i++) {
pans[i] = new JPanel();
}
panCenter.add(pans[0], "North");
panCenter.add(pans[1], "Center");
pans[0].add(lblWeight); pans[0].add(tfWeight); pans[0].add(lblkg);
pans[1].add(lblHeight); pans[1].add(tfHeight); pans[1].add(lblcm);
pans[2].add(btnResult);
add(panCenter, "Center");
add(pans[2], "South");
}
}
class PanelBelow extends JPanel{
public PanelBelow() {
setBackground(new Color(255, 204, 229));
setLayout(new BorderLayout());
lblResult = new JLabel("<html><center>당신의 체중은 _㎏, 키는 _㎝이므로<br>bmi지수는 _㎏/㎡이며, __체중입니다.</center></html>", JLabel.CENTER);
Font font = new Font("맑은 고딕", Font.BOLD, 20);
lblResult.setFont(font);
ImageIcon icon = new ImageIcon("imgs/bmi_original.jpg");
lblIcon = new JLabel(icon, JLabel.CENTER);
add(lblResult, "North");
add(lblIcon, "Center");
}
}
ActionListener btnL = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// BMIVO 객체에 입력 받은 체중과 키를 설정하고 bmi를 설정한다.
BMIVO vo = new BMIVO();
double weight = Double.parseDouble(tfWeight.getText());
double height = Double.parseDouble(tfHeight.getText());
vo.setWeight(weight);
vo.setHeight(height);
vo.setBmi();
String bmiResult ="";
ImageIcon icon = null;
if(vo.getBmi() < 18.5) {
bmiResult = "저";
icon = new ImageIcon("imgs/under.jpg");
}else if(vo.getBmi() < 24.9) {
bmiResult = "정상";
icon = new ImageIcon("imgs/normal.jpg");
}else if(vo.getBmi() < 29.9) {
bmiResult = "과";
icon = new ImageIcon("imgs/over.jpg");
}else if(vo.getBmi() < 34.9) {
bmiResult = "비만";
icon = new ImageIcon("imgs/obese.jpg");
}else {
bmiResult = "고도비만";
icon = new ImageIcon("imgs/extremely.jpg");
}
lblResult.setText("<html><center>당신의 체중은 "+vo.getWeight()+"㎏, 키는 "+vo.getHeight()+"㎝이므로"
+ "<br>bmi지수는 "+String.format("%.1f", vo.getBmi())+"㎏/㎡이며,<br> "
+bmiResult+"체중입니다.</center></html>");
lblIcon.setIcon(icon);
}
};
}
- C
- BMIController
package bmi.controller;
import bmi.view.BMIView;
public class BMIController {
public static void main(String[] args) {
new BMIView();
}
}
3. 실행 화면
'AfterSchool > 자바 방과후' 카테고리의 다른 글
Vending machine GUI로 만들기(1231) (2) | 2023.01.03 |
---|---|
깃허브 쓰는법, Vending Machine 로직소스 만들기(1230) (0) | 2022.12.30 |
Event Programming EventListener 4가지 방법과 도서 정보 관리 시스템(1228) (0) | 2022.12.28 |
상속 예제와 JFrame 사진 넣고 버튼 누르면 이미지 변환(1227) (0) | 2022.12.27 |
MVC 모델, ArrayList, 오버라이딩 기초를 배워서 학생 정보 관리 시스템 만들기(1226) (0) | 2022.12.26 |