rendered paste body#include <cstdio>#include <cstdlib>#include <cstring>struct lista{ unsigned int lp; unsigned int ilosc; double cena; lista* nastepny;};lista* poczatek=NULL;int dodaj(void){ if(poczatek == NULL) { poczatek=(lista*)malloc(sizeof(lista)); if(poczatek == NULL) return 1; poczatek->lp = 1; printf("Podaj ilosc produktu : "); scanf("%d",&poczatek->ilosc); printf("Podaj cene produktu : "); scanf("%lf",&poczatek->cena); poczatek->nastepny = NULL; } else { lista* wsk=poczatek; lista* nowy; while(wsk->nastepny != NULL) { wsk = wsk->nastepny; } nowy=(lista*)malloc(sizeof(lista)); if(nowy == NULL) return 1; wsk->nastepny = nowy; nowy->nastepny = NULL; nowy->lp = (wsk->lp)+1; printf("Podaj ilosc towaru : "); scanf("%d",&nowy->ilosc); printf("Podaj cene towaru : "); scanf("%lf",&nowy->cena); } return 0;}void szukaj(void){ if(poczatek == NULL) { printf("Baza danych jest pusta!\n"); return; } printf("Wyswietlany jest pierwszy rekord, ktory spelnia jakiekolwiek z podanych kryteriow.\n"); printf("Podaj liczbe poczatkowa towaru : "); unsigned int szukana_lp; scanf("%ud",&szukana_lp); printf("Podaj ilosc towaru : "); unsigned int szukana_ilosc; scanf("%ud",&szukana_ilosc); printf("Podaj cene towaru : "); double szukana_cena; scanf("%lf",&szukana_cena); lista* wsk=poczatek; while(wsk != NULL) { if((wsk->lp == szukana_lp) || (wsk->ilosc == szukana_ilosc) || (wsk->cena == szukana_cena)) { printf("Liczba porzadkowa : %d\n",wsk->lp); printf("\nIlosc towaru : %d\n",wsk->ilosc); printf("Cena towaru : %lf\n",wsk->cena); break; } wsk = wsk->nastepny; }}void wyswietl(void){ if(poczatek == NULL) { printf("Baza danych jest pusta!\n"); return; } lista* wsk=poczatek; while(wsk != NULL) { printf("Liczba porzadkowa : %d\n",wsk->lp); printf("Ilosc towaru : %d\n",wsk->ilosc); printf("Cena towaru : %lf\n",wsk->cena); wsk = wsk->nastepny; }}void usun(void){ if(poczatek == NULL) { printf("Baza danych jest pusta!\n"); return; } printf("Podaj liczbe porzadkowa pozycji, ktora chcesz usunac : "); unsigned int usuwany_lp; scanf("%ud",&usuwany_lp); lista* wsk=poczatek; lista* usuwany; bool znaleziono_element; while(wsk->nastepny != NULL) { if(((wsk->nastepny)->lp) == usuwany_lp) { znaleziono_element = true; usuwany = wsk->nastepny; break; } wsk=wsk->nastepny; } if(!znaleziono_element) { printf("Nie udalo sie znalezc elementu o danej liczbie porzadkowej.\n"); return; } wsk->nastepny = usuwany->nastepny; free(usuwany); wsk = wsk->nastepny; while(wsk != NULL) { wsk->lp = (wsk->lp)-1; wsk = wsk->nastepny; }}int wczytaj(void){ FILE* plik; printf("Podaj nazwe pliku (bez rozszerzenia) : "); char nazwa[255]; scanf("%s",nazwa); if(strlen(nazwa) >= 250) return 4; // nazwa za dluga strcat(nazwa,".xdb"); plik=fopen(nazwa,"r"); if(plik == NULL) return 1; // nie udalo sie otworzyc pliku char test[3]; fscanf(plik,"%s\n",test); if(strcmp(test,"XDB") != 0) return 2; // plik nie jest plikiem bazy danych if(poczatek == NULL) { poczatek=(lista*)malloc(sizeof(lista)); if(poczatek == NULL) return 3; // blad pamieci fscanf(plik,"%d %d %lf\n",&poczatek->lp,&poczatek->ilosc,&poczatek->cena); poczatek->nastepny = NULL; } lista* wsk=poczatek; while(wsk->nastepny != NULL) { wsk = wsk->nastepny; } lista* nowy; while(!feof(plik)) { nowy=(lista*)malloc(sizeof(nowy)); if(nowy == NULL) return 3; // blad pamieci wsk->nastepny = nowy; fscanf(plik,"%d %d %lf\n",&nowy->lp,&nowy->ilosc,&nowy->cena); wsk = nowy; } fclose(plik); return 0;}int zapisz(void){ if(poczatek == NULL) return 5; // baza pusta FILE* plik; char nazwa[255]; printf("Podaj nazwe pliku (bez rozszerzenia) : "); scanf("%s",nazwa); if(strlen(nazwa) >= 250) return 4; // nazwa za dluga strcat(nazwa,".xdb"); plik=fopen(nazwa,"w"); if(plik == NULL) return 1; // nie udalo sie otworzyc pliku fprintf(plik,"XDB\n"); lista* wsk=poczatek; while(wsk != NULL) { fprintf(plik,"%d %d %lf\n",wsk->lp,wsk->ilosc,wsk->cena); wsk = wsk->nastepny; } fclose(plik); return 0;}int menu(void){ printf("1. Dodaj pozycje do bazy danych.\n"); printf("2. Wyszukaj pozycje w bazie danych.\n"); printf("3. Wyswietl cala baze danych.\n"); printf("4. Usun pozycje z bazy danych.\n"); printf("5. Wczytaj baze z pliku.\n"); printf("6. Zapisz baze do pliku.\n"); printf("7. Koniec pracy.\nTwoj wybor : "); int wybor; scanf("%d",&wybor); switch(wybor) { case 1: if(dodaj() != 0) printf("Operacja nie powiodla sie!"); return 0; case 2: szukaj(); return 0; case 3: wyswietl(); return 0; case 4: usun(); return 0; case 5: if(wczytaj() != 0) printf("Operacja nie powiodla sie!"); return 0; case 6: if(zapisz() != 0) printf("Operacja nie powiodla sie!"); return 0; case 7: return 1; default: printf("Nie wybrales poprawnej pozycji!\n"); return 0; }}int main(void){ int a; do { a = menu(); } while (a == 0);}