Hitung Sewa dengan Pascal

Topik sebelumnya Topik selanjutnya Go down

Hitung Sewa dengan Pascal

Post by PujanggaBageur on Sun Oct 19, 2008 2:47 pm

Pembahasan ini adalah contoh program dengan menggunakan bahasa Pascal untuk menghitung besar sewa seorang penyewa komputer pada sebuah rental komputer dengan ketentuan sebagai berikut:

  • Harga sewa sebesar Rp. 1.000,- per jam
  • Tarif sewa flat, dihitung per 15 menit

Penjelasan Kasus

Belajar Pascal berarti belajar Algoritma. Dan belajar algoritma tidak akan lepas dari deskripsi cerita. Oleh karenanya, sebelum ke bahasan lebih lanjut, saya ingin bercerita lebih dulu. Begini ceritanya:

Di Kota Cirebon tersebutlah sebuah rental computer yang bernama INOCHI Computer. Rental ini baru beberapa hari saja dibuka, namun langsung memiliki banyak pelangan, sang pengelola sebut saja namanya Ajat, sedikit merasa kewalahan, karena INOCHI Computer bukan hanya melayani jasa rental saja, tetapi juga melayani kursus, perbaikan PC, penjualan, pemograman sampai ke video shooting dan video editing. Akhirnya tercetuslah ide untuk membuat program yang dapat mengelola layanan rental ini.

Dipanggillah programmer yang masih merupakan tim dari INOCHI Computer, sebut saja namanya Agung. Mulailah Agung bekerja mengumpulkan data yang diperlukan. Akhirnya terkumpullah data sebagai berikut:
Harga sewa PC per jam adalah Rp. 1.000,-
Harga sewa dihitung per 15 menit, artinya INOCHI Computer memberlakukan tarff flat sebesar Rp. 250 per 15 Menit.

Agung pun mulai merencanakan membuat program. Dipilihlah Pascal sebagai bahasa yang mudah dan murah (dengan artian, mudah dalam kompilasi dan murah untuk ukuran file yang relative kecil).

Pengkodean

Code:

Program Menghitung_Sewa;

Uses Dos, Crt;

Type JAM = Record
    HH, MM, SS : Word;
End;

Var
  I : Integer; J : LongInt;
  JamSekarang, JamMulai,
  JamSelesai, JamSewa : JAM;
  NamaUser : String;
  TotalDetikMulai, TotalDetikSewa,
  TotalDetikSekarang,HargaSewa : Word;
  DD, MM, YY, DOW : Word;

Const
  HargaSewaPerJam = 1000;
  FixMenit = 15;

  Hari : Array [0..6] of String[9] =
        ('Minggu','Senin','Selasa',
        'Rabu','Kamis','Jum' + #39 + 'at', 'Sabtu');
  Bulan : Array [1..12] of String[10] =
        ('Jan', 'Peb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul',
        'Agu', 'Sep', 'Okto', 'Nop', 'Des');

Procedure Tulis(X, Y: Integer; Teks : String);
Begin
    GoToXY (X, Y); Write (Teks);
End;

Procedure Banner;
Var TeksJudul : String;  Panjang : Integer;
Begin
    TextAttr :=$17;  ClrScr;
    TeksJudul := 'Rental Komputer INOCHI Computer';
    Panjang := Length (TeksJudul);
    For I:= 1 to 79 Do
    Begin
          Tulis (I, 1, #205); Tulis (I, 5, #205);
    End;
    Tulis (1, 1, #201); Tulis (80, 1, #187);
    For I := 2 to 5 Do
    Begin
          Tulis (1, I, #178); Tulis (80, I, #178);
    End;
    Tulis (1, 5, #200); Tulis (80, 5, #188);
        Tulis ((80-Panjang) Div 2, 2, TeksJudul);
        TeksJudul := 'Jl. P. Drajat Gg. Jepun No. 48 ' +
        'Cirebon 45133';
        Panjang := Length (TeksJudul);
        Tulis ((80-Panjang) Div 2, 4, TeksJudul);
End;

Function FormatWaktu(W : Word) : String;
Var
    S : String;
Begin
    Str(W:0,s);
    If Length(S) = 1 then S := '0' + S;
    FormatWaktu := S;
End;

Procedure PutarJam;
Var pX, pY : Integer;
Begin
    GetDate(YY, MM, DD, DOW);
    {-----------------------------------------}
    Window (1, 11, 80, 25); TextAttr := $30;
    For pX := 1 to 80 Do
    Begin
        For pY := 1 to 14 Do
        Begin
            GotoXY (pX, pY);
            Write(#177); {179}
        End;
    End;
    {-----------------------------------------}
    Tulis (28, 2, '  Jam Mulai : ' +
          FormatWaktu(JamMulai.HH)+':'+
          FormatWaktu(JamMulai.MM)+':'+
          FormatWaktu(JamMulai.SS) + '  ');
    {-----------------------------------------}
    Repeat
    GetTime(JamSekarang.HH,JamSekarang.MM,
    JamSekarang.SS,JamSekarang.SS);
    {-----------------------------------------}
    TotalDetikSekarang := (JamSekarang.SS) +
                          (JamSekarang.MM * 60) +
                          (JamSekarang.HH * 3600);
    {-----------------------------------------}
    TotalDetikMulai := (JamMulai.SS) +
                        (JamMulai.MM * 60) +
                        (JamMulai.HH * 3600);
    TotalDetikSewa := TotalDetikSekarang - TotalDetikMulai;
    {-----------------------------------------------}
    JamSewa.HH := TotalDetikSewa div 3600;
    JamSewa.MM := (TotalDetikSewa Mod 3600) Div 60;
    JamSewa.SS := (TotalDetikSewa Mod 3600) Mod 60;
    {-----------------------------------------------}
    HargaSewa := (HargaSewaPerJam div (3600 div (60 *
                  FixMenit))) * (1 + (TotalDetikSewa div
                  (60 * FixMenit)));
    Window (43, 8, 80, 8); TextAttr := $40;  ClrScr;
    {-----------------------------------------}
    GoToXy (3, 1); Write(HARI[DOW],', ', DD:0, ' ',
    BULAN[MM],' ', YY:0, ' ');
    Tulis(27, 1, #16 + ' ' +
          FormatWaktu(JamSekarang.HH)+':'+
          FormatWaktu(JamSekarang.MM)+':'+
          FormatWaktu(JamSekarang.SS));
    {-----------------------------------------}
    Window (25,16,55,19);  TextAttr := $67; TextBackGround(4);
    For I:= 1 to 29 Do
    Begin
          Tulis (I, 1, #205);  Tulis (I, 4, #205);
    End;
    Tulis (1, 1, #201);  Tulis (30, 1, #187);
    For I := 2 to 3 Do
    Begin
          Tulis (1, I, #178); Tulis (30, I, #178);
    End;
    Tulis (1, 4, #200); Tulis (30, 4, #188);
    Tulis (2, 2, ' Lama Sewa    :    ' +
          FormatWaktu(JamSewa.HH)+':'+
          FormatWaktu(JamSewa.MM)+':'+
          FormatWaktu(JamSewa.SS)+ ' ');
    {-----------------------------------------}
    Tulis (2, 3, ' Harga Sewa  : Rp. ');
    GoToXY(22, 3);  Write(HargaSewa:7, ' ');
            For j := 0 To 10000000 Do;
    Window (57,25,79,25);  TextAttr := $89;  ClrScr;
    Tulis (1, 1, ' Created By Viansastra');
    Until KeyPressed;
End;

Procedure CetakDataPenyewa;
Var pX, pY : Integer;
Begin
    Window (1, 6, 80, 25); TextAttr := 15; ClrScr;
    Window (1, 7, 41, 9); TextAttr := $20; ClrScr;
    Tulis (1, 1, #214); Tulis (40, 1, #183);
    For I:= 2 to 39 Do
    Begin
          Tulis (I, 1, #205); Tulis (I, 3, #205);
    End;
    Tulis (1, 3, #211); Tulis (40, 3, #189);
    Tulis (1, 2, #186); Tulis (40, 2, #186);
    Tulis (4,2, 'Nama Penyewa : ');
    Window (20, 8, 38, 8); TextAttr := $61;  ClrScr;
    Repeat
          ReadLn(NamaUser);
    Until NamaUser <> '';
    Write (NamaUser);
    GetTime(JamMulai.HH,JamMulai.MM, JamMulai.SS, JamMulai.SS);
    PutarJam;
End;

(* Program Utama *)
Begin
    Banner;
    CetakDataPenyewa;
end.

Pengujian

Setelah pengkodean selesai, dilakukanlah pengujian. Dijalankannya program dengan menklik menu: Run  Run Ctrl + F9.

Pertama-tama Agung mengetikkan “Nama Penyewa”, kemudian dilanjutkan dengan menekan tombol Enter pada keyboard. Setelah menekan Enter, tampilan program berubah menjadi seperti gambar ilustrasi di bawah ini dan penghitunganpun dimulai.

Sekarang Agung tinggal berfikir bagaimana mencetak data hasil penyewaan menjadi sebuah laporan. Bagaimana mencetak data menjadi laporan? Akan diuraikan pada artikel berikutnya.

_________________
Tidak ada yang menarik, datang kemudian hilang, pergi tak kembali.

PujanggaBageur
Admin
Admin

Jumlah posting: 148
Join date: 07.08.08
Age: 32
Lokasi: Cirebon

Lihat profil user http://inochi.forumotion.net

Kembali Ke Atas Go down

Topik sebelumnya Topik selanjutnya Kembali Ke Atas

- Similar topics

Permissions in this forum:
Anda tidak dapat menjawab topik