Website Summary Files Commits Branches @commit @diff @stats
path: root / Week07 / Exercise01 / Transaction.h
blob: d4941ce56e8474dd2d1e869969233e62d21ce38c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef _TRANSACTION
#define _TRANSACTION

#include "String.h"
#include <fstream>

const unsigned STATUS_PENDING = 0;
const unsigned STATUS_ACCEPTED = 1;
const unsigned STATUS_REJECTED = 2;

// Няма да обвързваме транзакции с потребители директно
// (т.е. няма член-данна която свързва User обект).
// Тази връзка осъществяваме с UserTransaction класа.
// Логически, можем да приемем че не искаме банковия служител
// да знае за акаунтите на купувачите.
class Transaction {
	unsigned clerkNumber;
	double sum;
	unsigned bankCard;
	// Уговаряме се, че стойността на status ще бъде равна на една
	// от глобалните променливи STATUS_PENDING, STATUS_ACCEPTED и STATUS_REJECTED.
	// Тук е добро място за употреба на енумерации (enum).
	unsigned status;

public:
	Transaction(double sum, unsigned bankCard);
	// Ако направим поне един конструктор, то конструктора по подразбиране
	// спира да се създава автоматично
	Transaction();

	// Не искаме транзакции да могат да се променят своеволно.
	// Т.е. след като се създаде транзакция, единствено можем да променяме статус
	unsigned GetClerkNumber() const;
	double GetSum() const;
	unsigned GetBankCard() const;

	unsigned GetStatus() const;
	String GetStatusStr() const;
	void SetStatus(unsigned clerk, unsigned status);

	void PrintTransactionInfo() const;

	void Export(std::ofstream& exportFile) const;
};

#endif /* _TRANSACTION */