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