Advertisement
Dzaco

lab11 - konstruktory, listy, dziedziczenie

May 6th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.18 KB | None | 0 0
  1. // wejsciowka 11
  2. // Jacek Giedronowicz
  3. #include "stdafx.h"
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <stdlib.h>
  7. using namespace std;
  8.  
  9.  
  10. class MojaKlasa {
  11.     char **email;
  12.     int ile;
  13. public:
  14.     int ID;
  15.     MojaKlasa(int x);
  16.     MojaKlasa(MojaKlasa& mk);   // konstruktor kopiujący
  17.     ~MojaKlasa();               //destruktor
  18.     void setemail(char* adres, int idx) { strcpy_s(email[idx], 100, adres); };
  19.     char* getemail(int idx) { return email[idx]; };
  20.     void wypisz();
  21.  
  22.     MojaKlasa* szukaj( int id );
  23.     MojaKlasa * nast;
  24. };
  25.  
  26. void MojaKlasa::wypisz()
  27. {
  28.     for (int i = 0; i < ile; i++)
  29.     {
  30.         printf("%s\n", getemail(i));
  31.     }
  32.  
  33. }
  34.  
  35. MojaKlasa::MojaKlasa(int x) //konstruktor
  36. {
  37.     email = new char*[ile = x];
  38.     for (int i = 0; i<ile; i++) email[i] = new char[100];
  39.     nast = NULL;
  40. }
  41.  
  42. MojaKlasa::MojaKlasa(MojaKlasa& mk) // konstruktor kopiujacy
  43. {
  44.     email = new char*[mk.ile];
  45.     ile = mk.ile;
  46.     ID = mk.ID;
  47.     for (int i = 0; i < ile; i++)
  48.     {
  49.         email[i] = new char[100];
  50.         strcpy_s(email[i], 100, mk.email[i]);
  51.     }
  52. };
  53.  
  54. MojaKlasa::~MojaKlasa()
  55. {
  56.     for (int i = 0; i < ile; i++) { delete[] email[i]; }
  57.     delete[] email;
  58.     delete nast;
  59. }
  60.  
  61. MojaKlasa* MojaKlasa::szukaj( int id )
  62. {
  63.     if ( ID == id )
  64.     {
  65.         return this;
  66.     }
  67.     else
  68.     {
  69.         if ( nast != NULL )
  70.         {
  71.             return nast->szukaj(id);
  72.         }
  73.         else
  74.         {
  75.             return NULL;
  76.         }
  77.     }
  78. }
  79.  
  80. //-----------------------------------------------------------------------------------
  81.  
  82.  
  83. class Pracownik
  84. {
  85. public:
  86.     MojaKlasa * glowa;              // wskaznik na liste dynamiczna z email klasy
  87.     void wypisz();
  88.  
  89.     ~Pracownik();
  90. };
  91.  
  92. void Pracownik::wypisz()
  93. {
  94.     if (glowa == NULL)
  95.     {
  96.         printf("Ten wykladowca nie posiada swojej klasy\n\n");
  97.     }
  98.     else
  99.     {
  100.         MojaKlasa * wsk;
  101.         wsk = glowa;
  102.         int i = 0;
  103.         while (wsk != NULL)
  104.         {
  105.             i++;
  106.             printf("Klasa %d:\n", wsk->ID);
  107.             wsk->wypisz();
  108.             wsk = wsk->nast;
  109.             printf("\n");
  110.         }
  111.     }
  112. }
  113.  
  114. Pracownik::~Pracownik()
  115. {
  116.     delete glowa;
  117. }
  118.  
  119. //--------------------------------------------------------
  120.  
  121.  
  122. class Wykladowca: public Pracownik
  123. {
  124. public:
  125.     Wykladowca();                   // konstruktor domyslny
  126.     Wykladowca(char nazwa[20]);     // konstruktor z nazwa do pliku z email
  127.     Wykladowca(Wykladowca & wk);    // konstruktor kopiujacy
  128.  
  129.     void dodaj_klase(char nazwa[20]);
  130.     MojaKlasa* szukaj(int id);
  131. };
  132.  
  133. void Wykladowca::dodaj_klase(char nazwa[20])
  134. {
  135.     FILE * stream;
  136.     errno_t err;
  137.  
  138.     err = fopen_s(&stream, nazwa, "r");
  139.  
  140.  
  141.     if (err != 0)
  142.     {
  143.         printf("Nie mozna otworzyc pliku %s\n", nazwa);
  144.         exit(0);
  145.     }
  146.  
  147.     int ile = 0;
  148.     char mail[20];
  149.     while (!feof(stream))
  150.     {
  151.         fscanf_s(stream, "%s", mail, 20);
  152.         ile++;
  153.     }
  154.  
  155.     rewind(stream);
  156.  
  157.     MojaKlasa * wsk;
  158.     wsk = glowa;
  159.     int pID = 1;
  160.     if (glowa == NULL)
  161.     {
  162.         glowa = wsk = new MojaKlasa(ile);
  163.         wsk->ID = pID;
  164.         for (int i = 0; i < ile; i++)
  165.         {
  166.             fscanf_s(stream, "%s", mail, 20);
  167.             glowa->setemail(mail, i);
  168.         }
  169.     }
  170.     else
  171.     {
  172.         while ( wsk->nast != NULL )
  173.         {
  174.             wsk = wsk->nast;
  175.             pID++;
  176.         }
  177.  
  178.         wsk->nast = new MojaKlasa(ile);
  179.         wsk = wsk->nast;
  180.         wsk->ID = ++pID;
  181.         for (int i = 0; i < ile; i++)
  182.         {
  183.             fscanf_s(stream, "%s", mail, 20);
  184.             wsk->setemail(mail, i);
  185.         }
  186.     }
  187.  
  188.  
  189.     fclose(stream);
  190.  
  191. }
  192.  
  193. Wykladowca::Wykladowca()
  194. {
  195.     glowa = NULL;
  196. }
  197.  
  198. Wykladowca::Wykladowca(char nazwa[20])
  199. {
  200.     dodaj_klase(nazwa);
  201. }
  202.  
  203. Wykladowca::Wykladowca(Wykladowca & wk)
  204. {
  205.     MojaKlasa * wsk;
  206.     glowa = new MojaKlasa(*wk.glowa);
  207.     wsk = glowa;
  208.     MojaKlasa *wsk2;
  209.     wsk2 = wk.glowa;
  210.     wsk2 = wsk2->nast;
  211.  
  212.     while (wsk2 != NULL)
  213.     {
  214.         wsk->nast = new MojaKlasa(*wsk2);
  215.         wsk = wsk->nast;
  216.         wsk2 = wsk2->nast;
  217.     }
  218. }
  219.  
  220. MojaKlasa* Wykladowca::szukaj(int id)
  221. {
  222.     MojaKlasa* wsk;
  223.     wsk = glowa;
  224.  
  225.     if (wsk != NULL)
  226.     {
  227.         wsk = glowa->szukaj(id);
  228.         return wsk;
  229.     }
  230.     else
  231.     {
  232.         printf("Nie znaleziono klasy o danym ID\n");
  233.         exit(1);
  234.     }
  235.    
  236. }
  237.  
  238. //---------------------------------------------------------------
  239.  
  240.  
  241.  
  242. int main()
  243. {
  244.     char nazwa[20] = "klasa1.txt";
  245.     Wykladowca W(nazwa);
  246.    
  247.     strcpy_s(nazwa, 20, "klasa2.txt");
  248.     W.dodaj_klase(nazwa);
  249.  
  250.     strcpy_s(nazwa, 20, "klasa3.txt");
  251.     W.dodaj_klase(nazwa);
  252.  
  253.     strcpy_s(nazwa, 20, "klasa4.txt");
  254.     W.dodaj_klase(nazwa);
  255.  
  256.     strcpy_s(nazwa, 20, "klasa5.txt");
  257.     W.dodaj_klase(nazwa);
  258.  
  259.  
  260.     W.szukaj(2)->wypisz();
  261.  
  262.  
  263.     return 0;
  264. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement