//*******************************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; } } }