-
Notifications
You must be signed in to change notification settings - Fork 0
/
Card.cpp
81 lines (60 loc) · 1.84 KB
/
Card.cpp
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "Card.h"
//private-------------------------------------------
const char* Card::CARD_NUM_START = "00";
const int Card::MIN_CARD_NUM_LEN = 7;
const int Card::PIN_LEN = 4;
void Card::setCardNumber(const string& cardNumber){
if(cardNumber.length() < MIN_CARD_NUM_LEN){
throw std::invalid_argument(CARD_NUM_LEN_ERR);
}
if(cardNumber.substr(0,2).compare(CARD_NUM_START) != 0){
throw std::invalid_argument(CARD_NUM_START_ERR);
}
if(!isOnlyDigits(cardNumber)){
throw std::invalid_argument(CARD_NUM_CONTAINS_NONDIGIT_ERR);
}
this->cardNumber = cardNumber;
}
void Card::setPIN(const string& PIN){
if(PIN.length() != PIN_LEN){
throw std::invalid_argument(PIN_LEN_ERR);
}
if(!isOnlyDigits(PIN)){
throw std::invalid_argument(PIN_CONTAINS_NONDIGIT_ERR);
}
this->PIN = PIN;
}
//public-------------------------------------------
Card::Card(const string& cardNumber, const string& PIN){
setCardNumber(cardNumber);
setPIN(PIN);
}
string Card::getCardNumber() const{
return cardNumber;
}
string Card::getKey() const{
return cardNumber;
}
bool Card::validatePIN(const string& PIN) const{
return this->PIN == PIN;
}
void Card::serialize(std::ofstream& fout) const{
const char* separator = " ";
fout << cardNumber << separator << PIN;
}
void Card::deserialize(std::istream& fin){
fin >> cardNumber >> PIN;
}
std::ostream& operator<<(std::ostream& out, const Card& card){
out << "-----Card-----" << std::endl;
out << "Card number: " << card.cardNumber << std::endl;
out << "PIN: " << card.PIN;
return out;
}
string Card::generateRandPIN(){
int n1 = rand() % 10;
int n2 = rand() % 10;
int n3 = rand() % 10;
int n4 = rand() % 10;
return std::to_string(n1) + std::to_string(n2) + std::to_string(n3) + std::to_string(n4);
}