A. TUJUAN 1. Menggunakan struktur data quee untuk pembuatan sistem informasi Unlock Access to An 2. Mempemudah dan mempersingkat pekerjaan dari pegawai rumah sakit.
Exclusive 30 Day Trial
3. Mempermudah calon pasien untuk check ini di rumah sakit.
B. DASAR TEORI
Queue pada Queue pada Struktur Struktur Data atau antrian Jurnal adalahTree sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan Access Now penghapusan(pengambilan penghapusan(pengamb ilan elemen) dilakukan le wat ujung lain (disebut dengan lewat de ngan sisi depan
atau front).
No thanks, I don't want my exclusive trial
Pada Stack atau tumpukan menggunakan prinsip“Masuk terakhir keluar pertama”atau LIFO (Last In First Out), Maka pada Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out). Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll. Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak. Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).
Karakteristik Queue Queue Atau Antrian : 1. Elemen Antrian 2. Front (Elemen Terdepan Antrian) 3. Tail (Elemen Terakhir) 4. Jumlah Elemen Pada Antrian 5. Status Antrian
Operasi Pada Queue Pada Queue Atau Antrian 1. Tambah(Menambah Item Pada Belakang Antrian) 2. Hapus (Menghapus Elemen Depan Dari Antrian) 3. Kosong( Mendeteksi Apakah Pada Antrian Mengandung Elemen Atau Tidak)
Operasi-operasi Queue : 1. Create() Unlock Access to An Untuk menciptakan dan menginisialisasi Queue
Exclusive 30 2. IsEmpty() Day Trial Untuk memeriksa apakah Antrian sudah penuh atau belum Dengan cara membuat Head dan Tail = -1
Jurnal Tree Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen Access Now pertama dalam antrian) yang tidak akan berubah-ubah No terjadi thanks, I don't want penambahan my exclusive trialelemen Antrian kebelakang, Pergerakan pada Antrian dengan
yaitu menggunakan nilai Tail.
3. IsFull Untuk mengecek apakah Antrian sudah penuh atau belum Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh
4. Enqueue Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu
5. Dequeue() Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 Penggeseran dilakukan dengan menggunakan looping.
6. Clear() Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca
7. Tampil() Untuk menampilkan nilai-nilai elemen Antrian Unlock Access to An Menggunakan looping dari head s/d tail
Exclusive 30 Kondisi antrian yang menjadi perhatian adalah ; Day Trial 1. Penuh Jurnal Tree Bila elemen pada antrian mencapai kapasitas maksimum antrian. Pada kondisi ini, tidak
mungkin dilakukan penambahan ke antrian. Penambahan elemen menyebabkan kondisi Access Now kesalahan Overflow. 2. Kosong
No thanks, I don't want my exclusive trial
Bila tidak ada elemen pada antrian. Pada kondisi ini, tidak mngkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan Overflow.
C. PEMBAHASAN
Unlock Access to An
Source Code #include #include //_getch()
Exclusive 30 Day Trial Jurnal Tree
#include #include //setw()
Access Now
#include #define max 20
No thanks, I don't want my exclusive trial
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; Unlock Access to An
Exclusive 30 bool isFull(bool pasien) { Day Trial return pasien ? Q.tail == max : P.tail == max; //cek queue full, argumen (true) pasien, (false) keluhan
Jurnal Tree
}
Access Now //cek queue empty, argumen (true) pasien, (false) keluhan
bool isEmpty(bool pasien) { No thanks, I don't want my exclusive trial 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(); Unlock Access to An //do {
Exclusive 30 //getline(cin, nama); Day Trial //} while (nama == "");//loop sampai bisa menginputkan data // input nama dengan spasi
Jurnal Tree
P.K[P.tail].nama = nama;
Access Now cout << "Jumlah Stok Obat : "; cin >> P.K[P.tail].stok_obat; No :thanks, don'tP.K[P.tail].harga_obat; want my exclusive trial cout << "Harga "; cinI >>
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--; Unlock Access to An
}
Exclusive 30 Day Trial //Menampilkan stok obat untuk setiap keluhan }
Jurnal Tree
void printstokObat() { if (isEmpty(false)) {
Access Now //jika queue_keluhan kosong, print No thanks, I don't want my exclusive trial 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");
Unlock Access to An
Exclusive 30 cout << "----------------------\n" Day Trial << " Menu Pilihan\n"
printstokObat();
Jurnal Tree
<< "----------------------\n"
<< " [1] Tambah Keluhan \n" Access Now << " [2] Hapus Keluhan\n" No Tambah thanks, I don't want my exclusive trial << " [3] 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); Unlock Access to An
}
//Menampilkan daftar pasien void printDaftarPasien() { if (isEmpty(true)) {
}
Exclusive 30 Day Trial Jurnal Tree
cout << "KET : Belum ada pasien yang dirawat!"; Access Now No thanks, I don't want my exclusive trial
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 {
Unlock Access to An
Exclusive 30 cout << "INPUT DATA DIRI PASIEN" << endl; Day Trial cout << "-------------------------" << endl; system("cls");
Jurnal Tree
cout << "Nama Lengkap\t\t: ";
string nama= getLine();
Access Now
No thanks, I don't want my exclusive trial 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); Unlock Access to An cout << "Konsultasi ? (Y/N)\t: "; cin >> konsultasi;
Exclusive 30 Day Trial cout << "Total biaya\t\t: Rp. " << Q.P[Q.tail].biaya << endl; Q.P[Q.tail].biaya += (tolower(konsultasi) == 'y' ? 1500 : 0);
Jurnal Tree
cout << "Uang dibayarkan\t\t: Rp. "; cin >> dibayar; Access Now if ((dibayar - Q.P[Q.tail].biaya) < 0) { Nocout thanks, << I don't "Kekurangan\t\t: want my exclusive trial
Rp.
"
<<
(dibayar
-
dibayar
-
Q.P[Q.tail].biaya)*-1; } else { cout
<<
"Uang
Kembali\t\t:
Rp.
"
<<
Q.P[Q.tail].biaya; }
getch(); system("cls"); cout <<"|============================================================ =========|\n" << "| PANDANG\"
Rumah Sakit \"POLITEKNIK NEGERI UJUNG
|\n" <<
"|============================================================== =======|\n" << "|
BUKTI PEMBAYARAN
|\n" << "|
----------------
<< "|
|\n"
<< "| Telah Diterima Dari << "| Nama Pasien
|\n"
|\n"
: " << setw(48) << left << nama << "
|\n" << "| Alamat : " << setw(48) << left << alamat << " Unlock Access to An
|\n"
<< setw(48) << left << P.K[pilihan Exclusive: " 30 Day"| TrialUntuk << Pembayaran : << "| Keluhan
1].nama << " |\n"
Jurnal Tree
|\n"
DOKTER SPESIALIS
<< (tolower(konsultasi) == 'y' ? "| KONSULTASI Access Now : Rp. 1500 |\n" : "") No<< thanks, I don't want my exclusive (tolower(periksa) == 'y'trial ? "|
: Rp.
1000
PERIKSA KESEHATAN
|\n" : "") << "| RESEP OBAT
right << P.K[pilihan - 1].harga_obat << "
: Rp. " << setw(27) <<
|\n"
<< "|
------------------------ + |\n"
<< "| Total Pembayaran : right << Q.P[Q.tail].biaya << "
" << setw(24) <<
|\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."
Daftar Keluhan." << endl; } else {
<< "\n\tSilakan tambahkan keluhan yang dimaksud di Unlock Access to An
Exclusive 30 Day Trial Jurnal Tree
cout << "\n\tStok obat " << P.K[pilihan - 1].nama << " telah habis. \n"
Access Now << "\tSilahkan tambahkan stok obat untuk keluhan " << No thanks, I don't want my exclusive trial
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] = { "Stroke", 1,5000 }; //P.K[1] = { "Sakit Kepala", 1,2000 }; //P.K[2] = { "Gatal-Gatal", 1,3000 }; //initial data queue keluhan
P.K[0].nama = "Stroke"; P.K[0].stok_obat = 1; P.K[0].harga_obat = 5000;
Unlock Access to An
Exclusive 30 P.K[1].stok_obat = 1; Day Trial P.K[1].harga_obat = 2000; P.K[1].nama = "Sakit Kepala";
P.K[2].nama = "Gatal-Gatal"; P.K[2].stok_obat = 1; P.K[2].harga_obat = 3000;
Jurnal Tree
Access Now
No thanks, I don't want my exclusive trial
int choose; do { system("cls"); cout
<<
"=============================================================== ================\n" << "|
SISTEM INFORMASI
<< "|
Rumah Sakit \"POLITEKNIK NEGERI UJUNG
|\n"
PANDANG\"
|\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; Unlock Access to An switch (choose)
Exclusive 30 case 1: Day Trial pasienMasuk(); {
break; case 2: pasienKeluar();
Jurnal Tree
Access Now
break;No thanks, I don't want my exclusive trial case 3: stokObat(); break; default: cout << "Pilihan tidak tersedia"; break; } getch(); } while (choose != 4); return 0; }
D. KESIMPULAN Dengan menggunakan struktur data yang tepat dalam membantu kegiatan