Skip to content

Instantly share code, notes, and snippets.

@rmsubekti
Created December 21, 2016 01:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rmsubekti/be078fbeefad3346ea8f5924685a1437 to your computer and use it in GitHub Desktop.
Save rmsubekti/be078fbeefad3346ea8f5924685a1437 to your computer and use it in GitHub Desktop.
#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;
}
@failamir
Copy link

thanks akhi, sangat membantu :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment