Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <fstream>
  4. #include <sstream>
  5. #include <stdio.h>
  6. #include <ctype.h>
  7.  
  8. using namespace std;
  9.  
  10. struct Date
  11. {
  12. int dzien, miesiac, rok;
  13. void GetDate(){
  14. cout << dzien << '-' << miesiac << '-' << rok;
  15. }
  16. };
  17.  
  18. struct Osoba
  19. {
  20. int ID;
  21. string imie;
  22. string nazwisko;
  23. string miasto;
  24. string imiepsa;
  25. Date dataUrodzenia;
  26.  
  27. void WypiszDane()
  28. {
  29. cout << "\nID: " << ID << ", \nImie: " << imie << ", \nNazwisko: " << nazwisko << ", \nMiasto: " << miasto << ", \nImie psa: " << imiepsa << "\nData urodzenia: ";
  30. dataUrodzenia.GetDate();
  31. cout << endl;
  32. }
  33. };
  34.  
  35. // LISTA
  36. struct Ogniwo
  37. {
  38. Ogniwo * poprzedni;
  39. Ogniwo * nastepny;
  40. Osoba osoba;
  41. };
  42.  
  43. struct Iterator
  44. {
  45. Ogniwo * wsk;
  46. };
  47.  
  48. Iterator poczatek;
  49. Iterator koniec;
  50. int size;
  51.  
  52. void StworzListe(Osoba osoba)
  53. {
  54. Ogniwo * o = new Ogniwo(); //tworzymy nowy wskaŸnik typu Osoba
  55. o->nastepny = o; //jest tylko jeden segment wiêc o bêdzie wskazywaæ na samego siebie
  56. o->poprzedni = o;
  57. o->osoba = osoba;
  58. poczatek.wsk = o; //ustalamy poczatkowy wskaznik
  59. koniec.wsk = o; //ustalamy koncowy wskaznik
  60. size = 1;
  61. }
  62.  
  63. Iterator Insert(Iterator it, Osoba osoba)
  64. {
  65. Ogniwo * a = it.wsk;
  66. Ogniwo * b = new Ogniwo();
  67. Ogniwo * c = a->nastepny;
  68. b->nastepny = c;
  69. b->poprzedni = a;
  70. b->osoba = osoba;
  71. c->poprzedni = b;
  72. a->nastepny = b;
  73. if (b->nastepny == b)
  74. koniec.wsk = b;
  75. size++;
  76. return it;
  77. }
  78.  
  79. Iterator Delete(Iterator it)
  80. {
  81. Ogniwo * b = it.wsk;
  82. Ogniwo * a = b->poprzedni;
  83. Ogniwo * c = b->nastepny;
  84. a->nastepny = c;
  85. c->poprzedni = a;
  86. if (poczatek.wsk == b)
  87. poczatek.wsk = c; //jeœli usuwamy pierwszy segment listy, musimy ustaliæ nowy
  88. if (koniec.wsk == b)
  89. koniec.wsk = a; //jeœli usuwamy ostatni segment listy, musimy ustaliæ nowy
  90. delete b;
  91. it.wsk = a;
  92. size--;
  93. return it;
  94. }
  95.  
  96.  
  97. // /LISTA
  98.  
  99.  
  100. bool zainicjalizowanoListe = false;
  101.  
  102. void Error()
  103. {
  104. cin.ignore();
  105. cin.clear();
  106. cout << "Podano zla wartosc zmiennej.\n";
  107. system("pause > nul");
  108. }
  109.  
  110. void DodajOsobe(Iterator it = poczatek, bool clear = true)
  111. {
  112. if (clear)
  113. system("cls");
  114. Osoba o;
  115. o.ID = !zainicjalizowanoListe ? 1 : size + 1;
  116.  
  117. cout << "Podaj imie\n";
  118. cin >> o.imie;
  119. cout << "Podaj nazwisko\n";
  120. cin >> o.nazwisko;
  121. cout << "Podaj miasto\n";
  122. cin >> o.miasto;
  123. cout << "Podaj imie psa\n";
  124. cin >> o.imiepsa;
  125.  
  126. cout << "Podaj dzien urodzin\n";
  127. cin >> o.dataUrodzenia.dzien;
  128. cout << "Podaj miesiac urodzin\n";
  129. cin >> o.dataUrodzenia.miesiac;
  130. cout << "Podaj rok w ktorym osoba sie urodzila\n";
  131. cin >> o.dataUrodzenia.rok;
  132.  
  133. if (!cin)
  134. {
  135. system("cls");
  136. Error();
  137. return;
  138. }
  139.  
  140. if (!zainicjalizowanoListe)
  141. {
  142. StworzListe(o);
  143. zainicjalizowanoListe = true;
  144. }
  145. else
  146. Insert(it, o);
  147. }
  148.  
  149. void UsunOsobe()
  150. {
  151. string nazwisko;
  152. bool znaleziono = false;
  153.  
  154. cout << "Podaj Nazwisko osoby ktora chcesz usunac z listy\n";
  155. cin >> nazwisko;
  156.  
  157. Iterator it = poczatek;
  158. for (int i = 0; i < size; i++)
  159. {
  160. Osoba osoba = it.wsk->osoba;
  161. if (nazwisko == osoba.nazwisko)
  162. {
  163. Delete(it);
  164. znaleziono = true;
  165. break;
  166. }
  167. else
  168. it.wsk = it.wsk->nastepny;
  169. }
  170. if (!znaleziono)
  171. cout << "Nie znaleziono osoby w bazie.\n";
  172. system("pause>nul");
  173. }
  174.  
  175. void WyszukajOsobe()
  176. {
  177. string nazwisko;
  178. bool znaleziono = false;
  179.  
  180. cout << "Podaj Nazwisko osoby ktora chcesz znalezc\n";
  181. cin >> nazwisko;
  182.  
  183. Iterator it = poczatek;
  184. for (int i = 0; i < size; i++)
  185. {
  186. Osoba osoba = it.wsk->osoba;
  187. if (nazwisko == osoba.nazwisko)
  188. {
  189. osoba.WypiszDane();
  190. znaleziono = true;
  191. }
  192. it.wsk = it.wsk->nastepny;
  193. }
  194. char wybor = 'T';
  195. if (znaleziono)
  196. system("pause>nul");
  197. else
  198. {
  199. cout << "Nie znaleziono osoby o danym nazwisku, powrocic do menu?(T/N)\n";
  200. cin >> wybor;
  201. }
  202. if (wybor != 'T' && wybor != 't')
  203. WyszukajOsobe();
  204. }
  205.  
  206. void WyswietlWgNazwiska()
  207. {
  208. if (zainicjalizowanoListe)
  209. {
  210. Iterator it = koniec;
  211. for (int i = 0; i < size; i++)
  212. {
  213. it.wsk->osoba.WypiszDane();
  214. it.wsk = it.wsk->poprzedni;
  215. }
  216. }
  217. else
  218. cout << "Lista jest pusta.\n";
  219. system("pause>nul");
  220. }
  221.  
  222. void ModyfikujOsobe()
  223. {
  224. int ID;
  225. bool znaleziono = false;
  226. cout << "Podaj ID osoby ktora chcesz zmodyfikowac\n";
  227. cin >> ID;
  228.  
  229. if (!cin)
  230. {
  231. system("cls");
  232. Error();
  233. return;
  234. }
  235.  
  236. Iterator it = poczatek;
  237. for (int i = 0; i < size; i++)
  238. {
  239. Osoba osoba = it.wsk->osoba;
  240. if (ID == osoba.ID)
  241. {
  242. osoba.WypiszDane();
  243. znaleziono = true;
  244. DodajOsobe(it, false);
  245. Delete(it);
  246. break;
  247. }
  248. else
  249. it.wsk = it.wsk->nastepny;
  250. }
  251. char wybor = 'T';
  252. if(!znaleziono)
  253. {
  254. cout << "Nie znaleziono osoby o danym ID, powrocic do menu?(T/N)\n";
  255. cin >> wybor;
  256. }
  257.  
  258. if (wybor != 'T' && wybor != 't')
  259. ModyfikujOsobe();
  260. }
  261.  
  262. void ZapiszDoPliku()
  263. {
  264. ofstream myFile;
  265. string nazwaPliku;
  266. cout << "Podaj nazwe pliku do ktorego chcesz zapisac dane.\n";
  267. cin >> nazwaPliku;
  268.  
  269. myFile.open((nazwaPliku + ".txt").c_str());
  270. Iterator it = poczatek;
  271. for (int i = 0; i < size; i++)
  272. {
  273. Osoba osoba = it.wsk->osoba;
  274. myFile << osoba.ID << " " << osoba.imie << " " << osoba.nazwisko << " " << osoba.miasto << " " << osoba.imiepsa << " " << osoba.dataUrodzenia.dzien << " " << osoba.dataUrodzenia.miesiac << " " << osoba.dataUrodzenia.rok << " \n";
  275. it.wsk = it.wsk->nastepny;
  276. }
  277. myFile.close();
  278. }
  279.  
  280. void OdczytajZPliku()
  281. {
  282. string nazwaPliku;
  283. cout << "Podaj nazwe pliku z ktorego chcesz odczytac dane.\n";
  284. cin >> nazwaPliku;
  285.  
  286. string line;
  287. ifstream myFile((nazwaPliku + ".txt").c_str());
  288. if (myFile.is_open())
  289. {
  290. zainicjalizowanoListe = false;
  291. while (getline(myFile, line))
  292. {
  293. Osoba o;
  294. string elementOsoby = ""; //przechowuje pojedynczy element osoby
  295. int counter = 0; //okreœla który element osoby aktualnie ustalamy
  296.  
  297. for (int i = 0; i < line.length(); i++)
  298. {
  299. if (line[i] == ' ')
  300. {
  301. if (counter == 0) o.ID = atoi(elementOsoby.c_str());
  302. else if (counter == 1) o.imie = elementOsoby;
  303. else if (counter == 2) o.nazwisko = elementOsoby;
  304. else if (counter == 3) o.miasto = elementOsoby;
  305. else if (counter == 4) o.imiepsa = elementOsoby;
  306. else if (counter == 5) o.dataUrodzenia.dzien = atoi(elementOsoby.c_str());
  307. else if (counter == 6) o.dataUrodzenia.miesiac = atoi(elementOsoby.c_str());
  308.  
  309. else o.dataUrodzenia.rok = atoi(elementOsoby.c_str());
  310. elementOsoby = "";
  311. counter++;
  312. continue;
  313. }
  314. elementOsoby += line[i];
  315. }
  316. if (!zainicjalizowanoListe)
  317. {
  318. StworzListe(o);
  319. zainicjalizowanoListe = true;
  320. }
  321. else
  322. Insert(poczatek, o);
  323. }
  324. }
  325. else
  326. {
  327. cout << "Plik nie zostal odnaleziony.\n";
  328. system("pause>nul");
  329. }
  330. myFile.close();
  331. }
  332.  
  333. int main()
  334. {
  335. StworzListe(Osoba());
  336. char wybor = '0';
  337. while (wybor != '8')
  338. {
  339. cout << "\tMENU\n";
  340. cout << "1. Dodaj nowa osobe\n";
  341. cout << "2. Usun nowa osobe\n";
  342. cout << "3. Wyszukaj osobe\n";
  343. cout << "4. Wyswietl baze osob wg nazwisk\n";
  344. cout << "5. Modyfikuj osobe po ID\n";
  345. cout << "6. Zapisz do pliku\n";
  346. cout << "7. Odczytaj z pliku\n";
  347. cout << "8. Koniec pracy\n";
  348. cin >> wybor;
  349. system("cls");
  350. switch (wybor){
  351. case '1':DodajOsobe(); break;
  352. case '2':UsunOsobe(); break;
  353. case '3':WyszukajOsobe(); break;
  354. case '4':WyswietlWgNazwiska(); break;
  355. case '5':ModyfikujOsobe(); break;
  356. case '6':ZapiszDoPliku(); break;
  357. case '7':OdczytajZPliku(); break;
  358. }
  359. system("cls");
  360. }
  361. return 0;
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement