Advertisement
Guest User

Untitled

a guest
Jan 24th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.53 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. int id = 1;
  10.  
  11. struct student
  12. {
  13. int const id;
  14. string nazwisko;
  15. string specjalnosc;
  16. float srednia;
  17. };
  18.  
  19. void dodaj(vector<student*> &baza, int id, string nazwisko, string specjalnosc, float srednia)
  20. {
  21. student* a = new student{ id };
  22. a->nazwisko = nazwisko;
  23. a->specjalnosc = specjalnosc;
  24. a->srednia = srednia;
  25. baza.push_back(a);
  26. }
  27.  
  28. void z_pliku(vector<student*> &baza)
  29. {
  30. ifstream plik{ "dane.txt", ios::in };
  31. if (!plik)
  32. {
  33. string a = "\nBrak pliku z danymi do wczytania.";
  34. throw a;
  35. }
  36. else
  37. {
  38. int id;
  39. string nazwisko, specjalnosc;
  40. float srednia;
  41. bool przerwano = false;
  42. plik.exceptions(ifstream::failbit | ifstream::badbit);
  43. while (!plik.eof())
  44. {
  45. try
  46. {
  47. plik >> id;
  48. if (id > ::id)
  49. ::id = id;
  50. plik >> nazwisko;
  51. plik >> specjalnosc;
  52. plik >> srednia;
  53. }
  54. catch(ifstream::failure e)
  55. {
  56. przerwano = true;
  57. break;
  58. }
  59. dodaj(baza, id, nazwisko, specjalnosc, srednia);
  60. }
  61. ::id++;
  62. if (przerwano)
  63. cout << "\nBlad wczytywania plikow z 'dane.txt'.";
  64. else
  65. cout << "\nWczytano dane z pliku 'dane.txt'.";
  66. }
  67. plik.close();
  68. }
  69.  
  70. void dodaj_recznie(vector<student*> &baza)
  71. {
  72. string nazwisko, specjalnosc;
  73. float srednia;
  74. cout << "\nPodaj nazwisko nowego studenta: ";
  75. cin >> nazwisko;
  76. cout << "\nPodaj specjalnosc nowego studenta: ";
  77. cin >> specjalnosc;
  78. cout << "\nPodaj srednia nowego studenta: ";
  79. cin >> srednia;
  80. dodaj(baza, ::id, nazwisko, specjalnosc, srednia);
  81. cout << "\nDodano nowego studenta.";
  82. ::id++;
  83. return;
  84. }
  85.  
  86. void wyswietl_wszystko(vector<student*> baza)
  87. {
  88. cout << endl;
  89. for (auto e : baza)
  90. cout << e->id << " " << e->nazwisko << " " << e->specjalnosc << " " << e->srednia << endl;
  91. }
  92.  
  93. void wyswietl_id(vector<student*> baza, int id_szukane)
  94. {
  95. if (baza.size() == 0)
  96. {
  97. string blad = "\nBrak danych w bazie!";
  98. throw blad;
  99. }
  100. int a = 0;
  101. auto it = baza.begin();
  102. while (a < baza.size())
  103. {
  104. if ((*(it + a))->id == id_szukane) {
  105. cout << (*(it + a))->id << " " << (*(it + a))->nazwisko << " " << (*(it + a))->specjalnosc << " " << (*(it + a))->srednia << endl;
  106. break;
  107. }
  108. a++;
  109. }
  110. if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
  111. }
  112.  
  113. void wyswietl_nazwisko(vector<student*> baza)
  114. {
  115. if (baza.size() == 0)
  116. {
  117. string blad = "\nBrak danych w bazie!";
  118. throw blad;
  119. }
  120. string nazwisko_szukane;
  121. cout << "\nPodaj nazwisko studenta, ktorego chcesz wyswietlic: ";
  122. cin >> nazwisko_szukane;
  123. int a = 0;
  124. auto it = baza.begin();
  125. while (a < baza.size())
  126. {
  127. if ((*(it + a))->nazwisko == nazwisko_szukane){
  128. cout << (*(it + a))->id << " " << (*(it + a))->nazwisko << " " << (*(it + a))->specjalnosc << " " << (*(it + a))->srednia << endl;
  129. break;
  130. }
  131. a++;
  132. }
  133. if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
  134. }
  135.  
  136. void wyswietl_specjalnosc(vector<student*> baza)
  137. {
  138. if (baza.size() == 0)
  139. {
  140. string blad = "\nBrak danych w bazie!";
  141. throw blad;
  142. }
  143. string specjalnosc_szukana;
  144. cout << "\nPodaj specjalnosc studenta, ktorego chcesz wyswietlic: ";
  145. cin >> specjalnosc_szukana;
  146. int a = 0;
  147. auto it = baza.begin();
  148. while (a < baza.size())
  149. {
  150. if ((*(it + a))->specjalnosc == specjalnosc_szukana) {
  151. cout << (*(it + a))->id << " " << (*(it + a))->nazwisko << " " << (*(it + a))->specjalnosc << " " << (*(it + a))->srednia << endl;
  152. break;
  153. }
  154. a++;
  155. }
  156. if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
  157. }
  158.  
  159. void wyswietl_srednia(vector<student*> baza)
  160. {
  161. if (baza.size() == 0)
  162. {
  163. string blad = "\nBrak danych w bazie!";
  164. throw blad;
  165. }
  166. float srednia_szukana;
  167. cout << "\nPodaj specjalnosc studenta, ktorego chcesz wyswietlic: ";
  168. cin >> srednia_szukana;
  169. int a = 0;
  170. auto it2 = baza.begin();
  171. while (a < baza.size())
  172. {
  173. if ((*(it2 + a))->srednia == srednia_szukana) {
  174. cout << (*(it2 + a))->id << " " << (*(it2 + a))->nazwisko << " " << (*(it2 + a))->specjalnosc << " " << (*(it2 + a))->srednia << endl;
  175. break;
  176. }
  177. a++;
  178. }
  179. if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
  180. }
  181.  
  182. void usun(vector<student*> &baza)
  183. {
  184. if (baza.size() == 0)
  185. {
  186. string blad = "\nBrak danych w bazie!";
  187. throw blad;
  188. }
  189. auto it = baza.begin();
  190. bool znaleziono = false;
  191. int id, a=0;
  192. cout << "\nPodaj id studenta do usuniecia: ";
  193. cin >> id;
  194. while (a < baza.size() )
  195. {
  196. if ((*(it + a))->id == id)
  197. {
  198. znaleziono = true;
  199. break;
  200. }
  201. a++;
  202. }
  203. if (!znaleziono)
  204. {
  205. string blad = "\nBrak takiego studenta!";
  206. throw blad;
  207. }
  208. cout << "\nStudent: ";
  209. wyswietl_id(baza, id);
  210. cout << "zostal usuniety.";
  211. baza.erase(it + a);
  212. return;
  213. }
  214.  
  215. void edytuj(vector<student*> &baza)
  216. {
  217. if (baza.size() == 0)
  218. {
  219. string blad = "\nBrak danych w bazie!";
  220. throw blad;
  221. }
  222. auto it = baza.begin();
  223. bool znaleziono = false;
  224. int id, a = 0;
  225. cout << "\nPodaj id studenta do edycji: ";
  226. cin >> id;
  227. while (a < baza.size())
  228. {
  229. if ((*(it + a))->id == id)
  230. {
  231. znaleziono = true;
  232. break;
  233. }
  234. a++;
  235. }
  236. if (!znaleziono)
  237. {
  238. string blad = "\nBrak takiego studenta!";
  239. throw blad;
  240. }
  241. cout << "\nObecne dane studenta: ";
  242. wyswietl_id(baza, id);
  243.  
  244. string nazwisko, specjalnosc;
  245. float srednia;
  246. cout << "\nPodaj nazwisko nowego studenta: ";
  247. cin >> nazwisko;
  248. (*(it + a))->nazwisko = nazwisko;
  249. cout << "\nPodaj specjalnosc nowego studenta: ";
  250. cin >> specjalnosc;
  251. (*(it + a))->specjalnosc = specjalnosc;
  252. cout << "\nPodaj srednia nowego studenta: ";
  253. cin >> srednia;
  254. (*(it + a))->srednia = srednia;
  255.  
  256. cout << "\nDane studenta po zmianach: ";
  257. wyswietl_id(baza, id);
  258. return;
  259. }
  260.  
  261. void zapisz(vector<student*> baza)
  262. {
  263. if (baza.size() == 0)
  264. {
  265. string blad = "\nBrak danych w bazie!";
  266. throw blad;
  267. }
  268. bool pierwszy = true;
  269. ofstream plik{ "dane.txt", ios::out };
  270. for (auto e : baza)
  271. {
  272. if(!pierwszy)
  273. plik << endl;
  274. plik << e->id << " " << e->nazwisko << " " << e->specjalnosc << " " << e->srednia;
  275. pierwszy = false;
  276. }
  277. plik.close();
  278. cout << "\nDane zapisano w pliku 'dane.txt'.";
  279. }
  280.  
  281. void dopisz(vector<student*> baza)
  282. {
  283. if (baza.size() == 0)
  284. {
  285. string blad = "\nBrak danych w bazie!";
  286. throw blad;
  287. }
  288. fstream plik{ "dane.txt", ios::app };
  289. for (auto e : baza)
  290. plik << endl << e->id << " " << e->nazwisko << " " << e->specjalnosc << " " << e->srednia;
  291. plik.close();
  292. cout << "\nDane dopisano do pliku 'dane.txt'.";
  293. }
  294.  
  295. void menu()
  296. {
  297. cout << "\n\n 1. Wczytaj dane z pliku";
  298. cout << "\n 2. Dodaj studenta";
  299. cout << "\n 3. Usun studenta";
  300. cout << "\n 4. Edytuj studenta";
  301. cout << "\n 5. Wyswietl wszytkich studentow";
  302. cout << "\n 6. Wyswietl studentow o konkretnym id";
  303. cout << "\n 7. Wyswietl studentow o konkretnym nazwisku";
  304. cout << "\n 8. Wyswietl studentow o konkretnej specjalnosci";
  305. cout << "\n 9. Wyswietl studentow o konkretnej sredniej";
  306. cout << "\n 10. Zapisz baze danych w pliku";
  307. cout << "\n 11. Dopisz baze danych do pliku";
  308. cout << "\n 12. Wyjscie";
  309. cout << "\n\nPodaj ktora opcje wybierasz: ";
  310. }
  311.  
  312. int main()
  313. {
  314. vector<student*> baza{};
  315. int wybor = 0;
  316. while (wybor != 12)
  317. {
  318. int id = 0;
  319. menu();
  320. cin >> wybor;
  321. switch (wybor)
  322. {
  323. case (1):
  324. try
  325. {
  326. z_pliku(baza);
  327. }
  328. catch (string a)
  329. {
  330. cout << a;
  331. };
  332. break;
  333. case (2):
  334. dodaj_recznie(baza);
  335. break;
  336. case (3):
  337. try
  338. {
  339. usun(baza);
  340. }
  341. catch (string a)
  342. {
  343. cout << a;
  344. };
  345. break;
  346. case (4):
  347. try
  348. {
  349. edytuj(baza);
  350. }
  351. catch (string a)
  352. {
  353. cout << a;
  354. };
  355. break;
  356. case (5):
  357. wyswietl_wszystko(baza);
  358. break;
  359. case (6):
  360. cout << "\nPodaj id studenta, ktorego chcesz wyswietlic: ";
  361. cin >> id;
  362. try
  363. {
  364. wyswietl_id(baza, id);
  365. }
  366. catch (string a)
  367. {
  368. cout << a;
  369. };
  370. break;
  371. case (7):
  372. try
  373. {
  374. wyswietl_nazwisko(baza);
  375. }
  376. catch (string a)
  377. {
  378. cout << a;
  379. };
  380. break;
  381. case (8):
  382. try
  383. {
  384. wyswietl_specjalnosc(baza);
  385. }
  386. catch (string a)
  387. {
  388. cout << a;
  389. };
  390. break;
  391. case (9):
  392. try
  393. {
  394. wyswietl_srednia(baza);
  395. }
  396. catch (string a)
  397. {
  398. cout << a;
  399. };
  400. break;
  401. case (10):
  402. try
  403. {
  404. zapisz(baza);
  405. }
  406. catch (string a)
  407. {
  408. cout << a;
  409. };
  410. break;
  411. case (11):
  412. try
  413. {
  414. dopisz(baza);
  415. }
  416. catch (string a)
  417. {
  418. cout << a;
  419. };
  420. break;
  421. }
  422. cout << endl;
  423. system("PAUSE");
  424. system("cls");
  425. }
  426.  
  427. return 0;
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement