Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <windows.h>
- #include <vector>
- #include <conio.h>
- #include <fstream>
- #include <time.h>
- #include <string>
- #include <stdlib.h>
- #include <iomanip>
- #include <stdio.h>
- #include <ctype.h>
- #include <algorithm>
- #include <cctype>
- #include <cstring>
- using namespace std;
- char *tr(char *str)
- {
- static char buff[256];
- char cp[]="\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
- if(strlen(str)>=sizeof(buff)) return str;
- char *bf=buff;
- while(*str)
- {
- char *pos=strchr(cp+18,*str);
- *(bf++)=pos?*(pos-18):*str;
- ++str;
- }
- *bf=0;
- return buff;
- }
- bool has_any_digits(const std::string& s)
- {
- return std::find_if(s.begin(), s.end(), ::isdigit) != s.end();
- }
- int rdn(int y, int m, int d)
- {
- if (m < 3)
- y--, m += 12;
- return 365*y + y/4 - y/100 + y/400 + (153*m - 457)/5 + d - 306;
- }
- int dateConverterY(string date)
- {
- return atoi(date.c_str());
- }
- int dateConverterM(string date)
- {
- return atoi(date.substr(4).c_str());
- }
- int dateConverterD(string date)
- {
- return atoi(date.substr(7).c_str());
- }
- bool isPeselCorrect(string pesel)
- {
- if(pesel.length()==11)
- {
- for(int i=0;i<11;i++)
- {
- if(int(pesel[i])<48||int(pesel[i])>57)
- return false;
- }
- return true;
- }
- return false;
- }
- bool isCityCorrect(string pesel)
- {
- for(int i=0;i<pesel.length();i++)
- {
- if(!(((int)pesel[i]>64&&(int)pesel[i]<91)||((int)pesel[i]>96&&(int)pesel[i]<123)))
- return false;
- cout<<(int)pesel[i]<<"\n";
- }
- return true;
- }
- vector<string> split(string x, char dividor){
- vector<string> a;
- string buffer = "";
- for(int i=0;i<x.size(); i++){
- if(x[i] == dividor){
- a.push_back(buffer);
- buffer = "";
- }else{
- buffer+=x[i];
- }
- }
- a.push_back(buffer);
- return a;
- }
- void outvct(vector<string> a){
- for(int i=0;i<a.size();i++){
- cout << a[i] << "\n";
- }
- }
- struct osoba{
- string imie;
- string nazwisko;
- string dob;
- string pesel;
- string miasto;
- string plec;
- string basic(){
- return "Imie: " + imie + "\nNazwisko: " + nazwisko + "\nData urodzenia: " + dob + "\nPESEL: " + pesel + "\nMiasto: " + miasto + "\nPlec: " + plec;
- }
- string simple(){
- string sig=imie + " " + nazwisko + " " + dob + " " + pesel + " " + miasto + " " + plec;
- return sig;
- }
- string przecinki(){
- return imie + " " + nazwisko + "," + pesel + "," + miasto;
- }
- bool has(string what){
- string imiep=imie,nazwiskop=nazwisko,miastop=miasto,plecp=plec;
- transform(what.begin(), what.end(),what.begin(), ::toupper);
- transform(imie.begin(), imie.end(),imiep.begin(), ::toupper);
- transform(nazwisko.begin(), nazwisko.end(),nazwiskop.begin(), ::toupper);
- transform(miasto.begin(), miasto.end(),miastop.begin(), ::toupper);
- transform(plec.begin(), plec.end(),plecp.begin(), ::toupper);
- if(imiep == what || nazwiskop == what || dob == what || pesel == what || miastop == what || plecp == what){
- return true;
- }
- return false;
- }
- };
- string sexFromPesel(string pesel)
- {
- string lol;
- lol+=pesel[9];
- int pom=atoi(lol.c_str());
- if(pom%2==0)
- return "F";
- return "M";
- }
- string dob_from_PESEL(string pesel){
- string data="";
- if(pesel[2]=='2'||pesel[2]=='3')
- data+="20";
- else
- data+="19";
- data+=pesel.substr(0,2)+'-';
- if(pesel[2]=='2')
- {
- data+="0";
- data+=pesel[3];
- }
- else if(pesel[2]=='3')
- {
- data+="1";
- data+=pesel[3];
- }
- else
- data+=pesel.substr(2,2);
- data+="-";
- data+=pesel.substr(4,2);
- return data;
- }
- string what;
- bool compare(osoba os1, osoba os2){
- if(what == "dob"){
- return os1.dob < os2.dob;
- }
- if(what == "name"){
- return os1.imie < os2.imie;
- }
- if(what == "lname"){
- return os1.nazwisko < os2.nazwisko;
- }
- if(what == "pesel"){
- return os1.pesel < os2.pesel;
- }
- if(what == "city"){
- return os1.miasto < os2.miasto;
- }
- }
- vector<osoba> ludzie;
- void loadFromFile(string fileName)
- {
- ifstream in(fileName.c_str());
- string szystko;
- while(true)
- {
- if(in.eof())
- break;
- getline(in, szystko);
- vector<string> osoba_ = split(szystko, ',');
- osoba os;
- vector<string> magia = split(osoba_[0], ' ');
- if(magia.size() >= 2)
- {
- os.imie = magia[0];
- os.nazwisko = magia[1];
- os.pesel = osoba_[1];
- os.miasto = osoba_[2];
- os.dob = dob_from_PESEL(os.pesel);
- os.plec = sexFromPesel(os.pesel);
- ludzie.push_back(os);
- }
- }
- in.close();
- }
- int main(){
- SetConsoleCP( 852 );
- string::size_type sz;
- time_t now;
- struct tm * nowLocal;
- time (&now);
- nowLocal=localtime(&now);
- int currDate=rdn(nowLocal->tm_year+1900,nowLocal->tm_mon+1,nowLocal->tm_mday);
- bool running = true;
- loadFromFile("baza.txt");
- while(running){
- cout << "Kliknij guzik zeby: \n";
- 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";
- char operacja = getch();
- switch(tolower(operacja))
- {
- case 's':
- {
- system("cls");
- cout << "Podaj nazwe pliku:\n";
- string nazwa_pliku;
- cin >> nazwa_pliku;
- system("cls");
- cout << "Plik tekstowy (t) czy plik Excela (e)?";
- char operacja2 = getch();
- if(tolower(operacja2) == 't'){
- nazwa_pliku = nazwa_pliku + ".txt";
- ofstream out(nazwa_pliku.c_str());
- for(int i=0;i<ludzie.size()-1;i++)
- out << ludzie[i].przecinki() << "\n";
- out << ludzie[ludzie.size()-1].przecinki();
- out.close();
- }else if(operacja2 == 'e' || operacja2 == 'E'){
- nazwa_pliku = nazwa_pliku + ".csv";
- ofstream out(nazwa_pliku.c_str());
- for(int i=0;i<ludzie.size();i++)
- out << ludzie[i].przecinki() << "\n";
- out.close();
- }
- break;
- }
- case 'i':
- {
- float srednia=0;
- int mezczyzni = 0;
- osoba najmlodszy,najstarszy;
- najstarszy.dob="7349284071274398047";
- system("cls");
- for(int i=0; i<ludzie.size();i++){
- if(ludzie[i].dob > najmlodszy.dob)
- najmlodszy = ludzie[i];
- if(ludzie[i].dob < najstarszy.dob)
- najstarszy = ludzie[i];
- if(ludzie[i].plec == "M")
- mezczyzni++;
- srednia+=currDate-rdn(dateConverterY(ludzie[i].dob),dateConverterM(ludzie[i].dob),dateConverterD(ludzie[i].dob));
- }
- cout<<"Srednia wieku to: "<<setprecision(4)<<srednia/ludzie.size()/365.25;
- cout << "\nOsob w bazie jest:"<<ludzie.size()<<"\n";
- cout << "Mezczyzn jest " << mezczyzni << ", a kobiet " << ludzie.size() - mezczyzni << "\n";
- cout << "Najmlodszy jest: \n" << najmlodszy.basic();
- cout << "\n\nNajstarszy jest: \n" << najstarszy.basic();
- cout << "\nKliknij jakikolwiek guzik zeby wrocic do menu";
- getch();
- break;
- }
- case 'd':
- {
- osoba nowa;
- system("cls");
- string imiepom="1467832194683246018729413607982";
- while(has_any_digits(imiepom))
- {
- if(!(imiepom=="1467832194683246018729413607982"))
- cout<<"Prosze wprowadzic poprawne imie\n";
- cout<<"Podaj imie\n";
- cin>>imiepom;
- }
- nowa.imie=imiepom;
- system("cls");
- string nazwiskopom="1467832194683246018729413607982";
- while(has_any_digits(nazwiskopom))
- {
- if(!(nazwiskopom=="1467832194683246018729413607982"))
- cout<<"Prosze wprowadzic poprawne nazwisko\n";
- cout<<"Podaj nazwisko\n";
- cin>>nazwiskopom;
- }
- nowa.nazwisko=nazwiskopom;
- system("cls");
- string peselpom="";
- bool first=true;
- while(!(isPeselCorrect(peselpom)))
- {
- if(!first)
- cout<<"Wpisz poprawny pesel\n";
- else
- first = false;
- cout<<"Wpisz nowy PESEL\n";
- cin>>peselpom;
- }
- nowa.pesel=peselpom;
- nowa.plec=sexFromPesel(nowa.pesel);
- nowa.dob=dob_from_PESEL(nowa.pesel);
- system("cls");
- string citypom="";
- first=true;
- while(!(isCityCorrect(citypom)))
- {
- if(!first)
- cout<<"Wpisz poprawna nazwe miasta\n";
- else
- first = false;
- cout<<"Wpisz miasto\n";
- cin>>citypom;
- }
- nowa.miasto=citypom;
- system("cls");
- ludzie.push_back(nowa);
- getch();
- break;
- }
- case 'z':
- {
- system("cls");
- cout << "Podaj cokolwiek (imie, nazwisko, plec, date urodzenia, miasto)\n";
- string cokolwiek;
- cin >> cokolwiek;
- system("cls");
- int found = 0,id;
- int pom[ludzie.size()];
- for(int i=0; i<ludzie.size();i++){
- if(ludzie[i].has(cokolwiek)){
- cout <<found+1<<". "<< ludzie[i].basic() << "\n\n";
- pom[found]=i;
- found++;
- }
- }
- if(found==1)
- {
- id=1;
- }
- else if (found==0)
- {
- cout<<"Nikogo nie znalazlem. Nacisnij dowolny guzik zeby wrocic do menu";
- getch();
- break;
- }
- else
- {
- cout << "Wpisz indeks osoby, ktora chcesz zmienic\n";
- cin>>id;
- }
- system("cls");
- cout<<"Wybrano:\n"<<ludzie[pom[id-1]].basic();
- while(true)
- {
- cout << "\n\nWpisz co chcesz zmienic:\n Imie (I)\n Nazwisko (N)\n Pesel (P)\n Miasto (M)\n Koniec zmian(K)\n";
- char k = getch();
- k=toupper(k);
- if(k=='K')
- break;
- else if(k=='I')
- {
- string imiepom="1467832194683246018729413607982";
- while(has_any_digits(imiepom))
- {
- if(!(imiepom=="1467832194683246018729413607982"))
- cout<<"Prosze wprowadzic poprawne imie\n";
- cout<<"Wpisz nowe imie\n";
- cin>>imiepom;
- }
- ludzie[pom[id-1]].imie=imiepom;
- }
- else if(k=='N')
- {
- string imiepom="1467832194683246018729413607982";
- while(has_any_digits(imiepom))
- {
- if(!(imiepom=="1467832194683246018729413607982"))
- cout<<"Prosze wprowadzic poprawne nazwisko\n";
- cout<<"Wpisz nowe nazwisko\n";
- cin>>imiepom;
- }
- ludzie[pom[id-1]].nazwisko=imiepom;
- }
- else if(k=='P')
- {
- string peselpom="";
- bool first=true;
- while(!(isPeselCorrect(peselpom)))
- {
- if(!first)
- cout<<"Wpisz poprawny pesel\n";
- else
- first = false;
- cout<<"Wpisz nowy PESEL\n";
- cin>>peselpom;
- }
- ludzie[pom[id-1]].pesel=peselpom;
- ludzie[pom[id-1]].plec=sexFromPesel(ludzie[pom[id-1]].pesel);
- ludzie[pom[id-1]].dob=dob_from_PESEL(ludzie[pom[id-1]].pesel);
- }
- if(k=='M')
- {
- string citypom="1";
- bool first=true;
- while(!(isCityCorrect(citypom)))
- {
- if(!first)
- cout<<"Wpisz poprawna nazwe miasta\n";
- else
- first = false;
- cout<<"Wpisz miasto\n";
- cin>>citypom;
- }
- ludzie[pom[id-1]].miasto=citypom;
- }
- }
- cout<<"\nZmieniono:\n"<<ludzie[pom[id-1]].basic();
- getch();
- break;
- }
- case 'w':
- {
- system("cls");
- cout << "Podaj cokolwiek (imie, nazwisko, plec, date urodzenia, miasto)\n";
- string cokolwiek;
- cin >> cokolwiek;
- system("cls");
- int found = 0;
- for(int i=0; i<ludzie.size();i++){
- if(ludzie[i].has(cokolwiek)){
- cout << ludzie[i].basic() << "\n\n";
- found++;
- }
- }
- cout << "Znalazlem " << found << " osob\nKliknij cokolwiek, zeby wrocic do menu";
- getch();
- break;
- }
- case 'u':
- {
- system("cls");
- cout << "Podaj cokolwiek (imie, nazwisko, plec, date urodzenia, miasto)\n";
- string cokolwiek;
- cin >> cokolwiek;
- system("cls");
- int found = 0,id;
- int pom[ludzie.size()];
- for(int i=0; i<ludzie.size();i++){
- if(ludzie[i].has(cokolwiek)){
- cout <<found+1<<". "<< ludzie[i].basic() << "\n\n";
- pom[found]=i;
- found++;
- }
- }
- cout << "Wpisz indeks osoby, ktora chcesz usunac\n";
- cin>>id;
- system("cls");
- cout<<"Usunieto:\n"<<ludzie[pom[id-1]].basic();
- ludzie.erase(ludzie.begin()+pom[id-1]);
- getch();
- break;
- }
- case 'c':
- {
- system("cls");
- for(int i=0;i<ludzie.size();i++)
- cout << ludzie.at(i).simple() << "\n\n";
- cout << tr("kliknij cokolwiek, aby przejść dalej\n");
- getch();
- break;
- }
- case 'p':
- {
- system("cls");
- cout << "Po czym sortowac?\nDacie urodzenia (d)\nImieniu (i)\n Nazwisku (n)\n Peselu (p)\n Miescie (m)\n";
- char result = getch();
- switch(result){
- case 'd':
- {
- what = "dob";
- break;
- }
- case 'i':
- {
- what = "name";
- break;
- }
- case 'n':
- {
- what = "lname";
- break;
- }
- case 'p':
- {
- what = "pesel";
- break;
- }
- case 'm':
- {
- what = "city";
- break;
- }
- }
- sort(ludzie.begin(), ludzie.end(), compare);
- system("cls");
- cout << "Rosnaco (r), czy malejaco (m)?";
- result = getch();
- if(result=='m'){
- reverse(ludzie.begin(), ludzie.end());
- }
- system("cls");
- cout << "kliknij cokolwiek, aby przejsc dalej\n";
- getch();
- break;
- }
- case 'l':
- {
- string databaseName;
- cout<<"Podaj nazwe pliku z rozszerzeniem\n";
- cin>>databaseName;
- loadFromFile(databaseName);
- cout<<"Zaladowano baze.\nKliknij dowolny przycisk, zeby wrocic do menu";
- getch();
- break;
- }
- case 'q':
- running = false;
- }
- system("cls");
- }
- cout << "zegnaj.";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement