카페 매출관리시스템 초안을 바탕으로 하여 제작하였습니다. 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에다 대입하고 조건문을 통해 제대로 수정되었는지 확인하였습니다.
나머지 테이블도 동일하게 완성했습니다. 아직까지 완벽하게 예외처리까지는 하지 못하였지만 조금이나마 도움이 되었으면 좋겠습니다.
'혼자 공부하는 것들 > JAVA' 카테고리의 다른 글
맥북 자바 버전 변경하는 방법 (0) | 2021.12.10 |
---|---|
JAVA) StringBuffer와 String의 차이점과 쓰는이유 (0) | 2020.12.06 |
JAVA) 문자열뒤집기 +LinkedList사용 (0) | 2020.07.18 |
JAVA) 로또 번호 생성기 +HashSet 사용 (0) | 2020.07.18 |
JAVA) java push,pop이용하여 괄호 쌍 맞추기 (0) | 2020.07.18 |
댓글