소요시간: 3시간
어려웠던 점: 처음에 어떻게 디자인할지(클래스 기반의 코드 디자인) 고민하는 시간 있었고 하면서 필요한 기능들을 넣음. 그외는 디버그로 시간 보냄.
알고리즘.
사용자모드
입금
(계좌와 비밀번호)
출금
(계좌와 비밀번호)
계좌조회
(계좌와 비밀번호)
계좌생성
(계좌와 비밀번호)
계좌삭제
(계좌와 비밀번호)
관리자모드
관리자 아이디와 비밀번호 입력.
사용자조회
-전체조회
-계좌 조회
계좌 3번 틀릴 시 기본메뉴로 돌아감.
관리자 아이디 , 비번: 1234
#include<iostream>
#include<Windows.h>
#include<vector>
#include <Windows.h> // Sleep(1000)
#include <stdlib.h> // system("cls");
using namespace std;
class ATM
{
private:
vector <int> ALL_ID;
int ID;
vector<int> ALL_PassWord;
int PassWord;
int ManagerID;
int ManagerPassword;
int money;
vector<int>ALL_Money;
int People_Num = 0;
int first_newer_flag = 0;
int overlap1 = 0; // 중복 횟수, 입금
int overlap2 = 0; //중복 횟수, 출금
int overlap3 = 0; //중복 횟수, 계좌조회
int overlap4 = 0; // 중복 횟수 .계좌 생성
int overlap5 = 0; // 중복 횟수, 계좌 삭제.
public:
void Manual();
};
void ATM::Manual()
{
int flag = 0;
for (;;)
{
if (flag == 0)
{
cout << "=========ATM 기========" << endl;
cout << "1. 사용자 모드" << endl;
cout << "2. 관리자 모드" << endl;
cout << "3. 종료" << endl;
int num;
cin >> num;
system("cls");
if (num == 1)
{
flag = 1;
if (flag == 1)
{
cout << "=======사용자 모드========" << endl;
cout << "1. 입금" << endl;
cout << "2. 출금" << endl;
cout << "3. 계좌조회" << endl;
cout << "4. 계좌생성" << endl;
cout << "5. 계좌삭제" << endl;
int num2;
cin >> num2;
system("cls");
/*---------------------------------------------*/
if (num2 == 1)
{
for (;;)
{
cout << "계좌: ";
cin >> ID;
cout << "비밀번호: ";
cin >> PassWord;
if (ALL_ID.size() == 0) // 전체 계좌 수가 0이라면
{
cout << "존재하지 않는 계좌입니다." << endl;
cout << "계좌를 생성해주세요" << endl;
break;
}
int i;
for (i = 0; i < ALL_ID.size(); i++)
{
if (ID == ALL_ID[i] && PassWord == ALL_PassWord[i])
{
cout << "입금: ";
cin >> money;
cout << ALL_ID[i] << "계좌에서 " << money << "원이 입금되었습니다." << endl;
ALL_Money[i] += money;
cout << "현재 잔액: " << ALL_Money[i] << endl;
Sleep(2000);
system("cls");
break;
}
}
if (i == ALL_ID.size()) //중복이 안되면
{
cout << "존재하지 않는 계좌입니다." << endl;
cout << "다시 입력해주세요.(최대 3번)" << endl;
Sleep(1000);
system("cls");
overlap1++;
if (overlap1 == 3)
{
cout << "메뉴로 돌아갑니다." << endl;
overlap1 = 0;
flag = 0;
Sleep(1000);
system("cls");
break;
}
}
else break; // 계좌 존재시 메뉴판.
}
}
/*-----------------------------------*/
else if (num2 == 2)
{
for (;;)
{
cout << "계좌: ";
cin >> ID;
cout << "비밀번호: ";
cin >> PassWord;
int i;
for (i = 0; i < (int)ALL_ID.size(); i++)
{
if (ID == ALL_ID[i] && PassWord == ALL_PassWord[i])
{
cout << "출금: ";
cin >> money;
if (money > ALL_Money[i])
{
cout << "잔액이 부족합니다." << endl;
Sleep(1000);
system("cls");
break;
}
else
{
cout << ALL_ID[i] << "계좌에서 " << money << "원이 출금되었습니다." << endl;
ALL_Money[i] -= money;
cout << "현재 잔액: " << ALL_Money[i] << endl;
Sleep(1500);
system("cls");
break;
}
}
}
if (i == ALL_ID.size())
{
cout << "존재하지 않는 계좌입니다." << endl;
cout << "다시 입력해주세요.( 최대 3번 )" << endl;
Sleep(1000);
system("cls");
overlap2++;
if (overlap2 == 3)
{
cout << "메뉴로 돌아갑니다." << endl;
overlap2 = 0;
flag = 0;
Sleep(1000);
system("cls");
break;
}
}
else break;
}
}
/*-----------------------------------*/
else if (num2 == 3)
{
for (;;)
{
cout << "=========계좌 조회=========" << endl;
cout << "계좌: ";
cin >> ID;
cout << "비밀번호: ";
cin >> PassWord;
int i;
int tmp = 0;
for (i = 0; i < (int)ALL_ID.size(); i++)
{
if (ID == ALL_ID[i] && PassWord == ALL_PassWord[i])
{
cout << "잔액: ";
cout << ALL_Money[i] << endl;
tmp = 1;
Sleep(2000);
system("cls");
break;
}
}
if (i == ALL_ID.size())
{
cout << "존재하지 않는 계좌입니다." << endl;
cout << "다시 입력해주세요.(최대 3번)" << endl;
Sleep(1000);
system("cls");
overlap3++;
if (overlap3 == 3)
{
cout << "메뉴로 돌아갑니다." << endl;
flag = 0;
Sleep(1000);
system("cls");
break;
}
}
if (i == ALL_ID.size() && overlap3 == 3)
{
overlap3 = 0;
break;
}
if (tmp == 1)
{
tmp = 0;
break;
}
}
}
/*-----------------------------------*/
else if (num2 == 4)
{
if (first_newer_flag == 0) // 첫 계좌 생성 시 무조건 size 증가 목적.
{
cout << "=========계좌 생성=========" << endl;
cout << " 생성 할 계좌번호와 비밀번호를 입력하시오." << endl;
cout << "계좌: ";
cin >> ID;
cout << "비밀번호: ";
cin >> PassWord;
ALL_ID.push_back(ID);
ALL_PassWord.push_back(PassWord);
ALL_Money.push_back(0);
cout << ID << endl;
cout << PassWord << endl;
first_newer_flag = 1;
cout << "생성된 계좌 수(사이즈): " << ALL_ID.size() << "계좌가 생성되었습니다." << endl;
break;
}
else if (first_newer_flag == 1)
{
for (;;)
{
cout << "=========계좌 생성=========" << endl;
cout << " 생성 할 계좌번호와 비밀번호를 입력하시오." << endl;
cout << "계좌: ";
cin >> ID;
cout << "비밀번호: ";
cin >> PassWord;
int i;
for (i = 0; i < ALL_ID.size(); i++)
{
if (ID == ALL_ID[i])
{
cout << "중복된 계좌입니다. 다시 입력해주세요.";
Sleep(2000);
system("cls");
overlap4++;
if (overlap4 == 3)
{
cout << "메뉴로 돌아갑니다." << endl;
flag = 0;
Sleep(1000);
system("cls");
break;
}
break;
}
}
if (overlap4 == 3) //3번 중복 시 메뉴로 돌아감.
{
overlap4 = 0;
break;
}
if (first_newer_flag == 1 && i == ALL_ID.size()) // 중복x이면, 계좌 생성
{
ALL_ID.push_back(ID);
ALL_PassWord.push_back(PassWord);
ALL_Money.push_back(0);
cout << ID << endl;
cout << PassWord << endl;
cout << "생성된 계좌 수(사이즈): " << ALL_ID.size() << "계좌가 생성되었습니다." << endl;
Sleep(2000);
system("cls");
break;
}
}
}
}
/*-------------------------------*/
else if (num2 == 5)
{
int tmp = 0;// 계좌가 있으면 1, 없으면 0
for (;;)
{
cout << "=========계좌 삭제=========" << endl;
cout << " 삭제 할 계좌번호와 비밀번호를 입력하시오." << endl;
cout << "계좌: ";
cin >> ID;
cout << "비밀번호: ";
cin >> PassWord;
int i;
for (i = 0; i < ALL_ID.size(); i++)
{
if (ID == ALL_ID[i] && PassWord == ALL_PassWord[i])
{
ALL_ID.erase(ALL_ID.begin() + i);
ALL_PassWord.erase(ALL_PassWord.begin() + i);
ALL_Money.erase(ALL_Money.begin() + i);
cout << "삭제 후 계좌 수(사이즈): " << ALL_ID.size() << "계좌가 남았습니다." << endl;
tmp = 1;
Sleep(2000);
system("cls");
break;
}
}
if (tmp == 0 && ALL_ID.size() == 0 || (first_newer_flag == 1 && i == ALL_ID.size())) // 중복x이면, 계좌 없음.
{
cout << "존재하지 않은 계좌입니다. 다시 확인해주세요.(최대 3번)" << endl;
Sleep(1200);
system("cls");
overlap5++;
if (overlap5 == 3)
{
cout << "메뉴로 돌아갑니다." << endl;
flag = 0;
overlap5 = 0;
Sleep(2000);
system("cls");
break;
}
}
}
}
else
{
cout << "다시 입력해주세요. " << endl;
Sleep(2000);
system("cls");
break;
}
}
// 사용자모드 끝.
}
// 관리자모드 시작
else if (num == 2)
{
flag = 2;
int cnt = 0;
if (flag == 2)
{
cout << "관리자 아이디: ";
cin >> ManagerID;
cout << "관리자 비밀번호: ";
cin >> ManagerPassword;
system("cls");
if (ManagerID == 1234 && ManagerPassword == 1234)
{
cout << "======관리자 모드=======" << endl;
cout << "1. 사용자 전체 조회" << endl;
cout << "2. 사용자 계좌 조회" << endl;
int Manager_chocie;
cin >> Manager_chocie;
/*-----------------------------------*/
if (Manager_chocie == 1)
{
system("cls");
int i;
for (i = 0; i < ALL_ID.size(); i++)
{
cout << "계좌 번호: " << ALL_ID[i] << ", 잔액: " << ALL_Money[i] << endl;
Sleep(1500);
system("cls");
}
if (i == ALL_ID.size() || ALL_ID.size() == 0)
{
cout << "계좌가 없습니다." << endl;
Sleep(1500);
system("cls");
}
}
/*-----------------------------------*/
else if (Manager_chocie == 2)
{
system("cls");
cout << "계좌: ";
cin >> ID;
int i;
for (i = 0; i < ALL_ID.size(); i++)
{
if (ID == ALL_ID[i])
{
cout << "계좌 번호: " << ALL_ID[i] << ", 잔액: " << ALL_Money[i] << endl;
Sleep(1500);
system("cls");
break;
}
}
if (i == ALL_ID.size() || ALL_ID.size() == 0)
{
cout << "계좌가 없습니다." << endl;
Sleep(1500);
system("cls");
break;
}
}
}
else
{
cnt++;
cout << "다시 입력하시오." << endl;
if (cnt == 3)
{
cout << "메뉴로 돌아갑니다." << endl;
flag = 0;
num = 0;
Sleep(1500);
system("cls");
break;
}
}
}
}
//종료
else if (num == 3)
{
//clear.
cout << "종료 하시겠습니까? (y , n) " << endl;
char choice;
cin >> choice;
Sleep(2000);
system("cls");
if (choice == 'y')
{
system("pause");
break;
}
else
flag = 0;
}
else
{
cout << "다시 입력해주세요." << endl;
Sleep(1000);
system("cls");
}
}
break;
}
}
int main(void)
{
ATM Person;
for (;;)
{
Person.Manual();
Sleep(1000);
system("cls");
}
system("pause");
}