2024. 4. 15. 15:46ㆍ[C++]/C++ 언어 기초
프로젝트 04 단계의 도입
여러 Chapter를 통해서 const에 대해 설명하였으니, 우리가 진행하는 프로젝트에도 const 선언을 추가해서 코드의 안전성을 높여보겠다.
프로그램 설명
Account 클래스의 멤버함수 중 일부를 const로 선언하면서 Banking System의 버전을 0.3에서 0.4으로 업그레이드 시키겠다. const로 선언이 가능한 모든 멤버함수를 const로 선언하자.
04단계 코드
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
void ShowMenu(void);
void MakeAcc(void);
void DepositMoney(void);
void WithdrawMoney(void);
void ShowAccInfo(void);
enum {Make = 1, Deposit, Withdraw, ShowAcc, EXIT};
class Accounts{ //Account 클래스 정의
private:
int accId;
int money;
char *cusName;
public:
Accounts(int Id, int mymoney, char *name):accId(Id), money(mymoney){
cusName = new char[strlen(name)+1];
strcpy_s(cusName,strlen(name)+1, name);
}
//복사 생성자 추가
Accounts(const Accounts ©):accId(copy.accId), money(copy.money){
cusName = new char[strlen(cusName + 1)];
strcpy(cusName, copy.cusName);
}
int GetAccId() const {return accId;}
void Deposit(int mymoney){
money += mymoney;
}
int Withdraw(int mymoney){
if(money < mymoney)
return 0;
money -= mymoney;
return mymoney;
}
const char* GetCusName() const {
return cusName;
}
int GetMoney() const {
return money;
}
void ShowAccInfo() const{
cout<<"계좌Id: "<<accId<<endl;
cout<<"이름: "<<cusName<<endl;
cout<<"잔액: "<<money<<endl<<endl;
}
~Accounts(){
delete []cusName;
}
};
Accounts * accArr[100];
int accNum = 0;
int main(void)
{
while(1){
ShowMenu();
}
}
void ShowMenu(void){
int select;
cout<<"-------Menu-------"<<endl<<"1. 계좌개설"<<endl<<"2. 입 금"<<endl<<"3. 출 금"<<endl<<"4. 계좌정보 전체 출력"<<endl<<"5. 프로그램 종료"<<endl;
cout<<"번호를 입력하세요. : ";cin>>select;
cout<<endl;
switch(select){
case Make:
MakeAcc();
break;
case Deposit:
DepositMoney();
break;
case Withdraw:
WithdrawMoney();
break;
case ShowAcc:
ShowAccInfo();
break;
case EXIT:
for(int i; i<accNum; i++){
delete accArr[i];
}
exit(0);
default:
cout<<"유효하지 않은 번호입니다."<<endl<<endl;
}
}
void MakeAcc(void){
int id, money;
char name[20];
cout<<"[계좌개설]"<<endl;
cout<<"계좌ID: ";
while (!(cin >> id)) {
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "잘못된 값을 입력하셨습니다. 정수로 입력해주세요 \n";
cout <<"계좌 ID: ";
}
cout<<"이름(최대 20자): "; cin>>name;
cout<<"입금액: "; cin>>money; cout<<endl;
accArr[accNum++] = new Accounts(id, money, name);
}
void DepositMoney(void){
int id, money;
cout<<"[입 금]"<<endl;
cout<<"계좌ID: ";
while (!(cin >> id)) {
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "잘못된 값을 입력하셨습니다. 정수로 입력해주세요 \n";
cout <<"계좌 ID: ";
}
cout<<"입금액: ";cin>>money;
for(int i = 0; i<accNum; i++){
if(accArr[i] -> GetAccId() == id){
accArr[i] -> Deposit(money);
cout<<"입금완료"<<endl;
cout<<accArr[i]->GetCusName()<<"고객님의 입금 후 잔액 : "<<accArr[i]->GetMoney()<<endl;
return;
}
}
cout<<"아이디가 없습니다."<<endl;
}
void WithdrawMoney(void){
int id, money;
cout<<"[출 금]"<<endl;
cout<<"계좌ID: ";
while (!(cin >> id)) {
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "잘못된 값을 입력하셨습니다. 정수로 입력해주세요."<<endl;
cout <<"계좌 ID: ";
}
cout<<"출금액: ";
while (!(cin >> money)) {
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "잘못된 값을 입력하셨습니다."<<endl;
cout <<"출금액: ";
}
for(int i = 0; i<accNum; i++){
if(accArr[i] -> GetAccId() == id){
if(accArr[i] ->Withdraw(money) == 0){
cout<<"잔액부족"<<endl<<endl;
return ;
}
cout<<"출금완료"<<endl;
cout<<accArr[i]->GetCusName()<<"고객님의 출금 후 잔액 : "<<accArr[i]->GetMoney()<<endl;
return;
}
}
cout<<"아이디가 없습니다."<<endl;
}
//계좌정보 전체 출력
void ShowAccInfo(void){
for(int i = 0; i<accNum;i++){
cout<<"["<<i+1<<"번째 계좌정보]"<<endl;
accArr[i] -> ShowAccInfo();
if(i+1 == accNum){
cout<<"-------전체 계좌 출력 완료-------"<<endl<<endl;
}
}
}
friend, const
기존 코드
01 단계 코드
https://kjy1ho.tistory.com/337
01-06 은행계좌프로그램 실습 1단계
프로그램 설명 우리가 구현하고자 하는것은 "은행계좌 관리 프로그램"이다. 1단계에서는 C스타일로 구현하는 것을 목표로 한다. 구현할 기능은 다음과 같다. 기능 1. 계좌개설 기능 2. 입 금 기능
kjy1ho.tistory.com
02단계 코드
https://kjy1ho.tistory.com/351
04-05 은행계좌문제 2단계
01단계 코드 #include "stdafx.h" #include using namespace std; using namespace System; void ShowMenu(void); void MakeAcc(void); void DepositMoney(void); void WithdrawMoney(void); void ShowAccInfo(void); enum {Make = 1, Deposit, Withdraw, ShowAcc}; typed
kjy1ho.tistory.com
03단계 코드
https://kjy1ho.tistory.com/355
05-4 은행계좌프로그램 실습 3단계
프로젝트 03단계의 도입 깊은 복사를 원칙으로 한다면, 클래스의 생성자만 봐도 복사 생성자의 필요성을 판단할 수 있다. 실제 복사 생성자의 호출 여부는 중요하지 않다. 클래스는 그 자체로 완
kjy1ho.tistory.com
'[C++] > C++ 언어 기초' 카테고리의 다른 글
27. [C++] 상속을 위한 조건 (0) | 2024.04.15 |
---|---|
25. [C++] 상속의 문법적인 이해 (0) | 2024.04.15 |
은행계좌프로그램 실습 3단계 (0) | 2024.04.15 |
20. [C++] 복사 생성자의 호출시점 (0) | 2024.04.15 |
19. [C++] 깊은 복사와 얕은 복사 (0) | 2024.04.15 |