C++. Exchange project

lsw·2021년 3월 25일
0

Mini Projects

목록 보기
8/11
post-thumbnail

1. 문제

사과를 판매하는 "상인"과 구매하는 "고객"의 거래 과정 구현하기


2. 목적

  1. class를 통해 객체(object)개념을 이해한다.
  2. structure(구조체)와 class의 다른점을 파악한다.
  3. 객체간의 행동을 코드로 구현해 본다.
  4. header / source 파일을 나누는 연습을 해본다.

3. 코드

  • Exchange.h(header file)
#pragma once

/*Seller class - 상인 클래스*/
class Seller
{
private: //정보 은닉
// 멤버변수
	int Price; // 사과 판매가(1개)
	int Remain; // 보유 사과 개수
	int Money; // 보유 금액
	int Sel; // 판매 개수
	int Paid; // 지불받은 금액

public: // 외부 참조 가능
	void Init(int price, int remain, int money); // 생성자 **함수**
	int Getprice() const; // 판매금액 반환 함수, 하루 간 가격은 미변동 -> const선언
	int Getpaid(); // 지불받은 금액 반환 함수
// 거래를 통해 발생하는 멤버변수의 변동(재초기화) 과정을 수행하는 **거래함수**
	bool Procedure(int pay); 
	int Getsel(); // 판매 사과개수 반환함수
	void Showinform(); // 상인정보 조회함수
};

/*Buyer class - 구매자 클래스*/
class Buyer
{
private:
	int Money; // 보유 금액
	int Gain; // 보유 사과 개수

public:
	void Init(int money); // 생성자 함수
// 거래함수 : 거래과정 멤버변수의 재초기화를 수행하는 함수(변동 저장)
	void Procedure(Seller & merchant); 
// 구매자 정보 조회함수
	void Showinform();
};
  • Exchange.cpp(source file)
#include "apple.h"
#include<iostream>
using namespace std;

/*Seller class*/
/*생성자 함수*/
void Seller::Init(int price, int remain, int money)
{
// 입력받은 인자값으로 멤버변수 초기화1
	Price = price; 
	Remain = remain;
	Money = money;
}

/*지급받은 금액 반환함수*/
int Seller::Getprice() const
{
	return Price;
}

/*거래함수 - boolean type*/
bool Seller::Procedure(int paid)
{
	if (paid <= Getprice()) // 최소 지불 금액 설정 - 사과 하나의값보다 지불받은 금액이 적을 시 
	{
// 경고문구
		cout << Getprice() << "원 이상의 금액을 지불하십시오." << endl;
// 반환 1, 거래중지
		return false;
	}
// 입력받은 인자값으로 멤버변수 초기화2
	Paid = paid;
	Sel = paid / Getprice();
// 일부 멤버변수 **재**초기화
	Remain -= Sel;
	Money += paid;
// 반환 2, 거래완료
	return true;
}

/*지급받은 금액 반환함수*/
int Seller::Getpaid()
{
	return Paid;
}
/*판매한 사과개수 반환함수*/
int Seller::Getsel()
{
	return Sel;
}
/*판매자 정보조회 함수*/
void Seller::Showinform()
{
	cout << "보유 사과 개수 : " << Remain << endl;
	cout << "보유 금액 : " << Money << endl;
}

/*Buyer class*/
/*생성자 함수*/
void Buyer::Init(int money)
{
// 입력받은 인자로 멤버변수 초기화
	Money = money;
  Gain = 0; // 최초 보유 사과개수 0개
}

/*거래함수*/
void Buyer::Procedure(Seller & merchant) // Seller 클래스 함수에 접근하기 위해 객체 참조
{
	if (merchant.Procedure()) // **"거래완료" 시에만** 고객 보유금액의 재초기화
  {
    Money -= merchant.Getpaid(); // 구매자 보유액 재초기화
  }
    Gain = merchant.Getsel(); // 구매자 보유 사과개수 재초기화
}

/*구매자 정보조회 함수*/
void Buyer::Showinform()
{
	cout << "고객 잔여 금액 : " << Money << endl;
	cout << "고객 보유 사과 수 : " << Gain << endl;
}
  • main.cpp
#include "Exchange.h"
#include <iostream>
using namespace std;

int main()
{
// 차례로 지불금액 / 사과 가격 / 팔리고 남은 사과개수 / 상인보유금 / 구매자보유금 변수 
	int PayMoney, appleprice, appleremain, Mpropert, Cpropert;
	Seller merchant; // Seller클래스 객체 생성 - 상인 
	Buyer customer; // Buyer클래스 객체 생성 - 고객
// 변수 초기화
	cout << "<상인 정보 입력>" << endl << "오늘의 사과 금액 : ";
	cin >> appleprice;
	cout << "상인 보유 사과 개수 : ";
	cin >> appleremain;
	cout << "상인 초기 자산 금액(원) : ";
	cin >> Mpropert;
	cout << "\n\n<구매자 정보 입력>" << endl;

// 입력된 변수값을 인자로 하여 Seller생성자 함수를 호출, 객체 멤버변수를 초기화한다.
	merchant.Init(appleprice, appleremain, Mpropert);
// 구매자 정보 입력 
	cout << "구매자 보유 금액(원) : ";
	cin >> Cpropert; \
// 입력된 변수값을 인자로 하여 Buyer생성자 함수 호출, 객체 멤버변수 초기화
	customer.Init(Cpropert);
// 고객 지불금액 입력
	cout << "고객이 지불할 금액을 입력하시오 : ";
	cin >> PayMoney;
// Seller클래스의 거래함수 호출
	merchant.Procedure(PayMoney);
// Buyer클래스의 거래함수 호출
	customer.Procedure(merchant);

// 거래 후 상인-고객 각각의 정보조회 함수 호출
	cout << "\n<거래 후 상인 정보>\n" ;
	merchant.Showinform();
	cout << "\n<거래 후 구매자 정보>\n" ;
	customer.Showinform();
	return 0;
}

4. 결과

  • 정상

  • 비정상(지불금)


5. 어려웠던점 / 느낀점

  • 어려웠던점

    C에서 파일을 분리하는 방법을 완벽히 숙지하지 못하였어 이부분에서 고생을 좀 했다. 또한 새로 배우게 된 클래스 개념을 실제 사용함에 있어 여러번의 시행착오를 겪었다.

  • 느낀점

    객체를 생성할 수있는 "클래스"의 전반적인 구조와 각 구문의 역할에 대한 전반 이해가 생겼다.

profile
미생 개발자

0개의 댓글