Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //POP 2017-01-17 projekt 2 Klimowska Alicja IBM 2 171883 Visual Studio
- #include <fstream>
- #include <cstdlib>
- #include <iostream>
- #include <ctime>
- #include <string>
- #include <cmath>
- using namespace std;
- string pobierzgodzine()
- {
- char wynik[80];
- time_t rawtime;//zmienna zasowa
- tm * timeinfo;//zmienna na strukture tm
- time(&rawtime);
- timeinfo = localtime(&rawtime);
- strftime(wynik, sizeof(wynik), "%I:%M:%S", timeinfo);
- string w(wynik);
- return w;
- }
- string pobierzdate()
- {//pobierazemy aktualna date
- char wynik[80];
- time_t rawtime;//zmienna zasowa
- tm * timeinfo;//zmienna na strukture tm
- time(&rawtime);
- timeinfo = localtime(&rawtime);
- strftime(wynik, sizeof(wynik), "%d-%m-%Y", timeinfo);
- string w(wynik);
- return w;
- }
- void addkonto()
- {
- fstream konto;//zmienna plikowa
- string imie, nazwisko;
- int debet, transakcja, stankonta, numerkonta;
- konto.open("konto.txt", ios::app | ios::out);//w przeciwnym razie zwyczajnie otwieramy plik
- system("CLS");//czyscimy ekran
- cout << "Podaj numer konta" << endl;
- cin >> numerkonta; konto << numerkonta;//wczytujemy numer konta i przesylamy go do pliku
- konto << " ";
- cout << "Podaj nazwisko" << endl;//dalej analogicznie
- cin >> nazwisko; konto << nazwisko;
- konto << " ";
- cout << "Podaj imie" << endl;
- cin >> imie; konto << imie;
- konto << " ";
- cout << "Podaj maksymalny debet" << endl;
- cin >> debet; konto << debet;
- konto << " ";
- cout << "Podaj maksymalna kowte transakcji" << endl;
- cin >> transakcja; konto << transakcja;
- konto << " ";
- cout << "Podaj stan konta" << endl;
- cin >> stankonta; konto << stankonta;
- konto << " ";
- konto << pobierzdate();
- konto << endl;
- konto.close();
- }
- void addtransakcja()
- {
- fstream transkacje, konta;
- int numerkonta, kwota, nrbankomatu, maxdebet, maxtransakcja, stankonta;
- transkacje.open("transakcje.txt", ios::app | fstream::out);//
- if (!transkacje.is_open()) {
- cout << "Nie udalo sie wczytac transakcje.txt" << endl;
- return;
- }
- konta.open("konto.txt", ios::in);//otwieramy tez plik z kontami
- if (!konta.is_open()) {
- cout << "Nie udalo sie wczytac konto.txt" << endl;
- return;
- }
- cout << "Podaj numer konta:" << endl;
- cin >> numerkonta;
- cout << "Kwota (jesli wyplata nalezy podac kwote na minusie na przyklad -300)" << endl;
- cin >> kwota;
- cout << "Numer bankomatu " << endl;
- cin >> nrbankomatu;
- //wyszukamy teraz plik z kontami w poszukiwaniu naszych limitow
- bool czykontozostaloznalezione = 0;
- int wczytanie;
- string wczytanies;//zmienne do wczytywania z pliku
- do
- {
- konta >> wczytanie;
- if (wczytanie == numerkonta)
- {
- czykontozostaloznalezione = 1;//znalezlismy konto
- break;
- }
- if (czykontozostaloznalezione == 0) {
- //pomijamy rezste danych
- for (int i = 0; i < 6; i++)
- {
- konta >> wczytanies;
- }
- }
- } while (!konta.eof());
- if (czykontozostaloznalezione == 0)
- {
- cout << "Blad nie ma konta" << endl;
- transkacje.close();//zamykamy wtedy plik
- konta.close();
- system("pause");
- return;//srpawdzami czy istenieje plik z kontami jesli nie to zwracamy blad i nic nie przysylamy
- }
- konta >> wczytanies; konta >> wczytanies;//wzytujemy niepotrzebne dane
- konta >> maxdebet;//wczytujemy max debet
- konta >> maxtransakcja;
- konta >> stankonta;
- if (kwota < 0 && maxtransakcja < abs(kwota))
- {
- cout << "Przekroczony limit transakcji, transakcja nieprzyjeta" << endl;
- fstream limity;
- limity.open("limity.txt", ios::app | ios::out);
- limity << numerkonta;
- limity << " ";
- limity << kwota;
- limity << " ";
- limity << pobierzdate();
- limity << " ";
- limity << pobierzgodzine();
- limity << " ";
- limity << nrbankomatu;
- limity << endl;
- limity.close();
- }
- if (stankonta + kwota < 0 - maxdebet)
- {
- cout << "Przekroczony debet,transakja nieprzyjeta" << endl;
- fstream debety;
- debety.open("debety.txt", ios::app | ios::out);
- debety << numerkonta;
- debety << " ";
- debety << kwota;
- debety << " ";
- debety << pobierzdate();
- debety << " ";
- debety << pobierzgodzine();
- debety << " ";
- debety << nrbankomatu;
- debety << endl;
- debety.close();
- }
- transkacje << numerkonta;
- transkacje << " ";
- transkacje << kwota;
- transkacje << " ";
- transkacje << pobierzdate();
- transkacje << " ";
- transkacje << pobierzgodzine();
- transkacje << " ";
- transkacje << nrbankomatu;
- transkacje << endl;
- //}
- transkacje.close();
- konta.close();
- }
- int konwertujnaint(string a)//nasza funkcja do przekonwertowania string na int
- {
- int p, wynik = 0;//bedziemy kolejne liczby mnozyc przez potege 10 i dodawac do wwyniku (minus ascii bo string to tablica charow)
- for (int j = 0, i = a.size() - 1; i >= 0; i--, j++)
- {
- p = pow(10, static_cast<double>(j));
- wynik += (a[i] - 48)*p;
- }
- return wynik;
- }
- bool datastarsza(string a, string b)//funckja do sprawdzania czy data b jest starsza od daty a
- {
- string roka, rokb, miesa, miesb, dziena, dzienb;//zmienne do przechowywania poszczegolnych skladowych daty
- roka = a.substr(6, 4);//przepisujemy od pozycji 6 4 znaki
- rokb = b.substr(6, 4);
- miesa = a.substr(3.2); miesb = b.substr(3.2);
- dziena = a.substr(0, 2); dzienb = b.substr(0, 2);
- if (konwertujnaint(roka) < konwertujnaint(rokb))//musimy przekonwertowac za pomoca naszej funkcji date ze string na liczbe int i porownac ja
- return 0;
- if (konwertujnaint(roka) > konwertujnaint(rokb))return 1;
- //jesli nie jest ani mniejsze ani wieksze to znaczy, ze jest rowne i sprawdzamy dalej miesiac i potem analgoicznie dzien jesli miesiace beda rowne
- if (konwertujnaint(miesa) < konwertujnaint(miesb))return 0;
- if (konwertujnaint(miesa) > konwertujnaint(miesb))return 1;
- //analogicznie
- if (konwertujnaint(dziena) < konwertujnaint(dzienb))return 0;
- if (konwertujnaint(dziena) > konwertujnaint(dzienb))return 1;
- return 1;//jesli data jest taka sama to zakladamy ze transakcja wykonala sie wczesniej niz ostatnia aktualizacja danych
- }
- void update()
- {
- fstream konto, transakcje, save;
- konto.open("konto.txt", ios::in);
- save.open("save.txt", ios::out);//otworzymy plik do ktorego przepiszemy uaktualnione konta
- string imie, nazwisko, wczytanie, data;
- int debet, transakcja, stankonta, numerkonta;
- do
- {
- transakcje.open("transakcje.txt", ios::in);
- konto >> numerkonta;
- konto >> nazwisko;
- konto >> imie;
- konto >> debet;
- konto >> transakcja;
- konto >> stankonta;
- konto >> data;//pobieramy pojedyncze konto
- if (konto.eof() == 0) {//sprawdzamy w tym miejscu czy nie skonczyl sie plik by wykluczyc przepisanie ostatniego pustego wiersza
- do
- {
- string datat, godzinat;
- int numerkontat, kwotat, nrbankomatut;//zmienne do transakcji
- transakcje >> numerkontat;
- transakcje >> kwotat;
- transakcje >> datat;
- transakcje >> godzinat;
- transakcje >> nrbankomatut;
- if (transakcje.eof() == 0) {//sprawdzamy w tym miejscu czy nie skonczyl sie plik by wykluczyc przepisanie ostatniego pustego wiersza
- if (numerkontat == numerkonta && datastarsza(datat, data) == 1)//jesli numerykonta sa takie same i data jest starsza od daty transakcji uaktualniamy
- {
- cout << "Aktualizacja dla konta: " << numerkonta << ", kwota:" << kwotat << endl;
- stankonta += kwotat;
- }
- }
- } while (!transakcje.eof());
- transakcje.close();
- save << numerkonta << " ";
- save << nazwisko << " ";
- save << imie << " ";
- save << debet << " ";
- save << transakcja << " ";
- save << stankonta << " ";
- save << pobierzdate() << endl;//zapisujemy aktualne dane do pliku save
- }
- else
- break;
- } while (true);
- //przepiszemy teraz plik save do pliku konta
- save.close(); konto.close();//zamykamy pliki
- save.open("save.txt", ios::in); konto.open("konto.txt", ios::out);//otwieramy ponownie pliki z nowymi uprawnieniami
- int j = 0;//damy licznik by co 7 przepisan dopisac endl
- konto << save.rdbuf();//kopiujemy plik save do konto (metoda rdbuf)
- save.close(); konto.close();//zamykamy pliki
- }
- int main()
- {
- int wejscie;
- do
- {
- system("CLS");
- cout << "[1] Dodaj konto" << endl;
- cout << "[2] Dodaj transakcje" << endl;
- cout << "[3] Aktualizuj dane" << endl;
- cout << "[4] Wyjscie" << endl;
- cin >> wejscie;
- switch (wejscie)//wybieramy odpowiednia funckje dla danego wejscia
- {
- case 1:
- {
- addkonto();
- break;
- }
- case 2:
- {
- addtransakcja();
- break;
- }
- case 3:
- {
- update();
- break;
- }
- case 4:
- {
- return 0;
- }
- break;
- }
- } while (true);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement