Advertisement
MeehoweCK

Untitled

Jul 24th, 2018
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.46 KB | None | 0 0
  1. // main.cpp
  2. #include <iostream>
  3. #include <fstream>
  4. #include "head.h"
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     fstream plik;
  11.  
  12.     if(tworzenie_pliku(pobierz_nazwe(), plik))
  13.         kalkulator(plik);
  14.     else
  15.         cout << "Nie utworzono zadnego pliku" << endl;
  16.     return 0;
  17. }
  18.  
  19. // head.h
  20. #include <iostream>
  21. #include <fstream>
  22. #include "head.h"
  23.  
  24. using namespace std;
  25.  
  26. int main()
  27. {
  28.     fstream plik;
  29.  
  30.     if(tworzenie_pliku(pobierz_nazwe(), plik))
  31.         kalkulator(plik);
  32.     else
  33.         cout << "Nie utworzono zadnego pliku" << endl;
  34.     return 0;
  35. }
  36.  
  37. // funkcje.cpp
  38. #include <iostream>
  39. #include <fstream>
  40. #include <conio.h>
  41. #include "head.h"
  42.  
  43. bool tak_nie()
  44. {
  45.     char wybor = '0';
  46.  
  47.     do
  48.     {
  49.         wybor = getch();                // funkcja pobieraj¹ca dowolny znak z klawiatury (jeden)
  50.     } while (wybor != 't' && wybor != 'T' && wybor != 'n' && wybor != 'N');
  51.  
  52.     if(wybor == 't' || wybor == 'T')
  53.     {
  54.         cout << "T" << endl;
  55.         return true;
  56.     }
  57.  
  58.     cout << "N" << endl;
  59.     return false;
  60. }
  61.  
  62. bool tworzenie_pliku(string nazwa, fstream& plik)      // uchwyt do pliku musi byæ podawany do funkcji poprzez referencjê (&), gdy¿ bêdziemy operowaæ na oryginalnym obiekcie, a nie jego kopii!
  63. {
  64.     ifstream plik2;
  65.     plik2.open(nazwa.c_str());               // metoda c_str() jest konieczna, aby funkcja open() mog³a otworzyæ obiekt typu string
  66.  
  67.     bool flaga = false;                     // flaga bêdzie informowaæ czy u¿ytkownik postanowi³ utworzyæ plik czy te¿ nie
  68.     if (plik2.good())                       // je¿eli plik o podanej nazwie ju¿ istnia³, flaga zostanie podniesiona
  69.     {
  70.         cout << "Plik o podanej nazwie juz istnieje. Czy chcesz go nadpisac? (T/N): ";
  71.         // wybór tak/nie
  72.         if(tak_nie())
  73.             flaga = true;
  74.     }
  75.  
  76.     else
  77.     {
  78.         cout << "Plik o podanej nazwie nie istnieje. Czy chcesz go utworzyc? (T/N): ";
  79.         // wybór tak/nie
  80.         if(tak_nie())
  81.             flaga = true;
  82.     }
  83.  
  84.     plik2.close();
  85.  
  86.     if(flaga)
  87.     {
  88.         plik.open(nazwa.c_str(), ios::app);           // utworzenie lub otwarcie pliku (z dopisywaniem)
  89.         return true;
  90.     }
  91.  
  92.     else
  93.         return false;
  94.  
  95. }
  96.  
  97. char menu()
  98. {
  99.     cout << "Wybierz co chcesz zrobic:" << endl;
  100.     cout << "* dodaj <1>" <<endl;
  101.     cout << "* odejmij <2>" <<endl;
  102.     cout << "* pomnoz <3>" <<endl;
  103.     cout << "* podziel <4>" <<endl;
  104.     cout << "* wyjdz z programu <0>" << endl;
  105.  
  106.     char wybor;
  107.  
  108.     do
  109.     {
  110.         wybor = getch();
  111.     }
  112.     while(wybor != '0' && wybor != '1' && wybor != '2' && wybor != '3' && wybor != '4');
  113.  
  114.     cout << wybor;
  115.     return wybor;
  116. }
  117.  
  118. string pobierz_nazwe()
  119. {
  120.     cout << "Podaj nazwe pliku: ";
  121.     string nazwa;
  122.     cin >> nazwa;
  123.     nazwa += ".txt";
  124.     return nazwa;
  125. }
  126.  
  127. void kalkulator(fstream& plik)
  128. {
  129.     double a, b;
  130.  
  131.     char wybor;
  132.  
  133.     do
  134.     {
  135.         wybor = menu();
  136.  
  137.         switch(wybor)
  138.         {
  139.         case '0':
  140.             cout << " - wychodze z programu" << endl;
  141.             return;                                         // w funkcji typu void s³owo kluczowe return nakazuje po prostu wyjœcie z funkcji
  142.         case '1':
  143.             cout << " - wybrales dodawanie. ";
  144.             Podaj(a, b);
  145.             cout << a << " + " << b << " = " << a+b << endl << endl;
  146.             plik << a << " + " << b << " = " << a+b << endl;
  147.             break;
  148.         case '2':
  149.             cout << " - wybrales odejmowanie. ";
  150.             Podaj (a, b);
  151.             cout << a << " - " << b << " = " << a-b <<endl << endl;
  152.             plik << a << " - " << b << " = " << a-b <<endl;
  153.             break;
  154.  
  155.         case '3':
  156.             cout << " - wybrales mnozenie. ";
  157.             Podaj (a, b);
  158.             cout << a << " * " << b << " = " << a*b <<endl << endl;
  159.             plik << a << " * " << b << " = " << a*b <<endl;
  160.             break;
  161.  
  162.         case '4':
  163.             cout << " - wybrales dzielenie. ";
  164.             Podaj (a, b);
  165.             while(b == 0)
  166.             {
  167.                 cout << "Nie mozna dzielic przez 0!" << endl;
  168.                 Podaj(a, b);
  169.             }
  170.                 cout << a << " / " << b << " = " << a/b <<endl << endl;
  171.                 plik << a << " / " << b << " = " << a/b <<endl;
  172.             break;
  173.         }
  174.     }
  175.     while(true);
  176.     plik.close();
  177. }
  178.  
  179. void Podaj(double &a, double &b)
  180. {
  181.     cout << "Podaj 2 liczby rzeczywiste: ";
  182.     cin >> a >> b;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement