29
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.
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 Tipe data Size Keterangan
Pintu_Tol Text 50 Nama pintu tol
Key_Gol Number Integer Tipe golongan kendaraan Biaya Number Integer Biaya pada pintu tol
b. Tabel ‘Golongan’
Fungsi : sebagai acuan tipe golongan kendaraan. Primary key : Key_Gol.
Tabel 3.2. Tabel Golongan
Nama field Tipe data Size Keterangan
Key_Gol Number Integer Tipe golongan kendaraan Gol_Kendaraan Text 5 Tipe golongan kendaraan aktual
c. Tabel ‘Loket’
Fungsi : sebagai acuan nama pintu tol dan jumlah loket yang tersedia di setiap lokasi.
Tabel 3.3. Tabel Loket
Nama field Tipe data Size Keterangan
Pintu_Tol Text 50 Nama pintu tol
Max_Loket Number Integer 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 Size Keterangan
ID_User Text 15 Nomor ID user
Total_Biaya Number Double 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 Tipe data Size Keterangan
ID_User Text 15 Nomor ID user
Bulan_Transaksi Text 10 Bulan transaksi Total_Biaya Number Double Total biaya per bulan
f. Tabel ‘Transaksi’
Fungsi untuk mencatat transaksi-transaksi yang terjadi. Primary key : ID_User,Tanggal,Waktu,Pintu_Tol,Loket.
Tabel 3.6. Tabel Transaksi
Nama field Tipe data Size Keterangan
ID_User Text 15 Nomor ID user
Tanggal Date/time Short date Tanggal transaksi Waktu Date/time Long time Waktu transaksi Pintu_Tol Text 50 Tempat transaksi Loket Number Integer 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 Tipe data Size Keterangan
ID_User Text 15 Nomor ID user
Nama Text 50 Nama user
Alamat Text 20 Alamat user
Kota Text 20 Kota user
Key_Gol Number Integer Tipe golongan kendaraan user
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.
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.
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.
About
Ok Keterangan
Gambar 3.4. Rancangan layar Form About
3.3. State Transition Diagram
3.3.1. State Transition Diagram Server
Modul formUtama_server
Modul Activate
Modul de-Activate
Modul menu_click Klik menu
Panggil modul menu_click Klik Activate Panggil modul aktifasi_server Klik Activate Panggil modul aktifasi_server Klik Deactivate Panggil modul de-aktifasi_server
3.3.2. State Transition Diagram Client
Modul formUtama_client
Modul Connect Modul dis-Connect
Modul menu_click Modul Send
Klik menu
Panggil modul menu_click Klik Connect Panggil modul connect Klik Disconnect Panggil modul disconnect Klik Send Panggil modul dekrip-kirim_pesan
Gambar 3.6. State transition Diagram aplikasi Client
3.3.3. State Transition Diagram Modul menu_Click
Modul menu_click
Modul Exit Modul About
Form About
Layar Aktif Akhir Program
Klik About Tampil Form About Klik Exit
Keluar dari program
Klik Ok / Tutup Form About Tampil Layar Aktif
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
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
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
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
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
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
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
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
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
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
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]
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
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
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
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
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
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
//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
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
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
//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
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
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
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
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
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
Modul about
Fungsi: menampilkan informasi mengenai program procedure TForm1.About1Click(Sender: TObject) begin
AboutBox.ShowModal end