Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <vector>
- #include <cstdio>
- /*
- Program powinien umożliwiać wykonywanie następujących czynności:
- • ok dodanie zasobu
- • ok usunięcie zasobu
- • ok zmianę danych zasobu
- • ok wydanie/przyjęcie zasobu do ewidencji
- • ok dodanie/zmianę daty dostawy
- • ok wyszukanie/filtrowanie produktu po nazwie/producencie/typie
- • *wyszukianie przy użyciu wyrażeń regularnych
- • ok zapisanie zgromadzonej bazy danych na dysku w postaci pliku
- • ok wczytanie zapisaniej bazy danych ze wskazanego pliku
- */
- #define KROTKA 0
- #define DLUGA 1
- #define MATERIAL_WYBUCHOWY 2
- #define GRANAT 3
- #define MINA 4
- #define AMUNICJA 5
- #define POCISK_RAKIETOWY 6
- #define BOMBA_LOTNICZA 7
- #define INNE 8
- using namespace std;
- struct wpis {
- char nazwa[256];
- char producent[100];
- int typ;
- char typ_amunicji[50];
- int liczba_w_magazynie;
- int liczba_sztuk_w_ewidencji;
- char data[20];
- char uwagi[1000];
- bool wymaga_przeszkolenia;
- bool wymaga_ostroznosci;
- };
- const char* opisy[9] = {
- "bron krotka",
- "bron dluga",
- "materialy wybuchowe",
- "granat",
- "mina",
- "amunicja",
- "pocisk rakietowy",
- "bomba lotnicza",
- "inne"
- };
- vector<wpis> dane;
- int liczba_elementow = 0;
- int opis_na_numer(char* tekst) {
- if(strstr(opisy[0], tekst) != NULL) {
- return 0;
- } else if(strstr(opisy[1], tekst) != NULL) {
- return 1;
- } else if(strstr(opisy[2], tekst) != NULL) {
- return 2;
- } else if(strstr(opisy[3], tekst) != NULL) {
- return 3;
- } else if(strstr(opisy[4], tekst) != NULL) {
- return 4;
- } else if(strstr(opisy[5], tekst) != NULL) {
- return 5;
- } else if(strstr(opisy[6], tekst) != NULL) {
- return 6;
- } else if(strstr(opisy[7], tekst) != NULL) {
- return 7;
- } else if(strstr(opisy[8], tekst) != NULL) {
- return 8;
- }
- return 0;
- }
- wpis stworz_wpis_z_klawiatury() {
- int tmp;
- wpis nowy;
- cout << "Podaj nazwe: ";
- cin.getline(nowy.nazwa, 256, '\n');
- cout << "Podaj producenta: ";
- cin.getline(nowy.producent, 100, '\n');
- cout << "Podaj typ: \n";
- cout << "0 - Bron krotka\n";
- cout << "1 - Bron dluga\n";
- cout << "2 - Material wybuchowy\n";
- cout << "3 - Granat\n";
- cout << "4 - Mina\n";
- cout << "5 - Amunicja\n";
- cout << "6 - Pocisk rakietowy\n";
- cout << "7 - Bomba lotnicza\n";
- cout << "8 - Inne\n";
- cin >> nowy.typ;
- cin.ignore();
- cout << "Podaj typ amunicji: ";
- cin.getline(nowy.typ_amunicji, 50, '\n');
- cout << "Podaj liczbe sztuk w magazynie: ";
- cin >> nowy.liczba_w_magazynie;
- cout << "Podaj liczbe sztuk w ewidencji: ";
- cin >> nowy.liczba_sztuk_w_ewidencji;
- cin.ignore();
- cout << "Podaj date: ";
- cin.getline(nowy.data, 20, '\n');
- cout << "Podaj uwagi: ";
- cin.getline(nowy.uwagi, 1000, '\n');
- cout << "Czy wymaga specjalnego przeszkolenia: 0 - NIE, 1 - TAK: ";
- cin >> tmp;
- if(tmp == 0) {
- nowy.wymaga_przeszkolenia = false;
- } else {
- nowy.wymaga_przeszkolenia = true;
- }
- cout << "Czy wymaga specjalnych srodkow ostroznosci: 0 - NIE, 1 - TAK: ";
- cin >> tmp;
- if(tmp == 0) {
- nowy.wymaga_ostroznosci = false;
- } else {
- nowy.wymaga_ostroznosci = true;
- }
- return nowy;
- }
- void dodaj() {
- cin.ignore(1, '\n');
- dane.push_back(stworz_wpis_z_klawiatury());
- cin.ignore(1, '\n');
- }
- void edytuj() {
- int wybor;
- cout << "Podaj numer elementu do edycji: ";
- cin >> wybor;
- // bo liczymy od 0, a uzytkownik widzi od 1
- wybor--;
- if(wybor < 0 || wybor >= dane.size()) {
- cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
- return;
- }
- cin.ignore(1, '\n');
- dane[wybor] = stworz_wpis_z_klawiatury();
- }
- void wypisz_jeden(wpis w) {
- cout << "Nazwa: " << w.nazwa << endl;
- cout << "Producent: " << w.producent << endl;
- cout << "Typ: " << opisy[w.typ] << endl;
- cout << "Typ amunicji: " << ((strlen(w.typ_amunicji) > 1) ? w.typ_amunicji : "nie dotyczy") << endl;
- cout << "Liczba sztuk w magazynie: " << w.liczba_w_magazynie << endl;
- cout << "Liczba sztuk w ewidencji: " << w.liczba_sztuk_w_ewidencji << endl;
- cout << "Data dostawy: " << ((strlen(w.data) > 1) ? w.data : "nie dotyczy") << endl;
- cout << "Uwagi: " << w.uwagi << endl;
- cout << "Czy wymaga specjalnego przeszkolenia: " << std::boolalpha << w.wymaga_przeszkolenia << endl;
- cout << "Czy wymaga srodkow ostroznosci: " << std::boolalpha << w.wymaga_ostroznosci << endl << endl;
- }
- void wypisz() {
- for(int i = 0; i < dane.size(); i++) {
- cout << i+1 << ") \n";
- wypisz_jeden(dane[i]);
- }
- }
- void usun() {
- int wybor;
- cout << "Podaj numer elementu do usuniecia: ";
- cin >> wybor;
- // bo liczymy od 0, a uzytkownik widzi od 1
- wybor--;
- if(wybor < 0 || wybor >= dane.size()) {
- cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
- return;
- }
- dane.erase(dane.begin()+wybor);
- cout << "Ilosc elementow po usunieciu: " << dane.size() << endl;
- }
- void zmien_ewidencje() {
- int wybor, menu;
- cout << "Podaj numer elementu do zmiany ewidencji: ";
- cin >> wybor;
- // bo liczymy od 0, a uzytkownik widzi od 1
- wybor--;
- if(wybor < 0 || wybor >= dane.size()) {
- cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
- return;
- }
- cout << "1 - Dodaj do ewidencji, 2 - Wydaj z ewidencji: ";
- cin >> menu;
- if(menu == 1) {
- if(dane[wybor].liczba_w_magazynie > 0) {
- dane[wybor].liczba_sztuk_w_ewidencji++;
- dane[wybor].liczba_w_magazynie--;
- } else {
- cout << "Nie ma juz przedmiotu w magazynie.\n";
- }
- } else if(menu == 2) {
- if(dane[wybor].liczba_sztuk_w_ewidencji > 0) {
- dane[wybor].liczba_sztuk_w_ewidencji--;
- dane[wybor].liczba_w_magazynie++;
- } else {
- cout << "Nie ma juz przedmiotu w ewidencji.\n";
- }
- } else {
- cout << "Niepoprawna opcja.\n";
- }
- }
- void zmien_date_dostawy() {
- int wybor;
- cout << "Podaj numer elementu do zmiany daty: ";
- cin >> wybor;
- // bo liczymy od 0, a uzytkownik widzi od 1
- wybor--;
- if(wybor < 0 || wybor >= dane.size()) {
- cout << "Podano niepoprawny numer elementu. Numer powinien byc od 1 do " << dane.size() << endl;
- return;
- }
- cout << "Podaj nowa date: ";
- cin >> dane[wybor].data;
- }
- void wyszukaj() {
- int rodzaj_wyszukania;
- char szukany_tekst[40];
- cout << "Podaj rodzaj wyszukania: 1 - nazwa, 2 - producent, 3 - typ: ";
- cin >> rodzaj_wyszukania;
- if(rodzaj_wyszukania != 1 && rodzaj_wyszukania != 2 && rodzaj_wyszukania != 3) {
- cout << "Niepoprawny rodzaj wyszukania.\n";
- return;
- }
- cin.ignore();
- cout << "Podaj szukany tekst: ";
- cin.getline(szukany_tekst, 20, '\n');
- for(int i = 0; i < dane.size(); i++) {
- if(rodzaj_wyszukania == 1 && strstr(dane[i].nazwa, szukany_tekst) != NULL) {
- wypisz_jeden(dane[i]);
- } else if(rodzaj_wyszukania == 2 && strstr(dane[i].producent, szukany_tekst) != NULL) {
- wypisz_jeden(dane[i]);
- } else if(rodzaj_wyszukania == 3 && dane[i].typ == opis_na_numer(szukany_tekst)) {
- wypisz_jeden(dane[i]);
- }
- }
- }
- void zapisz_do_pliku() {
- string nazwa_pliku;
- FILE* plik;
- cout << "Podaj nazwe pliku: ";
- cin >> nazwa_pliku;
- plik = fopen(nazwa_pliku.c_str(), "w");
- if(plik == NULL) {
- cout << "Nie udalo sie otworzyc pliku o nazwie " << nazwa_pliku << endl;
- return;
- }
- int i;
- for(i = 0; i < dane.size()-1; i++) {
- fprintf(plik, "%s;%s;%d;%s;%d;%d;%s;%s;%d;%d\n",
- dane[i].nazwa, dane[i].producent, dane[i].typ, dane[i].typ_amunicji, dane[i].liczba_w_magazynie, dane[i].liczba_sztuk_w_ewidencji,
- dane[i].data, dane[i].uwagi, dane[i].wymaga_przeszkolenia, dane[i].wymaga_ostroznosci
- );
- }
- fprintf(plik, "%s;%s;%d;%s;%d;%d;%s;%s;%d;%d",
- dane[i].nazwa, dane[i].producent, dane[i].typ, dane[i].typ_amunicji, dane[i].liczba_w_magazynie, dane[i].liczba_sztuk_w_ewidencji,
- dane[i].data, dane[i].uwagi, dane[i].wymaga_przeszkolenia, dane[i].wymaga_ostroznosci);
- fclose(plik);
- }
- void wczytaj_z_pliku() {
- string nazwa_pliku;
- char linijka[1500];
- FILE* plik;
- wpis nowy;
- cout << "Podaj nazwe pliku: ";
- cin >> nazwa_pliku;
- plik = fopen(nazwa_pliku.c_str(), "r");
- if(plik == NULL) {
- cout << "Nie udalo sie otworzyc pliku o nazwie " << nazwa_pliku << endl;
- return;
- }
- while(!feof(plik)) {
- fgets(linijka, 1500, plik);
- sscanf(linijka, "%[^;] ; %[^;] ; %d ; %[^;] ; %d ; %d ; %[^;] ; %[^;] ; %d ; %d\n",
- nowy.nazwa, nowy.producent, &nowy.typ, nowy.typ_amunicji, &nowy.liczba_w_magazynie,
- &nowy.liczba_sztuk_w_ewidencji, nowy.data, nowy.uwagi, &nowy.wymaga_przeszkolenia, &nowy.wymaga_ostroznosci
- );
- dane.push_back(nowy);
- }
- fclose(plik);
- }
- void menu() {
- int wybor;
- while(wybor != 10) {
- cout << "1 - Dodaj\n2 - Usun\n3 - Edytuj\n4 - Wypisz\n5 - Zmien ewidencje\n6 - Zmien date dostawy\n7 - Wyszukaj\n8 - Zapisz\n9 - Wczytaj\n";
- cout << "10 - Wyjscie\n";
- cin >> wybor;
- switch(wybor) {
- case 1:
- dodaj();
- break;
- case 2:
- usun();
- break;
- case 3:
- edytuj();
- break;
- case 4:
- wypisz();
- break;
- case 5:
- zmien_ewidencje();
- break;
- case 6:
- zmien_date_dostawy();
- break;
- case 7:
- wyszukaj();
- break;
- case 8:
- zapisz_do_pliku();
- break;
- case 9:
- wczytaj_z_pliku();
- break;
- case 10:
- break;
- default:
- cout << "Nie ma takiej opcji.";
- }
- }
- }
- int main() {
- menu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement