jncrusher

Untitled

May 30th, 2012
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <typeinfo>
  5. #include <cstdio>
  6. #include <iostream>
  7. #include <fstream>
  8.  
  9.  
  10. using namespace std;
  11. class srodek;
  12.  
  13. class samochod {
  14. public:
  15.     double cena;
  16.     char rodzaj_silnika[20];
  17.    
  18. public:
  19.     friend srodek;
  20.     static int x;
  21.     virtual void wyswietl_atrybuty() {
  22.         printf("\n");
  23.         printf("Cena wynosi:%g\n",cena);
  24.         printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
  25.     };
  26.     samochod *nast;
  27.  
  28.  
  29.     samochod::samochod(){
  30.         char rdz[20]="brak";
  31.         cena=0;
  32.         strcpy(rodzaj_silnika, rdz);
  33.         nast=NULL;
  34.         x=++x;
  35.     }
  36.     samochod::samochod(double a, char b[20]){
  37.         cena=a;
  38.         strcpy(rodzaj_silnika, b);
  39.         nast=NULL;
  40.         x=++x;
  41.     }
  42.     virtual~samochod(){
  43.         if(nast!=NULL){
  44.             x=--x;
  45.         }
  46.  
  47.     }
  48. };
  49. class ciezarowy;
  50.  
  51. class osobowy: public samochod{
  52. public:
  53.     double poj_bagaznika;
  54.     int liczba_drzwi;
  55.     char typ_sylwetki[20];
  56. public:
  57.     friend ciezarowy;
  58.     void ustal_atrybuty() {
  59.         double cn;
  60.         char rodzaj[20];
  61.         double poj;
  62.         int liczba;
  63.         char typ[20];
  64.         printf("Cena=");
  65.         scanf("%lf",&cn);
  66.         printf("Rodzaj silnika=");
  67.         scanf("%s",&rodzaj);
  68.         printf("Pojemnosc bagaznika=");
  69.         scanf("%lf",&poj);
  70.         printf("Liczba drzwi=");
  71.         scanf("%d",&liczba);
  72.         printf("Typ sylwetki=");
  73.         scanf("%s",&typ);
  74.         cena=cn;
  75.         strcpy(rodzaj_silnika, rodzaj);
  76.         poj_bagaznika=poj;
  77.         liczba_drzwi=liczba;
  78.         strcpy(typ_sylwetki, typ);
  79.     };
  80.     void wyswietl_atrybuty() {
  81.         printf("\n");
  82.         printf("Cena wynosi:%g\n",cena);
  83.         printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
  84.         printf("Pojemnosc bagaznika:%g\n",poj_bagaznika);
  85.         printf("Liczba drzwi:%d\n",liczba_drzwi);
  86.         printf("Typ sylwetki:%s\n",typ_sylwetki);  
  87.     };
  88.  
  89.     osobowy operator+(osobowy drugi){
  90.         osobowy suma;
  91.         suma.cena=cena+drugi.cena;
  92.         suma.poj_bagaznika=poj_bagaznika+drugi.poj_bagaznika;
  93.         suma.liczba_drzwi=liczba_drzwi+drugi.liczba_drzwi;
  94.         return suma;
  95.     };
  96.     osobowy& operator+=(const osobowy& rv){
  97.         cena+=rv.cena;
  98.         poj_bagaznika+=rv.poj_bagaznika;
  99.         liczba_drzwi+=rv.liczba_drzwi; 
  100.         return *this;
  101.     };
  102.     const osobowy operator=(const osobowy& rv){
  103.         cena=rv.cena;
  104.         poj_bagaznika=rv.poj_bagaznika;
  105.         liczba_drzwi=rv.liczba_drzwi;  
  106.         return *this;
  107.     };
  108.  
  109.  
  110.     osobowy::osobowy(){
  111.         samochod::samochod();
  112.         char tp[20]="brak";
  113.         poj_bagaznika=0;
  114.         liczba_drzwi=3;
  115.         strcpy(typ_sylwetki, tp);
  116.         nast=NULL;
  117.  
  118.     }
  119.     osobowy(double a, char b[20], double c, int d, char e[20]):samochod(a,b){
  120.  
  121.         poj_bagaznika=c;
  122.         liczba_drzwi=d;
  123.         strcpy(typ_sylwetki, e);
  124.         wyswietl_atrybuty();
  125.         nast=NULL;
  126.  
  127.     }
  128.     osobowy(const ciezarowy& rv);
  129.  
  130.     ~osobowy(){
  131.         if(nast!=NULL){
  132.  
  133.             x=--x;
  134.             printf("Typ obiektu:%s\n","osobowy");
  135.             printf("Pole statyczne: %d\n",x);
  136.             delete nast;
  137.         }
  138.     }
  139. };
  140.  
  141. class ciezarowy: public samochod{
  142. public:
  143.     double max_ladownosc;
  144.     int liczba_kol;
  145. public:
  146.     friend osobowy;
  147.     void ustal_atrybuty() {
  148.         double cn;
  149.         char rodzaj[20];
  150.         double ladownosc;
  151.         int kola;
  152.         printf("Cena=");
  153.         scanf("%lf",&cn);
  154.         printf("Rodzaj silnika=");
  155.         scanf("%s",&rodzaj);
  156.         printf("Maksymalna ladownosc=");
  157.         scanf("%lf",&ladownosc);
  158.         printf("Liczba kol=");
  159.         scanf("%d",&kola);
  160.         cena=cn;
  161.         strcpy(rodzaj_silnika, rodzaj);
  162.         max_ladownosc=ladownosc;
  163.         liczba_kol=kola;
  164.  
  165.     };
  166.     void wyswietl_atrybuty() {
  167.         printf("\n");
  168.         printf("Cena wynosi:%g\n",cena);
  169.         printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
  170.         printf("Maksymalna ladownosc:%g.\n",max_ladownosc);
  171.         printf("Liczba kol:%d.\n",liczba_kol);
  172.     }
  173.     ciezarowy operator+(ciezarowy drugi){
  174.         ciezarowy suma;
  175.         suma.cena=cena+drugi.cena;
  176.         suma.max_ladownosc=max_ladownosc+drugi.max_ladownosc;
  177.         suma.liczba_kol=liczba_kol+drugi.liczba_kol;
  178.         return suma;
  179.     };
  180.     const ciezarowy operator=(const ciezarowy& rv){
  181.         cena=rv.cena;
  182.         max_ladownosc=rv.max_ladownosc;
  183.         liczba_kol=rv.liczba_kol;  
  184.         return *this;
  185.     };
  186.     const ciezarowy operator+=(const ciezarowy& rv){
  187.         cena+=rv.cena;
  188.         max_ladownosc+=rv.max_ladownosc;
  189.         liczba_kol+=rv.liczba_kol; 
  190.         return *this;
  191.     };
  192.     ciezarowy::ciezarowy(){
  193.         samochod::samochod();
  194.         max_ladownosc=0;
  195.         liczba_kol=4;  
  196.         nast=NULL;
  197.     }
  198.     ciezarowy(double a, char b[20], double c, int d):samochod(a,b){
  199.         max_ladownosc=c;
  200.         liczba_kol=d;
  201.         wyswietl_atrybuty();
  202.         nast=NULL;
  203.  
  204.     }
  205.     ciezarowy(const osobowy& rv){
  206.         cena=rv.cena;
  207.         max_ladownosc=rv.poj_bagaznika;
  208.         liczba_kol=rv.liczba_drzwi;
  209.     }
  210.    
  211.    
  212.    
  213.    
  214.     ~ciezarowy(){
  215.         if(nast!=NULL){
  216.             x=--x;
  217.             printf("Typ obiektu:%s\n","ciezarowy");
  218.             printf("Pole statyczne: %d\n",x);
  219.             delete nast;
  220.         }
  221.     }
  222.  
  223.  
  224. };
  225.  
  226. int samochod::x = 9;
  227. samochod *glowa=NULL;
  228. samochod *wsk=NULL;
  229.  
  230. void fun_rozpoznajaca(samochod **wskaznik){
  231.     if (typeid(*wsk) == typeid(osobowy))
  232.         printf("Kolejny element jest typu osobowy.\n");
  233.     else if (typeid(*wsk) == typeid(ciezarowy))
  234.         printf("Kolejny element jest typu ciezarowy.\n");
  235.  
  236.  
  237.  
  238. }
  239. osobowy::osobowy(const ciezarowy& rv){
  240.     cena=rv.cena;
  241.     poj_bagaznika=rv.max_ladownosc;
  242.     liczba_drzwi=rv.liczba_kol;
  243. }
  244.  
  245.  
  246. struct nag{
  247. public:
  248.     char miasto[30];
  249.     char data[30];
  250.     char raport[30];
  251. };
  252.  
  253.  
  254. class naglowek{
  255.     char miasto[30];
  256.     char data[30];
  257.     char raport[30];
  258. public:
  259.    
  260.     naglowek(struct nag &s){
  261.         strcpy(this->miasto,s.miasto);
  262.         strcpy(this->data,s.data);
  263.         strcpy(this->raport,s.raport);
  264.     }
  265.    
  266.     friend ostream& operator<<(ostream& plik, naglowek& na){
  267.         plik << "\t";
  268.         plik << na.miasto;
  269.         plik << na.data;
  270.         plik << endl;
  271.         plik << "\t\t";
  272.         plik << na.raport;
  273.        
  274.         return plik;
  275.    
  276.    
  277.     }
  278.  
  279. };
  280.  
  281.  
  282. ostream& tab(ostream& plik){
  283.  
  284.     plik << "Lp.";
  285.     plik << '\t';
  286.     plik << "cena";
  287.     plik << '\t';
  288.     plik << "silnik";
  289.     plik << '\t';
  290.     plik << "bagaznik";
  291.     plik << '\t';
  292.     plik << "drzwi";
  293.     plik << '\t';
  294.     plik << "typ";
  295.     plik << '\t';
  296.     plik << "ladownosc";
  297.     plik << '\t';
  298.     plik << "kola";
  299.     plik << endl;
  300.     plik << "====================================================================";
  301.  
  302.     return plik;
  303. }
  304.  
  305. static int a=1;
  306.  
  307. class srodek {
  308. public:
  309.     samochod *wsk;
  310.    
  311.     srodek(samochod *wsk){
  312.         this->wsk=wsk;
  313.     }
  314.  
  315.     friend ostream& operator<<(ostream& plik,srodek& sr){
  316.         while(sr.wsk!=NULL){
  317.             if(typeid (*(sr).wsk)==typeid(osobowy)){
  318.                 osobowy *o=(osobowy*)sr.wsk;
  319.                 plik << a;
  320.                 plik << "\t";
  321.                 plik << o->cena;
  322.                 plik << "\t";
  323.                 plik << o->rodzaj_silnika;
  324.                 plik << "\t";
  325.                 plik << o->poj_bagaznika;
  326.                 plik << "\t";
  327.                 plik << o->liczba_drzwi;
  328.                 plik << "\t";
  329.                 plik << o->typ_sylwetki;
  330.                 plik << "\t";
  331.                 plik << endl;
  332.                 a++;
  333.  
  334.             }
  335.             else if(typeid(*(sr).wsk)==typeid(ciezarowy)){
  336.                 ciezarowy *c=(ciezarowy*)sr.wsk;
  337.                 plik << a;
  338.                 plik << '\t';
  339.                 plik << c->cena;
  340.                 plik << '\t';
  341.                 plik << c->rodzaj_silnika;
  342.                 plik << '\t'<<'\t'<<'\t'<<'\t';
  343.                 plik << c->max_ladownosc;
  344.                 plik << '\t'<<'\t';
  345.                 plik << c->liczba_kol;
  346.                 plik << '\t';
  347.                 plik << endl;
  348.                 a++;
  349.             }
  350.             sr.wsk=(sr.wsk)->nast;
  351.         }
  352.         plik << endl;
  353.         plik << "====================================================================";
  354.         return plik;
  355.  
  356.     }
  357.  
  358. };
  359.  
  360.  
  361. int main() {
  362.    
  363.     fstream plik;
  364.     char nazwa[30];
  365.  
  366.     int wybor;
  367.     int wybor1;
  368.     printf("Czy chcesz dodac kolejny element? 1-tak, 2-nie:");
  369.     scanf("%d",&wybor1);
  370.     while (wybor1==1){
  371.         printf("Jaki samochod chcesz dodac: 1-osobowy, 2-ciezarowy:");
  372.         scanf("%d",&wybor);
  373.         samochod *nowy;
  374.         if(wybor==1){
  375.            
  376.             nowy=new osobowy (234.8,"benzyna",2.3,3,"combi");;
  377.        
  378.         }
  379.         if(wybor==2){
  380.             nowy=new ciezarowy (279.1, "ON", 60.7, 8);
  381.         }
  382.        
  383.         if(glowa==NULL){
  384.            glowa=wsk=nowy;
  385.         }
  386.         else{
  387.            wsk->nast=nowy;
  388.            wsk = wsk->nast;
  389.         }
  390.        
  391.         printf("Czy chcesz dodac kolejny element? 1-tak, 2-nie:");
  392.         scanf("%d",&wybor1);       
  393.     }
  394.    
  395.     wsk=glowa;
  396.    
  397.     while(wsk!=NULL){
  398.         wsk->wyswietl_atrybuty();
  399.         wsk=wsk->nast;
  400.     }
  401.     //podanie nazwy pliku
  402.     //printf("Podaj nazwe pliku");
  403.     //scanf("%s",&nazwa);
  404.     nag s;
  405.     strcpy(s.miasto,"Warszawa,");
  406.     strcpy(s.data,"23.05.12 ");
  407.     strcpy(s.raport,"Raport o stanie samochodow ");
  408.     wsk=glowa;
  409.    
  410.     plik.open("samochody.txt",ios::out);
  411.     if(plik.good()){
  412.         //plik << naglowek(glowa);
  413.         plik << "\t\t\t\t";
  414.         plik << naglowek(s);
  415.         plik << endl;
  416.         plik << tab;
  417.         plik << endl;
  418.         plik << srodek(glowa);
  419.  
  420.    
  421.     }
  422.    
  423.  
  424. delete glowa;
  425.  
  426.  
  427.     getchar();
  428.     getchar();
  429.  
  430.     return 0;
  431.  
  432. };
Advertisement
Add Comment
Please, Sign In to add comment