본문 바로가기

전공 공부/프로그래밍

자바 성적관리 프로그램 수정중

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();
    }
}