성장, 그리고 노력

부족하더라도 어제보다 더 잘해지자. 노력은 절대 배신하지 않는다.

Side-Project

[JAVA] 학교 증명서 출력 자판기

제이콥(JACOB) 2019. 12. 8. 21:53


![JAVA_Tamplate_Machine](https://user-images.githubusercontent.com/42884032/63226773-55be0c00-c219-11e9-90a6-75ef29f691bb.jpg)




## 소개말
  JAVA라는 언어를 1달간 처음 배우고 나서 만들어본 미니 프로젝트입니다. 자바 이외에 다른 언어는 쓰이지 않았으며, 5명의 팀원이 참여했지만, 여러 사정으로 인해 90% 이상을 직접 만들었습니다. 실제 자판기라는 틀을 만드는 데에는 하드 코딩하여 6시간 정도 걸렸지만, 오류 및 예외 그리고 관리자 기능 추가 등에 5일 가량 소요되었습니다. 프로젝트 기간은 1주일 이었습니다. 
  가장 힘들었던 점은 장바구니와 결제 기능을 연동시키는 부분 테스트였습니다. 약 10가지의 경우의 수가 나왔고, 나중에는 모두 해결했습니다. 


## 시나리오
 우리가 만들고자 하는 시스템은 2010년에 설립된 최대 정원이 50명인 비트 대학에 다니는 학생이 출력하고자 하는 증명서를 상시 제공하는 출력 자판기이다. 자판기를 사용하려면 로그인해야 하고 업무를 다 마치면 초기화면으로 돌아간다. 또, 로그아웃을 통해 다른 사용자로 로그인이 가능하다. 자판기는 총 5가지의 증명서를 제공 할 수 있으며 한번에 오직 한 학생에게  종류에 상관없이 최대 5장을 제공한다. 
 증명서는 서로 다른 가격을 가지고 있고, 자판기는 증명서 선택 시 가격을 고객에게 보여준다.  장바구니에 상품이 있는 경우에만 결제가 가능하고(장바구니는 복수의 증명서를 결제할 수 있도록 만든거, 즉 장바구니에 상품이 있건없건 원하는 증명서를 1장만 카드결제가 가능함) 이 자판기는 오직 카드결제만 가능하다. 자판기는 최대 50장의 용지를 가지고 있으며 용지가 없으면 출력이 불가하다. 단, 용지가 없어도 이메일 전송은 가능하다. 자판기는 전원이 켜지는 순간부터 30초에 1%로 고장확률이 늘어서 종종 관리자가 자판기의 총 작동 시간을 확인해 수리기사를 불러야 한다.
 학생이 원하는 증명서를 얻기 위해서 로그인을 해야하고 학생증이나 학번, 주민번호 입력으로 로그인이 가능하다. 신입생의 경우 회원가입을 통해 학번과 생년월일로 로그인이 가능하다. 본인 인증이 완료되면 학생이 원하는 증명서 버튼을 선택하고 결제 또는 장바구니에 담는다. 장바구니는 종류에 상관없이 5개까지 담을 수 있고 선택한 증명서는 카드 결제한 후 출력 또는 이메일 전송이 가능하다. 출력 또는 이메일 전송 후 초기화면으로 돌아간다.  
 관리자는 전원을 껐다 킬 수 있고 관리자모드로 로그인하여 잔여 용지를 관리한다. 관리자모드를 로그아웃하면 운영모드로 돌아간다.




## Class Diagram
![자판기](https://user-images.githubusercontent.com/42884032/63226369-c06c4900-c213-11e9-8466-ddd3139d28f4.png)




## 메서드 오버로딩(Method Overloading)
![메서드 오버로딩](https://user-images.githubusercontent.com/42884032/63226397-06c1a800-c214-11e9-903a-8b2f868ea787.png)




## 자바에서 시간 출력하기
![시간](https://user-images.githubusercontent.com/42884032/63226414-28bb2a80-c214-11e9-8341-ad1e09edfc9a.png)




## 정규 표현식(Regular Expression)
![rx](https://user-images.githubusercontent.com/42884032/63226423-47212600-c214-11e9-8ae5-470b979f5fcb.png)






# 기능 세부 설명




## 1.로그인 기능

+(전제조건 추가 : 대학의 최대 정원은 50명이다)
+(전제조건 추가 : 대학은 2010년에 설립되었다.)


1. 대학 학생만, [학번]과 [생년월일]로 로그인 가능
2. 대학 신입생의 경우 회원가입을 통해 [학번]과 [생년월일]로 로그인 가능
3. 대학 학생증이 있다면, 학생증으로 로그인 가능(단, 학생증을 인식하는 기계의 노후화로 인식률이 높은 편은 아님)
4. 로그아웃 기능 - 자판기를 재부팅하지 않아도 다른 사용자로 로그인 가능







## 2.회원 가입

+(전제조건 추가 : 학교 예산의 부족으로 최대 100명까지만 자판기 DB서버에 저장이 가능하다.)


1. 이름, 학번, 생년월일, 학년, 전공 입력하면 회원 가입이 가능하며, 학생증이 없어도 자판기를 이용할 수 있다.
2. 이름은 국문 혹은 영문으로 구성되어 있다.
3. 학번은 9자리이다.
4. 생년월일은 앞 6자리다
5. 학년은 숫자로만 구성되며, (1~4, 석사: 5, 박사:6 구분)
6. 전공명은 국문 혹은 영문으로 구성되어 있다.
7. 동일한 학번으로는 가입이 불가능 하다.







## 3.장바구니

1. 최대 5개까지 상품을 담을 수 있는 장바구니
2. 장바구니에 상품이 있는 경우만 [장바구니 일괄결제] 기능이 활성화됨. [증명서 목록 메뉴]와 [결제 메뉴] 목록에서 확인 및 결제 가능
3. 장바구니에 상품이 담기면 [결제 메뉴]에서 바로 확인가능(0/5)
4. 자판기의 용지가 20% 미만이 되면, 시스템 안정을 위해 장바구니 및 장바구니 결제 메뉴를 사용할 수 없음.







## 4.결제 기능

1-1 장바구니에 상품이 없고, 장바구니 일괄 결제 후, 종이 출력하는 경우

1-2 장바구니에 상품이 없고, 장바구니 일괄 결제 후 이메일 전송하는 경우

1-3 장바구니에 상품이 있고, 장바구니 일괄 결제 후 종이 출력하는 경우

1-4 장바구니에 상품이 있고, 장바구니 일괄 결제 후 이메일 전송을 하는 경우

1-5 장바구니에 상품이 있고, 장바구니 상품은 있지만, 다른 상품을 결제 후 종이를 출력하는 경우

1-6 장바구니에 상품이 있고, 장바구니 상품은 있지만, 다른 상품을 결제 후 이메일을 전송하는 경우

1-7 장바구니에 상품이 있고, 장바구니 일괄 결제 후, 종이를 출력한 경우의 용지 수의 변화

1-8 장바구니에 상품이 있고, 장바구니 상품은 있지만, 다른 상품을 결제 후 종이를 출력하는 경우의 용지 수의 변화

1-9 장바구니에 상품이 없고, 종이를 출력하는 경우 용지 수의 변화

1-10 용지가 20% 미만일 때, 이메일 전송을 하는 경우

1-11 용지가 없을때, 이메일 전송을 하는 경우



2. [결제 메뉴]에 카드 결제 옆에 선택한 증명서의 가격이 출력됨








## 5.출력/전송 기능

+(전제조건 추가: 용지는 일반 용지가 아닌, 학교의 직인이 찍힌 특수 용지로, 학생이 용지를 새로 넣을 수 없다.) 

+(전제조건 추가: 학교 예산 부족으로 최대 50장까지만 종이를 넣을 수 있는 자판기다.)


1. 이메일 전송기능(정규표현식을 통한 이메일 체크) - 장바구니의 상품을 일괄 결제하는 경우와 단일 상품 결제 하는 경우가 다르게 출력, 용지가 0이 되더라도, 이메일 전송은 가능함.

2. 종이 출력기능(Default: 50장부터, 종이 출력한 만큼 용지가 감소되며, 전체 용지의 20% 이하가 되면 "용지 부족" 멘트가 출력, 0이 되면 출력불가)







## 6.관리자 기능

+(전제조건 추가: 24시간 작동가능한 자판기이지만, 종종 기기를 시스템 정리를 하지 않으면 고장확률이 높다는 제조사의 소견이 있어, 관리자는 중간에 자판기의 총 작동시간을 체크하고 수리기사를 불러 조치를 취해야함.)

+(전제조건 추가: 대학 자판기 관리자는 돈은 많지만 무능한 사람으로 자판기에 대해서 [전원 켜기] / [상태 체크] 기능 사용 이외에는 무뇌아.)


1. 관리자 명령어를 통해 [관리자 모드]로 진입

2. 잔여 용지 확인 가능(충분 / 부족(20% 이하) / 용지없음)

3. 기기 작동시간(초) 확인 가능

4. 용지 회사에 용지 추가 요청기능(용지 한장당 100원의 비용이 익월 결제일에 종이회사로부터 청구됨)

5. 관리자는 수리회사를 불러 고장률을 제거할 수 있음(고장률 1%당 100원의 비용이 익월 결제일에 수리회사로부터 청구됨)

6. 관리자 로그아웃 기능

7. 관리자는 자판기의 전원을 off할 수 있다.

8. 관리자는 모든 회원 정보를 열람할 수 있다.







## 7.자기 관리 기능

1. 자판기는 전원on 후부터 30초에 1%로 고장확률을 증가하는 것으로 자동 계산(제조사의 계산이지만, 실제 고장확률이 고장을 의미하지는 않음)








## 참고 링크(네이버 블로그)

Naver Blog: https://blog.naver.com/ajdkfl6445/221475646256" target="_blank">네이버 블로그로 이동 

Source code: https://github.com/JungKyuHyun/school-certification-java-project" target="_blank">git hub repository

반응형