Advertisement
Guest User

Untitled

a guest
Jul 29th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.36 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4.  
  5. #define null NULL
  6. #define file FILE
  7.  
  8. #define usersPath "users.dat"
  9. #define booksPath "books.dat"
  10.  
  11. using namespace std;
  12.  
  13. /*
  14.  * Author: MyZone
  15.  *
  16.  */
  17.  
  18. struct user{
  19.     char* login;
  20.     char* pass;
  21.     bool admin;
  22.    
  23.     user* next;
  24.     user* prev;
  25.  
  26.     /*~user(){
  27.         //тут ошибка
  28.         //if(this->login) delete[] this->login;
  29.         //if(this->pass) delete[] this->pass;
  30.         if(this->next) delete this->next;
  31.     }*/
  32. };
  33. struct book{
  34.     int id;
  35.     char* name;
  36.    
  37.     char** authors;
  38.     int authorsNumber;
  39.  
  40.     int birthyear;
  41.     char* publishing;
  42.  
  43.     float price;
  44.  
  45.     book* next;
  46.     book* prev;
  47.  
  48.     /*~book(){
  49.         if(this->name) delete[] this->name;
  50.         if(this->authors){
  51.             for(int i=0;i<authorsNumber;i++){
  52.                 delete[] this->authors[i];
  53.             }
  54.             delete[] this->authors;
  55.         }
  56.         if(this->publishing) delete[] this->publishing;
  57.         if(this->next) delete this->next;
  58.     }*/
  59. };
  60. struct author{
  61.     char* name;
  62.  
  63.     author* next;
  64.     author* prev;
  65.  
  66.     /*~author(){
  67.         //delete[] this->name;
  68.  
  69.         if(this->next) delete this->next;
  70.     }*/
  71. };
  72. struct publishing{
  73.     char* name;
  74.    
  75.     author* authors;
  76.     int authorsNumber;
  77.    
  78.     book* books;
  79.     int booksNumber;
  80.  
  81.     publishing* next;
  82.     publishing* prev;
  83.  
  84.     /*~publishing(){
  85.         //delete[] this->name;
  86.        
  87.         if(this->authors){
  88.             while(this->authors->prev) this->authors = this->authors->prev;
  89.             delete this->authors;
  90.         }
  91.         if(this->books){
  92.             while(this->books->prev) this->books = this->books->prev;
  93.             delete this->books;
  94.         }
  95.  
  96.         if(this->next) delete this->next;
  97.     }*/
  98. };
  99.  
  100. void init();
  101. void deinit();
  102.  
  103. void resetIDs(int firstID);
  104. void swap(book* a,book* b);
  105.  
  106. void save();
  107. void load();
  108.  
  109. char* registrateUser();
  110.  
  111. char* login();
  112.  
  113. char* addBook();
  114. char* deleteBook();
  115.  
  116. void trace();
  117. char* sortList();
  118. void tracePublishings(int type);
  119. //глобальные переменные
  120.     user* currentUser;
  121.     user* users;
  122.  
  123.     book* books;
  124.     int bookNumber;
  125. //
  126.  
  127. void main(){
  128.     init();
  129.     char* command = new char[256];
  130.     for(;;){
  131.         cout<<"\\>";
  132.         cin>>command;
  133.         if(!strcmp(command,"help")){
  134.             cout<<"\tlogin    \tUse this to login is system.\n";
  135.             cout<<"\tregister \tUse this to register.\n";
  136.             cout<<"\tadd      \tUse this to add book.\n";
  137.             cout<<"\tdelete      \tUse this to add book.\n";
  138.             cout<<"\ttrace    \tUse this to show books list.\n";
  139.             cout<<"\tsort     \tUse this to sort books.\n";
  140.  
  141.             cout<<"\tf1      \tUse this to show .\n";
  142.             cout<<"\tf2      \tUse this to show .\n";
  143.             cout<<"\tf3      \tUse this to show .\n";
  144.  
  145.             cout<<"\help      \tUse this to show help.\n";
  146.             cout<<"\texit     \tUse this to exit.\n";
  147.         }else if(!strcmp(command,"login")){
  148.             cout<<login();
  149.         }else if(!strcmp(command,"register")){
  150.             cout<<registrateUser();
  151.         }else if(!strcmp(command,"add")){
  152.             cout<<addBook();
  153.         }else if(!strcmp(command,"delete")){
  154.             cout<<deleteBook();
  155.         }else if(!strcmp(command,"trace")){
  156.             trace();
  157.         }else if(!strcmp(command,"sort")){
  158.             cout<<sortList();
  159.         }else if(!strcmp(command,"exit")){
  160.             deinit();
  161.         }else if(!strcmp(command,"f1")){
  162.             tracePublishings(0);
  163.         }else if(!strcmp(command,"f2")){
  164.             tracePublishings(1);
  165.         }else if(!strcmp(command,"f3")){
  166.             tracePublishings(3);
  167.         }
  168.     }
  169. }
  170.  
  171. void init(){
  172.     currentUser = null;
  173.    
  174.     users = new user;
  175.    
  176.     users->login = "";
  177.     users->pass = "";
  178.     users->admin = false;
  179.  
  180.     users->prev = null;
  181.     users->next = null;
  182.  
  183.  
  184.     books = new book;
  185.    
  186.     books->name = null;
  187.     books->authors = null;
  188.     books->publishing = null;
  189.  
  190.     books->next = null;
  191.     books->prev = null;
  192.  
  193.     bookNumber = 0;
  194.  
  195.     //reading files
  196.         //users
  197.             file* usersFile = fopen(usersPath,"rb");
  198.             if(usersFile==null) return;
  199.                 while(!feof(usersFile)){
  200.                     user* newUser = new user;
  201.                
  202.                     newUser->login = new char[256];
  203.                     newUser->pass = new char[256];
  204.  
  205.                     fread(strrev(newUser->login),1,256,usersFile);
  206.                     fread(strrev(newUser->pass),1,256,usersFile);
  207.                     fread(&newUser->admin,1,1,usersFile);
  208.  
  209.                     newUser->login = strrev(newUser->login);
  210.                     newUser->pass = strrev(newUser->pass);
  211.  
  212.                     newUser->next = users->next;
  213.                     newUser->prev = users;
  214.                     if(users->next) users->next->prev = newUser;
  215.                     users->next = newUser;
  216.  
  217.                     users = users->next;
  218.                 }
  219.             fclose(usersFile);
  220.            
  221.  
  222.         //books
  223.             file* booksFile = fopen(booksPath,"rb");
  224.             if(booksFile==null) return;
  225.                 while(true){
  226.                     book* newBook = new book;
  227.  
  228.                     newBook->name = new char[256];
  229.                     newBook->publishing = new char[256];
  230.  
  231.                     fread(newBook->name,1,256,booksFile);
  232.                     fread(newBook->publishing,1,256,booksFile);
  233.  
  234.                     fread(&newBook->birthyear,1,4,booksFile);
  235.                     fread(&newBook->price,1,4,booksFile);
  236.                     fread(&newBook->authorsNumber,1,4,booksFile);
  237.  
  238.                     if(feof(booksFile)){
  239.                         newBook->authors = null;
  240.                         newBook->next = null;
  241.                         delete newBook;
  242.                         break;
  243.                     }
  244.  
  245.                     newBook->authors = new char*[newBook->authorsNumber];
  246.                    
  247.                     for(int i=0;i<newBook->authorsNumber;i++){
  248.                         newBook->authors[i] = new char[256];
  249.                         fread(newBook->authors[i],1,256,booksFile);
  250.                     }
  251.  
  252.                    
  253.  
  254.                     newBook->next = books->next;
  255.                     newBook->prev = books;
  256.                     if(books->next) books->next->prev = newBook;
  257.                     books->next = newBook;
  258.  
  259.                     books = books->next;
  260.                     bookNumber++;
  261.                 }
  262.                
  263.             resetIDs(0);
  264.  
  265.             fclose(booksFile);
  266. }
  267.  
  268. void deinit(){
  269.     while(users->prev) users = users->prev;
  270.     while(books->prev) books = books->prev;
  271.  
  272.     delete books;
  273.     delete users;
  274.    
  275.     exit(0);
  276. }
  277.  
  278. char* registrateUser(){
  279.     file* usersFile = fopen(usersPath,"ab");
  280.     if(!usersFile) return "File system error";
  281.  
  282.     user* newUser = new user;
  283.     char* key = new char[256];
  284.  
  285.     newUser->login = new char[256];
  286.     newUser->pass = new char[256];
  287.  
  288.     cout<<"\tYour login: ";
  289.     cin>>newUser->login;
  290.     cout<<"\tPassword: ";
  291.     cin>>newUser->pass;
  292.     cout<<"\tAdmin key: "; cin>>key;
  293.     newUser->admin = !strcmp(key,"lol")?true:false;
  294.    
  295.     newUser->prev = users->prev;
  296.     newUser->next = users;
  297.     if(users->prev) users->prev->next=newUser;
  298.     users->prev = newUser;
  299.  
  300.     //save 2 file
  301.    
  302.     fwrite(strrev(newUser->login),1,256,usersFile);
  303.     fwrite(strrev(newUser->pass),1,256,usersFile);
  304.     fwrite(&newUser->admin,1,1,usersFile);
  305.        
  306.     fclose(usersFile);
  307.     delete key;
  308.     return (newUser->admin?"\tAdmin account registered successfully.\n":"\tUser account registered successfully.\n");
  309. }
  310.  
  311. char* login(){
  312.     char* log  = new char[256];
  313.     char* pas  = new char[256];
  314.     cout<<"\tYour login: ";
  315.     cin>>log;
  316.     cout<<"\tPassword: ";
  317.     cin>>pas;
  318.    
  319.     while(users->prev) users=users->prev;
  320.     while(users->next){
  321.         if(!strcmp(pas,users->next->pass) && !strcmp(log,users->next->login)){
  322.             currentUser = users;
  323.             return (users->next->admin?"\tLogin successfully. Admin mode is on.\n":"\tLogin successfully. Admin mode is off.\n");
  324.         }
  325.         users=users->next;
  326.     }
  327.     return "\tError, invalid login or password.\n";
  328. }
  329.  
  330. book* getBookByID(int id){
  331.     while(books->prev) books=books->prev;
  332.     while(books->next){
  333.         if(books->next->id==id){
  334.             return books->next;
  335.         }else{
  336.             books=books->next;
  337.         }
  338.     }
  339.     return null;
  340. }
  341.  
  342. void resetIDs(int firstID){
  343.     while(books->prev) books=books->prev;
  344.     while(books->next){
  345.         books->id=firstID;
  346.         books=books->next;
  347.         firstID++;
  348.     }
  349.     books->id=firstID;
  350. }
  351.  
  352. void swap(book* a,book* b){
  353.     book temp = *a;
  354.  
  355.     a->authors = b->authors;
  356.     a->authorsNumber = b->authorsNumber;
  357.     a->birthyear = b->birthyear;
  358.     a->name = b->name;
  359.     a->price = b->price;
  360.     a->publishing = b->publishing;
  361.    
  362.     b->authors = temp.authors;
  363.     b->authorsNumber = temp.authorsNumber;
  364.     b->birthyear = temp.birthyear;
  365.     b->name = temp.name;
  366.     b->price = temp.price;
  367.     b->publishing = temp.publishing;
  368. }
  369.  
  370. char* sortList(){
  371.     resetIDs(0);
  372.     for(int i=1;i<=bookNumber;i++){
  373.         for(int j=i+1;j<=bookNumber;j++){
  374.             book* a = getBookByID(i);
  375.             book* b = getBookByID(j);
  376.             if(strcmp(a->name,b->name)==1){
  377.                 swap(a,b);
  378.             }
  379.         }
  380.     }
  381.     for(int i=1;i<=bookNumber;i++){
  382.         for(int j=i+1;j<=bookNumber;j++){
  383.             book* a = getBookByID(i);
  384.             book* b = getBookByID(j);
  385.             if(a->birthyear>b->birthyear){
  386.                 swap(a,b);
  387.             }
  388.         }
  389.     }
  390.     resetIDs(0);
  391.  
  392.     file* booksFile = fopen(booksPath,"wb");
  393.    
  394.     while(books->prev) books = books->prev;
  395.     while(books->next){
  396.  
  397.         fwrite(books->next->name,1,256,booksFile);
  398.         fwrite(books->next->publishing,1,256,booksFile);
  399.  
  400.         fwrite(&books->next->birthyear,1,4,booksFile);
  401.         fwrite(&books->next->price,1,4,booksFile);
  402.         fwrite(&books->next->authorsNumber,1,4,booksFile);
  403.  
  404.         for(int i=0;i<books->next->authorsNumber;i++){
  405.             fwrite(books->next->authors[i],1,256,booksFile);
  406.         }  
  407.  
  408.         books = books->next;
  409.     }
  410.     fclose(booksFile);
  411.  
  412.     return "\tSorted successfully.\n";
  413. }
  414.  
  415. char* addBook(){
  416.     if(!currentUser) return "\tAccess denied. Please, login before.\n";
  417.     if(!currentUser->admin) return "\tAccess denied. You need admin rights to add the book.\n";
  418.  
  419.     book* newBook = new book;
  420.    
  421.     newBook->name = new char[256];
  422.     newBook->publishing = new char[256];
  423.    
  424.     cout<<"\tName: "; cin>>newBook->name;
  425.     cout<<"\tAuthors number: ";  cin>>newBook->authorsNumber;
  426.    
  427.     newBook->authors = new char*[newBook->authorsNumber];
  428.     for(int i=0;i<newBook->authorsNumber;i++){
  429.         newBook->authors[i] = new char[256];
  430.         cout<<"\t\t"<<i+1<<". Author: ";
  431.         cin>>newBook->authors[i];
  432.     }
  433.  
  434.     cout<<"\tPublishing: "; cin>>newBook->publishing;
  435.     cout<<"\tYear: "; cin>>newBook->birthyear;
  436.     cout<<"\tPrice: "; cin>>newBook->price;
  437.  
  438.     while(books->next) books=books->next;
  439.  
  440.     newBook->prev = books;
  441.     newBook->next = books->next;
  442.     if(books->next) books->next->prev=newBook;
  443.     books->next = newBook;
  444.  
  445.     resetIDs(0);
  446.  
  447.     file* booksFile = fopen(booksPath,"ab");
  448.    
  449.     fwrite(newBook->name,1,256,booksFile);
  450.     fwrite(newBook->publishing,1,256,booksFile);
  451.  
  452.     fwrite(&newBook->birthyear,1,4,booksFile);
  453.     fwrite(&newBook->price,1,4,booksFile);
  454.     fwrite(&newBook->authorsNumber,1,4,booksFile);
  455.  
  456.     for(int i=0;i<newBook->authorsNumber;i++){
  457.         fwrite(newBook->authors[i],1,256,booksFile);
  458.     }
  459.        
  460.     fclose(booksFile);
  461.  
  462.     bookNumber++;
  463.     return "\tBook added successfully.\n";
  464. }
  465.  
  466. char* deleteBook(){
  467.     if(!currentUser) return "\tAccess denied. Please, login before.\n";
  468.     if(!currentUser->admin) return "\tAccess denied. You need admin rights to add the book.\n";
  469.  
  470.     book* bookForDelete = null;
  471.     char* bookName = new char[256];
  472.    
  473.     cout<<"\tBook title: ";
  474.     cin>>bookName;
  475.  
  476.     while(books->prev) books = books->prev;
  477.     while(books->next){
  478.         if(!strcmp(books->next->name,bookName)){
  479.             bookForDelete = books->next;
  480.             break;
  481.         }
  482.         books = books->next;
  483.     }
  484.     if(!bookForDelete) return "\tWrong book title.\n";
  485.     if(bookForDelete->next) bookForDelete->next->prev = bookForDelete->prev;
  486.     if(bookForDelete->prev) bookForDelete->prev->next = bookForDelete->next;
  487.    
  488.     delete[] bookForDelete->name;
  489.     delete[] bookForDelete->publishing;
  490.  
  491.     for(int i=0;i<bookForDelete->authorsNumber;i++){
  492.         delete[] bookForDelete->authors[i];
  493.     }
  494.     delete[] bookForDelete->authors;
  495.  
  496.     delete bookForDelete;
  497.  
  498.     file* booksFile = fopen(booksPath,"wb");
  499.    
  500.     while(books->prev) books = books->prev;
  501.     while(books->next){
  502.  
  503.         fwrite(books->next->name,1,256,booksFile);
  504.         fwrite(books->next->publishing,1,256,booksFile);
  505.  
  506.         fwrite(&books->next->birthyear,1,4,booksFile);
  507.         fwrite(&books->next->price,1,4,booksFile);
  508.         fwrite(&books->next->authorsNumber,1,4,booksFile);
  509.  
  510.         for(int i=0;i<books->next->authorsNumber;i++){
  511.             fwrite(books->next->authors[i],1,256,booksFile);
  512.         }  
  513.  
  514.         books = books->next;
  515.     }
  516.     fclose(booksFile);
  517.     resetIDs(0);
  518.     return "\tBook deleted successfully.\n";
  519. }
  520.  
  521. void trace(){
  522.     if(!currentUser){
  523.         cout<<"\tAccess denied. Please, login before.\n";
  524.     }else{
  525.         while(books->prev) books = books->prev;
  526.         while(books->next){
  527.             cout<<"\t"<<books->next->id<<". "<<books->next->name<<"\n";
  528.             cout<<"\t   Authors:\n";
  529.             for(int i=0;i<books->next->authorsNumber;i++){
  530.                 cout<<"\t\t"<<i+1<<". "<<books->next->authors[i]<<"\n";
  531.             }
  532.            
  533.             cout<<"\t   Year: "<<books->next->birthyear<<"\n";
  534.             cout<<"\t   Price: "<<books->next->price<<"\n";
  535.             cout<<"\t   Publishing: "<<books->next->publishing<<"\n";
  536.            
  537.             books = books->next;
  538.         }
  539.     }
  540. }
  541.  
  542. void tracePublishings(int type){
  543.     if(!currentUser){
  544.         cout<<"\tAccess denied. Please, login before.\n";
  545.     }else{
  546.         publishing * publishings = new publishing;
  547.  
  548.         publishings->name = new char[256];
  549.  
  550.         publishings->next = null;
  551.         publishings->prev = null;
  552.  
  553.         while(books->prev) books = books->prev;
  554.         while(books->next){
  555.             bool firstFlag = true;
  556.             while(publishings->prev) publishings = publishings->prev;
  557.             while(publishings->next){
  558.                 if(!strcmp(publishings->next->name, books->next->publishing)){
  559.                    
  560.                     book* newBook = new book;
  561.                     *newBook = *books->next;
  562.  
  563.                     newBook->next = publishings->next->books->next;
  564.                     newBook->prev = publishings->next->books;
  565.                     if(publishings->next->books->next) publishings->next->books->next->prev = newBook;
  566.                     publishings->next->books->next = newBook;
  567.  
  568.                     publishings->next->booksNumber++;
  569.  
  570.                     for(int i=0;i<books->next->authorsNumber;i++){
  571.                         bool secondFlag = true;
  572.                         while(publishings->next->authors->prev) publishings->next->authors = publishings->next->authors->prev;
  573.                         while(publishings->next->authors->next){
  574.                            
  575.                             if(!strcmp(publishings->next->authors->next->name, books->next->authors[i])){
  576.                                 secondFlag = false;
  577.                                 break;
  578.                             }
  579.                             publishings->next->authors = publishings->next->authors->next;
  580.                         }
  581.                         if(secondFlag){
  582.                             author* newAuthor = new author;
  583.                            
  584.                             newAuthor->name = new char[256];
  585.                             strcpy(newAuthor->name, books->next->authors[i]);
  586.                            
  587.                             publishings->next->authorsNumber++;
  588.                            
  589.                             newAuthor->next = publishings->next->authors->next;
  590.                             newAuthor->prev = publishings->next->authors;
  591.                             if(publishings->next->authors->next) publishings->next->authors->next->prev = newAuthor;
  592.                             publishings->next->authors->next = newAuthor;
  593.                         }
  594.                     }
  595.                     firstFlag = false;
  596.                     break;
  597.                 }
  598.  
  599.                 publishings = publishings->next;
  600.             }
  601.             if(firstFlag){
  602.                 publishing * newPublishing = new publishing;
  603.                
  604.                 newPublishing->name = new char[256];
  605.                 newPublishing->authorsNumber = 0;
  606.                                
  607.  
  608.                 newPublishing->books = new book;
  609.                 *newPublishing->books = *books->next;
  610.                 newPublishing->books->next = null;
  611.                 newPublishing->books->prev = null;         
  612.                 newPublishing->booksNumber = 1;
  613.  
  614.                 newPublishing->authors = new author;
  615.                
  616.                 newPublishing->authors->next = null;
  617.                 newPublishing->authors->prev = null;
  618.  
  619.                 strcpy(newPublishing->name, books->next->publishing);
  620.  
  621.                 for(int i=0;i<books->next->authorsNumber;i++){
  622.                     author* newAuthor = new author;
  623.                    
  624.                     newAuthor->name = new char[256];
  625.                     strcpy(newAuthor->name, books->next->authors[i]);
  626.  
  627.                     newPublishing->authorsNumber++;
  628.  
  629.                     newAuthor->next = newPublishing->authors->next;
  630.                     newAuthor->prev = newPublishing->authors;
  631.                     if(newPublishing->authors->next) newPublishing->authors->next->prev = newAuthor;
  632.                     newPublishing->authors->next = newAuthor;
  633.                 }
  634.  
  635.                 newPublishing->next = publishings->next;
  636.                 newPublishing->prev = publishings;
  637.                 if(publishings->next) publishings->next->prev = newPublishing;
  638.                 publishings->next = newPublishing;
  639.             }
  640.             books = books->next;
  641.         }
  642.  
  643.         ///// out
  644.        
  645.         if(type==0){
  646.             int i = 0;
  647.             while(publishings->prev) publishings = publishings->prev;
  648.             while(publishings->next){  
  649.                 if(publishings->next->authorsNumber>1){
  650.                     i++;
  651.                     cout<<"\t"<<i<<". "<<publishings->next->name<<"\n";
  652.                     while(publishings->next->authors->prev) publishings->next->authors = publishings->next->authors->prev;
  653.                     while(publishings->next->authors->next){
  654.                         cout<<"\t\t- "<<publishings->next->authors->next->name<<"\n";
  655.                         publishings->next->authors = publishings->next->authors->next;
  656.                     }
  657.                 }
  658.                 publishings = publishings->next;
  659.             }
  660.         }else if(type==1){
  661.             while(publishings->prev) publishings = publishings->prev;
  662.             for(int i=1;publishings->next;i++){
  663.                 cout<<"\t"<<i<<". "<<publishings->next->name<<" - "<<publishings->next->booksNumber;
  664.                 if(publishings->next->booksNumber<2){
  665.                     cout<<" book.\n";
  666.                 }else{
  667.                     cout<<" books.\n";
  668.                 }
  669.  
  670.                 while(publishings->next->books->prev) publishings->next->books = publishings->next->books->prev;
  671.                 for(int i=0;i<publishings->next->booksNumber;publishings->next->books = publishings->next->books->next, i++){
  672.                     cout<<"\t\t"<<i+1<<". "<<publishings->next->books->name<<"\n";
  673.                 }
  674.  
  675.                 publishings = publishings->next;
  676.             }
  677.         }else{
  678.             int begin;
  679.             int end;
  680.  
  681.             cout<<"\tBegin year: ";
  682.             cin>>begin;
  683.             cout<<"\tEnd year: ";
  684.             cin>>end;
  685.  
  686.             cout<<"\n\tPublishings:\n";
  687.  
  688.             while(publishings->prev) publishings = publishings->prev;
  689.             while(publishings->next){
  690.                 bool leftFlag = true;
  691.                 for(int i=begin;i<=end;i++){
  692.                     bool rightFlag = true;
  693.                     while(publishings->next->books->prev) publishings->next->books = publishings->next->books->prev;
  694.                     for(int j=0;j<publishings->next->booksNumber;j++){
  695.                         if(publishings->next->books->birthyear==i){
  696.                             rightFlag = false;
  697.                             break;
  698.                         }
  699.                         publishings->next->books = publishings->next->books->next;
  700.                     }
  701.                     if(rightFlag){
  702.                         leftFlag = false;
  703.                         break;
  704.                     }
  705.                 }
  706.                 if(leftFlag){
  707.                     cout<<"\t\t - "<<publishings->next->name<<"\n";
  708.                 }
  709.                 publishings = publishings->next;
  710.             }
  711.         }
  712.        
  713.         //деструктор
  714.         //while(publishings->prev) publishings = publishings->prev;
  715.         //delete publishings;
  716.     }
  717. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement