자바 미니 프로젝트 | Java Mini Project 자바 미니프로젝트 답을 믿으세요

당신은 주제를 찾고 있습니까 “자바 미니 프로젝트 – Java Mini Project 자바 미니프로젝트“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 Jisoo Lee 이(가) 작성한 기사에는 조회수 355회 및 좋아요 1개 개의 좋아요가 있습니다.

Table of Contents

자바 미니 프로젝트 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 Java Mini Project 자바 미니프로젝트 – 자바 미니 프로젝트 주제에 대한 세부정보를 참조하세요

반응형 웹개발자 국비 3개월차 미니프로젝트
의류렌탈프로그램 – OUR CLOSET
IDE – Eclipse
DB – Oracle 18c, sqldeveloper
Language – Java
UI – Javafx
SMS – coolsms
email : [email protected]

자바 미니 프로젝트 주제에 대한 자세한 내용은 여기를 참조하세요.

Java Mini Project 자바 미니프로젝트 | 자바 미니 프로젝트 최신

이에 대한 추가 정보 자바 미니 프로젝트 주제에 대해서는 다음 문서를 참조하십시오. 아이디어가 있으면 기사 아래에 댓글을 달거나 주제에 대한 다른 …

+ 여기에 더 보기

Source: ko.maxfit.vn

Date Published: 11/14/2021

View: 1642

Java와 SQL을 이용한 미니프로젝트 – velog

1차 미니프로젝트 – 단어암기게임. … 자바와 데이터베이스를 활용하여 데이터의 입출력 및 수정 삭제(crud)를 이해하고 활용.

+ 더 읽기

Source: velog.io

Date Published: 10/19/2021

View: 3674

자바 미니 프로젝트 – 성적 조회 프로그램 – CMS world

그리고 회원가입을 통해 로그인하여 학생정보 관리시스템에 접속할 수 있도록 구현했다. package mini.project; import java.util.ArrayList; import …

+ 여기에 자세히 보기

Source: parkminseob.github.io

Date Published: 5/11/2022

View: 6914

(JAVA) 미니 프로젝트 – 자판기 구현하기 – 혀래이의 개발이야기

(JAVA) 미니 프로젝트 – 자판기 구현하기. 혀래이 2021. 7. 2. 15:36 … import java.util.Scanner;. public Project {. public static final int MAX = 10; …

+ 여기를 클릭

Source: h-coding.tistory.com

Date Published: 7/13/2022

View: 6154

자바(JAVA) – 개인 프로젝트 : 구구단 게임 – 개발이 하고 싶어요

자바(JAVA) – 개인 프로젝트 : 구구단 게임. 2020. 11. 11. … [미니 프로젝트1] 운동 관리 프로그램 주제 선정 – 기록 일지 1 (2), 2020.10.31 …

+ 여기에 보기

Source: iu-corner.tistory.com

Date Published: 3/18/2022

View: 3405

[미니프로젝트] Java Swing을 이용한 CRUD프로그램 만들기 …

[미니프로젝트] Java Swing을 이용한 CRUD프로그램 만들기(축구선수 관리 프로그램). JiHooney 2020. 12. … PreparedStatement; import java.sql.

+ 여기에 표시

Source: earthconquest.tistory.com

Date Published: 2/3/2022

View: 3731

첫 미니 프로젝트 : 영화 OTT 플랫폼 – 오늘만 사는 개발 공부

국비 수업을 들은지 두 달이 다 되어가는 와중에, 오직 자바와 콘솔 입출력 기능만 갖고 24시간동안 프로그램을 짜보는 프로젝트 시간을 가졌다.

+ 여기에 자세히 보기

Source: eungeun506.tistory.com

Date Published: 9/1/2021

View: 840

hei-jung/FoodOrderSystem: Java 미니 프로젝트 – GitHub

Java 미니 프로젝트. Contribute to hei-jung/FoodOrderSystem development by creating an account on GitHub.

+ 여기를 클릭

Source: github.com

Date Published: 4/22/2021

View: 7148

주제와 관련된 이미지 자바 미니 프로젝트

주제와 관련된 더 많은 사진을 참조하십시오 Java Mini Project 자바 미니프로젝트. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

Java Mini Project 자바 미니프로젝트
Java Mini Project 자바 미니프로젝트

주제에 대한 기사 평가 자바 미니 프로젝트

  • Author: Jisoo Lee
  • Views: 조회수 355회
  • Likes: 좋아요 1개
  • Date Published: 2021. 1. 6.
  • Video Url link: https://www.youtube.com/watch?v=oBC-iaS8t_U

Java Mini Project 자바 미니프로젝트 | 자바 미니 프로젝트 최신

We are using cookies to give you the best experience on our website.

You can find out more about which cookies we are using or switch them off in settings.

자바 미니 프로젝트 – 성적 조회 프로그램

성적조회 프로그램

24시간 미니 해커톤을 진행하며 간단한 성적조회 프로그램을 만들었다.

간단하지만 아직 프로그래밍 레벨1인 나에겐 어려웠던 CRUD구현.. 그리고 내가 구상했던 3가지 새로운 기능(1등출력, 꼴찌출력, 선생님 코멘트) 중 1가지는 구현하지 못했지만 나름대로 최선을 다했다. 몸이 아프지 않았다면 좀 더 집중력있게 만들 수 있을텐데 하는 아쉬움도 남지만.. 앞으로도 내게 남은 기회가 많으니까! 적당히 만족하기로 했다.

App클래스

프로그램을 시작하면 가장 먼저 보이는 화면. 1번을 누르면 선생님 로그인 창으로 이동한다.

public class App { public static void main ( String [] args ) { Member member = new Member (); loop: while ( true ) { System . out . println ( “[고등학교 성적관리시스템 메인]” ); System . out . printf ( “[1] 선생님 로그인 [0] 종료

” ); int command = Prompt . inputInt ( “명령> ” ); switch ( command ) { case 1 : member . System (); break ; case 0 : System . out . println ( “프로그램 종료” ); break loop ; default : System . out . println ( “잘못된 명령입니다.” ); } System . out . println (); } } }

TeacherLogin 클래스

필드는 private로 막고 게터세터를 썼다. add()메서드로 회원가입을 할 수 있게 구현했다.

package mini.project ; public class TeacherLogin { private String Id ; private String Password ; private String Name ; public TeacherLogin ( String Id , String Password , String Name ) { super (); this . Id = Id ; this . Password = Password ; this . Name = Name ; } public String getId () { return Id ; } public void setId ( String Id ) { this . Id = Id ; } public String getPassword () { return Password ; } public void setPassword ( String Password ) { this . Password = Password ; } public String getName () { return Name ; } public void setName ( String Name ) { this . Name = Name ; } @Override public String toString () { return “ID : ” + Id + ” Password : ” + Password + ” Name : ” + Name ; } public void add () { TeacherLogin t = new TeacherLogin ( Id , Password , Name ); t . Id = Prompt . inputString ( “Id : ” ); t . Password = Prompt . inputString ( “Password : ” ); t . Name = Prompt . inputString ( “Name : ” ); } }

Teacher 클래스

기본 관리자를 생성자로 만들어놓았다. 그리고 회원가입을 통해 로그인하여 학생정보 관리시스템에 접속할 수 있도록 구현했다.

package mini.project ; import java.util.ArrayList ; import java.util.Iterator ; import java.util.List ; import java.util.Scanner ; public class Teacher { List < TeacherLogin > teachers = new ArrayList <>(); Scanner scanner = new Scanner ( System . in ); public Teacher () { teachers . add ( new TeacherLogin ( “admin” , “1234” , “Kim” )); } public void System () { int num = 0 ; while (( num = menu ()) != 0 ) { switch ( num ) { case 1 : TeacherLogin (); break ; case 2 : TeacherJoin (); break ; case 3 : TeacherList (); } } } private void TeacherJoin () { String Id = Prompt . inputString ( “ID : ” ); String Password = Prompt . inputString ( “Password : ” ); String Password2 = Prompt . inputString ( “Password Confirm : ” ); String Name = Prompt . inputString ( “Name : ” ); if ( TestId ( Id )) { System . out . println ( “중복된 ID입니다.” ); } else if ( Password . equals ( Password2 )) { teachers . add ( new TeacherLogin ( Id , Password , Name )); System . out . println ( “회원가입이 완료되었습니다.” ); } else { System . out . println ( “비밀번호를 다시 입력하시오.” ); } } private void TeacherLogin () { while ( true ) { String Id = Prompt . inputString ( “ID : ” ); String Password = Prompt . inputString ( “Password : ” ); TeacherLogin member = FindId ( Id ); StudentHandler stu = new StudentHandler (); if ( member == null ) { System . out . println ( “입력하신 아이디가 일치하지 않습니다.” ); System . out . println ( “다시 입력하시오.” ); } else if ( member . getPassword (). equals ( Password )) { System . out . println ( “학생정보관리시스템에 접속하였습니다.” ); stu . StudentSystem (); break ; } else { System . out . println ( “입력하신 패스워드가 일치하지 않습니다.” ); System . out . println ( “다시 입력하시오.” ); } } } public boolean TestId ( String Id ) { boolean check = true ; TeacherLogin member = FindId ( Id ); if ( member == null ) check = false ; return check ; } private TeacherLogin FindId ( String Id ) { for ( TeacherLogin memberLogin : teachers ) { if ( memberLogin . getId (). equals ( Id )) { return memberLogin ; } } return null ; } public int menu () { return Prompt . inputInt ( “[1]로그인 [2]회원가입 [3]전체회원 [0]종료” ); } public void TeacherList () { System . out . println ( “[관리자 목록]” ); Iterator < TeacherLogin > ite = teachers . iterator (); while ( ite . hasNext ()) { System . out . println ( ite . next () + ” ” ); } } }

Student클래스

필드를 private로 막고 게터세터를 사용한 것은 위 Teacher클래스와 동일하다.

다만 Student클래스에서 국영수 점수의 총합인 sum과 평균인 aver은 메서드를 용도에 맞게 수정해 주었다.

package mini.project ; import java.sql.Date ; public class Student { private int no ; private String name ; private int gender ; private String grade ; private int kor ; private int eng ; private int math ; private int sum ; private float aver ; private String comment ; private Date registeredDate ; private static final int LENGTH = 5 ; public String getComment () { return comment ; } public void setComment ( String comment ) { this . comment = comment ; } public int getSum () { return sum ; } public void setSum ( int kor , int eng , int math ) { sum = kor + eng + math ; aver = sum / 3 . f ; } public void setAver ( float aver ) { this . aver = aver ; } public float getAver () { return aver ; } public int getNo () { return no ; } public void setNo ( int no ) { this . no = no ; } public String getName () { return name ; } public void setName ( String name ) { this . name = name ; } public int getGender () { return gender ; } public void setGender ( int gender ) { this . gender = gender ; } public String getGrade () { return grade ; } public void setGrade ( String grade ) { this . grade = grade ; } public int getKor () { return kor ; } public void setKor ( int kor ) { this . kor = kor ; } public int getEng () { return eng ; } public void setEng ( int eng ) { this . eng = eng ; } public int getMath () { return math ; } public void setMath ( int math ) { this . math = math ; } public Date getRegisteredDate () { return registeredDate ; } public void setRegisteredDate ( Date registeredDate ) { this . registeredDate = registeredDate ; } public static int getLength () { return LENGTH ; } }

StudentHandler 클래스

학생 정보와 성적을 입력받고 목록조회, 상세조회, 정보수정, 정보삭제와 같은 기본적인 CRUD를 구현했다. 그리고 이 프로그램만의 특징인 1등과 꼴찌, 선생님 코멘트 기능을 추가했다.

1등 출력은 학년 상관 없이 국영수 총합으로만 따져서 출력하도록 했다.

꼴찌 출력은 기능이 제대로 구현이 되지 않았다. 추측을 해보자면 정보를 추가하지 않은 인덱스의 값이 다 0으로 초기화 되었기에 무조건 최소값이 0으로 출력되는 듯 하다. 아직은 해결 방법을 찾지 못했다.

선생님 코멘트는 학생 번호를 통해 입력하고, 학생 상세 조회에서 볼 수 있도록 구현했다.

package mini.project ; import java.sql.Date ; import java.util.ArrayList ; import java.util.Iterator ; import java.util.List ; public class StudentHandler { List < Student > studentList = new ArrayList < Student >(); public void StudentSystem () { int num = 0 ; loop: while (( num = StudentMenu ()) != 0 ) { switch ( num ) { case 1 : add (); break ; case 2 : scoreAdd (); break ; case 3 : studentList (); break ; case 4 : StudentDetail (); break ; case 5 : studentUpdate (); break ; case 6 : studentDelete (); break ; case 7 : FirstPlace (); break ; case 8 : BottomPlace (); break ; case 9 : teacherComment (); break ; case 0 : System . out . println ( “학생등록시스템 종료” ); break loop ; default : System . out . println ( “잘못된 명령입니다.” ); } System . out . println (); } } public int StudentMenu () { System . out . println ( “**0번을 누르면 메인 창으로 이동됩니다.**” ); return Prompt . inputInt ( “[1]학생 정보 입력” + ” [2]학생 성적 입력” + ” [3]학생 목록” + ” [4]학생 상세 조회

” + “[5]학생 정보 수정” + ” [6]학생 정보 삭제” + ” [7]1등은? ” + ” [8]꼴찌는? ” + ” [9]선생님 코멘트” ); } private void scoreAdd () { System . out . println ( “[학생 성적 입력]” ); int no = Prompt . inputInt ( “학생 번호? ” ); Student student = findByNo ( no ); if ( student == null ) { System . out . println ( “해당 번호의 학생이 없습니다.” ); return ; } student . setKor ( Prompt . inputInt ( “국어성적? ” )); student . setEng ( Prompt . inputInt ( “영어성적? ” )); student . setMath ( Prompt . inputInt ( “수학성적? ” )); student . setSum ( student . getKor (), student . getEng (), student . getMath ()); } private void add () { System . out . println ( “[학생 정보 입력]” ); Student student = new Student (); while ( true ) { int number = Prompt . inputInt ( “학생 번호?(0 : 등록취소) ” ); if ( number == 0 ) { System . out . println ( “학생 등록을 취소합니다.” ); return ; } else if ( this . indexOf ( number ) != 0 ) { student . setNo ( number ); break ; } else { System . out . println ( “이미 등록된 학생번호입니다.” ); } } student . setName ( Prompt . inputString ( “학생 이름? ” )); student . setGender ( Prompt . inputInt ( “학생 성별? (1: 남자 / 2 : 여자)” )); String grade = Prompt . inputString ( “학생 학년? ” ); int num = Integer . parseInt ( grade ); if ( num < 0 || num > 4 ) { System . out . println ( “잘못된 입력값입니다.” ); return ; } else { student . setGrade ( grade ); } student . setRegisteredDate ( new Date ( System . currentTimeMillis ())); studentList . add ( student ); } public void studentList () { System . out . println ( “[학생 목록]” ); String grade = Prompt . inputString ( “**학년을 입력해주세요.**” ); Iterator < Student > iterator = studentList . iterator (); while ( iterator . hasNext ()) { Student student = iterator . next (); if ( student . getGrade (). equals ( grade )) { String genderLabel = null ; switch ( student . getGender ()) { case 1 : genderLabel = “남자” ; break ; case 2 : genderLabel = “여자” ; break ; } System . out . printf ( “이름 : %s

성별 : %s

학년 : %s

국어 : %d

영어 : %d

” + “수학 : %d

합계 : %d

평균 : %.1f

등록일 : %s

” , student . getName (), genderLabel , student . getGrade (), student . getKor (), student . getEng (), student . getMath (), student . getSum (), student . getAver (), student . getRegisteredDate ()); } } } public void StudentDetail () { System . out . println ( “[학생 상세 조회]” ); int no = Prompt . inputInt ( “학생 번호? ” ); Student student = findByNo ( no ); if ( student == null ) { System . out . println ( “해당 번호의 학생이 없습니다.” ); return ; } System . out . printf ( “번호 : %s

” , student . getNo ()); System . out . printf ( “이름 : %s

” , student . getName ()); String genderLabel = null ; switch ( student . getGender ()) { case 1 : genderLabel = “남자” ; break ; case 2 : genderLabel = “여자” ; break ; } System . out . printf ( “성별 : %s

” , genderLabel ); System . out . printf ( “학년 : %s

” , student . getGrade ()); System . out . printf ( “국어 : %s

” , student . getKor ()); System . out . printf ( “영어 : %s

” , student . getEng ()); System . out . printf ( “수학 : %s

” , student . getMath ()); System . out . printf ( “총합 : %s

” , student . getSum ()); System . out . printf ( “평균 : %s

” , student . getAver ()); if ( student . getComment () != null ) { System . out . printf ( “코멘트 : %s

” , student . getComment ()); } } public void studentUpdate () { System . out . println ( “[학생 정보 변경]” ); int no = Prompt . inputInt ( “학생 번호? ” ); Student student = findByNo ( no ); if ( student == null ) { System . out . println ( “해당 번호의 학생이 없습니다.” ); return ; } String name = Prompt . inputString ( String . format ( “이름(%s)? ” , student . getName ())); String grade = Prompt . inputString ( String . format ( “학년(%s)? ” , student . getGrade ())); int kor = Prompt . inputInt ( String . format ( “국어(%s)? ” , student . getKor ())); int eng = Prompt . inputInt ( String . format ( “영어(%s)? ” , student . getEng ())); int math = Prompt . inputInt ( String . format ( “수학(%s)? ” , student . getMath ())); student . setSum ( kor , eng , math ); String response = Prompt . inputString ( “정말 변경하시겠습니까?(y/N) ” ); if (! response . equalsIgnoreCase ( “y” )) { System . out . println ( “변경을 취소하였습니다.” ); return ; } student . setName ( name ); student . setGrade ( grade ); student . setKor ( kor ); student . setEng ( eng ); student . setMath ( math ); student . getSum (); System . out . println ( “학생 정보를 변경하였습니다.” ); System . out . println (); } public void studentDelete () { System . out . println ( “[학생 정보 삭제]” ); int no = Prompt . inputInt ( “번호? ” ); int index = indexOf ( no ); if ( index == – 1 ) { System . out . println ( “해당 번호의 학생이 없습니다.” ); return ; } String response = Prompt . inputString ( “정말 삭제하시겠습니까?(y/N) ” ); if (! response . equalsIgnoreCase ( “y” )) { System . out . println ( “삭제 취소.” ); return ; } studentList . remove ( index ); System . out . println ( “삭제 완료.” ); System . out . println (); } public void FirstPlace () { System . out . println ( “[1등 출력]” ); Iterator < Student > iterator = studentList . iterator (); int [] first = new int [ studentList . size ()]; int max = first [ 0 ]; String name = null ; while ( iterator . hasNext ()) { Student student = iterator . next (); if ( student . getSum () > max ) { max = student . getSum (); name = student . getName (); } } System . out . printf ( “1등은? ==> %s : %d점

” , name , max ); System . out . println ( “와우! 대단해요!” ); System . out . println (); } // 제대로 구현되지 못한 메서드 public void BottomPlace () { System . out . println ( “[꼴지 출력]” ); int [] bottom = new int [ studentList . size ()]; int min = bottom [ 0 ]; String name = null ; for ( int i = 1 ; i < studentList . size (); i ++) { Student student = studentList . get ( i ); if ( student . getSum () < min ) { min = student . getSum (); name = student . getName (); } } System . out . printf ( "꼴지 ==> %s : %d

” , name , min ); System . out . println ( “이 학생은 격려가 필요합니다.” ); System . out . println (); } private void teacherComment () { System . out . println ( “[선생님 코멘트]” ); int no = Prompt . inputInt ( “코멘트 입력할 학생 번호? ” ); Student student = findByNo ( no ); if ( student == null ) { System . out . println ( “해당 번호의 학생이 없습니다.” ); return ; } student . setComment ( Prompt . inputString ( “한줄 코멘트를 입력하세요.

” )); } private Student findByNo ( int no ) { for ( int i = 0 ; i < studentList . size (); i ++) { Student student = studentList . get ( i ); if ( student . getNo () == no ) { return student ; } } return null ; } private int indexOf ( int no ) { for ( int i = 0 ; i < studentList . size (); i ++) { Student student = studentList . get ( i ); if ( student . getNo () == no ) { return i ; } } return - 1 ; } } Prompt클래스 입출력 관련한 Prompt명령을 모아두었다. package mini.project ; import java.util.Scanner ; public class Prompt { static Scanner keyboardScan = new Scanner ( System . in ); public static String inputString ( String title ) { System . out . print ( title ); return keyboardScan . nextLine (); } public static int inputInt ( String title ) { return Integer . parseInt ( inputString ( title )); } public static void close () { keyboardScan . close (); } } 후기 이렇게 24시간, 정확히는 잠자고 밥먹는 시간을 제외한 14시간만에 팀원 한명과 태그를 이뤄 성적조회 프로그램을 만들었다. 미니 해커톤이지만 긴장감을 가지고 처음으로 누군가와 협업을 하며 프로그램을 어떻게 구현할지 고민하는 시간을 가질 수 있었다. 특히 간단하게만 생각했던 CRUD조차도 막상 처음부터 만들자니 자잘한 버그가 많이 발생했고, 그런 버그들을 고치는데 시간이 많이 들었다. 기능을 만드는 것 보다 유효성 검사를 꼼꼼히 해주며 프로그램이 단단해지도록(?) 하는게 더 어려웠다. 미숙하지만 결과물을 내고 나니 한층 더 자신감이 붙는걸 느낄 수 있었다. 재밌었음!

(JAVA) 미니 프로젝트 – 자판기 구현하기

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201

package day08; import java.util. Scanner ; public class Project { public static final int MAX = 10 ; // 메뉴의 최대 갯수 == 10 // 전역변수 선언 static String [] box = new String [MAX]; static int [] price = new int [MAX]; static int [] stock = new int [MAX]; static int count = 3 ; // 메뉴의 갯수 static int admin = 1004 ; // 관리자 메뉴로 가는 비밀번호 static int profit = 0 ; // 총 수익 static Scanner sc = new Scanner ( System . in ); // 처음 자판기를 초기화 하는 함수 public static void initialize() { box[ 0 ] = “장미” ; price[ 0 ] = 500 ; stock[ 0 ] = 3 ; box[ 1 ] = “프리지아” ; price[ 1 ] = 1000 ; stock[ 1 ] = 3 ; box[ 2 ] = “국화” ; price[ 2 ] = 3000 ; stock[ 2 ] = 3 ; } // 관리자 페이지를 담당하는 함수 public static void admin() { while ( true ) { System . out . println ( “==================================================” ); System . out . println ( “관리자 페이지 입니다.” ); System . out . println ( “1: 메뉴 변경 2: 가격 변경 3: 재고 추가 4: 메뉴 추가 5: 수익 확인 (종료는 -1)” ); System . out . print ( “번호를 입력하세요: ” ); int num = sc.nextInt(); System . out . println ( “==================================================” ); // 1. 메뉴 변경 if (num = = 1 ) { System . out . print ( “변경하실 메뉴의 번호를 입력하세요(1~” + count + “) :” ); int i = sc.nextInt(); System . out . print (box[i – 1 ] + “를(을) 무엇으로 바꾸시겠습니까? :” ); sc.nextLine(); String name = sc.next(); System . out . print (name + “의 가격은 얼마입니까? ” ); int v = sc.nextInt(); System . out . print (name + “의 재고를 몇 개 등록하시겠습니까? : ” ); int n = sc.nextInt(); box[i – 1 ] = name; price[i – 1 ] = v; stock[i – 1 ] = n; System . out . println ( “메뉴 변경이 완료되었습니다!” ); } // 2. 가격 변경 else if (num = = 2 ) { System . out . print ( “가격을 변경하실 메뉴의 번호를 입력하세요(1~” + count + “) :” ); int i = sc.nextInt(); System . out . print (box[i – 1 ] + “의 가격을 얼마로 바꾸시겠습니까? :” ); int j = sc.nextInt(); price[i – 1 ] = j; System . out . println ( “가격 변경이 완료되었습니다!” ); } // 3. 재고 추가 else if (num = = 3 ) { System . out . print ( “재고를 추가하실 메뉴의 번호를 입력하세요(1~” + count + “) :” ); int i = sc.nextInt(); System . out . print (box[i – 1 ] + “를(을) 몇 개 추가 하시겠습니까? :” ); int j = sc.nextInt(); stock[i – 1 ] + = j; System . out . println ( “재고 추가가 완료되었습니다!” ); } // 4. 메뉴 추가 else if (num = = 4 ) { if (count > = MAX – 1 ) { System . out . println ( “더 이상 메뉴가 들어갈 자리가 없습니다!” ); continue ; } else { System . out . print ( “추가하실 메뉴의 가격을 입력하세요 : ” ); int i = sc.nextInt(); System . out . print ( “추가하실 메뉴의 이름을 입력하세요 : ” ); sc.nextLine(); String name = sc.next(); System . out . print (name + “의 재고는 몇 개 입니까? : ” ); int j = sc.nextInt(); box[count] = name; price[count] = i; stock[count] = j; count + + ; System . out . println ( “메뉴 추가가 완료되었습니다!” ); } } // 5. 수익 확인 else if (num = = 5 ) { System . out . println ( “현재까지의 수익은 ” + profit + “입니다.” ); } // -1을 입력하면 다시 자판기 메뉴로 돌아감 else if (num = = – 1 ) { user(); return ; } } } // 유저 인터페이스를 담당하는 함수 public static void user() { Boolean first = true ; int money = 0 ; while ( true ) { System . out . println ( “==================================================” ); System . out . println ( “꽃 자판기 입니다. (번호:상품(재고))” ); // 번호:메뉴(가격) – 재고 출력 for ( int i = 0 ; i < count; i + + ) { System . out . print ((i + 1 ) + ":" + box[i] + "(" + price[i] + "W)-" + stock[i] + "개 " ); } System . out . println (); System . out . println ( "==================================================" ); // 처음에만 돈을 입력받고 잔돈 반환 전 까지는 돈을 입력받지 않는다. if (first){ System . out . print ( "돈을 넣어주세요: " ); money = sc.nextInt(); first = false ; } // 관리자 비밀번호는 1004, 입력하면 관리자 함수로 넘어감. if (money = = 1004 ) { admin(); return ; } System . out . print ( "메뉴 입력: " ); int num = sc.nextInt(); // 돈이 충분한가? if (money > = price[num – 1 ]) { // 재고가 충분한가? if (stock[num – 1 ] > 0 ) { money = money – price[num – 1 ]; stock[num – 1 ] – – ; profit + = price[num – 1 ]; System . out . println (box[num – 1 ] + “이(가) 나왔다!” ); } else { System . out . println ( “현재 재고가 없습니다!” ); continue ; } } else { System . out . println ( “잔액이 부족합니다!” ); } System . out . println ( “잔액 : ” + money); // 모든 돈을 사용하면 이용 종료 후 초기화면 진입 if (money = = 0 ) { System . out . println ( “감사합니다! 다음에 또 이용해주세요!!” ); first = true ; continue ; } // 돈이 남아있다면 선택지를 준다. System . out . println ( “1: 계속 구매하기 2: 금액 추가하기 3: 잔돈 반환하기 ” ); System . out . print ( “번호를 입력하세요: ” ); int num1 = sc.nextInt(); if (num1 = = 1 ) { continue ; } else if (num1 = = 2 ) { System . out . print ( “돈을 넣어주세요 : ” ); int extra = sc.nextInt(); money + = extra; System . out . println ( “금액이 추가되었습니다! 잔액: ” + money); } else if (num1 = = 3 ) { System . out . println ( “거스름돈 ” + money + “원이 반환됩니다.” ); System . out . println ( “감사합니다! 다음에 또 이용해주세요!!” ); first = true ; } } } public static void main( String [] args) { initialize(); user(); return ; } } Colored by Color Scripter

자바(JAVA) – 개인 프로젝트 : 구구단 게임

반응형

구구단 게임

구구단이 랜덤으로 나와 사용자가 문제를 맞추는 게임이다.

아쉬운 것은 타이머 기능을 이용해 난이도를 주면 더 좋을텐데 아직 구현하지 못함.

hard 난이도는 3초 이내로 입력 normal 난이도는 5초 이내로 입력 등그러나 타이머 기능을 넣으니 다른 메인 기능까지 딜레이가 생겨 아직 설정 이해를 제대로 하지 못하였다.

맞출 때마다 스코어는 10점씩 올라가며 틀리면 -10점 씩 깎인다.

스코어 100이 채워지면 게임은 종료된다.

틀리게 되면 약오른 메시지와 함께 스코어는 10점씩 깎여 -스코어를 다시 매꿔야 한다.

소스 코드

반응형

[미니프로젝트] Java Swing을 이용한 CRUD프로그램 만들기(축구선수 관리 프로그램)

728×90

반응형

SMALL

1. 기획

-Use Case Diagram

-Sequence Diagram

-E-R Diagram

-Wire Frame

K-League_Player_UI_1215_1619.pptx 0.06MB

2. 코딩 구현

-클래스

2.1 데이터 베이스 설계

-데이터 베이스 DDL

–데이터베이스 생성 create database uiproject; use uiproject; drop table user; —-유저 테이블 생성 create table user ( u_id varchar(30) primary key, u_pass varchar(30) not null, u_name varchar(10) not null, u_gender varchar(5) check (u_gender in (‘남’, ‘여’) ), u_birth date, u_pno varchar(30) not null, constraint uni_pno unique(u_pno) ); insert into user values(‘root’, ‘!123456’, ‘이지훈’, ‘남’, ‘1111-11-11’, ‘010-1234-1234’); —-팀 테이블 생성 drop table team; create table team( t_code varchar(30), t_name varchar(50), t_coach varchar(50), t_loc varchar(50), t_year varchar(10), primary key(t_code) ); select * from team; —-선수 테이블 생성 drop table player; create table player( p_no int(30) , t_code varchar(30), p_name varchar(50), p_length varchar(50), p_birth varchar(10), p_weight varchar(50), p_pos varchar(20), p_backno int(4), p_goal int(4), p_assi int(4), primary key(p_no), foreign key(t_code) references team(t_code) ); select * from player order by p_no desc limit 5; select * from player limit 50;

2.2 선수 및 팀 데이터 데이터베이스 안에 집어넣기

player.csv 0.03MB

team.csv 0.00MB

-TeamTO

package Pack_Team; public class TeamTO { private String t_code; private String t_name; private String t_coach; private String t_loc; private String t_year; public TeamTO() { } public String getT_code() { return t_code; } public String getT_name() { return t_name; } public String getT_coach() { return t_coach; } public String getT_loc() { return t_loc; } public String getT_year() { return t_year; } public void setT_code(String t_code) { this.t_code = t_code; } public void setT_name(String t_name) { this.t_name = t_name; } public void setT_coach(String t_coach) { this.t_coach = t_coach; } public void setT_loc(String t_loc) { this.t_loc = t_loc; } public void setT_year(String t_year) { this.t_year = t_year; } }

-TeamDAO

package Pack_Team; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Scanner; public class TeamDAO { private Connection conn; private ArrayList teams = new ArrayList(); public TeamDAO() { //db 연결정보 설정 및 드라이버 로딩 String url = “jdbc:mysql://localhost:3307/uiproject”; String user = “root”; String password = “!123456”; try { Class.forName( “org.mariadb.jdbc.Driver” ); this.conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //팀 추가하기 메서드 public void InsertTeam() { try { //선수엑셀파일 가져오기 BufferedReader br = new BufferedReader( new FileReader( “./team.csv” ) ); String team = null; //sql문 선언 및 엑셀파일읽어서 sql문 실행 String sql = “insert into team values(?, ?, ?, ?, ?)”; PreparedStatement pstmt = this.conn.prepareStatement(sql); while( (team = br.readLine() ) != null ) { String[] teams = team.split(“,”); pstmt.setString( 1, teams[0] ); pstmt.setString( 2, teams[1] ); pstmt.setString( 3, teams[2] ); pstmt.setString( 4, teams[3] ); pstmt.setString( 5, teams[4] ); ResultSet rs = pstmt.executeQuery(); if ( rs != null ) rs.close(); } if ( pstmt != null ) pstmt.close(); if ( conn != null ) conn.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //모든 팀 리턴해주는 메소드 (선수 추가 패널의 콤보박스 만들 때 사용) public ArrayList selectTeam() { String sql = “select t_code, t_name from team order by t_code asc”; try { PreparedStatement pstmt = this.conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while( rs.next() ) { TeamTO to = new TeamTO(); to.setT_code( rs.getString( 1 ) ); to.setT_name( rs.getString( 2 ) ); teams.add( to ); } if ( rs != null ) rs.close(); if ( pstmt != null ) pstmt.close(); if ( conn != null ) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return teams; } }

-InsertTeam (실행클래스)

package Pack_Team; public class InsertTeam { public static void main(String[] args) { TeamDAO dao = new TeamDAO(); dao.InsertTeam(); System.out.println( “팀 저장이 완료되었습니다.” ); } }

-SoccerTO

package Pack_Player; public class SoccerTO { private String p_name; private String p_backno; private String t_code; private String p_length; private String p_weight; private String p_birth; private String p_no; private String p_pos; public SoccerTO() { } public void setP_name(String p_name) { this.p_name = p_name; } public void setP_backno(String p_backno) { this.p_backno = p_backno; } public void setT_code(String t_code) { this.t_code = t_code; } public void setP_length(String p_length) { this.p_length = p_length; } public void setP_weight(String p_weight) { this.p_weight = p_weight; } public void setP_birth(String p_birth) { this.p_birth = p_birth; } public void setP_no(String p_no) { this.p_no = p_no; } public void setP_pos(String p_pos) { this.p_pos = p_pos; } public String getP_name() { return p_name; } public String getP_backno() { return p_backno; } public String getT_code() { return t_code; } public String getP_length() { return p_length; } public String getP_weight() { return p_weight; } public String getP_birth() { return p_birth; } public String getP_no() { return p_no; } public String getP_pos() { return p_pos; } }

-SoccerDAO

package Pack_Player; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; public class SoccerDAO { private Connection conn; private ArrayList players = new ArrayList(); private ArrayList players_6 = new ArrayList(); public SoccerDAO() { //db 연결정보 설정 및 드라이버 로딩 String url = “jdbc:mysql://localhost:3307/uiproject”; String user = “root”; String password = “!123456”; try { Class.forName( “org.mariadb.jdbc.Driver” ); this.conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //엑셀에서 선수 파일 가져와서 DB에 저장하는 메서드 public void insertPlayer() { try { //선수엑셀파일 가져오기 BufferedReader br = new BufferedReader( new FileReader( “./player.csv” ) ); String address; //sql문 선언 및 엑셀파일읽어서 sql문 실행 String sql = “insert into player(p_no, t_code, p_name, p_length, p_birth, p_weight, p_pos, p_backno) values(?, ?, ?, ?, ?, ?, ?, ?)”; PreparedStatement pstmt = this.conn.prepareStatement(sql); while( (address = br.readLine() ) != null ) { String[] addresses = address.split(“,”); pstmt.setInt( 1, Integer.parseInt( addresses[0] ) ); pstmt.setString( 2, addresses[1] ); pstmt.setString( 3, addresses[2] ); pstmt.setString( 4, addresses[3] ); pstmt.setString( 5, addresses[4] ); pstmt.setString( 6, addresses[5] ); pstmt.setString( 7, addresses[6] ); pstmt.setInt( 8, Integer.parseInt(addresses[7]) ); ResultSet rs = pstmt.executeQuery(); if ( rs != null ) rs.close(); } if ( pstmt != null ) pstmt.close(); if ( conn != null ) conn.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //5번패널: 선수 검색하는 메서드 public ArrayList searchPlayer( String playerName ) { try { String sql = “select p_no, t_code, p_name, p_length, p_birth, p_weight, p_pos, p_backno from player where p_name = ?”; PreparedStatement pstmt = this.conn.prepareStatement(sql); pstmt.setString( 1, playerName ); ResultSet rs = pstmt.executeQuery(); while( rs.next() ) { SoccerTO to = new SoccerTO(); to.setP_no( rs.getString( “p_no” ) ); to.setT_code( rs.getString( “t_code” ) ); to.setP_name( rs.getString( “p_name” ) ); to.setP_length( rs.getString( “p_length” ) ); to.setP_birth( rs.getString( “p_birth” ) ); to.setP_weight( rs.getString( “p_weight” ) ); to.setP_pos( rs.getString( “p_pos” ) ); to.setP_backno( rs.getString( “p_backno” ) ); players.add( to ); } if( rs != null ) rs.close(); if( pstmt != null ) pstmt.close(); if( conn != null ) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } return players; } //5번 패널: 선수 삭제하는 메서드 public void deletePlayer( int playerNum ) { try { String sqlDelete = “delete from player where p_no = ?”; PreparedStatement pstmtDelete = this.conn.prepareStatement(sqlDelete); pstmtDelete.setInt(1, playerNum ); ResultSet rsDelete = pstmtDelete.executeQuery(); if( rsDelete != null ) rsDelete.close(); if( pstmtDelete != null ) pstmtDelete.close(); if( conn != null ) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //6번패널: 선수 검색하는 메서드 public ArrayList searchPlayer_6( Integer pNumber ) { try { String sql = “select p_no, t_code, p_name, p_length, p_birth, p_weight, p_pos, p_backno from player where p_no = ?”; PreparedStatement pstmt = this.conn.prepareStatement(sql); pstmt.setInt( 1, pNumber ); ResultSet rs = pstmt.executeQuery(); while( rs.next() ) { SoccerTO to = new SoccerTO(); to.setP_no( rs.getString( “p_no” ) ); to.setT_code( rs.getString( “t_code” ) ); to.setP_name( rs.getString( “p_name” ) ); to.setP_length( rs.getString( “p_length” ) ); to.setP_birth( rs.getString( “p_birth” ) ); to.setP_weight( rs.getString( “p_weight” ) ); to.setP_pos( rs.getString( “p_pos” ) ); to.setP_backno( rs.getString( “p_backno” ) ); players_6.add( to ); } if( rs != null ) rs.close(); if( pstmt != null ) pstmt.close(); if( conn != null ) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } return players_6; } }

-InsertSoccer (실행 클래스)

package Pack_Player; public class InsertSoccer { public static void main(String[] args) { SoccerDAO dao = new SoccerDAO(); dao.insertPlayer(); System.out.println( “선수 저장이 완료 되었습니다.”); } }

2.3 로그인과 회원가입

-MainUI (최종 실행 클래스)

package Pack_UI; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import Pack_Model.TeamComboModel; import Pack_Model._5_PlayerTableModel; import Pack_Player.SoccerDAO; import Pack_Player.SoccerTO; import Pack_Model.LoginDAO; import Pack_Model.TeamComboModel; import javax.swing.JLabel; import javax.swing.JOptionPane; import java.awt.Font; import java.awt.HeadlessException; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import javax.swing.JPasswordField; import java.awt.Panel; import javax.swing.JComboBox; import javax.swing.DefaultComboBoxModel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import javax.swing.JTable; import javax.swing.border.TitledBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; public class MainUI extends JFrame { private JPanel contentPane; Panel panel_Initial = new Panel(); JPanel panel_CreateUser = new JPanel(); JPanel panel_MainMenu = new JPanel(); JPanel panel_InsertPlayer = new JPanel(); JPanel panel_DeletePlayer = new JPanel(); JPanel panel_SelectPlayer = new JPanel(); JPanel panel_UpdatePlayer = new JPanel(); private JTextField textField; private JPasswordField passwordField; private JTextField textCreateId; private JTextField textCreatePno1; private JTextField textCreateName; private JTextField textCreateYear; private JTextField textCreateMonth; private JTextField textCreateDay; private JTextField textCreatePno2; private JTextField textCreatePno3; private JPasswordField passwordFieldCreatePw; private final JButton btnMenuInsertPlayer = new JButton(“\uC120 \uC218 \uCD94 \uAC00”); private final JButton btnMenuDeletePlayer = new JButton(“\uC120 \uC218 \uC0AD \uC81C”); private final JButton btnMenuUpdatePlayer = new JButton(“\uC120 \uC218 \uC218 \uC815”); private final JButton btnMenuSelectPlayer = new JButton(“\uC120 \uC218 \uAC80 \uC0C9”); private final JButton btnMenuExit = new JButton(“\uD504 \uB85C \uADF8 \uB7A8 \uC885 \uB8CC”); private final JLabel lblNewLabel4_1 = new JLabel(“\uC774\uB984”); private final JLabel lblNewLabel4_2 = new JLabel(“\uD300\uBA85”); private final JLabel lblNewLabel4_3 = new JLabel(“\uD0A4”); private final JLabel lblNewLabel4_4 = new JLabel(“\uC0DD\uB144\uC6D4\uC77C”); private final JLabel lblNewLabel4_5 = new JLabel(“\uBAB8\uBB34\uAC8C”); private final JLabel lblNewLabel4_6 = new JLabel(“\uD3EC\uC9C0\uC158”); private final JLabel lblNewLabel4_7 = new JLabel(“\uB4F1\uBC88\uD638”); private final JTextField textField_4_PlayerName = new JTextField(); private final JComboBox comboBox_4_Team = new JComboBox(); private final JTextField textField_4_Height = new JTextField(); private final JTextField textField_4_Year = new JTextField(); private final JTextField textField_4_Month = new JTextField(); private final JTextField textField_4_Day = new JTextField(); private final JLabel lblNewLabel_3 = new JLabel(“ex) 1990 01 01”); private final JTextField textField_4_Weigth = new JTextField(); private final JTextField textField_4_BackNum = new JTextField(); private final JComboBox comboBox_4_Position = new JComboBox(); private final JButton btn_4_Back = new JButton(“\uBA54 \uB274 \uB85C \uC774 \uB3D9”); private final JButton btn_4_InsertPlayer = new JButton(“\uC120 \uC218 \uCD94 \uAC00”); private final JLabel lblNewLabel_5 = new JLabel(“\uC120 \uC218 \uC774 \uB984”); private final JTextField textField_5_PlayerName = new JTextField(); private JTable table_5_SearchResult; private int playerNum = 0; private JTextField textField_7_PlayerName; private JTable table_7_ResultPlayer; private JTextField textField_6_P_no; private JTextField textField_6_Pname; private JTextField textField_6_Pheigth; private JTextField textField_6_Year; private JTextField textField_6_Weight; private JTextField textField_6_Backno; private JTextField textField_6_Month; private JTextField textField_6_Day; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainUI frame = new MainUI(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public MainUI() { textField_5_PlayerName.setBounds(207, 94, 232, 25); textField_5_PlayerName.setColumns(10); textField_4_Year.setBounds(221, 215, 84, 21); textField_4_Year.setColumns(10); textField_4_Height.setBounds(221, 177, 215, 21); textField_4_Height.setColumns(10); textField_4_PlayerName.setBounds(221, 95, 215, 21); textField_4_PlayerName.setColumns(10); setTitle(“K-\uB9AC\uADF8 \uCD95\uAD6C\uC120\uC218 \uB370\uC774\uD130 \uAD00\uB9AC \uD504\uB85C\uADF8\uB7A8”); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 653, 540); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); setLocationRelativeTo(null); setResizable(false); contentPane.setLayout(null); //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ1. 로그인 패널ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ panel_Initial.setBounds(0, 0, 637, 501); contentPane.add(panel_Initial); panel_Initial.setLayout(null); JLabel lblNewLabel = new JLabel(“\uCD95\uAD6C\uC120\uC218 \uAD00\uB9AC \uD504\uB85C\uADF8\uB7A8”); lblNewLabel.setBounds(140, 28, 342, 35); lblNewLabel.setFont(new Font(“휴먼둥근헤드라인”, Font.BOLD, 30)); panel_Initial.add(lblNewLabel); JLabel lblNewLabel_1 = new JLabel(“ID”); lblNewLabel_1.setBounds(179, 120, 18, 22); lblNewLabel_1.setFont(new Font(“굴림”, Font.BOLD, 18)); panel_Initial.add(lblNewLabel_1); JLabel lblNewLabel_1_1 = new JLabel(“PW”); lblNewLabel_1_1.setBounds(179, 178, 27, 22); lblNewLabel_1_1.setFont(new Font(“굴림”, Font.BOLD, 18)); panel_Initial.add(lblNewLabel_1_1); textField = new JTextField(); textField.setBounds(230, 115, 199, 30); textField.setColumns(10); panel_Initial.add(textField); JButton btnLogin = new JButton(“\uB85C \uADF8 \uC778”); btnLogin.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { LoginDAO dao = new LoginDAO(); try { if( dao.searchId( textField.getText() , passwordField.getText() ) ) { JOptionPane.showMessageDialog( MainUI.this, “로그인에 성공했습니다.”); panel_Initial.setVisible( false ); panel_CreateUser.setVisible( false ); panel_MainMenu.setVisible( true ); } else { JOptionPane.showMessageDialog( MainUI.this, “로그인에 실패했습니다. ID나 PW를 다시 확인해주세요”); } } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); btnLogin.setBounds(256, 271, 150, 33); btnLogin.setFont(new Font(“굴림”, Font.BOLD, 20)); panel_Initial.add(btnLogin); JButton btnCreateUser = new JButton(“\uD68C \uC6D0 \uAC00 \uC785”); btnCreateUser.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_MainMenu.setVisible( false ); panel_Initial.setVisible( false ); panel_DeletePlayer.setVisible( false ); panel_SelectPlayer.setVisible( false ); panel_UpdatePlayer.setVisible( false ); panel_InsertPlayer.setVisible( false ); panel_CreateUser.setVisible( true ); } }); btnCreateUser.setBounds(256, 340, 150, 33); btnCreateUser.setFont(new Font(“굴림”, Font.BOLD, 20)); panel_Initial.add(btnCreateUser); passwordField = new JPasswordField(); passwordField.setBounds(230, 168, 199, 30); panel_Initial.add(passwordField); //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ2. 회원가입 패널ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ panel_CreateUser.setBounds(0, 0, 637, 501); contentPane.add(panel_CreateUser); panel_CreateUser.setLayout(null); JLabel lblNewLabe2 = new JLabel(“\uD68C \uC6D0 \uAC00 \uC785”); lblNewLabe2.setBounds(233, 28, 187, 35); lblNewLabe2.setFont(new Font(“휴먼둥근헤드라인”, Font.BOLD, 30)); panel_CreateUser.add(lblNewLabe2); JLabel lblNewLabel2_1 = new JLabel(“ID”); lblNewLabel2_1.setBounds(137, 94, 18, 22); lblNewLabel2_1.setFont(new Font(“굴림”, Font.BOLD, 18)); panel_CreateUser.add(lblNewLabel2_1); textCreateId = new JTextField(); textCreateId.setBounds(207, 96, 231, 21); panel_CreateUser.add(textCreateId); textCreateId.setColumns(10); JLabel lblNewLabel2_1_1 = new JLabel(“PW”); lblNewLabel2_1_1.setFont(new Font(“굴림”, Font.BOLD, 18)); lblNewLabel2_1_1.setBounds(137, 135, 36, 22); panel_CreateUser.add(lblNewLabel2_1_1); JLabel lblNewLabel2_1_2 = new JLabel(“\uC131\uBCC4”); lblNewLabel2_1_2.setFont(new Font(“굴림”, Font.BOLD, 18)); lblNewLabel2_1_2.setBounds(137, 224, 36, 22); panel_CreateUser.add(lblNewLabel2_1_2); textCreatePno1 = new JTextField(); textCreatePno1.setColumns(10); textCreatePno1.setBounds(207, 308, 51, 21); panel_CreateUser.add(textCreatePno1); JLabel lblNewLabel2_1_3 = new JLabel(“\uD734\uB300\uC804\uD654”); lblNewLabel2_1_3.setFont(new Font(“굴림”, Font.BOLD, 18)); lblNewLabel2_1_3.setBounds(116, 308, 79, 22); panel_CreateUser.add(lblNewLabel2_1_3); JLabel lblNewLabel2_1_4 = new JLabel(“\uC0DD\uB144\uC6D4\uC77C”); lblNewLabel2_1_4.setFont(new Font(“굴림”, Font.BOLD, 18)); lblNewLabel2_1_4.setBounds(116, 266, 79, 22); panel_CreateUser.add(lblNewLabel2_1_4); textCreateName = new JTextField(); textCreateName.setColumns(10); textCreateName.setBounds(207, 177, 231, 21); panel_CreateUser.add(textCreateName); JLabel lblNewLabel2_1_5 = new JLabel(“\uC774\uB984”); lblNewLabel2_1_5.setFont(new Font(“굴림”, Font.BOLD, 18)); lblNewLabel2_1_5.setBounds(137, 177, 36, 22); panel_CreateUser.add(lblNewLabel2_1_5); JComboBox comboCreateGender = new JComboBox(); comboCreateGender.setModel(new DefaultComboBoxModel(new String[] {“\uB0A8”, “\uC5EC”})); comboCreateGender.setSelectedIndex(0); comboCreateGender.setBounds(207, 225, 119, 23); panel_CreateUser.add(comboCreateGender); JButton btnOverlapchk = new JButton(“\uC911\uBCF5\uD655\uC778”); btnOverlapchk.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { LoginDAO dao = new LoginDAO(); try { if( dao.checkId( textCreateId.getText() ) ) { JOptionPane.showMessageDialog( MainUI.this, “ID가 중복됩니다. 다른 ID를 사용해주세요.”); textCreateId.setText( “” ); } else { JOptionPane.showMessageDialog( MainUI.this, “사용가능한 ID입니다.”); } } catch (HeadlessException | SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); btnOverlapchk.setBounds(450, 95, 97, 23); panel_CreateUser.add(btnOverlapchk); JButton btnCreate = new JButton(“\uD68C \uC6D0 \uAC00 \uC785”); btnCreate.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { String birth = textCreateYear.getText() + “-” + textCreateMonth.getText() + “-” + textCreateDay.getText(); String pno = textCreatePno1.getText() + “-” + textCreatePno2.getText() + “-” + textCreatePno3.getText(); LoginDAO dao = new LoginDAO(); try { dao.createUser( textCreateId.getText(), passwordFieldCreatePw.getText(), textCreateName.getText() , (String)comboCreateGender.getSelectedItem(), birth, pno ); JOptionPane.showMessageDialog( MainUI.this, “회원가입이 완료되었습니다.”); panel_CreateUser.setVisible( false ); panel_Initial.setVisible( true ); } catch (SQLException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog( MainUI.this, “입력정보를 정확히 입력하거나 ID중복을 확인해주세요.”); } } }); btnCreate.setFont(new Font(“굴림”, Font.PLAIN, 15)); btnCreate.setBounds(341, 388, 135, 35); panel_CreateUser.add(btnCreate); textCreateYear = new JTextField(); textCreateYear.setBounds(207, 268, 79, 21); panel_CreateUser.add(textCreateYear); textCreateYear.setColumns(10); textCreateMonth = new JTextField(); textCreateMonth.setColumns(10); textCreateMonth.setBounds(296, 268, 65, 21); panel_CreateUser.add(textCreateMonth); textCreateDay = new JTextField(); textCreateDay.setColumns(10); textCreateDay.setBounds(373, 268, 65, 21); panel_CreateUser.add(textCreateDay); JLabel lblNewLabel_2 = new JLabel(“ex) 1999 09 09”); lblNewLabel_2.setBounds(450, 271, 97, 15); panel_CreateUser.add(lblNewLabel_2); textCreatePno2 = new JTextField(); textCreatePno2.setColumns(10); textCreatePno2.setBounds(270, 308, 79, 21); panel_CreateUser.add(textCreatePno2); textCreatePno3 = new JTextField(); textCreatePno3.setColumns(10); textCreatePno3.setBounds(361, 308, 77, 21); panel_CreateUser.add(textCreatePno3); JLabel lblNewLabel_2_1 = new JLabel(“ex) 010 1111 1111”); lblNewLabel_2_1.setBounds(450, 311, 97, 15); panel_CreateUser.add(lblNewLabel_2_1); passwordFieldCreatePw = new JPasswordField(); passwordFieldCreatePw.setBounds(207, 137, 231, 21); panel_CreateUser.add(passwordFieldCreatePw); JButton btnCreateBack = new JButton(“\uB4A4 \uB85C \uAC00 \uAE30 “); btnCreateBack.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_CreateUser.setVisible( false ); panel_Initial.setVisible( true ); } }); btnCreateBack.setFont(new Font(“굴림”, Font.PLAIN, 15)); btnCreateBack.setBounds(171, 388, 135, 35); panel_CreateUser.add(btnCreateBack); //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ3. 메뉴 패널ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ panel_MainMenu.setBounds(0, 0, 637, 501); contentPane.add(panel_MainMenu); panel_MainMenu.setLayout(null); JLabel lblNewLabel3 = new JLabel(“\uCD95\uAD6C\uC120\uC218 \uAD00\uB9AC \uD504\uB85C\uADF8\uB7A8”); panel_MainMenu.add(lblNewLabel3); lblNewLabel3.setBounds(157, 27, 342, 35); lblNewLabel3.setFont(new Font(“휴먼둥근헤드라인”, Font.BOLD, 30)); btnMenuInsertPlayer.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_MainMenu.setVisible( false ); panel_CreateUser.setVisible( false ); panel_Initial.setVisible( false ); panel_DeletePlayer.setVisible( false ); panel_SelectPlayer.setVisible( false ); panel_UpdatePlayer.setVisible( false ); panel_InsertPlayer.setVisible( true ); } }); btnMenuInsertPlayer.setFont(new Font(“휴먼둥근헤드라인”, Font.PLAIN, 18)); btnMenuInsertPlayer.setBounds(219, 100, 212, 48); panel_MainMenu.add(btnMenuInsertPlayer); btnMenuDeletePlayer.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_MainMenu.setVisible( false ); panel_CreateUser.setVisible( false ); panel_Initial.setVisible( false ); panel_SelectPlayer.setVisible( false ); panel_UpdatePlayer.setVisible( false ); panel_InsertPlayer.setVisible( false ); panel_DeletePlayer.setVisible( true ); } }); btnMenuDeletePlayer.setFont(new Font(“휴먼둥근헤드라인”, Font.PLAIN, 18)); btnMenuDeletePlayer.setBounds(219, 187, 212, 48); panel_MainMenu.add(btnMenuDeletePlayer); btnMenuUpdatePlayer.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_MainMenu.setVisible( false ); panel_CreateUser.setVisible( false ); panel_Initial.setVisible( false ); panel_SelectPlayer.setVisible( false ); panel_InsertPlayer.setVisible( false ); panel_DeletePlayer.setVisible( false ); panel_UpdatePlayer.setVisible( true ); } }); btnMenuUpdatePlayer.setFont(new Font(“휴먼둥근헤드라인”, Font.PLAIN, 18)); btnMenuUpdatePlayer.setBounds(219, 270, 212, 48); panel_MainMenu.add(btnMenuUpdatePlayer); btnMenuSelectPlayer.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_MainMenu.setVisible( false ); panel_CreateUser.setVisible( false ); panel_Initial.setVisible( false ); panel_InsertPlayer.setVisible( false ); panel_DeletePlayer.setVisible( false ); panel_UpdatePlayer.setVisible( false ); panel_SelectPlayer.setVisible( true ); } }); btnMenuSelectPlayer.setFont(new Font(“휴먼둥근헤드라인”, Font.PLAIN, 18)); btnMenuSelectPlayer.setBounds(219, 353, 212, 48); panel_MainMenu.add(btnMenuSelectPlayer); btnMenuExit.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.exit(0); } }); btnMenuExit.setFont(new Font(“휴먼둥근헤드라인”, Font.PLAIN, 18)); btnMenuExit.setBounds(219, 432, 212, 48); panel_MainMenu.add(btnMenuExit); //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ4. 선수 추가 패널ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ panel_InsertPlayer.setBounds(0, 0, 637, 501); contentPane.add(panel_InsertPlayer); panel_InsertPlayer.setLayout(null); JLabel lblNewLabel4 = new JLabel(“선 수 추 가”); lblNewLabel4.setBounds(234, 20, 172, 35); lblNewLabel4.setFont(new Font(“휴먼둥근헤드라인”, Font.BOLD, 30)); panel_InsertPlayer.add(lblNewLabel4); lblNewLabel4_1.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_1.setBounds(144, 92, 65, 21); panel_InsertPlayer.add(lblNewLabel4_1); lblNewLabel4_2.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_2.setBounds(144, 133, 65, 21); panel_InsertPlayer.add(lblNewLabel4_2); lblNewLabel4_3.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_3.setBounds(144, 174, 65, 21); panel_InsertPlayer.add(lblNewLabel4_3); lblNewLabel4_4.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_4.setBounds(144, 215, 65, 21); panel_InsertPlayer.add(lblNewLabel4_4); lblNewLabel4_5.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_5.setBounds(144, 257, 65, 21); panel_InsertPlayer.add(lblNewLabel4_5); lblNewLabel4_6.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_6.setBounds(144, 300, 65, 21); panel_InsertPlayer.add(lblNewLabel4_6); lblNewLabel4_7.setFont(new Font(“맑은 고딕”, Font.PLAIN, 15)); lblNewLabel4_7.setBounds(144, 342, 65, 21); panel_InsertPlayer.add(lblNewLabel4_7); panel_InsertPlayer.add(textField_4_PlayerName); comboBox_4_Team.setBounds(221, 135, 215, 23); comboBox_4_Team.setModel( new TeamComboModel() ); panel_InsertPlayer.add(comboBox_4_Team); panel_InsertPlayer.add(textField_4_Height); panel_InsertPlayer.add(textField_4_Year); textField_4_Month.setColumns(10); textField_4_Month.setBounds(317, 215, 53, 21); panel_InsertPlayer.add(textField_4_Month); textField_4_Day.setColumns(10); textField_4_Day.setBounds(375, 215, 61, 21); panel_InsertPlayer.add(textField_4_Day); lblNewLabel_3.setBounds(452, 215, 133, 15); panel_InsertPlayer.add(lblNewLabel_3); textField_4_Weigth.setColumns(10); textField_4_Weigth.setBounds(221, 257, 215, 21); panel_InsertPlayer.add(textField_4_Weigth); textField_4_BackNum.setColumns(10); textField_4_BackNum.setBounds(221, 342, 215, 21); panel_InsertPlayer.add(textField_4_BackNum); comboBox_4_Position.setModel(new DefaultComboBoxModel(new String[] {“GK”, “FW”, “DF”, “MF”})); comboBox_4_Position.setSelectedIndex(0); comboBox_4_Position.setBounds(221, 298, 215, 23); panel_InsertPlayer.add(comboBox_4_Position); btn_4_Back.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_InsertPlayer.setVisible( false ); panel_MainMenu.setVisible( true ); } }); btn_4_Back.setFont(new Font(“굴림”, Font.PLAIN, 15)); btn_4_Back.setBounds(144, 411, 133, 35); panel_InsertPlayer.add(btn_4_Back); btn_4_InsertPlayer.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { String p_birth = textField_4_Day.getText() + “/” + textField_4_Month.getText() + “/” + textField_4_Year.getText(); String t_codes = (String)comboBox_4_Team.getSelectedItem(); String[] t_code = t_codes.split(“\\(“); LoginDAO dao = new LoginDAO(); try { dao.insertPlayer( t_code[0], textField_4_PlayerName.getText(), textField_4_Height.getText(), p_birth, textField_4_Weigth.getText(), (String)comboBox_4_Position.getSelectedItem(), textField_4_BackNum.getText() ); JOptionPane.showMessageDialog( MainUI.this, “선수 추가가 완료되었습니다.”); textField_4_PlayerName.setText(“”); textField_4_BackNum.setText(“”); textField_4_Day.setText(“”); textField_4_Height.setText(“”); textField_4_Month.setText(“”); textField_4_Weigth.setText(“”); textField_4_Year.setText(“”); panel_InsertPlayer.setVisible( false ); panel_MainMenu.setVisible( true ); } catch (SQLException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog( MainUI.this, “값이 이상합니다 다시 입력해주세요.”); textField_4_PlayerName.setText(“”); textField_4_BackNum.setText(“”); textField_4_Day.setText(“”); textField_4_Height.setText(“”); textField_4_Month.setText(“”); textField_4_Weigth.setText(“”); textField_4_Year.setText(“”); e1.printStackTrace(); } } }); btn_4_InsertPlayer.setFont(new Font(“굴림”, Font.PLAIN, 15)); btn_4_InsertPlayer.setBounds(335, 411, 133, 35); panel_InsertPlayer.add(btn_4_InsertPlayer); //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ5. 선수 삭제 패널ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ panel_DeletePlayer.setBounds(0, 0, 637, 501); contentPane.add(panel_DeletePlayer); panel_DeletePlayer.setLayout(null); JLabel lblNewLabel5 = new JLabel(“선 수 삭 제”); lblNewLabel5.setBounds(233, 28, 172, 35); lblNewLabel5.setFont(new Font(“휴먼둥근헤드라인”, Font.BOLD, 30)); panel_DeletePlayer.add(lblNewLabel5); lblNewLabel_5.setFont(new Font(“휴먼둥근헤드라인”, Font.PLAIN, 15)); lblNewLabel_5.setBounds(104, 94, 91, 25); panel_DeletePlayer.add(lblNewLabel_5); panel_DeletePlayer.add(textField_5_PlayerName); JScrollPane scrollPane = new JScrollPane(); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setBounds(12, 142, 613, 259); panel_DeletePlayer.add(scrollPane); table_5_SearchResult = new JTable(); scrollPane.setViewportView(table_5_SearchResult); JButton btn_5_Search = new JButton(“\uAC80 \uC0C9”); btn_5_Search.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { String playerName = textField_5_PlayerName.getText(); table_5_SearchResult.setModel( new _5_PlayerTableModel( playerName ) ); } }); table_5_SearchResult.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { playerNum = Integer.parseInt( (String)table_5_SearchResult.getValueAt( table_5_SearchResult.getSelectedRow() , 0 ) ) ; } }); btn_5_Search.setFont(new Font(“굴림”, Font.PLAIN, 15)); btn_5_Search.setBounds(451, 94, 119, 25); panel_DeletePlayer.add(btn_5_Search); JButton btn_5_Menu = new JButton(“\uBA54 \uB274”); btn_5_Menu.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { panel_DeletePlayer.setVisible( false ); panel_MainMenu.setVisible( true ); } }); btn_5_Menu.setFont(new Font(“굴림”, Font.PLAIN, 15)); btn_5_Menu.setBounds(144, 411, 133, 35); panel_DeletePlayer.add(btn_5_Menu); JButton btn_5_Delete = new JButton(“\uC120 \uC218 \uC0AD \uC81C”); btn_5_Delete.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { SoccerDAO dao = new SoccerDAO(); String playerName = textField_5_PlayerName.getText(); dao.deletePlayer( playerNum ); JOptionPane.showMessageDialog( MainUI.this, “선수 삭제가 완료되었습니다. 다시 검색해보세요.”); } }); btn_5_Delete.setFont(new Font(“굴림”, Font.PLAIN, 15)); btn_5_Delete.setBounds(335, 411, 133, 35); panel_DeletePlayer.add(btn_5_Delete); //ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ6. 선수 수정 패널ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ JPanel panel = new JPanel(); panel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)), “\uC120\uC218 \uC815\uBCF4\uB97C \uC218\uC815\uD574\uC8FC\uC138\uC694”, TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); panel.setBounds(91, 105, 495, 283); panel_UpdatePlayer.add(panel); panel.setLayout(null); panel_UpdatePlayer.setBounds(0, 0, 637, 501); contentPane.add(panel_UpdatePlayer); panel_UpdatePlayer.setLayout(null); JLabel lblNewLabel_6_1 = new JLabel(“\uC120 \uC218 \uC218 \uC815”); lblNewLabel_6_1.setFont(new Font(“HY헤드라인M”, Font.BOLD, 30)); lblNewLabel_6_1.setBounds(236, 10, 184, 47); panel_UpdatePlayer.add(lblNewLabel_6_1); JLabel lblNewLabel_7_2 = new JLabel(“\uC120 \uC218 \uBC88 \uD638”); lblNewLabel_7_2.setFont(new Font(“굴림”, Font.PLAIN, 15)); lblNewLabel_7_2.setBounds(77, 72, 77, 23); panel_UpdatePlayer.add(lblNewLabel_7_2); textField_6_P_no = new JTextField(); textField_6_P_no.setBounds(166, 71, 278, 23); panel_UpdatePlayer.add(textField_6_P_no); textField_6_P_no.setColumns(10); JComboBox comboBox_6_Position = new JComboBox(); comboBox_6_Position.setBounds(75, 202, 268, 21); panel.add(comboBox_6_Position); comboBox_6_Position.setModel(new DefaultComboBoxModel(new String[] {“GK”, “FW”, “MF”, “DF”})); JComboBox comboBox_6_Tcode = new JComboBox(); comboBox_6_Tcode.setBounds(75, 37, 268, 23); panel.add(comboBox_6_Tcode); JButton btn_6_SearchPlayer = new JButton(“\uAC80 \uC0C9”); btn_6_SearchPlayer.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { Integer pNumber = Integer.parseInt( textField_6_P_no.getText() ); ArrayList to = new ArrayList(); SoccerDAO dao = new SoccerDAO(); to = dao.searchPlayer_6( pNumber ); comboBox_6_Tcode.setModel( new TeamComboModel() ); int i = 0; for( i = 0; i players; public _5_PlayerTableModel( String playerName) { SoccerDAO dao = new SoccerDAO(); players = dao.searchPlayer( playerName ); } @Override public String getColumnName(int column) { return columnNames[column]; } @Override public int getRowCount() { return players.size(); } @Override public int getColumnCount() { return 8; } @Override public Object getValueAt(int rowIndex, int columnIndex) { String result = “”; SoccerTO to = players.get( rowIndex ); switch ( columnIndex ) { case 0: result = to.getP_no(); break; case 1: result = to.getT_code(); break; case 2: result = to.getP_name(); break; case 3: result = to.getP_length(); break; case 4: result = to.getP_birth(); break; case 5: result = to.getP_weight(); break; case 6: result = to.getP_pos(); break; case 7: result = to.getP_backno(); break; } return result; } }

-TeamComboModel

package Pack_Model; import java.util.ArrayList; import javax.swing.DefaultComboBoxModel; import Pack_Team.TeamDAO; import Pack_Team.TeamTO; public class TeamComboModel extends DefaultComboBoxModel { ArrayList teams = new ArrayList(); public TeamComboModel() { TeamDAO dao = new TeamDAO(); teams = dao.selectTeam(); } @Override public int getSize() { return teams.size(); } @Override public Object getElementAt(int index) { String resultTeam = teams.get(index).getT_code() + “(” + teams.get(index).getT_name() + “)”; return resultTeam; } }

3. 최종 결과

정말 CRUD 기능만 구현을 했고 코드는 정리가 필요한 상태.

이후에 약간의 기능 및 디자인을 첨가해보자..ㅎ

728×90

반응형

LIST

첫 미니 프로젝트 : 영화 OTT 플랫폼

국비 수업을 들은지 두 달이 다 되어가는 와중에, 오직 자바와 콘솔 입출력 기능만 갖고 24시간동안 프로그램을 짜보는 프로젝트 시간을 가졌다. 이 글을 24시간 동안 둘이서 한 팀원과 둘이서 코딩을 한 결과물이며 이 이후로 계속 리팩토링과 기능 개선을 한 결과물은 다음 저장소에 확인할 수 있다.

<깃헙 저장소 - mini-project>

전체적인 컨셉

프로젝트의 주제는 자유였고, 나와 또 다른 팀원 한 명은 영화 OTT 플랫폼의 추천 알고리즘을 흉내내어 보기로 결정했다. 회사에서 사용하는 추천 알고리즘은 머신러닝과 AI를 활용하겠지만, 그 수준은 상상도 못하고 그 대신 간단한 추천 리스트를 만들어보기로 했다. 예를 들면

같은 성별, 같은 나잇대의 회원 집단에서 시청한 영화를 조회수 순으로 나열한 리스트

회원의 취향 장르를 한 영화를 시청할 때마다 그 동안 시청한 모든 영화의 장르를 조회해서 가장 많이 본 장르로 업데이트하는 기능

이정도가 있었는데, 결국 프로젝트를 진행하면서 시간 여유가 없어 전자는 구현하지 못했다. 이외에도 가장 기본적으로 주어지는 기능들도 몇가지 구현했는데

시청한 영화 리스트

보고 싶은 영화 리스트

시청한 영화 리스트는 다시보기 기능과 취향 장르를 계산하기 위한 데이터였고, 보고 싶은 영화 리스트에는 회원가입을 할때부터 추가가 가능하며 영화를 보고나면 보고싶은 영화 리스트에서 삭제하는 기능도 추가헀다. 또한 비록 콘솔이나 좀더 보기 좋은 콘솔화면을 구현해보기 위해서 아스키 아트를 사용하여 콘솔의 비루함을 최대한 줄여보려고 했으며, 권한(로그아웃, 로그인, 관리자)에 따라서 다른 화면을 띄우도록 했다.

구현된 기능

기능을 회원의 상태 / 권한에 따라 나누었다.

로그 아웃 상태에서는 -> 로그인 상태

-> 관리자 상태

-> 관리자 상태 로그인 상태에서는 -> 로그아웃 상태

관리자 상태에서는 -> 로그아웃 상태

로 전환이 가능하여 결국에는 로그아웃, 로그인, 관리자 상태를 자유롭게 드나들 수 있다.

로그아웃 상태 로그인 상태 관리자 상태 회원가입 로그아웃 회원 관리 회원 추가 회원 조회 회원 수정 회원 삭제

로그인

영화시청

영화 관리 영화 추가 영화 조회 영화 수정 영화 삭제 관리자 보고싶어요 취소 종료 장르별 더보기 동료 인기순 더보기 다시보기 종료

화면

로그아웃 상태

____ _____ _______ ______ _ _____ __ __ | _ \ |_ _| |__ __| | ____| | | |_ _| \ \ / / | |_) | | | | | | |__ | | | | \ V / | _ < | | | | | __| | | | | > < //-> 로고 | |_) | _| |_ | | | | | |____ _| |_ / . \ |____/ |_____| |_| |_| |______| |_____| /_/ \_\ ************************************************************* * * *—————–!! Top 5 !!—————-* //-> 인기순 5개씩 출력 * * // q누르면 다음 메뉴 출력 ************************************************************* 1. 어바웃 타임 2. 이터널 선샤인 3. 라라랜드 4. 캐롤 5. 타이타닉 : [메인 페이지] ************************************************************** * 로그인 * 회원가입 * ************************************************************** //-> 로그아웃 상태의 메뉴 * 관리자 * 종료 * **************************************************************

로그아웃 화면은 다음과 같이 이루어져있다.

로고

전체 영화를 인기순으로 5개씩 끊어 출력 (q를 입력하면 더이상 출력하지 않고, 다음 메뉴를 출력한다.)

로그아웃 상태의 기능을 나열한 메뉴

관리자 상태

************************************************************** * 회원관리 * 영화관리 * ************************************************************** * 종료 * **************************************************************

회원관리와 영화관리, 종료 기능을 포함한 관리자 메뉴를 띄우며 회원관리를 입력하면 다음과 같이 나타난다. 빈문자열을 입력하면 뒤로 갈 수 있다.

************************************************************** * 회원추가 * 회원조회 * ************************************************************** * 회원수정 * 회원삭제 * **************************************************************

반면, 영화관리를 입력하면 다음과 같은 메뉴를 띄우며, 마찬가지로 빈문자열을 입력하면 다시 기본 관리자 메뉴로 갈 수 있다.

************************************************************** * 영화추가 * 영화조회 * ************************************************************** * 영화수정 * 영화삭제 * **************************************************************

로그인 상태

____ _____ _______ ______ _ _____ __ __ | _ \ |_ _| |__ __| | ____| | | |_ _| \ \ / / | |_) | | | | | | |__ | | | | \ V / | _ < | | | | | __| | | | | > < // -> 로고 | |_) | _| |_ | | | | | |____ _| |_ / . \ |____/ |_____| |_| |_| |______| |_____| /_/ \_\ ************************************************************* * * *—————–!! Romance !!—————-* // -> 취향 장르 영화 5개 출력 * * ************************************************************* 1. 어바웃 타임 2. 이터널 선샤인 3. 라라랜드 4. 캐롤 5. 타이타닉 ************************************************************* * * *—————–!! Top 5 !!—————-* // -> 전체 영화중 인기순 5개씩 출력 * * ************************************************************* 1. 어바웃 타임 2. 이터널 선샤인 3. 라라랜드 4. 캐롤 5. 타이타닉 : 1님 안녕하세요! ************************************************************** * 영화 시청 * ************************************************************** * 보고싶어요 * 다시보기 * ************************************************************** // -> 로그인 상태 메뉴 * 장르별 더보기 * 인기순 더보기 * ************************************************************** * 로그아웃 * 종료 * **************************************************************

로그인 상태의 화면은 다음과 같이 이뤄져있다.

로고

취향 장르의 영화 다섯개 출력

전체 영화를 인기순으로 5개씩 끊어 출력 (q를 입력하면 더이상 출력하지 않고, 다음 메뉴를 출력한다.)

로그인 상태의 기능 나열한 메뉴

클래스

mini.project 패키지

App 클래스

main 메서드가 있는 엔트리 포인트이다. 이것을 실행하면 조건문이 실행되어 이용자의 권한에 따라 CommandProcesser의 메서드가 다르게 실행된다.

mini.project.util 패키지

CommandProcesser 클래스

권한에 따라 실행될 메서드

isLoggedOut()

isLoggedIn()

isManager()

가 준비되어있고, 각 메서드 안에는 switch()문이 있어 이용자의 입력값에 따라 각 권한의 메뉴에서 기능을 실행한다.

Prompt 클래스

int, String, Genre 타입의 값을 입력받는 도구를 갖고 있다.

Screen 클래스

어떤 종류의 영화 목록을 화면에 띄우는 도구(viewMovies)

로고를 화면에 띄우는 도구(logo, bitflixLogo)

영화를 시청할 때 띄우는 도구(getWatchScreen -> getMovieScreen -> getHorrorScreen/getActionScreen/getFamiltyScreen/getRomanceScreen)

다음과 같은 메서드들이 있다.

mini.project.Handler 패키지

MemberHandler 클래스

관리자 권한으로 회원을 관리하거나, 전체 회원 집단을 다룰 때 사용되는 클래스이다.

MovieHandler 클래스

다양한 종류의 영화 집단을 관리하고 있다. 예를 들어 전체 영화 집단, 각 회원의 보고싶은 영화 집단, 각 회원의 시청한 영화 집단에 대하여 추가, 수정, 삭제 등의 기능을 제공한다.

mini.project.domain 패키지

Member 클래스

각 회원의 정보를 저장하고 있는 데이터 타입인 동시에, 회원 개개인의 행위를 구현하는 메서드(removeToWatch, addWatched, printToWatchList, printHistory, watch, caculcateFavoriteGenre)를 갖는다.

Movie 클래스

각 영화에 대한 정보를 저장하는 데이터 타입이다.

로그아웃 상태에서의 클래스 관계

로그인, 관리자까지 설계도를 그리려고 했는데 도저히 너무 힘들어서 못하겠다. 각 의존관계가 여전히 너무 복잡하고 상식적이지 못하다.

느낀점

아쉬운점

스크린 클래스의 viewMovies 메서드를 영화 정보 뿐만 아니라 다양한 String 값을 출력할 수 있도록 파라미터를 String 으로 바꿨어야했다.

Client 측에서 여전히 너무 많은 일을 하고 있다. 사용되는 객체가 온전히 자기 일을 할 수 있도록 메서드를 만들어줘야만 했다.

// MemberHandler 에서 Member의 toWatchList필드를 갖고와서 직접 add하는 모습 member.getToWatchList().add(movie) // => MemberHandler에서 Member에게 보고 싶은 영화에 영화를 추가하라고 시키고 member.addToWatchList(movie); // Member에서 이 일을 Member에서 온전히 했어야한다. public void addToWatchList(Movie movie) { getToWatchList().add(movie); }

CommandProcesser에서 직접 Screen 클래스 화면 요소를 띄우는 메서드를 여러번 호출하여 화면을 조합하는 일까지 하고 있다. 화면을 조합하는 일은 Screen에서 담당해야한다.

// CommandProcesser에서 Screen 클래스의 메서드를 여러번 호출해서 직접 화면을 조합하고 있다. Screen.bitflixLogo(); movieHandler.printBest(); Screen.viewMenu(Screen.BEFORE_LOGIN_PAGE); // 그냥 완성된 화면을 호출하기만 할 수 있도록 해야한다. Screen.getMainScreen(); // Screen 클래스에서는 화면을 조합하는 메서드를 만들어야한다. public void getMainScreen() { // 이용자의 권한에 따라 달라지는 화면 조합 구현 }

진짜 느낀점

코드는 인간의 생각을 그대로 구현한 것이라는 말이 정말 맞는 말이다. 같은 코드라도 보는 사람에 따라, 만드는 사람에 따라 전혀 다르게 생각이 가능하고, 그런 차이에 따라 코드의 작성 방향이 달라진다.

구현하는 동안 너무 코드가 지저분하다고 좌절할 필요가 없는 것 같다. 당장은 엄청 구리더라도, 구현하고 나면 깨끗하게 정리할 수 있는 부분이 언제나 존재한다.

프로그래밍에서 알고리즘이 필요한 순간이 있을 수는 있으나, 프로그래밍과 알고리즘은 전혀 다른 것이라는 것을 확실히 알았다.

hei-jung/FoodOrderSystem: Java 미니 프로젝트

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

키워드에 대한 정보 자바 미니 프로젝트

다음은 Bing에서 자바 미니 프로젝트 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 Java Mini Project 자바 미니프로젝트

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

Java #Mini #Project #자바 #미니프로젝트


YouTube에서 자바 미니 프로젝트 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 Java Mini Project 자바 미니프로젝트 | 자바 미니 프로젝트, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment