Docstoc

Aplikasi KTB pada Busway

Document Sample
Aplikasi KTB pada Busway Powered By Docstoc
					                           LAPORAN
                    Project 2 Topik 3
              Aplikasi KTB Pada Busway




                             Oleh :
                      KELOMPOK A1
                08501007    Desi Lestari Handayani
                08501009    Eri Setiawan
                08501010    Faizal Akhmad Sidik
                08501016    Irwan Nugraha
                08501029    Selly Amaliatama
                08501035    Yudhitaprawesti Shahranuwiragusti




Laporan Ini Diajukan Untuk Memenuhi Tugas Mata Kuliah Project 2
                            Topik 3


                    Manager : Ida Suhartini
   JURUSAN TEKNIK KOMPUTER DAN INFORMATIKA
             POLITEKNIK NEGERI BANDUNG
                             2009
                         KATA PENGANTAR


    Pertama-tama kami panjatkan puji syukur atas kehadirat Allah SWT
berkat Rahmat dan Karunia-Nya kami      dapat menyusun laporan serta
terseleseikannya Topik 3 pada Project 2 ini mengenai Aplikasi KTB Pada
Busway. Dimana dalam laporan ini membahas tentang definisi, spesifkasi,
perancangan, pengujian, serta kesimpulan dan saran dalam program yang
kami buat. Pada program yang kami buat ini, cukup banyak pertimbangan
akan fitur yang disesuaikan dengan kebutuhan yang kami inginkan maka
dari itu program ini juga cukup membantu mempermudah petugas busway
maupun pelanggan busway.
    Tak    lupa   kami   mengucapkan     terima    kasih    kepada     para
pembimbing/manager       yang   telah   membimbing         kami      hingga
terselesaikannya Topik 3 serta teman-teman sekalian yang cukup
membantu dalam pembuatan Topik 3 ini.
    Kami sadar sepenuhnya bahwa pada Topik 3 ini masih belum
sempurna, untuk itu kritik dan saran yang membangun kami harapkan dari
rekan-rekan sekalian. Semoga laporan yang kami buat ini cukup membantu
rekan-rekan dalam menjalankan program yang kami buat.




                                                  Bandung, 14 Juni 2009
                                                            Penyusun




                                                           Kelompok A1




                                                                          2
                                                DAFTAR ISI

KATA PENGANTAR....................................................................................             2
DAFTAR ISI..................................................................................................   3
BAB I PENDAHULUAN …….......................................................................                    4
1.1       Latar Belakang …………………………..…………….........................                                            4
1.2       Tujuan ………....................................................................................       4
1.3       Ruang Lingkup …………………………..…………………………....…                                                            4
BAB II PEMECAHAN MASLAH …...............................................................                       5
2.1       Definisi Program ………………………...............................................                            5
          2.1.1      Asumsi Program ..…………...................................................                  5
          2.1.2      Batasan Program ..…………...................................................                 5
2.2       Alur Program & Struktur Chart...........................................................             5
2.3       Struktur Data …………………..…………..........................................                                8
2.4       Spesifikasi Modul……………...………...............................................                          9
2.5       Algoritma………….…………...…………........................................... .                               12
BAB III Aplikasi……….................................................................................           25
3.1       Listing…….……………………..………….......................................... .                                 25
BAB IV KESIMPULAN DAN SARAN.......................................................... .                        47




                                                                                                                3
                                 BAB I
                           PENDAHULUAN


1.1    Latar Belakang
      Perkembangan zaman yang menyebabkan teknologi semakin maju
menyebabkan banyak terciptanya alat - alat baru serta hal – hal baru yang
membantu serta mempermudah dalam aktivitas manusia. Dalam bidang IT
misalnya, banyak programmer yang membuat program – program yang
mempermudah proses administrasi pada instansi – instansi di dunia. Kami
pun termotivasi untuk mencoba membuat program yang dapat membantu
serta mempermudah manusia dalam kinerjanya, yakni dengan membuat
“Aplikasi KTB Pada Busway”. Dimana pada program ini kami mencoba
membantu pengadministrasian busway agar menjadi lebih mudah,
terorganisir, serta efisien. Dengan menggunakan bantuan barcode reader
pada aplikasi ini dikartu berlangganan sehingga petugas hanya tinggal
menggunakan aplikasi ini dengan membaca barcode dengan barcode
reader.


1.2    Tujuan
      Tujuan dari aplikasi ini dirancang untuk membantu pegawai busway
untuk mengorganisir mengenai sistem Kartu Berlangganan pada Busway,
sehingga pegawai tidak terlalu dipersulit dengan pendataan secara manual.


1.3    Ruang Lingkup
      Pengontrolan data pengguna KTB (Kartu Tanda Berlangganan)
      dengan adanya penyimpanan segala data yang berisi identitas pada
      File_pelanggan
      Mengakses berbagai transaksi yang akan dilakukan pengguna KTB
      Peningkatan proses penginputan dengan menggunakan barcode
      reader
      Penyediaan kartu tanda berlangganan yang dilengkapi dengan
      barcodeberikut barcode readernya



                                                                        4
                                      BAB II
                           PEMECAHAN MASALAH


2.1       Definisi Program Aplikasi KTB Pada Busway
      Program ini merupakan suatu program aplikasi yang dibuat untuk
membantu dalam pengelolaan data terhadap petugas Busway dan
memberikan informasi terhadap pelanggan Busway. Program ini juga
merupakan program aplikasi dengan implementasi sistem barcode.
Program aplikasi ini dapat membaca barcode dari KTB (Kartu Tanda
Berlangganan) Busway dan melakukan beberapa perlakuan lainnya dalam
penggunaan KTB busway.


      2.1.1       Asumsi Program
      Program yang kami buat memiliki asumsi sebagai berikut:
      -       saat pembelian tiket, program tidak memperdulikan bus dalam
              keadaan penuh atau tidak.
      -       setiap registrasi kartu baru pelanggan akan mendapatkan saldo
              awal Rp 50.000
      -       setiap isi ulang saldo sebesar Rp 50.000, maka masa aktif akan
              bertambah 30 hari dari waktu pengisian ulang, jika mengisi
              sebesar Rp 100.000, masa aktif akan bertambah 45 hari, dan jika
              mengisi sebesar Rp 200.000, masa aktif akan bertambah 60 hari,
              dan masa tenggang selalu akan bertambah 30 hari dari masa aktif.


      2.1.2       Batasan Program
          •    No KTB diinputkan secara manual saat registrasi
          •    Masih menggunakan barcode reader keyboard wedge


2.2 Alur Program & Struktur Chart
          1. pilih transaksi yang akan dilakukan.




                                                                             5
2. petugas menginputkan barcode yang ada pada KTB pelanggan
   dengan barcode reader ( kecuali jika transaksi yang dilakukan
   adalah regristrasi dan melihat laporan).
3. jika transaksi yang dipilih adalah membeli tiket busway maka
   setelah tiket keluar saldo yang ada akan dikurangi.
4. jika transaksi yang dipilih adalah mengisi ulang saldo maka saldo
   akan bertambah sesuai permintaan pelanggan.
5. jika transaksi yang dipilih adalah blok id, maka id yang diinputkan
   ketika awal akan diblok.
6. sedangkan registrasi maka akan dilakukan pengisian data
   pelanggan terlebih dahulu.




                                                                    6
                                                MAIN




                             Cek_ID                                   Menu




                               Member                    Registrasi                   Laporan

                     id
                                            Tgl1.tgl2                   Masa          Masa         tambah
                                                                        aktif         tenggang
             Cek                 Cek              Tulis                                           Tampil
            Status              Saldo           Laporan                  Print Date              laporan



                                            Isdate.sama                         -1


                               id                                 id
                                                    id

                                                  Isi                  Blok
                  Transaksi                                            Id
                                                Saldoo
                                                                                             tanggal
                                                    id
                                        1
                                              Fdata
Tgl1.tgl2
                                                                                                 temp
    Banding tgl           Val Saldo            Laporan
                                             penumpang

                                                                                        30

                                                                                 60

                              Tambah
                               date




                                                                                                  7
           2.3 Struktur Data


           #Pelanggan Busway

Nokat    Nama     Jenis_id     No_id    No_telp       Saldo     Masa_aktif   Masa_tenggang   Stat
(char)   (char)    (char)      (char)   (char)       (double)    (DATE)         (DATE)       (char)




           #Laporan
                   Date                           Jumlah
                  (DATE)                           (int)




           #Penumpang
                   Date                           Jumlah
                  (DATE)                           (int)




                                                                                     8
2.4      Spesifikasi Modul
      1. Modul Menu
         Prosedur : menampilkan pilihan-pilihan menu yang terdapat pada
         program yang akan dilakukan
         IS: User belum memilih pilihan menu
         FS: user sudah memilih pilihan menu
      2. Modul Registrasi
         Prosedur : menyimpan data identitas pelanggan baru pada file
         IS: data pelanggan belum tersimpan
         FS: data pelanggan sudah disimpan dalam file
      3. Modul Member
         Prosedur: memberikan pilihan transaksi yang dapat dilakukan
         pelanggan (member)
         IS: belum memilih pilihan transaksi
         FS: ada pilihan transaksi yang dilakukan oleh member


      4. Modul TambahDate
         Prosedur : menambahkan tanggal masa aktif dan masa tenggang
         IS: masa aktif dan masa tenggang belum bertambah
         FS: masa aktif dan masa tenggang sudah bertambah
      5. Modul isdate_sama
         Function mengecek apakah dua tanggal yang dikirimkan sama atau
         tidak
         IS: belum diketahui status tanggal data1 sama atau tidak dengan
            tanggal data2
         FS: sudah diketahui status tanggal data1 sama atau tidak dengan
            tanggal data2
      6. Modul Cek Saldo
         Prosedur menampilkan saldo, masa aktif dan masa tenggang yang
         tersedia sesuai dengan id yang diinputkan
         IS: saldo, masa aktif dan masa tenggang belum diketahui
         FS: saldo, masa aktif dan masa tenggang sudah diketahui




                                                                           9
7. Modul Transaksi
   Prosedur : modul untuk membeli tiket
   IS: pelanggan belum membeli tiket
   FS: pelanggan sudah membeli tiket, dan saldonya berkurang
8. Modul val_saldo
   Function: mengecek saldo apakah saldo ≥ 5000 tidak
   IS: status saldo tidak diketahui
   FS: status saldo tidak diketahui
9. Modul block_id
   Prosedur : memblokir id sesuai dengan id yg diinputkan
   IS: id belum terblokir
   FS: id sudah terblokir
10. Modul Laporan
   Prosedure: menampilkan laporan yang ada
   IS: laporan belum ditampilkan
   FS: laporan sudah ditampilkan
11. Modul Cek_status
   Function : untuk mengecek apakah ada tidaknya id yang diinputkan
   IS : status id belum diketahui
   FS: status id sudah diketahui
12. Modul lap_penumpang
   Prosedure: menyimpan laporan penumpang yang menggunakan
   KTB
   IS : laporan belum disimpan
   FS: laporan sudah disimpan dalam file
13. Modul tampil_laporan
   Prosedure: menampilkan laporan jumlah pelanggan baru KTB
   IS : tidak mengetahui jumlah pelanggan baru yang daftar perhari
   FS: mengetahui jumlah pelanggan baru yang daftar perhari




                                                                     10
14. Modul tampil_penumpang
   Prosedure: menampilkan laporan jumlah penumpang yang
   menggunakan KTB per hari
   IS : tidak mengetahui jumlah penumpang yang menggunakan KTB
   FS: mengetahui jumlah penumpang yang menggunakan KTB


15. Modul isi_saldo
   Prosedure: mengisi saldo pada id sesuai dengan voucher yang
   tersedia
   IS : saldo belum bertambah
   FS: saldo sudah bertambah


16. Modul fdata
   Prosedure: mencari record dari data
   IS : record data belum diketahui
   FS: record data sudah diketahui


17. Modul cek_id
   Function: mengecek masa tenggang id yang ada di file
   IS : masa tenggang id belum diketahui
   FS: masa tenggang id sudah diketahui, jika melampui tanggal hari ini
   maka id akan diblokir


18. Modul bandingtgl
   Function: membandingkan tanggal pertama dengan tanggal kedua
   IS : belum mengetahui status tanggal pertama dan tanggal kedua
   FS: sudah mengetahui status tanggal pertama dan tanggal kedua




                                                                     11
 19. Modul tulis_laporan
     Procedure : menulis laporan ke file
     IS : laporan belum tertulis di file
     FS : laporan sudah tertulis di file




2.5 Algoritma
   1. Modul Menu
    Deklarasi Variabel:
           plh : char
           mlh : char
     Begin
     write (layar) ” Menu Utama”
     read (keyboard) plh
     switch (plh)
             Case „1‟ : Registrasi()
             Case „2‟ : Member()
             Case „3‟ : Laporan()
             Case „4‟ : _exit(0)
     End


   2. Modul Registrasi
       Deklarasi Variabel:
                    jawaban : string
                    temp : DATE
     IS : belum ada data pelanggan baru
     FS : penambahan data pelanggan baru
     Begin
             read(keyboard)data.nama, data.jenis_id, data.no_id,
     data.no_telp data.saldo  50000
             data.stat  „0‟
             data.masa_aktif  tanggal (mengambil dari sistem)




                                                                   12
         TambahDate(tanggal, &temp, 30)
         data.masa_tenggang  temp
         write (file pelanggan) data
         tulis_laporan(1)
 End


3. Modul TambahDate
 Begin
         neww.tgl  neww.tgl – TglAkhir(neww)
         neww.bln  neww.bln +1
 while ( neww.tgl > TglAkhir(neww) )
         do
         neww.tgl  neww.tgl – TglAkhir(neww)
         neww.bln  neww.bln+1
         if (neww.bln > 12) then
                 neww.bln  neww.bln-12
                 neww.bln  neww.thn+1
         endif
 Endwhile
 x.tgl  neww.tgl
 x.bln  neww.bln
 x.thn  neww.thn
 End


4. Modul Tulis Laporan
 Deklarasi Variabel:
 Besar : long
 Begin
 read (file_hasil) asal.date, asal.jumlah
 if ( hasil  NULL) then
         asal.date  tanggal
         asal.jumlah  1




                                                13
         write (file_hasil)asal
 else
         read (File_hasil) asal
         if ( isdate_sama(asal.date+tambah) ) then
                 asal.jumlah  asal.jumlah+tambah
                 write (file_hasil) asal
         else
                 asal.date  tanggal
                 asal.jumlah  1
                 write(file_hasil) asal
         endif
 endif
 End


5. Modul isdate_sama
 Begin
 If ( (data1.tgl=data2.tgl) and (data1.bln=data2.bln) and
   (data1.thn=data2.thn) ) then
         return (.T.)
 else
         return (.F.)
 endif
 End
6. Modul Member
  Begin
  read (barcode) id
  if (cek_status(id)) then
         pakai  .T.
         cek_saldo(id)
         write(Date) data.masa_aktif
         write(Date) data.masa_tenggang
         write(Date) tanggal




                                                            14
           read(keyboard) pilih
           switch (pilih)
                  case 1: if (pakai) then
                                     transaksi(id)
                                     pakai  .F.
                             else
                                     write(layar) “Transaksi Gagal”
                             endif
                  case 2:isi_saldo(id)
                  case 3:blok_id(id)
   else
           write(layar) ”ID Tidak Ada”
   endif
   End
7. Modul transaksi
   Deklarasi Variabel:
                  Stat : Boolean
   Begin
           Stat  .T.
           Rewind (file_pelanggan)
           Read (file_pelangganz) pelanggan
           if ( (pelangganzNULL) ) then
                  write(layar) “File Error”
           else
                  read (file_pelangganz) data
                  while (file_pelangganz ≠ EOF and stat) do
                            If (data.nokat = id and data.stat=0) then
                                     stat  .F.
                            Else
                                     read (file_pelangganz) data
                            Endif
                  End while




                                                                        15
          stat  val_saldo (data.saldo)
          If ( stat=.T.) then
                           data.saldo  data.saldo - 5000
          else
                           write(layar)”Saldo Tidak Cukup”
                  end if
                  write(file_pelangganz,-1) data
          endif
          lap_penumpang()
          write(file_pelangganz) data.saldo
   End


8. Modul val_saldo
   Begin
          if ( saldo ≥ 5000 ) then
                  return (.T.)
          else
                  return (.F.)
          endif
   End


9. Modul Cek_saldo
   Begin
   status  .T.
   read(file_nokat)data
   if (nokat= NULL) then
          write(layar) “File Error”
   else
          read (file_nokat) data
          while (data.nokat=EOF and status)
                  if ( (id=data.nokat)0) and (data.stat0) ) then
                           write(layar)data.saldo




                                                                     16
                           write(layar)data.masa_aktif
                           write(layar)data.masa_tenggang
                           status  .F.
                   else
                           read(file_nokat) data
                   endif
           endwhile
   endif
   End
10. Modul blok_id
   Deklarasi Variabel:
                   i : integer
                   stat : boolean
   Begin
           stat  .T.
           read (File_pelang) data
           if (file_pelang≠NULL) then
                   read (file_pelang) data
                   while (pelang≠EOF and stat) do
                           if (data.nokat = id) then
                                   stat  .F.
                                   data.stat  „1‟
                           else
                                   read(file_pelang,1) data
                           endif
                   endwhile
                   write(file_pelang)data
           endif
           tulis_laporan(-1)
           write(layar) ”Kartu di-BLOKIR”
   End




                                                              17
11. Modul Laporan
   Begin
          Tampil_laporan()
   Tampil_penumpang()
   End
12. Modul cek_status
   Deklarasi Variabel:
                  ada : boolean
                  sama : boolean
   Begin
   ada  .T.
   sama  .T.
   if ( file_st = NUL ) then
          write(layar) “File Error”
   else
          read(file_st) data
          while ( (file_st ≠ EOF) and (data.nokat  0) ) do
                  if (id=data.nokat) then
                          sama  .F.
                          temp  data
                          if (data.stat  „1‟) then
                                  ada  .F.
                          endif
                  endif
                  read(file_st)data
          endwhile
          if (sama) then
                  ada  .F.
          endif
          if ( sama.F. and ada  .T.) then
                  data  temp
          endif




                                                              18
   endif
   return (ada)
   End


13. Modul lap_penumpang
   Begin
           read(file_hasil)asal
           if (hasil=NULL) then
                   asal.date  tanggal
                   asal.jumlah  1
                   read(file_hasil)asal
                   write(file_hasil,1)asal
           else
                   read(file_hasil)asal
                   if ( isdate_sama(asal.date,tanggal) ) then
                           asal.jumlah  asal.jumlah+tambah
                           write(file_hasil)asal
                   else
                           asal.date  tanggal
                           asal.jumlah  1
                           write(file_hasil) asal
                   endif
           endif
    End


14. Modul tampil_laporan
   Deklarasi Variabel:
                   total : integer
   Begin
           read (file_hasil)data
           if ( hasil=NULL) then
                   write(layar)”File Error”




                                                                19
        else
                read(file_hasil)data
                write(layar)”Jumlah Anggota KTB Baru”
                write(layar)”Tanggal”
                write(layar)”Jumlah”
                while ( hasil≠EOF ) do
                       write(layar) data.date.tgl
                       write(layar) data.date.bln
                       write(layar) data.date.thn
                       write(layar) data.jumlah
                       total  total+data.jumlah
                       read(file_hasil) data
                endwhile
                write(layar)”Jumlah anggota KTB :”
                write(layar)total
        endif
  End


15. Modul tampil_penumpang
  Deklarasi Variabel:
                total : integer
  Begin
        read(File_hasil)
        if (hasil=NULL) then
                write(layar) “File Error”
        else
                read(file_hasil)data
                write(layar) ”Jumlah Penumpang Pengguna KTB”
                write(layar) ”Tanggal”
                write(layar) “Jumlah”
                while (hasil≠EOF) do
                       write(layar)data.date.tgl




                                                               20
                        write(layar)data.date.bln
                        write(layar)data.date.thn
                        write(layar)data.jumlah
                        total  total+data.jumlah
                        read(file_hasil)data
                 endwhile
                 write(layar)total
         endif
   End


16. Modul isi_saldo
   Deklarasi Variabel:
         pil : char
         record : integer
         temp : integer
   Begin
         read (file_baru)data
         if ( baru= NULL) then
                 write(layar) “File Error”
         else
                 write(layar) data.saldo
                 write(layar) data.masa_aktif.tgl
                 write(layar) data.masa_aktif.bln
                 write(layar) data.masa_aktif.thn
                 write(layar)”Pilihan Saldo”
                 read(keyboard)pil
                 switch(pil)
                 case '1': TambahDate(tanggal,&data.masa_aktif,30)
                            data.saldo  data.saldo + 50000


 TambahDate(tanggal,&data.masa_tenggang,60)
                 case '2': TambahDate(tanggal,&data.masa_aktif,45)




                                                                     21
                           data.saldo  data.saldo + 100000


 TambahDate(tanggal,&data.masa_tenggang,75)
                 case '3': TambahDate(tanggal,&data.masa_aktif,60)
                           data.saldo  data.saldo + 200000


 TambahDate(tanggal,&data.masa_tenggang,90
         endif
         temp data
         record  fdata(id)
         write(file_baru)temp
         data  temp
         write(layar)data.saldo
         write(layar)data.masa_aktif.tgl
         write(layar)data.masa_aktif.bln
         write(layar)data.masa_aktif.thn
         write(layar)data.masa_tenggang.tgl
         write(layar)data.masa_tenggang.bln
         write(layar)data.masatenggang.thn
   End


17. Modul fdata
   Deklarasi Variabel:
                 i : integer
                 stat: boolean


   Begin
         i0
         read (file_no) data
         if (no  NULL) then
                 write(layar)”File Error”
         else




                                                                     22
                  read (File_no) data
                  while ( (no=EOF) and (data.stat‟0‟) ) do
                          if ( (data.nokat=id)0) and (data.stat‟0‟)


                                  stat  .F.
                          else
                                  read (File_no)data
                          endif
                          i  i+1
                  endwhile
                  if (no=EOF) then
                          i0
                  endif
          endif
          return (no)
   End


18. Modul Cek_Id
   Deklarasi Variabel:
                  besar: integer


   Begin
          read(file_cek)temp
          If ( file_cek = NULL ) then
                  write(layar)”File Error”
   else
          read(file_cek,1)temp
          while ( file_cek ≠ EOF) do
                  if (≠cek_waktu(temp.masa_tenggang) then
                          temp.stat  „1‟
                          write(file_cek,1)temp
                  endif




                                                                        23
                 read(file_cek)temp
   endwhile
         endif
   End


19. Modul bandingtgl
         Deklarasi Variabel :
   stat : Boolean


    Begin
   If (D1.thn > D2.thn ) then
                 stat.F.
         else
                 if (D1.thn = D2.thn) then
                         if (D1.bln>D2.bln) then
                                 stat.F.
                         else
                                 if (D1.bln==D2.bl) and (D1.tgl>D2.tgl)then
                                         stat  .F.
                                 endif
                         endif


                 endif
         return (stat)
    End




                                                                         24
                               BAB III
                              APLIKASI


3.1 Listing


      // main tanggal 15 Juni 2009

      #   include   <iostream.h>
      #   include   <conio.h>
      #   include   <stdlib.h>
      #   include   "date.h"
      #   include   "boolean.h"
      #   include   "date.cpp"
      #   include   <string.h>
      #   include   <ctype.h>

      /* tipe bentukan baru */
      typedef struct
           {
                 char       nokat [13];
                 char       nama [40];
                 char       jenis_id[2];
                 char       no_id [13];
                 char       no_telp [14];
                 long       saldo;
                 DATE       masa_aktif;
                 DATE       masa_tenggang;
                 char       stat; // jika stat 1, maka kartu
      sudah diblokir
           }pelanggan;

      typedef struct
           {
                 DATE date;
                 int jumlah;
           }laporan;

           /* prototype */
      void menu ();
      /* menampilkan pilihan menu yang tersedia di program */
      void Registrasi();
      /* menyimpan data anggota baru pada file */
      void TambahDate(DATE neww,DATE *x,int tambah);
      /* menambah tanggal masa aktif dan masa tenggang */
      void tulis_laporan (int tambah);
      /* menyimpan jumlah anggota KTB dan jumlah anggota KTB
      yang baru per hari */
      boolean isdate_sama (DATE data1,DATE data2);
      /* memeriksa tanggal yang dikirimkan sama atau tidak */




                                                           25
void Member ();
/* menampilkan menu yang tersedia untuk pemilik KTB */
boolean cek_status(char id[13]);
/* memeriksa id yang diinputkan */
void Cek_saldo (char id[13]);
/* menampilkan jumlah saldo yang tersisa sesuai dengan
id yang diinputkan */
void transaksi(char id[13]);
/* modul untuk membeli tiket */
boolean val_saldo(double saldo);
/*   mengecek   saldo  yang   tersisa   untuk  melakukan
transaksi */
void lap_penumpang(int tambah);
/* menyimpan laporan penumpang yang menggunakan KTB ke
dalam file */
void isi_saldo(char id[13]);
/* mengisi saldo sesuai dengan voucher yang tersedia */
int fdata(char id[13]);
/* mencari record dari data */
void blok_id(char id[13]);
/* memblokir id sesuai dengan id yang diinputkan */
void Laporan ();
/* menampilkan laporan yang tersedia */
void tampil_laporan ();
/* menampilkan laporan jumlah anggota KTB per hari dan
jumlah anggota KTB seluruhnya */
void tampil_penumpang();
/* menampilkan jumlah penumpang yang menggunakan KTB
per hari */
void cek_id ();
/* mengecek id yang diinputkan */
boolean bandingtgl(DATE D1,DATE D2);
/* membandingkan tanggal */


     /* deklarasi variabel global */
pelanggan data;
DATE            tanggal=CurrentDate();

     /* program utama */
void main()
{
     cek_id();
     menu ();
}

void menu()
{
     char plh;

        clrscr();
        gotoxy(25,6);cout<<"==============================
===";




                                                        26
        gotoxy(25,7);cout<<"=---------- Menu Utama -------
--=";
        gotoxy(25,8);cout<<"==============================
===";
        gotoxy(25,9);cout<<"==============================
===";
     gotoxy(25,10);cout<<"=============================
====";
     gotoxy(25,11);cout<<"=               1. Registrasi
=";
     gotoxy(25,12);cout<<"=----------------------------
---=";
     gotoxy(25,13);cout<<"=                  2. Member
=";
     gotoxy(25,14);cout<<"=----------------------------
---=";
     gotoxy(25,15);cout<<"=                 3. Laporan
=";
     gotoxy(25,16);cout<<"=----------------------------
---=";
     gotoxy(25,17);cout<<"=                  4. Keluar
=";
     gotoxy(25,18);cout<<"=----------------------------
---=";
     gotoxy(25,19);cout<<"=-----------        ---------
---=";
     gotoxy(25,20);cout<<"=----------------------------
---=";
     gotoxy(40,19);
     cin>>plh;
     switch(plh)
     {
          case '1':Registrasi();break;
          case '2':Member();break;
          case '3':Laporan();break;
          case '4':_exit(0); break;
          default:
          clrscr();

        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
             gotoxy(25,9);cout<<"!
!";
             gotoxy(25,10);cout<<"!!!!    Inputan    Salah
!!!!";
             gotoxy(25,11);cout<<"!
!";

     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!"; break;
     }
}




                                                        27
void Registrasi()
{
     FILE       *baru;

     char       jawaban;
     DATE       temp;


      if ((baru=fopen("pelanggan.dat","ab+"))==NULL)
      {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
      }
      else
      {
           do
           {
                 clrscr();
                 gotoxy(28,2);cout<<"-------------------
---------";
                 gotoxy(32,3);cout<<"-------------------
-";
                 gotoxy(37,4);cout<<"REGISTRASI";
                 gotoxy(32,5);cout<<"-------------------
--";
                 gotoxy(28,6);cout<<"-------------------
---------";
                 gotoxy(16,8);cout<<"---
(0)(0)(0)(0)(0)(0)(0)(00)(0)(0)(0)(0)(0)(0)(0)---";
                 gotoxy(16,9);cout<<"---
---";
                 gotoxy(16,10);cout<<"(0)   ID         :
(0)";
                 gotoxy(16,11);cout<<"(0)   Nama       :
(0)";
                 gotoxy(16,12);cout<<"(0)    Jenis Id :
(0)";
                 gotoxy(16,13);cout<<"(0)   No ID      :
(0)";
                 gotoxy(16,14);cout<<"(0)   Phone      :
(0)";
                 gotoxy(16,15);cout<<"---

        ---";
                gotoxy(16,16);cout<<"---
(0)(0)(0)(0)(0)(0)(0)(00)(0)(0)(0)(0)(0)(0)(0)---";


                gotoxy(15,20);cout<<"Jenis ID";
                gotoxy(15,21);cout<<"1. KTP";
                gotoxy(15,22);cout<<"2. SIM";
                gotoxy(47,21);cout<<"Y     :      tambah
Registrasi";




                                                      28
                   gotoxy(47,22);cout<<"T : keluar";

                   gotoxy(32,10);
                   gets(data.nokat);

                   gotoxy(32,11);
                   gets(data.nama);

                   do
                   {
                        gotoxy(32,12);
                        cin>>data.jenis_id;
                }
                while((((atoi(data.jenis_id))>2)      ||
(atoi(data.jenis_id))<0)||isalpha(data.jenis_id[1])||is
alpha(data.jenis_id[0]));

                   gotoxy(32,13);
                   gets(data.no_id);

                   gotoxy(32,14);
                   gets(data.no_telp);

                   data.saldo = 50000;
                   data.stat = '0';
                   TambahDate(tanggal, &temp, 30);
                   data.masa_aktif=temp;
                   TambahDate(tanggal, &temp, 60);
                   data.masa_tenggang=temp;

                   fwrite(&data, sizeof(data), 1, baru);

                   tulis_laporan(1);

                   gotoxy(25, 18);
                   cout<<"ada    yang         mau    registrasi
lagi(Y/T)? ";
                   jawaban = getche();
           }
           while    (   jawaban   ==    'Y'    ||   jawaban   ==
'y');cout<<"\n";

          fclose (baru);
          menu();
     }
}

void TambahDate(DATE neww,DATE *x,int tambah)
{
     neww.tgl = neww.tgl + tambah;
     do
     {
           neww.tgl = neww.tgl - TglAkhir(neww);




                                                              29
          neww.bln = neww.bln + 1;
          if(neww.bln>12)
          {
                neww.bln = neww.bln- 12;
                neww.thn = neww.thn + 1;
          }
     }while(neww.tgl >TglAkhir(neww));
     (*x).tgl=neww.tgl;
     (*x).bln=neww.bln;
     (*x).thn=neww.thn;
}

void tulis_laporan(int tambah)
{
     FILE *hasil;
     laporan asal;
     long besar;
     besar=sizeof(laporan);

     if((hasil=fopen("Laporan.dat", "r+b"))==NULL)
     {
          fclose(hasil);
          asal.date=tanggal;
          asal.jumlah=1;
          hasil=fopen("Laporan.dat", "wb");
          fwrite(&asal, sizeof(asal),1,hasil);
          fclose(hasil);
     }
     else
     {
          fseek(hasil,0,SEEK_END);
          fseek(hasil,-besar,SEEK_CUR);
          fseek(hasil,0,SEEK_CUR);
          fread(&asal, sizeof(asal),1,hasil);
          if(isdate_sama(asal.date,tanggal))
          {
                asal.jumlah=asal.jumlah+tambah;
                fseek(hasil,-besar,SEEK_CUR);
                fseek(hasil,0,SEEK_CUR);
                fwrite(&asal, sizeof(asal),1,hasil);
          }
          else
          {
                asal.date=tanggal;
                asal.jumlah=tambah;
                fseek(hasil,0,SEEK_CUR);
                fwrite(&asal, sizeof(asal),1,hasil);
          }
     }
     fclose(hasil);
}

boolean isdate_sama(DATE data1,DATE data2)




                                                       30
{
     if((data1.tgl==data2.tgl)&&(data1.bln==data2.bln)&
&(data1.thn==data2.thn))
     {
           return (true);
     }
     else return (false);
}

void Member ()
{
     char id[13];
     char jawaban;
     int pilih;
     boolean pakai;

     clrscr();
     gotoxy(22,3);cout<<"==============================
=======";
     gotoxy(22,4);cout<<"==             ID            :
==";
     gotoxy(22,5);cout<<"==============================
=======";


     gotoxy(32,4);
     cin>>id;

     if (cek_status(id))
     {
          pakai=true;
          do
          {
                clrscr();
                Cek_saldo(id);




     gotoxy(10,14);cout<<"....======..======..======...
.======..======....======....";
                gotoxy(10,15);cout<<"=
..                ..                    =";
                gotoxy(10,16);cout<<"..    1. Transaksi
.. 2. Isi Saldo ..      3. Block ID   ..";
                gotoxy(10,17);cout<<"=
..                ..                    =";

     gotoxy(10,18);cout<<"....======..======..======...
.======..======....======....";

                gotoxy(34,21);cout<<" = .. .. =";
                gotoxy(34,22);cout<<"...      ...";




                                                      31
          gotoxy(34,23);cout<<" = .. .. =";
          gotoxy(39,22);cin>>pilih;

          switch (pilih)
          {
               case 1: if (pakai)
                            {

transaksi(id); pakai=false;
                                      }
                                      else
                                      {
                                                  clrscr();

gotoxy(15,7);cout<<"x                   x";

gotoxy(15,8);cout<<"    x              x";

gotoxy(15,9);cout<<"        x     x";

gotoxy(15,10);cout<<"           x";

gotoxy(15,11);cout<<"        x        x ";

gotoxy(15,12);cout<<"    x             x";

gotoxy(15,13);cout<<"x                            x";


gotoxy(32,10);cout<<"x                      x";

gotoxy(32,11);cout<<"    x             x";

gotoxy(32,12);cout<<"        x        x";

gotoxy(32,13);cout<<"            x";

gotoxy(32,14);cout<<"        x        x ";

gotoxy(32,15);cout<<"    x             x";

gotoxy(32,16);cout<<"x                 x";


gotoxy(49,7);cout<<"x                   x";

gotoxy(49,8);cout<<"    x              x";

gotoxy(49,9);cout<<"        x     x";

gotoxy(49,10);cout<<"            x";

gotoxy(49,11);cout<<"        x        x ";




                                                              32
        gotoxy(49,12);cout<<"    x       x";

        gotoxy(49,13);cout<<"x           x";
                                                gotoxy(25,
20);

        cout<<"transaksi tidak dapat dilakukan dua kali
\n";
                                     }
                                     break;
                        case 2: isi_saldo(id); break;
                        case 3: blok_id(id); break;
                        default :
                        clrscr();

        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
                        gotoxy(25,9);cout<<"!
!";
                        gotoxy(25,10);cout<<"!!!!
Inputan     Salah   !!!!";
                        gotoxy(25,11);cout<<"!
!";

     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!"; break;
                 }
                 gotoxy(25,25);
                 cout<<"mau      melakukan    transaksi
lain(Y/T)? ";
                 jawaban = getche();
           }
           while ( jawaban == 'Y' || jawaban ==
'y');cout<<"\n";
     }
     else
     {

        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
             gotoxy(25,9);cout<<"!
!";
             gotoxy(25,10);cout<<"!!!!         Tidak   ada   ID
!!!!";
             gotoxy(25,11);cout<<"!
!";

     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!";
          getche();
     }
     menu();




                                                             33
}

boolean cek_status(char id[13])
{
     FILE *st;

     boolean    ada;
     boolean sama;
     pelanggan temp;
     ada=true;
     sama=true;
     clrscr();
     if((st=fopen("pelanggan.dat", "rb"))==NULL)
     {
          clrscr();
          gotoxy(35,10);cout<<" GAGAL DIBUKA ";
     }
     else
     {
          fread(&data,sizeof(data),1,st);
          while ((!feof(st)) && (ada))
          {
                if (strcmp(id, data.nokat)==0)
                {
                     sama=false;
                     temp=data;
                     if (data.stat=='1')
                     {
                           ada=false;
                     }
                }
                fread(&data,sizeof(data),1,st);
          }

          if (sama)
          {
               ada=false;
          }
          if(sama==false&&ada==true)
          {
               data=temp;
          }
     }
     fclose(st);
     return(ada);
}

void Cek_saldo (char id[])
{
     FILE *nokat;

     boolean    status;




                                                   34
     status=true;
     if((nokat=fopen("pelanggan.dat","rb"))==NULL)
     {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
     }
     else
     {
           fread(&data,sizeof(data),1,nokat);
           while ((!feof(nokat))&&(status))
           {
                if
((strcmp(id,data.nokat)==0)&&(data.stat=='0'))
                {

     gotoxy(22,2);cout<<"..............................
......";
                     gotoxy(26,2);cout<<data.nama;

      gotoxy(22,3);cout<<"==============================
======";
                       gotoxy(22,4);cout<<"||
Saldo               ||";
                       gotoxy(22,5);cout<<"||-----------
----------------------||";
                       gotoxy(22,6);cout<<"||
Rp "<<data.saldo<<"              ||";

      gotoxy(22,7);cout<<"||============================
=====||";
                       gotoxy(22,8);cout<<"||        Masa
Aktif    || Masa Tenggang ||";
                       gotoxy(22,9);cout<<"||-----------
-----||---------------||";
                       gotoxy(22,10);cout<<"||
";PrintDate(data.masa_aktif);cout<<"                   ||
";PrintDate(data.masa_aktif);cout<<"    ||";

     gotoxy(22,11);cout<<"||===========================
======||";

                       status=false;
                }
                else
                {

     fread(&data,sizeof(data),1,nokat);
                }
          }
     }
     fclose(nokat);
}




                                                       35
void transaksi(char id[13])
{
     boolean stat;
     stat=true;
     int besar;
     besar=sizeof(data);
     FILE* pelangganz;
     boolean hh;
     clrscr();
     if((pelangganz=fopen("pelanggan.dat","r+b"))==NULL
)
     {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
     }
     else
     {
           fread(&data,sizeof(data),1,pelangganz);
           while((!feof(pelangganz))&&(stat))
           {

        if((strcmp((data.nokat),id)==0)&&(data.stat=='0'))
                   {
                        stat=false;
                   }
                   else
                   {

        fread(&data,sizeof(data),1,pelangganz);
                   }
             }
             if (hh=bandingtgl(tanggal,data.masa_aktif))
             {
                   if((stat=val_saldo(data.saldo))==true)
                   {
                        data.saldo=data.saldo-5000;
                        lap_penumpang(1);
                   }
                   else
                   {
                        clrscr();

        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
                         gotoxy(25,9);cout<<"!
!";
                         gotoxy(24,10);cout<<"!!!!   Saldo
Tidak Cukup     !!!!";
                         gotoxy(25,11);cout<<"!
!";

     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!";




                                                        36
                     }
                     fseek(pelangganz,-besar,SEEK_CUR);

        fwrite(&data,sizeof(data),1,pelangganz);
             }
             else
             {
                   clrscr();

        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
                     gotoxy(25,9);cout<<"!
!";
                     gotoxy(24,10);cout<<"!!!!    Masa    Aktif
Habis       !!!!";
                     gotoxy(25,11);cout<<"!
!";

     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!";
          }
     }
     fclose(pelangganz);
     if(hh)
     {

        gotoxy(26,2);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
             gotoxy(28,3);cout<<"!
!";
             gotoxy(27,4);cout<<"!!!!            Terima Kasih
!!!!";
             gotoxy(28,5);cout<<"!
!";

        gotoxy(26,6);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
        }

        gotoxy(27,13);cout<<"============================"
;
        gotoxy(27,14);cout<<"==------------------------
==";
        gotoxy(27,15);cout<<"==                           SALDO
==";
        gotoxy(27,16);cout<<"==-..---..---..---..---..-
==";
        gotoxy(27,17);cout<<"--------------------------
==";
        gotoxy(27,18);cout<<"==          Rp "<<data.saldo<<"
==";
        gotoxy(27,19);cout<<"==------------------------
==";




                                                             37
     gotoxy(27,20);cout<<"============================"
;
}

boolean bandingtgl(DATE D1,DATE D2)
{
     boolean stat=true;
     if(D1.thn>D2.thn)
     {
           stat=false;
     }
     else
     {
           if(D1.thn==D2.thn)
           {
                if(D1.bln>D2.bln)
                {
                      stat=false;
                }
                else
                {
                      if(D1.bln==D2.bln&&D1.tgl>D2.tgl)
                           stat=false;
                }
           }
     }
     return(stat);
}

boolean val_saldo(double saldo)
{
     return(saldo>=5000);
}

void lap_penumpang(int tambah)
{
     FILE *hasil;
     laporan asal;
     long besar;
     besar=sizeof(laporan);

     if((hasil=fopen("Penumpang.dat", "r+b"))==NULL)
     {
          fclose(hasil);
          asal.date=tanggal;
          asal.jumlah=1;
          hasil=fopen("Penumpang.dat", "wb");
          fwrite(&asal, sizeof(asal),1,hasil);
          fclose(hasil);
     }
     else
     {
          fseek(hasil,0,SEEK_END);




                                                       38
          fseek(hasil,-besar,SEEK_CUR);
          fseek(hasil,0,SEEK_CUR);
          fread(&asal, sizeof(asal),1,hasil);
          if(isdate_sama(asal.date,tanggal))
          {
               asal.jumlah=asal.jumlah+tambah;
               fseek(hasil,-besar,SEEK_CUR);
               fseek(hasil,0,SEEK_CUR);
               fwrite(&asal, sizeof(asal),1,hasil);
          }
          else
          {
               asal.date=tanggal;
               asal.jumlah=1;
               fseek(hasil,0,SEEK_CUR);
               fwrite(&asal, sizeof(asal),1,hasil);
          }
     }
     fclose(hasil);
}

void isi_saldo(char id[13])
{
     FILE *baru;
     char pil;
     pelanggan temp;
     int record,besar;
     besar=sizeof(data);
     if((baru=fopen("pelanggan.dat","r+b"))== NULL)
     {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
     }
     else
     {
           clrscr();
           gotoxy(22,3);cout<<"()() .. .. (.)(.) ...
(.)(.) .. .. ()()";
           gotoxy(22,4);cout<<"                     ()
()";
           gotoxy(22,5);cout<<" ()     Saldo Awal    :
()";
           gotoxy(22,6);cout<<" ()     Masa Aktif    :
()";
           gotoxy(22,7);cout<<"                     ()
()";
           gotoxy(22,8);cout<<"()() .. .. (.)(.) ...
(.)(.) .. .. ()()";
           gotoxy(44,5);cout<<data.saldo;

     gotoxy(44,6);cout<<data.masa_aktif.tgl<<"/"<<data.
masa_aktif.bln<<"/"<<data.masa_aktif.thn;




                                                      39
     gotoxy(25,11);cout<<"=============================
====";
           gotoxy(25,12);cout<<"=-------   Isi    Ulang
Saldo -------=";

     gotoxy(25,13);cout<<"=============================
====";
           gotoxy(25,14);cout<<"=              1. 50.000
=";
           gotoxy(25,15);cout<<"=----------------------
---------=";
           gotoxy(25,16);cout<<"=             2. 100.000
=";
           gotoxy(25,17);cout<<"=----------------------
---------=";
           gotoxy(25,18);cout<<"=             3. 150.000
=";
           gotoxy(25,19);cout<<"=----------------------
---------=";
           gotoxy(25,20);cout<<"=----------------------
---------=";
           gotoxy(25,21);cout<<"=----------|         |--
---------=";
           gotoxy(25,22);cout<<"=----------------------
---------=";
           gotoxy(40,21);
           cin>>pil;
           switch (pil)
           {
                case
'1':TambahDate(tanggal,&data.masa_aktif,30);
                                 data.saldo = data.saldo
+ 50000;

     TambahDate(tanggal,&data.masa_tenggang,60);
                                 break;
                case
'2':TambahDate(tanggal,&data.masa_aktif,45);
                                 data.saldo = data.saldo
+ 100000;

     TambahDate(tanggal,&data.masa_tenggang,75);
                                 break;
                case
'3':TambahDate(tanggal,&data.masa_aktif,60);
                                 data.saldo = data.saldo
+ 200000;

     TambahDate(tanggal,&data.masa_tenggang,90);
                                break;
                default :
                clrscr();




                                                      40
        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
                   gotoxy(25,9);cout<<"!
!";
                   gotoxy(25,10);cout<<"!!!!       Inputan
Salah     !!!!";
                   gotoxy(25,11);cout<<"!
!";

     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!";break;
           }
     }
     temp=data;
     record=fdata(id);
     fseek(baru,0,SEEK_SET);
     fseek(baru,besar*(record-1),SEEK_CUR);
     fwrite(&temp, besar, 1, baru);
     data=temp;
     clrscr();
     gotoxy(22,5);cout<<"()() .. .. (.)(.) .. .. (.)(.)
.. .. ()()";
     gotoxy(22,6);cout<<"                            ()
()";
     gotoxy(22,7);cout<<" ()    Saldo                 :
()";
     gotoxy(22,8);cout<<" ()     Masa Aktif           :
()";
     gotoxy(22,9);cout<<"   ()     Masa  Tenggang     :
()";
     gotoxy(22,10);cout<<"                           ()
()";
     gotoxy(22,11);cout<<"()() .. .. (.)(.) .. ..
(.)(.) .. .. ()()";

     gotoxy(44,7);cout<<data.saldo;
     gotoxy(44,8);cout<<data.masa_aktif.tgl<<"/"<<data.
masa_aktif.bln<<"/"<<data.masa_aktif.thn;
     gotoxy(44,9);cout<<data.masa_tenggang.tgl<<"/"<<da
ta.masa_tenggang.bln<<"/"<<data.masa_tenggang.thn;

        fclose(baru);
}

int fdata(char id[13])
{
     FILE       *no;

        int         i;
        boolean stat=true;

        i=0;




                                                        41
     if((no=fopen("pelanggan.dat","rb"))==NULL)
     {
          clrscr();
          gotoxy(35,10);cout<<" GAGAL DIBUKA ";
     }
     else
     {
          fread(&data,sizeof(data),1,no);
          while(!feof(no)&&stat)
          {

     if((strcmp(data.nokat,id)==0)&&data.stat=='0')
                {
                     stat=false;
                }
                else
                {
                     fread(&data,sizeof(data),1,no);
                }
                i++;
          }
          if(feof(no))
          {
                i=0;
          }
     }
     fclose(no);
     return (i);
}

void blok_id(char id[13])
{
     FILE *pelang;
     long besar;
     boolean stat=true;
     besar=sizeof(data);

     if((pelang=fopen("pelanggan.dat","r+b"))!=NULL)
     {
          fread(&data,sizeof(data),1,pelang);
          while((!feof(pelang))&&stat)
          {
                if (strcmp(data.nokat,id)==0)
                {
                     stat=false;
                     data.stat='1';
                }
                else
                {
                 fread(&data,sizeof(data),1,pelang);
                }
          }




                                                       42
             fseek(pelang,(-besar),SEEK_CUR);
             fwrite(&data,sizeof(data),1,pelang);
        }
        fclose(pelang);
        tulis_laporan(-1);
        clrscr();
        gotoxy(23,8);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!";
        gotoxy(25,9);cout<<"!
!";
        gotoxy(24,10);cout<<"!!!!!       Kartu   di-BLOKIR
!!!";
        gotoxy(25,11);cout<<"!
!";
     gotoxy(23,12);cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!";
}

void Laporan()
{
     FILE *pel;
     pelanggan local;
     tampil_laporan();
     cout<<"\n \n";
     tampil_penumpang();
     cout<<"\n \n";
     if((pel=fopen("pelanggan.dat","rb"))!=NULL)
     {
           fread(&local,sizeof(local),1,pel);
           while(!feof(pel))
           {
                cout<<local.nokat<<"    "<<local.nama<<"
"<<local.saldo<<" ";

                  PrintDate(local.masa_aktif);
                  cout<<" ";
                  PrintDate(local.masa_tenggang);
                  cout<<" ";
                  if(local.stat=='1')
                       cout<<"BLOCK\n";
                  else
                       cout<<"UnBlock\n";

                  fread(&local,sizeof(local),1,pel);
             }
        }
        fclose(pel);
        getch();
        menu();
}

void tampil_laporan()
{




                                                        43
      FILE *hasil;
      laporan data;
      unsigned int total=0;
      clrscr();
      if((hasil=fopen("Laporan.dat", "rb"))==NULL)
      {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
      }
      else
      {
           fread(&data,sizeof(data),1,hasil);
           gotoxy(25,2);cout<<" -----------------------
----";
           gotoxy(25,3);cout<<" -----       LAPORAN     ---
---";
           gotoxy(25,4);cout<<" ---      TOTAL MEMBER KTB
---";
           gotoxy(25,5);cout<<" -----------------------
----";
           gotoxy(2,7);cout<<"
=======================================================
=========";
           gotoxy(2,8);cout<<"
=======================================================
=========";
           gotoxy(2,9);cout<<"       ===            Tanggal
||             Jumlah           ===";
           gotoxy(2,10);cout<<"       ===----------------
---------- ||-----------------------------===\n";
           while(!feof(hasil))
           {
                 cout<<"                                ===
"<<data.date.tgl<<        "/"    <<data.date.bln<<      "/"
<<data.date.thn<<"                                       ||
"<<data.jumlah<<"              ===\n";
                 total = total + data.jumlah;
                 fread(&data,sizeof(data),1,hasil);
           }
           cout<<"
=======================================================
=========\n";
      cout<<"                 ============      TOTAL : "
<<total<< "    MEMBER KTB    ===============\n";
      cout<<"
=======================================================
=========\n";
      }
      fclose(hasil);
}

void tampil_penumpang()
{




                                                         44
     FILE *hasil;
     laporan data;
     unsigned int total=0;

     if((hasil=fopen("Penumpang.dat", "rb"))==NULL)
     {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
     }
     else
     {
           fread(&data,sizeof(data),1,hasil);
           cout<<"                          ------------
---------------\n";
           cout<<"                         -----
LAPORAN    ------\n";
           cout<<"                             --- TOTAL
PENGGUNA KTB ---\n";
           cout<<"                          ------------
---------------\n";
           cout<<"
=======================================================
=========\n";
           cout<<"
=======================================================
=========\n";
           cout<<"           ===                 Tanggal
||            Jumlah           ===\n";
           cout<<"         ===--------------------------
||-----------------------------===\n";


           while(!feof(hasil))
           {
                cout<<"                              ===
"<<data.date.tgl<<       "/"     <<data.date.bln<<   "/"
<<data.date.thn<<"                                    ||
"<<data.jumlah<<"              ===\n";
                total = total + data.jumlah;
                fread(&data,sizeof(data),1,hasil);
           }
           cout<<"
=======================================================
=========\n";
           cout<<"             ============    TOTAL : "
<<total<< " PENGGUNA KTB    ===============\n";
           cout<<"
=======================================================
=========\n";
     }
     fclose(hasil);
     getch();
}




                                                      45
void cek_id ()
{
     FILE *cek;

     pelanggan    temp;
     long                 besar;

     besar=sizeof(temp);

      if ((cek=fopen("pelanggan.dat", "r+b"))==NULL)
      {
           clrscr();
           gotoxy(35,10);cout<<" GAGAL DIBUKA ";
      }
      else
      {
           fseek(cek,0, SEEK_CUR);
           fread(&temp, sizeof (temp), 1, cek);
           while (!feof(cek))
           {
                 if
(!bandingtgl(tanggal,temp.masa_tenggang))
                 {
                      temp.stat='1';
                      fseek(cek, (-besar), SEEK_CUR);
                      fseek(cek,0, SEEK_CUR);
                      fwrite(&temp,   sizeof(temp),   1,
cek);
                      fseek(cek,0, SEEK_CUR);
                 }
                 fread(&temp, sizeof(temp), 1, cek);
           }
      }
      fclose(cek);
}




                                                      46
                                  Bab IV
                        Kesimpulan dan Saran


4.1 Kesimpulan dan Saran
     Program yang kami buat ini merupakan aplikasi yang hanya
mengatasi pengolahan data dan transaksi pada penumpang busway saja,
tidak memperdulikan sistem daripada busway tersebut beroperasi (baik
dalam     proses   mengantri,   naik-turun   busway   atau   tidak,   jadwal
keberangkatan busway, dsb). Pada program ini nanti akan menampilkan
menu yang memiliki beberapa pilihan transaksi yang akan dijalankan. Dan
dengan adanya barcode sangat mempermudah petugas karena tidak perlu
menginputkan lagi dari keyboard cukup dengan menggunakan barcode
reader.
     Saran kami lebih baik menggunakan barcode reader yang bertipe
Code 39 karena numerik (disini kita tidak menggunakan char) sehingga
meminimalisir sistem error.




                                                                         47

				
DOCUMENT INFO
Stats:
views:134
posted:2/27/2011
language:Indonesian
pages:47