본문 바로가기
혼자 공부하는 것들/JAVA

JAVA) jlabel, swing으로 카페매출관리 제작(+MySql)데이터 (삽입,삭제,검색,수정 포함)

by applepick 2020. 7. 18.
반응형

카페 매출관리시스템 초안을 바탕으로 하여 제작하였습니다. MySql과 java를 통해 구현하였습니다.

메인은 화면의 구성은 심플하게 이렇게 나타냈습니다.

 

코드의 일부 분을 발췌해서 가져왔습니다.

 EmButton = new JButton("직원,알바생");
           EmButton.addActionListener(new ActionListener(){
          	 
               @Override
               public void actionPerformed(ActionEvent e) {
                   // TODO Auto-generated method stub
                   try {
					new Employee();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
               }

 

이런 식으로 버튼을 누르면 메인화면에서 새로운 객체를 생성하여 새로운 창이 나타나도록 하였습니다.

 

sql의 테이블 코드를 간략하게 보여드리자면,

 

직원 테이블입니다. 순번,이름,근로계약서유무, 4대보험유무, 퇴직금, 현재 시급 이렇게 구성되어있습니다.

CREATE TABLE EmployeeSalary (

number INT,

name CHAR(20),

contract CHAR(5),

insurance CHAR(5),

retirement INT,

Hourlywage INT

);

화면을 보여드리자면. 이렇게 구성되어있습니다.

 

 

기능 하나 하나씩 보여드리겠습니다.

일단 이름을 입력하고 검색을 누르면

 

이런 식으로 값들을 가져와 보여주었습니다. 이제 검색 코드의 일부분을 가져와 보겠습니다.

Search.addActionListener(new ActionListener(){
            	 @Override
                 public void actionPerformed(ActionEvent e) {
            		 Connection con = makeConnection();
            	   		try{
            	   			Statement stmt = con.createStatement();
            	   			rs1 = stmt.executeQuery("SELECT * FROM EmployeeSalary WHERE name = " +"'"+search.getText()+"';");
            	   			rs1.next();
            	   			number.setText("" + rs1.getInt("number"));
                            name.setText(""+rs1.getString("name"));
                            contract.setText(""+rs1.getString("contract"));
                            insurance.setText(""+rs1.getString("insurance"));
                            retirement.setText(""+rs1.getInt("retirement"));	
                            Hourlywage.setText(""+rs1.getInt("Hourlywage"));
                            
            	   		} catch( SQLException e1) {
            	   			System.out.println(e1.getMessage());
            	   			System.exit(0);
            	   		}
                 }
             }); 

 

서치에서 입력받은 이름을 받아 search.getText()으로 값을 가져온뒤

SELECT * FROM EmployeeSalary WHERE name = " +"'"+search.getText()+"';“퀴리문에 넣어서 가져왔습니다. 나머지 필드에 가져온 값들을 대입시켜 표현했습니다.

 

직원을 입력한 상태에서 시급의 값을 받아와 한주 고정시간에 주 몇 시간을 일하는지 입력하고 확인을 누르면 주급을 나타내줍니다. 주휴수당을 구하는 공식도 포함하여 구현했습니다. 화면은 이런 식으로 구현했습니다.

 

serach의 코드를 가져와보면

Calculator.addActionListener(new ActionListener(){          	
             public void actionPerformed(ActionEvent event) {
            	 Connection con = makeConnection();
            	 int result=0;
            	 int coin=0;
     	   		try{
     	   			Statement stmt = con.createStatement();
     	   			rs1 = stmt.executeQuery("SELECT Hourlywage FROM EmployeeSalary WHERE name = "+"'"+name.getText()+"'");
     	   			rs1.next();
     	   			result = Integer.parseInt(CalculatorField.getText())*rs1.getInt("Hourlywage");
     	   			coin = (Integer.parseInt(CalculatorField.getText())/40)*8*rs1.getInt("Hourlywage");//주휴수당
     	   			rsultField.setText(String.valueOf(result+coin)+"원 (주휴수당포함)");

               } catch (SQLException e) {
                     e.printStackTrace(); 
               }
             }
         });

 

SELECT Hourlywage FROM EmployeeSalary WHERE name = "+"'"+search.getText()+"'"를 rs1에 대입하였습니다. EmployeeSalary 테이블에서 시급 필드만 선택해 search필드에서 이름을 입력값을 가져와 대입하였습니다. 또한 String타입으로 되어있어 Integer.parseInt를 통해 int형으로 형 변환을 시켜주어 주급을 result 값에 넣어 계산하였습니다. coin은 주휴수당을 계산한 것으로 공식을 살펴보면, (주에 일 한 시간/40(최대근로시간))*8*현재시급 이렇게 보여집니다. 이것도 똑같이 형 변환을 통해 int형으로 바꿔주어 계산합니다. 적용을 시키면 아래와 같이 보여집니다. 다음이나 이전으로 돌아가 찾아서 시급을 입력하여도 똑같이 적용이 됩니다. 그 이유는 어차피 Hourlywage 값을 가져오는 것이기 때문에 상관없습니다.

 

다음으로는 삽입을 구현했습니다.

 

값을 넣어서 삽입 버튼을 누르면

이렇게 화면이 뜨면서 sql에 저장되게 됩니다.

sql로 확인해보면

이렇게 추가된 것을 볼 수 있습니다.

코드를 일부분 가져와 보면

private static void addEmployeeSalary(String string, String name, String contract, String insurance, String retirement, String Hourlywage){
   		
   		Connection con = makeConnection();
   		try{
   			Statement stmt = con.createStatement();
   		
   			String s ="INSERT INTO  EmployeeSalary VALUES " ;
   			s += "(" + string + ",'"  +name +"','" + contract + "','" +insurance + "','" +retirement +"','"+Hourlywage+"')" ;
   		
   			System.out.println(s);
   		
   			int i=  stmt.executeUpdate(s);
   			if (i ==1)
   				System.out.println("레코드 추가 성공");
   			else
   				System.out.println("레코드 추가 실패");
   		} catch( SQLException e) {
   			System.out.println(e.getMessage());
   			System.exit(0);
   		}
   	}

 

addEmployeeSalary 함수를 따로 지정하여 구현했습니다.

"INSERT INTO EmployeeSalary VALUES ";

스트링 s에 "(" + string + ",'" +name +"','" + contract + "','" +insurance + "','" +retirement +"','"+Hourlywage+"')" ;를 넣어 연결 시켜주었습니다. stmt.executeUpdate(s);를 통해 삽입이 되었는지 확인하고 출력하게 됩니다.

 

버튼부분 코드를 보면

nsert = new JButton("삽입");
             insert.addActionListener(new ActionListener(){
            	   @Override
                   public void actionPerformed(ActionEvent e) {
                       addEmployeeSalary(number.getText(),name.getText(),contract.getText(),insurance.getText(),retirement.getText(),Hourlywage.getText());
                   }
             });

 

버튼이벤트클릭에addEmployeeSalary(number.getText(),name.getText(),contract.getText(),insurance.getText(),retirement.getText(),Hourlywage.getText());을 넣어 값을 입력받아 함수를 실행시켜주었습니다.

 

 

이제 삭제 부분을 보겠습니다. 방금 삽입했던 데이터부분을 삭제해보겠습니다.

여기서 현재 데이터 삭제 버튼을 누르면

이클립스에 이렇게 보여주고 mysql에서 확인해보면

 

이렇게 없어진 것을 확인할 수 있습니다.

코드 부분을 확인해보겠습니다.

public static void delete(String id) {
    	Connection conn = makeConnection();
    	Statement stmt = null;
		
    	try{
    		stmt = (Statement) conn.createStatement();
    		int s=stmt.executeUpdate("DELETE FROM EmployeeSalary where number="+id);
   		
   			System.out.println(s);
   			if (s > 0)
   				System.out.println("직원을 삭제했습니다.");
   			else
   				System.out.println("값이없습니다.");
   		} catch( SQLException e) {
   			System.out.println(e.getMessage());
   			System.exit(0);
   		}
    	
    }

 

s에다가 DELETE FROM EmployeeSalary where number="+id를 통해 id는 중복이되지않는 고유값이기 때문에 화면에 출력된 아이디 값을 받아와 삭제해주었습니다. s를 int형으로 선언한 이유는 데이터가 삭제되었는지 확인하기 위해 정수형으로 변환해 조건문을 통해 출력하게 하였습니다.

 

삭제버튼의 코드를 보면

 

delete = new JButton("현재 데이터 삭제");
             delete.addActionListener(new ActionListener(){
            	 @Override
                 public void actionPerformed(ActionEvent e) {
            		 delete(number.getText());
            	 }
            	 
             });

클릭 이벤트에 현재 선택된 아이디 값을 가져와 delete(number.getText());에 넣어 함수를 실행하였습니다.

 

다음으로는 필드 값에 들어있는 것들을 초기화해주는 버튼입니다. 코드를 살펴보면

reset = new JButton("값 초기화");
             reset.addActionListener(new ActionListener(){
            	 @Override
                 public void actionPerformed(ActionEvent e) {
            		 if(e.getSource() == reset){
            			 CalculatorField.setText("");
            			 search.setText("");
            			 rsultField.setText("");
            			 number.setText("");
            			 name.setText("");
            			 contract.setText("");
            			 insurance.setText("");
            			 retirement.setText("");
            			 Hourlywage.setText("");
            		 }
            	 }
             });

 

아주 간단하게 각 빈 값으로 setText를 사용하였습니다.

 

다음으로 수정하기버튼을 보겠습니다.

박정훈이 현재 시급이 잘못되어있습니다. 현재 시급을 수정해보도록 하겠습니다.

이런식으로 이클립스에 성공이 나옵니다.

MySql에서 확인해보면

 

잘 변경되는 것을 볼 수 있습니다.

수정 버튼의 코드를 가져와 설명해보겠습니다.

update = new JButton("수정하기");
             update.addActionListener(new ActionListener(){
            	 @Override
                 public void actionPerformed(ActionEvent e) {
            		 Connection con = makeConnection();

            	   		try{
            	   			Statement stmt = con.createStatement();
            	   		
            	   			String s ="UPDATE EmployeeSalary SET  " ;
            	   			s += "number ="+"'"+number.getText()+"',"+"name ="+"'"+name.getText()+"',"+"contract ="+"'"+contract.getText()+"',"+
            	   					"insurance ="+"'"+insurance.getText()+"',"+"retirement ="+"'"+retirement.getText()+"',"+"Hourlywage ="+"'"+Hourlywage.getText()+"'"
            	   			+"WHERE" +" "+"number ="+"'"+number.getText()+"'";
            	   		
            	   			System.out.println(s);
            	   		
            	   			int i=  stmt.executeUpdate(s);
            	   			if (i ==1)
            	   				System.out.println("레코드 추가 성공");
            	   			else
            	   				System.out.println("레코드 추가 실패");
            	   		} catch( SQLException e1) {
            	   			System.out.println(e1.getMessage());
            	   			System.exit(0);
            	   		}
                 }
             }); 

 

스트링 s를 선언하여 "UPDATE EmployeeSalary SET " ;

s+="number="+"'"+number.getText()+"',"+"name="+"'"+name.getText()+"',"+"contract="+"'"+contract.getText()+"',"+"insurance="+"'"+insurance.getText()+"',"+"retirement="+"'"+retirement.getText()+"',"+"Hourlywage ="+"'"+Hourlywage.getText()+"'"+"WHERE" +" "+"number ="+"'"+number.getText()+"'";

를 넣어줍니다. 각필드 모두를 선택하여 바꿔줍니다. number는 고유값이기 때문에 number를 받아온 값일 때라고 가정하였습니다. 확인하기 위해 stmt.executeUpdate(s);값을 I에다 대입하고 조건문을 통해 제대로 수정되었는지 확인하였습니다.

 

나머지 테이블도 동일하게 완성했습니다. 아직까지 완벽하게 예외처리까지는 하지 못하였지만 조금이나마 도움이 되었으면 좋겠습니다.

 

반응형

댓글