Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>//За потребите на еден приватен банкар кој тргува со акции, потребно е да се направи
- using namespace std; //модул за менаџирање со клиентски портфолија.
- class StockRecord { //За таа цел, треба да се креира класа StockRecord.
- private: //Класата треба да содржи:
- char ID[12]; //ID, кој означува која е акцијата која се тргува (низа од 12 знаци)
- char kompanija[50]; //Име на компанијата која ја издала акцијата (низа од 50 знаци)
- double cena; //Цена според која се купени акциите (реален број)
- double momentalna; //Моментална цена на акцијата (реален број)
- int kupeni; //Број на акции кои се купени (цел број)
- public: //За класата да се дефинираат потребните конструктори и
- StockRecord() {
- strcpy(this->ID, "");
- strcpy(this->kompanija, "");
- this-> cena = 0.0;
- this-> momentalna = 0.0;
- this-> kupeni = 0;
- }
- StockRecord(char * ID,char * kompanija, double cena, int kupeni) {
- strcpy(this->ID, ID);
- strcpy(this->kompanija, kompanija);
- this-> cena = cena;
- //this-> momentalna = momentalna;
- this-> kupeni = kupeni;
- }
- StockRecord(const StockRecord &sr) {
- strcpy(this->ID, sr.ID);
- strcpy(this->kompanija, sr.kompanija);
- this-> cena = sr.cena;
- //this-> momentalna = sr.momentalna;
- this-> kupeni = sr.kupeni;
- }
- void setNewPrice(double c) { //*set* метода за моменталната цена со потпис void setNewPrice(double c) (10 поени).
- this->momentalna = c;
- }
- double value() { //Исто така, да се имплементираат методи double value()
- return 1.0 * kupeni * momentalna; //Вредност = број на акции * моментална цена
- }//Првата треба да ја пресметува вредноста на акциите,
- double profit() { //и double profit().
- return 1.0 * kupeni * (momentalna - cena); //Профит = број на акции * (моментална цена - цена по која се купени)
- } //а втората треба да го пресметува моменталниот профит од акциите.
- friend ostream &operator<<(ostream &o, StockRecord &s) { //Дополнително, да се преоптовари операторот <<
- o<<s.kompanija<<" "<<s.kupeni<<" "<<s.cena<<" "<<s.momentalna<<" "<<s.profit()<<endl;
- return o; //за печатење на објектот во следниот формат (5 поени):
- }//*Компанија БројНаАкции КуповнаЦена МоменталнаЦена Профит*
- };
- class Client { //Да се креира класа Client
- private: //која содржи:
- char imeprezime[60]; //Име и презиме на клиентот (низа од 60 знаци)
- int smetkaid; //ID на сметка (цел број)
- StockRecord * niza; //Низа од компании кои ги поседува клиентот (динамичка низа од објекти од класата StockRecord)
- int broj; //Број на објекти во низата (цел број)
- public: //За класата Client да се дефинираат потребните конструктори,
- Client() {
- strcpy(this->imeprezime, "");
- this->smetkaid = 0;
- this-> niza = new StockRecord[0];
- this->broj = 0;
- }
- Client(char * imeprezime, int smetkaid) {
- strcpy(this->imeprezime, imeprezime);
- this->smetkaid=smetkaid;
- this->broj = 0;
- // for(int i=0; i<broj;i++)
- // this->niza[i] = niza[i];
- }
- Client(const Client &cc) {
- strcpy(this->imeprezime, cc.imeprezime);
- this->smetkaid=cc.smetkaid;
- // this->broj = cc.broj;
- // for(int i=0; i<broj;i++)
- // this->niza[i] = cc.niza[i];
- }
- ~Client() { //деструктор
- delete [] niza;
- }
- double totalValue() {//и метода double totalValue() која ќе ја пресметува моменталната вредност на акциите
- double total = 0.0;//кои ги поседува клиентот. Таа се пресметува како збир од вредноста на сите акции од
- for(int i=0; i<broj;i++)//секоја компанија од кои е составено клиентското портфолио (15 поени).
- total = total + niza[i].value();
- return total;
- } //Дополнително, за класата да се преоптоварат операторите:
- Client &operator+=(const StockRecord &sr) { //+= за купување на нова компанија во портфолиото (
- StockRecord * tmp = new StockRecord [broj+1];// додавање на нов објект од класата StockRecord
- for(int i=0; i<broj; i++) //во низата со компании) (10 поени)
- tmp[i] = niza[i];
- tmp[broj++] = sr;
- niza = tmp;
- return *this;
- }
- friend ostream &operator<<(ostream &o, Client &c) { //<< за печатење на информации за портфолиото на клиентот
- o<<c.smetkaid<<" "<<c.totalValue()<<endl; //така што во првиот ред ќе бидат прикажани ID на сметката и моменталната вредност на
- for(int i=0; i<c.broj; i++) //портфолиото одделени со празно место,
- o<<c.niza[i]; //а во секој нареден ред ќе бидат прикажани компаниите од кои е составено портфолиото,
- return o; //секоја во посебен ред (5 поени)
- }
- };
- // ne menuvaj vo main-ot
- int main(){
- int test;
- cin >> test;
- if(test == 1){
- double price;
- cout << "=====TEST NA KLASATA StockRecord=====" << endl;
- StockRecord sr("1", "Microsoft", 60.0, 100);
- cout << "Konstruktor OK" << endl;
- cin >> price;
- sr.setNewPrice(price);
- cout << "SET metoda OK" << endl;
- }
- else if(test == 2){
- cout << "=====TEST NA METODITE I OPERATOR << OD KLASATA StockRecord=====" << endl;
- char id[12], company[50];
- double price, newPrice;
- int n, shares;
- cin >> n;
- for(int i = 0; i < n; ++i){
- cin >> id;
- cin >> company;
- cin >> price;
- cin >> newPrice;
- cin >> shares;
- StockRecord sr(id, company, price, shares);
- sr.setNewPrice(newPrice);
- cout << sr.value() << endl;
- cout << sr;
- }
- }
- else if(test == 3){
- cout << "=====TEST NA KLASATA Client=====" << endl;
- char companyID[12], companyName[50], clientName[50];
- int clientID, n, shares;
- double oldPrice, newPrice;
- bool flag = true;
- cin >> clientName;
- cin >> clientID;
- cin >> n;
- Client c(clientName, clientID);
- cout << "Konstruktor OK" << endl;
- for(int i = 0; i < n; ++i){
- cin >> companyID;
- cin >> companyName;
- cin >> oldPrice;
- cin >> newPrice;
- cin >> shares;
- StockRecord sr(companyID, companyName, oldPrice, shares);
- sr.setNewPrice(newPrice);
- c += sr;
- if(flag){
- cout << "Operator += OK" << endl;
- flag = false;
- }
- }
- cout << c;
- cout << "Operator << OK" << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement