Advertisement
Guest User

Untitled

a guest
Jan 14th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.41 KB | None | 0 0
  1. //POP 2017-01-17 projekt 2 Klimowska Alicja IBM 2 171883 Visual Studio
  2.  
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <iostream>
  6. #include <ctime>
  7. #include <string>
  8. #include <cmath>
  9. using namespace std;
  10. string pobierzgodzine()
  11. {
  12. char wynik[80];
  13. time_t rawtime;//zmienna zasowa
  14. tm * timeinfo;//zmienna na strukture tm
  15. time(&rawtime);
  16. timeinfo = localtime(&rawtime);
  17. strftime(wynik, sizeof(wynik), "%I:%M:%S", timeinfo);
  18. string w(wynik);
  19. return w;
  20. }
  21. string pobierzdate()
  22. {//pobierazemy aktualna date
  23. char wynik[80];
  24. time_t rawtime;//zmienna zasowa
  25. tm * timeinfo;//zmienna na strukture tm
  26. time(&rawtime);
  27. timeinfo = localtime(&rawtime);
  28. strftime(wynik, sizeof(wynik), "%d-%m-%Y", timeinfo);
  29. string w(wynik);
  30. return w;
  31. }
  32. void addkonto()
  33. {
  34. fstream konto;//zmienna plikowa
  35. string imie, nazwisko;
  36. int debet, transakcja, stankonta, numerkonta;
  37. konto.open("konto.txt", ios::app | ios::out);//w przeciwnym razie zwyczajnie otwieramy plik
  38. system("CLS");//czyscimy ekran
  39. cout << "Podaj numer konta" << endl;
  40. cin >> numerkonta; konto << numerkonta;//wczytujemy numer konta i przesylamy go do pliku
  41. konto << " ";
  42. cout << "Podaj nazwisko" << endl;//dalej analogicznie
  43. cin >> nazwisko; konto << nazwisko;
  44. konto << " ";
  45. cout << "Podaj imie" << endl;
  46. cin >> imie; konto << imie;
  47. konto << " ";
  48. cout << "Podaj maksymalny debet" << endl;
  49. cin >> debet; konto << debet;
  50. konto << " ";
  51. cout << "Podaj maksymalna kowte transakcji" << endl;
  52. cin >> transakcja; konto << transakcja;
  53. konto << " ";
  54. cout << "Podaj stan konta" << endl;
  55. cin >> stankonta; konto << stankonta;
  56. konto << " ";
  57. konto << pobierzdate();
  58. konto << endl;
  59. konto.close();
  60. }
  61. void addtransakcja()
  62. {
  63. fstream transkacje, konta;
  64. int numerkonta, kwota, nrbankomatu, maxdebet, maxtransakcja, stankonta;
  65.  
  66. transkacje.open("transakcje.txt", ios::app | fstream::out);//
  67. if (!transkacje.is_open()) {
  68. cout << "Nie udalo sie wczytac transakcje.txt" << endl;
  69. return;
  70. }
  71.  
  72. konta.open("konto.txt", ios::in);//otwieramy tez plik z kontami
  73. if (!konta.is_open()) {
  74. cout << "Nie udalo sie wczytac konto.txt" << endl;
  75. return;
  76. }
  77.  
  78. cout << "Podaj numer konta:" << endl;
  79. cin >> numerkonta;
  80. cout << "Kwota (jesli wyplata nalezy podac kwote na minusie na przyklad -300)" << endl;
  81. cin >> kwota;
  82. cout << "Numer bankomatu " << endl;
  83. cin >> nrbankomatu;
  84. //wyszukamy teraz plik z kontami w poszukiwaniu naszych limitow
  85. bool czykontozostaloznalezione = 0;
  86. int wczytanie;
  87. string wczytanies;//zmienne do wczytywania z pliku
  88. do
  89. {
  90. konta >> wczytanie;
  91. if (wczytanie == numerkonta)
  92. {
  93. czykontozostaloznalezione = 1;//znalezlismy konto
  94. break;
  95. }
  96. if (czykontozostaloznalezione == 0) {
  97. //pomijamy rezste danych
  98. for (int i = 0; i < 6; i++)
  99. {
  100. konta >> wczytanies;
  101. }
  102. }
  103. } while (!konta.eof());
  104. if (czykontozostaloznalezione == 0)
  105. {
  106. cout << "Blad nie ma konta" << endl;
  107. transkacje.close();//zamykamy wtedy plik
  108. konta.close();
  109. system("pause");
  110. return;//srpawdzami czy istenieje plik z kontami jesli nie to zwracamy blad i nic nie przysylamy
  111.  
  112. }
  113. konta >> wczytanies; konta >> wczytanies;//wzytujemy niepotrzebne dane
  114. konta >> maxdebet;//wczytujemy max debet
  115. konta >> maxtransakcja;
  116. konta >> stankonta;
  117.  
  118. if (kwota < 0 && maxtransakcja < abs(kwota))
  119. {
  120. cout << "Przekroczony limit transakcji, transakcja nieprzyjeta" << endl;
  121. fstream limity;
  122. limity.open("limity.txt", ios::app | ios::out);
  123. limity << numerkonta;
  124. limity << " ";
  125. limity << kwota;
  126. limity << " ";
  127. limity << pobierzdate();
  128. limity << " ";
  129. limity << pobierzgodzine();
  130. limity << " ";
  131. limity << nrbankomatu;
  132. limity << endl;
  133. limity.close();
  134. }
  135. if (stankonta + kwota < 0 - maxdebet)
  136. {
  137. cout << "Przekroczony debet,transakja nieprzyjeta" << endl;
  138. fstream debety;
  139. debety.open("debety.txt", ios::app | ios::out);
  140. debety << numerkonta;
  141. debety << " ";
  142. debety << kwota;
  143. debety << " ";
  144. debety << pobierzdate();
  145. debety << " ";
  146. debety << pobierzgodzine();
  147. debety << " ";
  148. debety << nrbankomatu;
  149. debety << endl;
  150. debety.close();
  151. }
  152. transkacje << numerkonta;
  153. transkacje << " ";
  154. transkacje << kwota;
  155. transkacje << " ";
  156. transkacje << pobierzdate();
  157. transkacje << " ";
  158. transkacje << pobierzgodzine();
  159. transkacje << " ";
  160. transkacje << nrbankomatu;
  161. transkacje << endl;
  162. //}
  163. transkacje.close();
  164. konta.close();
  165. }
  166. int konwertujnaint(string a)//nasza funkcja do przekonwertowania string na int
  167. {
  168. int p, wynik = 0;//bedziemy kolejne liczby mnozyc przez potege 10 i dodawac do wwyniku (minus ascii bo string to tablica charow)
  169. for (int j = 0, i = a.size() - 1; i >= 0; i--, j++)
  170. {
  171. p = pow(10, static_cast<double>(j));
  172. wynik += (a[i] - 48)*p;
  173. }
  174. return wynik;
  175. }
  176.  
  177. bool datastarsza(string a, string b)//funckja do sprawdzania czy data b jest starsza od daty a
  178. {
  179. string roka, rokb, miesa, miesb, dziena, dzienb;//zmienne do przechowywania poszczegolnych skladowych daty
  180. roka = a.substr(6, 4);//przepisujemy od pozycji 6 4 znaki
  181. rokb = b.substr(6, 4);
  182. miesa = a.substr(3.2); miesb = b.substr(3.2);
  183. dziena = a.substr(0, 2); dzienb = b.substr(0, 2);
  184. if (konwertujnaint(roka) < konwertujnaint(rokb))//musimy przekonwertowac za pomoca naszej funkcji date ze string na liczbe int i porownac ja
  185. return 0;
  186.  
  187. if (konwertujnaint(roka) > konwertujnaint(rokb))return 1;
  188. //jesli nie jest ani mniejsze ani wieksze to znaczy, ze jest rowne i sprawdzamy dalej miesiac i potem analgoicznie dzien jesli miesiace beda rowne
  189. if (konwertujnaint(miesa) < konwertujnaint(miesb))return 0;
  190. if (konwertujnaint(miesa) > konwertujnaint(miesb))return 1;
  191. //analogicznie
  192. if (konwertujnaint(dziena) < konwertujnaint(dzienb))return 0;
  193. if (konwertujnaint(dziena) > konwertujnaint(dzienb))return 1;
  194.  
  195. return 1;//jesli data jest taka sama to zakladamy ze transakcja wykonala sie wczesniej niz ostatnia aktualizacja danych
  196. }
  197. void update()
  198. {
  199. fstream konto, transakcje, save;
  200. konto.open("konto.txt", ios::in);
  201. save.open("save.txt", ios::out);//otworzymy plik do ktorego przepiszemy uaktualnione konta
  202. string imie, nazwisko, wczytanie, data;
  203. int debet, transakcja, stankonta, numerkonta;
  204. do
  205. {
  206. transakcje.open("transakcje.txt", ios::in);
  207. konto >> numerkonta;
  208. konto >> nazwisko;
  209. konto >> imie;
  210. konto >> debet;
  211. konto >> transakcja;
  212. konto >> stankonta;
  213. konto >> data;//pobieramy pojedyncze konto
  214. if (konto.eof() == 0) {//sprawdzamy w tym miejscu czy nie skonczyl sie plik by wykluczyc przepisanie ostatniego pustego wiersza
  215. do
  216. {
  217. string datat, godzinat;
  218. int numerkontat, kwotat, nrbankomatut;//zmienne do transakcji
  219. transakcje >> numerkontat;
  220. transakcje >> kwotat;
  221. transakcje >> datat;
  222. transakcje >> godzinat;
  223. transakcje >> nrbankomatut;
  224. if (transakcje.eof() == 0) {//sprawdzamy w tym miejscu czy nie skonczyl sie plik by wykluczyc przepisanie ostatniego pustego wiersza
  225. if (numerkontat == numerkonta && datastarsza(datat, data) == 1)//jesli numerykonta sa takie same i data jest starsza od daty transakcji uaktualniamy
  226. {
  227. cout << "Aktualizacja dla konta: " << numerkonta << ", kwota:" << kwotat << endl;
  228. stankonta += kwotat;
  229. }
  230. }
  231. } while (!transakcje.eof());
  232. transakcje.close();
  233. save << numerkonta << " ";
  234. save << nazwisko << " ";
  235. save << imie << " ";
  236. save << debet << " ";
  237. save << transakcja << " ";
  238. save << stankonta << " ";
  239. save << pobierzdate() << endl;//zapisujemy aktualne dane do pliku save
  240. }
  241. else
  242. break;
  243. } while (true);
  244. //przepiszemy teraz plik save do pliku konta
  245. save.close(); konto.close();//zamykamy pliki
  246. save.open("save.txt", ios::in); konto.open("konto.txt", ios::out);//otwieramy ponownie pliki z nowymi uprawnieniami
  247. int j = 0;//damy licznik by co 7 przepisan dopisac endl
  248. konto << save.rdbuf();//kopiujemy plik save do konto (metoda rdbuf)
  249. save.close(); konto.close();//zamykamy pliki
  250. }
  251. int main()
  252. {
  253.  
  254. int wejscie;
  255. do
  256. {
  257. system("CLS");
  258. cout << "[1] Dodaj konto" << endl;
  259. cout << "[2] Dodaj transakcje" << endl;
  260. cout << "[3] Aktualizuj dane" << endl;
  261. cout << "[4] Wyjscie" << endl;
  262. cin >> wejscie;
  263. switch (wejscie)//wybieramy odpowiednia funckje dla danego wejscia
  264. {
  265. case 1:
  266. {
  267. addkonto();
  268. break;
  269. }
  270. case 2:
  271. {
  272. addtransakcja();
  273. break;
  274. }
  275. case 3:
  276. {
  277. update();
  278. break;
  279. }
  280. case 4:
  281. {
  282. return 0;
  283. }
  284. break;
  285. }
  286. } while (true);
  287.  
  288.  
  289. return 0;
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement