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
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";- Visual Studio 2019 이상
- SQL Server (Express 포함)
- .NET Framework 4.7.2
-- SQL Server Management Studio에서 실행
CREATE DATABASE WB43;
-- 위 테이블 생성 SQL 실행1. Visual Studio에서 .sln 파일 열기
2. MyDB.cs 연결 정보 수정
3. F5 또는 Ctrl+F5로 실행
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;
}
}특징:
- 출금/입금이 모두 성공해야만 완료
- 하나라도 실패하면 전체 롤백
- 데이터 일관성 보장
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