Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.72 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5. #include <queue>
  6. #include <iomanip>
  7. #include <fstream>
  8.  
  9. using namespace std;
  10.  
  11. struct Pacijent {
  12.     int mbo;
  13.     string ime, prezime;
  14.     vector <string> popis_lijekova;
  15. };
  16.  
  17. void izbornik() {
  18.     cout << "----------IZBORNIK-----------------------" << endl;
  19.     cout << "1 - unos novog pacijenta u kartoteku" << endl;
  20.     cout << "2 - ispis svih pacijenata" << endl;
  21.     cout << "3 - ispis liste recepata za lijekove po MBO-u" << endl;    // umjesto pretraga pacijenata po MBO!
  22.     cout << "4 - cekaonica" << endl;
  23.     cout << "5 - dodavanje recepata za lijekove" << endl;
  24.     cout << "0 - izlaz iz programa" << endl;
  25.     cout << "-----------------------------------------" << endl;
  26. }
  27.  
  28. void ispis(vector <Pacijent> &pac) {
  29.     cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
  30.     for (size_t i = 0; i < pac.size(); i++) {
  31.         cout << pac[i].mbo << setw(15) << pac[i].ime << setw(15) << pac[i].prezime << endl;
  32.         if (pac[i].popis_lijekova.size() != 0) {
  33.             for (int k = 0; k < pac[i].popis_lijekova.size(); k++) {
  34.                 cout << pac[i].popis_lijekova[k] << endl;
  35.             }
  36.         }
  37.         cout << "-" << endl;
  38.     }
  39. }
  40.  
  41. int rBinarySearch(vector <Pacijent> &pac, int first, int last, int key) {
  42.     if (first <= last) {
  43.         int mid = (first + last) / 2;  // compute mid point.
  44.         if (key == pac[mid].mbo)
  45.             return mid;   // found it.
  46.         else if (key < pac[mid].mbo)
  47.             // Call ourself for the lower part of the array
  48.             return rBinarySearch(pac, first, mid - 1, key);
  49.         else
  50.             // Call ourself for the upper part of the array
  51.             return rBinarySearch(pac, mid + 1, last, key);
  52.     }
  53.     return -(first + 1);    // failed to find key
  54. }
  55.  
  56. void stanje(queue <Pacijent> osoba) {
  57.     int size = osoba.size();
  58.     if (osoba.size() == 0) {
  59.         cout << "Nema vise pacijenata u cekaonici!" << endl;
  60.     }
  61.     else {
  62.         cout << "Pacijenti u cekaonici: " << endl;
  63.         cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
  64.         for (int i = 0; i < size; i++) {
  65.             cout << osoba.front().mbo << setw(15) << osoba.front().ime << setw(15) << osoba.front().prezime << endl;
  66.             osoba.pop();
  67.         }
  68.     }
  69. }
  70.  
  71. void prijava(vector <Pacijent> pac, queue <Pacijent> &osoba) {
  72.     ispis(pac);
  73.     int odg, j;
  74.     do {
  75.         cout << "MBO pacijenta za prijem (ili 0 za izlaz): ";
  76.         cin >> odg;
  77.         if (odg == 0) {
  78.             break;
  79.         }
  80.         j = rBinarySearch(pac, 0, pac.size(), odg);
  81.         osoba.push(pac[j]);
  82.     } while (odg != 0);
  83.  
  84. }
  85.  
  86. void odjava(queue <Pacijent> &osoba) {
  87.     cout << "Odjavljeni pacijent: " << endl;
  88.     cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
  89.     cout << osoba.front().mbo << setw(15) << osoba.front().ime << setw(15) << osoba.front().prezime << endl;
  90.     osoba.pop();
  91.     cout << "Pacijent iduci na redu: " << endl;
  92.     if (osoba.size() == 0) {
  93.         cout << "Nema vise pacijenata u cekaonici!" << endl;
  94.     }
  95.     else {
  96.         cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
  97.         cout << osoba.front().mbo << setw(15) << osoba.front().ime << setw(15) << osoba.front().prezime << endl;
  98.     }
  99. }
  100.  
  101. void cekaonica_menu(vector <Pacijent> pac, queue <Pacijent> &osoba) {
  102.     int odg;
  103.     beg:
  104.     cout << "----------CEKAONICA----------------------" << endl;
  105.     cout << "1 - prijava kod sestre" << endl;
  106.     cout << "2 - odjava nakon pregleda" << endl;
  107.     cout << "3 - stanje u cekaonici" << endl;
  108.     cout << "0 - povratak na glavni izbornik" << endl;
  109.     cout << "-----------------------------------------" << endl;
  110.     cin >> odg;
  111.     switch (odg) {
  112.     case 1: prijava(pac, osoba);
  113.         goto beg;
  114.     case 2: odjava(osoba);
  115.         goto beg;
  116.     case 3: stanje(osoba);
  117.         goto beg;
  118.     case 0: break;
  119.     }
  120. }
  121.  
  122. void popis_lijekova(vector <Pacijent> pac) {
  123.     int key;
  124.     cout << "MBO: ";
  125.     cin >> key;
  126.     int j = rBinarySearch(pac, 0, pac.size(), key);
  127.     if (j < 0 || j > pac.size()) {
  128.         cout << "Nema pacijenta s tim MBO-om!" << endl;
  129.     }
  130.     else if (pac[j].popis_lijekova.size() == 0) {
  131.         cout << "Pacijent nema recepata!" << endl;
  132.     }
  133.     else {
  134.         cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
  135.         cout << pac[j].mbo << setw(15) << pac[j].ime << setw(15) << pac[j].prezime << endl;
  136.         for (int i = 0; i < pac[j].popis_lijekova.size(); i++) {
  137.             cout << pac[j].popis_lijekova[i] << endl;
  138.         }
  139.     }
  140. }
  141.  
  142. void read(vector <Pacijent> &pac) {
  143.     pac.clear();
  144.     ifstream fin;
  145.     fin.open("ordinacija.txt");
  146.     Pacijent podaci;
  147.     string line, dummy;
  148.     while (fin.good()) {
  149.  
  150.         fin >> podaci.mbo;
  151.         fin >> podaci.ime;
  152.         fin >> podaci.prezime;
  153.         podaci.popis_lijekova.clear();
  154.  
  155.             while (fin >> line) {
  156.                 if (line[0] == '-') {
  157.                     break;
  158.                 }
  159.                 podaci.popis_lijekova.push_back(line);
  160.             }
  161.             if (!fin) break;
  162.         pac.push_back(podaci);
  163.     }
  164.     fin.close();
  165. }
  166.  
  167. void baza(vector <Pacijent> &pac) {
  168.     ofstream fout;
  169.     fout.open("ordinacija.txt");
  170.     for (int i = 0; i < pac.size(); i++) {
  171.         fout << pac[i].mbo << " " << pac[i].ime << " " << pac[i].prezime << endl;
  172.         for (int k = 0; k < pac[i].popis_lijekova.size(); k++) {
  173.             fout << pac[i].popis_lijekova[k] << endl;
  174.         }
  175.         fout << "-" << endl;
  176.  
  177.     }
  178.     fout.close();
  179. }
  180.  
  181. void ShellSort(vector <Pacijent> &pac) {
  182.     int gap, i, j;
  183.         Pacijent temp;
  184.     for (gap = pac.size(); gap > 0; gap /= 2) {
  185.         for (i = gap; i < pac.size(); i++) {
  186.             for (j = i - gap; j >= 0 && pac[j].mbo > pac[j + gap].mbo; j -= gap) {
  187.                 temp = pac[j];
  188.                 pac[j] = pac[j + gap];
  189.                 pac[j + gap] = temp;
  190.             }
  191.         }
  192.     }
  193. }
  194.  
  195. void unos(vector <Pacijent> &pac) {
  196.     Pacijent pacijent;
  197.     char odg = 'y';
  198.     do {
  199.         beg:
  200.         cout << "MBO: ";
  201.         cin >> pacijent.mbo;
  202.         for (int i = 0; i < pac.size(); i++) {
  203.             if (pacijent.mbo == pac[i].mbo) {
  204.                 cout << "Pacijent vec postoji!" << endl;
  205.                 goto beg;
  206.             }
  207.         }
  208.         cout << "Ime: ";
  209.         cin >> pacijent.ime;
  210.         cout << "Prezime: ";
  211.         cin >> pacijent.prezime;
  212.         pac.push_back(pacijent);
  213.         cout << endl << "New entry? (y/n): ";
  214.         cin >> odg;
  215.     } while (odg == 'y');
  216.     baza(pac);
  217.     read(pac);
  218.     ShellSort(pac);
  219. }
  220.  
  221. void lijekovi(vector <Pacijent> &pac) {
  222.     ispis(pac);
  223.     int odg, j;
  224.     string rec;
  225.     bool jos;
  226.     do {
  227.         cout << "MBO pacijenta za dodavanje recepta (ili 0 za izlaz): ";
  228.         cin >> odg;
  229.         if (odg == 0) {
  230.             break;
  231.         }
  232.         j = rBinarySearch(pac, 0, pac.size(), odg);
  233.         do {
  234.             cout << "Recept: ";
  235.             cin >> rec;
  236.             pac[j].popis_lijekova.push_back(rec);
  237.             cout << "Ima li jos recepata (0/1)? ";
  238.             cin >> jos;
  239.         } while (jos == true);
  240.     } while (odg != 0);
  241. }
  242.  
  243. int main() {
  244.  
  245.     queue <Pacijent> osoba;
  246.     vector <Pacijent> pac;
  247.     read(pac);
  248.  
  249.     int odg;
  250.     do {
  251.         izbornik();
  252.         cin >> odg;
  253.         switch (odg) {
  254.         case 1: unos(pac);
  255.             break;
  256.         case 2: ispis(pac);
  257.             break;
  258.         case 3: popis_lijekova(pac);
  259.             break;
  260.         case 4: cekaonica_menu(pac, osoba);
  261.             break;
  262.         case 5: lijekovi(pac);
  263.             break;
  264.         case 0: break;
  265.         }
  266.     } while (odg != 0);
  267.  
  268.     baza(pac);
  269.     system("pause");
  270.     return 0;
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement