Advertisement
Dzaco

wej10 - obiektowe listy dynamiczne

Apr 29th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. // wejsciowka10.cpp.cpp : Defines the entry point for the console application.
  2. // Jacek Giedronowicz
  3. #include "stdafx.h"
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <stdlib.h>
  7. using namespace std;
  8.  
  9. class MojaKlasa {
  10.     char **email;
  11.     int ile;
  12. public:
  13.     MojaKlasa(int x);
  14.     MojaKlasa(MojaKlasa& mk);   // konstruktor kopiujący
  15.     ~MojaKlasa();               //destruktor
  16.     void setemail(char* adres, int idx) { strcpy_s(email[idx], 100, adres); };
  17.     char* getemail(int idx) { return email[idx]; };
  18.     void wypisz();
  19.     MojaKlasa * nast;
  20. };
  21.  
  22. void MojaKlasa::wypisz()
  23. {
  24.     for (int i = 0; i < ile; i++)
  25.     {
  26.         printf("%s\n" , getemail(i) );
  27.     }
  28.  
  29. }
  30.  
  31. MojaKlasa::MojaKlasa(int x) //konstruktor
  32. {
  33.     email = new char*[ile = x];
  34.     for (int i = 0; i<ile; i++) email[i] = new char[100];
  35.     nast = NULL;
  36. }
  37.  
  38. MojaKlasa::MojaKlasa(MojaKlasa& mk) // konstruktor kopiujacy
  39. {
  40.     email = new char*[mk.ile];
  41.     ile = mk.ile;
  42.     for (int i = 0; i < ile; i++)
  43.     {
  44.         email[i] = new char[100];
  45.         strcpy_s(email[i], 100, mk.email[i]);
  46.     }
  47. };
  48.  
  49. MojaKlasa::~MojaKlasa()
  50. {
  51.     printf("Destruktor MojaKlasa\n");
  52.     for ( int i = 0; i < ile; i ++) { delete[] email[i]; }
  53.     delete[] email;
  54.     delete nast;
  55.    
  56. }
  57.  
  58. //-----------------------------------------------------------------------------------
  59.  
  60. class Wykladowca
  61. {
  62. public:
  63.     MojaKlasa * glowa;              // wskaznik na liste dynamiczna z email klasy
  64.     MojaKlasa * wsk;
  65.     Wykladowca();                   // konstruktor domyslny
  66.     Wykladowca( char nazwa[20] );   // konstruktor z nazwa do pliku z email
  67.     Wykladowca( Wykladowca & wk );  // konstruktor kopiujacy
  68.     ~Wykladowca();                  // destruktor
  69.  
  70.     void dodaj_klase( char nazwa[20] );
  71.     void wypisz();
  72. };
  73.  
  74. void Wykladowca::dodaj_klase(char nazwa[20])
  75. {
  76.     FILE * stream;
  77.     errno_t err;
  78.  
  79.     err = fopen_s(&stream, nazwa, "r");
  80.  
  81.  
  82.     if (err != 0)
  83.     {
  84.         printf("Nie mozna otworzyc pliku %s\n", nazwa );
  85.         exit(0);
  86.     }
  87.  
  88.     int ile = 0;
  89.     char mail[20];
  90.     while (!feof(stream))
  91.     {
  92.         fscanf_s(stream, "%s", mail, 20);
  93.         ile++;
  94.     }
  95.  
  96.     rewind(stream);
  97.  
  98.     if (glowa == NULL)
  99.     {
  100.         glowa = wsk = new MojaKlasa(ile);
  101.         for (int i = 0; i < ile; i++)
  102.         {
  103.             fscanf_s(stream, "%s", mail, 20);
  104.             glowa->setemail(mail, i);
  105.         }
  106.     }
  107.     else
  108.     {
  109.         wsk->nast = new MojaKlasa(ile);
  110.         wsk = wsk->nast;
  111.         for (int i = 0; i < ile; i++)
  112.         {
  113.             fscanf_s(stream, "%s", mail, 20);
  114.             wsk->setemail(mail, i);        
  115.         }
  116.     }
  117.  
  118.  
  119.     fclose(stream);
  120.  
  121. }
  122.  
  123. void Wykladowca::wypisz()
  124. {
  125.     if (glowa == NULL)
  126.     {
  127.         printf("Ten wykladowca nie posiada swojej klasy\n\n");
  128.     }
  129.     else
  130.     {
  131.         wsk = glowa;
  132.         int i = 0;
  133.         while (wsk != NULL)
  134.         {
  135.             i++;
  136.             printf("Klasa %d:\n",i);
  137.             wsk->wypisz();
  138.             wsk = wsk->nast;
  139.             printf("\n");
  140.         }
  141.     }
  142. }
  143.  
  144. Wykladowca::Wykladowca()
  145. {
  146.     glowa = NULL;
  147. }
  148.  
  149. Wykladowca::Wykladowca( char nazwa[20] )
  150. {
  151.     dodaj_klase( nazwa );
  152. }
  153.  
  154. Wykladowca::Wykladowca(Wykladowca & wk)
  155. {
  156.     glowa = new MojaKlasa( *wk.glowa );
  157.     wsk = glowa;
  158.     MojaKlasa *wsk2;
  159.     wsk2 = wk.glowa;
  160.     wsk2 = wsk2->nast;
  161.  
  162.     while ( wsk2 != NULL )
  163.     {
  164.         wsk->nast = new MojaKlasa(*wsk2);
  165.         wsk = wsk->nast;
  166.         wsk2 = wsk2->nast;
  167.     }
  168. }
  169.  
  170. Wykladowca::~Wykladowca()
  171. {
  172.     printf("Destruktor Wykladowca\n");
  173.     delete glowa;
  174.    
  175. }
  176.  
  177.  
  178.  
  179. int main()
  180. {
  181.     char nazwa[20] = "klasa1.txt";
  182.     Wykladowca W;
  183.     Wykladowca W1(nazwa);
  184.     Wykladowca W2(W1);
  185.     strcpy_s( nazwa ,20 , "klasa2.txt" );
  186.     W1.dodaj_klase( nazwa );
  187.  
  188.     printf("Klasy Wykladowcy W:\n");
  189.     W.wypisz();
  190.  
  191.     printf("Klasy Wykladowcy W1:\n");
  192.     W1.wypisz();
  193.  
  194.     printf("Klasy Wykladowcy W2:\n");
  195.     W2.wypisz();
  196.  
  197.     return 0;
  198. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement