Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <vector>
  5. #include <cstdio>
  6.  
  7. /*
  8. Program powinien umożliwiać wykonywanie następujących czynności:
  9. • ok dodanie zasobu
  10. • ok usunięcie zasobu
  11. • ok zmianę danych zasobu
  12. • ok wydanie/przyjęcie zasobu do ewidencji
  13. • ok dodanie/zmianę daty dostawy
  14. • ok wyszukanie/filtrowanie produktu po nazwie/producencie/typie
  15. • *wyszukianie przy użyciu wyrażeń regularnych
  16. • ok zapisanie zgromadzonej bazy danych na dysku w postaci pliku
  17. • ok wczytanie zapisaniej bazy danych ze wskazanego pliku
  18.  
  19.  */
  20.  
  21. #define KROTKA 0
  22. #define DLUGA 1
  23. #define MATERIAL_WYBUCHOWY 2
  24. #define GRANAT 3
  25. #define MINA 4
  26. #define AMUNICJA 5
  27. #define POCISK_RAKIETOWY 6
  28. #define BOMBA_LOTNICZA 7
  29. #define INNE 8
  30.  
  31. using namespace std;
  32.  
  33. struct wpis {
  34.     char nazwa[256];
  35.     char producent[100];
  36.     int typ;
  37.     char typ_amunicji[50];
  38.     int liczba_w_magazynie;
  39.     int liczba_sztuk_w_ewidencji;
  40.     char data[20];
  41.     char uwagi[1000];
  42.     bool wymaga_przeszkolenia;
  43.     bool wymaga_ostroznosci;
  44. };
  45.  
  46. const char* opisy[9] = {
  47.     "bron krotka",
  48.     "bron dluga",
  49.     "materialy wybuchowe",
  50.     "granat",
  51.     "mina",
  52.     "amunicja",
  53.     "pocisk rakietowy",
  54.     "bomba lotnicza",
  55.     "inne"
  56. };
  57.  
  58. vector<wpis> dane;
  59. int liczba_elementow = 0;
  60.  
  61.  
  62. int opis_na_numer(char* tekst) {
  63.     if(strstr(opisy[0], tekst) != NULL) {
  64.         return 0;
  65.     } else if(strstr(opisy[1], tekst) != NULL) {
  66.         return 1;
  67.     } else if(strstr(opisy[2], tekst) != NULL) {
  68.         return 2;
  69.     } else if(strstr(opisy[3], tekst) != NULL) {
  70.         return 3;
  71.     } else if(strstr(opisy[4], tekst) != NULL) {
  72.         return 4;
  73.     } else if(strstr(opisy[5], tekst) != NULL) {
  74.         return 5;
  75.     } else if(strstr(opisy[6], tekst) != NULL) {
  76.         return 6;
  77.     } else if(strstr(opisy[7], tekst) != NULL) {
  78.         return 7;
  79.     } else if(strstr(opisy[8], tekst) != NULL) {
  80.         return 8;
  81.     }
  82.  
  83.     return 0;
  84. }
  85.  
  86. wpis stworz_wpis_z_klawiatury() {
  87.     int tmp;
  88.     wpis nowy;
  89.  
  90.  
  91.     cout << "Podaj nazwe: ";
  92.     cin.getline(nowy.nazwa, 256, '\n');
  93.  
  94.     cout << "Podaj producenta: ";
  95.     cin.getline(nowy.producent, 100, '\n');
  96.  
  97.     cout << "Podaj typ: \n";
  98.     cout << "0 - Bron krotka\n";
  99.     cout << "1 - Bron dluga\n";
  100.     cout << "2 - Material wybuchowy\n";
  101.     cout << "3 - Granat\n";
  102.     cout << "4 - Mina\n";
  103.     cout << "5 - Amunicja\n";
  104.     cout << "6 - Pocisk rakietowy\n";
  105.     cout << "7 - Bomba lotnicza\n";
  106.     cout << "8 - Inne\n";
  107.  
  108.     cin >> nowy.typ;
  109.  
  110.     cin.ignore();
  111.  
  112.     cout << "Podaj typ amunicji: ";
  113.     cin.getline(nowy.typ_amunicji, 50, '\n');
  114.  
  115.     cout << "Podaj liczbe sztuk w magazynie: ";
  116.     cin >> nowy.liczba_w_magazynie;
  117.  
  118.     cout << "Podaj liczbe sztuk w ewidencji: ";
  119.     cin >> nowy.liczba_sztuk_w_ewidencji;
  120.  
  121.     cin.ignore();
  122.     cout << "Podaj date: ";
  123.     cin.getline(nowy.data, 20, '\n');
  124.  
  125.     cout << "Podaj uwagi: ";
  126.     cin.getline(nowy.uwagi, 1000, '\n');
  127.  
  128.     cout << "Czy wymaga specjalnego przeszkolenia: 0 - NIE, 1 - TAK: ";
  129.     cin >> tmp;
  130.  
  131.     if(tmp == 0) {
  132.         nowy.wymaga_przeszkolenia = false;
  133.     } else {
  134.         nowy.wymaga_przeszkolenia = true;
  135.     }
  136.  
  137.     cout << "Czy wymaga specjalnych srodkow ostroznosci: 0 - NIE, 1 - TAK: ";
  138.     cin >> tmp;
  139.  
  140.     if(tmp == 0) {
  141.         nowy.wymaga_ostroznosci = false;
  142.     } else {
  143.         nowy.wymaga_ostroznosci = true;
  144.     }
  145.  
  146.     return nowy;
  147. }
  148.  
  149. void dodaj() {
  150.     cin.ignore(1, '\n');
  151.     dane.push_back(stworz_wpis_z_klawiatury());
  152.  
  153.     cin.ignore(1, '\n');
  154. }
  155.  
  156. void edytuj() {
  157.     int wybor;
  158.  
  159.     cout << "Podaj numer elementu do edycji: ";
  160.     cin >> wybor;
  161.  
  162.     // bo liczymy od 0, a uzytkownik widzi od 1
  163.     wybor--;
  164.  
  165.     if(wybor < 0 || wybor >= dane.size()) {
  166.         cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
  167.         return;
  168.     }
  169.  
  170.     cin.ignore(1, '\n');
  171.     dane[wybor] = stworz_wpis_z_klawiatury();
  172. }
  173.  
  174. void wypisz_jeden(wpis w) {
  175.  
  176.         cout << "Nazwa: " << w.nazwa << endl;
  177.         cout << "Producent: " << w.producent << endl;
  178.         cout << "Typ: " << opisy[w.typ] << endl;
  179.         cout << "Typ amunicji: " << ((strlen(w.typ_amunicji) > 1) ? w.typ_amunicji : "nie dotyczy") << endl;
  180.         cout << "Liczba sztuk w magazynie: " << w.liczba_w_magazynie << endl;
  181.         cout << "Liczba sztuk w ewidencji: " << w.liczba_sztuk_w_ewidencji << endl;
  182.         cout << "Data dostawy: " << ((strlen(w.data) > 1) ? w.data : "nie dotyczy") << endl;
  183.         cout << "Uwagi: " << w.uwagi << endl;
  184.         cout << "Czy wymaga specjalnego przeszkolenia: " << std::boolalpha << w.wymaga_przeszkolenia << endl;
  185.         cout << "Czy wymaga srodkow ostroznosci: " << std::boolalpha << w.wymaga_ostroznosci << endl << endl;
  186. }
  187.  
  188. void wypisz() {
  189.     for(int i = 0; i < dane.size(); i++) {
  190.         cout << i+1 << ") \n";
  191.         wypisz_jeden(dane[i]);
  192.     }
  193. }
  194.  
  195. void usun() {
  196.     int wybor;
  197.  
  198.     cout << "Podaj numer elementu do usuniecia: ";
  199.     cin >> wybor;
  200.  
  201.     // bo liczymy od 0, a uzytkownik widzi od 1
  202.     wybor--;
  203.  
  204.     if(wybor < 0 || wybor >= dane.size()) {
  205.         cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
  206.         return;
  207.     }
  208.  
  209.     dane.erase(dane.begin()+wybor);
  210.  
  211.     cout << "Ilosc elementow po usunieciu: " << dane.size() << endl;
  212. }
  213.  
  214. void zmien_ewidencje() {
  215.     int wybor, menu;
  216.  
  217.     cout << "Podaj numer elementu do zmiany ewidencji: ";
  218.     cin >> wybor;
  219.  
  220.     // bo liczymy od 0, a uzytkownik widzi od 1
  221.     wybor--;
  222.  
  223.     if(wybor < 0 || wybor >= dane.size()) {
  224.         cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
  225.         return;
  226.     }
  227.  
  228.  
  229.     cout << "1 - Dodaj do ewidencji, 2 - Wydaj z ewidencji: ";
  230.     cin >> menu;
  231.  
  232.     if(menu == 1) {
  233.         if(dane[wybor].liczba_w_magazynie > 0) {
  234.  
  235.             dane[wybor].liczba_sztuk_w_ewidencji++;
  236.             dane[wybor].liczba_w_magazynie--;
  237.         } else {
  238.             cout << "Nie ma juz przedmiotu w magazynie.\n";
  239.         }
  240.     } else if(menu == 2) {
  241.         if(dane[wybor].liczba_sztuk_w_ewidencji > 0) {
  242.             dane[wybor].liczba_sztuk_w_ewidencji--;
  243.             dane[wybor].liczba_w_magazynie++;
  244.         } else {
  245.             cout << "Nie ma juz przedmiotu w ewidencji.\n";
  246.         }
  247.     } else {
  248.         cout << "Niepoprawna opcja.\n";
  249.  
  250.     }
  251. }
  252.  
  253. void zmien_date_dostawy() {
  254.     int wybor;
  255.     cout << "Podaj numer elementu do zmiany daty: ";
  256.     cin >> wybor;
  257.  
  258.     // bo liczymy od 0, a uzytkownik widzi od 1
  259.     wybor--;
  260.  
  261.     if(wybor < 0 || wybor >= dane.size()) {
  262.         cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
  263.         return;
  264.     }
  265.  
  266.  
  267.     cout << "Podaj nowa date: ";
  268.     cin >> dane[wybor].data;
  269. }
  270.  
  271. void wyszukaj() {
  272.     int rodzaj_wyszukania;
  273.     char szukany_tekst[40];
  274.  
  275.     cout << "Podaj rodzaj wyszukania: 1 - nazwa, 2 - producent, 3 - typ: ";
  276.     cin >> rodzaj_wyszukania;
  277.  
  278.     if(rodzaj_wyszukania != 1 && rodzaj_wyszukania != 2 && rodzaj_wyszukania != 3) {
  279.         cout << "Niepoprawny rodzaj wyszukania.\n";
  280.         return;
  281.     }
  282.  
  283.     cin.ignore();
  284.     cout << "Podaj szukany tekst: ";
  285.     cin.getline(szukany_tekst, 20, '\n');
  286.  
  287.     for(int i = 0; i < dane.size(); i++) {
  288.         if(rodzaj_wyszukania == 1 && strstr(dane[i].nazwa, szukany_tekst) != NULL) {
  289.             wypisz_jeden(dane[i]);
  290.         } else if(rodzaj_wyszukania == 2 && strstr(dane[i].producent, szukany_tekst) != NULL) {
  291.             wypisz_jeden(dane[i]);
  292.         } else if(rodzaj_wyszukania == 3 && dane[i].typ == opis_na_numer(szukany_tekst)) {
  293.             wypisz_jeden(dane[i]);
  294.         }
  295.     }
  296. }
  297.  
  298. void zapisz_do_pliku() {
  299.     string nazwa_pliku;
  300.     FILE* plik;
  301.  
  302.     cout << "Podaj nazwe pliku: ";
  303.     cin >> nazwa_pliku;
  304.  
  305.     plik = fopen(nazwa_pliku.c_str(), "w");
  306.  
  307.     if(plik == NULL) {
  308.         cout << "Nie udalo sie otworzyc pliku o nazwie " << nazwa_pliku << endl;
  309.         return;
  310.     }
  311.  
  312.  
  313.     int i;
  314.     for(i = 0; i < dane.size()-1; i++) {
  315.         fprintf(plik, "%s;%s;%d;%s;%d;%d;%s;%s;%d;%d\n",
  316.             dane[i].nazwa, dane[i].producent, dane[i].typ, dane[i].typ_amunicji, dane[i].liczba_w_magazynie, dane[i].liczba_sztuk_w_ewidencji,
  317.                 dane[i].data, dane[i].uwagi, dane[i].wymaga_przeszkolenia, dane[i].wymaga_ostroznosci
  318.         );
  319.     }
  320.  
  321.     fprintf(plik, "%s;%s;%d;%s;%d;%d;%s;%s;%d;%d",
  322.             dane[i].nazwa, dane[i].producent, dane[i].typ, dane[i].typ_amunicji, dane[i].liczba_w_magazynie, dane[i].liczba_sztuk_w_ewidencji,
  323.             dane[i].data, dane[i].uwagi, dane[i].wymaga_przeszkolenia, dane[i].wymaga_ostroznosci);
  324.  
  325.  
  326.     fclose(plik);
  327. }
  328.  
  329. void wczytaj_z_pliku() {
  330.     string nazwa_pliku;
  331.     char linijka[1500];
  332.     FILE* plik;
  333.     wpis nowy;
  334.  
  335.  
  336.     cout << "Podaj nazwe pliku: ";
  337.     cin >> nazwa_pliku;
  338.  
  339.     plik = fopen(nazwa_pliku.c_str(), "r");
  340.  
  341.     if(plik == NULL) {
  342.         cout << "Nie udalo sie otworzyc pliku o nazwie " << nazwa_pliku << endl;
  343.         return;
  344.     }
  345.  
  346.     while(!feof(plik)) {
  347.         fgets(linijka, 1500, plik);
  348.         sscanf(linijka, "%[^;] ; %[^;] ; %d ; %[^;] ; %d ; %d ; %[^;] ; %[^;] ; %d ; %d\n",
  349.             nowy.nazwa, nowy.producent, &nowy.typ, nowy.typ_amunicji, &nowy.liczba_w_magazynie,
  350.                &nowy.liczba_sztuk_w_ewidencji, nowy.data, nowy.uwagi, &nowy.wymaga_przeszkolenia, &nowy.wymaga_ostroznosci
  351.         );
  352.  
  353.         dane.push_back(nowy);
  354.     }
  355.     fclose(plik);
  356. }
  357.  
  358.  
  359. void menu() {
  360.     int wybor;
  361.  
  362.     while(wybor != 10) {
  363.         cout << "1 - Dodaj\n2 - Usun\n3 - Edytuj\n4 - Wypisz\n5 - Zmien ewidencje\n6 - Zmien date dostawy\n7 - Wyszukaj\n8 - Zapisz\n9 - Wczytaj\n";
  364.         cout << "10 - Wyjscie\n";
  365.         cin >> wybor;
  366.  
  367.         switch(wybor) {
  368.             case 1:
  369.                 dodaj();
  370.                 break;
  371.             case 2:
  372.                 usun();
  373.                 break;
  374.             case 3:
  375.                 edytuj();
  376.                 break;
  377.             case 4:
  378.                 wypisz();
  379.                 break;
  380.             case 5:
  381.                 zmien_ewidencje();
  382.                 break;
  383.             case 6:
  384.                 zmien_date_dostawy();
  385.                 break;
  386.             case 7:
  387.                 wyszukaj();
  388.                 break;
  389.             case 8:
  390.                 zapisz_do_pliku();
  391.                 break;
  392.             case 9:
  393.                 wczytaj_z_pliku();
  394.                 break;
  395.             case 10:
  396.                 break;
  397.             default:
  398.                 cout << "Nie ma takiej opcji.";
  399.         }
  400.     }
  401. }
  402.  
  403. int main() {
  404.     menu();
  405.     return 0;
  406. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement