Advertisement
Guest User

Kolokwium_11K1

a guest
Jan 22nd, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. // Krzysztof_Betkowski_Kolokwium_2.cpp
  2.  
  3. #include <iostream>
  4. #include <fstream>
  5. #include <time.h>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. //Struktura Data
  11. struct Data {
  12.     int dzien;
  13.     string miesiac;
  14.     Data() { dzien = 1; miesiac = "styczen"; }  //konstruktor domyślny
  15.     Data(int _dzien, string _miesiac) { dzien = _dzien; miesiac = _miesiac; }   //konstruktor dla argumentów
  16.     void showData() { cout << dzien << " " << miesiac << endl; }    //metoda wyświetlająca elementy struktury
  17. };
  18.  
  19. //Struktura S
  20. struct S {
  21.     float wartosc;
  22.     Data data;
  23.     static int ilosc;   //ilość wszystkich elementów danego typu (wspólny dla wszystkich obiektów)
  24.     S() { wartosc = 0; ilosc++; }   //konstruktor domyślny
  25.     S(float _wartosc, int _dzien, string _miesiac) {    //konstruktor dla argumentów
  26.         wartosc = _wartosc;
  27.         data.dzien = _dzien;
  28.         data.miesiac = _miesiac;
  29.         ilosc++;
  30.     }
  31.     ~S() { ilosc--; }   //dekonstruktor
  32.     void showS() { cout << wartosc << " "; data.showData(); }
  33.     void saveToFile() {     //metoda zapisu do pliku (tryb otwarcia ios::app)
  34.         ofstream file("zadanie.txt", ios::app);
  35.         file << wartosc << " " << data.dzien << " " << data.miesiac << endl;
  36.         file.close();
  37.     }
  38. };
  39. int S::ilosc;   //początkowa wartość ilość = 0;
  40.  
  41. //Funkcja tworząca nowy obiekt dynamiczny o składowych wprowadzonych przez użytkownika
  42. S* createS() {
  43.     S* ptr = new S; //stwórz nowy obiekt dynamiczny (konstruktor domyślny - bez argumentów)
  44.     cout << "Wprowadź wartość, dzień i miesiąc:\n";
  45.     cin >> ptr->wartosc >> ptr->data.dzien >> ptr->data.miesiac;    //modyfikacja składowych obiektu
  46.     return ptr;
  47. }
  48.  
  49. //Funkcja odczytująca dane z pliku
  50. void readFromFile(int size) {
  51.     S* array = new S[size];     //tablica dynamiczna typu S ('array' to wskaźnik na pierwszy element tablicy)
  52.     ifstream file("zadanie.txt");
  53.     if (!file.good()) cout << "Nie udało się otworzyć pliku!\n";
  54.     else for (int i = 0; !file.eof(); i++) {
  55.         file >> (array + i)->wartosc >> (array + i)->data.dzien >> (array + i)->data.miesiac;   //zasada ta sama co w 'createS()', 'i' to kolejny element tablicy
  56.     }
  57.     for (int i = 0; i < size; i++) {
  58.         (array + i)->showS();   //wyświetl zawartość elementu
  59.     }
  60.     delete[] array; //usuwanie obiektu dynamicznego, zwalnianie pamięci
  61. }
  62.  
  63. int main()
  64. {
  65.     setlocale(LC_ALL, "pl_PL"); //polskie znaczki :P
  66.     srand(time(NULL));
  67.     ofstream file ("zadanie.txt", ios::trunc); file.close();    //opróźnianie pliku
  68.  
  69.     S s1(static_cast<float>(rand() % 100), 12, "luty"),
  70.       s2(static_cast<float>(rand() % 100), 15, "czerwiec"); //tworzenie 'randomowych' obiektów typu S
  71.     s1.showS(); s2.showS();     //wyświetlanie obiektów s1, s2
  72.     s1.saveToFile(); s2.saveToFile();       //dopisanie do pliku obiektów s1, s2
  73.     S* p1 = createS(), *p2 = createS();     //tworzenie obiektów dynamicznych p1, p2 z wykorzystaniem funkcji 'createS()'
  74.     p1->saveToFile(); p2->saveToFile();     //dopisanie do pliku obiektów dynamicnzych p1, p2
  75.     readFromFile(p2->ilosc);    //odczytanie danych z pliku z wykorzystaniem tablicy dynamicznej o rozmiarze równym ilości obiektów ( 'readFromFile(int size){...}' )
  76.     delete p1, p2;      //usuwanie obiektów dynamicznych, zwalnianie pamięci
  77.     system("PAUSE");
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement