Jumat, 30 Desember 2011

Program penyimpanan data pelanggan dan barang dengan file bertipe Pascal.

Mungkin tepatnya sebuah tugas yang mau tidak mau harus dikerjakan ini, yang mengharuskan memelekkan mata ampe pagi, menghabiskan kopi ber'ton ton dan menghabiskan rokok bergudang gudang, demi terciptanya program sederhana yang acak kadut ini, tapi mungkin disini lah halte untuk berangkat ke masa depan yang lebih baik :D ...
(okek saya rasa cukup curhatnya,,,,, :D )

Mungkin bagi yang sedang belajar bahasa pemerograman pascal akan bertemu dengan data terstruktur pascal yang bernama file, file itu sendiri dibagi menjadi tiga jenis, yaitu file bertipe, tidak bertipe dan file text, disini saya tidak akan menulis tentang bagai mana semua struktur file itu, silahkan kawan sekalian tanya ke mbah google, pasti lebih cespleng disini saya cuman akan berbagi source code program menggunakan file...
berikut source code programnya...
Program Data_Pelanggan;
Uses Crt;
Type pelanggan = Record 
       ID      : Word; 
       Nama    : String[20];        
       biaya   : Real;
       nopol   : array[1..20] of char; 
       alamat  : string[20];
       tanggal : byte;
       bulan   : string;
     End;
Type Barang    = RECORD
     IdBar     : integer;
     NamaBar   : string[50];
     HargaBar  : real;
     banyak    : integer;
     End;

Var filepel  : File of pelanggan;
    filetemp : File of pelanggan;
    FileBar  : File of Barang;
    FileTemp2: File of Barang;
    Data2    : Barang;
    Data     : pelanggan;
    Pil,Ul   : Char;

const garis = '===========================================================';

Procedure Menu;
Begin 
  Clrscr; 
  Gotoxy(34,1);
  Write('MENU PILIHAN');
  Gotoxy(34,2);
  Write('============');
  Gotoxy(27,4);
  Write('1. Tambah Data Pelanggan');
  Gotoxy(27,5);
  Write('2. Edit Data Pelanggan');
  Gotoxy(27,6);
  Write('3. Hapus Data Pelanggan');
  Gotoxy(27,7);
  Write('4. Tampilkan Data Pelanggan');
  Gotoxy(27,8);
  Write('5. Tampil data pelanggan Berdasarkan ID');
  Gotoxy(27,9);
  Gotoxy(27,10);
  Gotoxy(34,11);
  Write('MENU DATA BARANG');
  Gotoxy(34,12);
  Write('================');
  Gotoxy(27,13);
  Write('6. Tambah Data Barang');
  Gotoxy(27,14);
  Write('7. Tampil Data Barang');
  Gotoxy(27,15);
  Write('8. Tampil Data Barang Berdasarkan ID');
  Gotoxy(27,17);
  Write('9. Keluar (Exit)');
  Gotoxy(27,19);
  Write('Pilihan [1..9]: ');Pil:=Readkey;
End;

Procedure Menu1;
Begin
  Clrscr; 
  Gotoxy(34,1);
  Write(' MENU UTAMA');
  Gotoxy(34,2);
  Write('============');
  Gotoxy(27,4);
  Write('1. Data Pelanggan');
  Gotoxy(27,5);
  Write('2. Data Barang');
  Gotoxy(27,7);
  Write('9. Keluar (Exit)');
  Gotoxy(32,12);
  Write('Pilihan [1..9]: ');Pil:=Readkey;
End;

Procedure BukaFile;
Begin 
  Assign(Filepel,'pel.TXT'); 
  {$I-}; 
  Reset(Filepel);
  {$I+};
End;

Procedure BukaFileBar;
Begin
  Assign(FileBar,'Bar.TXT');
  {$I-};
  Reset (FileBar);
  {$I+};
End;

Procedure TambahBarang;

Var Lagi  : Char;
    Ada   : Boolean;
    i,o,a : Integer;
    nomor : Word;
Begin
  Ul:='Y';
  Lagi:='Y';
  Clrscr;

  BukaFileBar;
  If IOResult<>0 Then
     Rewrite(FileBar);

  Repeat
    Clrscr;
    Ada:=False;
    i:=0;

    Gotoxy(30,1);
    Write('TAMBAH DATA BARANG');
    Gotoxy(30,2);
    Write('==================');
    Gotoxy(30,3);
    Write('No. ID Barang      : ');
    Readln(nomor);
    While (Ada=False) and (i<>Filesize(Filebar)) Do
          Begin
            seek (FileBar,i);
            Read (FileBar,Data2);
            if Data2.IdBar = nomor Then
               Ada := True
            Else
                Inc (i);
            End;
          IF (Ada=True) Then
          Begin
          Gotoxy(20,9);
          Write ('Nomor ID Barang ",nomor," ini Sudah Ada..!');
          end
           Else
           Begin
                Seek(FileBar,Filesize(FileBar));
                 Data2.IdBar := nomor;
                 Gotoxy(20,5);
                 Write('Nama Barang    : ');
                 Readln(Data2.NamaBar);
                 Gotoxy(20,6);
                 Write('Harga Barang   : $');
                 Readln(Data2.HargaBar);
                 Gotoxy(20,7);
                 write('Banyaknya      : ');
                 Readln(Data2.banyak);
                 Write(FileBar,Data2);
          End;
        Gotoxy(20,13);
        Write('Mau Tambah Data LAgi juragan [Y/T] : '); Lagi := upcase(ReadKey);
        until Lagi <> 'Y';
        Close (FileBar);
     End;

Procedure Tambah;
Var Lagi  : Char;
    Ada   : Boolean;
    i,o,a : Integer;
    nomor : Word;
Begin
  Ul:='Y'; 
  Lagi:='Y'; 
  Clrscr; 
 
  BukaFile; 
  If IOResult<>0 Then 
     Rewrite(Filepel);

  Repeat
    Clrscr;
    Ada:=False;
    i:=0;
    Gotoxy(30,1);
    Write('TAMBAH DATA PELANGGAN');
    Gotoxy(30,2);
    Write('=====================');
    Gotoxy(20,4);
    Write('No. ID Pelanggan  : ');Readln(nomor);
    While (Ada=False) And (i<>Filesize(Filepel)) Do
      Begin
        Seek(Filepel,i);
        Read(Filepel,Data);
        If Data.id=nomor Then
           Ada:=True
        Else
           Inc(i);
      End;
    If (Ada=True) Then
      Begin
Gotoxy(20,9);Write('Nomor ID Pelanggan "',nomor,'" Ini Sudah Ada!');
      End
    Else
      Begin
        Seek(Filepel,Filesize(Filepel));
        Data.id:=nomor;
        Gotoxy(20,5);
        Write('Nama Pelanggan     : ');
        Readln(Data.Nama);
        Gotoxy(20,6);
        Write('Biaya BEngkel      : $');
        Readln(Data.biaya);
        Gotoxy(20,7);
        Write('Alamat             : ');
        Readln(Data.alamat);
 Gotoxy(20,8);
        write('Tanggal Reg.       : ');
        Readln(Data.tanggal);
 Gotoxy(20,9);
        Write('Bulan Reg.         : ');
        Readln(Data.bulan);
        Gotoxy(20,10);
        write('Silahkan masukkan banyak No.Pol.: ');
        Readln(o);
        for a:=1 to o do
        begin
  Gotoxy(21,a+10);
         Write('No. Pol. Kendaraan ke- ',a,' : ');
         readln;
        end;
        
        Write(Filepel,Data);
      End;  
    Gotoxy(20,13);
    Write('Mau Tambah Data Lagi Juragan [Y/T]:');Lagi:=Upcase(Readkey);
  Until Lagi<>'Y'; 
  Close(Filepel); 
End;

Procedure Edit;
Var Lagi: Char;
    Ada : Boolean;
    i,o,a   : Integer;
    nomor: Word;
Begin
  Ul:='Y';
  Lagi:='Y';
  Clrscr;

  BukaFile;
  If IOResult<>0 Then
     Write('Data Masih Kosong Juragan...!')
  Else
    Begin
      Repeat
        Clrscr;
        Ada:=False;
        i:=0;
        Gotoxy(30,1);
        Write('EDIT DATA PELANGGAN');
        Gotoxy(30,2);
        Write('=====================');
        Gotoxy(20,4);Write('No. ID Pelanggan  : ');
        Readln(nomor);
        While (Ada=False) And (i<>Filesize(Filepel)) Do
          Begin
            Seek(Filepel,i);
            Read(Filepel,Data);
            If Data.id=nomor Then
               Begin
                 Ada:=True;
                 Gotoxy(20,5);
                 Write('Nama Pelanggan : ',Data.Nama);
                 Gotoxy(20,6);
                 Write('Biaya Bengkel  : $',Data.biaya:1:2);
                 Gotoxy(20,7);
                 Write('Alamat         : ',Data.alamat);
   Gotoxy(20,8);
                 write('Tanggal Reg.   : ',Data.tanggal);
                 Gotoxy(20,8);
                 Write('Bulan Reg.     : ',Data.bulan);
                 for a:=1 to FileSize(Filepel) do
          Gotoxy(21,11);
                 Write('No. Pol. Kendaraan ke- ',a,' : ',Data.nopol[a]);
                 end
            Else
               Inc(i); 
          End; 
        If (Ada=True) Then 
          Begin 
            Data.id:=nomor; 
            Gotoxy(20,12);
            Write('Nama Pelanggan : ');
            Readln(Data.Nama);
            Gotoxy(20,14);
            Write('Biaya BEngkel  : $');
            Readln(Data.biaya);
     Gotoxy(20,15);
            Write('Alamat         : ');
            Readln(Data.alamat);
            Gotoxy(20,16);
     write('Tanggal Reg.   : ');
            Readln(Data.tanggal);
            Seek(Filepel,i);
            Write(Filepel,Data);
          End
        Else
          Begin
            Gotoxy(20,16);Write('Nomor Mahasiswa "',nomor,'" Ini Tidak Ada Gan..!');
          End;
        Gotoxy(20,17);Write('Mau Edit Data Lagi [Y/T]: ');Lagi:=Upcase(Readkey);
      Until Lagi<>'Y';
    End;
  Close(Filepel);
End;

Procedure Hapus ;
Var
   a : word;
   i : integer;
   ketemu : boolean;
   lg : string;
begin
     clrscr;
     Assign(filetemp, 'temp.dat') ;
     {$I-} Reset(filetemp) ;
     {$I+} if ioresult<> 0 then Rewrite(filetemp) ;
     BukaFile;

     Rewrite(filetemp) ;
     Repeat
           clrscr;
           GotoXY(27,5) ; Write('    HAPUS DATA PELANGGAN');
           GotoXY(27,6) ; Write('=============================') ;
           GotoXY(27,7) ; Write('ID. Pelanggan yang akan dihapus  : ')  ; Readln(a) ;
           Data.id := a;
           i := 1;
           seek(filepel,0) ; ketemu := false ;
           while not eof(filepel) do
           begin
               seek(filepel,i-1); read (filepel, Data) ;
               if Data.id = a then
               begin
                    ketemu := true ;
               end
               else
               begin
                    seek(filetemp,filesize(filetemp));
                    write(filetemp,Data) ;
               end;
               inc(i);
           end;
           i := 1;
           rewrite(filepel) ;
           seek(filetemp,0) ;
           while not eof(filetemp) do
           begin
               seek(filetemp,i-1); read (filetemp, Data) ;

               seek(filepel,filesize(filepel));
               write(filepel,data) ;
               inc(i);
           end;

           if not ketemu then
           begin
                GotoXY(27,8) ; Write('Data ini tidak ada Juragan..!!')
           end
           else
           begin
                GotoXY(27,9) ; Write('Data ini sudah di hapus Juragan..')
           end;
           GotoXY(27,12); Write('Input Lagi [Y/T] : ')  ; lg := upcase (readkey);
     Until lg <> 'Y';
     close(filetemp) ;
     close(filepel) ;
end;


Function RataBiaya(Tbiaya:Real;n:integer):Real;
Begin
  RataBiaya:=Tbiaya/n;
End;

Procedure TampilBarang;
Var i    : Integer;

Begin
clrscr;
  Ul:='Y';
  BukaFileBar;
  If IoResult <>  0 Then
     Writeln('Maaf Data Masih Kosong Juragan...! ')
  Else
    Begin
      Clrscr;
      Writeln('                   DATA BARANG                   ');
      Writeln;
      writeln(garis);
      Writeln(' NO   ID                NAMA    HARGA    Pcs ');
      writeln(garis);
      i:=0;
      While Not EoF(FileBar) Do
        Begin
          Inc(i);
          Read(FileBar,Data2);
          Writeln(i:3,Data2.idBar:6,Data2.NamaBar:20,Data2.hargaBar:8:2,Data2.banyak:10,Data.tanggal:8);
        End;
      writeln(garis);

      writeln(garis);
      Close(FileBar);
     End;

  Writeln;
  Write('Hajar Enter untuk melanjutkan...');Readkey;
End;

Procedure tampil_idBarang;
Var i    : Integer;
    a : integer;
    Lagi : Char;
Begin
  Ul:='Y';
  Lagi:='Y';
  Repeat
    Clrscr;
    Write('Silahkan masukkan ID Barang yang anda cari : ');Readln(a);
    BukaFileBar;
    If IoResult <>  0 Then
       Write('Maaf Data Masih Kosong Gan,,,! ')
    Else
      Begin
        Writeln(' NO   ID                NAMA    HARGA    Pcs ');
      writeln(garis);
      i:=0;
      While Not EoF(FileBar) Do
        Begin
          Read(FileBar,Data2);
          if Data2.idBar = a then
        Begin
          Inc(i);
          Writeln(i:3,Data2.idBar:6,Data2.NamaBar:20,Data2.hargaBar:1:2,Data2.banyak:10,Data.tanggal:8);
        End;
        end;
      writeln(garis);
      Close(FileBar);
     End;

    Writeln; 
    Write('Mau Lihat Data Lagi Gan [Y/T]: ');Lagi:=Upcase(Readkey); 
  Until Lagi<>'Y';
End; 

Procedure Tampil;
Var i    : Integer;
    Tbiaya : Real;
Begin
clrscr;
  Ul:='Y';
  Tbiaya:=0;
  BukaFile;
  If IoResult <>  0 Then
     Writeln('Maaf Data Masih Kosong Juragan...! ')
  Else
    Begin
      Clrscr;
      Writeln('                  DATA PELANGGAN                  ');
      Writeln;
      writeln(garis);
      Writeln(' NO   ID                NAMA    BIAYA      ALAMAT   T.REG. ');
      writeln(garis);
      i:=0;
      While Not EoF(Filepel) Do
        Begin
          Inc(i);
          Read(Filepel,Data);

          Writeln(i:3,Data.id:6,Data.Nama:20,Data.biaya:8:2,Data.alamat:10,Data.tanggal:8);
          Tbiaya:=Tbiaya+Data.biaya;
        End;
      writeln(garis);
      Writeln('Rata-Rata pendapatan sampai saat ini adalah: $',Ratabiaya(Tbiaya,i):1:2);
      writeln('Total Pendapatan sampai saat ini adalah    : $',Tbiaya:1:2);
      writeln(garis);
      Close(Filepel);
     End; 

  Writeln; 
  Write('Hajar Enter untuk melanjutkan...');Readkey;
End; 
 
Procedure tampil_id;
Var i    : Integer; 
    a : Byte; 
    Lagi : Char;
Begin
  Ul:='Y'; 
  Lagi:='Y'; 
  Repeat  
    Clrscr; 
    Write('Silahkan masukkan ID yang anda cari : ');Readln(a);
    BukaFile; 
    If IoResult <>  0 Then 
       Write('Maaf Data Masih Kosong Gan,,,! ')
    Else 
      Begin       
        Writeln('                    DATA PELANGGAN                  ');
        Writeln; 
        writeln(garis);
        Writeln(' NO   ID                NAMA    BIAYA      ALAMAT    T.REG');
        writeln(garis);
        i:=0;
        While Not EoF(Filepel) Do 
          Begin             
            Read(Filepel,Data); 
            If Data.id=a then 
               Begin
                 Inc(i); 

                 Writeln(i:3,Data.id:6,Data.Nama:20,Data.biaya:8:2,Data.alamat:10,Data.tanggal:10);
               End;
          End; 
        writeln(garis);
      Close(Filepel); 
     End; 
    Writeln; 
    Write('Mau Lihat Data Lagi Gan [Y/T]: ');Lagi:=Upcase(Readkey); 
  Until Lagi<>'Y'; 
End; 
 

Begin 
  Repeat
    Menu;
    case Pil of
    '1'  : Tambah;
    '2'  : Edit;
    '3'  : Hapus;
    '4'  : Tampil;
    '5'  : tampil_id;
    '6'  : TambahBarang;
    '7'  : tampilBarang;
    '8'  : tampil_idBarang;
    end;
  Until (Ul<>'Y') Or (Pil='9');
End.

Silahkan dicopas, jika rekan menggunakan editor turbo pascal, silahkan di coding ulang ampe mata copot.. hehe, (sebenernya bisa di akali :D )
Tapi bagi rekan yang menggukan platform linux, cukup copas di editor text dan meng'compailnya menggunakan fpc seperti di ubuntu, dan sintax pascal berjalan dimulti platform tampa harus edit-edit...

1 komentar:

  1. Mantap gan. Sangat bermanfaat bagi tugas besar ane di kampus. hehehe

    BalasHapus