Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Historia panstw.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include<iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- struct Wydarzenie
- {
- string zdarzenie;
- int data;
- Wydarzenie *nast;
- };
- struct Panstwo // struktura zawierajace dane panstwa
- {
- string nazwapanstwa;
- string kontynent;
- string iglowapanstwa; //imie glowy panstwa
- string nglowapanstwa; //nazwisko glowy panstwa
- Panstwo *nastepny; // wskaznik na nastepny element listy
- Wydarzenie *wydarzenia;
- Panstwo() // konstruktor - wywolywany przy tworzeniu obiektu
- {
- // wczytujemy dane
- cout << "Podaj nazwe panstwa: ";
- getchar(); getline(cin, nazwapanstwa);
- cout << "Podaj nazwe kontynentu: ";
- cin >> kontynent;
- cout << "Podaj imie glowy pansta: ";
- cin >> iglowapanstwa;
- cout << "Podaj nazwisko glowy pansta: ";
- cin >> nglowapanstwa;
- // wskazniki ustawiamy na NULL
- nastepny = NULL;
- }
- void wypisz()
- {
- cout << "Panstwo: " << nazwapanstwa<< " Kontynent: " << kontynent << " Glowa panstwa: " << iglowapanstwa<<" " <<nglowapanstwa <<endl;
- }
- };
- void dodaj_Panstwo(Panstwo **glowa)
- {
- Panstwo *nowa = new Panstwo; // utworzenie nowej Panstwa
- Panstwo *pomoc = (*glowa), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
- while (pomoc != NULL && (pomoc->nazwapanstwa).compare(nowa->nazwapanstwa) == -1) // dopoki nie wyszlismy za liste i nazwisko na liscie jest przed nowym nazwiskiem poruszamy sie dalej
- {
- pomoc1 = pomoc; // pomoc1 zawsze wskazuje poprzednika pomoc
- pomoc = pomoc->nastepny;
- }
- if (pomoc != NULL && (pomoc->nazwapanstwa).compare(nowa->nazwapanstwa) == 0) // Panstwo z podanym nazwiskiem juz istanieje
- {
- cout << "Panstwo " << nowa->nazwapanstwa << " juz istanieje w liscie panstw\n";
- delete nowa; // usuniecie obiektu
- }
- else if ((*glowa) == NULL || (pomoc == (*glowa) && (pomoc->nazwapanstwa).compare(nowa->nazwapanstwa) == 1)) // nowy element bedzie glowa listy
- {
- nowa->nastepny = (*glowa);
- (*glowa) = nowa;
- }
- else // dodajemy Panstwo w srodku lub na koncu listy
- {
- pomoc1->nastepny = nowa;
- nowa->nastepny = pomoc;
- }
- }
- void wyszukaj_Panstwo(Panstwo *glowa, string a)
- {
- while (glowa != NULL && (glowa->nazwapanstwa).compare(a) != 0) // dopoki nie znajdziemy panstwa z podanya nazwaub nie przeszukamy calej listy panstw
- glowa = glowa->nastepny;
- if (glowa == NULL)
- cout << "Nie ma Panstwa " << a << endl;
- else
- glowa->wypisz();
- }
- void edytuj_Panstwo(Panstwo *glowa, string a)
- {
- string nkontynent;
- string niglowapanstwa; //imie glowy panstwa
- string nnglowapanstwa; //nazwisko glowy panstwa
- while (glowa != NULL && (glowa->nazwapanstwa).compare(a) != 0) // dopoki nie znajdziemy panstwa z podanya nazwaub nie przeszukamy calej listy panstw
- glowa = glowa->nastepny;
- if (glowa == NULL)
- cout << "Nie ma Panstwa " << a << endl;
- else
- {
- cout << "Podaj nowa nazwe kontynentu: ";
- cin >> nkontynent;
- cout << "Podaj nowe imie glowy pansta: ";
- cin >> niglowapanstwa;
- cout << "Podaj nowe nazwisko glowy pansta: ";
- cin >> nnglowapanstwa;
- glowa->kontynent = nkontynent;
- glowa->iglowapanstwa = niglowapanstwa;
- glowa->nglowapanstwa = nnglowapanstwa;
- glowa->wypisz();
- }
- }
- void wypisz_panstwa(Panstwo *glowa)
- {
- cout << "Historia Panstw:\n";
- while (glowa != NULL)
- {
- glowa->wypisz(); // wypisanie 1 panstwa
- glowa = glowa->nastepny; // przejscie na kolejny element
- }
- }
- bool usun_Panstwo(Panstwo **glowa, string a)
- {
- if ((*glowa) == NULL) // lista jest pusta
- return false;
- Panstwo *pomoc = (*glowa), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
- while (pomoc != NULL && (pomoc->nazwapanstwa).compare(a) != 0) // dopoki nie znajdziemy Panstwa z podanym nazwapanstwa lub nie przeszukamy calej Histori panstw
- {
- pomoc1 = pomoc;
- pomoc = pomoc->nastepny;
- }
- if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwapanstwa na liscie
- return false;
- else if (pomoc == (*glowa)) // usuwamy koniec
- {
- (*glowa) = (*glowa)->nastepny;
- delete pomoc;
- }
- else // usuwamy z srodka lub konca listy
- {
- pomoc1->nastepny = pomoc->nastepny;
- delete pomoc;
- }
- return true;
- }
- int main()
- {
- char instrukcja;
- string nazwapanstwa;
- Panstwo *glowa = NULL; // glowa listy - wskaznik na pierwszy element
- cout << "Historia Panstw - operacje\n"
- << "d - dodanie Panstwa\n"
- << "s - wyszukanie Panstwa\n"
- << "e - edytowanie Panstwa\n"
- << "w - wypisanie calej Histori Panstw\n"
- << "u - usuniecie Panstwa\n"
- << "x - koniec programu\n";
- while (cin >> instrukcja)
- {
- switch (instrukcja)
- {
- case 'd':
- dodaj_Panstwo(&glowa);
- break;
- case 's':
- cout << "Podaj nazwe panstwa: ";
- cin >> nazwapanstwa;
- wyszukaj_Panstwo(glowa, nazwapanstwa);
- break;
- case 'e':
- cout << "Podaj nazwe panstwa: ";
- cin >> nazwapanstwa;
- edytuj_Panstwo(glowa, nazwapanstwa);
- break;
- case 'w':
- wypisz_panstwa(glowa);
- break;
- case 'u':
- cout << "Podaj nazwe panstwa: ";
- cin >> nazwapanstwa;
- if (!usun_Panstwo(&glowa, nazwapanstwa))
- cout << "Nie odnaleziono Panstwa z podanym nazwapanstwa" << endl;
- else
- cout << "Panstwo z podanym nazwapanstwa zostala usunieta" << endl;
- break;
- case 'x':
- exit(0);
- break;
- default:
- cout << "Musisz wybrac jedna z opcji: d - dodawanie, s - wyszukiwanie, w - wypisanie zawartosci lub u - usuwanie\n";
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement