Skip to content

Latest commit

Β 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ManagementSystem

Java와 MySQL을 ν™œμš©ν•œ CLI 기반 학생 및 직원 정보 관리 μ‹œμŠ€ν…œ

πŸ“‹ ν”„λ‘œμ νŠΈ μ†Œκ°œ

ManagementSystem은 학생과 직원(μ •κ·œμ§/μ‹œκ°„μ œ)의 정보λ₯Ό 효율적으둜 관리할 수 μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€ 기반 관리 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. λͺ…령쀄 μΈν„°νŽ˜μ΄μŠ€(CLI)λ₯Ό 톡해 직관적인 μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•˜λ©°, JDBCλ₯Ό ν™œμš©ν•œ λ°μ΄ν„°λ² μ΄μŠ€ 연동과 DAO νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬ ꡬ쑰적으둜 μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” νŠΉμ§•

  • MVC νŒ¨ν„΄ 기반 μ•„ν‚€ν…μ²˜: Controller, Model(DAO), View의 λͺ…ν™•ν•œ μ—­ν•  뢄리
  • DAO νŒ¨ν„΄ 적용: λ°μ΄ν„°λ² μ΄μŠ€ 둜직과 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 μ™„μ „ν•œ 뢄리
  • Singleton νŒ¨ν„΄: 효율적인 λ¦¬μ†ŒμŠ€ 관리λ₯Ό μœ„ν•œ 싱글톀 κ΅¬ν˜„
  • JDBC 기반 DB 연동: MySQL λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μ•ˆμ •μ μΈ μ—°κ²°
  • μ‹€μ‹œκ°„ 데이터 처리: μž…λ ₯ μ‹œ μžλ™μœΌλ‘œ 총점, 평균, λ“±κΈ‰ 계산

πŸš€ μ£Όμš” κΈ°λŠ₯

학생 관리

  • βœ… 학생 정보 등둝 (ν•™λ²ˆ, 이름, κ³Όλͺ©λ³„ 점수)
  • βœ… 학생 정보 μˆ˜μ • 및 μ‚­μ œ
  • βœ… 전체 학생 쑰회 (μ΄λ¦„μˆœ/ν•™λ²ˆμˆœ/μ„±μ μˆœ μ •λ ¬)
  • βœ… νŠΉμ • 학생 검색
  • βœ… μžλ™ 성적 계산 (총점, 평균, 학점)

직원 관리 (μ˜ˆμ •)

  • μ •κ·œμ§ μ§μ›μ˜ μ„±κ³Ό 평가 및 κΈ‰μ—¬ 관리
  • μ‹œκ°„μ œ μ§μ›μ˜ μ‹œκΈ‰ 기반 κΈ‰μ—¬ μžλ™ 계산

πŸ›  기술 μŠ€νƒ

  • Language: Java 17 (Amazon Corretto)
  • Database: MySQL 8.0.x
  • JDBC Driver: MySQL Connector/J 8.0.22
  • Library: Lombok 1.18.34
  • IDE: IntelliJ IDEA

πŸ“¦ μ„€μΉ˜ 및 μ‹€ν–‰

1. μš”κ΅¬ 사항

  • Java JDK 17 이상
  • MySQL 8.0.x 이상
  • MySQL Connector/J 8.0.22

2. ν”„λ‘œμ νŠΈ 클둠

git clone https://github.com/geeunii/ManagementSystem.git
cd ManagementSystem

3. λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

MySQL λ°μ΄ν„°λ² μ΄μŠ€ 및 μ‚¬μš©μž 생성

-- λ°μ΄ν„°λ² μ΄μŠ€ 생성
CREATE DATABASE ManagementSystem;

-- μ‚¬μš©μž 생성 및 κΆŒν•œ λΆ€μ—¬
CREATE USER 'MSAdmin'@'localhost' IDENTIFIED BY 'MSAdmin';
GRANT ALL PRIVILEGES ON ManagementSystem.* TO 'MSAdmin'@'localhost';
FLUSH PRIVILEGES;

ν…Œμ΄λΈ” 생성

USE ManagementSystem;

-- 학생 ν…Œμ΄λΈ”
CREATE TABLE Student (
    sno VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    korean INT CHECK(korean >= 0 AND korean <= 100),
    english INT CHECK(english >= 0 AND english <= 100),
    math INT CHECK(math >= 0 AND math <= 100),
    science INT CHECK(science >= 0 AND science <= 100)
);

-- μ •κ·œμ§ 직원 ν…Œμ΄λΈ” (ν–₯ν›„ κ΅¬ν˜„ μ˜ˆμ •)
CREATE TABLE Fulltime (
    empno VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    result INT,
    basicsalary INT
);

-- μ‹œκ°„μ œ 직원 ν…Œμ΄λΈ” (ν–₯ν›„ κ΅¬ν˜„ μ˜ˆμ •)
CREATE TABLE Parttime (
    empno VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    hourwage INT,
    workhour INT
);

4. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ„€μ •

util/dbinfo.properties 파일이 이미 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/ManagementSystem?serverTimezone=Asia/Seoul
username = MSAdmin
password = MSAdmin

λ‹€λ₯Έ 섀정을 μ‚¬μš©ν•˜λ €λ©΄ 이 νŒŒμΌμ„ μˆ˜μ •ν•˜μ„Έμš”.

5. ν”„λ‘œμ νŠΈ 컴파일 및 μ‹€ν–‰

# 컴파일
javac -encoding UTF-8 -d out/production/ManagementSystem \
  -cp ".:lib/mysql-connector-java-8.0.22.jar:lib/lombok-1.18.34.jar" \
  $(find . -name "*.java")

# μ‹€ν–‰
java -cp "out/production/ManagementSystem:lib/mysql-connector-java-8.0.22.jar" \
  view.MainMenu

πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

ManagementSystem/
β”œβ”€β”€ controller/              # 컨트둀러 계측 (λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리)
β”‚   β”œβ”€β”€ Controller.java      # 컨트둀러 μΈν„°νŽ˜μ΄μŠ€
β”‚   └── ControllerImpl.java  # 컨트둀러 κ΅¬ν˜„μ²΄ (Singleton)
β”‚
β”œβ”€β”€ model/                   # λͺ¨λΈ 계측 (데이터 μ ‘κ·Ό)
β”‚   β”œβ”€β”€ DBCommon.java        # 곡톡 DAO μΈν„°νŽ˜μ΄μŠ€
β”‚   β”œβ”€β”€ Student.java         # 학생 κ΄€λ ¨ μΈν„°νŽ˜μ΄μŠ€
β”‚   └── StudentDAO.java      # 학생 DAO κ΅¬ν˜„μ²΄ (Singleton)
β”‚
β”œβ”€β”€ vo/                      # Value Object (데이터 전솑 객체)
β”‚   β”œβ”€β”€ PersonVO.java        # 좔상 λΆ€λͺ¨ 클래슀
β”‚   └── StudentVO.java       # 학생 데이터 객체
β”‚
β”œβ”€β”€ view/                    # λ·° 계측 (μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€)
β”‚   └── MainMenu.java        # CLI 메뉴 μ‹œμŠ€ν…œ
β”‚
β”œβ”€β”€ util/                    # μœ ν‹Έλ¦¬ν‹°
β”‚   β”œβ”€β”€ DBUtil.java          # λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μœ ν‹Έλ¦¬ν‹°
β”‚   └── dbinfo.properties    # DB μ„€μ • 파일
β”‚
β”œβ”€β”€ LICENSE                  # MIT λΌμ΄μ„ μŠ€
└── README.md               # ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸ’‘ μ‚¬μš© μ˜ˆμ‹œ

메인 메뉴

------------------------------
-       λ§€λ‹ˆμ§€λ¨ΌνŠΈ μ‹œμŠ€ν…œ       -
------------------------------
1. 학생관리		2. 직원관리
3. μ•Œλ°”κ΄€λ¦¬		4. μ‹œμŠ€ν…œ μ’…λ£Œ
------------------------------
μž…λ ₯: 1

학생 관리 메뉴

------------------------------
-       학생 관리 μ‹œμŠ€ν…œ       -
------------------------------
1. 학생 μž…λ ₯		2. 학생 μ‚­μ œ
3. 학생 μˆ˜μ •		4. 학생 λͺ…단보기
5. 학생 검색		6. μ’…λ£Œ
------------------------------
μž…λ ₯: 1

학생 정보 μž…λ ₯

------------------------------
ν•™λ²ˆ: 2024001
이름: 홍길동
κ΅­μ–΄ 점수: 85
μ˜μ–΄ 점수: 90
μˆ˜ν•™ 점수: 88
κ³Όν•™ 점수: 92
------------------------------

학생 λͺ…단 쑰회 (μ„±μ μˆœ)

ν•™λ²ˆ        이름        κ΅­μ–΄        μ˜μ–΄        μˆ˜ν•™        κ³Όν•™        합계        평균        λ“±κΈ‰
------------------------------------------------------------------------------------------------
2024001    홍길동       85         90         88         92         355        88.8       B

πŸ” 핡심 섀계 νŒ¨ν„΄

1. DAO (Data Access Object) νŒ¨ν„΄

λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό λ‘œμ§μ„ λ³„λ„μ˜ 객체둜 λΆ„λ¦¬ν•˜μ—¬ 관심사λ₯Ό λͺ…ν™•νžˆ κ΅¬λΆ„ν–ˆμŠ΅λ‹ˆλ‹€.

// StudentDAO - λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Όλ§Œ λ‹΄λ‹Ή
public class StudentDAO implements Student {
    private static StudentDAO dao;
    
    public static StudentDAO getInstance() {
        if (dao == null) dao = new StudentDAO();
        return dao;
    }
    
    @Override
    public void input(PersonVO personVO) {
        // DB INSERT 둜직
    }
}

μž₯점:

  • κ΄€μ‹¬μ‚¬μ˜ 뢄리 (Separation of Concerns)
  • μœ μ§€λ³΄μˆ˜ μš©μ΄μ„± (DB λ³€κ²½ μ‹œ DAO만 μˆ˜μ •)
  • μž¬μ‚¬μš©μ„± 증가 (μ—¬λŸ¬ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ λ™μΌν•œ DAO 호좜 κ°€λŠ₯)

2. Singleton νŒ¨ν„΄

λ¦¬μ†ŒμŠ€λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ DAO와 Controller에 싱글톀 νŒ¨ν„΄μ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

private static ControllerImpl service;

public static ControllerImpl getInstance() {
    if (service == null) service = new ControllerImpl();
    return service;
}

3. Template Method νŒ¨ν„΄

곡톡 λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ DBCommon μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•˜μ—¬ 일관성을 μœ μ§€ν–ˆμŠ΅λ‹ˆλ‹€.


🎯 ν•™μŠ΅ 포인트

이 ν”„λ‘œμ νŠΈλ₯Ό 톡해 λ‹€μŒμ„ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€:

  1. JDBC ν”„λ‘œκ·Έλž˜λ°: Connection, PreparedStatement, ResultSet ν™œμš©
  2. λ°μ΄ν„°λ² μ΄μŠ€ 섀계: μ •κ·œν™”, μ œμ•½μ‘°κ±΄, ν…Œμ΄λΈ” 관계 μ„€μ •
  3. λ””μžμΈ νŒ¨ν„΄: DAO, Singleton, Template Method νŒ¨ν„΄ 적용
  4. μ˜ˆμ™Έ 처리: try-catch-finallyλ₯Ό ν†΅ν•œ μ•ˆμ „ν•œ λ¦¬μ†ŒμŠ€ 관리
  5. μ½”λ“œ ꡬ쑰화: νŒ¨ν‚€μ§€ 뢄리와 κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜ 섀계
  6. Lombok ν™œμš©: λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ μ½”λ“œ μ΅œμ†Œν™”

πŸ”§ ν–₯ν›„ κ°œμ„  λ°©ν–₯

단기 λͺ©ν‘œ

  • delete() λ©”μ„œλ“œ κ΅¬ν˜„ μ™„λ£Œ
  • totalSearch() μ •λ ¬ κΈ°λŠ₯ μ™„μ„±
  • μ •κ·œμ§/μ‹œκ°„μ œ 직원 관리 κΈ°λŠ₯ κ΅¬ν˜„
  • μž…λ ₯ μœ νš¨μ„± 검증 κ°•ν™”

쀑μž₯κΈ° λͺ©ν‘œ

  • Connection Pool λ„μž… (HikariCP)
  • Prepared Statement μž¬μ‚¬μš© μ΅œμ ν™”
  • νŠΈλžœμž­μ…˜ 처리 μΆ”κ°€
  • λ‘œκΉ… μ‹œμŠ€ν…œ λ„μž… (Log4j2)
  • GUI 버전 개발 (JavaFX)
  • RESTful API μ„œλ²„λ‘œ ν™•μž₯ (Spring Boot)

🀝 κΈ°μ—¬ 방법

  1. 이 μ €μž₯μ†Œλ₯Ό Fork ν•©λ‹ˆλ‹€
  2. μƒˆλ‘œμš΄ 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€ (git checkout -b feature/AmazingFeature)
  3. 변경사항을 μ»€λ°‹ν•©λ‹ˆλ‹€ (git commit -m 'Add some AmazingFeature')
  4. λΈŒλžœμΉ˜μ— ν‘Έμ‹œν•©λ‹ˆλ‹€ (git push origin feature/AmazingFeature)
  5. Pull Requestλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€

πŸ“ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έκ³ ν•˜μ„Έμš”.


πŸ“š μ°Έκ³  자료


⚠️ μ•Œλ €μ§„ 이슈

  • StudentDAO.delete() λ©”μ„œλ“œκ°€ 아직 κ΅¬ν˜„λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€
  • StudentDAO.totalSearch() μ •λ ¬ 둜직이 μ™„μ„±λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€
  • 점수 μž…λ ₯ μ‹œ λ²”μœ„ 검증이 μž…λ ₯ ν›„μ—λ§Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€

⭐ 이 ν”„λ‘œμ νŠΈκ°€ 도움이 λ˜μ…¨λ‹€λ©΄ Starλ₯Ό λˆŒλŸ¬μ£Όμ„Έμš”! ⭐

About

MVC / CRUD

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages