Facebook
From ania, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 68
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. const unsigned int MAX_TEXT_LEN = 20;           //maksymalna liczba znakow w polach tekstowych
  7.  
  8. struct pracownik {
  9.         int id;
  10.         char imie[MAX_TEXT_LEN+1];
  11.         char nazwisko[MAX_TEXT_LEN+1];
  12.         float* zarobki;
  13.         int liczba_miesiecy;
  14. };
  15.  
  16. void wyswietl_pracownika(pracownik prac) {
  17.         cout << "ID: " << prac.id << endl;
  18.         cout << "Imie: " << prac.imie << endl;
  19.         cout << "Nazwisko: " << prac.nazwisko << endl;
  20.         cout << "Zarobki w ostatnich " << prac.liczba_miesiecy << " miesiacach:" << endl;
  21.         for (int i=0; i<prac.liczba_miesiecy; i++) {
  22.                 cout << i+1 << ": " << prac.zarobki[i] << endl;
  23.         }
  24.         cout << endl;
  25. }
  26.  
  27. void wyswietl_wszystko(pracownik* tab, unsigned int liczba_prac) {
  28.         for(int i=0; i<liczba_prac; i++) {
  29.                 wyswietl_pracownika(tab[i]);
  30.         }
  31. }
  32.  
  33. float oblicz_srednia(pracownik prac) {
  34.         if(prac.liczba_miesiecy <= 0) {
  35.                 return 0.0;
  36.         }
  37.         float sr = 0;
  38.         for(int i=0; i<prac.liczba_miesiecy; i++) {
  39.                 sr += prac.zarobki[i];
  40.         }
  41.         sr = sr / prac.liczba_miesiecy;
  42.         return sr;
  43. }
  44.  
  45. void dodaj_element(fstream& plik, pracownik* tab, unsigned int rozmiar_tab, int ind) {
  46.         plik >> tab[ind].id;
  47.         plik >> tab[ind].imie;
  48.         plik >> tab[ind].nazwisko;
  49.         plik >> tab[ind].liczba_miesiecy;
  50.        
  51.         tab[ind].zarobki = new float[tab[ind].liczba_miesiecy];
  52.        
  53.         for(int i=0; i < tab[ind].liczba_miesiecy; i++) {
  54.                 plik >> tab[ind].zarobki[i];
  55.         }
  56. }
  57.  
  58. void zapisz_do_pliku(pracownik* tab, int count, float prog) {
  59.         ofstream plik_output("output.txt");
  60.         if(!plik_output) {
  61.                 cout << "Plik nie zostal otwartyn";
  62.                 return;
  63.         }
  64.        
  65.         float srednia;
  66.         int liczba_do_wpisania = 0;
  67.        
  68.         for(int i=0; i<count; i++) {
  69.                 srednia = oblicz_srednia(tab[i]);
  70.                 if(srednia >= prog) {
  71.                         liczba_do_wpisania++;
  72.                 }
  73.         }
  74.        
  75.         plik_output << liczba_do_wpisania << endl;
  76.        
  77.         for(int i=0; i<count; i++) {
  78.                 srednia = oblicz_srednia(tab[i]);
  79.                 if(srednia >= prog) {
  80.                         plik_output << tab[i].id << endl;
  81.                         plik_output << tab[i].imie << endl;
  82.                         plik_output << tab[i].nazwisko << endl;
  83.                         plik_output << tab[i].liczba_miesiecy << endl;
  84.                        
  85.                         for(int j=0; j<tab[i].liczba_miesiecy; j++) {
  86.                                 plik_output << tab[i].zarobki[j] << endl;
  87.                         }
  88.                 }
  89.         }
  90.         plik_output.close();
  91. }
  92.  
  93. int main() {
  94.         int N;
  95.         fstream plik_input("input.txt", ios::in); //otwarcie pliku o nazwie "input.txt"
  96.         if(!plik_input) { //sprawdzenie, czy plik zosta� otwarty
  97.                 cout << "Plik nie zostal otwartyn";
  98.                 return -1;
  99.         }
  100.        
  101.         unsigned int licznik = 0; //licznik elementow aktualnie przechowywanych w tablicy
  102.         pracownik *tablica; //tablica struktur (wska�nik) - nasza baza
  103.        
  104.         /*Wczytaj dane z pliku*/
  105.         plik_input >> N;
  106.        
  107.         /*Zaalokuj dynamicznie pamiec dla tablicy (na podstawie pierwszej liczby odczytanej z plik_input)*/
  108.         tablica = new pracownik[N];
  109.        
  110.         for(int i=0; i < N; i++) {
  111.                 dodaj_element(plik_input, tablica, N, i);
  112.         }
  113.        
  114.         plik_input.close();
  115.        
  116.         /* MENU */
  117.         int opt;
  118.         float prog;
  119.         do {
  120.                 cout << "Wybierz opcje:" << endl;
  121.                 cout << "1: Wypisz na ekran dane odczytane z pliku" << endl;
  122.                 cout << "2: Zapisz do pliku pracownikow o sredniej zarobkow powyzej progu" << endl;
  123.                 cout << "0: Wyjdz z programu" << endl << endl;
  124.                
  125.                 cout << "Podaj swoj wybor: ";
  126.                 cin >> opt;
  127.                
  128.                 /* Wykonaj odpowiednia akcje w zaleznosci od wyboru uzytkownika */
  129.                 switch(opt) {
  130.                         case 1: //wypisz na ekran dane odczytane z pliku
  131.                                 wyswietl_wszystko(tablica, N);
  132.                                 break;
  133.                         case 2: //opcja 2
  134.                                 cout << "Podaj prog sredniej zarobkow: " << endl;
  135.                                 cin >> prog;
  136.                                 zapisz_do_pliku(tablica, N, prog);
  137.                                 break;
  138.                         case 0: // koniec dzialania programu - warunek petli spowoduje wyjscie z niej
  139.                                 break;
  140.                         default:
  141.                                 cout << "Niepoprawna opcja!" << endl << endl;
  142.                                 break;
  143.                 }
  144.                
  145.         } while (opt != 0);
  146.        
  147.         /*Zwolnij dynamicznie zaalokowana pamiec!*/
  148.         for(int i=0; i<N; i++) {
  149.                 delete[] tablica[i].zarobki;
  150.         }
  151.         delete[] tablica;
  152.         return 0;
  153. }