모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_11848
    작성자 : 자바돌이
    추천 : 1
    조회수 : 632
    IP : 125.133.***.141
    댓글 : 2개
    등록시간 : 2015/07/03 16:03:58
    http://todayhumor.com/?programmer_11848 모바일
    까페 운영 프로그램 제작기 -4-
    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

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

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

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


    이 게시물을 추천한 분들의 목록입니다.
    [1] 2015/07/03 16:06:21  210.95.***.36  구차니  168644
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    23457
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/11/18 14:02 224 0
    23456
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/10/28 18:24 670 0
    23455
    논문 읽는 사람들을 위한 문서 번역 서비스 rWhale 24/10/10 13:06 994 2
    23453
    로또번호 [2] 까망사투리 24/09/19 11:10 1434 2
    23452
    AI와 함께가는 코딩 업계 [1] 펌글 우가가 24/09/02 22:19 1833 9
    23451
    Switch문 도배된 2100줄 짜리 함수 [3] 펌글 우가가 24/08/26 22:37 1743 4
    23450
    개인정보 수집 없는 이미지 리사이즈 사라밍 24/08/23 20:31 1262 0
    23449
    디자인 패턴의 템플릿 메소드 패턴 실무 적용 사례 써니썬 24/08/23 16:47 1279 1
    23448
    TMDB API Key 얻을 때 동의하게 되는 면책 및 포기 조항 우가가 24/08/18 16:07 1283 1
    23447
    펌) 아무튼 개쩌는 번역기를 국내기술로 개발완료 했다는 소식 [1] 펌글 우가가 24/08/15 17:30 1543 2
    23446
    쿠팡 가격 변동 추적 알림 서비스 피드백 요청 (제발) 창작글펌글 애오옹 24/08/10 14:30 1450 0
    23445
    넥사크로 17.1 관련 [2] 본인삭제금지 나르하나 24/08/01 12:30 1489 0
    23444
    개밯자 의자에 머리받침 없어 [1] 까망사투리 24/07/25 13:32 1807 1
    23443
    안드로이드 EditText 리스너 연동 문의드립니다. - 해결됨 [1] 창작글 상사꽃 24/07/01 17:47 1750 2
    23442
    펌) 파이어폭스 엔진이 신인 이유 [1] 펌글 우가가 24/06/30 23:25 2318 2
    23441
    예전에는 함수 하나에 대한 기능에 고민을 많이 했는데.. ssonacy 24/05/21 09:45 2124 0
    23440
    c++ 에서 DB 쿼리문처럼 사용할 방법이 있을까요? [8] 상사꽃 24/05/19 11:10 2273 0
    23439
    쉬운 배터리 알림 창작글 언젠가아자 24/05/14 10:47 2418 0
    23438
    아후 서터레스 [1] NeoGenius 24/04/02 17:52 2110 1
    23436
    로또 [3] 까망사투리 24/03/11 15:53 2746 4
    23434
    copilot 기업유료버전 intelliJ에 붙여서 쓰고있는데 지리네요 안녕월드 24/02/22 00:15 2781 0
    23433
    코딩마을 대나무숲 [6] cocoa 24/02/20 14:50 2949 5
    23432
    (질문) 프로그래머분들은 싱글PC게임 레벨제한 풀수 있죠?? [23] 본인삭제금지 할배궁디Lv2 24/02/13 13:36 2952 1
    23431
    Freemium NeoGenius 24/02/13 13:23 2411 0
    23429
    부산에서 프로그래머 구인하는데 연봉 6천에서 8천 작은건가 [3] 폴팡 24/02/04 20:50 3266 1
    23427
    chatgpt? bard? [4] 별빛러브 24/01/25 06:24 2551 0
    23426
    Next.js로 만들어봤어요~ [2] 창작글 sonnim 24/01/24 12:52 2763 3
    23425
    Spring Boot 공부하기 - 한국투자증권 오픈API 호출 옐로우황 24/01/21 17:51 2778 1
    23424
    파이썬 코딩 관련해서 질문드립니다. [5] 투투나 24/01/08 09:49 2869 0
    23423
    9년차 개발자의 "나만의 챗봇" 만들기 with ChatGPT [2] 아자뵤옹 23/12/10 22:35 3087 4
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈