• Tidak ada hasil yang ditemukan

Informasi Rute Terpendek Antar Kota Dengan Short Message Service (SMS).

N/A
N/A
Protected

Academic year: 2017

Membagikan "Informasi Rute Terpendek Antar Kota Dengan Short Message Service (SMS)."

Copied!
41
0
0

Teks penuh

(1)

ABSTRAK

Dengan adanya kenaikan harga dan kelangkaan Bahan Bakar Minyak

(BBM), maka penghematan pada Bahan Bakar Minyak (BBM) perlu ditingkatkan

karena kesediaan BBM yang sangat terbatas di dunia. Oleh karena itu dibuat

program untuk mencari rute terpendek antar kota dengan SMS.

Program pencarian rute terpendek ini memungkinkan user dapat mencari

rute terpendek antar kota hanya dengan mengirimkan SMS ke nomor Handset

Server yang telah terkoneksi dengan komputer. Pengiriman SMS harus dilakukan

sesuai format yang telah ditentukan oleh penulis.

(2)

ABSTRACT

By the increasing of the price and rare of fuel oil, so the economizing on

fuel oil need to be improved, because of the limited supply fuel oil in the world.

Therefore program to search for intercity shortest path by using Short Message

Service (SMS) was made.

This searching shortest path program enable user can search for intercity

shortest path only by sending SMS to number of Handset Server which has

connected with computer. Sending of SMS must be done according to the format

that has been determined by writer.

(3)

DAFTAR ISI

ABSTRAK

i

ABSTRACT

ii

KATA PENGANTAR

iii

DAFTAR ISI

v

DAFTAR TABEL

vii

DAFTAR GAMBAR

viii

DAFTAR LAMPIRAN

x

BAB I PENDAHULUAN

1.1 Latar Belakang

1

1.2 Perumusan Masalah

1

1.3 Tujuan Masalah

1

1.4 Pembatasan Masalah

1

1.5 Sistematika Penulisan

2

BAB II LANDASAN TEORI

2.1 Graf

3

2.1.1 Definisi Graf

3

2.1.2 Jenis-jenis Graf

3

2.1.2.1 Graf Sederhana (Simple Graph)

3

2.1.2.2 Graf Tak Sederhana (Unsimple Graph)

4

2.1.2.3 Graf Berhingga (Limited Graph)

4

2.1.2.4 Graf Tak Berhingga (Unlimited Graph)

5

2.1.2.5 Graf Berarah (Directed Graph)

5

2.1.2.6 Graf Tak Berarah (Undirected Graph)

5

2.1.2.7 Graf Berlabel (Weighted Graph)

6

2.1.2.7.1 Lintasan Terpendek (Shortest Path)

6

2.1.2.7.1.1 Algoritma Djikstra

6

2.1.2.7.1.2 Cara Kerja Algoritma Djikstra

7

(4)

BAB III PERANCANGAN APLIKASI

3.1 Perancangan Sistem Aplikasi

9

3.2 Perancangan Database

10

3.2.1 Tabel Data Jalan

10

3.2.2 Tabel Data SMS

11

3.3 Perancangan Aplikasi

12

3.3.1 Form Utama dari Aplikasi

12

3.3.2 Form Data Jalan

13

3.3.3 Form Data SMS Masuk 14

3.3.4 Pencarian Rute Terpendek dengan Algoritma Djikstra

14

BAB IV IMPLEMENTASI DAN UJI COBA APLIKASI

4.1 Latar Belakang

18

4.2 Instalasi Aplikasi

18

4.3 Uji Coba Aplikasi

19

4.3.1 Menambah Data Jalan

20

4.3.2 Mengedit Data Jalan

20

4.3.3 Uji Coba Aplikasi dengan Menggunakan SMS

21

4.3.4 Uji Coba Aplikasi dengan Menggunakan Program Komputer

27

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

28

5.2 Saran

28

(5)

DAFTAR TABEL

Tabel 2.1

Tabel Langkah-langkah Pencarian Rute Terpendek

7

Tabel 3.1

Struktur Tabel Data Jalan

11

Tabel 3.2

Struktur Tabel Data SMS

11

Tabel 3.3 Tabel

Jalan

16

(6)

DAFTAR GAMBAR

Gambar 2.1 Graf Sederhana

4

Gambar 2.2 Graf Ganda

4

Gambar 2.3 Graf Semu

4

Gambar 2.4 Graf Tak Berhingga

5

Gambar 2.5 Graf

Berarah

5

Gambar 2.6 Contoh

Graf

7

Gambar 3.1 Cara Kerja Sistem Aplikasi

9

Gambar 3.2 Tampilan Menu Utama

13

Gambar 3.3 Form Data Jalan

13

Gambar 3.4 Form Data SMS

14

Gambar 3.5 Diagram Alir Proses Pencarian Rute Terpendek dengan

Menggunakan SMS

15

Gambar 4.1 Konfigurasi DSN pada MyODBC

18

Gambar 4.2 Tampilan Awal Menu

19

Gambar 4.3 Menu Menambah Data Jalan

20

Gambar 4.4 Menu Mengedit Data Jalan

20

Gambar 4.5 Koneksi Handset Server ke Komputer

21

Gambar 4.6 Pengiriman SMS dari Kota Dalu-dalu ke Tandun

22

Gambar 4.7 Respon Handset Server dari Kota Dalu-dalu ke Tandun

22

Gambar 4.8 Pengiriman SMS dari Kota Pekanbaru ke Airtiris

23

Gambar 4.9 Respon Handset Server dari Kota Pekanbaru ke Airtiris

23

Gambar 4.10 Pengiriman SMS dari Kota Batubesurat ke Kotalama

23

Gambar 4.11 Respon Handset Server dari Kota Batubesurat ke Kotalama 24

Gambar 4.12 Pengiriman SMS dari Kota Ujungtanjung ke Kubu

24

Gambar 4.13 Respon Handset Server dari Kota Ujungtanjung ke Kubu

24

Gambar 4.14 Pengiriman SMS dari Kota Minas ke Bangkinang

25

(7)

Gambar 4.16 Pengiriman SMS dari User dengan Data Tidak Ada di

Database

25

Gambar 4.17 Respon Handset Server Saat Tidak Menemukan Data

26

Gambar 4.18 Pengiriman SMS dari User dengan Format Tidak Sesuai

26

Gambar 4.19 Respon Handset Server dengan Format Tidak Sesuai

26

Gambar 4.20 Hasil Pencarian Rute Terpendek dengan Menggunakan

(8)

DAFTAR LAMPIRAN

LAMPIRAN A

:

Listing Program Aplikasi

LAMPIRAN B

:

Foto Alat

(9)

LAMPIRAN A

(10)

unit U_Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, Gauges, jpeg, SMSComp, DB, DBTables, Grids, DBGrids;

type

TF_Main = class(TForm) Panel1: TPanel; pnlTime: TPanel; pnlDate: TPanel; lblJudulTA: TLabel; Memo1: TMemo; Splitter1: TSplitter; sbConnect: TSpeedButton; sbDatabases: TSpeedButton; gbStatus: TGroupBox; stStatus: TStaticText; gBattery: TGauge; gSignal: TGauge; lblBattery: TLabel; lblSignal: TLabel; lblJudulMain: TLabel; Image1: TImage; sbProcess: TSpeedButton; lblSource: TLabel; lblDestination: TLabel; eDestination: TEdit; eSource: TEdit; Timer1: TTimer; OxygenSMS1: TOxygenSMS; Timer2: TTimer; sbAbout: TSpeedButton; gbConnection: TGroupBox; cbAutoResponder: TCheckBox; qProcess: TQuery; Timer3: TTimer; qTanda: TQuery; sbDataUser: TSpeedButton; Splitter2: TSplitter;

procedure sbDatabasesClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure sbConnectClick(Sender: TObject);

(11)

procedure sbAboutClick(Sender: TObject); procedure sbProcessClick(Sender: TObject); procedure Timer3Timer(Sender: TObject);

procedure OxygenSMS1SMSMessageReceived(Index: Integer; Time: TDateTime; Text, Send: String; Pict: TBitmap);

procedure sbDataUserClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

F_Main: TF_Main; Connect : Boolean;

implementation

uses U_Data, U_About, U_ShowModal, U_User;

{$R *.dfm}

Function GetConnect : Boolean; begin

Connect := false;

if F_Main.OxygenSMS1.Open then Connect := true;

Result := Connect; end;

Procedure Connected; begin

if not Connect then exit; with F_Main do

begin

sbConnect.Caption := 'Disconnect';

sbConnect.Glyph.LoadFromFile('D:\Document\Program\disconnect.bmp'); stStatus.Caption := 'Connected';

stStatus.Font.Color := clLime; eSource.Enabled := false; eDestination.Enabled := false; Application.ProcessMessages; case OxygenSMS1.BatteryLevel of 0..29 : gBattery.ForeColor := clRed; 30..69 : gBattery.ForeColor := clYellow; 70..100 : gBattery.ForeColor := clBlue; end;

(12)

case OxygenSMS1.SignalLevel of 0..29 : gSignal.ForeColor := clRed; 30..69 : gSignal.ForeColor := clYellow; 70..100 : gSignal.ForeColor := clBlue; end;

gSignal.Progress := OxygenSMS1.SignalLevel; Application.ProcessMessages;

Timer2.Enabled := true; end;

end;

procedure TF_Main.sbDatabasesClick(Sender: TObject); begin

F_Data.Table1.Refresh; F_Data.Show;

F_Data.WindowState := wsMaximized; F_Data.eSearch.SetFocus;

end;

procedure TF_Main.Timer1Timer(Sender: TObject); begin

pnlTime.Caption := TimeToStr(time);

pnlDate.Caption := FormatDateTime('ddd, d mmm yyyy',date); LblJudulTA.Left := LblJudulTA.Left-4;

if LblJudulTA.Left<-450 then LblJudulTA.Left:=820; end;

procedure TF_Main.FormCreate(Sender: TObject); begin

cbAutoResponder.Enabled := false; pnlTime.Caption := TimeToStr(time); pnlTime.Font.Color := clLime; pnlTime.Font.Size := 10;

pnlDate.Caption := FormatDateTime('ddd, d mmm yyyy',date); pnlDate.Font.Color := clLime;

pnlDate.Font.Size := 10; LblJudulTA.Left := 820; stStatus.Font.Size := 12;

eSource.CharCase := ecUpperCase; eDestination.CharCase := ecUpperCase; Timer2.Enabled := false;

F_Main.WindowState := wsMaximized ; Memo1.Clear;

(13)

procedure TF_Main.FormShow(Sender: TObject); begin

eSource.SetFocus; end;

procedure TF_Main.sbConnectClick(Sender: TObject); begin

if Connect then begin

Connect := false;

Timer2.Enabled := false;

sbConnect.Caption := 'Connect to HP';

sbConnect.Glyph.LoadFromFile('D:\Document\Program\connect.bmp'); gSignal.Progress := 0;

gBattery.Progress := 0;

stStatus.Caption := 'Disconnect'; stStatus.font.Color := clred; eSource.Enabled := true; eDestination.Enabled := true; end

else begin

if not GetConnect then begin

Messagedlg('Failed to connect',mtInformation,[mbOK],0); OxygenSMS1.Close; end else Connected; end; end;

procedure TF_Main.FormClose(Sender: TObject; var Action: TCloseAction); var str : string;

begin

str := 'Anda yakin akan keluar dari aplikasi ini?';

if (Application.MessageBox(PChar(str),'Information',MB_YESNO or MB_ICONQUESTION)

= IDNO) then Application.Run else OxygenSMS1.Close; end;

procedure TF_Main.Timer2Timer(Sender: TObject); begin

if not OxygenSMS1.CheckConnection then begin

Timer2.Enabled := false; Application.ProcessMessages;

(14)

sbConnect.Caption := 'Connect to HP';

sbConnect.Glyph.LoadFromFile('D:\Document\Program\connect.bmp'); gSignal.Progress := 0;

gBattery.Progress := 0;

stStatus.Caption := 'Disconnect'; stStatus.font.Color := clred; if OxygenSMS1.Open then begin

sbConnect.Caption := 'Disconnect';

sbConnect.Glyph.LoadFromFile('D:\Document\Program\disconnect.bmp'); stStatus.Caption := 'Connected';

stStatus.Font.Color := clLime; end

else begin

stStatus.Caption := 'Disconnect'; stStatus.font.Color := clred;

sbConnect.Caption := 'Connect to HP';

sbConnect.Glyph.LoadFromFile('D:\Document\Program\connect.bmp'); end;

Application.ProcessMessages; Timer2.Enabled := true; end

else begin

Application.ProcessMessages; case OxygenSMS1.BatteryLevel of 0..29 : gBattery.ForeColor := clRed; 30..69 : gBattery.ForeColor := clYellow; 70..100 : gBattery.ForeColor := clBlue; end;

gBattery.Progress := OxygenSMS1.BatteryLevel; Application.ProcessMessages;

case OxygenSMS1.SignalLevel of 0..29 : gSignal.ForeColor := clRed; 30..69 : gSignal.ForeColor := clYellow; 70..100 : gSignal.ForeColor := clBlue; end;

gSignal.Progress := OxygenSMS1.SignalLevel; Application.ProcessMessages;

(15)

procedure TF_Main.sbAboutClick(Sender: TObject); begin

F_About.show;

F_About.WindowState := wsMaximized; end;

procedure TF_Main.sbProcessClick(Sender: TObject); var s,k : String;

u,v,w : Real; begin

with qTanda do begin

SQL.Clear;

SQL.Add('UPDATE tbljalan SET Tanda =:t'); Prepare;

ParamByName('t').AsString := ''; ExecSQL;

end;

s :='SELECT * FROM tbljalan WHERE Kota1 = "%s" OR Kota2 = "%s"'; qProcess.Close;

qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[eSource.Text,eSource.Text])); qProcess.Open;

if (eSource.Text = '') or (eDestination.Text = '') then begin

Memo1.Lines.Clear;

ShowMessage('Source dan Destination harus diisi'); end

else if (qProcess.FieldByName('Kota1').AsString <> '') and (qProcess.FieldByName('Kota2').AsString <> '') then begin

s := 'SELECT * FROM tbljalan WHERE Kota1 = "%s" '+ 'OR Kota2 = "%s"';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[eDestination.Text,eDestination.Text])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString <> '') and (qProcess.FieldByName('Kota2').AsString <> '') then begin

s := 'SELECT * FROM tbljalan WHERE Kota1 = "%s" '+ 'OR Kota2 = "%s"';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[eSource.Text,eSource.Text])); qProcess.Open;

qProcess.First;

(16)

qProcess.Next;

v := qProcess.Fields[3].AsFloat; if u < v then u := u else u := v; end;

with qTanda do begin

SQL.Clear;

SQL.Add('UPDATE tbljalan SET Tanda =:t WHERE kota1=:k1 or kota2=:k2'); Prepare;

ParamByName('t').AsString := 'X';

ParamByName('k1').AsString := eSource.Text; ParamByName('k2').AsString := eSource.Text; ExecSQL;

end;

s := 'SELECT * FROM tbljalan WHERE Jarak_dlm_Km = %10.2f ' + 'AND (Kota1="%s" OR Kota2="%s")';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[u,eSource.Text,eSource.Text])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString = eSource.Text) then k := qProcess.Fields[2].AsString else k := qProcess.Fields[1].AsString; Memo1.Lines.Clear;

Memo1.Lines.Add(eSource.Text); Memo1.Lines.Add(k);

while not (k = eDestination.Text) do begin

s := 'SELECT * FROM tbljalan WHERE Tanda NOT IN ("X")'+ 'AND (Kota1 = "%s" or Kota2 = "%s")';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[k,k])); qProcess.Open;

qProcess.First;

w := qProcess.Fields[3].AsFloat; while not qProcess.Eof do begin

qProcess.Next;

v := qProcess.Fields[3].AsFloat; if w < v then w := w else w := v; end;

with qTanda do begin

SQL.Clear;

SQL.Add('UPDATE tbljalan SET Tanda =:t WHERE kota1=:k1 or kota2=:k2'); Prepare;

(17)

end;

s := 'SELECT * FROM tbljalan WHERE Jarak_dlm_Km = %10.2f ' + 'AND (Kota1="%s" OR Kota2="%s")';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[w,k,k])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString = k) then

k := qProcess.Fields[2].AsString else k := qProcess.Fields[1].AsString; Memo1.Lines.Add(k);

u := u + w; end;

Memo1.Lines.Add('Total Jarak Terpendek = ' +FloatToStr(u)+ ' Km'); end

else begin

ShowMessage('Data tidak ditemukan'); Memo1.Lines.Clear;

end; end else begin

ShowMessage('Data tidak ditemukan'); Memo1.Lines.Clear;

end; end;

procedure TF_Main.Timer3Timer(Sender: TObject); begin

if not connect then

cbAutoResponder.Enabled := false else cbAutoResponder.Enabled := true; end;

procedure TF_Main.OxygenSMS1SMSMessageReceived(Index: Integer; Time: TDateTime; Text, Send: String; Pict: TBitmap);

var s,k,m,ka,kt,format1,format2 : string; u,v,w : Real;

i,space,l,t : integer; begin

if (cbAutoResponder.Checked) then begin

with F_Data do begin

Table2.Append;

Table2.FieldByName('NoPengirim').AsString := Send; Table2.FieldByName('IsiPesan').AsString := Text; Table2.FieldByName('Waktu').AsDateTime := Time; Table2.Post;

(18)

space := 0; l := Length(Text);

for i := 4 to Length(Text) do begin

m := copy(Text,i,1);

if (m = ' ') and (space = 0) then space := i; end;

t := space+4;

ka := copy(Text,4,space-4); kt := copy(Text,t,l-t+1); format1 := copy(Text,1,3); format2 := copy(Text,space+1,3);

if (format1 = 'KA ') and (format2 = 'KT ') then begin

with qTanda do begin

SQL.Clear;

SQL.Add('UPDATE tbljalan SET Tanda =:t'); Prepare;

ParamByName('t').AsString := ''; ExecSQL;

end;

s :='SELECT * FROM tbljalan WHERE Kota1 = "%s" OR Kota2 = "%s"'; qProcess.Close;

qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[ka,ka])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString <> '') and (qProcess.FieldByName('Kota2').AsString <> '') then begin

s := 'SELECT * FROM tbljalan WHERE Kota1 = "%s" '+ 'OR Kota2 = "%s"';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[kt,kt])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString <> '') and (qProcess.FieldByName('Kota2').AsString <> '') then begin

s := 'SELECT * FROM tbljalan WHERE Kota1 = "%s" '+ 'OR Kota2 = "%s"';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[ka,ka])); qProcess.Open;

qProcess.First;

u := qProcess.Fields[3].AsFloat; while not qProcess.Eof do begin

(19)

v := qProcess.Fields[3].AsFloat; if u < v then u := u else u := v; end;

with qTanda do begin

SQL.Clear;

SQL.Add('UPDATE tbljalan SET Tanda =:t WHERE kota1=:k1 or kota2=:k2'); Prepare;

ParamByName('t').AsString := 'X'; ParamByName('k1').AsString := ka; ParamByName('k2').AsString := ka; ExecSQL;

end;

s := 'SELECT * FROM tbljalan WHERE Jarak_dlm_Km = %10.2f ' + 'AND (Kota1="%s" OR Kota2="%s")';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[u,ka,ka])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString = ka) then

k := qProcess.Fields[2].AsString else k := qProcess.Fields[1].AsString; Memo1.Lines.Clear;

Memo1.Lines.Add(ka); Memo1.Lines.Add(k); while not (k = kt) do begin

s := 'SELECT * FROM tbljalan WHERE Tanda NOT IN ("X")'+ 'AND (Kota1 = "%s" or Kota2 = "%s")';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[k,k])); qProcess.Open;

qProcess.First;

w := qProcess.Fields[3].AsFloat; while not qProcess.Eof do begin

qProcess.Next;

v := qProcess.Fields[3].AsFloat; if w < v then w := w else w := v; end;

with qTanda do begin

SQL.Clear;

SQL.Add('UPDATE tbljalan SET Tanda =:t WHERE kota1=:k1 or kota2=:k2'); Prepare;

ParamByName('t').AsString := 'X'; ParamByName('k1').AsString := k; ParamByName('k2').AsString := k; ExecSQL;

(20)

s := 'SELECT * FROM tbljalan WHERE Jarak_dlm_Km = %10.2f ' + 'AND (Kota1="%s" OR Kota2="%s")';

qProcess.Close; qProcess.SQL.Clear;

qProcess.SQL.Add(Format(s,[w,k,k])); qProcess.Open;

if (qProcess.FieldByName('Kota1').AsString = k) then

k := qProcess.Fields[2].AsString else k := qProcess.Fields[1].AsString; Memo1.Lines.Add(k);

u := u + w; end;

Memo1.Lines.Add('Total Jarak Terpendek = ' +FloatToStr(u)+ ' Km'); s := Memo1.Lines.Text;

OxygenSMS1.SendSMSMessage(Send,s,167,true,false,nil); end

else begin

Memo1.Lines.Clear; s := 'Data tidak ditemukan';

OxygenSMS1.SendSMSMessage(Send,s,167,true,false,nil); end; end else begin Memo1.Lines.Clear; s := 'Data tidak ditemukan';

OxygenSMS1.SendSMSMessage(Send,s,167,true,false,nil); end;

end else begin

s := 'FORMAT SALAH, KETIK KA<SPASI><NAMA KOTA ASAL><SPASI>KT'+ '<SPASI><NAMA KOTA TUJUAN> KIRIM KE NOMOR INI.';

OxygenSMS1.SendSMSMessage(Send,s,167,true,false,nil); end;

end; end;

procedure TF_Main.sbDataUserClick(Sender: TObject); begin

F_User.Show; end;

(21)

unit U_Data;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;

type

TF_Data = class(TForm) Database1: TDatabase; Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; lblJudulData: TLabel; btnAdd: TButton; btnDelete: TButton; btnEdit: TButton; btnClose: TButton; eSearch: TEdit; lblSearch: TLabel; btnSearch: TButton; qSearch: TQuery; DBGrid2: TDBGrid; DataSource2: TDataSource; qAdd: TQuery; Table2: TTable;

procedure btnCloseClick(Sender: TObject); procedure btnAddClick(Sender: TObject); procedure btnEditClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure btnSearchClick(Sender: TObject); procedure FormShow(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

F_Data: TF_Data;

implementation

uses U_Main, U_About, U_ShowModal, U_User;

(22)

procedure TF_Data.btnCloseClick(Sender: TObject); begin

Close; end;

procedure TF_Data.btnAddClick(Sender: TObject); var s : string;

begin

F_ShowModal := TF_ShowModal.Create(Self); With F_ShowModal do

begin

eKota1.Text := ''; eKota2.Text := ''; eJarak.Text := ''; Caption := 'Add Data';

lblJudulShow.Caption := 'Menu Menambah Data'; ActiveControl := eKota1;

end;

F_ShowModal.ShowModal;

if (F_ShowModal.ModalResult = mrOK) then begin

with Table1, F_ShowModal do begin

try

StrToFloat(eJarak.Text); except

on EConvertError do begin

ShowMessage('Jarak harus diisi dengan bilangan'); F_ShowModal.Free;

end; end;

if (eKota1.Text = '') or (eKota2.Text = '') or

(eJarak.Text = '') then ShowMessage('Ada data yang belum diisi') else

begin

s := 'SELECT * FROM tbljalan WHERE Kota1 = "%s" '+ 'AND Kota2 = "%s"';

qAdd.Close; qAdd.SQL.Clear;

qAdd.SQL.Add(Format(s,[eKota1.Text,eKota2.Text])); qAdd.Open;

if ((qAdd.FieldByName('Kota1').AsString = eKota1.Text) and (qAdd.FieldByName('Kota2').AsString = eKota2.Text)) then ShowMessage('Nama kota tersebut telah terdaftar')

else begin

(23)

qAdd.Close; qAdd.SQL.Clear;

qAdd.SQL.Add(Format(s,[eKota1.Text,eKota2.Text])); qAdd.Open;

if ((qAdd.FieldByName('Kota2').AsString = eKota1.Text) and (qAdd.FieldByName('Kota1').AsString = eKota2.Text)) then ShowMessage('Nama kota tersebut telah terdaftar')

else begin Append;

FieldByName('Kota1').AsString := eKota1.Text; FieldByName('Kota2').AsString := eKota2.Text;

FieldByName('Jarak_dlm_Km').AsString := eJarak.Text; Post; F_ShowModal.Free; end; end; end; end; end; Table1.Refresh; end;

procedure TF_Data.btnEditClick(Sender: TObject); var s : string;

begin

F_ShowModal := TF_ShowModal.Create(Self); With F_ShowModal do

begin

eKota1.Text := Table1.Fields[1].AsString; eKota2.Text := Table1.Fields[2].AsString; eJarak.Text := Table1.Fields[3].AsString; Caption := 'Edit Data';

lblJudulShow.Caption := 'Menu Mengedit Data'; ActiveControl := eKota1;

end;

F_ShowModal.ShowModal;

if (F_ShowModal.ModalResult = mrOK) then begin

with Table1, F_ShowModal do begin

try

StrToFloat(eJarak.Text); except

on EConvertError do begin

(24)

end; end;

if (eKota1.Text = '') or (eKota2.Text = '') or

(eJarak.Text = '') then ShowMessage('Ada data yang belum diisi') else

begin

s := 'SELECT * FROM tbljalan WHERE Kota1 = "%s" '+ 'AND Kota2 = "%s"';

qAdd.Close; qAdd.SQL.Clear;

qAdd.SQL.Add(Format(s,[eKota1.Text,eKota2.Text])); qAdd.Open;

if ((qAdd.FieldByName('Kota1').AsString = eKota1.Text) and ((qAdd.FieldByName('Kota2').AsString = eKota2.Text) and

(qAdd.FieldByName('Jarak_dlm_Km').AsString = eJarak.Text))) then ShowMessage('Nama kota tersebut telah terdaftar')

else begin

s := 'SELECT * FROM tbljalan WHERE Kota2 = "%s" '+ 'AND Kota1 = "%s"';

qAdd.Close; qAdd.SQL.Clear;

qAdd.SQL.Add(Format(s,[eKota1.Text,eKota2.Text])); qAdd.Open;

if ((qAdd.FieldByName('Kota2').AsString = eKota1.Text) and ((qAdd.FieldByName('Kota1').AsString = eKota2.Text) and

(qAdd.FieldByName('Jarak_dlm_Km').AsString = eJarak.Text))) then ShowMessage('Nama kota tersebut telah terdaftar')

else begin Edit;

FieldByName('Kota1').AsString := eKota1.Text; FieldByName('Kota2').AsString := eKota2.Text;

(25)

procedure TF_Data.btnDeleteClick(Sender: TObject); var str : string;

begin

str := 'Anda yakin akan menghapus jalan antara kota '

+ Table1.Fields[1].AsString + ' dan ' + Table1.Fields[2].AsString +'?'; if (Application.MessageBox(PChar(str),'WARNING',MB_YESNO or MB_ICONEXCLAMATION)

= IDYES) then Table1.Delete; end;

procedure TF_Data.btnSearchClick(Sender: TObject); var s : string;

begin

s := 'SELECT Kode_Jalan,Kota1,Kota2,Jarak_dlm_Km FROM tbljalan WHERE Kota1 = "%s" '+

'OR Kota2 = "%s" ORDER BY Kota1,Kota2'; qSearch.Close;

qSearch.SQL.Clear;

qSearch.SQL.Add(Format(s,[eSearch.Text,eSearch.Text])); qSearch.Open;

if (qSearch.FieldByName('Kota1').AsString = '') or (qSearch.FieldByName('Kota1').AsString = '') then ShowMessage('Data tidak ditemukan');

end;

procedure TF_Data.FormShow(Sender: TObject); begin

eSearch.SetFocus; end;

(26)

LAMPIRAN B

(27)

Gambar B.1 Induk Kabel Data

(28)
(29)

LAMPIRAN C

(30)
[image:30.595.115.513.149.441.2]
(31)

LAMPIRAN D

(32)

Kode_Jalan Kota1 Kota2 Jarak_dlm_Km

1 KUBU SEDINGINAN 71.5

2 SEDINGINAN UJUNGTANJUNG 35.75

3 UJUNGTANJUNG BAGANSIAPIAPI 75.4

4 UJUNGTANJUNG DUMAI 36.4

5 UJUNGTANJUNG DURI 49.72

6 DUMAI DURI 58.5

7 DURI PETAPAHAN 140

8 DURI MINAS 81.25

9 PETAPAHAN MINAS 85.8

10 PETAPAHAN AIRTIRIS 28.27

11 PETAPAHAN BANGKINANG 30.55

12 PETAPAHAN BATUBESURAT 52

13 PETAPAHAN TANDUN 49.72

14 PETAPAHAN SIMANINIK 45.5

15 MINAS PEKANBARU 27.95

16 PEKANBARU SIMPANGTIGA 8.77

17 SIMPANGTIGA AIRTIRIS 46.8

18 SIMPANGTIGA LIPATKAIN 66.92

19 LIPATKAIN AIRTIRIS 63.05

20 AIRTIRIS BANGKINANG 6.52

21 BANGKINANG BATUBESURAT 40.95

22 BANGKINANG TANDUN 56.55

23 BATUBESURAT ROKAN 54.6

24 BATUBESURAT TANDUN 39

25 TANDUN ROKAN 30.55

26 TANDUN UJUNGBATU 18.85

27 TANDUN SIMANINIK 33.15

28 ROKAN UJUNGBATU 25.08

(33)

35 PASIRPANGARAIAN DALUDALU 34.45

36 KOTATENGAH DALUDALU 52

37 LIPATKAIN MUARALEMBU 55.25

38 MUARALEMBU LUBUKJAMBI 58.5

39 MUARALEMBU TELUKKUANTAN 36.73

40 LUBUKJAMBI TELUKKUANTAN 30.23

41 TELUKKUANTAN LANGGAM 122.85

42 TELUKKUANTAN BASERAH 31.2

43 LANGGAM BASERAH 115.05

44 BASERAH CARENT 22.1

45 CARENT PERENAP 22.75

46 CARENT AIRMOLEK 63.05

47 PERENAP AIRMOLEK 59.8

48 AIRMOLEK SOREKSATU 79.62

49 AIRMOLEK SEBRIDA 64.85

50 AIRMOLEK RENGAT 39

51 SOREKSATU DAYUN 109.53

52 DAYUN SIAKSRIINDRAPURA 14.95

53 SEBRIDA KERINTANG 26

54 SEBRIDA RENGAT 67.27

55 KERINTANG KEMUNING 15.44

56 RENGAT TELUKKIAMBANG 41.6

57 TELUKKIAMBANG SUNGAISALAK 23.08

58 SUNGAISALAK TEMBILAHAN 27.3

59 SEBRIDA PERENAP 90.5

(34)

LAMPIRAN E

(35)

Menu utama pada aplikasi terdiri dari beberapa komponen yaitu :

1.

SpeedButton

1.1

sbDatabases

:

Untuk melihat data jalan.

1.1.1

Database1

:

Sebagai

database aplikasi.

1.1.2

Table1

:

Tabel untuk data jalan.

1.1.3

Table2

:

Tabel untuk data SMS.

1.1.4

DataSource1

:

Untuk mengkoneksi antara table1

dan DBGrid1.

1.1.5

DataSource2 : Untuk

mengkoneksi antara qSearch

dan DBGrid2.

1.1.6

qAdd : Query untuk menambah data.

1.1.7

qSearch

:

Query untuk mencari data.

1.1.8

DBGrid1

:

Untuk tampilan semua data jalan.

1.1.9

DBGrid2

:

Untuk tampilan nama kota yang

dicari.

1.1.10

btnAdd

:

Untuk menambah data jalan.

1.1.11

btnEdit

:

Untuk mengedit data jalan.

1.1.12

btnDelete

:

Untuk menghapus data jalan.

1.1.13

btnClose

:

Untuk

menutup

form database.

1.1.14

btnSearch

:

Untuk mencari nama kota.

1.1.15

lblJudulData

:

Label untuk judul form database.

1.1.16

lblSearch

:

Label

untuk

search.

1.1.17

eSearch

: Isian

untuk

search.

1.2

sbAbout

: Untuk

mengetahui

informasi

program.

1.3

sbConnect

:

Untuk membuat koneksi dengan

handset server.

1.4

sbDataUser

:

Untuk melihat data SMS masuk.

[image:35.595.126.507.158.706.2]
(36)

2.

GroupBox

2.1

gbConnection

:

Terdiri dari sbConnect, sbDataUser,

dan cbAutoResponder.

2.2

gbStatus

: Terdiri

dari

stStatus,

lblSignal,

lblBattery, gSignal, dan gBattery.

3.

CheckBox

3.1

cbAutoResponder

:

Untuk mengaktifkan mode otomatis.

4.

StaticText

4.1

stStatus

: Untuk

informasi

status

koneksi.

5.

Gauge

5.1

gSignal

:

Untuk informasi level sinyal handset

server.

5.2

gBattery

:

Untuk informasi level baterai handset

server.

6.

Label

6.1

lblJudulMain

: Judul

pada

form menu utama.

6.2

lblSource

: Label

untuk

kota

asal.

6.3

lblDestination

:

Label untuk kota tujuan.

7.

Image

7.1

Image1

:

Gambar peta propinsi Riau

8.

Edit

(37)

9.

Splitter

9.1

Splitter1

: Sebagai

tanda

pembatas.

9.2

Splitter2

:

Sebagai tanda pembatas.

10.

Memo

10.1

Memo1

:

Tampilan hasil pencarian rute

terpendek.

11.

Panel

11.1

pnlDate

: Info

tanggal.

11.2

pnlTime

: Info

waktu.

11.3

Panel1

:

Info judul Tugas Akhir.

12.

Timer

12.1

Timer1

:

Untuk animasi judul Tugas Akhir

pada Panel1.

12.2

Timer2

:

Untuk perubahan level sinyal dan

baterai.

12.3

Timer3

:

Untuk perubahan pada status

cbAutoResponder.

13.

OxygenSMS

13.1

OxygenSMS1

:

Untuk menerima dan mengirim SMS.

14.

Query

14.1

qProcess

: Proses

pencarian

rute

terpendek.

(38)

BAB I

PENDAHULUAN

1.1

Latar Belakang

Pada tahun 2005, pemerintah Indonesia telah menaikkan tarif Bahan Bakar

Minyak (BBM) sebesar dua kali lipat dari harga normal. Akibat kenaikan tarif

tersebut, timbul banyak kesulitan di berbagai kalangan masyarakat.

Selain itu jumlah orang yang memiliki kendaraan pun tiap tahun semakin

bertambah, sehingga menyebabkan kepadatan lalu lintas. Maka pada umumnya

masyarakat akan mencari jalur yang lebih singkat dan penggunaan BBM sehemat

mungkin.

Oleh karena itu, dibutuhkan suatu software untuk mencari rute terpendek

antar kota agar dapat mengurangi pemborosan BBM serta mempersingkat waktu,

sehingga dapat lebih cepat sampai di tempat tujuan. Dengan memanfaatkan

layanan Global System For Mobile Communication (GSM), dimungkinkan data

rute dapat diakses lebih fleksibel.

1.2

Perumusan Masalah

Bagaimana membuat program dengan algoritma graf untuk mencari rute

terpendek dengan menggunakan SMS?

1.3

Tujuan Penulisan

Membuat program dengan algoritma graf untuk mencari rute terpendek

dengan menggunakan SMS.

1.4

Pembatasan Masalah

Pada Tugas Akhir ini mempunyai beberapa batasan masalah yaitu :

1.

Program dibuat dengan menggunakan bahasa pemrograman Borland

Delphi 7.

(39)

3.

Algoritma graf yang digunakan adalah algoritma Djikstra.

4.

Interface komputer dengan mobile menggunakan kabel data.

5.

Layanan komunikasi antar handphone yang digunakan berupa Teknologi

GSM.

6.

Komunikasi SMS menggunakan komponen OxygenSMS yang bersifat

shareware, yang dapat didownload di www.oxygensoftware.com.

1.5

Sistematika Penulisan

Sistematika penulisan dari Tugas Akhir ini adalah sebagai berikut :

Bab I. Pendahuluan

Berisikan latar belakang, perumusan masalah, tujuan penulisan,

pembatasan masalah dan sistematika penulisan.

Bab II. Landasan Teori

Berisikan teori-teori dasar yang digunakan dalam membuat aplikasi yang

diambil dari berbagai rujukan.

Bab III. Perancangan Aplikasi

Berisikan tentang pembahasan perancangan aplikasi, mulai dari

perumusan spesifikasi sistem, perancangan dan pemrograman aplikasi.

Bab IV. Implementasi dan Uji Coba Aplikasi

Berisikan data-data hasil pengujian aplikasi dalam jaringan seluler GSM.

Bab V. Kesimpulan dan Saran

(40)

BAB V

KESIMPULAN DAN SARAN

5.1

Kesimpulan

Berdasarkan hasil implementasi dan uji coba yang dilakukan pada bab

sebelumnya dapat diambil beberapa kesimpulan yaitu :

1.

Aplikasi SMS ini dapat diimplementasikan dan berjalan dengan baik

secara on line.

2.

Proses pencarian rute terpendek bisa berjalan dengan baik tergantung dari

graf yang ada.

3.

Hasil pencarian rute terpendek masih belum optimal, karena adanya

kekurangan pada algoritma djikstra.

5.2

Saran

Adapun saran-saran yang diberikan oleh penulis untuk pengembangan

lebih lanjut, terdapat saran-saran yang diberikan penulis :

(41)

DAFTAR PUSTAKA

1.

Cantu, Marco, Mastering Delphi 7, Sybex, 2003.

2.

Dubois, Paul, MySQL, Edisi KeTiga, Sams, 2005.

3.

http://en.wikipedia.org/w/index.php?title=Djikstra%27s_algorithm&redire

ct=no

4.

http://www.unej.ac.id/fakultas/mipa/majalah_mat/2000/Metode%20Simpl

eks-Kiss.pdf

5.

http://www.wiki-mirror.be/index.php/Graph_theory.htm

6.

Jek Siang, Jong, “Matematika Diskrit dan Aplikasinya pada Ilmu

Komputer”, Andi Yogyakarta, 2002.

7.

Kadir, Abdul, “Dasar Aplikasi Database MySQL Delphi”, Andi

Yogyakarta, 2004.

8.

Khang, Bustam, “Trik Pemrograman Aplikasi Berbasis SMS”, Elex Media

Komputindo, 2003.

9.

Munir, Rinaldi, “Matematika Diskrit”, Edisi Kedua, Informatika Bandung,

2001.

10.

Musalini, Uus, “Membangun Aplikasi Super Cantik dan Full Animasi

dengan Delphi”, Elex Media Komputindo, 2004.

11.

Pranata, Anthony, “Pemrograman Borland Delphi 6”, Andi Yogyakarta,

2003.

Gambar

Gambar B.1 Induk Kabel Data
Gambar B.3 Perhubungan Antara Komputer dengan Kabel Data
Gambar C.1 Peta Riau
Table1

Referensi

Dokumen terkait

 Pengumpulan kuis kelas  Keaktifan tanya jawab  Pengumpulan tugas individual: Pengambilan foto dengan pendekatan Paul Messaris Mampu mempraktekkan fotografi

Serta penggunaan ukuran diameter yang sama dengan variasi tulangan yang berbeda pada penelitian selanjutnya, diharapkan bisa lebih mengetahui bagaimana pengaruh

Peraturan perundang- undang yang merupakan bagian dari politik hukum yang dibuat oleh pemerintah, menjadi meaning less, apabila tidak dibarengi dengan kesungguhan

Konflik Pemanfaatan Sumberdaya Tanah Ulayat Baduy Pada Kawasan Hutan Lindung (Studi Kasus : Masyarakat Baduy Dalam Dan Baduy Luar, Desa Kanekes - Kecamatan Leuwidamar,

Senyawa Boron hanya terdeposit di sel kanker sehingga reaksi tangkapan neutron dengan Boron yang menghasilkan partikel alfa (Helium) dan Lithium hanya terjadi di

Esimer- kiksi rentovihvilä ( Juncus bulbosus ) voi muodos- taa upoksiin hieman vastaavasti valekiehkuraisia kasvustoja, mutta se on kauttaaltaan näkinruohoja vahvempitekoinen,

Perangkat indikator atau indeks tersebut diatas antara lain adalah (a) Indeks Pembangunan Manusia (IPM) atau Human Development Indeks (HDI), (b) Indeks Kualitas

Jumlah partisipan sebanyak 4 pasien dan 4 keluarga untuk pre action research dengan accidental sampling, 6 perawat untuk action research dengan purposive sampling, 4 pakar