게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
까페 운영 프로그램 제작기 -4-
게시물ID : programmer_11848짧은주소 복사하기
작성자 : 자바돌이
추천 : 1
조회수 : 634회
댓글수 : 2개
등록시간 : 2015/07/03 16:03:58
erd알려주세요.PNG

어제 3탄 글에서 erd 툴을 물어보셔서 알려드릴게요

구글에 exerd라고 검색하시면 exerd라는 프로그램에 대해서 쭈욱 나오거든요
이 프로그램이 좋은게 이클립스에서 소프트웨어로 설치할수 있어서 이클립스 하나만 키면
코딩도 되고 erd 설계도 되서 좋은거 같아요

어제부터 지금까지 한 작업을 보고하겠습니다

분명 어제 제가 올렸던 메뉴 등록/삭제 상세 메뉴의 모양은 대충 이랬는데요

메뉴 등록,삭제_상세메뉴.PNG


이렇게 하다가 갈아엎어버렸어요

왜냐구요 ? 메뉴 등록 완성하고 메뉴 목록에 리스트 띄우는것도 완성했는데 
메뉴 목록 리스트 정렬도 안되고 awt로 만든거라 정말 레이아웃 속성 null로 해놓고 하니까 정말 제가
디자이너가 된 기분이 들어서 그냥 SWING으로 할려고 갈아엎었어요 

그래서 메뉴 등록/삭제에다가 수정까지 추가한 결과를 올립니다

swing결과.PNG

코드도 올립니당
-----------------------------------------------------------------------------------------------------------
package com.server.menu;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
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;

public class menuHandle2 extends JFrame{
//테이블에 표시될 데이터를 저장하는 변수 
private Vector data = null;
private Vector title = null; //테이블에 표시될 타이틀을 저장하는 변수
private JTable table = null; //JTable
private DefaultTableModel model = null; //테이블에 표시될 타이틀과 데이터를 저장하는 모델 객체 변수 선언
//버튼
private JButton btnAdd = null, btnDelete = null, btnUpdate = null;
//텍스트필드
private JTextField beverageNum = null, korean = null, english = null, cost = null;
//콤보박스
private JComboBox type = null;
//라벨
private JLabel lbBeverageNum = null, lbType = null, lbKorean = null, lbEnglish = null, lbPrice = null;
private String DB_URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private String DB_USER = "caffe";
private String DB_PASSWORD = "jonahyang0509";
private Connection conn = null;
private Statement stmt = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
//생성자 : frame초기화, 패널 생성, 테이블 생성, 모델 생성, 컴포넌트 생성 및 초기화
public menuHandle2(){
super("test입니다");
//DB연동 설정
preDBTreatment();
//테이블에 표시될 데이터 벡터 생성
data = new Vector<>();
//테이블에 표시될 타이틀 벡터 생성, 초기화
title = new Vector<>();
title.add("No");
title.add("Type");
title.add("KorName");
title.add("EngName");
title.add("Price");
//모델 객체생성
model = new DefaultTableModel();
//selectAll() : 데이터베이스 테이블에 있는 모든 데이터를 가지고 오는 메서드 
//벡터 result에 저장
Vector result = selectAll();
//모델에 변경된 데이터를 새로 적용
model.setDataVector(result, title);
//모델을 통해 테이블 생성
table = new JTable(model);
//테이블에 스크롤팬 생성(스크롤팬 위에 테이블을 안올리면 테이블 안보임)
JScrollPane jsp = new JScrollPane(table);
//테이블에 마우스 클릭 시 처리될 이벤트 등록
table.addMouseListener(new MouseAdapter(){

//마우스 클릭 시 처리를 담당하는 메서드 재정의
@Override
public void mouseClicked(MouseEvent e) {
//테이블에서 선택된 줄의 값을 가지고 오는 메서드
int index = table.getSelectedRow();
//선택된 줄의 데이터 가지고 옴
Vector in = (Vector)data.get(index);
//선택된 줄의 데이터 꺼냄
String num = (String)in.get(0);
String type = (String)in.get(1);
String korname = (String)in.get(2);
String engname = (String)in.get(3);
String price = (String)in.get(4);
//텍스트필드에 값 세팅 
beverageNum.setText(num);
korean.setText(korname);
english.setText(engname);
cost.setText(price);
}
});
//화면에 표시될 패널 생성
JPanel panel = new JPanel();
//콤보박스 생성
type = new JComboBox();
type.addItem("Coffee");
type.addItem("Frappuccino");
type.addItem("Tea");
type.addItem("Summer");
type.setEditable(true);
//텍스트필드 생성
beverageNum = new JTextField(3);
korean = new JTextField(30);
english = new JTextField(30);
cost = new JTextField(4);
//라벨 생성
lbBeverageNum = new JLabel("No");
lbType = new JLabel("타입");
lbKorean = new JLabel("한글명");
lbEnglish = new JLabel("영문명");
lbPrice = new JLabel("가격");
//버튼 생성
//private JButton btnAdd = null, btnDelete = null, btnUpdate = null;
btnAdd = new JButton("등록");
btnDelete = new JButton("삭제");
btnUpdate = new JButton("수정");
//등록 버튼 클릭 시 이벤트 처리
btnAdd.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
//현재 텍스트 필드에 있는 값을 변수에 대입
String kind = (String)type.getSelectedItem();
String korName = korean.getText();
String engName = english.getText();
int price = Integer.parseInt(cost.getText());
//insert method
insert(kind, korName, engName, price);
//신규 저장된 데이터베이스를 다시 읽어와서 result 벡터에 저장
Vector result = selectAll();
//변경된 데이터로 모델 갱신 -> 테이블 갱신됨 
model.setDataVector(result, title);
}
});
//삭제 버튼 클릭 시 이벤트 처리 
btnDelete.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
//텍스트필드에 있는 beverageNum 값 변수에 대입
int No = Integer.parseInt(beverageNum.getText());
//delete method
delete(No);
//삭제 처리 반영된 데이터베이스를 다시 읽어와서 result 벡터에 저장
Vector result = selectAll();
//변경된 데이터로 모델 갱신 -> 테이블 갱신됨
model.setDataVector(result, title);
}
});
//수정 버튼 클릭 시 이벤트 처리
btnUpdate.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
//텍스트필드에 있는 값을 변수에 저장
int No = Integer.parseInt(beverageNum.getText());
String kind = (String)type.getSelectedItem();
String korName = korean.getText();
String engName = english.getText();
int price = Integer.parseInt(cost.getText());
//update method
update(No, kind, korName, engName, price);
//갱신 후 데이터베이스를 다시 읽어옴
Vector result = selectAll();
//변경된 데이터로 모델 갱신 -> 테이블 갱신
model.setDataVector(result, title);
}
});
//패널에 각각 라벨과 텍스트필드 추가
panel.add(lbBeverageNum);
panel.add(beverageNum);
panel.add(lbType);
panel.add(type);
panel.add(lbKorean);
panel.add(korean);
panel.add(lbEnglish);
panel.add(english);
panel.add(lbPrice);
panel.add(cost);
//패널에 버튼 추가
panel.add(btnAdd);
panel.add(btnDelete);
panel.add(btnUpdate);
//프레임의 contentpane 컨테이너 가져오기
Container c = getContentPane();
//컨테이너에 테이블, 패널 추가
c.add(new JLabel("메뉴 등록/삭제/수정",JLabel.CENTER),"North");
c.add(jsp,BorderLayout.CENTER);
c.add(panel,BorderLayout.SOUTH);
//프레임 종료시 처리될 이벤트 처리(DB종료 처리 여기서 함 )
addWindowListener(new WindowAdapter(){

@Override
public void windowClosing(WindowEvent e) {
try{
pstmt.close();
stmt.close();
conn.close();
setVisible(false); //화면 닫기
dispose(); //자원 반납
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}
//insert method
private void insert(String type, String korName, String engName, int Price){
try{
pstmt = conn.prepareStatement("insert into beverage values(seq_beveragenum.nextval,?,?,?,?)");
pstmt.setString(1, type);
pstmt.setString(2, korName);
pstmt.setString(3, engName);
pstmt.setInt(4, Price);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
//delete method
private void delete(int No){
try{
pstmt = conn.prepareStatement("delete from beverage where beveragenum = ?");
pstmt.setInt(1, No);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
//update method
private void update(int No, String kind, String korName, String engName, int price){
try{
pstmt = conn.prepareStatement("update beverage set kind=?, korname=?, engname=?, price=? where beveragenum=?");
pstmt.setString(1, kind);
pstmt.setString(2, korName);
pstmt.setString(3, engName);
pstmt.setInt(4, price);
pstmt.setInt(5, No);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
//selectAll() : 데이터베이스 테이블에 있는 모든 데이터를 가지고 오는 메서드 
private Vector selectAll() {
// TODO Auto-generated method stub
data.clear();
try{
rs = stmt.executeQuery("select beveragenum, kind, korname, engname, to_char(price,'FM9,999,999') from beverage");
while(rs.next()){
Vector in = new Vector<String>(); // 1개의 레코드 저장하는 벡터 생성
//벡터에 값 추가 
in.add(Integer.toString(rs.getInt(1)));
in.add(rs.getString(2));
in.add(rs.getString(3));
in.add(rs.getString(4));
in.add(rs.getString(5));
//전체 데이터를 저장하는 벡터에 1개의 레코드 저장하는 벡터 추가
data.add(in);
}
}catch(Exception e){
e.printStackTrace();
}
//전체 데이터 저장하는 벡터 리턴
return data;
}

//DB연동 및 connection, statement 생성
private void preDBTreatment(){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD);
stmt = conn.createStatement();
}catch(Exception e){
e.printStackTrace();
}
}
}

-----------------------------------------------------------------------------------------------------------

훨씬낫죠 진짜

참고로 이 프로그램은 http://estindev.tistory.com/48 이 글 코드를 참고했습니다 ㅠㅠ
SWING 쓰니까 정말 이쁘고 깔끔하게 되더라고요

이제 지금부터 할 일은 저번에 정리해놨던 메뉴들을 다 등록시키고 

temp.PNG

체인점 등록/삭제/비활성화 상세 메뉴를 구현할 예정이구요
메뉴 등록/삭제랑 많은 차이가 없을거 같아서 금방 끝날거 같아서 
아마 회원 관리, 이벤트 등록/삭제/비활성화 메뉴까지 금방 할수 있을거같아요

위의 할 일을 오늘 다 끝냈으면 좋겠어요

그럼 프로그래머 게시판 님들 오늘 하루도 즐거운 하루되세요 !! 

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호