Skip to content

2026-Database-Gamerbase/EZPC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

230 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎮EZPC🖥 - PC방 통합 관리 시스템 프로젝트

2026-1 데이터베이스 과목을 수강하며 진행한 프로젝트입니다. HeidiSQL과 MariaDB를 이용해 JDBC로 PC방 통합 관리 시스템 프로젝트를 진행했습니다

💁‍♂️ 프로젝트 팀원

박시현 이홍연 장은서 천하진

🚀 시작하기

1. 프로젝트 소스 파일을 다운 받아주세요

  • 1.1 빌드 파일로 실행하기

    • 빌드 파일 "ezpc_final.jar"을 다운받아주세요. (IP가 시연자 컴퓨터로 하드코딩되어있음)
    • jar 파일이 다운받아진 경로로 이동 -> 우클릭 -> 터미널에서 실행 -> java -jar ezpc_final.jar 입력
  • 1.2 이클립스로 실행하기

    • 깃허브에서 프로젝트 소스 파일을 다운하고 이클립스로 열어주세요
    • 2번 데이터베이스 설정으로 이어집니다

2. 데이터베이스 설정

HeidiSQL에 접속한 후, 프로젝트 폴더의 src/sql 경로의 쿼리를 HeidiSQL에 아래 순서대로 실행합니다.

순서 파일 경로
1 DB 생성 쿼리 src/sql/DB 생성 쿼리.sql
2 충전 프로시저 쿼리 src/sql/충전_프로시저.sql
3 로그인 트리거 쿼리 src/sql/로그인_트리거.sql
4 리뷰 트리거 쿼리 src/sql/리뷰_트리거_3개.sql
5 주문 트리거 쿼리 src/sql/주문_트리거.sql
6 권한 쿼리 src/sql/권한_쿼리.sql

3. 더미 데이터 생성

  1. Python이 없는 경우 먼저 설치합니다.
  2. 터미널에서 다음 라이브러리들을 설치합니다 (가짜 데이터 생성 관련 라이브러리)
   pip install faker pandas pymysql
  1. src/sql 경로의 generate_dummy_data 파일의 50번째 줄 password 부분을 본인 DB 비밀번호로 수정합니다.
DB_CONFIG = {
    'host'      : 'localhost',
    'port'      : 3306,
    'user'      : 'root',       # ← MariaDB 계정
    'password'  : '',           # ← 비밀번호
    'database'  : 'EZPC',
    'charset'   : 'utf8mb4',
    'autocommit': False,
}
  1. 해당 파일이 위치한 경로에서 다음 명령어를 실행합니다.
   python generate_dummy_data.py
  1. EZPC DB에 더미데이터가 생성됐는지 확인합니다

4. DB 연결 설정

src/db/DatabaseConnector.java를 열어 URL의 IP주소를 본인 환경에 맞게 수정합니다.

private static final String URL = "jdbc:mysql://IP주소/EZPC";

5. 실행

src/Main.java를 실행합니다.


📝 규칙

커밋 컨벤션

커밋 / PR에 공통 적용되며, 작업 구분의 기본 틀입니다. 전체 소문자 작성을 원칙으로 합니다.

name description
feat 새로운 기능 추가 또는 기존 기능의 의미 있는 확장
fix 버그, 오류, 잘못된 동작 수정
docs 문서만 변경 (코드 동작 변화 없음)
refactor 외부 동작은 유지한 채 내부 구조 개선
test 테스트 코드 추가 또는 테스트 관련 변경
chore 기능과 무관한 작업 또는 설정·운영 정리
ci CI 관련 작업
build 빌드 및 배포 설정
perf 성능 개선

EZPC 전체 동작 흐름


1. DB 계정 구조

계정 권한 사용 시점
ezpc_auth pc_member SELECT만 로그인 화면 — 인증 전용, 즉시 해제
ezpc_user 사용자 업무 테이블 + 프로시저 실행 로그인 성공 후 — UserController 전체 생애
ezpc_owner EZPC.* ALL 로그인 성공 후 — OwnerController 전체 생애

계정 생성 쿼리: db 권한 설정 쿼리.sql (HeidiSQL에서 root로 실행)


2. 앱 시작

Main.java
  └─ SwingUtilities.invokeLater()
       └─ new LoginController()
            ├─ DatabaseConnector.getAuthConnection()  →  ezpc_auth 연결
            └─ LoginView 표시

3. 로그인 처리

LoginView — 로그인 버튼 클릭
  └─ LoginController.handleLogin()
       ├─ PC_MemberService.login(id, pw)
       │    └─ PC_MemberDAOImpl.findByID()
       │         └─ ezpc_auth 연결로 pc_member SELECT
       │
       ├─ 실패
       │    └─ LoginView.setStatusMessage("아이디 또는 비밀번호가 올바르지 않습니다.")
       │
       └─ 성공
            ├─ authConn.close()                              ← 인증 전용 연결 즉시 해제
            ├─ DatabaseConnector.getConnection(memberType)   ← 역할별 연결 새로 생성
            │
            ├─ memberType = "owner"  →  new OwnerController(ownerConn, member).start()
            └─ memberType = "user"   →  new UserController(userConn, member).start()

4. 회원가입 처리

LoginView — 회원가입 버튼 클릭
  └─ LoginController.handleSignUp()
       └─ SignUpView 표시
            └─ 회원가입 버튼 클릭
                 ├─ 비밀번호 확인 불일치 → SignUpView.setStatusMessage("비밀번호 불일치")
                 └─ 일치
                      └─ PC_MemberService.signUp(id, pw, name)
                           ├─ 중복 ID 검사 (findByID)
                           └─ insertMember()  →  member_type = "user" 고정, grade = "bronze"

회원가입은 ezpc_auth 연결을 재사용하므로 별도 DB 연결 불필요
(단, ezpc_authpc_member INSERT 권한이 없다면 회원가입 전용 연결을 별도로 사용)


5. 사용자 흐름 (ezpc_user 계정)

UserController(userConn, member)
  └─ 모든 DAO를 userConn으로 생성

5-1. 지점 선택

UserBranchSelectView 표시
  └─ 지점 버튼 클릭
       └─ PcCafeService.getAllPcCafes()
            └─ PcCafeDAOImpl.findAll()  →  pc_cafe SELECT

5-2. 좌석 선택

UserSeatSelectView 표시
  ├─ CustomerService.getCustomersInPcCafe(pcCafeId)  →  현재 이용 중인 좌석 목록
  └─ 좌석 선택
       └─ CustomerService.checkIn(customer)
            ├─ CustomerDAOImpl.insertCustomer()   →  customer INSERT
            └─ LogDAOImpl.insertLog()             →  use_log INSERT (login_time 기록)

5-3. 이용 중 (UserMainDashboardView)

이용권 충전

충전 버튼 클릭
  └─ ChargeService.recordCharge(charge)
       └─ ChargeDAOImpl.chargeByCustomer()
            └─ CALL charge_by_customer(pc_cafe_id, seat_num, member_id, ticket_time)
                 ├─ charge INSERT                        (충전 기록)
                 ├─ customer.remain_time UPDATE          (현재 손님 잔여 시간)
                 ├─ pc_member.total_payment_amount UPDATE (누적 결제 금액, 회원만)
                 └─ pc_member.grade_type UPDATE          (등급 재산정, 회원만)

음식 주문

음식주문 버튼 클릭
  └─ UserFoodOrderView 표시
       ├─ FoodService.getAllFoods()             →  음식 메뉴 조회
       ├─ StockService.getStock(pcCafeId)       →  재고 확인
       └─ OrderService.placeOrder(order)
            ├─ EventScheduleDAOImpl.findCurrentOrderPaymentRate()  →  이벤트 할인율 조회
            ├─ food_order INSERT                (주문 기록)
            └─ StockDAOImpl.decreaseStock()     (재고 차감)

리뷰 작성

리뷰 버튼 클릭  (회원만 가능)
  └─ UserReviewManageView 표시
       └─ ReviewService.addReview(review)
            └─ ReviewDAOImpl.insert()           →  review INSERT

로그아웃 (퇴실)

로그아웃 버튼 클릭
  └─ CustomerService.checkOut(customer)         ← 트랜잭션
       ├─ LogDAOImpl.updateLogoutTime()         →  use_log.logout_time UPDATE
       ├─ LogDAOImpl.findLatestLogoutLog()      →  로그인/아웃 시간 조회
       ├─ 사용 시간 계산 (logout - login, 분 단위)
       ├─ PC_MemberDAOImpl.updateRemainTimeAfterUse()  →  remain_time 차감 (회원만)
       └─ CustomerDAOImpl.deleteCustomer()      →  customer DELETE

6. 운영자 흐름 (ezpc_owner 계정)

OwnerController(ownerConn, member)
  └─ 모든 DAO를 ownerConn으로 생성
       └─ OwnerMainFrameView 표시  (탭 5개)
서비스 주요 기능
좌석 모니터링 CustomerService 지점별 현재 이용 중인 손님 조회
매출 통계 SalesReportService 월별·이벤트별·피크타임별 매출 조회
음식 재고 StockService 지점별 재고 조회 및 수정
직원 관리 EmployeeService 직원 추가·수정·삭제
회원 관리 PC_MemberService user 타입 회원 조회 (owner 계정 제외)

7. 계층별 역할 요약

View        — 화면 표시 + 버튼 리스너 노출만 담당, 비즈니스 로직 없음
Controller  — View와 Service 연결, 화면 전환, DB 연결 생성·관리
Service     — 비즈니스 로직 처리
DAOImpl     — SQL 실행, 외부에서 주입받은 conn만 사용

8. DatabaseConnector 사용 규칙

  • DatabaseConnector를 직접 호출하는 곳은 LoginController 하나뿐
  • 모든 DAOImpl은 생성자로 주입받은 conn만 사용 (내부에서 직접 연결 생성 금지)
  • 역할별 conn은 Controller 생성 시 한 번만 만들어지고 해당 Controller 생애 동안 유지
// LoginController에서만 호출
Connection authConn  = DatabaseConnector.getAuthConnection();           // 로그인용
Connection roleConn  = DatabaseConnector.getConnection(memberType);     // 역할별

// Controller 내부에서 DAO 생성
EmployeeDAO employeeDao = new EmployeeDAOImpl(roleConn);
GradeDAO    gradeDao    = new GradeDAOImpl(roleConn);
TicketDAO   ticketDao   = new TicketDAOImpl(roleConn);
// ... 나머지 동일

About

2026-1 데이터베이스 과목 PC방 통합 관리 시스템 프로젝트입니다

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors