Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. #pragma once
  2.  
  3. class walidator
  4. {
  5. public:
  6. virtual bool waliduj() = 0;
  7. };
  8.  
  9. class telefonkom : public walidator
  10. {
  11. private:
  12. std::string numer;
  13. public:
  14. bool waliduj()
  15. {
  16. const char* wzorcowy = "\\+?\\d{1,3}(-| )?\\d{3}(-| )?\\d{3}(-| )?\\d{3}";
  17. std::regex wzorzec(wzorcowy);
  18. return regex_match(numer, wzorzec);
  19. }
  20. telefonkom(std::string numer)
  21. {
  22. this->numer = numer;
  23. }
  24. };
  25.  
  26. class kwota : public walidator
  27. {
  28. private:
  29. double ile;
  30. public:
  31. bool waliduj()
  32. {
  33. if (ile > 0)
  34. return 1;
  35. else return 0;
  36. }
  37. kwota(int ile)
  38. {
  39. this->ile = ile;
  40. }
  41. double &operator-(double &liczba)
  42. {
  43. ile = ile - liczba;
  44. return ile;
  45. }
  46. double &operator+(double &liczba)
  47. {
  48. ile = ile + liczba;
  49. return ile;
  50. }
  51. friend std::ostream & operator<<(std::ostream &wyjscie, const kwota &ile)
  52. {
  53. return wyjscie << ile;
  54. }
  55. };
  56.  
  57. class email : public walidator
  58. {
  59. private:
  60. std::string nazwa;
  61. public:
  62. bool waliduj()
  63. {
  64. const char* wzorcowy = "(\\w+)(\\.|_)?(\\w+)@(\\w+)(\\.(\\w+))+";
  65. std::regex wzorzec(wzorcowy);
  66. return regex_match(nazwa, wzorzec);
  67. }
  68. email(std::string numer)
  69. {
  70. this->nazwa = numer;
  71. }
  72. email();
  73. friend std::ostream & operator<<(std::ostream &wyjscie, const std::string nazwa)
  74. {
  75. return wyjscie << nazwa;
  76. }
  77. std::string get_email()
  78. {
  79. return nazwa;
  80. }
  81. };
  82.  
  83. class telefonstac : public walidator
  84. {
  85. private:
  86. std::string numer;
  87. public:
  88. bool waliduj()
  89. {
  90. const char* wzorcowy = "\\d{2,3}(-| )?\\d{3}(-| )?\\d{3}(-| )?\\d{3}";
  91. std::regex wzorzec(wzorcowy);
  92. return regex_match(numer, wzorzec);
  93.  
  94. }
  95. telefonstac(std::string numer)
  96. {
  97. this->numer = numer;
  98. }
  99. };
  100.  
  101. class liczba_rzymska : public walidator
  102. {
  103. private:
  104. std::string liczba;
  105. public:
  106. bool waliduj()
  107. {
  108. const char* wzorcowa = "M{0,2}(C[MD]|D?C{0,3}|MCD|MD?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})";
  109. std::regex wzorzec(wzorcowa);
  110. return regex_match(liczba, wzorzec);
  111. }
  112. liczba_rzymska (std::string numer)
  113. {
  114. this->liczba = numer;
  115. }
  116. };
  117.  
  118. class nr_faxu : public walidator
  119. {
  120. private:
  121. std::string numer;
  122. public:
  123. bool waliduj()
  124. {
  125. const char* fax = "\\+?\\(?\\d{1,3}\\)?(-| )\\(?\\d+\\)?(-| )(\\d{2,}(-| )\\d{2,}|\\d+)"; //najpierw kod kraju, potem kod strefy, na koniec numer (w dwóch formatach dozwolonych)
  126. std::regex wzorzec(fax);
  127. return regex_match(numer, wzorzec);
  128. }
  129. nr_faxu(std::string numer)
  130. {
  131. this->numer = numer;
  132. }
  133. };
  134.  
  135. #pragma once
  136.  
  137. class forma_platnosci
  138. {
  139. public:
  140. double kwota;
  141. double prowizja;
  142. std::string waluta;
  143. virtual void wykonaj_platnosc(double platnosc) = 0;
  144. virtual void nalicz_oplate() = 0;
  145. };
  146.  
  147. class platnosc_przy_odborze : public forma_platnosci
  148. {
  149. public:
  150. virtual void wykonaj_platnosc(double platnosc)
  151. {
  152. std::cout << "Platnosc zostanie wykonana przy odbiorze";
  153. }
  154. virtual void nalicz_oplate()
  155. {
  156. kwota = kwota-prowizja;
  157. }
  158. };
  159.  
  160. class przelew : public forma_platnosci
  161. {
  162. public:
  163. virtual void wykonaj_platnosc(double platnosc)
  164. {
  165. if (kwota - platnosc > 0)
  166. {
  167. kwota =- platnosc;
  168. std::cout << "Wykonano przelew o wysokosci " << platnosc << " " << waluta;
  169. std::cout << "Pozostalo" << kwota << waluta;
  170. }
  171. }
  172. virtual void nalicz_oplate()
  173. {
  174. kwota =- prowizja;
  175. }
  176.  
  177. };
  178.  
  179. class systemy_platnosci_elektronicznej : public forma_platnosci
  180. {
  181. email email;
  182. public:
  183. virtual void wykonaj_platnosc(double platnosc)
  184. {
  185. if (email.waliduj() == 1)
  186. std::cout << "Wykonano platnosc z adresu" << email.get_email() << std::endl << "Pozostalo" << waluta;
  187. }
  188. virtual void nalicz_oplate()
  189. {
  190. kwota =- prowizja;
  191. }
  192. systemy_platnosci_elektronicznej(std::string email)
  193. {
  194. this->email = email;
  195. }
  196. };
  197.  
  198. #pragma once
  199. #include <SFML/Graphics.hpp>
  200.  
  201. class efekt_specjalny
  202. {
  203. public:
  204. virtual void wyswietl(sf::RenderWindow& window) = 0;
  205. };
  206.  
  207. class deszcz : public efekt_specjalny
  208. {
  209. sf::Texture deszcz_tekstura;
  210. sf::Sprite deszcz_sprite;
  211. public:
  212. virtual void wyswietl(sf::RenderWindow& window)
  213. {
  214. window.draw(deszcz_sprite);
  215. }
  216. deszcz()
  217. {
  218. deszcz_tekstura.loadFromFile("deszcz.png");
  219. deszcz_sprite.setTexture(deszcz_tekstura);
  220. }
  221. };
  222.  
  223. class wybuch : public efekt_specjalny
  224. {
  225. sf::Texture eksplozja;
  226. sf::Sprite eksplozja_sprite;
  227. public:
  228. virtual void wyswietl(sf::RenderWindow& window)
  229. {
  230. window.draw(eksplozja_sprite);
  231. }
  232. wybuch()
  233. {
  234. eksplozja.loadFromFile("eksplozja.png");
  235. eksplozja_sprite.setTexture(eksplozja);
  236. }
  237. };
  238.  
  239. class blysk : public efekt_specjalny
  240. {
  241. sf::Texture blysk_tekstura;
  242. sf::Sprite blysk_sprite;
  243. public:
  244. virtual void wyswietl(sf::RenderWindow& window)
  245. {
  246. window.draw(blysk_sprite);
  247. }
  248. blysk()
  249. {
  250. blysk_tekstura.loadFromFile("blysk.png");
  251. blysk_sprite.setTexture(blysk_tekstura);
  252. }
  253. };
  254.  
  255. class ogien : public efekt_specjalny
  256. {
  257. sf::Texture ogien_tekstura;
  258. sf::Sprite ogien_sprite;
  259. public:
  260. virtual void wyswietl(sf::RenderWindow& window)
  261. {
  262. window.draw(ogien_sprite);
  263. }
  264. ogien()
  265. {
  266. ogien_tekstura.loadFromFile("ogien.png");
  267. ogien_sprite.setTexture(ogien_tekstura);
  268. }
  269. };
  270.  
  271. class dym : public efekt_specjalny
  272. {
  273. sf::Texture dym_tekstura;
  274. sf::Sprite dym_sprite;
  275. public:
  276. virtual void wyswietl(sf::RenderWindow& window)
  277. {
  278. window.draw(dym_sprite);
  279. }
  280. dym()
  281. {
  282. dym_tekstura.loadFromFile("dym.png");
  283. dym_sprite.setTexture(dym_tekstura);
  284. }
  285. };
  286.  
  287. #include <SFML/Graphics.hpp>
  288. #include <iostream>
  289. #include <string>
  290. #include <regex>
  291. #include "Walidator.h"
  292. #include "Formy_platnosci.h"
  293. #include "Efekty_specjalne.h"
  294.  
  295. using namespace std;
  296.  
  297. int main()
  298. {
  299. char input[100];
  300. double wartosc;
  301. cin.getline(input, sizeof(input));
  302. walidator *walidacja = nullptr;
  303. telefonkom komorka(input);
  304. telefonstac telefon(input);
  305. kwota kwota(wartosc);
  306. liczba_rzymska rzymska(input);
  307. email email(input);
  308. nr_faxu fax(input);
  309. int ktory_walidowac = 0;
  310. cin >> ktory_walidowac;
  311. switch (ktory_walidowac)
  312. {
  313. case 1:
  314. walidacja = &komorka;
  315. walidacja->waliduj();
  316. break;
  317. case 2:
  318. walidacja = &telefon;
  319. walidacja->waliduj();
  320. break;
  321. case 3:
  322. walidacja = &kwota;
  323. walidacja->waliduj();
  324. break;
  325. case 4:
  326. walidacja = &rzymska;
  327. walidacja->waliduj();
  328. break;
  329. case 5:
  330. walidacja = &email;
  331. walidacja->waliduj();
  332. break;
  333. case 6:
  334. walidacja = &fax;
  335. walidacja->waliduj();
  336. break;
  337. }
  338. sf::RenderWindow window(sf::VideoMode(800, 600), "SFML works!");
  339. efekt_specjalny *efekt;
  340. wybuch wybuch;
  341. ogien ogien;
  342. dym dym;
  343. blysk blysk;
  344. deszcz deszcz;
  345. int ktory_efekt = 1;
  346. cin >> ktory_efekt;
  347. while (window.isOpen())
  348. {
  349. switch (ktory_efekt)
  350. {
  351. case 1:
  352. efekt = &wybuch;
  353. efekt->wyswietl(window);
  354. break;
  355. case 2:
  356. efekt = &ogien;
  357. efekt->wyswietl(window);
  358. break;
  359. case 3:
  360. efekt = &deszcz;
  361. efekt->wyswietl(window);
  362. break;
  363. case 4:
  364. efekt = &blysk;
  365. efekt->wyswietl(window);
  366. break;
  367. case 5:
  368. efekt = &dym;
  369. efekt->wyswietl(window);
  370. break;
  371. }
  372.  
  373. sf::Event event;
  374. while (window.pollEvent(event))
  375. {
  376. if (event.type == sf::Event::Closed)
  377. window.close();
  378. }
  379.  
  380. window.clear();
  381. window.display();
  382. }
  383. return 0;
  384. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement