Anda di halaman 1dari 42

algoritma rentalMobil

uses
crt

const
max = 100
type
dataMobil = record
plat, jenis : string[255]
tersedia : boolean
hargaSewa : real
endrecord

dataPelanggan = record
id, nama, alamat, noTlp : string[255]
endrecord

dataPenyewaan = record
nota, tglSewa : string[255]
mobil : dataMobil
pelanggan : dataPelanggan
lunas : boolean
endrecord

dataPengembalian = record
penyewaan : dataPenyewaan
tanggalKembali : string[255]
endrecord

arrMobil = array [1..max] of dataMobil


arrPelanggan = array [1..max] of dataPelanggan
arrPenyewaan = array [1..max] of dataPenyewaan
arrPengembalian = array [1..max] of dataPengembalian

dbPelanggan = file of dataPelanggan


dbMobil = file of dataMobil
dbPenyewaan = file of dataPenyewaan
dbPengembalian = file of dataPengembalian

kamus
mobil : arrMobil
pelanggan : arrPelanggan
penyewaan : arrPenyewaan
pengembalian : arrPengembalian
i, j, maks, jmlMobil, jmlPelanggan, jmlPenyewaan, jmlPengembalian,
pilihMenu, salah : integer
pilih, proses : char
ketemu : boolean

Fpelanggan : dbPelanggan
Fmobil : dbMobil
Fpenyewaan : dbPenyewaan
Fpengembalian : dbPengembalian

procedure header
algoritma
output('Baraya Travel - Kota Bandung, Jawa Barat')
end

procedure menu (kamus pilihMenu : integer)


algoritma
output('======================================')
output('| Menu Utama |')
output('======================================')
output('| |')
output('| 1. Data Mobil |')
output('| 2. Data Pelanggan |')
output('| 3. Data Penyewaan |')
output('| 4. Data Pengembalian |')
output('| 0. Simpan Data & Keluar |')
output('| |')
output('======================================')
output('| Pilihan Anda : |')
output('======================================')
input(pilihMenu)

while (pilihMenu < 0)or(pilihMenu > 4) do


output('Salah Memilih Menu, Ulangi!')
input(pilihMenu)
endwhile
endprocedure

{validasi tanggal}
function validasiTanggal(tanggal : string): boolean
kamus
benar : boolean
tg,bl : integer

algoritma
benar -> false
if ((length(tanggal) <> 10) or (copy(tanggal,3,1) <> '/') or
(copy(tanggal,6,1) <> '/')) then
benar -> false
end
else
val(copy(tanggal,1,2),tg,salah)
val(copy(tanggal,4,2),bl,salah)
if ((tg > 30) or (bl > 12)) then
benar -> false
end
else
benar -> true
endif
endif
validasiTanggal -> benar
endfunction

function validasiPelanggan(id : string; pelanggan : arrPelanggan;


jmlPelanggan : integer):boolean
kamus
validasi : boolean
algoritma
validasi-> false
for i-> 1 to jmlPelanggan do
if(id = pelanggan[i].id)then
validasi-> true
endif
endfor
validasiPelanggan -> validasi
endfunction

function validasiUbahPelanggan(id : string; pelanggan : arrPelanggan;


jmlPelanggan,index : integer):boolean
kamus
validasi : boolean

algoritma
validasi-> false
for i-> 1 to jmlPelanggan do
if((id = pelanggan[i].id) and (i <> index))then
validasi-> true
endif
endfor
validasiUbahPelanggan -> validasi
endfunction

function validasiPlat(plat : string; mobil : arrMobil; jmlMobil :


integer):boolean
kamus
validasi : boolean
algoritma
validasi -> false
for i->1 to jmlMobil do
if (plat = mobil[i].plat) then
validasi->true
endif
endfor
validasiPlat -> validasi
endfunction

function validasiUbahPlat(plat : string; mobil : arrMobil; jmlMobil,index


: integer):boolean
kamus
validasi : boolean
algoritma
validasi -> false
for i->1 to jmlMobil do
if ((plat = mobil[i].plat) and (i <> index)) then
validasi->true
endif
endfor
validasiUbahPlat -> validasi
endfunction

function validasiNota(nota : string; penyewaan : arrPenyewaan;


pengembalian : arrPengembalian;
jmlPenyewaan,jmlPengembalian:integer):boolean
kamus
validasi : boolean
algoritma
validasi-> false
for i -> 1 to jmlPenyewaan do
if (penyewaan[i].nota = nota) then
validasi -> true
endif
endfor

for j -> 1 to jmlPengembalian do


if (pengembalian[i].penyewaan.nota = nota) then
validasi -> true
endif
endfor
validasiNota -> validasi
endfunction

function validasiUbahNotaPenyewaan(nota : string; penyewaan :


arrPenyewaan; pengembalian : arrPengembalian;
jmlPenyewaan,jmlPengembalian,index:integer):boolean
kamus
validasi : boolean
algoritma
validasi-> false
for i -> 1 to jmlPenyewaan do
if ((penyewaan[i].nota = nota) and (index <> i)) then
validasi -> true
endif
endfor

for j -> 1 to jmlPengembalian do


if (pengembalian[i].penyewaan.nota = nota) then
validasi -> true
endif
endfor
validasiUbahNotaPenyewaan -> validasi
endfunction

function validasiUbahNotaPengembalian(nota : string; penyewaan :


arrPenyewaan; pengembalian :
arrPengembalianjmlPenyewaan,jmlPengembalian,index:integer):boolean
kamus
validasi : boolean
algoritma
validasi-> false
for i -> 1 to jmlPenyewaan do
if (penyewaan[i].nota = nota) then
validasi -> true
endif
endfor

for j -> 1 to jmlPengembalian do


if ((pengembalian[i].penyewaan.nota = nota) and (index <> i)) then
validasi -> true
endif
endfor

validasiUbahNotaPengembalian -> validasi


end

function hitungSelisihHari(tanggal_kembali, tanggal_sewa : string):


integer
kamus
tg1,tg2,bl1,bl2,th1,th2,waktu_kembali,waktu_sewa,selisih : integer

algoritma

val(copy(tanggal_kembali,1,2),tg1,salah)
val(copy(tanggal_sewa,1,2),tg2,salah)
val(copy(tanggal_kembali,4,2),bl1,salah)
val(copy(tanggal_sewa,4,2),bl2,salah)
val(copy(tanggal_kembali,7,11),th1,salah)
val(copy(tanggal_sewa,7,11),th2,salah)

waktu_kembali ->(tg1) + (bl1*30) + (th1*365)


waktu_sewa ->(tg2) + (bl2*30) + (th2*365)

selisih -> waktu_kembali - waktu_sewa

hitungSelisihHari -> selisih


end

function getIndexPenyewaan(nota : string; penyewaan : arrPenyewaan;


jmlPenyewaan : integer) : integer
kamus
index : integer
algoritma
index -> 0
for i-> 0 to jmlPenyewaan do
if (nota = penyewaan[i].nota) then
algoritma
index -> i
endif
endfor
getIndexPenyewaan -> index
endfunction

function tersediaMobil(plat : string; mobil : arrMobil; jmlMobil :


integer) : boolean
kamus
tersedia : boolean
algoritma
tersedia -> true
for i->0 to jmlMobil do
if(plat = mobil[i].plat)then
tersedia -> mobil[i].tersedia
endif
endfor
tersediaMobil -> tersedia
endfunction

function getIndexPelanggan(id : string; pelanggan : arrPelanggan;


jmlPelanggan : integer):integer

kamus
index : integer
algoritma

index -> 0
for i->1 to jmlPelanggan do
if (id = pelanggan[i].id) then
index -> i
endif
endfor

getIndexPelanggan -> index


endfunction

function getIndexMobil(plat : string; mobil : arrMobil; jmlMobil :


integer):integer

kamus
index : integer
algoritma

index -> 0
for i->1 to jmlMobil do
if (plat = mobil[i].plat) then
index -> i
endif
endfor

getIndexMobil -> index


endfunction

{Mobil}
procedure bacaMobil(kamus mobil : arrMobilkamus jmlMobil : integer)
kamus
temp : dataMobil
algoritma
assign(Fmobil,'datamobil.txt')
{$I-}
reset(fmobil)
{$I+}
if IOResult = 0 then
jmlMobil -> 0
while not eof(fmobil) do
input(fmobil,temp)
if (jmlMobil <= max) then
jmlMobil -> jmlMobil+1
mobil[jmlMobil] -> temp
endif
endwhile
close(Fmobil)
endif
endprocedure

procedure simpanMobil(mobil : arrMobil; jmlMobil : integer)

algoritma
assign(Fmobil,'datamobil.txt')
Rewrite(Fmobil)
for i-> 1 to jmlMobil do
output(Fmobil,mobil[i])
endfor
close(Fmobil)
endprocedure
procedure tambahDataMobil(kamus mobil : arrMobil kamus jmlMobil :
integer)
kamus
plat,jenis : string
harga : real
algoritma
repeat
output('Tambah Data Mobil')
output('=================')
jmlMobil -> jmlMobil + 1
output ('Masukan Data Ke-',jmlMobil)
output ('-----------------')
output ('Masukan Plat Nomor Mobil : *D 1234
XYZ')
output ('Masukan Jenis Mobil : ')
output ('Masukan Harga Sewa Mobil : Rp. /hari')

input(plat)

while ((length(plat) > 10) or


(validasiPlat(plat,mobil,jmlMobil))) do
if (length(plat) > 10)then
output('Maksimum Hanya 10 Digit !!!')
endif
else if(validasiPlat(plat,mobil,jmlMobil))then
output('Plat Mobil Sudah Ada')
endif
output('*D 1234 VAG')
input(plat)
endwhile

input(jenis)
input(harga)

mobil[jmlMobil].plat->plat
mobil[jmlMobil].jenis->jenis
mobil[jmlMobil].hargaSewa->harga
mobil[jmlMobil].tersedia -> true
output('Masukan Data Lagi (y/t)? ')
input(pilih)
until (pilih <> 'y')
endprocedure

procedure tampilDataMobil(mobil : arrMobil; jmlMobil : integer)


algoritma
output('Tampil Data Mobil')
output('=================')

output('=================================================================
==============')
output('| No | Plat Nomor | Jenis Mobil | Harga Sewa / Hari |
Tersedia |')

output('=================================================================
==============')

for i -> 1 to jmlMobil do


output('| | | | Rp.
| |')
output(mobil[i].plat)
output(mobil[i].jenis)
output(mobil[i].hargaSewa:0:2)

if(mobil[i].tersedia = true) then


output('Ya')
end
else
output('Tidak')
endif
endfor

output('=================================================================
==============')

endprocedure

procedure ubahDataMobil(kamus mobil : arrMobil jmlMobil : integer)


kamus
ubah : integer
plat,jenis : string
harga : real
algoritma
tampilDataMobil(mobil,jmlMobil)
output('Nomor data yang akan diubah : ')
input(ubah)
while (ubah < 1) or (ubah > jmlMobil) do
textcolor(12) gotoxy(1,jmlMobil+13)
output('Tidak ada data ditemukan di nomor tersebut!')
input(ubah)
endwhile

output('Data yang akan diubah yaitu jenis mobil ')


output(mobil[ubah].jenis)
output('Anda yakin data tersebut akan diubah (y/t) : ')
input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
textcolor(12)
output('Pilihan Salah <Enter> untuk mengulangi!')
input(pilih)
endwhile

if (upcase(pilih)= 'Y') then


output('Ubah Data Mobil')
output('===============')
output('Mengubah Data Ke-',ubah)
output('------------------')
output('Masukan Plat Nomor Mobil : *D 1234 VAG')
output('Masukan Jenis Mobil : ')
output('Masukan Harga Sewa Mobil : Rp. /hari')

input(plat)

while ((length(plat) > 10) or


(validasiUbahPlat(plat,mobil,jmlMobil,ubah))) do
if (length(plat) > 10)then
gotoxy(55,7) output('Maksimum Hanya 10 Digit !!!')
end
else if(validasiUbahPlat(plat,mobil,jmlMobil,ubah))then
gotoxy(55,7) output('Plat Mobil Sudah Ada')
endif
input(plat)
endwhile

input(jenis)
input(harga)

mobil[ubah].plat -> plat


mobil[ubah].jenis -> jenis
mobil[ubah].hargaSewa -> harga

output ('Data ke-',ubah,' Telah Diubah')


end
else if (upcase(pilih)= 'T') then
menu(pilihMenu)
endif
endprocedure

procedure urutPlat (kamus mobil : arrMobil; jmlMobil : integer)


kamus
temp : dataMobil
algoritma
for i -> 1 to (jmlMobil-1) do
maks -> 1
for j -> 2 to (jmlMobil+1)-i do
if (mobil[j].plat) > (mobil[maks].plat)
then
maks -> j
endif
endfor
temp -> mobil[j]
mobil[j] -> mobil[maks]
mobil[maks] -> temp
endfor
endprocedure

procedure urutJenis (kamus mobil : arrMobil; jmlMobil : integer)


kamus
temp : dataMobil
algoritma
for i -> 1 to (jmlMobil-1) do
maks -> 1
for j -> 2 to (jmlMobil+1)-i do
if (mobil[j].jenis) > (mobil[maks].jenis)
then
maks -> j
endif
endfor
temp -> mobil[j]
mobil[j] -> mobil[maks]
mobil[maks] -> temp
endfor
endprocedure
procedure urutHargaSewa (kamus mobil : arrMobil; jmlMobil : integer)
kamus
temp : dataMobil
algoritma
for i -> 1 to (jmlMobil-1) do
maks -> 1
for j -> 2 to (jmlMobil+1)-i do
if (mobil[j].hargaSewa) > (mobil[maks].hargaSewa)
then
maks -> j
endif
endfor
temp -> mobil[j]
mobil[j] -> mobil[maks]
mobil[maks] -> temp
endfor
endprocedure

procedure cariPlat(mobil : arrMobil; jmlMobil : integer)


kamus
ia,ib,j : integer
plat_cari : string
algoritma

output('Cari Data Mobil Berdasarkan Plat Nomor')


output('======================================')
output('Masukkan Plat Nomor Yang di Cari : ') input(plat_cari)
ketemu -> false
ia -> 1
ib -> jmlMobil
while (not ketemu) and (ia <= ib) do
j -> ( ia + ib) div 2
if(mobil[j].plat = plat_cari)
then
ketemu -> true
else
if(mobil[j].plat < plat_cari)
then
ia -> j + 1
else
ib -> j - 1
endif
endwhile
if(ketemu) then
output(' Hasil Cari Data Berdasarkan Plat Nomor')
output('==============================================')
output'Plat Nomor yang Dicari : ',plat_cari)
output'Jenis Mobil : ',mobil[j].jenis)
output('Harga Sewa Mobil : Rp.
',mobil[j].hargaSewa:0:2)
end
else
output(' Plat Nomor ',plat_cari,' Tidak Ditemukan !!!')
endif
endprocedure

procedure cariJenis(mobil : arrMobil; jmlMobil : integer)


kamus
k,banyak : integer
jenis_cari,datajenis : string

algoritma
output('Cari Data Mobil Berdasarkan Jenis')
output('=================================')
output('Masukkan Jenis Mobil Yang di Cari : ') input(jenis_cari)
ketemu -> false
banyak -> 0
for i -> 1 to jmlMobil do
datajenis -> copy(mobil[i].jenis,1,length(jenis_cari))
if upcase(jenis_cari) = upcase(datajenis)
then
ketemu -> true
banyak -> banyak + 1
endif
endfor

if(ketemu) then
output('Hasil Cari Berdasarkan Jenis Mobil')
output('==================================')

output('=================================================================
==============')
output('| No | Plat Nomor | Jenis Mobil | Harga Sewa / Hari
| Tersedia |')

output('=================================================================
==============')
k->1
for j -> 1 to jmlMobil do
datajenis -> copy(mobil[j].jenis,1,length(jenis_cari))
if (upcase(jenis_cari) = upcase(datajenis)) then

output(mobil[j].plat)
output(mobil[j].jenis)
output(mobil[j].hargaSewa:0:2)

if(mobil[j].tersedia = true) then


gotoxy(69,k+7) output('Ya')
end
else
gotoxy(69,k+7) output('Tidak')
end
k->k+1
endif
endfor

output('=================================================================
==============')
end
else
output('Mobil Jenis ',jenis_cari,' Tidak Ditemukan !!!')
endif
endprocedure

procedure cariHargaSewa(mobil : arrMobil; jmlMobil : integer)


kamus
k,atas,bawah : longint
banyak : integer
algoritma
output('Cari Data Mobil Berdasarkan Harga Sewa')
output('======================================')
output(' Masukan Jenjang Harga')
output('=========================')
output('Mulai dari : Rp. ')
output('Hingga : Rp. ')

input(atas)
input(bawah)

banyak->0
for i -> 1 to jmlMobil do
if((mobil[i].hargaSewa >= atas) and (mobil[i].hargaSewa <=
bawah))
then
ketemu -> true
banyak -> banyak + 1
endif
endfor

if(ketemu)
then
output('Hasil Cari Data Berdasarkan Harga Sewa')
output('======================================')

output('=================================================================
==============')
output('| No | Plat Nomor | Jenis Mobil | Harga Sewa /
Hari | Tersedia |')

output('=================================================================
==============')
k->1
for j -> 1 to jmlMobil do
if((mobil[j].hargaSewa >= atas) and (mobil[j].hargaSewa <=
bawah))
then
output('| | | | Rp.
| |')
output(j)
output(mobil[j].plat)
output(mobil[j].jenis)
output(mobil[j].hargaSewa:0:2)

if(mobil[j].tersedia = true) then


output('Ya')
end
else
output('Tidak')
endif
k->k+1
endif
endfor
output('=================================================================
==============')
end
else
output('Harga Sewa antara Rp. ',atas,' hingga Rp. ',bawah,'
Tidak Ditemukan !!!')
endif
endprocedure

procedure menuCariDataMobil
algoritma

output('======================================')
output('| Pencarian Data Mobil |')
output('======================================')
output('| |')
output('| 1. Cari Berdasarkan Plat Nomor |')
output('| 2. Cari Berdasarkan Jenis Mobil |')
output('| 3. Cari Berdasarkan Harga Sewa |')
output('| 0. Kembali Ke Menu Utama |')
output('| |')
output('======================================')
output('| Pilihan Anda : |')
output('======================================')
input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 3) do

output('Salah Memilih Menu, Ulangi!')


input(pilihMenu)
endwhile
case (pilihMenu) of
1 : algoritma
urutPlat(mobil,jmlMobil)
cariPlat(mobil,jmlMobil)
input
2 : algoritma
urutJenis(mobil,jmlMobil)
cariJenis(mobil,jmlMobil)
input
3 : algoritma
urutHargaSewa(mobil,jmlMobil)
cariHargaSewa(mobil,jmlMobil)
input
0 : menu(pilihMenu)
endcase
endprocedure

procedure hapusDataMobil(mobil : arrMobil; jmlMobil : integer)


kamus
hapus : integer
algoritma
tampilDataMobil(mobil,jmlMobil)
output('Nomor data yang akan dihapus : ')
input(hapus)
while (hapus < 1) or (hapus > jmlMobil) do
output('Tidak ada data ditemukan di nomor data tersebut!')
input(hapus)
endwhile
output('Data yang akan dihapus yaitu jenis mobil ')
output(mobil[hapus].jenis)
output('Apakah Anda Yakin Data Tersebut Dihapus ? (y/t) : ')

input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
output('Pilihan Salah <Enter> Untuk Mengulangi !!!')
input(pilih)
endwhile

if upcase(pilih)= 'Y' then


for i-> hapus to jmlMobil-1 do
mobil[i]->mobil[i+1]
jmlMobil -> jmlMobil - 1
clrscr
gotoxy(28,12) clreol
gotoxy(28,12) output ('Data ke ',hapus,' Telah Dihapus')
input
endif
else if (upcase(pilih)= 'T') then
menu(pilihMenu)
endif
endprocedure

procedure menuDataMobil
algoritma
output('======================================')
output('| Data Mobil |')
output('======================================')
output('| |')
output('| 1. Tambah Data Mobil |')
output('| 2. Tampil Data Mobil |')
output('| 3. Ubah Data Mobil |')
output('| 4. Cari Data Mobil |')
output('| 5. Hapus Data Mobil |')
output('| 0. Kembali |')
output('| |')
output('======================================')
output('| Pilihan Anda : |')
output('======================================')
input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 5) do
output('Salah Memilih Menu, Ulangi!')
input(pilihMenu)
endwhile
case (pilihMenu) of
1 : algoritma
tambahDataMobil(mobil,jmlMobil)

2 : algoritma
tampilDataMobil(mobil,jmlMobil)

3 : algoritma
ubahDataMobil(mobil,jmlMobil)

4 : algoritma
menuCariDataMobil

5 : algoritma
hapusDataMobil(mobil,jmlMobil)

0 : pilihMenu->1
endcase

endprocedure

{pelanggan}
procedure bacaPelanggan(pelanggan : arrPelanggan ; jmlPelanggan :
integer)
kamus
temp : dataPelanggan
algoritma
assign(Fpelanggan,'datapelanggan.txt')

reset(Fpelanggan)

if IOResult = 0 then

jmlPelanggan -> 0
while not eof(Fpelanggan) do
input(Fpelanggan,temp)
if (jmlPelanggan <= max) then
jmlPelanggan-> jmlPelanggan+1
pelanggan[jmlPelanggan] -> temp
endif
endwhile
close(Fpelanggan)
endif
endprocedure

procedure simpanPelanggan(pelanggan : arrPelangganl; jmlPelanggan :


integer)

algoritma
assign(Fpelanggan,'datapelanggan.txt')
Rewrite(Fpelanggan)
for i-> 1 to jmlPelanggan do
output(Fpelanggan,pelanggan[i])
endfor
close(Fpelanggan)
endprocedure

procedure tambahDataPelanggan( pelanggan : arrPelanggan ; jmlPelanggan :


integer)
kamus
id,nama,alamat,telp : string
algoritma
repeat
output('Tambah Data Pelanggan')
output('=====================')
jmlPelanggan -> jmlPelanggan + 1
output ('Masukan Data Ke-',jmlPelanggan)
output ('-----------------')
output ('Masukan ID Pelanggan : ')
output ('Masukkan Nama Pelanggan : ')
output ('Masukkan Alamat Pelanggan : ')
output ('Masukkan No Telp Pelanggan : ')

input(id)

while ((length(id) > 4) or


(validasiPelanggan(id,pelanggan,jmlPelanggan))) do
if (length(id) > 4) then

gotoxy(47,7) output('Maksimum Hanya 4 Digit !!!')


end
else if(validasiPelanggan(id,pelanggan,jmlPelanggan))then

gotoxy(47,7) output('ID tersebut sudah ada')


endif

input(id)
endwhile

input(nama)
input(alamat)
input(telp)

pelanggan[jmlPelanggan].id->id
pelanggan[jmlPelanggan].nama->nama
pelanggan[jmlPelanggan].alamat->alamat
pelanggan[jmlPelanggan].noTlp->telp

output('Masukan Data Lagi (y/t)? ') input(pilih)


until (pilih <> 'y')

endprocedure

procedure tampilDataPelanggan(pelanggan : arrPelanggan; jmlPelanggan :


integer)
algoritma
output('Tampil Data Pelanggan')
output('=====================')

output('=================================================================
===================')
output('| No | ID | Nama | Alamat |
No Telp. |')

output('=================================================================
===================')

for i -> 1 to jmlPelanggan do


output('| | | |
| |')
output(i)
output(pelanggan[i].id)
output(pelanggan[i].nama)
output(pelanggan[i].alamat)
goutput(pelanggan[i].noTlp)
endfor
output('=================================================================
===============')
endprocedure

procedure ubahdataPelanggan( pelanggan : arrPelanggan; jmlPelanggan :


integer)
kamus
ubah : integer
id,nama,alamat,telp : string
algoritma
tampilDataPelanggan(pelanggan,jmlPelanggan)
gotoxy(1,jmlPelanggan+11) clreol
gotoxy(1,jmlPelanggan+11) output('Nomor data yang akan diubah : ')
input(ubah)
while (ubah < 1) or (ubah > jmlPelanggan) do

output('Tidak ada data ditemukan di nomor tersebut!')


input(ubah)
endwhile

output('Data yang akan diubah yaitu atas nama ')


output(pelanggan[ubah].nama)
output('Anda yakin data tersebut akan diubah (y/t) : ')
input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do

output('Pilihan Salah <Enter> untuk mengulangi!')


input(pilih)
endwhile

if (upcase(pilih)= 'Y') then


output('Ubah Data Pelanggan')
output('===================')
output ('Mengubah Data Ke-',ubah)
output ('------------------')
output ('Masukan ID Pelanggan : ')
output ('Masukkan Nama Pelanggan : ')
output ('Masukkan Alamat Pelanggan : ')
output ('Masukkan No Telp Pelanggan : ')

input(id)
while ((length(id) > 4) or
(validasiUbahPelanggan(id,pelanggan,jmlPelanggan,ubah))) do

if (length(id) > 4) then


output('ID Pelanggan Maksimum Hanya 4 Digit !!!')
end
else
if(validasiUbahPelanggan(id,pelanggan,jmlPelanggan,ubah))then
output('ID Pelanggan tersebut sudah tersedia')
endif
input(id)
endwhile

input(nama)
input(alamat)
input(telp)
pelanggan[ubah].id->id
pelanggan[ubah].nama->nama
pelanggan[ubah].alamat->alamat
pelanggan[ubah].noTlp->telp

output ('Data ke-',ubah,' Telah Diubah')

end
else if (upcase(pilih)= 'T') then
menu(pilihMenu)
endif
endprocedure

procedure urutIdPelanggan(kamus pelanggan : arrPelanggan; jmlPelanggan :


integer)
kamus
temp : dataPelanggan
algoritma
for i -> 1 to (jmlPelanggan-1) do

maks -> 1
for j -> 2 to (jmlPelanggan+1)-i do

if (pelanggan[j].id) > (pelanggan[maks].id)


then
maks -> j
endfor
temp -> pelanggan[j]
pelanggan[j] -> pelanggan[maks]
pelanggan[maks] -> temp
endfor
endprocedure

procedure urutNama (kamus pelanggan : arrPelanggan; jmlPelanggan :


integer)
kamus
temp : dataPelanggan
algoritma
for i -> 1 to (jmlPelanggan-1) do
maks -> 1
for j -> 2 to (jmlPelanggan+1)-i do

if (pelanggan[j].nama) > (pelanggan[maks].nama)


then
maks -> j
endfor
temp -> pelanggan[j]
pelanggan[j] -> pelanggan[maks]
pelanggan[maks] -> temp
endfor
endprocedure

procedure urutAlamat (kamus pelanggan : arrPelanggan; jmlPelanggan :


integer)
kamus
temp : dataPelanggan
algoritma
for i -> 1 to (jmlPelanggan-1) do
maks -> 1
for j -> 2 to (jmlPelanggan+1)-i do
if (pelanggan[j].alamat) > (pelanggan[maks].alamat)
then
maks -> j
endif
endfor
temp -> pelanggan[j]
pelanggan[j] -> pelanggan[maks]
pelanggan[maks] -> temp
endfor
endprocedure

procedure cariIdPelanggan(pelanggan : arrPelanggan jmlPelanggan :


integer)
kamus
ia,ib,j : integer
id_cari : string
algoritma
output('Cari Data Pelanggan Berdasarkan ID')
output('==================================')
output('Masukkan ID Pelanggan Yang di Cari : ') input(id_cari)
ketemu -> false
ia -> 1
ib -> jmlPelanggan
while (not ketemu) and (ia <= ib) do
algoritma
j -> ( ia + ib) div 2
if(pelanggan[j].id = id_cari)
then
ketemu -> true
else
if(pelanggan[j].id < id_cari)
then
ia -> j + 1
else
ib -> j - 1
endwhile
if(ketemu) then

output(' Hasil Cari Data Berdasarkan ID Pelanggan')


output('=====================================================')
output('ID Pelanggan yang Dicari : ',id_cari)
output('Nama Pelanggan : ',pelanggan[j].nama)
output('Alamat Pelanggan : ',pelanggan[j].alamat)
output('No Telp. Pelanggan : ',pelanggan[j].noTlp)
end
else
output(' ID Pelanggan ',id_cari,' Tidak Ditemukan !!!')
endif
endprocedure

procedure cariNamaPelanggan(pelanggan : arrPelanggan; jmlPelanggan :


integer)
kamus
k,banyak : integer
namaCari,datanama : string
algoritma
output('Cari Data Pelanggan Berdasarkan Nama')
output('===================================')
output('Masukkan Nama Yang di Cari : ') input(namaCari)
ketemu -> false
banyak -> 0
for i -> 1 to jmlPelanggan do
datanama -> copy(pelanggan[i].nama,1,length(namaCari))
if upcase(namaCari) = upcase(datanama)
then
ketemu -> true
banyak -> banyak + 1
endif
endfor

if(ketemu)
then
output('Hasil Cari Berdasarkan Nama Pelanggan')
output('=====================================')

output('=================================================================
===================')
output('| No | ID | Nama | Alamat
| No Telp. |')

output('=================================================================
===================')
k->1
for j -> 1 to jmlPelanggan do
datanama -> copy(pelanggan[j].nama,1,length(namaCari))
if (upcase(namaCari) = upcase(datanama))
then
output('| | | |
| |')
output(j)
output(pelanggan[j].id)
output(pelanggan[j].nama)
output(pelanggan[j].alamat)
output(pelanggan[j].noTlp)
k -> k+1
endif
endfor

output('=================================================================
===============')
end
else
algoritma
output('Pelanggan yang Bernama ',namaCari,' Tidak Ditemukan !!!')
endif
endprocedure

procedure cariAlamatPelanggan(pelanggan : arrPelanggan; jmlPelanggan :


integer)
kamus
k,banyak : integer
alamatCari,dt_alamat : string
algoritma
output('Cari Data Pelanggan Berdasarkan Alamat')
output('======================================')
output('Masukkan Alamat Yang di Cari : ') input(alamatCari)
ketemu -> false
banyak -> 0
for i -> 1 to jmlPelanggan do
dt_alamat -> copy(pelanggan[i].alamat,1,length(alamatCari))
if upcase(alamatCari) = upcase(dt_alamat)
then
ketemu -> true
banyak -> banyak + 1
endif
endfor

if(ketemu)
then
output('Hasil Cari Berdasarkan Alamat Pelanggan')
output('=======================================')

output('=================================================================
===================')
output('| No | ID | Nama | Alamat
| No Telp. |')

output('=================================================================
===================')
k -> 1
for j -> 1 to jmlPelanggan do
dt_alamat -> copy(pelanggan[j].alamat,1,length(alamatCari))
if (upcase(alamatCari) = upcase(dt_alamat))
then
gotoxy(1,k+7) output('| | | |
| |')
gotoxy(3,k+7) output(j)
gotoxy(9,k+7) output(pelanggan[j].id)
gotoxy(16,k+7) output(pelanggan[j].nama)
gotoxy(35,k+7) output(pelanggan[j].alamat)
gotoxy(61,k+7) output(pelanggan[j].noTlp)
k -> k + 1
endif
endfor

output('=================================================================
===============')
end
else
output('Pelanggan yang Beralamat di ',alamatCari,' Tidak Ditemukan
!!!')
endif
endprocedure

procedure menuCariDataPelanggan
algoritma

output('======================================')
gotoxy(21,9) output('| Pencarian Data Pelanggan |')
gotoxy(21,10) output('======================================')
gotoxy(21,11) output('| |')
gotoxy(21,12) output('| 1. Cari Berdasarkan ID |')
gotoxy(21,13) output('| 2. Cari Berdasarkan Nama |')
gotoxy(21,14) output('| 3. Cari Berdasarkan Alamat |')
gotoxy(21,15) output('| 0. Kembali Ke Menu Utama |')
gotoxy(21,16) output('| |')
gotoxy(21,17) output('======================================')
gotoxy(21,18) output('| Pilihan Anda : |')
gotoxy(21,19) output('======================================')
gotoxy(46,18) input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 3) do
output('Salah Memilih Menu, Ulangi!')
input(pilihMenu)
endwhile
case (pilihMenu) of
1 : algoritma
urutIdPelanggan(pelanggan,jmlPelanggan)
cariIdPelanggan(pelanggan,jmlPelanggan)
2 : algoritma
urutNama(pelanggan,jmlPelanggan)
cariNamaPelanggan(pelanggan,jmlPelanggan)
3 : algoritma
urutAlamat(pelanggan,jmlPelanggan)
cariAlamatPelanggan(pelanggan,jmlPelanggan)

0 : menu(pilihMenu)
endcase
endprocedure

procedure hapusDataPelanggan(kamus pelanggan : arrPelanggan kamus


jmlPelanggan : integer)
kamus
hapus : integer
algoritma
tampilDataPelanggan(pelanggan,jmlPelanggan)
output('Nomor data yang akan dihapus : ')
input(hapus)
while (hapus < 1) or (hapus > jmlPelanggan) do
output('Tidak ada data ditemukan di nomor tersebut!')
input(hapus)
endwhile
output('Data yang akan dihapus yaitu atas nama ')
output(pelanggan[hapus].nama)
output('Apakah Anda Yakin Data Tersebut Dihapus ? (y/t) : ')
input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
output('Pilihan Salah <Enter> Untuk Mengulangi !!!')
input(pilih)
endwhile

if upcase(pilih)= 'Y' then


for i-> hapus to jmlPelanggan-1 do
pelanggan[i]->pelanggan[i+1]
jmlPelanggan -> jmlPelanggan - 1
output ('Data ke ',hapus,' Telah Dihapus')
endif
endprocedure

procedure menuDataPelanggan
algoritma
output('======================================')
output('| Data Pelanggan |')
output('======================================')
output('| |')
output('| 1. Tambah Data Pelanggan |')
output('| 2. Tampil Data Pelanggan |')
output('| 3. Ubah Data Pelanggan |')
output('| 4. Cari Data Pelanggan |')
output('| 5. Hapus Data Pelanggan |')
output('| 0. Kembali |')
output('| |')
output('======================================')
output('| Pilihan Anda : |')
output('======================================')
input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 5) do
output('Salah Memilih Menu, Ulangi!')
input(pilihMenu)
endwhile
case (pilihMenu) of
1 : algoritma
tambahDataPelanggan(pelanggan,jmlPelanggan)

2 : algoritma
tampilDataPelanggan(pelanggan,jmlPelanggan)

3 : algoritma
ubahdataPelanggan(pelanggan,jmlPelanggan)

4 : algoritma
menuCariDataPelanggan

5 : algoritma
hapusDataPelanggan(pelanggan,jmlPelanggan)

0 : pilihMenu->1
endcase
endprocedure

{penyewaan}
procedure bacaPenyewaan(penyewaan : arrPenyewaan ;jmlPenyewaan : integer)
kamus
temp : dataPenyewaan
algoritma
assign(Fpenyewaan,'datapenyewaan.txt')
reset(Fpenyewaan)
if IOResult = 0 then
jmlPenyewaan -> 0
while not eof(Fpenyewaan) do
input(Fpenyewaan,temp)

if (jmlPenyewaan <= max) then


jmlPenyewaan-> jmlPenyewaan+1
penyewaan[jmlPenyewaan] -> temp
endif
endwhile
close(Fpenyewaan)
endif
endprocedure

procedure simpanPenyewaan(penyewaan : arrPenyewaan; jmlPenyewaan :


integer)

algoritma
assign(Fpenyewaan,'datapenyewaan.txt')
Rewrite(Fpenyewaan)
for i-> 1 to jmlPenyewaan do
output(Fpenyewaan,penyewaan[i])
endfore
close(Fpenyewaan)
endprocedure

procedure tambahDataPenyewaan( penyewaan : arrPenyewaan; pengembalian :


arrPengembalian;pelanggan : arrPelanggan
mobil : arrMobil; jmlPenyewaan: integer ;
jmlPengembalian,jmlPelanggan,jmlMobil : integer)

kamus
nota, id, plat, tgl : string
indexPelanggan,indexMobil : integer
algoritma
repeat
output('Tambah Data Penyewaan')
output('=====================')
jmlPenyewaan -> jmlPenyewaan + 1
output ('Masukan Data Ke-',jmlPenyewaan)
output ('-----------------')
output ('Masukan No. Nota : ')
output ('Masukkan ID Pelanggan : ')
output ('Masukkan Plat Nomor Mobil : ')
output ('Masukkan Tanggal (01/01/2020) : ')

input(nota)
while ((length(nota) > 5) or
(validasiNota(nota,penyewaan,pengembalian,jmlPenyewaan,jmlPengembalian)))
do

if(length(nota) > 5)then

gotoxy(48,6) output('Maksimum Hanya 5 Digit !!!')


end
else
if(validasiNota(nota,penyewaan,pengembalian,jmlPenyewaan,jmlPengembalian)
)then

gotoxy(48,6) output('Nota Sudah Ada !!!')


endif
input(nota)
endwhile

input(id)
indexPelanggan -> getIndexPelanggan(id,pelanggan,jmlPelanggan)
while ((length(id) > 4) or (indexPelanggan = 0)) do
if(length(id) > 4)then
output('Maksimum Hanya 4 Digit !!!')
end
else if(indexPelanggan = 0) then
output('Id Pelanggan Tidak Ditemukan !!!')
endif

input(id)
indexPelanggan ->
getIndexPelanggan(id,pelanggan,jmlPelanggan)
endwhile

input(plat)
indexMobil -> getIndexMobil(plat,mobil,jmlMobil)
while ((length(plat) > 10) or (indexMobil = 0) or (not
tersediaMobil(plat,mobil,jmlMobil))) do

if (length(plat) > 10) then

gotoxy(48,8) output('Maksimum Hanya 10 Digit !!!')


end
else if (indexMobil = 0) then

gotoxy(48,8) output('Plat Nomor Tidak Ada')


end
else if (not tersediaMobil(plat,mobil,jmlMobil)) then

gotoxy(65,8) output('Mobil Sedang Digunakan')


endif

input(plat)
indexMobil -> getIndexMobil(plat,mobil,jmlMobil)
endwhile

input(tgl)
while (not validasiTanggal(tgl)) do
algoritma

output('Format Tanggal Tidak Sesuai')


input(tgl)
endwhile

output
('=====================================================')
output ('| Nota Penyewaan
|')
output
('=====================================================')
output ('| ID Pelanggan :
|')
output ('| Nama Pelanggan :
|')
output ('| Plat Mobil :
|')
output ('| Jenis Mobil :
|')
output ('| Harga Sewa/Hari : Rp.
|')
output ('| Tanggal Sewa :
|')
output
('=====================================================')
output ('| Proses Penyewaan (y/t) :
|')
output
('=====================================================')
output(pelanggan[indexPelanggan].id)
output(pelanggan[indexPelanggan].nama)
output(mobil[indexMobil].plat)
output(mobil[indexMobil].jenis)
output(mobil[indexMobil].hargaSewa:0:2)
output(tgl)
input(proses)
if(proses = 'y') then
output('Penyewaan diproses')
penyewaan[jmlPenyewaan].nota -> nota
penyewaan[jmlPenyewaan].pelanggan ->
pelanggan[indexPelanggan]
penyewaan[jmlPenyewaan].mobil -> mobil[indexMobil]
penyewaan[jmlPenyewaan].tglSewa -> tgl
mobil[indexMobil].tersedia -> false
end
else
gotoxy(35,23) output('Penyewaan dibatalkan')
jmlPenyewaan-> jmlPenyewaan-1
endif
output('Tambah data peminjaman (y/t) : ')
input(pilih)

until (pilih <> 'y')

endprocedure

procedure tampilDataPenyewaan(penyewaan : arrPenyewaan; jmlPenyewaan:


integer)
algoritma
output('Tampil Data Penyewaan')
output('=====================')

output('=================================================================
=======================================')
output('| No | Nota | ID | Nama | Mobil | Harga
Sewa/Hari | Tanggal Sewa |')

output('=================================================================
=======================================')

for i -> 1 to jmlPenyewaan do


output('| | | | | | Rp.
| |')
output(i)
output(penyewaan[i].nota)
output(penyewaan[i].pelanggan.id)
output(penyewaan[i].pelanggan.nama)
output(penyewaan[i].mobil.jenis)
output(penyewaan[i].mobil.hargaSewa:0:2)
output(penyewaan[i].tglSewa)
endfor

output('=================================================================
===============')
endprocedure

procedure urutNota(kamus penyewaan : arrPenyewaan; jmlPenyewaan :


integer)
kamus
temp : dataPenyewaan
algoritma
for i -> 1 to (jmlPenyewaan-1) do
maks -> 1
for j -> 2 to (jmlPenyewaan+1)-i do
if (penyewaan[j].nota) > (penyewaan[maks].nota)
then
maks -> j
endfor
temp -> penyewaan[j]
penyewaan[j] -> penyewaan[maks]
penyewaan[maks] -> temp
endfor
endprocedure

procedure ubahDataPenyewaan(kamus penyewaan : arrPenyewaan;


pengembalian : arrPengembalian; pelanggan : arrPelanggan;
mobil : arrMobil; jmlPenyewaan: integer;
jmlPengembalian,jmlPelanggan,jmlMobil : integer)
kamus
ubah,indexPelanggan,indexMobil : integer
nota, id, plat, tgl : string
algoritma
tampilDataPenyewaan(penyewaan,jmlPenyewaan)
output('Nomor data yang akan diubah : ')
input(ubah)
while (ubah < 1) or (ubah > jmlPenyewaan) do
output('Tidak ada data ditemukan di nomor tersebut!')
input(ubah)
endwhile
output('Data yang akan diubah dengan No. Nota ')
utput(penyewaan[ubah].nota)

output('Anda yakin data tersebut akan diubah (y/t) : ')


input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
output('Pilihan Salah <Enter> untuk mengulangi!')
input(pilih)
endwhile
if (upcase(pilih)= 'Y') then
output('Ubah Data Penyewaan')
output('===================')

output('=================================================================
=======================================')
output('| No | Nota | ID | Nama | Mobil | Harga
Sewa/Hari | Tanggal Sewa |')

output('=================================================================
=======================================')
gotoxy(1,8) output('| | | | |
| Rp. | |')
output(i)
output(penyewaan[ubah].nota)
output(penyewaan[ubah].pelanggan.id)
output(penyewaan[ubah].pelanggan.nama)
output(penyewaan[ubah].mobil.jenis)
output(penyewaan[ubah].mobil.hargaSewa:0:2)
output(penyewaan[ubah].tglSewa)

output('=================================================================
===============')

output ('Masukan No. Nota : ')


output ('Masukkan ID Pelanggan : ')
output ('Masukkan Plat Nomor Mobil : ')
output ('Masukkan Tanggal (01/01/2020) : ')

input(nota)
while ((length(nota) > 5) or
(validasiUbahNotaPenyewaan(nota,penyewaan,pengembalian,jmlPenyewaan,jmlPe
ngembalian,ubah))) do
if(length(nota) > 5)then
output('Maksimum Hanya 5 Digit !!!')
end
else
if(validasiUbahNotaPenyewaan(nota,penyewaan,pengembalian,jmlPenyewaan,jml
Pengembalian,ubah))then
output('nota tersebut sudah tersedia')
endif
input(nota)
endwhile

input(id)
indexPelanggan ->
getIndexPelanggan(id,pelanggan,jmlPelanggan)
while ((length(id) > 4) or (indexPelanggan = 0)) do
if(length(id) > 4)then
output('Maksimum Hanya 4 Digit !!!')
end
else if(indexPelanggan = 0) then
output('Id tidak ditemukan')
endif

input(id)
indexPelanggan ->
getIndexPelanggan(id,pelanggan,jmlPelanggan)
endwhile

input(plat)
indexMobil -> getIndexMobil(plat,mobil,jmlMobil)
while ((length(plat) > 10) or (indexMobil = 0) or (not
tersediaMobil(plat,mobil,jmlMobil))) do
if (length(plat) > 10) then
output('Maksimum Hanya 10 Digit !!!')
end
else if (indexMobil = 0) then
output('Plat Nomor Tidak Ada')
end
else if (not tersediaMobil(plat,mobil,jmlMobil)) then
output('Mobil Dengan No Plat Tersebut Sedang
Digunakan')
endif

input(plat)
indexMobil -> getIndexMobil(plat,mobil,jmlMobil)
endwhile

input(tgl)
while (not validasiTanggal(tgl)) do
output('Tanggal Tidak Sesuai Format')
input(tgl)
endwhile

penyewaan[ubah].nota -> nota


penyewaan[ubah].pelanggan.id -> id
penyewaan[ubah].mobil.plat -> plat
penyewaan[ubah].tglSewa -> tgl
mobil[indexMobil].tersedia -> false

output ('Data Telah Diubah')

end
else if (upcase(pilih)= 'T') then
menu(pilihMenu)
endif
endprocedure

procedure cariNotaPenyewaan(penyewaan : arrPenyewaan jmlPenyewaan:


integer)
kamus
ia,ib,j : integer
notaCari : string
algoritma
output('Cari Data Penyewaan Berdasarkan Nomor')
output('=====================================')
output('Masukkan No. Nota Pelanggan Yang di Cari : ')
input(notaCari)
ketemu -> false
ia -> 1
ib -> jmlPenyewaan
while (not ketemu) and (ia <= ib) do
j -> ( ia + ib) div 2
if (penyewaan[j].nota = notaCari)
then
ketemu -> true
else
if(penyewaan[j].nota < notaCari)
then
ia -> j + 1
else
ib -> j - 1
endif
endwhile
if(ketemu)
then
output(' Hasil Cari Data Berdasarkan No. Nota')
output('=====================================================')
output('No. Nota yang Dicari : ',notaCari)
output('ID Pelanggan :
',penyewaan[j].pelanggan.id)
output('Nama Pelanggan :
',penyewaan[j].pelanggan.nama)
output('Plat Nomor Mobil :
',penyewaan[j].mobil.plat)
output('Jenis Mobil :
',penyewaan[j].mobil.jenis)
output('Harga Sewa / Hari : Rp.
',penyewaan[j].mobil.hargaSewa:0:2)
output('Tanggal Sewa : ',penyewaan[j].tglSewa)
end
else
output(' No. Nota ',notaCari,' Tidak Ditemukan !!!')
endif
endprocedure

procedure cariNamaPelangganPenyewa(penyewaan : arrPenyewaanjmlPenyewaan:


integer)
kamus
k,banyak : integer
namaCari,datanama : string
algoritma
output('Cari Data Penyewaan Berdasarkan Nama')
output('===================================')
output('Masukkan Nama Yang di Cari : ') input(namaCari)
ketemu -> false
banyak -> 0
for i -> 1 to jmlPenyewaan do
datanama -> copy(penyewaan[i].pelanggan.nama,1,length(namaCari))
if upcase(namaCari) = upcase(datanama)
then
ketemu -> true
banyak -> banyak + 1
endif
endfor

if(ketemu)
then
output('Hasil Cari Berdasarkan Nama Pelanggan')
output('=====================================')

output('=================================================================
=======================================')
output('| No | Nota | ID | Nama | Mobil | Harga
Sewa/Hari | Tanggal Sewa |')

output('=================================================================
=======================================')
k->1
for j -> 1 to jmlPenyewaan do
datanama ->
copy(penyewaan[j].pelanggan.nama,1,length(namaCari))
if (upcase(namaCari) = upcase(datanama))
then
output('| | | | | | Rp.
| |')
output(i)
output(penyewaan[i].nota)
output(penyewaan[i].pelanggan.id)
output(penyewaan[i].pelanggan.nama)
output(penyewaan[i].mobil.jenis)
output(penyewaan[i].mobil.hargaSewa:0:2)
output(penyewaan[i].tglSewa)
endif
endfor

output('=================================================================
===============')
end
else
output('Pelanggan yang Bernama ',namaCari,' Tidak Ditemukan !!!')
endif
endprocedure

procedure menuCariDataPenyewaan
algoritma
output('======================================')
output('| Pencarian Data Penyewaan |')
output('======================================')
output('| |')
output('| 1. Cari Berdasarkan No. Nota |')
output('| 2. Cari Berdasarkan Nama Pelanggan |')
output('| 0. Kembali Ke Menu Utama |')
output('| |')
output('======================================')
output('| Pilihan Anda : |')
output('======================================')
input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 2) do
output('Salah Memilih Menu, Ulangi!')
input(pilihMenu)
endwhile
case (pilihMenu) of
1 : algoritma
urutNota(penyewaan,jmlPenyewaan)
cariNotaPenyewaan(penyewaan,jmlPenyewaan)
2 : algoritma
urutNama(pelanggan,jmlPelanggan)
cariNamaPelangganPenyewa(penyewaan,jmlPenyewaan)
0 : menu(pilihMenu)
endcase
endprocedure

procedure hapusDataPenyewaan(kamus penyewaan : arrPenyewaan kamus


jmlPenyewaan: integer)
kamus
hapus : integer
tampilDataPenyewaan(penyewaan,jmlPenyewaan)
output('Nomor data yang akan dihapus : ')
input(hapus)
while (hapus < 1) or (hapus > jmlPenyewaan) do
output('Tidak ada data ditemukan di nomor tersebut!')
input(hapus)
endwhile
output('Data yang akan dihapus dengan No. Nota ')
output(penyewaan[hapus].nota)
output('Apakah Anda Yakin Data Tersebut Dihapus ? (y/t) : ')
input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
output('Pilihan Salah <Enter> Untuk Mengulangi !!!')
input(pilih)
endwhile

if upcase(pilih)= 'Y' then


algoritma
for i-> hapus to jmlPenyewaan-1 do
penyewaan[i]->penyewaan[i+1]
jmlPenyewaan -> jmlPenyewaan - 1
output ('Data ke ',hapus,' Telah Dihapus')
endif
endprocedure

procedure menuDataPenyewaan
algoritma
output('======================================')
output('| Data Penyewaan |')
output('======================================')
output('| |')
output('| 1. Tambah Data Penyewaan |')
output('| 2. Tampil Data Penyewaan |')
output('| 3. Ubah Data Penyewaan |')
output('| 4. Cari Data Penyewaan |')
output('| 5. Hapus Data Penyewaan |')
output('| 0. Kembali |')
output('| |')
output('======================================')
output('| Pilihan Anda : |')
output('======================================')
input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 5) do
utput('Salah Memilih Menu, Ulangi!')
input(pilihMenu)
endwhile
case (pilihMenu) of
1 :
tambahDataPenyewaan(penyewaan, pengembalian, pelanggan,
mobil, jmlPenyewaan, jmlPengembalian, jmlPelanggan, jmlMobil)

2 :
tampilDataPenyewaan(penyewaan,jmlPenyewaan)
input

3 :
ubahDataPenyewaan(penyewaan,pengembalian,pelanggan,mobil,jmlPenyewaan,jml
Pengembalian,jmlPelanggan,jmlMobil)

4 :
menuCariDataPenyewaan

5 :
hapusDataPenyewaan(penyewaan,jmlPenyewaan)

0 : pilihMenu->1
endcase
endprocedure

{pengembalian}

procedure bacaPengembalian(kamus pengembalian : arrPengembalian kamus


jmlPengembalian : integer)
kamus
temp : dataPengembalian
algoritma
assign(Fpengembalian,'datapengembalian.txt')
reset(Fpengembalian)
if IOResult = 0 then
jmlPengembalian -> 0
while not eof(Fpengembalian) do
input(Fpengembalian,temp)
if (jmlPengembalian <= max) then
jmlPengembalian->jmlPengembalian+1
pengembalian[jmlPengembalian] -> temp
endif
endif
close(Fpengembalian)
endwhile
endpricedure

procedure simpanPengembalian(pengembalian : arrPengembalian


jmlPengembalian : integer)

algoritma
assign(Fpengembalian,'datapengembalian.txt')
Rewrite(Fpengembalian)
for i-> 1 to jmlPengembalian do
output(Fpengembalian,pengembalian[i])
endfor
close(Fpengembalian)
endprocedure

procedure verifikasiPembayaran(nota : stringkamus penyewaan :


arrPenyewaankamus jmlPenyewaan : integer)
kamus
batas : integer

algoritma
batas -> 0
for i->1 to jmlPenyewaan do
if(batas > 0)then
penyewaan[i-1] -> penyewaan[i]
endif

if (nota = penyewaan[i].nota) then


batas -> i
endif
endfor
jmlPenyewaan -> jmlPenyewaan-1
endprocerure

procedure konfirmasiPembayaran(kamus pengembalian : arrPengembalian kamus


penyewaan : arrPenyewaan kamus jmlPengembalian,jmlPenyewaan : integer)

kamus
nota, tanggalKembali : string
indexPenyewaan : integer
algoritma
repeat
output('Konfirmasi Data Pengembalian')
output('============================')
jmlPengembalian -> jmlPengembalian + 1
output ('Data Pengembalian Ke-',jmlPengembalian)
output ('-------------------------')
output ('Masukan No. Nota : ')
output ('Masukkan Tanggal Kembali(01/01/2020) : ')
input(nota)
indexPenyewaan->
getIndexPenyewaan(nota,penyewaan,jmlPenyewaan)

while (indexPenyewaan = 0) do
utput('Nomor Nota Tidak Ada')
input(nota)
indexPenyewaan->
getIndexPenyewaan(nota,penyewaan,jmlPenyewaan)
endwhile

input(tanggalKembali)
//validasi id pelanggan
while ((not validasiTanggal(tanggalKembali)) or
(hitungSelisihHari(tanggalKembali, penyewaan[indexPenyewaan].tglSewa) <
0)) do
if (not validasiTanggal(tanggalKembali)) then
output('Tanggal Tidak Sesuai Format')
end
else
output('tanggal sewa :
',penyewaan[indexPenyewaan].tglSewa,', tentukan tanggal kembali dengan
benar')
endif
input(tanggalKembali)
endwhile

output
('=====================================================')
output ('| Pembayaran
|')
output
('=====================================================')
output ('| ID Pelanggan :
|')
output ('| Nama Pelanggan :
|')
output ('| Plat Mobil :
|')
output ('| Jenis Mobil :
|')
output ('| Harga Sewa/Hari :
|')
output ('| Tanggal Pinjam :
|')
output ('| Tanggal Kembali :
|')
output ('| Lama Sewa :
|')
output ('| -----------------------------------------------
|')
output ('| Total Bayar :
|')
output
('=====================================================')
output ('| Konfirmasi Pembayaran (y/t) :
|')
output
('=====================================================')
output(penyewaan[indexPenyewaan].pelanggan.id)
output(penyewaan[indexPenyewaan].pelanggan.nama)
output(penyewaan[indexPenyewaan].mobil.plat)
output(penyewaan[indexPenyewaan].mobil.jenis)
output('Rp. ',penyewaan[indexPenyewaan].mobil.hargaSewa:0:2)
output(penyewaan[indexPenyewaan].tglSewa)
output(tanggalKembali)

output(hitungSelisihHari(tanggalKembali,penyewaan[indexPenyewaan].tglSewa
))
output('Rp. ',
(hitungSelisihHari(tanggalKembali,penyewaan[indexPenyewaan].tglSewa)*peny
ewaan[indexPenyewaan].mobil.hargaSewa):0:2)
input(proses)
if (proses = 'y') then
output('Konfirmasi pembayaran berhasil dilakukan')
pengembalian[jmlPengembalian].tanggalKembali->
tanggalKembali
pengembalian[jmlPengembalian].penyewaan ->
penyewaan[indexPenyewaan]
verifikasiPembayaran(nota, penyewaan, jmlPenyewaan)
end
else
output('Konfirmasi pembayaran dibatalkan')
jmlPengembalian -> jmlPengembalian - 1
endif
output('Konfirmasi pengembalian lain? (y/t)? ') input(pilih)
until (pilih <> 'y')

endprocedure
procedure tampilDataPengembalian(pengembalian : arrPengembalian
jmlPengembalian : integer)
kamus
total : real
lamaSewa,detail : integer
algoritma
clrscr
output('Tampil Data Pengembalian')
output('========================')
output('=================================================================
===============================')
output('| No | Nota | ID | Plat Nomor | Tanggal Sewa | Tanggal
Kembali | Total |')
output('=================================================================
===============================')

for i -> 1 to jmlPengembalian do


algoritma
output('| | | | | |
| Rp. |')
output(i)
output(pengembalian[i].penyewaan.nota)
output(pengembalian[i].penyewaan.pelanggan.id)
output(pengembalian[i].penyewaan.mobil.plat)
output(pengembalian[i].penyewaan.tglSewa)
output(pengembalian[i].tanggalKembali)
lamaSewa -> hitungSelisihHari(pengembalian[i].tanggalKembali
,pengembalian[i].penyewaan.tglSewa)
total -> lamaSewa * pengembalian[i].penyewaan.mobil.hargaSewa
output(total:0:0)
end //endfor

output('=================================================================
===============')
output
output('Jika Ingin Melihat Detail Data Pengembalian (y/t) : ')
input(pilih)
if (upcase(pilih) = 'Y') then
algoritma
output('Masukan nomor data untuk dilihat secara detail : ')
input(detail)
clrscr
output('Tampil Detail Data Pengembalian')
output('===============================')
output output
output('No. Nota :
',pengembalian[detail].penyewaan.nota)
output('ID Pelanggan :
',pengembalian[detail].penyewaan.pelanggan.id)
output('Nama Pelanggan :
',pengembalian[detail].penyewaan.pelanggan.nama)
output('Alamat Pelanggan :
',pengembalian[detail].penyewaan.pelanggan.alamat)
output('No. Telp Pelanggan :
',pengembalian[detail].penyewaan.pelanggan.noTlp)
output('Plat Nomor Mobil :
',pengembalian[detail].penyewaan.mobil.plat)
output('Jenis Mobil :
',pengembalian[detail].penyewaan.mobil.jenis)
output('Harga Sewa / hari : Rp.
',pengembalian[detail].penyewaan.mobil.hargaSewa:0:2)
output('Tanggal Sewa :
',pengembalian[detail].penyewaan.tglSewa)
output('Tanggal Kembali :
',pengembalian[detail].tanggalKembali)
output('Lama Sewa : ',lamaSewa)
output('Total Bayar : Rp. ',total:0:2)
end
else
algoritma
menu(pilihMenu)
end
end

procedure tampilDataTidakDetail(pengembalian : arrPengembalian


jmlPengembalian : integer)
kamus
total : real
lamaSewa : integer
algoritma
output('Tampil Data Pengembalian')
output('========================')
output('=================================================================
===============================')
output('| No | Nota | ID | Plat Nomor | Tanggal Sewa | Tanggal
Kembali | Total |')
output('=================================================================
===============================')

for i -> 1 to jmlPengembalian do


algoritma
output('| | | | | |
| Rp. |')
output(i)
output(pengembalian[i].penyewaan.nota)
output(pengembalian[i].penyewaan.pelanggan.id)
output(pengembalian[i].penyewaan.mobil.plat)
output(pengembalian[i].penyewaan.tglSewa)
output(pengembalian[i].tanggalKembali)
lamaSewa -> hitungSelisihHari(pengembalian[i].tanggalKembali
,pengembalian[i].penyewaan.tglSewa)
total -> lamaSewa * pengembalian[i].penyewaan.mobil.hargaSewa
output(total:0:0)
end //endfor

output('=================================================================
===============')
end

procedure ubahDataPengembalian(kamus pengembalian : arrPengembaliankamus


jmlPengembalian : integer)
kamus
ubah,lamaSewa : integer
nota,tanggalKembali : string
total : real
algoritma
tampilDataTidakDetail(pengembalian,jmlPengembalian)
output('Nomor data yang akan diubah : ')
input(ubah)
while (ubah < 1) or (ubah > jmlPengembalian) do
output('Tidak ada data ditemukan di nomor tersebut!')
input
input(ubah)
end //endwhile
output('Data yang akan diubah dengan No. Nota ')
output(pengembalian[ubah].penyewaan.nota)
output('Anda yakin data tersebut akan diubah (y/t) : ')
input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
output('Pilihan Salah <Enter> untuk mengulangi!')
input
input(pilih)
end
if (upcase(pilih)= 'Y') then
clrscr
output('Ubah Data Pengembalian')
output('======================')
output('=================================================================
===============================')
output('| No | Nota | ID | Plat Nomor | Tanggal Sewa | Tanggal
Kembali | Total |')
output('=================================================================
===============================')
output('| | | | | |
| Rp. |')
output(i)
output(pengembalian[ubah].penyewaan.nota)
output(pengembalian[ubah].penyewaan.pelanggan.id)
output(pengembalian[ubah].penyewaan.mobil.plat)
output(pengembalian[ubah].penyewaan.tglSewa)
output(pengembalian[ubah].tanggalKembali)
lamaSewa ->
hitungSelisihHari(pengembalian[ubah].tanggalKembali
,pengembalian[ubah].penyewaan.tglSewa)
total -> lamaSewa * pengembalian[ubah].penyewaan.mobil.hargaSewa
output(total:0:0)
output('=================================================================
===============')

output ('Masukan No. Nota : ')


output ('Masukkan Tanggal Kembali : ')
input(nota)
while ((length(nota) > 5) or
(validasiUbahNotaPengembalian(nota,penyewaan,pengembalian,jmlPenyewaan,jm
lPengembalian,ubah))) do
if(length(nota) > 5)then
output('Maksimum Hanya 5 Digit !!!')
end
else
if(validasiUbahNotaPengembalian(nota,penyewaan,pengembalian,jmlPenyewaan,
jmlPengembalian,ubah))then
gotoxy(46,11) output('nota tersebut sudah tersedia')
end
input
input(nota)
end

input(tanggalKembali)
while ((not validasiTanggal(tanggalKembali)) or
(hitungSelisihHari(tanggalKembali, pengembalian[ubah].penyewaan.tglSewa)
< 0)) do
algoritma
if (not validasiTanggal(tanggalKembali)) then
output('Tanggal Tidak Sesuai Format')
end
else
output('tanggal sewa :
',pengembalian[ubah].penyewaan.tglSewa,', tentukan tanggal kembali dengan
benar')
end
input
input(tanggalKembali)
end

pengembalian[ubah].tanggalKembali-> tanggalKembali
pengembalian[ubah].penyewaan.nota -> nota
output ('Data Telah Diubah')
input
end
else if (upcase(pilih)= 'T') then
menu(pilihMenu)
end
end //endprocedure

procedure urutNota(kamus pengembalian : arrPengembalian kamus


jmlPengembalian : integer)
kamus
temp : dataPengembalian
algoritma
for i -> 1 to (jmlPengembalian-1) do
maks -> 1
for j -> 2 to (jmlPengembalian+1)-i do
if (pengembalian[j].penyewaan.nota) >
(pengembalian[maks].penyewaan.nota)
then
maks -> j
end //endfor
temp -> pengembalian[j]
pengembalian[j] -> pengembalian[maks]
pengembalian[maks] -> temp
end //endfor
end //endprocedure

procedure cariNotaPengembalian (pengembalian : arrPengembalian


jmlPengembalian : integer)
kamus
total : real
ia,ib,j,lamaSewa : integer
notaCari : string
algoritma
output('Cari Data Pengembalian')
output('======================')
output('Masukkan No. Nota Pelanggan Yang di Cari : ')
input(notaCari)
ketemu -> false
ia -> 1
ib -> jmlPengembalian
while (not ketemu) and (ia <= ib) do
algoritma
j -> ( ia + ib) div 2
if(pengembalian[j].penyewaan.nota = notaCari)
then
ketemu -> true
else
if(pengembalian[j].penyewaan.nota < notaCari)
then
ia -> j + 1
else
ib -> j - 1
end //endwhile
if(ketemu)
then
output(' Hasil Cari Data Berdasarkan No. Nota')
gotoxy(15,6)
output('=====================================================')
output('No. Nota yang Dicari : ',notaCari)
output('ID Pelanggan :
',pengembalian[j].penyewaan.pelanggan.id)
output('Nama Pelanggan :
',pengembalian[j].penyewaan.pelanggan.nama)
output('Plat Nomor Mobil :
',pengembalian[j].penyewaan.mobil.plat)
output('Jenis Mobil :
',pengembalian[j].penyewaan.mobil.jenis)
output('Harga Sewa / Hari : Rp.
',pengembalian[j].penyewaan.mobil.hargaSewa:0:2)
output('Tanggal Sewa :
',pengembalian[j].penyewaan.tglSewa)
output('Tanggal Kembali :
',pengembalian[j].tanggalKembali)
lamaSewa -> hitungSelisihHari(pengembalian[j].tanggalKembali
,pengembalian[j].penyewaan.tglSewa)
total -> lamaSewa * pengembalian[j].penyewaan.mobil.hargaSewa
output('Lama Sewa : ',lamaSewa)
output('Total Bayar : Rp. ',total:0:2)
end
else
output(' No. Nota ',notaCari,' Tidak Ditemukan !!!')
end
end //endprocedure

procedure hapusDataPengembalian(kamus pengembalian : arrPengembalian


kamus jmlPengembalian : integer)

kamus
hapus : integer
algoritma
tampilDataTidakDetail(pengembalian,jmlPengembalian)
output('Nomor data yang akan dihapus : ')
input(hapus)
while (hapus < 1) or (hapus > jmlPengembalian) do
output('Tidak ada data ditemukan di nomor data tersebut!')
input
input(hapus)
end //endwhile
output('Data yang akan dihapus dengan No. Nota ')
output(pengembalian[hapus].penyewaan.nota)
output('Apakah Anda Yakin Data Tersebut Dihapus ? (y/t) : ')
input(pilih)
while (upcase(pilih) <> 'Y') and (upcase(pilih) <> 'T') do
output('Pilihan Salah <Enter> Untuk Mengulangi !!!')
input
input(pilih)
end

if upcase(pilih)= 'Y' then


for i-> hapus to jmlPengembalian-1 do
pengembalian[i]->pengembalian[i+1]
jmlPengembalian -> jmlPengembalian - 1
output ('Data ke ',hapus,' Telah Dihapus')
input
end
end //endprocedure

procedure menuDataPengembalian

algoritma
output('+====================================+')
output('| Data Pengembalian |')
output('+====================================+')
output('| |')
output('| 1. Konfirmasi Pengembalian |')
output('| 2. Tampil Data Pengembalian |')
output('| 3. Ubah Data Pengembalian |')
output('| 4. Cari Data Pengembalian |')
output('| 5. Hapus Data Pengembalian |')
output('| 0. Kembali |')
output('| |')
output('+====================================+')
output('| Pilihan Anda : |')
output('+====================================+')
input(pilihMenu)
while (pilihMenu < 0)or(pilihMenu > 5) do
output('Salah Memilih Menu, Ulangi!')
input
output ('|')
input(pilihMenu)
end //endwhile
case (pilihMenu) of
1 : algoritma
konfirmasiPembayaran(pengembalian, penyewaan,
jmlPengembalian,jmlPenyewaan)
end
2 : algoritma
tampilDataPengembalian(pengembalian,jmlPengembalian)
input
end
3 : algoritma
ubahDataPengembalian(pengembalian,jmlPengembalian)
end
4 : algoritma
urutNota(pengembalian,jmlPengembalian)
cariNotaPengembalian (pengembalian,jmlPengembalian)
input
end
5 : algoritma
hapusDataPengembalian(pengembalian,jmlPengembalian)
end
0 : pilihMenu->1
end //endcase
end //endprocedure

procedure menuUtama()

algoritma
repeat
menu(pilihMenu)
case (pilihMenu) of
1 : menuDataMobil
2 : menuDataPelanggan
3 : menuDataPenyewaan
4 : menuDataPengembalian
0 : algoritma
simpanMobil(mobil,jmlMobil)
simpanPelanggan(pelanggan, jmlPelanggan)
simpanPenyewaan(penyewaan, jmlPenyewaan)
simpanPengembalian(pengembalian, jmlPengembalian)
output('Penyimpanan Data Berhasil Dilakukan')
input()
//exit()
end

end //endcase
until (pilihMenu = 0)
end

algoritma
bacaMobil(mobil,jmlMobil)
bacaPelanggan(pelanggan,jmlPelanggan)
bacaPenyewaan(penyewaan,jmlPenyewaan)
bacaPengembalian(pengembalian,jmlPengembalian)
menuUtama()
end.

Anda mungkin juga menyukai