BAB 3 PERANCANGAN PROGRAM APLIKASI

dokumen-dokumen yang mirip
BAB 4 IMPLEMENTASI DAN EVALUASI. Untuk membantu dalam proses pemantauan jaringan switch backbone

BAB 4 PERANCANGAN DAN IMPLEMENTASI. operasi Linux Fedora Core 4 dengan menggunakan bahasa pemrograman Java.

BAB 3 ANALISIS DAN PERANCANGAN. menentukan dan mengungkapkan kebutuhan sistem. Kebutuhan sistem terbagi menjadi

BAB 3 PERANCANGAN PROGRAM APLIKASI

BAB 3 ANALISIS DAN PERANCANGAN PROGRAM

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

BAB 3 PERANCANGAN PROGRAM

Gambar 4.1 Gambar Use Case Diagram

BAB 3 PERANCANGAN PROGRAM

Struktur Perulangan. Sesi. 3.1 Pernyataan while do. 3.2 Pernyataan repeat... until

BAB 3 PERANCANGAN SISTEM. SMS Blast, modul database (MySQL), modul SMS Gateway dan modul GSM modem.

UNIVERSITAS BINA NUSANTARA

UNTUK MEMBUAT DESAIN SEPERTI DI ATAS IKUTI PETUNJUK TABEL DI BAWAH INI : NO

BAB III ANALISIS DAN PERANCANGAN

BAB III ANALISA DAN DESAIN SISTEM

BAB III ANALISIS DAN PERANCANGAN SISTEM

BAB IV ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

BAB III ANALISIS DAN PERANCANGAN. Dalam proses produksi terdapat beberapa faktor yang akan mempengaruhi

MODUL IX PEMROGRAMAN DATABASE DENGAN DELPHI. Untuk praktikum ini kita menggunakan Ms. Access sebagai databasenya.

BAB III ANALISIS DAN DESAIN SISTEM

BAB III ANALISA DAN PERANCANGAN SISTEM

BAB IV PERANCANGAN. dengan proses yang ditentukan, berikut ini adalah tahapan tahapan dari proses. 1. Rancangan Bagan Alir Document ( Flow Map )

BAB 3 PERANCANGAN PROGAM

tentang perubahan kondisi aplikasi dijalankan :

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

Gambar 4.40 Layar Pelanggan

BAB IV. HASIL PENELITIAN DAN PEMBAHASAN

BAB 3 PERANCANGAN PROGRAM APLIKASI

SISTEM INFORMASI PENGIRIMAN BARANG. Mutiara Afie Ardhini

MODUL 2 Variabel, Val, If tunggal dan If bersarang + case

BAB IV IMPLEMENTASI DAN PENGUJIAN. dan pengujian merupakan langkah yang dilakukan setelah melakukan

Mengenal dan Mulai Bekerja dengan Access 2007

BAB III ANALISA DAN PERANCANGAN SISTEM

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

PERANCANGAN PROGRAM. struktur/hirarki menu, State Transition Diagram (STD), modul dan pseudocode, serta

Perancangan Halaman Tampil Pelunasan Perancangan Halaman Tampil Transaksi

BAB IV HASIL DAN UJI COBA

BAB IV PERANCANGAN. Daftar Account Customer. Pesan LOGIN GAGAL! Ulangi Lagi. Input Booking Service. Simpan Data ke Database. Cetak Nota Boking Service

BAB IV IMPLEMENTASI DAN PENGUJIAN

BAB IV HASIL DAN UJI COBA

BAB IV ANALISA DAN PEMBAHASAN

[Type the company name] [Type the document title] [Type the document subtitle] Gilang Abdul Aziz [Pick the date]

BAB III ANALISIS DAN DESAIN SISTEM

BAB III ANALISIS DAN DESAIN SISTEM

BAB 3 PERANCANGAN PROGRAM. objek, analisis blob, SMS service, dan video saving. Deteksi objek adalah proses untuk

BAB IV HASIL DAN PEMBAHASAN

Berikut ini adalah petunjuk pemakaian aplikasi sistem basis data. Petunjuk berikut ini disertai dengan tampilan layar. Keterangan selengkapnya

BAB IV ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

BAB III ANALISA DAN PERANCANGAN. Pada sistem antrian di tempat praktek dokter saat ini masih menggunakan

BAB IV PERANCANGAN SISTEM

LANJUTAN APLIKASI DATABASE

BAB IV HASIL DAN PEMBAHASAN

BAB III ANALISIS DAN DESAIN SISTEM

BAB III ANALISIS DAN PERANCANGAN SISTEM. saat ini sedang berjalan. Kelebihan dan kekurangan sistem tersebut dapat

BAB 3 PERANCANGAN PROGRAM

BAB III ANALISIS DAN DESAIN SISTEM

Petunjuk Pemakaian Sistem

BAB IV PERANCANGAN SISTEM

BAB III ANALISIS DAN PERANCANGAN

FieldName DataType FieldSize Status UserPass Text 40 Primary Key Nama_User Text 30 Password Text 10

BAB IV IMPLEMENTASI DAN PEMODELAN. digunakan, dan juga evaluasi output. Implementasi program menjelaskan tentang

BAB III ANALISA DAN PERANCANGAN. Aplikasi penterjemahan kata Indonesia-Inggris yang dibuat dalam tulisan

BAB III ANALISIS DAN PERANCANGAN

BAB III ANALISA MASALAH DAN RANCANGAN SISTEM PAKAR

BAB III ANALISIS DAN DESAIN SISTEM

Dasar Komputer & Pemrogaman 2A

BAB III ANALISIS DAN PERANCANGAN

Panduan Membuat Data Flow Diagram, Entity Relationship Diagram, dan Database Menggunakan Power Designer


BAB III ANALISIS DAN DESAIN SISTEM

Sistem informasi penjualan barang

BAB III ANALISIS DAN PERANCANGAN SISTEM. Kambing Etawa Menggunakan Metode Pearson Square pada Peternakan Nyoto.

BAB IV PERANCANGAN SISTEM

BAB III ANALISIS DAN PERANCANGAN SISTEM. Pada bab ini dibahas tentang identifikasi permasalahan, analisis

Pengenalan Pascal. Sejarah Singkat Pascal

BAB 3 RANCANGAN PROGRAM APLIKASI

Team project 2017 Dony Pratidana S. Hum Bima Agus Setyawan S. IIP

BAB III ANALISIS DAN DESAIN SISTEM

BAB IV DESKRIPSI PEKERJAAN

BAB III ANALISIS DAN DESAIN SISTEM

BAB III ANALISIS KEBUTUHAN DAN PERANCANGAN SISTEM. KriptoSMS akan mengenkripsi pesan yang akan dikirim menjadi ciphertext dan

3 BAB III METODOLOGI PENELITIAN

BAB 3 PERANCANGAN SISTEM

PERCOBAAN I STATEMENT

BAB 4 RANCANGAN SISTEM YANG DIUSULKAN

BAB III ANALISIS DAN DESAIN SISTEM

Upah. Program. Daftar Opname SPK Upah. Opname (Kelompok Pekerjaan. Upah diantaranya : : Kode Proyek. dan Nama Kode Upah, Daftar.

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom

perusahaan dalam menjalankan usahanya. Hal ini membuat banyak perusahaan

BAB IV PERANCANGAN SISTEM. Sistem yang dikembangkan dalam penelitian ini dikhususkan untuk desktop

BAB IV HASIL DAN UJI COBA

Alat. Proyek. Program. otomatis. karna telah. Daftar Opname SPK Alat. Daftar Opname SPK. dan Nama. Kelompok. Petunjuk

Transkripsi:

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 siri 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 Tipe data Size Keterangan Pintu_Tol Text 50 Nama pintu tol Key_Gol Number Integer Tipe golongan karaan Biaya Number Integer Biaya pada pintu tol b. Tabel Golongan Fungsi Primary key : sebagai acuan tipe golongan karaan. : Key_Gol. Tabel 3.2. Tabel Golongan Nama field Tipe data Size Keterangan Key_Gol Number Integer Tipe golongan karaan Gol_Karaan Text 5 Tipe golongan karaan 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 Tipe data Size Keterangan Pintu_Tol Text 50 Nama pintu tol Max_Loket Number Integer Jumlah loket yang tersedia d. Tabel Total Transaksi Fungsi Primary key : untuk mencatat total tansaksi setiap user. : 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 Primary key : untuk mencatat total tansaksi per user setiap bulannya. : 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.

32 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 Primary key : sebagai acuan data user-user yang telah terdaftar. : 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 karaan 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 hak 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. Rancangan layar Form About 3.3. 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 Modul dis-connect Klik S Panggil modul dekrip-kirim_pesan Modul S Klik Disconnect Panggil modul disconnect Modul menu_click Klik menu Panggil 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 Akhir Program Klik Exit Keluar dari program Klik About Tampil Form About Klik Ok / Tutup Form About Tampil Layar Aktif Form About 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 Button_aktifkan_server.Enabled := True Button_nonaktifkan_server.Enabled := False Modul aktivasi_server Fungsi: mengaktifkan server dan menginisialisasi variabel-variabel terkait procedure TForm1.Button_activeClick var i : integer 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 Modul de-aktifasi _server Fungsi: menon-aktifkan server procedure TForm1.Button_deactiveClick 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 Modul client_error Fungsi: mengirimkan pesan kesalahan client procedure TForm1.ServerSocket1ClientError ErrorCode := 0 Modul koneksi_client

40 Fungsi: untuk menampilkan jumlah koneksi yang aktif bila ada tambahan koneksi procedure TForm1.ServerSocket1ClientConnect Inc(n_koneksi) tampilkan jumlah koneksi yang aktif Modul dis-koneksi_client Fungsi: untuk menampilkan jumlah koneksi yang aktif bila ada permintaan diskoneksi dari client procedure TForm1.ServerSocket1ClientDisconnect Dec(n_koneksi) tampilkan jumlah koneksi aktif Modul cetak_nick Fungsi: menampilkan nama-nama client yang aktif procedure TForm1.CetakNick() var i: integer list_active_client.clear for i := 0 to max_user - 1 do

41 cetak nick di listbox Modul terima_pesan_client Fungsi: untuk menerima pesan dari client, permintaan koneksi, diskoneksi ataupun pengiriman data procedure TForm1.ServerSocket1ClientRead terima pesan dari client id := pos('ô',pesan); temp_nk := -1; case strtoint(copy(pesan,1,id-1)) of //client meminta koneksi 1: 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 cek ke data base apakah pintu tol tersebut ada jika ada maka cek jumlah pintu tol maksimal

42 bila belum maksimal, aktifkan koneksi dari client tersebut tambahkan jumlah max_user cetaknick; bila sudah maksimal tolak client else tolak client // client memutuskan koneksi 2: 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: ambil nama pintu tol ambil nomor loket pisahkan pesan menjadi data user cek apakah nomor user ada dalam database if ada then

43 if (Nama = nama_user) and (gol = Key_Gol) then balas := 1; with tbtransaksi do tambahkan transaksi ke dalam database else balas := 2; 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') Modul exit_server Fungsi: untuk keluar dari program server procedure TForm1.Exit2Click set server aktif false Application.Terminate

44 3.4.2. Pseudocode Aplikasi Client Modul subbyte Fungsi: mengambil nilai result dari s_box function TForm1.ByteSub(nilai : integer) : integer result := s_box[nilai] Modul subbyte_invers Fungsi: mengambil nilai result dari s_box function TForm1.ByteSubInv(nilai : integer) : integer result := s_box_inv[nilai] 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 for i := 0 to 7 do

45 temp1[i] := 0 temp2[i] := 0 //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 if temp1[i] = 1 then for j := 0 to 7 do

46 if temp2[j] = 1 then temp[i+j] := (temp[i+j] + 1) mod 2 //cari nilai desimal temp dan simpan ke result Result := 0 for i := 0 to 15 do Result := Result + temp[i] * Round(Power(2,i)) if Result > $FF then Result := Modulo(Result) 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

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 if temp[i] = 1 then // 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 //kembalikan temp ke dalam bentuk desimal Result := 0 for i := 0 to 7 do

48 Result := Result + temp[i] * Round(Power(2,i)) Modul KeySchedule Fungsi: mencari nilai keyschedule untuk digunakan pada tahap addroundkey procedure TForm1.KeySchedule() var i,j,k,temp : integer //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 for j := 0 to 3 do chiper_key[i,j,0] := chiper_key[i-1,j,3] //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 chiper_key[i,j,0] := ByteSub(chiper_key[i,j,0]) //kali [0*key*Rcon] for j := 0 to 3 do if j <> 0 then chiper_key[i,j,0] := chiper_key[i,j,0] xor chiper_key[i-1,j,0] else 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 for j := 1 to 3 do for k := 0 to 3 do

50 chiper_key[i,k,j] := chiper_key[i,k,j-1] xor chiper_key[i-1,k,j] Modul connect Fungsi: untuk mengaktifkan koneksi dengan server procedure TForm1.Button1Click(Ser: TObject) if (length(edit1.text)=0) then messagedlg('pintu Tol Kosong',mtWarning,[mbOK],0) edit1.setfocus else if (length(edit2.text)=0) then messagedlg('no Loket Kosong',mtWarning,[mbOK],0) edit2.setfocus else if (length(edit3.text)=0) then

51 messagedlg('server Host Kosong',mtWarning,[mbOK],0) edit3.setfocus else ClientSocket1.Port :=8080 ClientSocket1.Host := Edit3.Text ClientSocket1.Active := True Modul koneksi_aktif Fungsi: mengeset kondisi-kondisi form pada saat telah terjadi koneksi procedure TForm1.ClientSocket1Connect 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.stext('1' + 'ô' + edit1.text + ' ' + edit2.text)

52 Modul interupsi_error Fungsi: melakukan interrupt agar tidak terjadi program error pada saat ada kesalahan procedure TForm1.ClientSocket1Error if ErrorEvent = eeconnect then messagedlg('connection failed',mtwarning,[mbok],0) if ErrorEvent = eedisconnect then messagedlg('disconnection failed',mtwarning,[mbok],0) if ErrorEvent = ees then messagedlg('s Data failed',mtwarning,[mbok],0) if ErrorEvent = eereceive then messagedlg('receive Data failed',mtwarning,[mbok],0) errorcode:=0 Modul diskoneksi Fungsi: melakukan diskoneksi ke server procedure TForm1.Button2Click(Ser: TObject) ClientSocket1.socket.stext('2' + 'ô' + edit1.text + ' ' + edit2.text) ClientSocket1.Active := False

53 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 pesan := socket.receivetext Memo1.Lines.Add(pesan) id := pos('ô',pesan) case strtoint(copy(pesan,1,id-1)) of 1: {kick from server} messagedlg(copy(pesan,id+1,length(pesan)-id),mtwarning,[mbok],0) ClientSocket1.Active := False 2: {recieve reply from server} messagedlg(copy(pesan,id+1,length(pesan)-id),mtwarning,[mbok],0)

54 Modul dekrip-kirim_pesan Fungsi: mekripsi 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 if Length(Edit4.Text) <> 64 then messagedlg('input yang dikirim harus 64 karakter',mtwarning,[mbok],0) edit4.setfocus Exit //decrypt data //blok - I for i := 0 to 15 do state[i mod 4, i div 4] := strtoint('$' + copy(edit4.text,i*2+1,2)) //mulai decrypt for ulang := 10 downto 1 do

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 //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 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]) //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]) //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 state[i mod 4, i div 4] := strtoint('$' + copy(edit4.text,i*2+33,2)) //mulai decrypt

57 for ulang := 10 downto 1 do //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 //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 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])

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]) ; //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 if ((hasil_str[i] < '0') or (hasil_str[i] > '9')) then flag := 0 if pos('$',hasil_str) > 17 then for i := 17 to pos('$',hasil_str) - 1 do 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 if pos('?',hasil_str) > pos('$',hasil_str) then for i := pos('$',hasil_str) to pos('?',hasil_str) - 1 do if (hasil_str[i] <> '$') then flag := 0; else flag := 0

60 else flag := 0 if ((hasil_str[31] < '0') or (hasil_str[31] > '9')) then flag := 0 if flag = 1 then 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.stext('3' + 'ô' + edit1.text + ' ' + edit2.text + ' ' + kode + 'æ' + nama + '»' + gol) else messagedlg('tipe karaan tidak sesuai dengan data pada kartu',mtwarning,[mbok],0) edit4.setfocus else messagedlg('data "'+ edit4.text +'" tidak valid',mtwarning,[mbok],0)

61 edit4.setfocus Modul init_client Fungsi: mengeset kondisi awal form pada saat program baru berjalan procedure TForm1.FormCreate(Ser: TObject) 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 Modul koneksi_putus Fungsi: mengeset kondisi form setelah terjadi diskoneksi procedure TForm1.ClientSocket1Disconnect 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 Modul val _pintutol Fungsi: mengecek kevalidan input data nama pintu tol procedure TForm1.Edit1KeyPress(Ser: TObject; var Key: Char) if ((key < 'A') or (key > 'Z')) and ((key < 'a') or (key > 'z')) and (key <> char(8)) and (key <> ' ') then key := char(0) Modul val _loket Fungsi: mengecek kevalidan input data nomor loket procedure TForm1.Edit2KeyPress(Ser: TObject; var Key: Char) if ((key < '0') or (key > '9')) and (key <> char(8)) then key := char(0)

63 Modul val _datauser Fungsi: mengecek kevalidan input enkripsi data user procedure TForm1.Edit4KeyPress(Ser: TObject; var Key: Char) 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) Modul val _golk Fungsi: mengecek kevalidan input data golongan karaan procedure TForm1.Edit5KeyPress(Ser: TObject; var Key: Char) if ((key < '0') or (key > '9')) and (key <> char(8)) then key := char(0) Modul exit_client Fungsi: memutuskan koneksi ke server dan keluar dari program procedure TForm1.Exit2Click ClientSocket1.socket.stext('2' + 'ô' + edit1.text + ' ' + edit2.text) ClientSocket1.Active := False Application.Terminate

64 Modul about Fungsi: menampilkan informasi mengenai program procedure TForm1.About1Click(Ser: TObject) AboutBox.ShowModal