BAB 3 PERANCANGAN PROGRAM APLIKASI
3.1.
Gambaran Umum Perancangan Program aplikasi yang dirancang ini akan menggunakan database sebagai
sumber data yang dibutuhkan. Database tersebut akan berisi data pintu tol yang ada, data user yang terdaftar, dan data transaksi yang terjadi. Sedangkan untuk program aplikasinya sendiri akan terbagi menjadi dua, yaitu server dan client. Aplikasi Server akan bertugas untuk me-routing data yang diterima untuk dicatat ke dalam database ataupun mengecek data user. Aplikasi ini hanya akan mempunyai dua tombol utama yaitu untuk mengaktifkan dan menon-aktifkan kondisi server. Aplikasi Client bertugas untuk mengambil data dari user, mengolahnya dan kemudian mengirimkan data tersebut ke aplikasi Server. Aplikasi ini harus dikenali dahulu oleh server untuk dapat menjalankan fungsinya. Untuk itu disediakan dua tombol, yaitu untuk menjalin koneksi ke server dan memutuskan koneksi tersebut. Selain itu terdapat pula satu tombol lain yang berguna untuk mengolah data user dan mengirimkan data tersebut ke server.
29
30 3.2.
Perancangan 3.2.1. Perancangan Database Perancangan database pada skripsi ini menggunakan Microsoft Access 2000
yang bernama dbTOL. Pada database ini akan terdapat tabel sebagai berikut: a. Tabel ‘Biaya’ Fungsi
: sebagai acuan nilai yang harus dibayarkan pada pintu tol yang bersangkutan.
Primary key
: Pintu_Tol, Key_Gol. Tabel 3.1. Tabel Biaya
Nama field Pintu_Tol Key_Gol Biaya
Tipe data Text Number Number
Size 50 Integer Integer
Keterangan Nama pintu tol Tipe golongan kendaraan Biaya pada pintu tol
b. Tabel ‘Golongan’ Fungsi
: sebagai acuan tipe golongan kendaraan.
Primary key
: Key_Gol. Tabel 3.2. Tabel Golongan
Nama field Key_Gol Gol_Kendaraan
Tipe data Number Text
Size Integer 5
Keterangan Tipe golongan kendaraan Tipe golongan kendaraan aktual
c. Tabel ‘Loket’ Fungsi
: sebagai acuan nama pintu tol dan jumlah loket yang tersedia di setiap lokasi.
Primary key
: Pintu_Tol.
31 Tabel 3.3. Tabel Loket Nama field Pintu_Tol Max_Loket
Tipe data Size Text 50 Number Integer
Keterangan Nama pintu tol Jumlah loket yang tersedia
d. Tabel ‘Total Transaksi’ Fungsi
: untuk mencatat total tansaksi setiap user.
Primary key
: ID_User. Tabel 3.4. Tabel Total Transaksi
Nama field
Tipe data Text Number
ID_User Total_Biaya
Size 15 Double
Keterangan Nomor ID user Total biaya transaksi user
e. Tabel ‘Total Transaksi per Bulan’ Fungsi
: untuk mencatat total tansaksi per user setiap bulannya.
Primary key
: ID_User.
Tabel 3.5. Tabel Total Transaksi per Bulan Nama field ID_User Bulan_Transaksi Total_Biaya
Tipe data Text Text Number
Size 15 10 Double
Keterangan Nomor ID user Bulan transaksi Total biaya per bulan
f. Tabel ‘Transaksi’ Fungsi untuk mencatat transaksi-transaksi yang terjadi. Primary key : ID_User,Tanggal,Waktu,Pintu_Tol,Loket.
32 Tabel 3.6. Tabel Transaksi Nama field ID_User Tanggal Waktu Pintu_Tol Loket
Tipe data Text Date/time Date/time Text Number
Size 15 Short date Long time 50 Integer
Keterangan Nomor ID user Tanggal transaksi Waktu transaksi Tempat transaksi Loket transaksi
g. Tabel ‘User’ Fungsi
: sebagai acuan data user-user yang telah terdaftar.
Primary key
: ID_User Tabel 3.7. Tabel user
Nama field ID_User Nama Alamat Kota Key_Gol
Tipe data Text Text Text Text Number
Size 15 50 20 20 Integer
Keterangan Nomor ID user Nama user Alamat user Kota user Tipe golongan kendaraan user
Gambar 3.1. Entity Relation Diagram Database Tol
33 3.2.2. Perancangan Layar 3.2.2.1. Perancangan Layar Server Aplikasi server memiliki dua tombol dan dua menu. Dua tombol itu adalah tombol [Activate] untuk mengaktifkan server dan untuk [Deactivate] menonaktifkan server. Sedangkan kedua menu tersebut adalah menu [Exit] untuk keluar dari program, dan menu [About] yang menunjukkan sekilas informasi mengenai program. Pada aplikasi ini terdapat pula suatu listbox yang berisi client-client mana saja yang telah aktif. Aplikasi server ini terhubung langsung pada database sehingga setiap data yang dikirimkan oleh client dapat langsung diolah oleh aplikasi ini dan sekaligus berdampak pada isi database yang bersangkutan. Contohnya untuk database transaksi dan sejenisnya.
Gambar 3.2. Rancangan layar aplikasi Server
34 3.2.2.2. Perancangan Layar Client Pada aplikasi ini pertama-tama client (petugas tol) diminta untuk memasukkan data nama pintu tol dan loket ke berapa dari pintu tol tersebut yang hendak diaktifkan. Selain itu client (petugas tol) juga harus memasukkan alamat (tcp/ip) dari server host yang dituju, yang dalam skripsi ini alamat yang digunakan ialah ‘localhost’ dan mengirimkannya ke server dengan menekan tombol [Connect]. Pada penggunaannya, setelah client ini diaktifkan maka setiap pelanggan jalan tol yang ingin menggunakan fasilitas ini tinggal memasukkan kode kartu, maka transaksi akan diproses secara langsung oleh client dan data hasil proses tersebut akan dikirimkan ke server. Setiap kode yang dimasukkan akan diurai (didekripsi) menjadi data yang dapat digunakan oleh server, dan kemudian dikirimkan kepada server untuk diolah dan dicatat kedalam database. Setelah penggunaan aplikasi client ini selesai untuk memutuskan koneksi disediakan tombol [Disconnect]. Selain itu terdapat pula menu [Exit] dan [About] yang berfungsi sama seperti yang terdapat pada aplikasi server.
35
Gambar 3.3. Rancangan layar aplikasi Client
3.2.2.3. Perancangan layar form About Form ini dapat diakses dari klik-menu About yang tersedia pada aplikasi server dan client. Form about ini berfungsi untuk memberikan sekilas informasi mengenai program. Untuk menutup form about ini cukup dengan menekan tombol [OK] di bagian bawah form.
36
About
Keterangan
Ok
Gambar 3.4.
3.3.
Rancangan layar Form About
State Transition Diagram 3.3.1. State Transition Diagram Server
Modul formUtama_server Klik Activate Panggil modul aktifasi_server Modul Activate Klik Deactivate Panggil modul de-aktifasi_server
Klik Activate Panggil modul aktifasi_server
Modul de-Activate
Klik menu Panggil modul menu_click Modul menu_click
Gambar 3.5. State transition Diagram aplikasi Server
37 3.3.2. State Transition Diagram Client Modul formUtama_client Klik Connect Panggil modul connect Modul Connect Klik Send Panggil modul dekrip-kirim_pesan
Modul dis-Connect Klik Disconnect Panggil modul disconnect
Modul Send
Klik menu Panggil modul menu_click Modul menu_click
Gambar 3.6. State transition Diagram aplikasi Client 3.3.3. State Transition Diagram Modul menu_Click
Modul menu_click
Modul Exit
Modul About
Klik Exit
Klik About
Keluar dari program
Tampil Form About Form About
Akhir Program Klik Ok / Tutup Form About Tampil Layar Aktif Layar Aktif
Gambar 3.7. State transition Diagram modul menu_click
38 3.4.
Pseudocode 3.4.1. Pseudocode Aplikasi Server Modul formUtama_server Fungsi: inisialisasi kondisi awal server procedure TForm1.FormCreate begin Button_aktifkan_server.Enabled := True Button_nonaktifkan_server.Enabled := False end
Modul aktivasi_server Fungsi: mengaktifkan server dan menginisialisasi variabel-variabel terkait procedure TForm1.Button_activeClick var i : integer begin for i := 0 to 99 do nick[i] := '' cetaknick set socket port set server aktif true inisialisasi jumlah koneksi awal = 0 tampilkan jumlah koneksi aktif inisialisasi jumlah user awal = 0 button_active.Enabled := False button_deactive.Enabled := True
39 end
Modul de-aktifasi _server Fungsi: menon-aktifkan server procedure TForm1.Button_deactiveClick begin set server aktif false kosongkan isi data client edit1.text:= '' list_active_client.items.clear label_active_client.caption:='0' button_active.Enabled := False button_deactive.Enabled := True end
Modul client_error Fungsi: mengirimkan pesan kesalahan client procedure TForm1.ServerSocket1ClientError begin ErrorCode := 0 end
Modul koneksi_client
40 Fungsi: untuk menampilkan jumlah koneksi yang aktif bila ada tambahan koneksi procedure TForm1.ServerSocket1ClientConnect begin Inc(n_koneksi) tampilkan jumlah koneksi yang aktif end
Modul dis-koneksi_client Fungsi: untuk menampilkan jumlah koneksi yang aktif bila ada permintaan diskoneksi dari client procedure TForm1.ServerSocket1ClientDisconnect begin Dec(n_koneksi) tampilkan jumlah koneksi aktif end
Modul cetak_Nick Fungsi: menampilkan nama-nama client yang aktif procedure TForm1.CetakNick() var i: integer begin list_active_client.clear for i := 0 to max_user - 1 do
41 cetak nick di listbox end
Modul terima_pesan_client Fungsi: untuk menerima pesan dari client, permintaan koneksi, diskoneksi ataupun pengiriman data procedure TForm1.ServerSocket1ClientRead begin terima pesan dari client id := pos('ô',pesan); temp_nk := -1; case strtoint(copy(pesan,1,id-1)) of //client meminta koneksi 1: begin ambil nama pintu tol dari pesan ambil nomor loket dari pesan cek apakah nick sudah ada atau belum jika sudah ada maka beri pesan ke client bahwa nick tersebut sudah aktif jika belum dipakai maka begin cek ke data base apakah pintu tol tersebut ada jika ada maka begin cek jumlah pintu tol maksimal
42 bila belum maksimal, aktifkan koneksi dari client tersebut tambahkan jumlah max_user cetakNick; bila sudah maksimal tolak client end else tolak client end // client memutuskan koneksi 2: begin ambil nama pintu tol cari posisi nama pintu tol pada listbox hapus nama pada posisi itu Dec(max_user) CetakNick End //pengiriman data dari client 3: begin ambil nama pintu tol ambil nomor loket pisahkan pesan menjadi data user cek apakah nomor user ada dalam database if ada then begin
43 if (Nama = nama_user) and (gol = Key_Gol) then begin balas := 1; with tbTransaksi do tambahkan transaksi ke dalam database end else balas := 2; end else balas := 0; if balas = 0 then kirim pesan ke client (‘Data tidak terdapat dalam database') if balas = 1 then kirim pesan ke client (‘Transaksi Berhasil') if balas = 2 then kirim pesan ke client (‘Data tidak sesuai dengan data dalam database') end end
Modul exit_server Fungsi: untuk keluar dari program server procedure TForm1.Exit2Click begin set server aktif false Application.Terminate end
44 3.4.2. Pseudocode Aplikasi Client Modul subbyte Fungsi: mengambil nilai result dari s_box function TForm1.ByteSub(nilai : integer) : integer begin result := s_box[nilai] end
Modul subbyte_invers Fungsi: mengambil nilai result dari s_box function TForm1.ByteSubInv(nilai : integer) : integer begin result := s_box_inv[nilai] end
Modul kali Fungsi: digunakan untuk perkalian pada tahap mixcolums function TForm1.Kali(nilai1, nilai2 : integer) : integer var i,j : integer temp1, temp2 : array [0..7] of integer temp : array [0..15] of integer begin for i := 0 to 7 do begin
45 temp1[i] := 0 temp2[i] := 0 end //rubah nilai1 ke bentuk biner simpan ke temp1 i := 0 repeat temp1[i] := nilai1 mod 2 nilai1 := nilai1 div 2 Inc(i) until nilai1 = 0 //rubah nilai2 ke dalam bentuk biner simpan ke temp2 i := 0 repeat temp2[i] := nilai2 mod 2 nilai2 := nilai2 div 2 Inc(i) until nilai2 = 0 for i := 0 to 15 do temp[i] := 0 //kalikan temp1 dan temp2 simpan di temp for i := 0 to 7 do begin if temp1[i] = 1 then begin for j := 0 to 7 do
46 begin if temp2[j] = 1 then begin temp[i+j] := (temp[i+j] + 1) mod 2 end end end end //cari nilai desimal temp dan simpan ke result Result := 0 for i := 0 to 15 do begin Result := Result + temp[i] * Round(Power(2,i)) end if Result > $FF then Result := Modulo(Result) end
Modul modulo Fungsi: mencari nilai modulo setelah di xor dengan 100011011 function TForm1.Modulo(nilai : integer) : integer var i : integer temp : array [0..15] of integer begin
47 for i := 0 to 15 do temp[i] := 0 i := 0 //rubah nilai ke biner simpan ke temp repeat temp[i] := nilai mod 2 nilai := nilai div 2 Inc(i) until nilai = 0 //nilai temp di modulo dengan 100011011 for i := 15 downto 8 do begin if temp[i] = 1 then begin // di xor 100011011 temp[i] := 0; //temp[i] xor 1 temp[i-4] := temp[i-4] xor 1 temp[i-5] := temp[i-5] xor 1 temp[i-7] := temp[i-7] xor 1 temp[i-8] := temp[i-8] xor 1 end end //kembalikan temp ke dalam bentuk desimal Result := 0 for i := 0 to 7 do
48 begin Result := Result + temp[i] * Round(Power(2,i)) end end
Modul KeySchedule Fungsi: mencari nilai keyschedule untuk digunakan pada tahap addroundkey procedure TForm1.KeySchedule() var i,j,k,temp : integer begin //masukkan nilai awal chiper_key dari chip_key for i := 0 to 3 do for j := 0 to 3 do chiper_key[0,i,j] := chip_key[i,j] //masukkan nilai-nilai awal chipher_key pada tiap kolom pertama for i := 1 to 10 do begin for j := 0 to 3 do begin chiper_key[i,j,0] := chiper_key[i-1,j,3] end //tentukan nilai rotword nya temp := chiper_key[i,0,0]
49 chiper_key[i,0,0] := chiper_key[i,1,0] chiper_key[i,1,0] := chiper_key[i,2,0] chiper_key[i,2,0] := chiper_key[i,3,0] chiper_key[i,3,0] := temp //bytesub for j := 0 to 3 do begin chiper_key[i,j,0] := ByteSub(chiper_key[i,j,0]) end //kali [0*key*Rcon] for j := 0 to 3 do begin if j <> 0 then chiper_key[i,j,0] := chiper_key[i,j,0] xor chiper_key[i-1,j,0] else begin temp := Round( Power(2, i-1) ) if temp > $FF then temp := Modulo(temp) chiper_key[i,j,0] := chiper_key[i,j,0] xor chiper_key[i-1,j,0] xor temp end end for j := 1 to 3 do begin for k := 0 to 3 do
50 begin chiper_key[i,k,j] := chiper_key[i,k,j-1] xor chiper_key[i-1,k,j] end end end end
Modul connect Fungsi: untuk mengaktifkan koneksi dengan server procedure TForm1.Button1Click(Sender: TObject)
begin if (length(edit1.text)=0) then begin messagedlg('Pintu Tol Kosong',mtWarning,[mbOK],0) edit1.SetFocus end else if (length(edit2.text)=0) then begin messagedlg('No Loket Kosong',mtWarning,[mbOK],0) edit2.SetFocus end else if (length(edit3.text)=0) then begin
51 messagedlg('Server Host Kosong',mtWarning,[mbOK],0) edit3.SetFocus end else begin ClientSocket1.Port :=8080 ClientSocket1.Host := Edit3.Text ClientSocket1.Active := True end end
Modul koneksi_aktif Fungsi: mengeset kondisi-kondisi form pada saat telah terjadi koneksi procedure TForm1.ClientSocket1Connect begin Edit1.Enabled := False Edit2.Enabled := False Edit3.Enabled := False Button1.Enabled := False Button2.Enabled := True Edit4.Enabled := True Edit5.Enabled := True Button3.Enabled := True ClientSocket1.socket.sendtext('1' + 'ô' + edit1.text + '§' + edit2.text)
52 end
Modul interupsi_error Fungsi: melakukan interrupt agar tidak terjadi program error pada saat ada kesalahan procedure TForm1.ClientSocket1Error begin if ErrorEvent = eeConnect then messagedlg('Connection failed',mtWarning,[mbOK],0) if ErrorEvent = eeDisconnect then messagedlg('Disconnection failed',mtWarning,[mbOK],0) if ErrorEvent = eeSend then messagedlg('Send Data failed',mtWarning,[mbOK],0) if ErrorEvent = eeReceive then messagedlg('Receive Data failed',mtWarning,[mbOK],0) errorcode:=0 end
Modul diskoneksi Fungsi: melakukan diskoneksi ke server procedure TForm1.Button2Click(Sender: TObject) begin ClientSocket1.socket.sendtext('2' + 'ô' + edit1.text + '§' + edit2.text) ClientSocket1.Active := False
53 end Modul terima_pesan_server Fungsi: menerima pesan dari server berupa pemutusan koneksi atau reply dari pengiriman data procedure TForm1.ClientSocket1Read var pesan : string id : integer begin pesan := socket.receivetext Memo1.Lines.Add(pesan) id := pos('ô',pesan) case strtoint(copy(pesan,1,id-1)) of 1: begin {kick from server} messagedlg(copy(pesan,id+1,length(pesan)-id),mtWarning,[mbOK],0) ClientSocket1.Active := False end 2: begin {recieve reply from server} messagedlg(copy(pesan,id+1,length(pesan)-id),mtWarning,[mbOK],0) end end end
54 Modul dekrip-kirim_pesan Fungsi: mendekripsi pesan yang diterima dari user dan mengirimkannya ke server procedure TForm1.Button3Click() var i,j, ulang, flag : integer state, temp_state : array [0..3, 0..3] of integer hasil_str : string Kode, nama, gol : string begin if Length(Edit4.Text) <> 64 then begin messagedlg('Input yang dikirim harus 64 karakter',mtWarning,[mbOK],0) edit4.SetFocus Exit end //decrypt data //blok - I for i := 0 to 15 do begin state[i mod 4, i div 4] := strtoint('$' + copy(edit4.text,i*2+1,2)) end //mulai decrypt for ulang := 10 downto 1 do begin
55 //add round key - chiperkey[ulang] for i := 0 to 3 do for j := 0 to 3 do state[i,j] := state[i,j] xor chiper_key[ulang,i,j] if ulang <> 10 then begin //mixcolomns for i := 0 to 3 do for j := 0 to 3 do temp_state[i,j] := state[i,j] for i := 0 to 3 do begin state[0,i] := Kali($0e, temp_state[0,i]) xor Kali($0b, temp_state[1,i]) xor Kali($0d, temp_state[2,i]) xor Kali($09, temp_state[3,i]) state[1,i] := Kali($09, temp_state[0,i]) xor Kali($0e, temp_state[1,i]) xor Kali($0b, temp_state[2,i]) xor Kali($0d, temp_state[3,i]) state[2,i] := Kali($0d, temp_state[0,i]) xor Kali($09, temp_state[1,i]) xor Kali($0e, temp_state[2,i]) xor Kali($0b, temp_state[3,i]) state[3,i] := Kali($0b, temp_state[0,i]) xor Kali($0d, temp_state[1,i]) xor Kali($09, temp_state[2,i]) xor Kali($0e, temp_state[3,i]) end end //shiftrow for i := 0 to 3 do
56 for j := 0 to 3 do temp_state[i,j] := state[i,j] for i := 0 to 3 do for j := 0 to 3 do state[i,j] := temp_state[i, (j+4-i) mod 4] //subbytes for i := 0 to 3 do for j := 0 to 3 do state[i,j] := ByteSubInv(state[i,j]) end //add round key - chiperkey[0] for i := 0 to 3 do for j := 0 to 3 do state[i,j] := state[i,j] xor chiper_key[0,i,j] Hasil_str := '' for i := 0 to 3 do for j := 0 to 3 do Hasil_str := Hasil_str + char(state[j,i]) //blok - II for i := 0 to 15 do begin state[i mod 4, i div 4] := strtoint('$' + copy(edit4.text,i*2+33,2)) end //mulai decrypt
57 for ulang := 10 downto 1 do begin //add round key - chiperkey[ulang] for i := 0 to 3 do for j := 0 to 3 do state[i,j] := state[i,j] xor chiper_key[ulang,i,j] if ulang <> 10 then begin //mixcolomns for i := 0 to 3 do for j := 0 to 3 do temp_state[i,j] := state[i,j] for i := 0 to 3 do begin state[0,i] := Kali($0e, temp_state[0,i]) xor Kali($0b, temp_state[1,i]) xor Kali($0d, temp_state[2,i]) xor Kali($09, temp_state[3,i]) state[1,i] := Kali($09, temp_state[0,i]) xor Kali($0e, temp_state[1,i]) xor Kali($0b, temp_state[2,i]) xor Kali($0d, temp_state[3,i]) state[2,i] := Kali($0d, temp_state[0,i]) xor Kali($09, temp_state[1,i]) xor Kali($0e, temp_state[2,i]) xor Kali($0b, temp_state[3,i]) state[3,i] := Kali($0b, temp_state[0,i]) xor Kali($0d, temp_state[1,i]) xor Kali($09, temp_state[2,i]) xor Kali($0e, temp_state[3,i]) end end
58 //shiftrow for i := 0 to 3 do for j := 0 to 3 do temp_state[i,j] := state[i,j] for i := 0 to 3 do for j := 0 to 3 do state[i,j] := temp_state[i, (j+4-i) mod 4] //subbytes for i := 0 to 3 do for j := 0 to 3 do state[i,j] := ByteSubInv(state[i,j]) end; //add round key - chiperkey[0] for i := 0 to 3 do for j := 0 to 3 do state[i,j] := state[i,j] xor chiper_key[0,i,j] for i := 0 to 3 do for j := 0 to 3 do Hasil_str := Hasil_str + char(state[j,i]) //pengecekan signature data flag := 1 if pos('#',hasil_str) <> 16 then flag := 0 if pos('$',hasil_str) = 0 then flag := 0 if pos('?',hasil_str) = 0 then flag := 0
59 if pos('@',hasil_str) <> 32 then flag := 0 for i := 1 to 15 do begin if ((hasil_str[i] < '0') or (hasil_str[i] > '9')) then flag := 0 end if pos('$',hasil_str) > 17 then begin for i := 17 to pos('$',hasil_str) - 1 do begin if ((hasil_str[i] < 'A') or (hasil_str[i] > 'Z')) and ((hasil_str[i] < 'a') or (hasil_str[i] > 'z')) and (hasil_str[i] <> ' ') then flag := 0 end if pos('?',hasil_str) > pos('$',hasil_str) then begin for i := pos('$',hasil_str) to pos('?',hasil_str) - 1 do begin if (hasil_str[i] <> '$') then flag := 0; end end else begin flag := 0 end end
60 else begin flag := 0 end if ((hasil_str[31] < '0') or (hasil_str[31] > '9')) then flag := 0 if flag = 1 then begin kode := copy(hasil_str,1,15) nama := copy(hasil_str,17,13) nama := copy(nama,1,Pos('$',nama) - 1) gol := copy(hasil_str,31,1) if gol = edit5.text then ClientSocket1.socket.sendtext('3' + 'ô' + edit1.text + '§' + edit2.text + '¦' + kode + 'æ' + nama + '»' + gol) else begin messagedlg('Tipe kendaraan tidak sesuai dengan data pada kartu',mtWarning,[mbOK],0) edit4.SetFocus end end else begin messagedlg('Data "'+ edit4.Text +'" tidak valid',mtWarning,[mbOK],0)
61 edit4.SetFocus end end
Modul init_client Fungsi: mengeset kondisi awal form pada saat program baru berjalan procedure TForm1.FormCreate(Sender: TObject) begin KeySchedule Edit1.Enabled := True Edit2.Enabled := True Edit3.Enabled := True Button1.Enabled := True Button2.Enabled := False Edit4.Enabled := False Edit5.Enabled := False Button3.Enabled := False end
Modul koneksi_putus Fungsi: mengeset kondisi form setelah terjadi diskoneksi procedure TForm1.ClientSocket1Disconnect begin Edit1.Enabled := True
62 Edit2.Enabled := True Edit3.Enabled := True Button1.Enabled := True Button2.Enabled := False Edit4.Enabled := False Edit5.Enabled := False Button3.Enabled := False end
Modul val _pintuTol Fungsi: mengecek kevalidan input data nama pintu tol procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) begin if ((key < 'A') or (key > 'Z')) and ((key < 'a') or (key > 'z')) and (key <> char(8)) and (key <> ' ') then key := char(0) end
Modul val _loket Fungsi: mengecek kevalidan input data nomor loket procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char) begin if ((key < '0') or (key > '9')) and (key <> char(8)) then key := char(0) end
63 Modul val _dataUser Fungsi: mengecek kevalidan input enkripsi data user procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char) begin if ((key < 'A') or (key > 'F')) and ((key < 'a') or (key > 'f')) and ((key < '0') or (key > '9')) and (key <> char(8)) then key := char(0) end
Modul val _golKend Fungsi: mengecek kevalidan input data golongan kendaraan procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char) begin if ((key < '0') or (key > '9')) and (key <> char(8)) then key := char(0) end
Modul exit_client Fungsi: memutuskan koneksi ke server dan keluar dari program procedure TForm1.Exit2Click begin ClientSocket1.socket.sendtext('2' + 'ô' + edit1.text + '§' + edit2.text) ClientSocket1.Active := False Application.Terminate end
64 Modul about Fungsi: menampilkan informasi mengenai program procedure TForm1.About1Click(Sender: TObject) begin AboutBox.ShowModal end