Advertisement
bazmikel

Untitled

May 20th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6.  
  7. int numOfKarton = 1;
  8. struct SPiwo{
  9.     int wysokosc;
  10.     float promien_podstawy;
  11.     string marka;
  12. };
  13.  
  14.  
  15. struct SKarton{
  16.     int ile_piw;
  17.     int kod;
  18.     SPiwo *piwo;
  19. };
  20.  
  21. bool strumienOK(istream &file){
  22.     if(!file.good()){
  23.         cerr << "Pomylka wczytu!" << endl;
  24.         file.clear();
  25.         return false;
  26.     }
  27.     return true;
  28.  
  29. }
  30.  
  31.  
  32.  
  33. SPiwo * wczytaj_piwa(istream &file, unsigned &rozmiar){
  34.     SPiwo * piwo = 0;
  35.     if(!file.good()){
  36.         cerr << "Error while reading!" << endl;
  37.         file.clear();
  38.         return piwo;
  39.     }
  40.  
  41.     file >> rozmiar;
  42.     if(!file.good()){
  43.         cerr << "Error while reading!" << endl;
  44.         file.clear();
  45.         return piwo;
  46.     }
  47.  
  48.     if(rozmiar > 0){
  49.         piwo = new SPiwo[rozmiar];
  50.         for(unsigned i = 0; i < rozmiar; i++){
  51.             file >> piwo[i].wysokosc;
  52.             if(!file.good()){
  53.             cerr << "Error 1" << endl;
  54.             delete[] piwo;
  55.             piwo = 0;
  56.             file.clear();
  57.             return piwo;
  58.         }
  59.             file >> piwo[i].promien_podstawy;
  60.             if(!file.good()){
  61.             cerr << "Error 2" << endl;
  62.             delete[] piwo;
  63.             piwo = 0;
  64.             file.clear();
  65.             return piwo;
  66.         }
  67.             file >> piwo[i].marka; // WHY?
  68.     }
  69. }
  70.     else{
  71.         cerr << "Amount is less or equals 0" << endl;
  72.         return piwo;
  73.     }
  74.     return piwo;
  75. }
  76.  
  77. void pakuj_karton(SKarton &karton, SPiwo * piwo, const unsigned rozmiar){
  78.     karton.ile_piw = rozmiar;
  79.     karton.kod = numOfKarton;
  80.     karton.piwo = piwo;
  81.     numOfKarton++;
  82. }
  83.  
  84. bool zapisz_piwa(ostream &file, SKarton karton, const unsigned rozmiar){
  85.     if(!file){
  86.         cerr << "Error opening writing file!" << endl;
  87.         return false;
  88.     }
  89.     file << karton.ile_piw << endl;
  90.     if(!file.good()){
  91.         cerr << "Blad zapisu ilosci" << endl;
  92.         file.clear();
  93.         return false;
  94.     }
  95.     for(unsigned i = 0; i < rozmiar; i++){
  96.         file << karton.piwo[i].wysokosc << " ";
  97.         if(!file.good()){
  98.             cerr << "Error zapisu danych piwa" << endl;
  99.             return false;
  100.         }
  101.         file << karton.piwo[i].promien_podstawy << " ";
  102.         if(!file.good()){
  103.             cerr << "Error zapisu danych piwa" << endl;
  104.             return false;
  105.         }
  106.         file << karton.piwo[i].marka << endl;
  107.         if(!file.good()){
  108.             cerr << "Error zapisu danych piwa" << endl;
  109.             return false;
  110.         }
  111.     }
  112.     return true;
  113.  
  114. }
  115.  
  116. void wypisz_karton(SKarton karton, const unsigned rozmiar){
  117.     cout << "Karton z kodem " << karton.kod << " ma w sobie " << karton.ile_piw << " piw:" << endl;
  118.     for(unsigned i = 0; i < rozmiar; i++){
  119.         cout << karton.piwo[i].wysokosc << " "<<  karton.piwo[i].promien_podstawy << " ";
  120.         cout << karton.piwo[i].marka << endl;
  121.     }
  122.  
  123.  
  124. }
  125.  
  126.  
  127. void bubbleSort(SPiwo *& piwo, const unsigned rozmiar){
  128.     for(unsigned i =0; i < rozmiar - 1; i++){
  129.         for(unsigned j = 0; j < rozmiar - 1 - i; j++){
  130.             if(piwo[j].wysokosc > piwo[j+1].wysokosc){
  131.                 swap(piwo[j].wysokosc, piwo[j+1].wysokosc);
  132.                 swap(piwo[j].promien_podstawy, piwo[j+1].promien_podstawy);
  133.                 swap(piwo[j].marka, piwo[j+1].marka);
  134.             }
  135.         }
  136.     }
  137. }
  138.  
  139. int main(int argc, char **argv)
  140. {
  141.     if( argc != 3){
  142.         cerr << "Zamala ilosc argumentow!" << endl;
  143.         cerr << "Format: nazwa_pliku.txt" << endl;
  144.         return 0;
  145.     }
  146.  
  147.     ifstream read(argv[1]);
  148.     ofstream write(argv[2]);
  149.  
  150.     if(read){
  151.     SKarton karton = { 0, 0, 0};
  152.     unsigned ileWczytanoPiw;
  153.     SPiwo * piwa = wczytaj_piwa(read, ileWczytanoPiw);
  154.     pakuj_karton(karton, piwa, ileWczytanoPiw);
  155.     wypisz_karton(karton, ileWczytanoPiw);
  156.     bubbleSort(piwa, ileWczytanoPiw);
  157.     pakuj_karton(karton, piwa, ileWczytanoPiw);
  158.  
  159.     if(write){
  160.         zapisz_piwa(write, karton, ileWczytanoPiw);
  161.         cout << "Dane poprawnie zapisane!" << endl;
  162.         write.close();
  163.         }
  164.     else{
  165.         cerr << "Error opening writing file!" << endl;
  166.         write.clear();
  167.         write.close();
  168.         return 0;
  169.     }
  170.  
  171.     read.close();
  172.     }
  173.     else{
  174.     cerr << "Blad otwierania pliku" << endl;
  175.     return 0;
  176.     }
  177.  
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement