Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <vector>
- #include <queue>
- #include <iomanip>
- #include <fstream>
- using namespace std;
- struct Pacijent {
- int mbo;
- string ime, prezime;
- vector <string> popis_lijekova;
- };
- void izbornik() {
- cout << "----------IZBORNIK-----------------------" << endl;
- cout << "1 - unos novog pacijenta u kartoteku" << endl;
- cout << "2 - ispis svih pacijenata" << endl;
- cout << "3 - ispis liste recepata za lijekove po MBO-u" << endl; // umjesto pretraga pacijenata po MBO!
- cout << "4 - cekaonica" << endl;
- cout << "5 - dodavanje recepata za lijekove" << endl;
- cout << "0 - izlaz iz programa" << endl;
- cout << "-----------------------------------------" << endl;
- }
- void ispis(vector <Pacijent> &pac) {
- cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
- for (size_t i = 0; i < pac.size(); i++) {
- cout << pac[i].mbo << setw(15) << pac[i].ime << setw(15) << pac[i].prezime << endl;
- if (pac[i].popis_lijekova.size() != 0) {
- for (int k = 0; k < pac[i].popis_lijekova.size(); k++) {
- cout << pac[i].popis_lijekova[k] << endl;
- }
- }
- cout << "-" << endl;
- }
- }
- int rBinarySearch(vector <Pacijent> &pac, int first, int last, int key) {
- if (first <= last) {
- int mid = (first + last) / 2; // compute mid point.
- if (key == pac[mid].mbo)
- return mid; // found it.
- else if (key < pac[mid].mbo)
- // Call ourself for the lower part of the array
- return rBinarySearch(pac, first, mid - 1, key);
- else
- // Call ourself for the upper part of the array
- return rBinarySearch(pac, mid + 1, last, key);
- }
- return -(first + 1); // failed to find key
- }
- void stanje(queue <Pacijent> osoba) {
- int size = osoba.size();
- if (osoba.size() == 0) {
- cout << "Nema vise pacijenata u cekaonici!" << endl;
- }
- else {
- cout << "Pacijenti u cekaonici: " << endl;
- cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
- for (int i = 0; i < size; i++) {
- cout << osoba.front().mbo << setw(15) << osoba.front().ime << setw(15) << osoba.front().prezime << endl;
- osoba.pop();
- }
- }
- }
- void prijava(vector <Pacijent> pac, queue <Pacijent> &osoba) {
- ispis(pac);
- int odg, j;
- do {
- cout << "MBO pacijenta za prijem (ili 0 za izlaz): ";
- cin >> odg;
- if (odg == 0) {
- break;
- }
- j = rBinarySearch(pac, 0, pac.size(), odg);
- osoba.push(pac[j]);
- } while (odg != 0);
- }
- void odjava(queue <Pacijent> &osoba) {
- cout << "Odjavljeni pacijent: " << endl;
- cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
- cout << osoba.front().mbo << setw(15) << osoba.front().ime << setw(15) << osoba.front().prezime << endl;
- osoba.pop();
- cout << "Pacijent iduci na redu: " << endl;
- if (osoba.size() == 0) {
- cout << "Nema vise pacijenata u cekaonici!" << endl;
- }
- else {
- cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
- cout << osoba.front().mbo << setw(15) << osoba.front().ime << setw(15) << osoba.front().prezime << endl;
- }
- }
- void cekaonica_menu(vector <Pacijent> pac, queue <Pacijent> &osoba) {
- int odg;
- beg:
- cout << "----------CEKAONICA----------------------" << endl;
- cout << "1 - prijava kod sestre" << endl;
- cout << "2 - odjava nakon pregleda" << endl;
- cout << "3 - stanje u cekaonici" << endl;
- cout << "0 - povratak na glavni izbornik" << endl;
- cout << "-----------------------------------------" << endl;
- cin >> odg;
- switch (odg) {
- case 1: prijava(pac, osoba);
- goto beg;
- case 2: odjava(osoba);
- goto beg;
- case 3: stanje(osoba);
- goto beg;
- case 0: break;
- }
- }
- void popis_lijekova(vector <Pacijent> pac) {
- int key;
- cout << "MBO: ";
- cin >> key;
- int j = rBinarySearch(pac, 0, pac.size(), key);
- if (j < 0 || j > pac.size()) {
- cout << "Nema pacijenta s tim MBO-om!" << endl;
- }
- else if (pac[j].popis_lijekova.size() == 0) {
- cout << "Pacijent nema recepata!" << endl;
- }
- else {
- cout << "MBO" << setw(15) << "Ime" << setw(15) << "Prezime" << endl;
- cout << pac[j].mbo << setw(15) << pac[j].ime << setw(15) << pac[j].prezime << endl;
- for (int i = 0; i < pac[j].popis_lijekova.size(); i++) {
- cout << pac[j].popis_lijekova[i] << endl;
- }
- }
- }
- void read(vector <Pacijent> &pac) {
- pac.clear();
- ifstream fin;
- fin.open("ordinacija.txt");
- Pacijent podaci;
- string line, dummy;
- while (fin.good()) {
- fin >> podaci.mbo;
- fin >> podaci.ime;
- fin >> podaci.prezime;
- podaci.popis_lijekova.clear();
- while (fin >> line) {
- if (line[0] == '-') {
- break;
- }
- podaci.popis_lijekova.push_back(line);
- }
- if (!fin) break;
- pac.push_back(podaci);
- }
- fin.close();
- }
- void baza(vector <Pacijent> &pac) {
- ofstream fout;
- fout.open("ordinacija.txt");
- for (int i = 0; i < pac.size(); i++) {
- fout << pac[i].mbo << " " << pac[i].ime << " " << pac[i].prezime << endl;
- for (int k = 0; k < pac[i].popis_lijekova.size(); k++) {
- fout << pac[i].popis_lijekova[k] << endl;
- }
- fout << "-" << endl;
- }
- fout.close();
- }
- void ShellSort(vector <Pacijent> &pac) {
- int gap, i, j;
- Pacijent temp;
- for (gap = pac.size(); gap > 0; gap /= 2) {
- for (i = gap; i < pac.size(); i++) {
- for (j = i - gap; j >= 0 && pac[j].mbo > pac[j + gap].mbo; j -= gap) {
- temp = pac[j];
- pac[j] = pac[j + gap];
- pac[j + gap] = temp;
- }
- }
- }
- }
- void unos(vector <Pacijent> &pac) {
- Pacijent pacijent;
- char odg = 'y';
- do {
- beg:
- cout << "MBO: ";
- cin >> pacijent.mbo;
- for (int i = 0; i < pac.size(); i++) {
- if (pacijent.mbo == pac[i].mbo) {
- cout << "Pacijent vec postoji!" << endl;
- goto beg;
- }
- }
- cout << "Ime: ";
- cin >> pacijent.ime;
- cout << "Prezime: ";
- cin >> pacijent.prezime;
- pac.push_back(pacijent);
- cout << endl << "New entry? (y/n): ";
- cin >> odg;
- } while (odg == 'y');
- baza(pac);
- read(pac);
- ShellSort(pac);
- }
- void lijekovi(vector <Pacijent> &pac) {
- ispis(pac);
- int odg, j;
- string rec;
- bool jos;
- do {
- cout << "MBO pacijenta za dodavanje recepta (ili 0 za izlaz): ";
- cin >> odg;
- if (odg == 0) {
- break;
- }
- j = rBinarySearch(pac, 0, pac.size(), odg);
- do {
- cout << "Recept: ";
- cin >> rec;
- pac[j].popis_lijekova.push_back(rec);
- cout << "Ima li jos recepata (0/1)? ";
- cin >> jos;
- } while (jos == true);
- } while (odg != 0);
- }
- int main() {
- queue <Pacijent> osoba;
- vector <Pacijent> pac;
- read(pac);
- int odg;
- do {
- izbornik();
- cin >> odg;
- switch (odg) {
- case 1: unos(pac);
- break;
- case 2: ispis(pac);
- break;
- case 3: popis_lijekova(pac);
- break;
- case 4: cekaonica_menu(pac, osoba);
- break;
- case 5: lijekovi(pac);
- break;
- case 0: break;
- }
- } while (odg != 0);
- baza(pac);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement