pos machine term project
TRANSCRIPT
- POS System -
데이터베이스
이동호 교수님
윤경수 조교님
2011037224
이기찬
1. Schema Diagram
굵게 밑줄 쳐진 속성 은 입니다(Attribute) Primary Key .※
회원정보(customer)
이름(cus_name)
생일(cus_birth)
전화번호(cus_phone)
등급(cus_rank)
ID(cus_ID)
구매금액(cus_tot)
직원정보(employee)
이름(emp_name)
직급(emp_position)
ID(emp_ID)
실적(emp_tot)
메뉴정보(menu)
이름(menu_name)
가격(menu_price)
ID(menu_ID)
결제정보(sales)
이름(sales_name)
가격(sales_price)
판매날짜(sales_date)
2. Class Diagram
같은 방식으로
에Eclipse ObjectAid
를UML Explorer
이용해 를JPG
하였고 첨부된export
프로젝트 폴더 내에
가 존재합니다JPG
3. ReadMe
3-1 ReadMe
> 안녕하세요 이 를 꼭 읽고 프로그램을 시작해주세요? ReadMe !
이 는 프로그램에 대한 모든 것을 상세히 기술하며 스크린샷과 함께 부연설명되어ReadMe
있습니다 프로그램의 특성부터 사용법까지 기술되어 있으므로 참고하여 프로그램을.
이용합시다!
이 프로그램은 을 를 이용하여 와1. POS System JDBC JAVA Oracle
를 연동해 작성한 것으로 프로그램을 시작하면 와DB Oracle DB
연결됩니다 의 모두 기본 설정인. DBA ID, PW system, 123으로
접속하며 기본 의 와 가 다를 경우 아래 그림의, DBA ID PW
의DB_Connect class dbTest 코드에서 변경해주면 접속할 수
있습니다.
( 제출 시 모든 시스템의 기본 설정인 으로 변경하여*** system, system
제출하였습니다! ***)
이 프로그램은 시작과 동시에 에 각각2. DB customer, employee,
와 기능 구현을 위해 새로이 추가한 테이블을 생성하며menu sales
생성하기 전에 상에 존재하는 같은 이름의 들을DB table
시킵니다 이는 프로그램의 안정성을 위한 것으로 적용된 를Drop . DB
유지하고 싶다면 의 을 시켜주어야DB_Connect dropAll() disable
합니다 하지만 안정성을 위해 로 하는 것을 권장합니다. default drop .
의 코드- dropAll
회원정보 직원정보 메뉴정보가 저장되어있는 기본 파일은3. , ,
이며 프로젝트 진행을 위해 제시된 파일입니다 이 파일의data.txt .
내용이 절대 수정되지 않는 것을 원칙으로 프로그램이 작성되었으며
파일을 읽지 않으면 프로그램을 작동할 수 없도록 처리Exception 가
되어 있습니다. (① 파일이 수정될 경우"OPEN FILE FIRST") data.txt
프로그램은 정상적으로 작동하지 않으며 한 번 파일을 정상적으로
삽입했다면 그 후로 파일을 또 오픈하여 비정상적인 진행을 할 수
없도록 처리가 되어 있습니다Exception .(② "ALREADY OPENED")
①.OPEN FILE FIRST
②.ALREADY OPENED
파일이 삽입된 후 프로그램 상의 여러 가지 조작을 통해 구성된4.
에 새로운 데이터를 추가 및 업데이트할 수 있으며 데이터를DB
조작하기 위해서는 로그인을 반드시 하도록 처리를Exception
하였습니다 로그인 하지 않은 상태로 버튼을 누르거나 할 경우에.
로그인이 필요하다는 메시지를 출력합니다. (③ "LOGIN NEEDED")
③.LOGIN NEEDED
로그인을 하기 위해서는 패널의 탭에서5. Enroll&Inquery Employee
직원의 이름으로 정보를 조회해 사원번호를 알아야 합니다.
사원번호는 부터 까지1000 9999 자리4 를 사원마다 고유로 가지게
되며 만약 사원이름을 잘못 적었을 경우 메시지를 출력하여 이름을,
확인하도록 처리를 하였습니다Exception .
(④ "the employee's not found")
④. the employee's not found
이와 같은 방식으로 회원 메뉴정보를 조회할 수 있으며6. , 존재하지
않는 정보를 조회할 경우 찾을 수 없다고 메시지를 출력해 Exception
처리를 하였습니다. (⑤ “the customer's not found", ⑥ "the menu's
not found")
⑤. the customer's not found
⑥. the menu's not found
예를 들어 직급을 가진 박수진을 검색하면 아래와7. ‘Supervisor' ’ ’
같이 정보가 조회되며 이를 이용해 메뉴바의 로그인을 클릭하면
로그인 프레임이 생성됩니다 사원이름과 사원번호를 통해 로그인할.
수 있으며 정보가 맞으면 메시지를 출력하며"READY TO ORDER"
만약 그 정보가 맞지 않을 경우 메시지를 출력해 처리를Exception
하였습니다. (⑦ “IT ISN'T EXIST, TRY AGAIN”)
사원이름은 미리 알고 있는 것으로 제시되었습니다(** )
박수진 사원정보 조회‘ ‘, 2336
로그인 성공!
⑦ “IT ISN'T EXIST, TRY AGAIN”
직급을 가진 로 로그인했을 경우만8. 'Supervisor' Employee 회원,
직원 메뉴를 추가하는 권한, 을 가지며, 매출에 관한 정보 또한
만 접근할 수 있습니다 만약Supervisor . ‘ 직급Staff' 의 직원으로
로그인했다면 권한이 없어 위의 행동을 실행할 수 없다고 메시지를
출력하여 처리하였습니다Exception .(⑧ "Your Position can't use this
즉 직급으로 로그인할 경우 이전에 저장된 만을section") , Staff DB
가지고 업무를 수행할 수 있습니다.
⑧ "Your Position can't use ~
로그인했을 경우 메인 의 최상단 제목 표시줄에 현재9. Frame
로그인되어 있는 직원을 알 수 있으며 메뉴의 로그인을 통해 언제든지
다른 아이디로 로그인할 수 있습니다.
하니 Staff
파일을 오픈하고 로그인을 완료했다면 이제부터 프로그램을10. POS
시작할 수 있습니다 먼저 패널에 생성된 개의 버튼 중. Menu Info 20
메뉴가 등록된 개의 버튼을 활용하여 주문을 할 수 있습니다10 .
파일로부터 개의 메뉴를 읽어왔기에 개의 버튼이 활성화되며10 10
번째 버튼을 클릭할 경우 아무것도 실행되지 않도록 구현하여11
을 처리하였습니다Exception .(⑨ “”)
. “” :⑨ 아무것도 실행되지않음
직급의 아이디로 로그인하여 메뉴를 추가합니다11. 'Supervisor' .
메뉴는 패널의 탭에서 추가할 수 있으며 원래Enroll & Inquery Menu
있는 메뉴를 조회할 경우 메뉴 이름 가격 고유 를 출력합니다, , ID .
메뉴이름 가격, , ID
메뉴의 버튼을 클릭하면 새로운 프레임이 생성되고12. Add
메뉴이름과 가격을 지정하여 메뉴를 추가할 수 있습니다 이 때.
메뉴의 이름은 아무런 문자가 와도 상관없지만 메뉴의 가격은,
정수값이어야하기 때문에 정수값을 넣지 않았을 경우 메시지를
출력하여 을 처리하였습니다Exception . (⑩ “INPUT DIGITS.”)
⑩ “INPUT DIGITS.”
성공적으로 메뉴를 추가했을 경우 다음과 같이 버튼이 활성화되며13.
이제 이 버튼을 통해 주문을 추가할 수 있습니다 하지만 프레임에.
존재하는 버튼을 개이므로 이 이상 추가할 수 없도록 막고 메시지를20
출력하여 을 처리하였습니다Exception . (⑪ “MENU TABLE IS FULL”)
테이블 주문을 받고 있는 상황에서 아무런 메뉴를 추가하지14.
않았는데 주문 주문취소 결제를 할 수는 없습니다 이러한 행동을, , .
막고 각각 메시지를 출력해 을 처리하였습니다Exception .
(⑫ “ADDITIONAL ORDER PLZ”,⑬ “NO ORDER EXIST”,⑭ “NO PAY
EXIST”)
⑫ “ADDITIONAL ORDER PLZ”,
⑬ “NO ORDER EXIST”,
⑭ “NO PAY EXIST”
이제 메뉴 버튼을 눌러 주문을 추가합니다 패널에15. . Recept Info
있는 를 이용하여 각 테이블의 주문을 설정해줄 수check_box
있습니다 번 테이블에 버튼을 눌러 목록을 표시하고 주문을 누르면. 0
아래의 그림과 같이 해당 테이블의 색이 노란색으로 바뀌며 주문이
들어갔다는 사실을 알 수 있습니다 주문이 들어가고 난 후 취소를.
하고 싶다면 취소버튼을 눌러 취소할 수 있으며 해당 테이블의 색이
흰색으로 돌아오며 취소되었음을 알 수 있습니다 또 주문 및 취소를. ,
할 때마다 성공적으로 확인되었음을 알려주는 메시지가 출력됩니다.
이미 주문을 한 테이블에 또 메뉴 버튼을 누르면 새로운16.
주문목록이 출력되며 주문을 하고 테이블을 확인하면 원래 메뉴에
새로운 주문이 더해진 것을 확인할 수 있습니다 원래 주문했던.
메뉴와 같은 메뉴를 시켰을 경우 원래의 리스트에 추가된 형태로
출력이 되고 다른 메뉴를 시켰을 때엔 새로운 리스트로 출력합니다.
이 때에 같은 메뉴를 시켰더라도 요구사항에 따라 새로이 추가하여
메뉴를 보여줍니다.
이제 주문된 메뉴를 결제합니다 결제할 경우 에 적힌17. . Customer
이름이 회원이면 MEMBER PAY를 출력하고 요구사항에 따라 이름이,
없거나 혹은 회원이 아닌 경우 ANONYMOUS PAY를 출력하여
을 분기에 따라 처리하였습니다 메시지가 출력되고나면Exception .
결제된 테이블의 주문목록이 삭제되고 테이블 색상이 원래대로
돌아옵니다. (⑮ 권지용" MEMBER'S PAY COMPLETE!",
⑯ "ANONYMOUS PAY COMPLETE!")
결제가 끝났으니 탭에서 회원정보를 조회해 결제금액이18. Customer
반영되었는지 확인합니다 결제 당시 권지용의 등급은 였으므로. Silver
기본 구매금액이 원이며 할인이 적용된500000 20% 64000*0.8 ->
원의 금액이 적용되어 원의 구매금액을 가지고51200 551200
있습니다 당시의 직원은 박수진이었으므로 이 실적을. Supervisor
가지게 될 것이며 그 실적은 할인율이 적용되지 않은 금액으로,
적용됩니다 매출 또한 마찬가지로 할인되지 않은 금액으로.
적용됩니다.
결제 후 각각 구매금액 실적 매출, ,
결제를 마치고 에서 각각 데이터를 추가하고 조회해볼19. Recept Info
수 있습니다 에서는 회원을 추가하고 조회하는. Customer Panel
기능을 가지고 있으며 버튼을 눌러 새로운 회원 생성 프레임을Join
생성할 수 있습니다 정보를 기입하고 버튼을 눌러 회원을. JOIN
생성하는데 먼저 이름은 전에 있던 회원일 수 없으며 생일은 자리로, 4
입력해야하고 생일과 전화번호 모두 숫자값만을 입력해야합니다.
그러지 않을 경우 이 발생하며 대로 입력하라는Exception Constraint
메시지를 출력하여 을 처리하였습니다 모든 사항을 지켜Exception .
이기찬 회원을 만들었습니다‘ ’ .
(⑰"ALREADY EXIST",⑱ "CONFIRM THE BIRTH LENGTH",⑲ "INPUT
DIGITS")
이름 중복 방지
생일 길이는 자리로4
생일과 전화번호는 숫자로
정상적으로 만들어진 이기찬‘ ’
고객은 각각 의 등급을 가지며 각각20. Gold, Silver, Bronze, Normal
원을 기준으로 등급이 나뉘어집니다0, 300000, 500000, 1000000 .
처음 생성되는 이기찬과 같은 고객은 등급 구매금액 원으로‘ ’ Normal , 0
생성되며 파일에서 읽어온 고객들은 그 등급에 따라 기본금액으로
생성됩니다.
각각 배수지 권지용 유재석, ,
이기찬 회원을 기준으로 구매금액에 따라 적용되는 등급변화 및21. ‘ ’
할인율을 확인합니다 고객들은 등급부터 등급에 따라 각각. Gold 30%,
의 할인율을 가지고 있으며 구매금액에 할인금액으로20%, 10%, 0%
적용 반영됩니다 원의 알리오올리오 메뉴를 생성하여 결과를, . 200000
확인할 수 있습니다.
노멀 브론즈 알리오올리오 개 원 할인적용 없음-> : 2 400000
브론즈 실버 알리오올리오 개 원 할인적용-> : 1 180000 10%
실버 골드 알리오올리오 개 원 할인적용-> : 3 480000 20%
골드 알리오올리오 개 원 할인적용: 1 140000 30%
각 등급별 기본금액이 넘어감에 따라 등급변화가 있음을 확인할 수*
있습니다.
위에서 언급했던대로 박수진 로그인 상태로만22. Supervisor ‘ ’ Sales
탭을 확인할 수 있습니다 월 일 기준으로 알리오올리오를. 6 4
원어치를 팔았으며 그를 탭을 통해 확인할 수1600000 Sales
있습니다 시스템날짜를 바꾸어 월 일 안심스테이크를 개. 6 5 20
결제함으로써 날짜별 매출 누적 매출 전체 기간 중 가장 많이 적게, , /
팔린 메뉴를 확인합니다 이 때에 최대 최소로 팔린 메뉴들은 같은. /
개수로 팔렸을 경우 같은 개수의 메뉴 중 하나를 골라 출력합니다.
결제가 없고 월 일 이전6 4 날짜인 월 일을 고를 경우 일매출6 1 0,
누적매출 을 표시하며 월 일 이후 결제가 없는 월 일을null 6 4 6 6
선택할 경우 일매출 으로 누적매출은 마지막으로 결제된 월 일을0 , 6 5
기준으로 출력합니다 최대 최소로 팔린 메뉴들은 전체날짜가. /
기준이므로 상관없이 출력됩니다.
월 일 기준 매출6 4
월 일로 날짜를 변경하고 안심스테이크 개 원 결제6 5 20 : 420000 ->
일 매출 원 가장 많이 팔린 메뉴는 안심스테이크로420000 ,
바뀌었으며 알리오올리오 안심스테이크 로 누적1600000( )+420000( )
매출이 변경되었습니다.
각각 월 일 월 일 기준으로 매출을 확인한 결과6 1 , 6 6 .
오픈하지 않은 날짜를 보려고 했을 때 메시지를 출력하여 을Exception
처리하였습니다. (⑳ "NOTICE : The restaurant didn't open in
choosed day")
다음은 탭입니다 탭에서 를23. Employee . Employee Employee
새로이 추가할 수 있고 위에서 언급한대로 만 추가해줄 수Supervisor
있습니다.( 과 동일)⑧ 버튼을 누르면 새로운 프레임이 생성되며Employ
이름과 직급을 부여할 수 있습니다 이름은 기존의 이름과 동일할 수.
없도록 막고 메시지를 출력하여 Exception(⑰과 동일)을 처리하였습니다.
박수진 생성 불가 이름 동일1) ->
박지성 생성 및 조회2,3) (3573, Supervisor)
박지성 로그인 시도 및 성공4,5)
마지막 메뉴 패널은 번에서 이미 해보았기에 생략합니다24. 12 .
에 알리오올리오부터의 예제가 실제 에 적용된Oracle Database DB
스크린샷을 확인합니다.
이기찬 회원이 에 출력됨customer table .
알리오올리오가 에 생성menutable
알리오올리오 개 안심스테이크 개 총 개의 결제가7 , 20 27 sales
테이블에 생성되었으며 를 통해 결제날짜 확인sales_date .
박수진 의 실적과 생성된 박지성 확인‘ ’ Supervisor ‘ ’ Supervisor .