Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- enum tipC {basic=0, premium=1};
- class NotValidYear {
- private:
- char msg[100];
- public:
- NotValidYear(char * msg = "") {
- strcpy(this->msg, msg);
- }
- void showMessage() {
- cout<<msg;
- }
- };
- class Chlen { //Да се креира класа за опишување на членови на еден клуб за попусти Chlen.
- private:// За секој член се чуваат податоци за
- char ime[100]; //името (низа од 100 знаци),
- tipC tip; //тип на член (basic или premium ),
- static int osnoven;//основен попуст (цел број изразен во проценти),
- static int dopolnitelen; //дополнителен попуст (цел број изразен во проценти) и
- int godina;//година на членарина (цел број). (5 поени)
- public:
- Chlen() {
- strcpy(this->ime, "");
- this->tip = (tipC)0;
- this->godina = 0;
- }
- Chlen(char * ime, tipC tip, int godina) {
- strcpy(this->ime, ime);
- this->tip = tip;
- this->osnoven = osnoven;
- this->dopolnitelen = dopolnitelen;
- this->godina = godina;
- }
- Chlen(const Chlen ©) {
- strcpy(this->ime, copy.ime);
- this->tip = copy.tip;
- this->osnoven = copy.osnoven;
- this->dopolnitelen = copy.dopolnitelen;
- this->godina = copy.godina;
- }
- int getgodina() {
- return godina;
- }
- int calcpopust() {
- if(tip == basic) //Основниот попуст е ист за сите членови и изнесува 10%.
- return osnoven;//Дополнителниот попуст е фиксен и важи само за premium
- if(tip == premium)//членовите и изнесува 15% (5 поени).
- return osnoven + dopolnitelen; // каде попустот се добива како основен попуст доколу членот е basic или како основен +
- } //дополнителен попуст ако членот е premium. (5 поени)
- friend ostream &operator<<(ostream &o, Chlen &print) {
- o<<print.ime; //За оваа класа да се имплементира оператор << за печатење на член во формат:
- o<<endl; //[ime_na_chlen]
- if(print.tip == basic)
- o<<"basic";
- else o<<"premium"; //[tip_na_chlen]
- o<<" "<<print.godina;//[godina_na_chlenarina]
- o<<" "<<print.calcpopust()<<endl; //[popust_koj_moze_da_go_koristi]
- return o;
- }
- static void setPopust1(int os) {//Оваа вредност може да се смени со одлука на клубот.
- osnoven = os;
- }
- static void setPopust2(int dop) {
- dopolnitelen = dop;
- }
- };
- int Chlen::osnoven = 10;
- int Chlen::dopolnitelen = 15;
- class FINKI_club { //Да се креира класа FINKI-club
- private://во која се чува
- int clenarina; //цената на основната членарина (цел број),
- Chlen * niza; //низа од членови (динамички алоцирана низа)
- int broj;//и број на членови.(5 поени) За класата да се обезбедат:
- public:
- FINKI_club(int clenarina = 0) {
- this->clenarina = clenarina;
- this->niza = new Chlen[0];
- this->broj = 0;
- }
- FINKI_club(const FINKI_club ©) {
- this->broj = copy.broj;
- this->clenarina = copy.clenarina;
- this->niza = new Chlen[copy.broj];
- for(int i=0; i<copy.broj; i++)
- this->niza[i] = copy.niza[i];
- }
- FINKI_club &operator-=(int yr) { //operator-= за бришење на членовите
- if(yr < 0)//во ФИНКИ-клубот кои си ја немаат обновено членарината
- throw NotValidYear("Vnesena e negativna vrednost za godinata!\n");//според тековната година која се предава како параметар.
- else {
- int count=0;//Не смее да се дозволи годината да биде негативен број.
- for(int i=0; i<broj; i++) { // Ако се направи обид за бришење на член според невалидна
- if(niza[i].getgodina() >= yr)// година, треба да се генерира исклучок NotValidYear.
- count++;
- }
- Chlen * tmp = new Chlen[count];
- count=0;
- for(int i=0; i<broj; i++) {
- if(niza[i].getgodina() >= yr)
- tmp[count++] = niza[i];
- }
- niza = tmp;
- broj = count;
- return *this;
- }
- }
- void setChlenovi(Chlen * niza, int n) {
- this->broj = n;
- this->niza = new Chlen[broj];
- for(int i=0; i<broj; i++)
- this->niza[i] = niza[i];
- }
- friend ostream &operator<<(ostream &o, FINKI_club &print) {
- for(int i=0; i<print.broj; i++) {
- o<<print.niza[i];
- }
- return o;
- } //operator << за печатење на сите членови на ФИНКИ-клубот. (5 поени)
- void naplatiChlenarina() { //функција naplatiChlenarina во која се печати секој
- double total=0;
- for(int i=0; i<broj; i++) { //член колку треба да плати за членарина
- total = clenarina - (clenarina * (niza[i].calcpopust() / 100.0));
- cout<<niza[i]<<total<<endl;
- } //и притоа при плаќање членарина важат соодветните попусти кои ги има членот на клубот
- }
- };
- int main() {
- int testCase;
- cin >> testCase;
- char ime[100];
- int tipChlen;
- int popust;
- int god;
- if (testCase == 1) {
- cout << "===== Testiranje na klasata Chlen ======" << endl;
- cin.get();
- cin.getline(ime,100);
- cin >> tipChlen;
- cin >> god;
- cout << "===== CONSTRUCTOR ======" << endl;
- Chlen c(ime, (tipC) tipChlen, god);
- cout << c;
- }
- if (testCase == 2) {
- cout << "===== Testiranje na static clenovi ======" << endl;
- cin.get();
- cin.getline(ime,100);
- cin >> tipChlen;
- cin >> god;
- cout << "===== CONSTRUCTOR ======" << endl;
- Chlen c(ime, (tipC) tipChlen, god);
- cout << c;
- c.setPopust1(5);
- cout << c;
- }
- if (testCase == 3) {
- cout << "===== Testiranje na klasata FINKI-club ======" << endl;
- FINKI_club fc;
- int n;
- cin >> n;
- Chlen chlen[100];
- for(int i = 0; i < n; ++i) {
- cin.get();
- cin.getline(ime,100);
- cin >> tipChlen;
- cin >> god;
- Chlen c(ime, (tipC) tipChlen, god);
- chlen[i] = c;
- }
- fc.setChlenovi(chlen, n);
- cout << fc <<endl;
- }
- if (testCase == 4) {
- cout << "===== Testiranje na operatorot -= ======" << endl;
- FINKI_club fc;
- int n;
- cin >> n;
- Chlen chlen[100];
- for(int i = 0; i < n; ++i) {
- cin.get();
- cin.getline(ime,100);
- cin >> tipChlen;
- cin >> god;
- Chlen c(ime, (tipC) tipChlen, god);
- chlen[i] = c;
- }
- fc.setChlenovi(chlen, n);
- cout << "OPERATOR -=" << endl;
- int godina;
- cin >> godina;
- fc-=godina;
- cout << fc;
- }
- if (testCase == 5) {
- cout << "===== Testiranje na operatorot -= (so iskluchok) ======" << endl;
- FINKI_club fc;
- int n;
- cin >> n;
- Chlen chlen[100];
- for(int i = 0; i < n; ++i) {
- cin.get();
- cin.getline(ime,100);
- cin >> tipChlen;
- cin >> god;
- Chlen c(ime, (tipC) tipChlen, god);
- chlen[i] = c;
- }
- fc.setChlenovi(chlen, n);
- cout << "OPERATOR -=" << endl;
- int godina;
- cin >> godina;
- try {
- fc-=godina;
- } catch (NotValidYear &exc) {
- exc.showMessage();
- }
- cout << fc;
- }
- if (testCase == 6) {
- cout << "===== Testiranje na metodot naplatiChlenarina ======" << endl << endl;
- FINKI_club fc(1000);
- int n;
- cin >> n;
- Chlen chlen[100];
- for(int i = 0; i < n; ++i) {
- cin.get();
- cin.getline(ime,100);
- cin >> tipChlen;
- cin >> god;
- Chlen c(ime, (tipC) tipChlen, god);
- chlen[i] = c;
- }
- fc.setChlenovi(chlen, n);
- cout << "Naplati chlenarina:" << endl;
- fc.naplatiChlenarina();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement