import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.awt.Container;
import javax.swing.*;
import javax.swing.table.*;
class Test extends JFrame
{
Label lb = new Label("(이름)님의 (학기)성적입니다");
Label lb2 = new Label("성적결과");
Container cp; //전체 화면구성
JScrollPane jsp; //스크롤
JTable table; // 데이터 입력받을 테이블
DefaultTableModel model;
int count=0;//검색된 학기 들은 과목 수
String field[]={"이름","과목명","학년","학기","학점","성적"}; //배열
String data[][]={ //배열 데이터
{"전광하","전자계산개론","1","1","2","C+"},
{"전광하","유비쿼터스광고" ,"3","2","2","C"},
};
JPanel down; //레이블과 텍스트 입력칸
JLabel lbl[]=new JLabel [6]; //라벨 갯수
JTextField txt[]=new JTextField[6]; // 텍스트필드 갯수
JButton btnExe; //버튼
JButton btnDelete; //버튼
JButton btnSearch; //버튼
JButton btnUpdate; //버튼
//생성자
Test() //전체 화면 구성
{
cp=getContentPane();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //닫힘
setDesign();
setBounds(0,0,1024,768); //크기
setVisible(true); //보여짐
}
//디자인
void setDesign()
{
FlowLayout flow = new FlowLayout();
this.setLayout(flow);
this.add(lb);
lb.setBounds(500,0,200,100);
this.add(lb2);
lb2.setBounds(500,100,300,300);
cp.setLayout(null);
//테이블
model=new DefaultTableModel(field,0);//테이블 모델 생성
table=new JTable(model);
JOptionPane.showMessageDialog(Test.this,"안녕하세요\n학점관리프로그램입니다\n");
int sel=JOptionPane.showConfirmDialog(Test.this,"기본데이터를 로드하시겠습니까?","기본정보",JOptionPane.YES_NO_OPTION);
if(sel==JOptionPane.YES_OPTION)
{
for(int i=0;i<data.length;i++)//테이블모델에 데이터 삽입
model.addRow(data[i]);
}
jsp=new JScrollPane(table); // 스크롤을 테이블에 적용
jsp.setBounds(0,70,500,480); //테이블 화면 크기
//레이블과 텍스트 필드
down=new JPanel(); // 레이블 나누기
down.setLayout(new GridLayout(2,6)); // 2행 6행로
down.setBounds(0,0,500,70); //크기
//배경 색
for(int i=0;i<field.length;i++)//레이블삽입
{
lbl[i]=new JLabel(field[i],(int)JLabel.CENTER_ALIGNMENT);
lbl[i].setBackground(Color.white);
down.add(lbl[i]);
}
for(int i=0;i<field.length;i++)//텍스트필드삽입
{
txt[i]=new JTextField("");
txt[i].setBackground(Color.white);
down.add(txt[i]);
}
MyAction ma=new MyAction();//액션이벤트 클래스 생성
//최하단 버튼
JPanel btnPanel=new JPanel();
btnExe=new JButton("삽입");
btnDelete=new JButton("삭제");
btnSearch=new JButton("학점출력");
btnUpdate=new JButton("종료");
btnPanel.setBounds(0,550,1000,50);
btnPanel.setLayout(new GridLayout(1,3));
btnPanel.add(btnExe);btnPanel.add(btnDelete);btnPanel.add(btnSearch);btnPanel.add(btnUpdate);//패널에 버튼등록
btnExe.addActionListener(ma);
btnDelete.addActionListener(ma);//버튼액션등록
btnSearch.addActionListener(ma);
btnUpdate.addActionListener(ma);
//등록
cp.add(jsp);//테이블
cp.add(down);//레이블과텍스트필드
cp.add(btnPanel);//하단버튼
}
/*************************************************************************
파 일 입 출 력 함 수
1.파일 불러오기
2.파일 저장하기
**************************************************************************/
/*************************************************************************
액 션 내 부 클 래 스
1.메뉴액션
2.버튼액션
**************************************************************************/
//메뉴액션
//버튼 액션
public class MyAction implements ActionListener
{
//액션 퍼폼
public void actionPerformed(ActionEvent e)
{
//데이터 삽입
if(e.getActionCommand()=="삽입" )
{
String temp[]=new String[6];
for(int i=0;i<field.length;i++)
temp[i]=txt[i].getText();
if(-1==f(temp))//키 중복확인
{
System.out.println("데이터삽입");
model.addRow(temp);
for(int i=0;i<txt.length;i++)
txt[i].setText("");
}
else
{
JOptionPane.showMessageDialog(Test.this,"중복데이터가 있습니다");
}
}
//데이터삭제
else if(e.getActionCommand()=="삭제")
{
int sel=JOptionPane.showConfirmDialog(Test.this,"데이터를 정말삭제하시겠습니까?",
"경고",JOptionPane.YES_NO_OPTION);
if(sel==JOptionPane.YES_OPTION)
{
String temp[]=new String[2];
temp[0]=JOptionPane.showInputDialog(Test.this,"삭제 이름 입력:");
temp[1]=JOptionPane.showInputDialog(Test.this,"삭제 과목 입력:");
model.removeRow(f(temp));//키의위치반환
}
}
//데이터검색
else if(e.getActionCommand()=="학점출력")
{
String temp[]=new String[3];
temp[0]=JOptionPane.showInputDialog(Test.this,"검색 이름 입력:");
temp[1]=JOptionPane.showInputDialog(Test.this,"해당 학년 입력:");
temp[2]=JOptionPane.showInputDialog(Test.this,"해당 학기 입력:");
f2(temp);
}
else if(e.getActionCommand()=="종료")
{
System.exit(0);
}
}
}
/*************************************************************************
액 션 클 래 스 보 조
1.키 중복 테스트 함수
2.데이터 검색 함수
3.학기 학점 평균 함수
4.문자에 대한 학점변환 함수
**************************************************************************/
//키 중복 테스트 함수(키의 위치반환)
public int f(String temp[])
{
int row;
for(row=0;row<model.getRowCount();row++)
{
if(temp[0].equals(model.getValueAt(row,0)) && temp[1].equals(model.getValueAt(row,1)))
return row;//키를 찾을 때 키의 위치 반환
}
return -1;//삽입가능
}
//데이터 검색 함수(학기 평균 계산)
public void f2(String temp[])
{
int row;
String ar[][]=new String[15][2];//학기 평균을 구하기 위한 과목저장 스트링
String show=new String("이름:\t"+temp[0] +"님의\n"+temp[1]+"학년"+temp[2]+"학기 성적"+"\n\n");
for(row=0;row<model.getRowCount();row++)
{
//이름,학년,학기 검색
if(temp[0].equals(model.getValueAt(row,0)) && temp[1].equals(model.getValueAt(row,2)) &&
temp[2].equals(model.getValueAt(row,3)) )
{
show+=model.getValueAt(row,1)+" "+model.getValueAt(row,5)+"\n";//과목이름,과목 성적
ar[count ][0]=(String)model.getValueAt(row,4);//몇 학점 과목(2 or 3)
ar[count++][1]=(String)model.getValueAt(row,5);//과목 성적(A+ or C+...)
}
}
show+="<html><font color=red>학기 평균 학점 = " +avg(ar)+"</font></html>\n";
JOptionPane.showMessageDialog(Test.this,show);//결과 출력
}
//학기 학점 평균 계산
public double avg(String ar[][])
{
int totalHak=0;//학기 수강한 총 학점수
double sum=0;//수강점수
for(int i=0;i<count;i++)//들은 과목수만큼 계산
{
System.out.println(ar[i][0]+ " "+ar[i][1]);
totalHak+=Integer.parseInt(ar[i][0]);
sum+=getValue(ar[i][1])*Integer.parseInt(ar[i][0]);// ex) 4.0 * 3
}
count=0;
return sum/totalHak;
}
//학점에 대한 값을 반환
public double getValue(String str2)
{
double temp;
String str=str2.toUpperCase();//대문자변경
if(str.equals("A+")) temp=4.5;
else if(str.equals("A")) temp=4.0;
else if(str.equals("B+"))temp=3.5;
else if(str.equals("B")) temp=3.0;
else if(str.equals("C+"))temp=2.5;
else if(str.equals("C")) temp=2.0;
else if(str.equals("D+"))temp=1.5;
else if(str.equals("D")) temp=1.0;
else temp=0.0;
return temp;
}
/*************************************************************************
메 인 함 수
**************************************************************************/
public static void main(String[] args)
{
new Test();
}
}