//*******************************Sekcja bibliotek*********************************************
#include <iostream>
#include <windows.h> //np do uzywania beep xD
#include <string.h>
#include <fstream>
#include <conio.h>
using namespace std;
//*******************************Sekcja struktury*********************************************
struct BOOKS //struktura wydawnictw
{
string tytul;
string imie;
string nazwisko;
string wydawnictwo;
string rok_wydania;
string isbn;
BOOKS *next; //tworzy wskaznik next ktory wskazuje na str Book
};
//*******************************Sekcja Funkcji*********************************************
void ADD_BOOK(BOOKS *&head, string Tytul, string Imie, string Nazwisko,
string Wydawnictwo, string Rok_wydania, string Isbn, int Lp)
{
BOOKS *temp=new BOOKS; //Trudna linijka :D Tworzy wskaznik ktory ma wskazywac na NOWA strukture. Stad tez new book
BOOKS *help; //pomocny wskaznik
int iteracja=0;
help=head; //od tej pory help wskazuje na nasza strukture
temp->tytul=Tytul;
temp->imie=Imie;
temp->nazwisko=Nazwisko;
temp->wydawnictwo=Wydawnictwo;
temp->rok_wydania=Rok_wydania;
temp->isbn=Isbn;
if(Tytul==""){temp->tytul="-";}
if(Imie==""){temp->imie="-";}
if(Nazwisko==""){temp->nazwisko="-";}
if(Wydawnictwo==""){temp->wydawnictwo="-";}
if(Rok_wydania==""){temp->rok_wydania="-";}
if(Isbn==""){temp->isbn="-";}
if(head==NULL || Lp==0)
{
temp->next=head; //Wskazniokowi temp przypisujemy nastepna pozycje head - cos takiego. dziffffne to :D
head=temp;
temp=NULL; //zerujemy wskaznik temp
}else
{
while(help!=NULL)
{
if(help->next==NULL)
{
temp->next=NULL;
help->next=temp;
break;
}else
{
if(iteracja==Lp-1)
{
temp->next=help->next;
help->next=temp;
break;
}
}
help=help->next;
iteracja++;
}
}
}
void DEL_BOOK(BOOKS *&head, int Lp)
{
if(head!=NULL) //jesli struktura istnieje
{
BOOKS *temp, *help;
int iteracja=0;
temp=head; //temp przypiuje head.... zas temp to wskaznik
if(Lp==0)
{
head=temp->next;
delete temp; //Kasuje temp
}else
{
while(temp->next!=NULL) //dopoki kolejny element temp nie jest 0 wykonuj:
{
if(iteracja==Lp-1)
{
if(temp->next->next==NULL) //analogicznie jak wyzej
{
help=temp->next;
temp->next=NULL;
delete help;
break;
}else
{
help=temp->next;
temp->next=temp->next->next;
delete help;
break;
}
}
iteracja++;
temp=temp->next;
}
}
}
}
void DEL_ALL_BOOKS(BOOKS *&head)
{
if(head!=NULL)
{
BOOKS *temp=head;
BOOKS *help=head;
while(help!=NULL)
{
temp=help;
help=temp->next;
head=temp->next;
delete temp;
}
head=NULL;
}
}
void EDIT_BOOK(BOOKS *&head, int Lp)
{
if(head!=NULL)
{
cin.sync();
bool find=false;
BOOKS *temp=head;
int iterator=0;
while(temp!=NULL)
{
if(iterator==Lp)
{
string Tytul;
string Imie;
string Nazwisko;
string Wydawnictwo;
string Rok_wydania;
string Isbn;
cout<<"Tytul: ";getline(cin,Tytul);
cout<<"Imie: ";getline(cin,Imie);
cout<<"Nazwisko: ";getline(cin,Nazwisko);
cout<<"Wydawnictwo: ";getline(cin,Wydawnictwo);
cout<<"Rok_wydania: ";getline(cin,Rok_wydania);
cout<<"Isbn: ";getline(cin,Tytul);
temp->tytul=Tytul;
temp->imie=Imie;
temp->nazwisko=Nazwisko;
temp->wydawnictwo=Wydawnictwo;
temp->rok_wydania=Rok_wydania;
temp->isbn=Isbn;
find=true;
break;
}else
find=false;
temp=temp->next;
iterator++;
}
}
}
void EXPORT_BOOKS(BOOKS *&head, string Name_fils)
{
fstream file(Name_fils.c_str(), ios::out );
if( file.good() )
{
BOOKS *temp=head;
while(temp!=NULL)
{
file<<temp->tytul<<endl<<temp->imie<<endl<<temp->nazwisko<<endl<<
temp->wydawnictwo<<endl<<temp->rok_wydania<<
endl<<temp->isbn<<endl<<"**************"<<endl;
temp=temp->next;
}
file.close();
}else
cout<<"nie można utworzyc pliku"<<endl;
file.close();
}
void INPORT_BOOKS(BOOKS *&head,string Name_fils)
{
system("CLS");
fstream file;
file.open( Name_fils.c_str());
int a;
int iterator=0;
string Tytul;
string Imie;
string Nazwisko;
string Wydawnictwo;
string Rok_wydania;
string Isbn;
string spr;
if( file.good() )
{
while(!file.eof())
{
getline(file,Tytul);
getline(file,Imie);
getline(file,Nazwisko);
getline(file,Wydawnictwo);
getline(file,Rok_wydania);
getline(file,Isbn);
getline(file,spr);
ADD_BOOK(head, Tytul,Imie, Nazwisko,
Wydawnictwo,Rok_wydania,Isbn,iterator);
iterator++;
}
file.close();
cout<<"Rekordy zostaly zaladowane\n\n";
}else
cout<<"nie ma takiego pliku"<<endl;
file.close();
}
void VIEW(BOOKS *&temp)
{
if(temp!=NULL){
cout<<"TYTUL :\t\t"<<temp->tytul<<endl;
cout<<"AUTOR :\t\t"<<temp->imie<<" "<<temp->nazwisko<<endl;
cout<<"WYDAWNICTWO :\t"<<temp->wydawnictwo<<endl;
cout<<"ROK :\t\t"<<temp->rok_wydania<<endl;
cout<<"ISBN :\t\t"<<temp->isbn<<"\n*********************************************"<<endl;
cout<<endl<<endl;
}
else
cout<<"Brak rekordow do wyswietlenia";
}
void VIEW2(BOOKS *&temp) //Moja funkcyja :D
{
if(temp!=NULL){
cout<<"\t"<<temp->tytul<<endl;
}
else
cout<<"Brak rekordow do wyswietlenia";
}
void TITLE(BOOKS *&head) //takie cos napisane przezemnie :P
{
system("CLS");
int iteracja=0;
if(head!=NULL)
{
BOOKS *temp= head;
while(temp!=NULL)
{
cout<<"\t"<<iteracja;// <<endl;
VIEW2(temp);
temp=temp->next;
iteracja++;
}
}
}
void SHOW_ONE_BOOK(BOOKS *&head, int Which)
{
if(head!=NULL)
{
BOOKS *temp= head;
int iterator=0;
system("CLS");
while(temp!=NULL)
{
if(iterator==Which)
{
VIEW(temp);
}
temp=temp->next;
iterator++;
}
}
}
void FIND_BOOKS(BOOKS *&head, string Parametr)
{
string word;
int iterator=0;
int pozycja=0;
EXPORT_BOOKS(head,"temp.txt");
fstream file("temp.txt");
while(!file.eof()) //eof to end of file czyli wykonuj dopoki nie ma znaku konca pliku
{
file>>word;
if(word==Parametr)
{
cout<<"slowo znalezione zostalo w pozycji:"<<endl;
SHOW_ONE_BOOK(head, pozycja);
}
if(word=="**************")
{
pozycja++;
}
}
}
void SHOW_ALL_BOOK(BOOKS *&head)
{
int iteracja=0;
if(head!=NULL)
{
BOOKS *temp= head;
while(temp!=NULL)
{
cout<<"ID "<< iteracja <<endl;
VIEW(temp);
temp=temp->next;
iteracja++;
}
}
}
int main()
{
BOOKS *head; //wskaznik head na strukture
head=NULL; //ustawiamy wskaznik na zero
int stop=0;
for(;;) //petla for działająca w nieskonczonosc
{
cout<<"MENU"<<endl;
cout<<"\n0-Wyczysc\n1-Dodaj\n2-Usun\n3-Edytuj\n4-Eksportuj\n5-Importuj\n6-Znajdz\n7-Pokaz wszystkie\n8-Pokaz pojedynczy rekord\n9-Zakoncz"<<endl;
char choice;
//system("CLS");
choice=getch(); //dzieki temu bajerowi mozna wybrac opcje np 2 bez potwierdzania jej jak w przypadku cin>>
int pozycja=0;
switch(choice)
{
case '0':
{
system("CLS");
}break;
case '1':
{
system("CLS");
cin.sync();
string Tytul;
string Imie;
string Nazwisko;
string Wydawnictwo;
string Rok_wydania;
string Isbn;
cout<<"Tytul: ";getline(cin,Tytul);
cout<<"Imie: ";getline(cin,Imie);
cout<<"Nazwisko: ";getline(cin,Nazwisko);
cout<<"Wydawnictwo: ";getline(cin,Wydawnictwo);
cout<<"Rok_wydania: ";getline(cin,Rok_wydania);
cout<<"Isbn: ";getline(cin,Isbn);
cout<<"Pozycja (typ int)"<<endl;
cin>>pozycja;
ADD_BOOK(head, Tytul, Imie, Nazwisko,
Wydawnictwo, Rok_wydania, Isbn, pozycja);
system("CLS");
}break;
case '2':
{
cin.sync(); //czysci bufor pamieci. Tak na wypadek by nie zaladowalo np 5... bo usunie wtedy pozycje 5 mimo ze tego nie chcemy
system("CLS");
if(*&head==NULL) { //jesli head (czyli wskaznik do struktury) wskazuje na zero to
cout<<"\nBrak ksiazek\n\n";Beep(300,200);}
else {
SHOW_ALL_BOOK(head); //wywolanie funkcji
cout<<"\n******************\nPodaj Pozycje ktora chcesz skasowac: ";cin>>pozycja;
char znak;
cout<<"Czy napewno chcesz usunac pozycje t/n\n";
znak=getch();
if(znak=='t' ){
SHOW_ONE_BOOK(head, pozycja);
DEL_BOOK(head, pozycja);
}
else {
system("CLS");
cout<<"\nRekord NIE zostal usuniety\n\n";
}
}
}break;
case '3':
{
cin.sync();
int pozycja=0;
cout<<"\n*******************\nPodaj Pozycje ktora chcesz edytowac: ";cin>>pozycja;
EDIT_BOOK(head, pozycja);
}break;
case '4':
{
cin.sync();
string file_name;
//cout<<"Podaj nazwe pliku: ";cin>>file_name;
file_name="Baza_Danych.txt";
INPORT_BOOKS(head,file_name);
}break;
case '5':
{
cin.sync();
string file_name;
file_name="Baza_Danych.txt";
EXPORT_BOOKS(head,file_name);
cout<<"Dane zostaly dodane do pliku oraz bufor pamieci zostal wyczyszczony\n***************************"; Beep(300,200);
DEL_ALL_BOOKS(head);
}break;
case '6':
{
cin.sync();
string parametr;
cout<<"Podaj slowo które wyszukac: ";cin>>parametr;
FIND_BOOKS(head, parametr);
}break;
case '7':
{
system("CLS");
if(*&head==NULL) {
cout<<"\nBrak ksiazek do wyswietlenia\n\n";Beep(300,200);}
else {
cout<<"**********Ksiazki**********";
SHOW_ALL_BOOK(head);
}
}break;
case '8':
{
cin.sync();
TITLE(head);
int which;
cout<<"\n********************\nPodaj pozycje do wyswietlenia: ";cin>>which;
SHOW_ONE_BOOK(head, which);
}break;
case '9':
stop=1;
break;
default:
break;
}
if(stop==1)
{
break;
}
}
}