[C++] 윤성우 열혈 - OOP 단계별 프로젝트 01단계 (C 언어 스타일)

Kim Dongil·2022년 12월 5일
0

C++

목록 보기
5/23

우리가 구현하려고 하는 것은 '은행계좌 관리 프로그램' 이다.
프로젝트 01단계에서는 C 스타일로 구현하는 것을 목표로 한다.
구현 할 기능은 다음과 같다.

  • 기능 1. 계좌개설
  • 기능 2. 입 금
  • 기능 3. 출 금
  • 기능 4. 전체고객 잔액조회

그리고 프로그램을 간결하게 하기 위해서 몇가지 가정을 하겠다. 가정의 내용은 다음과 같다.

  • 통장의 계좌번호는 중복되지 아니한다(중복검사 하지 않겠다는 뜻).
  • 입금 및 출금액은 무조건 0보다 크다(입금 및 출금액의 오류검사 않겠다는 뜻).
  • 고객의 계좌정보는 계좌번호, 고객이름, 고객의 잔액, 이렇게 세가지만 저장 및 관리한다.
  • 둘 이상의 고객 정보 저장을 위해서 배열을 사용한다.
  • 계좌번호는 정수의 형태이다.
#include <iostream>

using namespace std;

typedef struct {
	int account_number;
	char name[20];
	int balance;
}Account;

Account arr[100];
int total_num = 0;

void Showmenu();
void Accout_Opening();
void Deposit();
void Withdraw();
void All_account_information();

int main() {
	int input;

	while (1) {
		Showmenu();
		cin >> input;

		switch (input) {
		case 1:
			Accout_Opening();
			break;
		case 2:
			Deposit();
			break;
		case 3:
			Withdraw();
			break;
		case 4:
			All_account_information();
			break;
		case 5:
			cout << "-------프로그램을 종료합니다.-------" << endl;
			return 0;
		}
	}
	return 0;
}

void Showmenu() {
	cout << "-----MENU-----" << endl;
	cout << "1. 계좌개설" << endl;
	cout << "2. 입 금" << endl;
	cout << "3. 출 금" << endl;
	cout << "4. 계좌정보 전체 출력" << endl;
	cout << "5. 프로그램 종료" << endl;
	cout << "선택: ";
}

void Accout_Opening() {
	int account_number;
	char name[20];
	int balance;

	cout << "계좌번호 입력: ";
	cin >> account_number;
	cout << "이름: ";
	cin >> name;
	cout << endl;
	
	arr[total_num].account_number = account_number;
	strcpy(arr[total_num].name, name);
	arr[total_num].balance = 0;

	cout << "계좌번호: " << arr[total_num].account_number << endl;
	cout << "이름: " << arr[total_num].name << endl;
	cout << "잔액: " << arr[total_num].balance << endl;

	total_num++;
}

void Deposit() {
	char name[20];
	int money;
	int i;

	cout << "입금하실 계좌의 이름 입력: ";
	cin >> name;

	for (i = 0; i <= total_num; i++) {
		if (strcmp(arr[i].name, name) == -1) {
			cout << "해당하는 계좌가 없습니다 다시 입력하십시오" << endl;
			return Deposit();
		}
		else if (strcmp(arr[i].name, name) == 0)
			break;
	}

	cout << "입금 금액 입력: ";
	cin >> money;
	arr[i].balance += money;

	cout << "계좌에 있는 총 금액: " << arr[i].balance << endl;
}

void Withdraw() {
	char name[20];
	int money;
	int i;

	cout << "출금하실 계좌의 이름 입력: ";
	cin >> name;

	for (i = 0; i <= total_num; i++) {
		if (strcmp(arr[i].name, name) == -1) {
			cout << "해당하는 계좌가 없습니다 다시 입력하십시오" << endl;
			return Withdraw();
		}
		else if (strcmp(arr[i].name, name) == 0)
			break;
	}

	cout << "출금 금액 입력 : ";
	cin >> money;
	arr[i].balance -= money;

	cout << "계좌에 있는 총 금액: " << arr[i].balance << endl;
}

void All_account_information() {
	for (int i = 0; i < total_num; i++) {
		cout << "계좌번호: " << arr[i].account_number << endl;
		cout << "이름: " << arr[i].name << endl;
		cout << "잔액: " << arr[i].balance << endl << endl;
	}
}

ㅡㅡㅡㅡㅡㅡㅡ

#include <iostream>
#include <cstring>

using namespace std;
const int NAME_LEN=20;

void ShowMenu(void);       // 메뉴출력
void MakeAccount(void);    // 계좌개설을 위한 함수
void DepositMoney(void);       // 입    금
void WithdrawMoney(void);      // 출    금
void ShowAllAccInfo(void);     // 잔액조회

enum {MAKE=1, DEPOSIT, WITHDRAW, INQUIRE, EXIT};

typedef struct 
{
	int accID;      // 계좌번호
	int balance;    // 잔    액
	char cusName[NAME_LEN];   // 고객이름
} Account;

Account accArr[100];   // Account 저장을 위한 배열
int accNum=0;        // 저장된 Account 수

int main(void)
{
	int choice;
	
	while(1)
	{
		ShowMenu();
		cout<<"선택: "; 
		cin>>choice;
		cout<<endl;
		
		switch(choice)
		{
		case MAKE:
			MakeAccount(); 
			break;
		case DEPOSIT:
			DepositMoney(); 
			break;
		case WITHDRAW: 
			WithdrawMoney(); 
			break;
		case INQUIRE:
			ShowAllAccInfo(); 
			break;
		case EXIT:
			return 0;
		default:
			cout<<"Illegal selection.."<<endl;
		}
	}
	return 0;
}

void ShowMenu(void)
{
	cout<<"-----Menu------"<<endl;
	cout<<"1. 계좌개설"<<endl;
	cout<<"2.     금"<<endl;
	cout<<"3.     금"<<endl;
	cout<<"4. 계좌정보 전체 출력"<<endl;
	cout<<"5. 프로그램 종료"<<endl;
}

void MakeAccount(void) 
{
	int id;
	char name[NAME_LEN];
	int balance;
	
	cout<<"[계좌개설]"<<endl;
	cout<<"계좌ID: ";	cin>>id;
	cout<<"이  름: ";	cin>>name;
	cout<<"입금액: ";	cin>>balance;
	cout<<endl;
	
	accArr[accNum].accID=id;
	accArr[accNum].balance=balance;
	strcpy(accArr[accNum].cusName, name);
	accNum++;
}

void DepositMoney(void)
{
	int money;
	int id;
	cout<<"[입    금]"<<endl;
	cout<<"계좌ID: ";	cin>>id;
	cout<<"입금액: ";	cin>>money;
	
	for(int i=0; i<accNum; i++)
	{
		if(accArr[i].accID==id)
		{
			accArr[i].balance+=money;
			cout<<"입금완료"<<endl<<endl;
			return;
		}
	}
	cout<<"유효하지 않은 ID 입니다."<<endl<<endl;
}

void WithdrawMoney(void)
{
	int money;
	int id;
	cout<<"[출    금]"<<endl;
	cout<<"계좌ID: ";	cin>>id;
	cout<<"출금액: ";	cin>>money;
	
	for(int i=0; i<accNum; i++)
	{
		if(accArr[i].accID==id)
		{
			if(accArr[i].balance<money)
			{
				cout<<"잔액부족"<<endl<<endl;
				return;
			}

			accArr[i].balance-=money;
			cout<<"출금완료"<<endl<<endl;
			return;
		}
	}
	cout<<"유효하지 않은 ID 입니다."<<endl<<endl;
}

void ShowAllAccInfo(void)	
{
	for(int i=0; i<accNum; i++)
	{
		cout<<"계좌ID: "<<accArr[i].accID<<endl;
		cout<<"이  름: "<<accArr[i].cusName<<endl;
		cout<<"잔  액: "<<accArr[i].balance<<endl<<endl;
	}
}

첫번째 코드가 직접 만든 코드, 두번째 코드가 답안 코드
실행이 오류없이 잘 되긴 하지만 답안 코드를 확인하니 나의 코드가 깨끗하지 않다고 느껴졌다.
또한 출금 금액이 현재 가지고 있는 금액보다 많을때 상황을 고려하지 않았다는 것을 깨달았다.

0개의 댓글

관련 채용 정보