Advertisement
encoree1996

Untitled

May 18th, 2014
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <fstream>
  7. #include <sstream>
  8.  
  9.  
  10. #define _VEC(name,type,array) vector<type> name(array,array+sizeof(array)/sizeof(array[0]))
  11. #define _foreach(var,container) for(unsigned var=0;var<container.size();var++)
  12. #define _SEP "*x*x*x*"
  13.  
  14. using namespace std;
  15.  
  16. //========================================================
  17. int ID = 0;
  18. //--------------------------------------------------------
  19. struct ct{int marka = -1,model = -1, data = -1, wlasciciel = -1, kontakt = -1, komentarz = -1, id = -1;};
  20. class baseFramework
  21. {
  22. public:
  23.     string marka, model, wlasciciel, data, kontakt,komentarz;
  24.     int _ID;
  25.  
  26.     baseFramework()
  27.     {
  28.         marka=model=wlasciciel=data=kontakt=komentarz=" ";
  29.         _ID = ID++;
  30.     }
  31.     void nul()
  32.     {
  33.         marka=model=wlasciciel=data=kontakt=komentarz="";
  34.     }
  35.  
  36. };
  37.  
  38.  
  39.  
  40.  
  41.  
  42. //--------------------------------------------------------------------------------
  43.  
  44. static const string _cmdlist[] = {"/help","/edit","/add","/sort","/exit","/dump","/load","/print"};
  45. _VEC(cmdlist,string,_cmdlist); //vec w cmdlist
  46. vector<baseFramework> database; //database
  47.  
  48.  
  49. //------------------------------------------------
  50. void parseInput(string &);
  51. void write(string);
  52. void exit();
  53. void help();
  54. void add();
  55. void _sort();
  56. void print();
  57. void edit();
  58. void dump();
  59. void load();
  60. void find();
  61. ct count();
  62. bool textComparatorM(baseFramework,baseFramework);
  63. bool textComparatorMo(baseFramework,baseFramework);
  64. bool textComparatorD(baseFramework,baseFramework);
  65. bool textComparatorW(baseFramework,baseFramework);
  66. bool textComparatorK(baseFramework,baseFramework);
  67. bool textComparatorKo(baseFramework,baseFramework);
  68. bool idComparator(baseFramework,baseFramework);
  69.  
  70.  
  71.  
  72.  
  73.  
  74. //==================================================================
  75.  
  76. int main()
  77. {
  78.  
  79.     help();
  80.  
  81.    string n;
  82.    for(;;)
  83. {
  84.    getline(cin,n);
  85.  
  86.    parseInput(n);
  87.    if(n=="/exit")break;
  88.    write("");
  89.    }
  90.    return 0;
  91. }
  92.  
  93. //==================================================================
  94.  
  95. void write(string in)
  96. {cout<<"> "<<in;}
  97.  
  98. void help(){
  99.     sort(cmdlist.begin(),cmdlist.end());
  100.     write("Dostepne komendy: \n");
  101.     write("");
  102.     _foreach(i,cmdlist)
  103.             cout<<cmdlist[i]<<" ";
  104.             cout<<endl;
  105.     write("");
  106. }
  107.  
  108. void add()
  109. {
  110.     string in="";
  111.     char choice;
  112.     baseFramework bf;
  113.  
  114.     write("Podaj marke samochodu: ");
  115.     getline(cin,in);
  116.     bf.marka = in;
  117.     write("Podaj model samochodu: ");
  118.     getline(cin,in);
  119.     bf.model = in;
  120.     write("Podaj wlasciciela: ");
  121.     getline(cin,in);
  122.     bf.wlasciciel = in;
  123.     write("Podaj date kradziezy: ");
  124.     getline(cin,in);
  125.     bf.data = in;
  126.     write("Podaj kontakt do wlasciciela: ");
  127.     getline(cin,in);
  128.     bf.kontakt = in;
  129.     write("Dodatkowe komentarze: ");
  130.     getline(cin,in);
  131.     bf.komentarz = in;
  132.  
  133.     database.push_back(bf);
  134.     write("Rekord pomyslnie dodany do bazy danych.\n");
  135.  
  136. }
  137.  
  138.  
  139.  
  140.  
  141. void _sort()
  142. {
  143.     write("Wedlug ktorej tabeli chcesz posortowac baze danych?\n");
  144.     write("__________________________________________________________________\n");
  145.     write("| Marka | Model | Wlasciciel  | Data | Kontakt | Komentarz |   ID |\n");
  146.     write("|   1   |   2   |   3         |   4  |    5    |     6     |   7  |\n");
  147.     write("");
  148.     int n;
  149.     cin>>n;
  150.  
  151.     switch(n)
  152.     {
  153.     case 1:
  154.         sort(database.begin(),database.end(),&textComparatorM);
  155.         break;
  156.     case 2:
  157.         sort(database.begin(),database.end(),&textComparatorMo);
  158.         break;
  159.     case 3:
  160.         sort(database.begin(),database.end(),&textComparatorW);
  161.         break;
  162.     case 4:
  163.         sort(database.begin(),database.end(),&textComparatorD);
  164.         break;
  165.     case 5:
  166.         sort(database.begin(),database.end(),&textComparatorK);
  167.         break;
  168.     case 6:
  169.         sort(database.begin(),database.end(),&textComparatorKo);
  170.         break;
  171.     case 7:
  172.         sort(database.begin(),database.end(),&idComparator);
  173.         break;
  174.     }
  175.     write("Podaj spoosob sortowania bazy danych: a-z [AZ] | z-a [ZA]: ");
  176.     string tmp;
  177.     cin>>tmp;
  178.     if(tmp=="AZ"||tmp=="az")
  179.         write("Baza posortowana od A do Z!\n");
  180.     else if(tmp=="ZA"||tmp=="za")
  181.         {
  182.             reverse(database.begin(),database.end());
  183.             write("Baza posortowana od Z do A!\n");
  184.         }
  185.     else write("Baza danych zostala posortowana domyslnie [a-z]\n");
  186.     cin.ignore();
  187. }
  188. void print()
  189. {
  190.     cout<<"_________________________________________________________________________________\n|  Marka   |   Model |   Wlasciciel |   Data  |   Kontakt  |   Komentarz  |  ID  |\n";
  191.     _foreach(i,database)
  192.     {
  193.             ostringstream ss;
  194.             ss<<i;
  195.             string str = ss.str();
  196.             printf("|%10.10s|%9.9s|%14.14s|%9.9s|%12.12s|%14.14s|%6.6s|\n",database[i].marka.c_str(),database[i].model.c_str(),database[i].wlasciciel.c_str(),database[i].data.c_str(),database[i].kontakt.c_str(),database[i].komentarz.c_str(),str.c_str());
  197.  
  198.     }
  199. }
  200.  
  201. void dump()
  202. {
  203.     fstream plik;
  204.     plik.open("data.base",ios::out| ios::trunc);
  205.     if(plik.good()==false)
  206.         write("Nie mozna uzyskac dostepu do pliku!\n");
  207.     else
  208.     {
  209.  
  210.         _foreach(i,database)
  211.             plik<<database[i].marka<<_SEP<<database[i].model<<_SEP<<database[i].wlasciciel
  212.                                    <<_SEP<<database[i].data<<_SEP<<database[i].kontakt
  213.                                    <<_SEP<<database[i].komentarz<<_SEP<<database[i]._ID<<endl;
  214.  
  215.         write("Baza danych zrzucona do pliku data.base!\n");
  216.         plik.close();
  217.  
  218.     }
  219. }
  220.  
  221. void load()
  222. {
  223.     fstream plik;
  224.     string line;
  225.     baseFramework bf;
  226.     plik.open("data.base",ios::in);
  227.     if(plik.good()==false)
  228.         write("Nie mozna uzyskac dostepu do pliku!\n");
  229.     else
  230.     {
  231.         database.clear();
  232.  
  233.         while(getline(plik,line))
  234.         {
  235.             bf.nul();
  236.  
  237.             size_t found = line.find(_SEP);
  238.             for(int i=0;i<found;i++)
  239.                 bf.marka+=line[i];
  240.             line.erase(line.begin(),line.begin()+found+7);
  241.  
  242.             found = line.find(_SEP);
  243.             for(int i=0;i<found;i++)
  244.                 bf.model+=line[i];
  245.             line.erase(line.begin(),line.begin()+found+7);
  246.  
  247.             found = line.find(_SEP);
  248.             for(int i=0;i<found;i++)
  249.                 bf.wlasciciel+=line[i];
  250.             line.erase(line.begin(),line.begin()+found+7);
  251.  
  252.             found = line.find(_SEP);
  253.             for(int i=0;i<found;i++)
  254.                 bf.data+=line[i];
  255.             line.erase(line.begin(),line.begin()+found+7);
  256.  
  257.             found = line.find(_SEP);
  258.             for(int i=0;i<found;i++)
  259.                 bf.kontakt+=line[i];
  260.             line.erase(line.begin(),line.begin()+found+7);
  261.  
  262.             found = line.find(_SEP);
  263.             for(int i=0;i<found;i++)
  264.                 bf.komentarz+=line[i];
  265.             line.erase(line.begin(),line.begin()+found+7);
  266.  
  267.             bf._ID =ID++;
  268.  
  269.             database.push_back(bf);
  270.  
  271.  
  272.  
  273.             }
  274.         write("Baza pomyslnie zaladowana!\n");
  275.         plik.close();
  276.     }
  277. }
  278.  
  279. void exit()
  280. {
  281.     dump();
  282.     write("Dziekuje za prace");
  283. }
  284.  
  285. void edit()
  286. {
  287.     sort(database.begin(),database.end(),idComparator);
  288.     write("Czy chcesz wyswietlic baze? [t/n] \n");
  289.     write("");
  290.     char choice;
  291.     cin>>choice;
  292.     cin.ignore();
  293.     if(choice == 't')
  294.         print();
  295.  
  296.     write("Podaj ID wpisu, ktory chcesz edytowac: ");
  297.     int n;
  298.     cin>>n;
  299.     string in;
  300.  
  301.     cout<<"Marka: "<<database[n].marka<<"\nPodaj nowa wartosc dla tego pola: \n";
  302.     cin.ignore();
  303.     getline(cin,in);
  304.     database[n].marka = in;
  305.  
  306.     cout<<"Model: "<<database[n].model<<"\nPodaj nowa wartosc dla tego pola: \n";
  307.     getline(cin,in);
  308.     database[n].model = in;
  309.  
  310.     cout<<"Wlasciciel: "<<database[n].wlasciciel<<"\nPodaj nowa wartosc dla tego pola: \n";
  311.     getline(cin,in);
  312.     database[n].wlasciciel = in;
  313.  
  314.     cout<<"Data: "<<database[n].data<<"\nPodaj nowa wartosc dla tego pola: \n";
  315.     getline(cin,in);
  316.     database[n].data = in;
  317.  
  318.     cout<<"Kontakt: "<<database[n].kontakt<<"\nPodaj nowa wartosc dla tego pola: \n";
  319.     getline(cin,in);
  320.     database[n].kontakt = in;
  321.  
  322.     cout<<"Komentarz: "<<database[n].komentarz<<"\nPodaj nowa wartosc dla tego pola: \n";
  323.  
  324.     getline(cin,in);
  325.     database[n].komentarz = in;
  326.  
  327. }
  328.  
  329.  
  330. bool idComparator(baseFramework left, baseFramework right)
  331. {
  332.     return left._ID>right._ID;
  333. }
  334.  
  335. bool textComparatorM(baseFramework left, baseFramework right)
  336. {
  337.     int i=0;
  338.     while(left.marka[i]==right.marka[i])
  339.         i++;
  340.     if(i==left.marka.size()&&i<right.marka.size())
  341.         return true;
  342.     if(left.marka[i]<right.marka[i])
  343.         return true;
  344.     return false;
  345. }
  346. bool textComparatorMo(baseFramework left, baseFramework right)
  347. {
  348.     int i=0;
  349.     while(left.model[i]==right.model[i])
  350.         i++;
  351.     if(i==left.model.size()&&i<right.model.size())
  352.         return true;
  353.     if(left.model[i]<right.model[i])
  354.         return true;
  355.     return false;
  356. }
  357. bool textComparatorK(baseFramework left, baseFramework right)
  358. {
  359.     int i=0;
  360.     while(left.kontakt[i]==right.kontakt[i])
  361.         i++;
  362.     if(i==left.kontakt.size()&&i<right.kontakt.size())
  363.         return true;
  364.     if(left.kontakt[i]<right.kontakt[i])
  365.         return true;
  366.     return false;
  367. }
  368. bool textComparatorKo(baseFramework left, baseFramework right)
  369. {
  370.     int i=0;
  371.     while(left.komentarz[i]==right.komentarz[i])
  372.         i++;
  373.     if(i==left.komentarz.size()&&i<right.komentarz.size())
  374.         return true;
  375.     if(left.komentarz[i]<right.komentarz[i])
  376.         return true;
  377.     return false;
  378. }
  379. bool textComparatorW(baseFramework left, baseFramework right)
  380. {
  381.     int i=0;
  382.     while(left.wlasciciel[i]==right.wlasciciel[i])
  383.         i++;
  384.     if(i==left.wlasciciel.size()&&i<right.wlasciciel.size())
  385.         return true;
  386.     if(left.wlasciciel[i]<right.wlasciciel[i])
  387.         return true;
  388.     return false;
  389. }
  390. bool textComparatorD(baseFramework left, baseFramework right)
  391. {
  392.     int i=0;
  393.     while(left.data[i]==right.data[i])
  394.         i++;
  395.     if(i==left.data.size()&&i<right.data.size())
  396.         return true;
  397.     if(left.data[i]<right.data[i])
  398.         return true;
  399.     return false;
  400. }
  401.  
  402. void parseInput(string &in){
  403.     (in=="/exit"?exit():(in=="/help"?help():(in=="/add"?add():(in=="/sort"?_sort():(in=="/print"?print():(in=="/dump"?dump():(in=="/load"?load():(in=="/edit"?edit():(in=="/search"?find():write("Unknown command!\n")))))))))); //not complete
  404. }
  405. void find()
  406. {
  407.     vector<int> pos;
  408.     string tmp;
  409.     size_t found;
  410.     cout<<"Marka: ";
  411.     getline(cin,tmp);
  412.     _foreach(i,database)
  413.     {
  414.         found = database[i].marka.find(tmp);
  415.         if(found!=string::npos)
  416.             pos.push_back(i);
  417.     }
  418.  
  419.  
  420.     cout<<"\nModel: ";
  421.     getline(cin,tmp);
  422.     _foreach(i,pos)
  423.     {
  424.         if(pos.empty())
  425.         {
  426.             cout<<"BRAK WYNIKOW!\n";
  427.             break;
  428.         }
  429.         found = database[pos[i]].model.find(tmp);
  430.         if(found==string::npos)
  431.         {
  432.             pos.erase(pos.begin()+i);
  433.             i--;
  434.         }
  435.     }
  436.  
  437.     cout<<"\nWlasciciel: ";
  438.     getline(cin,tmp);
  439.     _foreach(i,pos)
  440.     {
  441.         if(pos.empty())
  442.         {
  443.             cout<<"BRAK WYNIKOW!\n";
  444.             break;
  445.         }
  446.         found = database[pos[i]].wlasciciel.find(tmp);
  447.         if(found==string::npos)
  448.         {
  449.             pos.erase(pos.begin()+i);
  450.             i--;
  451.         }
  452.     }
  453.  
  454.     cout<<"\nData: ";
  455.     getline(cin,tmp);
  456.     _foreach(i,pos)
  457.     {
  458.         if(pos.empty())
  459.         {
  460.             cout<<"BRAK WYNIKOW!\n";
  461.             break;
  462.         }
  463.         found = database[pos[i]].data.find(tmp);
  464.         if(found==string::npos)
  465.         {
  466.             pos.erase(pos.begin()+i);
  467.             i--;
  468.         }
  469.     }
  470.  
  471.     cout<<"\nKontakt: ";
  472.     getline(cin,tmp);
  473.     _foreach(i,pos)
  474.     {
  475.         if(pos.empty())
  476.         {
  477.             cout<<"BRAK WYNIKOW!\n";
  478.             break;
  479.         }
  480.         found = database[pos[i]].kontakt.find(tmp);
  481.         if(found==string::npos)
  482.         {
  483.             pos.erase(pos.begin()+i);
  484.             i--;
  485.         }
  486.     }
  487.  
  488.     cout<<"\nKomentarz: ";
  489.     getline(cin,tmp);
  490.     _foreach(i,pos)
  491.     {
  492.         if(pos.empty())
  493.         {
  494.             cout<<"BRAK WYNIKOW!\n";
  495.             break;
  496.         }
  497.         found = database[pos[i]].komentarz.find(tmp);
  498.         if(found==string::npos)
  499.         {
  500.             pos.erase(pos.begin()+i);
  501.             i--;
  502.         }
  503.     }
  504.  
  505.     if(pos.empty())
  506.     {
  507.         cout<<"Brak wynikow podczas wyszukiwania wedle zadanego kryterium.\n";
  508.     }
  509.     else
  510.     {
  511.         cout<<"___________________________________________________________________________\n|  Marka   |   Model |   Wlasciciel |   Data  |   Kontakt  |   Komentarz  |\n";
  512.  
  513.         _foreach(i,pos)
  514.                 printf("|%10.10s|%9.9s|%14.14s|%9.9s|%12.12s|%14.14s|\n",database[pos[i]].marka.c_str(),database[pos[i]].model.c_str(),database[pos[i]].wlasciciel.c_str(),database[pos[i]].data.c_str(),database[pos[i]].kontakt.c_str(),database[pos[i]].komentarz.c_str());
  515.  
  516.     }
  517.  
  518. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement