Skip to content

botato1/BankingSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

은행 계좌 관리 시스템 (Banking System)

C#과 ADO.NET을 활용한 콘솔 기반 은행 계좌 관리 프로그램


📌 프로젝트 소개

SQL Server와 연동된 계좌 관리 시스템으로, CRUD 기능과 트랜잭션 처리를 구현한 학습용 프로젝트입니다.

주요 특징

  • 완전한 CRUD 기능 (Create, Read, Update, Delete)
  • SQL 트랜잭션을 활용한 안전한 계좌이체
  • 객체지향 설계 (Account 클래스, MyDB 클래스 분리)
  • 예외 처리 및 검증 로직

🛠 기술 스택

  • Language: C# .NET Framework 4.7.2
  • Database: SQL Server (ADO.NET)
  • Architecture: 3-Layer (UI, Business Logic, Data Access)

📋 주요 기능

기능 설명
계좌 생성 F1 새로운 계좌 등록 (번호, 이름, 초기 잔액)
계좌 조회 F2 특정 계좌 정보 조회
입금 F3 계좌에 금액 입금
출금 F4 계좌에서 금액 출금 (잔액 검증)
계좌 삭제 F5 계좌 삭제
번호순 정렬 F6 계좌번호 기준 정렬 조회
이름순 정렬 F7 이름 기준 정렬 조회
계좌이체 F8 계좌 간 송금 (트랜잭션 처리)

🏗 프로젝트 구조

BankingSystem/
├── Account.cs          # 계좌 데이터 클래스
├── MyDB.cs             # 데이터베이스 연동 클래스
├── Program.cs          # 메인 프로그램
├── MainUi.cs           # UI 제어 클래스
├── Control.cs          # 비즈니스 로직
├── Input.cs            # 입력 처리
├── Print.cs            # 출력 처리
└── README.md

💾 데이터베이스 설정

테이블 생성 SQL

CREATE DATABASE WB43;
GO

USE WB43;
GO

CREATE TABLE Account (
    number INT PRIMARY KEY,
    name NVARCHAR(50) NOT NULL,
    balance INT NOT NULL DEFAULT 0,
    created_date DATETIME NOT NULL DEFAULT GETDATE()
);

연결 정보 수정

MyDB.cs 파일에서 본인 환경에 맞게 수정:

private const string SERVER_NAME = "YOUR_SERVER_NAME";
private const string DB_NAME = "WB43";
private const string USER_ID = "YOUR_USER_ID";
private const string USER_PW = "YOUR_PASSWORD";

🚀 실행 방법

1. 사전 요구사항

  • Visual Studio 2019 이상
  • SQL Server (Express 포함)
  • .NET Framework 4.7.2

2. 데이터베이스 설정

-- SQL Server Management Studio에서 실행
CREATE DATABASE WB43;
-- 위 테이블 생성 SQL 실행

3. 프로젝트 실행

1. Visual Studio에서 .sln 파일 열기
2. MyDB.cs 연결 정보 수정
3. F5 또는 Ctrl+F5로 실행

🎯 핵심 기능 구현

1. 트랜잭션 처리 (계좌이체)

public bool AccountTransMoney(int input_number, int output_number, int money)
{
    SqlTransaction transaction = scon.BeginTransaction();
    try
    { 
        // 출금 계좌 처리
        string sql = $"update Account set balance = balance - {money} 
                       where number = {output_number} and balance > {money};";
        SqlCommand cmd1 = new SqlCommand(sql, scon, transaction);

        // 입금 계좌 처리
        sql = $"update Account set balance = balance + {money} 
                where number = {input_number};";
        SqlCommand cmd2 = new SqlCommand(sql, scon, transaction);

        if (cmd1.ExecuteNonQuery() != 1) throw new Exception("출금 실패");
        if (cmd2.ExecuteNonQuery() != 1) throw new Exception("입금 실패");

        transaction.Commit(); // 성공 시 커밋
        return true;
    }
    catch (Exception ex)
    {
        transaction.Rollback(); // 실패 시 롤백
        return false;
    }
}

특징:

  • 출금/입금이 모두 성공해야만 완료
  • 하나라도 실패하면 전체 롤백
  • 데이터 일관성 보장

2. 입출금 검증

public void InputMoney(int money)
{
    if (money <= 0)
        throw new Exception("잘못된 금액이 전달됨");
    Balance = Balance + money;
}

public void OutputMoney(int money)
{
    if (money <= 0)
        throw new Exception("잘못된 금액이 전달됨");
    if (Balance < money)
        throw new Exception("잔액이 부족합니다.");
    Balance = Balance - money;
}

📝 학습 내용

배운 기술

  • C# 클래스 설계 및 OOP 개념
  • ADO.NET을 통한 데이터베이스 연동
  • SQL CRUD 쿼리 작성
  • 트랜잭션 처리 (Commit/Rollback)
  • 예외 처리 및 검증 로직
  • 3-Layer 아키텍처 구현

기술적 도전

  • 트랜잭션을 활용한 안전한 계좌이체 구현
  • SQL Injection 방지 (향후 개선 필요)
  • 데이터베이스 연결 관리

🔧 향후 개선 사항

  • SQL Injection 방지 (Parameterized Query 사용)
  • 로그인 및 인증 시스템 추가
  • 거래 내역 테이블 추가
  • WinForm GUI로 전환
  • 단위 테스트 작성

📄 라이선스

학습 목적으로 제작된 프로젝트입니다.



Made with C# & SQL Server

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages