Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <vector>
  4. #include <conio.h>
  5. #include <fstream>
  6. #include <time.h>
  7. #include <string>
  8. #include <stdlib.h>
  9. #include <iomanip>
  10. #include <stdio.h>
  11. #include <ctype.h>
  12. #include <algorithm>
  13. #include <cctype>
  14. #include <cstring>
  15. using namespace std;
  16. char *tr(char *str)
  17. {
  18. static char buff[256];
  19. char cp[]="\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
  20. if(strlen(str)>=sizeof(buff)) return str;
  21. char *bf=buff;
  22. while(*str)
  23. {
  24. char *pos=strchr(cp+18,*str);
  25. *(bf++)=pos?*(pos-18):*str;
  26. ++str;
  27. }
  28. *bf=0;
  29. return buff;
  30. }
  31. bool has_any_digits(const std::string& s)
  32. {
  33. return std::find_if(s.begin(), s.end(), ::isdigit) != s.end();
  34. }
  35. int rdn(int y, int m, int d)
  36. {
  37. if (m < 3)
  38. y--, m += 12;
  39. return 365*y + y/4 - y/100 + y/400 + (153*m - 457)/5 + d - 306;
  40. }
  41. int dateConverterY(string date)
  42. {
  43. return atoi(date.c_str());
  44. }
  45. int dateConverterM(string date)
  46. {
  47. return atoi(date.substr(4).c_str());
  48. }
  49. int dateConverterD(string date)
  50. {
  51. return atoi(date.substr(7).c_str());
  52. }
  53. bool isPeselCorrect(string pesel)
  54. {
  55. if(pesel.length()==11)
  56. {
  57. for(int i=0;i<11;i++)
  58. {
  59. if(int(pesel[i])<48||int(pesel[i])>57)
  60. return false;
  61. }
  62. return true;
  63. }
  64. return false;
  65. }
  66. bool isCityCorrect(string pesel)
  67. {
  68. for(int i=0;i<pesel.length();i++)
  69. {
  70. if(!(((int)pesel[i]>64&&(int)pesel[i]<91)||((int)pesel[i]>96&&(int)pesel[i]<123)))
  71. return false;
  72. cout<<(int)pesel[i]<<"\n";
  73. }
  74. return true;
  75. }
  76. vector<string> split(string x, char dividor){
  77. vector<string> a;
  78. string buffer = "";
  79. for(int i=0;i<x.size(); i++){
  80. if(x[i] == dividor){
  81. a.push_back(buffer);
  82. buffer = "";
  83. }else{
  84. buffer+=x[i];
  85. }
  86. }
  87. a.push_back(buffer);
  88. return a;
  89. }
  90. void outvct(vector<string> a){
  91. for(int i=0;i<a.size();i++){
  92. cout << a[i] << "\n";
  93. }
  94. }
  95. struct osoba{
  96. string imie;
  97. string nazwisko;
  98. string dob;
  99. string pesel;
  100. string miasto;
  101. string plec;
  102. string basic(){
  103. return "Imie: " + imie + "\nNazwisko: " + nazwisko + "\nData urodzenia: " + dob + "\nPESEL: " + pesel + "\nMiasto: " + miasto + "\nPlec: " + plec;
  104. }
  105. string simple(){
  106. string sig=imie + " " + nazwisko + " " + dob + " " + pesel + " " + miasto + " " + plec;
  107. return sig;
  108. }
  109. string przecinki(){
  110. return imie + " " + nazwisko + "," + pesel + "," + miasto;
  111. }
  112. bool has(string what){
  113. string imiep=imie,nazwiskop=nazwisko,miastop=miasto,plecp=plec;
  114. transform(what.begin(), what.end(),what.begin(), ::toupper);
  115. transform(imie.begin(), imie.end(),imiep.begin(), ::toupper);
  116. transform(nazwisko.begin(), nazwisko.end(),nazwiskop.begin(), ::toupper);
  117. transform(miasto.begin(), miasto.end(),miastop.begin(), ::toupper);
  118. transform(plec.begin(), plec.end(),plecp.begin(), ::toupper);
  119. if(imiep == what || nazwiskop == what || dob == what || pesel == what || miastop == what || plecp == what){
  120. return true;
  121. }
  122. return false;
  123. }
  124. };
  125. string sexFromPesel(string pesel)
  126. {
  127. string lol;
  128. lol+=pesel[9];
  129. int pom=atoi(lol.c_str());
  130. if(pom%2==0)
  131. return "F";
  132. return "M";
  133. }
  134. string dob_from_PESEL(string pesel){
  135. string data="";
  136. if(pesel[2]=='2'||pesel[2]=='3')
  137. data+="20";
  138. else
  139. data+="19";
  140. data+=pesel.substr(0,2)+'-';
  141. if(pesel[2]=='2')
  142. {
  143. data+="0";
  144. data+=pesel[3];
  145. }
  146. else if(pesel[2]=='3')
  147. {
  148. data+="1";
  149. data+=pesel[3];
  150. }
  151. else
  152. data+=pesel.substr(2,2);
  153. data+="-";
  154. data+=pesel.substr(4,2);
  155. return data;
  156. }
  157. string what;
  158. bool compare(osoba os1, osoba os2){
  159. if(what == "dob"){
  160. return os1.dob < os2.dob;
  161. }
  162. if(what == "name"){
  163. return os1.imie < os2.imie;
  164. }
  165. if(what == "lname"){
  166. return os1.nazwisko < os2.nazwisko;
  167. }
  168. if(what == "pesel"){
  169. return os1.pesel < os2.pesel;
  170. }
  171. if(what == "city"){
  172. return os1.miasto < os2.miasto;
  173. }
  174. }
  175. vector<osoba> ludzie;
  176. void loadFromFile(string fileName)
  177. {
  178. ifstream in(fileName.c_str());
  179. string szystko;
  180.  
  181. while(true)
  182. {
  183. if(in.eof())
  184. break;
  185. getline(in, szystko);
  186. vector<string> osoba_ = split(szystko, ',');
  187. osoba os;
  188. vector<string> magia = split(osoba_[0], ' ');
  189. if(magia.size() >= 2)
  190. {
  191. os.imie = magia[0];
  192. os.nazwisko = magia[1];
  193. os.pesel = osoba_[1];
  194. os.miasto = osoba_[2];
  195. os.dob = dob_from_PESEL(os.pesel);
  196. os.plec = sexFromPesel(os.pesel);
  197. ludzie.push_back(os);
  198. }
  199. }
  200. in.close();
  201. }
  202. int main(){
  203. SetConsoleCP( 852 );
  204. string::size_type sz;
  205. time_t now;
  206. struct tm * nowLocal;
  207. time (&now);
  208. nowLocal=localtime(&now);
  209. int currDate=rdn(nowLocal->tm_year+1900,nowLocal->tm_mon+1,nowLocal->tm_mday);
  210. bool running = true;
  211. loadFromFile("baza.txt");
  212.  
  213. while(running){
  214. cout << "Kliknij guzik zeby: \n";
  215. cout << "Dodaj nowa osobe: d\nUsun osobe: u\nZmien osobe: z\nWyszukaj osoby: w\nZapisz do pliku: s\nZaladuj plik: l\nStatystyki: i\nWyjdz: q\nWyswietl cala baze danych: c\nPosortuj cala baze danych p\n";
  216. char operacja = getch();
  217. switch(tolower(operacja))
  218. {
  219. case 's':
  220. {
  221. system("cls");
  222. cout << "Podaj nazwe pliku:\n";
  223. string nazwa_pliku;
  224. cin >> nazwa_pliku;
  225. system("cls");
  226. cout << "Plik tekstowy (t) czy plik Excela (e)?";
  227. char operacja2 = getch();
  228. if(tolower(operacja2) == 't'){
  229. nazwa_pliku = nazwa_pliku + ".txt";
  230. ofstream out(nazwa_pliku.c_str());
  231. for(int i=0;i<ludzie.size()-1;i++)
  232. out << ludzie[i].przecinki() << "\n";
  233. out << ludzie[ludzie.size()-1].przecinki();
  234. out.close();
  235. }else if(operacja2 == 'e' || operacja2 == 'E'){
  236. nazwa_pliku = nazwa_pliku + ".csv";
  237. ofstream out(nazwa_pliku.c_str());
  238. for(int i=0;i<ludzie.size();i++)
  239. out << ludzie[i].przecinki() << "\n";
  240. out.close();
  241. }
  242. break;
  243. }
  244.  
  245. case 'i':
  246. {
  247. float srednia=0;
  248. int mezczyzni = 0;
  249. osoba najmlodszy,najstarszy;
  250. najstarszy.dob="7349284071274398047";
  251. system("cls");
  252. for(int i=0; i<ludzie.size();i++){
  253. if(ludzie[i].dob > najmlodszy.dob)
  254. najmlodszy = ludzie[i];
  255. if(ludzie[i].dob < najstarszy.dob)
  256. najstarszy = ludzie[i];
  257. if(ludzie[i].plec == "M")
  258. mezczyzni++;
  259. srednia+=currDate-rdn(dateConverterY(ludzie[i].dob),dateConverterM(ludzie[i].dob),dateConverterD(ludzie[i].dob));
  260. }
  261.  
  262. cout<<"Srednia wieku to: "<<setprecision(4)<<srednia/ludzie.size()/365.25;
  263.  
  264. cout << "\nOsob w bazie jest:"<<ludzie.size()<<"\n";
  265. cout << "Mezczyzn jest " << mezczyzni << ", a kobiet " << ludzie.size() - mezczyzni << "\n";
  266. cout << "Najmlodszy jest: \n" << najmlodszy.basic();
  267. cout << "\n\nNajstarszy jest: \n" << najstarszy.basic();
  268. cout << "\nKliknij jakikolwiek guzik zeby wrocic do menu";
  269. getch();
  270. break;
  271. }
  272. case 'd':
  273. {
  274. osoba nowa;
  275. system("cls");
  276. string imiepom="1467832194683246018729413607982";
  277. while(has_any_digits(imiepom))
  278. {
  279. if(!(imiepom=="1467832194683246018729413607982"))
  280. cout<<"Prosze wprowadzic poprawne imie\n";
  281. cout<<"Podaj imie\n";
  282. cin>>imiepom;
  283. }
  284. nowa.imie=imiepom;
  285. system("cls");
  286.  
  287. string nazwiskopom="1467832194683246018729413607982";
  288. while(has_any_digits(nazwiskopom))
  289. {
  290. if(!(nazwiskopom=="1467832194683246018729413607982"))
  291. cout<<"Prosze wprowadzic poprawne nazwisko\n";
  292. cout<<"Podaj nazwisko\n";
  293. cin>>nazwiskopom;
  294. }
  295. nowa.nazwisko=nazwiskopom;
  296. system("cls");
  297.  
  298. string peselpom="";
  299. bool first=true;
  300. while(!(isPeselCorrect(peselpom)))
  301. {
  302. if(!first)
  303. cout<<"Wpisz poprawny pesel\n";
  304. else
  305. first = false;
  306. cout<<"Wpisz nowy PESEL\n";
  307. cin>>peselpom;
  308. }
  309. nowa.pesel=peselpom;
  310. nowa.plec=sexFromPesel(nowa.pesel);
  311. nowa.dob=dob_from_PESEL(nowa.pesel);
  312. system("cls");
  313. string citypom="";
  314. first=true;
  315. while(!(isCityCorrect(citypom)))
  316. {
  317. if(!first)
  318. cout<<"Wpisz poprawna nazwe miasta\n";
  319. else
  320. first = false;
  321. cout<<"Wpisz miasto\n";
  322. cin>>citypom;
  323. }
  324. nowa.miasto=citypom;
  325. system("cls");
  326.  
  327. ludzie.push_back(nowa);
  328. getch();
  329. break;
  330. }
  331. case 'z':
  332. {
  333. system("cls");
  334. cout << "Podaj cokolwiek (imie, nazwisko, plec, date urodzenia, miasto)\n";
  335. string cokolwiek;
  336. cin >> cokolwiek;
  337. system("cls");
  338. int found = 0,id;
  339. int pom[ludzie.size()];
  340. for(int i=0; i<ludzie.size();i++){
  341. if(ludzie[i].has(cokolwiek)){
  342. cout <<found+1<<". "<< ludzie[i].basic() << "\n\n";
  343. pom[found]=i;
  344. found++;
  345. }
  346. }
  347. if(found==1)
  348. {
  349. id=1;
  350. }
  351. else if (found==0)
  352. {
  353. cout<<"Nikogo nie znalazlem. Nacisnij dowolny guzik zeby wrocic do menu";
  354. getch();
  355. break;
  356. }
  357. else
  358. {
  359. cout << "Wpisz indeks osoby, ktora chcesz zmienic\n";
  360. cin>>id;
  361. }
  362. system("cls");
  363. cout<<"Wybrano:\n"<<ludzie[pom[id-1]].basic();
  364. while(true)
  365. {
  366. cout << "\n\nWpisz co chcesz zmienic:\n Imie (I)\n Nazwisko (N)\n Pesel (P)\n Miasto (M)\n Koniec zmian(K)\n";
  367. char k = getch();
  368. k=toupper(k);
  369. if(k=='K')
  370. break;
  371. else if(k=='I')
  372. {
  373. string imiepom="1467832194683246018729413607982";
  374. while(has_any_digits(imiepom))
  375. {
  376. if(!(imiepom=="1467832194683246018729413607982"))
  377. cout<<"Prosze wprowadzic poprawne imie\n";
  378. cout<<"Wpisz nowe imie\n";
  379. cin>>imiepom;
  380. }
  381. ludzie[pom[id-1]].imie=imiepom;
  382. }
  383. else if(k=='N')
  384. {
  385. string imiepom="1467832194683246018729413607982";
  386. while(has_any_digits(imiepom))
  387. {
  388. if(!(imiepom=="1467832194683246018729413607982"))
  389. cout<<"Prosze wprowadzic poprawne nazwisko\n";
  390. cout<<"Wpisz nowe nazwisko\n";
  391. cin>>imiepom;
  392. }
  393. ludzie[pom[id-1]].nazwisko=imiepom;
  394. }
  395.  
  396. else if(k=='P')
  397. {
  398. string peselpom="";
  399. bool first=true;
  400. while(!(isPeselCorrect(peselpom)))
  401. {
  402. if(!first)
  403. cout<<"Wpisz poprawny pesel\n";
  404. else
  405. first = false;
  406. cout<<"Wpisz nowy PESEL\n";
  407. cin>>peselpom;
  408. }
  409. ludzie[pom[id-1]].pesel=peselpom;
  410. ludzie[pom[id-1]].plec=sexFromPesel(ludzie[pom[id-1]].pesel);
  411. ludzie[pom[id-1]].dob=dob_from_PESEL(ludzie[pom[id-1]].pesel);
  412. }
  413. if(k=='M')
  414. {
  415. string citypom="1";
  416. bool first=true;
  417. while(!(isCityCorrect(citypom)))
  418. {
  419. if(!first)
  420. cout<<"Wpisz poprawna nazwe miasta\n";
  421. else
  422. first = false;
  423. cout<<"Wpisz miasto\n";
  424. cin>>citypom;
  425. }
  426. ludzie[pom[id-1]].miasto=citypom;
  427. }
  428.  
  429. }
  430. cout<<"\nZmieniono:\n"<<ludzie[pom[id-1]].basic();
  431. getch();
  432. break;
  433. }
  434. case 'w':
  435. {
  436. system("cls");
  437. cout << "Podaj cokolwiek (imie, nazwisko, plec, date urodzenia, miasto)\n";
  438. string cokolwiek;
  439. cin >> cokolwiek;
  440. system("cls");
  441. int found = 0;
  442. for(int i=0; i<ludzie.size();i++){
  443. if(ludzie[i].has(cokolwiek)){
  444. cout << ludzie[i].basic() << "\n\n";
  445. found++;
  446. }
  447. }
  448. cout << "Znalazlem " << found << " osob\nKliknij cokolwiek, zeby wrocic do menu";
  449. getch();
  450. break;
  451. }
  452. case 'u':
  453. {
  454. system("cls");
  455. cout << "Podaj cokolwiek (imie, nazwisko, plec, date urodzenia, miasto)\n";
  456. string cokolwiek;
  457. cin >> cokolwiek;
  458. system("cls");
  459. int found = 0,id;
  460. int pom[ludzie.size()];
  461. for(int i=0; i<ludzie.size();i++){
  462. if(ludzie[i].has(cokolwiek)){
  463. cout <<found+1<<". "<< ludzie[i].basic() << "\n\n";
  464. pom[found]=i;
  465. found++;
  466. }
  467. }
  468. cout << "Wpisz indeks osoby, ktora chcesz usunac\n";
  469. cin>>id;
  470. system("cls");
  471. cout<<"Usunieto:\n"<<ludzie[pom[id-1]].basic();
  472. ludzie.erase(ludzie.begin()+pom[id-1]);
  473. getch();
  474. break;
  475.  
  476. }
  477. case 'c':
  478. {
  479. system("cls");
  480. for(int i=0;i<ludzie.size();i++)
  481. cout << ludzie.at(i).simple() << "\n\n";
  482. cout << tr("kliknij cokolwiek, aby przejść dalej\n");
  483. getch();
  484. break;
  485. }
  486. case 'p':
  487. {
  488. system("cls");
  489. cout << "Po czym sortowac?\nDacie urodzenia (d)\nImieniu (i)\n Nazwisku (n)\n Peselu (p)\n Miescie (m)\n";
  490. char result = getch();
  491. switch(result){
  492. case 'd':
  493. {
  494. what = "dob";
  495. break;
  496. }
  497. case 'i':
  498. {
  499. what = "name";
  500. break;
  501. }
  502. case 'n':
  503. {
  504. what = "lname";
  505. break;
  506. }
  507. case 'p':
  508. {
  509. what = "pesel";
  510. break;
  511. }
  512. case 'm':
  513. {
  514. what = "city";
  515. break;
  516. }
  517. }
  518. sort(ludzie.begin(), ludzie.end(), compare);
  519. system("cls");
  520. cout << "Rosnaco (r), czy malejaco (m)?";
  521. result = getch();
  522. if(result=='m'){
  523. reverse(ludzie.begin(), ludzie.end());
  524. }
  525. system("cls");
  526. cout << "kliknij cokolwiek, aby przejsc dalej\n";
  527. getch();
  528. break;
  529. }
  530. case 'l':
  531. {
  532. string databaseName;
  533. cout<<"Podaj nazwe pliku z rozszerzeniem\n";
  534. cin>>databaseName;
  535. loadFromFile(databaseName);
  536. cout<<"Zaladowano baze.\nKliknij dowolny przycisk, zeby wrocic do menu";
  537. getch();
  538. break;
  539. }
  540. case 'q':
  541. running = false;
  542. }
  543. system("cls");
  544. }
  545. cout << "zegnaj.";
  546. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement