Created
December 21, 2016 01:04
-
-
Save rmsubekti/be078fbeefad3346ea8f5924685a1437 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <conio.h>//_getch() | |
#include <string> | |
#include <iomanip>//setw() | |
#include <stdlib.h> | |
#define max 20 | |
using namespace std; | |
//Deklarasi struct pasien | |
struct pasien { | |
string nama, alamat, keluhan; | |
double biaya; | |
}; | |
//Deklarasi struct Keluhan | |
struct keluhan { | |
string nama; | |
int stok_obat; | |
double harga_obat; | |
}; | |
//Deklarasi struct queue_pasien | |
struct queue_pasien { | |
int head, tail; | |
pasien P[max]; | |
}Q; | |
//Deklarasi struct queue_pasien | |
struct queue_keluhan { | |
int head, tail; | |
keluhan K[max]; | |
}P; | |
//cek queue full, argumen (true) pasien, (false) keluhan | |
bool isFull(bool pasien) { | |
return pasien ? Q.tail == max : P.tail == max; | |
} | |
//cek queue empty, argumen (true) pasien, (false) keluhan | |
bool isEmpty(bool pasien) { | |
return pasien ? Q.tail == 0 : P.tail == 0; | |
} | |
//Mendapatkan input string berikut dengan spasi | |
string getLine() { | |
string txt; | |
do { | |
getline(cin, txt); | |
} while (txt == ""); | |
return txt; | |
} | |
//Menambahkan keluhan baru | |
void inputKeluhan() { | |
if (isFull(false)) | |
{ | |
//cek apakah data keluhan penuh jika benar print | |
cout << "Lemari obat penuh!"; | |
} | |
else | |
{ | |
//jika tidak penuh | |
cout << "Nama Keluhan : "; | |
string nama = getLine(); | |
//do { | |
// input nama dengan spasi | |
//getline(cin, nama); | |
//} while (nama == "");//loop sampai bisa menginputkan data | |
P.K[P.tail].nama = nama; | |
cout << "Jumlah Stok Obat : "; cin >> P.K[P.tail].stok_obat; | |
cout << "Harga : "; cin >> P.K[P.tail].harga_obat; | |
P.tail++;//increase tail | |
} | |
} | |
//Menghapus keluhan dalam queue_keluhan | |
void hapusKeluhan() { | |
if (isEmpty(false)) { | |
//cek keluhan kosong | |
cout << "Belum ada keluhan"; | |
} | |
else { | |
int no; | |
cout << "Masukkan nomor keluhan : "; cin >> no; | |
//jika tidak, dapatkan nilai queue pada head untuk menampilkan nama | |
cout << "Menghapus keluhan sakit \"" << P.K[P.head].nama << "\"..." << endl; | |
//geser nilai dengan menimpa nilai data yang akan dihapus | |
for (int i = no - 1; i < P.tail; i++) | |
//Pindahkan semua nilai satu langkah mendekati head | |
P.K[i] = P.K[i + 1]; | |
//menyembunyikan data terakhir (tail) dengan mengurangi tail. | |
P.tail--; | |
} | |
} | |
//Menampilkan stok obat untuk setiap keluhan | |
void printstokObat() { | |
if (isEmpty(false)) { | |
//jika queue_keluhan kosong, print | |
cout << "Belum ada keluhan, Silakan tambahkan ke daftar!"; | |
} | |
else { | |
//jika tidak print semua nilai pada queue_keluhan | |
cout << "===========================================================\n" | |
<< "| No | Nama Keluhan | Stok Obat | Harga Obat |\n" | |
<< "===========================================================\n"; | |
for (int i = P.head; i < P.tail; i++) { | |
cout << "| " << setw(3) << left << i + 1 | |
<< "| " << setw(23) << left << P.K[i].nama | |
<< "| " << setw(10) << left << P.K[i].stok_obat | |
<< "| Rp." << setw(11) << left << P.K[i].harga_obat << "|" << endl; | |
} | |
cout << "===========================================================\n"; | |
} | |
} | |
// Menampilkan menu untuk merubah atau menambah stok obat | |
void stokObat() { | |
int choose, no, stok; | |
do | |
{ | |
system("cls"); | |
printstokObat(); | |
cout << "----------------------\n" | |
<< " Menu Pilihan\n" | |
<< "----------------------\n" | |
<< " [1] Tambah Keluhan \n" | |
<< " [2] Hapus Keluhan\n" | |
<< " [3] Tambah Stok Obat \n" | |
<< " [4] Selesai \n\n" | |
<< "----------------------\n" | |
<< "Masukkan pilihan : "; cin >> choose; | |
switch (choose) | |
{ | |
case 1: | |
inputKeluhan(); | |
break; | |
case 2: | |
hapusKeluhan(); | |
break; | |
case 3:// Tambah stok obat untuk keuhan yang dipilih | |
cout << "Masukkan No.Keluhan : "; cin >> no; | |
cout << "Masukkan Jumlah obat : "; cin >> stok; | |
P.K[no - 1].stok_obat += stok; | |
break; | |
case 4: | |
cout << "Press any key.."; | |
break; | |
default: | |
cout << "Pilihan tidak tersedia"; | |
break; | |
} | |
} while (choose != 4); | |
} | |
//Menampilkan daftar pasien | |
void printDaftarPasien() { | |
if (isEmpty(true)) { | |
cout << "Belum ada pasien yang dirawat!"; | |
} | |
else { | |
cout << "=====================================================================\n" | |
<< "| No | Nama Pasien | Keluhan | Biaya |\n" | |
<< "=====================================================================\n"; | |
for (int i = Q.head; i < Q.tail; i++) { | |
cout << "| " << setw(3) << left << i + 1 | |
<< "| " << setw(22) << left << Q.P[i].nama | |
<< "| " << setw(19) << left << Q.P[i].keluhan | |
<< "| Rp." << setw(13) << left << Q.P[i].biaya << "|" << endl; | |
} | |
cout << "=====================================================================\n"; | |
} | |
} | |
//Menambahkan pasien | |
void pasienMasuk() { | |
if (isFull(true)) { | |
cout << "Antrian Pasien Penuh!"; | |
} | |
else { | |
system("cls"); | |
cout << "MASUKKAN DATA DIRI PASIEN" << endl; | |
cout << "Nama Lengkap\t\t: "; | |
string nama= getLine(); | |
Q.P[Q.tail].nama = nama; | |
cout << "Alamat\t\t\t: "; | |
string alamat = getLine(); | |
Q.P[Q.tail].alamat = alamat; | |
cout << "Keluhan Pasien\t\t: \n" << endl; | |
int pilihan; | |
for (int i = P.head; i < P.tail; i++) | |
{ | |
cout << "\t" << i + 1 << ". " << P.K[i].nama << endl; | |
} | |
cout << "\tMasukkan Pilihan : "; cin >> pilihan; | |
if (P.K[pilihan - 1].stok_obat > 0) | |
{ | |
char periksa, konsultasi; | |
int dibayar; | |
Q.P[Q.tail].keluhan = P.K[pilihan - 1].nama; | |
Q.P[Q.tail].biaya += P.K[pilihan - 1].harga_obat; | |
P.K[pilihan - 1].stok_obat--; | |
cout << "\nPeriksa ? (Y/N)\t\t: "; cin >> periksa; | |
Q.P[Q.tail].biaya += (tolower(periksa) == 'y' ? 1000 : 0); | |
cout << "Konsultasi ? (Y/N)\t: "; cin >> konsultasi; | |
Q.P[Q.tail].biaya += (tolower(konsultasi) == 'y' ? 1500 : 0); | |
cout << "Total biaya\t\t: Rp. " << Q.P[Q.tail].biaya << endl; | |
cout << "Uang dibayarkan\t\t: Rp. "; cin >> dibayar; | |
if ((dibayar - Q.P[Q.tail].biaya) < 0) { | |
cout << "Kekurangan\t\t: Rp. " << (dibayar - Q.P[Q.tail].biaya)*-1; | |
} | |
else { | |
cout << "Uang Kembali\t\t: Rp. " << dibayar - Q.P[Q.tail].biaya; | |
} | |
getch(); | |
system("cls"); | |
cout << "|=====================================================================|\n" | |
<< "| Rumah Sakit \"Kasih Ibu\" |\n" | |
<< "|=====================================================================|\n" | |
<< "| BUKTI PEMBAYARAN |\n" | |
<< "| ---------------- |\n" | |
<< "| |\n" | |
<< "| Telah Diterima Dari: |\n" | |
<< "| Nama Pasien : " << setw(48) << left << nama << " |\n" | |
<< "| Alamat : " << setw(48) << left << alamat << " |\n" | |
<< "| Keluhan : " << setw(48) << left << P.K[pilihan - 1].nama << " |\n" | |
<< "| Untuk Pembayaran : |\n" | |
<< (tolower(konsultasi) == 'y' ? "| KONSULTASI DOKTER SPESIALIS : Rp. 1500 |\n" : "") | |
<< (tolower(periksa) == 'y' ? "| PERIKSA KESEHATAN : Rp. 1000 |\n" : "") | |
<< "| RESEP OBAT : Rp. " << setw(27) << right << P.K[pilihan - 1].harga_obat << " |\n" | |
<< "| ------------------------ + |\n" | |
<< "| Total Pembayaran : " << setw(24) << right << Q.P[Q.tail].biaya << " |\n" | |
<< "| |\n"; | |
if ((dibayar - Q.P[Q.tail].biaya) < 0) { | |
cout << "| Dibayarkan dengan Kekurangan : Rp." << setw(29) << left << (dibayar - Q.P[Q.tail].biaya)*-1 << " |\n"; | |
} | |
else { | |
cout << "| BIAYA TELAH DIBAYAR LUNAS |\n"; | |
} | |
std::cout << "|=====================================================================|" << endl; | |
Q.tail++; | |
} | |
else if (P.K[pilihan - 1].nama == "" && P.K[pilihan - 1].harga_obat == 0) { | |
cout << "\n\tPilihan Keluhan tidak tersedia." | |
<< "\n\tSilakan tambahkan keluhan yang dimaksud di Daftar Keluhan." << endl; | |
} | |
else | |
{ | |
cout << "\n\tStok obat " << P.K[pilihan - 1].nama << " telah habis. \n" | |
<< "\tSilahkan tambahkan stok obat untuk keluhan " << P.K[pilihan - 1].nama; | |
} | |
} | |
} | |
void pasienKeluar() { | |
if (isEmpty(true)) { | |
cout << "Belum ada pasien yang dirawat!"; | |
} | |
else { | |
cout << "Memeriksa pasien atas nama \"" << Q.P[Q.head].nama << "\"..." << endl; | |
for (int i = Q.head; i < Q.tail; i++) | |
Q.P[i] = Q.P[i + 1]; | |
Q.tail--; | |
} | |
} | |
int main() { | |
P.tail = 2; | |
//P.K[0] = { "Struk", 1,5000 }; | |
//P.K[1] = { "Sakit Kepala", 1,2000 }; | |
//initial data queue keluhan | |
P.K[0].nama = "Struk"; | |
P.K[0].stok_obat = 1; | |
P.K[0].harga_obat = 5000; | |
P.K[1].nama = "Sakit Kepala"; | |
P.K[1].stok_obat = 1; | |
P.K[1].harga_obat = 2000; | |
int choose; | |
do | |
{ | |
system("cls"); | |
cout << "=====================================================================\n" | |
<< "| Sistem Informasi |\n" | |
<< "| Rumah Sakit \"Kasih Ibu\" |\n" | |
<< "=====================================================================\n"; | |
printDaftarPasien(); | |
cout << "\n\n----------------------\n" | |
<< " Menu Pilihan\n" | |
<< "----------------------\n" | |
<< " [1] Pasien Masuk \n" | |
<< " [2] Pasien Keluar\n" | |
<< " [3] Daftar Keluhan \n" | |
<< " [4] Keluar \n\n" | |
<< "----------------------\n" | |
<< "Masukkan pilihan : "; cin >> choose; | |
switch (choose) | |
{ | |
case 1: | |
pasienMasuk(); | |
break; | |
case 2: | |
pasienKeluar(); | |
break; | |
case 3: | |
stokObat(); | |
break; | |
default: | |
cout << "Pilihan tidak tersedia"; | |
break; | |
} | |
getch(); | |
} while (choose != 4); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks akhi, sangat membantu :)