BAB 3 METODOLOGI PENELITIAN
Seperti yang telah dijelaskan pada BAB II Landasan Teori bahwa yang dijadikan model dalam merancang program pada penelitian ini adalah Waterfall Model. Pada bab ini akan dijelaskan secara lebih mendalam mengenai spesifikasi kebutuhan, perancangan arsitektur dan detailed design yang menjadi proses awal dalam pembuatan program simulasi penelitian yang bersangkutan. Spesifikasi perancangan akan dibagi menjadi beberapa bagian sesuai dengan proses penelitian, yakni studi literatur, data yang digunakan dalam penelitian untuk pengecekan metode yang digunakan, model simulasi, serta perancangan program simulasi. Perancangan arsitektur juga akan dibagi menjadi beberapa bagian seperti bentuk atau jenis program yang akan digunakan dalam simulasi serta rancangan arsitektur program yang akan digambarkan banyak dengan diagram – diagram. Serta detailed design ditunjukkan dengan rancangan layar dan menu yang akan menjadi interface simulasi nantinya. Pada proses akhir: coding and testing unit, integration and testing, maintenance/ pemeliharaan akan dibahas pada bab selanjutnya sebagai hasil dari metodologi penelitian yang telah dijalankan.
3.1.
Studi Literatur Studi literatur merupakan langkah awal yang tepat untuk memulai sebuah proses panjang penelitian yang kemudian akan ditindaklanjuti dangan berbagai proses berikutnya. Tanpa studi literatur yang memadai dapat dikatakan vii
71 sebuah penelitian tidak valid adanya karena tidak disertai dengan teori – teori yang telah diakui masyarakat sebelumnya. Setelah informasi yang dibutuhkan telah mencukupi maka proses akan dilanjutkan dengan merancang perangkat lunak yang tepat. Berawal dari sini maka jembatan antara yang teoritis dan yang praktis telah terwujud. Hasil dari proses ini adalah gambaran umum tentang algoritma dan konsep simulasi yang akan dipergunakan untuk merancang suatu Glukometer dengan fungsi tambahan yang lebih lengkap dan berperan aktif dalam memonitor penderita Diabetes Mellitus. Studi literatur juga memberikan rumus – rumus yang aplikatif dan sudah teruji secara faktual bahwa yang perhitungan yang dilakukan adalah menghasilkan data yang benar – benar dapat digunakan sebagai acuan bagi penderita Diabetes Mellitus sebagai salah satu alat bantu monitor fluktuasi gula darang pengguna dalam jangka waktu 1 hari. Selain itu, studi literatur telah memberikan konsep secara mendetail mengenai alat yang disebut Glukometer, dan komponen apa saja yang termasuk di dalamnya. Melalu pengetahuan tentang hal ini, telah diketahui bahwa perangkat lunak yang memproses dari data biologis berupa darah sampai menghasilkan output data yang berguna melalui perangkat keras, yakni mikroprosesor. Diharapkan simulasi yang telah dibuat dapat diaplikasikan pada perangkat yang sesungguhnya dengan memasukkan program ke dalam mikroporsesor dari Glukometer. Tahap ini juga telah memberikan berbagai pengetahuan umum dan deskriptif mengenai penyakit Diabetes Mellitus itu sendiri sehingga dapat
72 diketahui dengan jelas yang menjadi sebab dan akibat penyakit tersebut, serta betapa pentingnya untuk menjaga kestabilan gula darah dalam tubuh. Demikian juga terhubung dengan betapa pentingnya membuat dan meningkatkan fungsi alat Glukometer ini, terutama untuk para penderita Diabetes Mellitus.
3.2.
Data yang Digunakan dalam Penelitian Pada tahap testing program akan digunakan data dari jurnal ilmiah dan data – data lain yang telah tersedia. Tidak digunakannya data asli dari pasien diabetes sebagai objek penelitian disebabkan oleh keterbatasan waktu dan banyaknya badan dan organisasi yang harus menyetujui penggunaan manusia sebagai objek dari penelitian sebagai prosedur terkait. Di samping itu penulis merasa sangat cukup dengan menggunakan data dari jurnal yang telah ada untuk memastikan bahwa perhitungan yang berkaitan dengan data sudah benar adanya. Setelah perancangan program berhasil dibuat, maka telah dipastikan bahwa output yang keluar adalah benar dan telah sesuai dengan output yang dihasilkan dari penelitian dan jurnal ilmiah lainnya.
3.3.
Model Simulasi Sesuai dengan tujuan awal
penelitian ini adalah membuat sebuah
perangkat lunak yang melengkapi fitur – fitur program yang ada dalam alat yang bernama Glukometer. Oleh sebab itu, pemodelan simulasi yang akan diadopsi adalah meniru alat Glukometer itu sendiri, sesuai dengan Glukometer yang saat ini masyarakat gunakan.
73 Namun di sini terdapat beberapa keterbatasan fungsi dari perangkat keras yang seharusnya ada pada alat yang sebenarnya, seperti chip dan beberapa program yang telah dikembangnya oleh produsen yang berbeda tentu tidak dapat dibuat dalam simulasi ini.
3.4.
Perancangan Program Simulasi Setelah data yang dibutuhkan sudah terkumpul, dan algoritma sudah dipelajari, maka akan dirancang program untuk menggambarkan pola dari fluktuasi kadar gula dalam darah dari penderita Diabetes Mellitus. Dari program ini diharapkan akan tergambarkan secara jelas mengenai pola hidup dan sangkutannya dengan fluktuasi kadar gula dalam darah penderita yang dapat menyebabkan berbagai efek samping yang tidak menyenangkan pada penderita Diabetes Mellitus. Dari penggambaran ini diharapkan dapat diteliti lebih lanjut sehingga faktor – faktor lain yang mempengaruhi kadar gula dalam darah sehingga suatu saat nanti program aplikasi benar – benar dapat dipercaya untuk digunakan oleh penderita Diabetes Mellitus Tipe 1.
3.4.1. Bentuk Program Suatu program dapat dibuat dengan dua cara yaitu secara OOP (Object Oriented Programming) atau secara procedural. Object Oriented Programming adalah sebuah paradigma pemrograman yang menggunakan “objek” dan interaksinya untuk mendesain aplikasi dan program komputer (Deitel, p3). Keunggulan yang membuat OOP semakin marak digunakan adalah karena sifatnya yang reusable, sehingga sangat cocok
74 untuk membuat aplikasi atau program yang besar. Untuk aplikasi dengan struktur yang sederhana, OOP akan mempersulit pembuatan program karena programer harus merancang objek satu per satu. Sebaliknya procedural programming atau yang juga dikenal dengan nama imperative programming adalah pemrograman berdasarkan konsep pemangilan procedures atau yang juga dikenal sebagai routines, subroutines, methods, dan functions. Setiap procedure mengandung sederetan langkah perhitungan yang harus dijalankan. Procedures dapat dipanggil kapan saja dalam program, termasuk di dalam procedure itu sendiri. Jika dibandingkan dengan OOP, procedural programming
diperuntukkan bagi pembuatan
program dengan struktur yang sederhana dengan algoritma yang juga sederhana maupun yang rumit. Perancangan program simulasi Glukometer dalam penelitian ini tergolong program dengan cukup banyak properti yang harus dipertimbangkan walaupun algoritma yang digunakan cukup sederhanya. Berdasarkan hal tersebut, maka penggunaan Object Oriented Programming menjadi pilihan yang tepat dalam pembuatannya.
75 3.4.2. Rancangan Program A. Rich Picture
Peneliti
Coding & Testing
Glucometer Simulation
Metode & Teori
Programmer
User
Information
Desainer
Interface
Input Data
Calculate
76
Gambar 3.1 Rich Picture
B. Class Diagram Berikut akan dipaparkan beberapa class yang digunakan dalam pembuatan program simulasi Glukometer. Program
+ main ()
Tabel 3.1 Class Program
Glucometer
+ home () + display () + displayUsers () + analyze () +
PowerButton_Click
(object
sender,
EventArgs e) + AddButton_Click (object sender, EventArgs e) + EnterButton_Click (object sender, EventArgs e)
77 + PrevButton_Click (object sender, EventArgs e) + NextButton_Click (object sender, EventArgs e) +
EscapeButton_Click
(object
sender,
EventArgs e) + SaveButton_Click (object sender, EventArgs e)
Tabel 3.2 Class Glucometer
InputBox Public: - InputBoxResult - InputBox Private: - FormCaption - FormPrompt - OutputResponse - DefaultValue - Xposition - Yposition + InputBox() + InitializeComponent() + LoadForm()
78 + btnOK_Click(object sender, System.Event Args e) + Show(string Prompt) + Show(string Prompt, string Title) + Show(string Prompt, string Title, string Default) + Show(string Prompt, string Title, string Default, int Xpos, int Ypos)
Tabel 3.3 Class Input Box
79
BGClass - Alpha - Beta - Gamma - a - b - BG - FBG - Status + BGClass (double BG)
Tabel 3.4 Class BGClass
User Data Table - UserId - Code - Name - CreatedOn - DeletionStateCode + Select
Tabel 3.5 Class UserDataTable
80
Scan Data Table - UserId - ScanTime - BG - DeletionStateCode + Select
Tabel 3.6 Class ScanDataTable
User Table Adapter - ConnectionString + Fill, GetData() + FillByUser, GetDataNyUserId(@UserId)
Tabel 3.7 Class UserTableAdapter
Scan Table Adapter - ConnectionString + Fill, GetData() + FillByUserId, GetDataNyUserId (@UserId) +
FillByIdandPeriod,
GetDataByUserIdandPeriod (@UserId, @PeriodStart, @PeriodEnd)
Tabel 3.8 Class ScanTableAdapter
81
82
Berikut penggambaran relationship antar class diagram.
Gambar 3.2 Class Relationship Diagram
83
C. Use Case Diagram
Gambar 3.3 Use Case Diagram
84
D. Sequence Diagram
Power Button
Gambar 3.4 Sequence Diagram Menyalakan Simulator
Gambar 3.5 Sequence Diagram Load Data
85
Gambar 3.6 Sequence Diagram Save Data
Gambar 3.7 Sequence Diagram Add New Account
86
Scan GB
Input Box
Gambar 3.8 Sequence Diagram Scan Blood Glucose (BG)
Gambar 3.9 Sequence Diagram Calculate Data
87 E. E. Algoritma Program Class utama yang dari program ini adalah Glucometer Class yang merupakan jalannya program itu sendiri. namespace Skripsi { public partial class Glucometer : Form { private Guid userId = new Guid(); private int delay = 200; public enum ScreenMode { Home, New, Load, Save, Scan, Analyze } private ScreenMode mode = ScreenMode.Home;
Pada perancangan program New Glukometer akan terdapat beberapa mode screen atau rancangan layar, yakni: Home, New, Load, Save, Scan, Analyze. Penggunaan enum memudahkan ragam rancangan layar yang dibuat. public Glucometer() { InitializeComponent(); }
Pemanggilan method Glucometer sebagai inisialisasi semua komponen supaya berjalan.
private void Glucometer_Load(object sender, EventArgs e) { DateLabel.Text = DateTime.Now.ToString("ddd dd MMM yyyy, HH:mm:ss"); }
private void DateTimer_Tick(object sender, EventArgs e) {
88 DateLabel.Text = DateTime.Now.ToString("ddd dd MMM yyyy, HH:mm:ss"); }
Untuk memnuhi fungsi sebagai agenda harian, Glukometer harus dilengkapi dengan waktu yang sebenarnya. Juga dengan perubahan setiap detik terhadap komputer.
#region move function private bool drag = false; private Point last; private void Glucometer_MouseDown(object sender, MouseEventArgs e) { drag = true; last = Cursor.Position; Cursor.Current = Cursors.SizeAll; } private void Glucometer_MouseMove(object sender, MouseEventArgs e) { if (drag) { int xsub = Cursor.Position.X - last.X; int ysub = Cursor.Position.Y - last.Y; this.Location = new Point(this.Location.X + xsub, this.Location.Y + ysub); last = Cursor.Position; } } private void Glucometer_MouseUp(object sender, MouseEventArgs e) { drag = false; Cursor.Current = Cursors.Default; } #endregion
Untuk memindahkan window aplikasi yang dibuat secara khusus dibutuhkan move function manual. Dengan algoritma yang digunakan:
89 •
Saat mouse ditekan maka fungsi geser akan diaktifkan serta posisi akan disimpan sebagai acuan yang dibutuhkan apabila mouse digerakkan nantinya.
•
Saat mouse digeser atau digerakkan sambil ditekan maka setiap pergeseran mouse akan menjadi pergeseran dari window juga. Hal ini dibutuhkan agar pergerakan normal.
•
Saat mouse tidak lagi ditekan, maka fungsi geser tidak akan bekerja. #region private private private private
screen function const int WIDTH = 23; const int HEIGHT = 9; char[] screen = new char[HEIGHT * WIDTH]; int cursor = 0;
public void clear() { for (int iCount = 0; iCount < screen.Length; iCount++) screen[iCount] = ' '; ScreenLabel.Text = new string(screen); cursor = 0; } public void print(string text) { foreach (char c in text) if (cursor < screen.Length) { screen[cursor++] = c; if (cursor % WIDTH == WIDTH - 1) screen[cursor++] = ' '; } ScreenLabel.Text = new string(screen); } public void print(string text, int x, int y) { cursor = (y * WIDTH) + x; print(text); } #endregion
Void clear() tidak dibutuhkan apabila tipe atribut yang digunakan berupa textbox. Namun untuk menyesuaikan layar New
90 Glukometer ini maka fungsi clear() yang biasanya dipakai tidak dapat digunakan sehingga diperlukan fungsi clear() khusus yakni dengan mencetak spasi atau ‘ ‘ agar layar menjadi kosong dan tulisan yang ada sebelumnya seolah-olah hilang namun sebenarnya bergeser. void print(string text) dan void print(string text, int x, int y) digunakan untuk mempermudah mencetak tulisan sesuai
dengan tempat yang diinginkan dihitung karakter per karakter. Sehingga setiap ingin mencetak sebuah kata pada tampilan New Glukometer, akan diset koordinat karakter sebagai awal pencetakannya.
#region home module private int pageindex = 0; private int pagesize = 5; public void home() { mode = ScreenMode.Home; #region load user data Skripsi.Data.GlucometerDataSet.UserDataTable userDT = new Skripsi.Data.GlucometerDataSet.UserDataTable(); Skripsi.Data.GlucometerDataSetTableAdapters.UserTableAdapter userTA = new Skripsi.Data.GlucometerDataSetTableAdapters.UserTableAdapter (); userTA.FillByUserId(userDT, userId); #endregion
Saat fungsi load atau tombol load ditekan maka akan ada pemanggilan data dari database sehingga dapat ditampilkan ke dalam New Glucometer dengan setting yang diinginkan. #region display fixed interface clear(); if (userDT.Rows.Count > 0) { // user
91 print("Welcome " + (userDT[0].Name.Length > 10 ? userDT[0].Name.Substring(0, 10) : userDT[0].Name) + ",", 0, 0); print("+------------+-------+", 0, 1); print("| Scan Time | BG |", 0, 2); print("| | |", 0, 3); print("| | |", 0, 4); print("| | |", 0, 5); print("| | |", 0, 6); print("| | |", 0, 7); print("+------------+-------+", 0, 8); } else { // guest print("Welcome guest,"); print("please load your account or add new account if you are not registered", 0, 2); } #endregion
Apabila terdapat data pada saat di load, maka akan dicetak tampilan layar yang menunjukkan data – data gula darah yang telah ada sebelumnya. Namun apabila belum ada pengguna sama sekali di dalam database, maka pengguna diharapkan untuk membuat account baru. display(); } public void display() { Skripsi.Data.GlucometerDataSet.ScanDataTable scanDT = new Skripsi.Data.GlucometerDataSet.ScanDataTable(); #region insertion sort scantime descending for (int iCount = 0; iCount < gscanDT.Rows.Count; iCount++) { Skripsi.Data.GlucometerDataSet.ScanRow minRow = null; DateTime max = DateTime.MinValue; foreach (Skripsi.Data.GlucometerDataSet.ScanRow scanRow in gscanDT.Rows) { object[] keys = { scanRow.UserID, scanRow.ScanTime }; if (!scanDT.Rows.Contains(keys) && scanRow.ScanTime > max) minRow = scanRow; } scanDT.ImportRow(minRow);
92 } #endregion
Awalnya, data gula darah yang ditampilkan tidaklah beraturan atau berurutan, sehingga membingungkan pengguna yang membacanya. Dengan sorting function jenis insertion maka data dapat disortir dengan baik sesuai dengan waktu scan gula darah yang dilakukan.
#region paging for (int iCount = pageindex * pagesize; iCount < pageindex * pagesize + pagesize && iCount < scanDT.Rows.Count; iCount++) { string scantime = scanDT[iCount].ScanTime.ToLocalTime().ToString("ddMM HH:mm"); string bg = scanDT[iCount].BG.ToString("00.00"); print(scantime, 2, iCount - pagesize * pageindex + 3); print(bg, 15, iCount - pagesize * pageindex + 3); } #endregion } #endregion
Region di atas adalah region untuk paging atau mengatur halaman tiap tampilan. Apabila data melebihi batas baris yang ditentukan, maka akan diatur pembagian di halaman yang berbeda. private bool power = false; private void PowerButton_Click(object sender, EventArgs e) { try { power = !power; DateLabel.Visible = power; ScreenLabel.Visible = power; if (power) { clear();
93
#region splash screen print("New Glucometer 2011", 2, 0); print("Copyright © 2011", 3, 2); print("Dea Ardelia Tisnabudi", 1, 4); print("1000883220", 6, 6); print("All Rights Reserved", 2, 8); #endregion
Pun sebelum seluruh kegiatan dimulai, akan ada pengaktifan power button. Seluruh tombol dan fungsi tidak akan berjalan apabila power button ini dalam keadaan false atau tidak menyala. Setelah dinyalakan maka fungsi – fungsi dalam New Glucometer ini dapat digunakan. Setelah power button diaktifkan maka akan muncul splash screen sebagai pengganti halaman about us.
Application.DoEvents(); System.Threading.Thread.Sleep(delay); home(); } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } } private void AddButton_Click(object sender, EventArgs e) { try { if (power) { mode = ScreenMode.New; clear(); print("Insert your name: "); Application.DoEvents(); InputBoxResult inputboxresult = InputBox.Show("Input your name:", "Glucometer"); if (inputboxresult.ReturnCode == DialogResult.OK)
94 { string name = inputboxresult.Text; print(name);
Fungsi yang berjalan pada saat addbutton diklik. Yakni screenmode akan berganti pada mode new dan akan ada inputbox yang digunakan untuk memasukkan nama pengguna.
#region input new user data userId = Guid.NewGuid();
Skripsi.Data.GlucometerDataSetTableAdapters.UserTableAdapter userTA = new Skripsi.Data.GlucometerDataSetTableAdapters.UserTableAdapter (); userTA.Insert(userId, name, DateTime.Now.ToUniversalTime(), 0); #endregion
Setelah memasukkan nama pengguna, maka table adapter akan menjalankan fungsinya untuk menuliskannya ke dalam database New Glucometer ini. print("Thanks for registering, " + name, 0, 4); Application.DoEvents(); System.Threading.Thread.Sleep(delay); home(); } } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } } private Skripsi.Data.GlucometerDataSet.ScanDataTable gscanDT = new Skripsi.Data.GlucometerDataSet.ScanDataTable(); private void ScanButton_Click(object sender, EventArgs e)
95 { try { if (power) { if (userId != new Guid()) { InputBoxResult inputboxresult = InputBox.Show("Input Current BG:", "Glucometer"); if (inputboxresult.ReturnCode == DialogResult.OK) { double BG = double.Parse(inputboxresult.Text);
Skripsi.Data.GlucometerDataSet.ScanRow scanRow = gscanDT.NewScanRow(); scanRow.UserID = userId; scanRow.ScanTime = DateTime.Now.ToUniversalTime(); scanRow.BG = BG; scanRow.DeletionStateCode = 0; gscanDT.Rows.Add(scanRow); home(); } } else { clear(); print("Error: Please load or create new account"); } } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } }
Untuk memasukkan data gula darah akan dijalankan fungsi seperti di atas. Dengan validasi, bahwa power button dalam keadaan true. Baru kemudian dimunculkan input box yang digunakan untuk menginput data gula darah pengguna. Saat proses scan selesai dilakukan, beberapa data tambahan akan di ambil secara otomatis dari sistem untuk melengkapi
96 informasi seperti waktu scan, nilai gula darah itu sendiri dan autogenerate user ID pada database. #region load module int userIndex = 0; int userStart = 0; Skripsi.Data.GlucometerDataSet.UserDataTable guserDT = new Skripsi.Data.GlucometerDataSet.UserDataTable(); private void LoadButton_Click(object sender, EventArgs e) { try { mode = ScreenMode.Load; #region display fixed interface clear(); print("+-----------------+", 0, print("| Name |", 0, print("+-----------------+", 0, print("| |", 0, print("| |", 0, print("| |", 0, print("| |", 0, print("| |", 0, print("+-----------------+", 0, #endregion
0); 1); 2); 3); 4); 5); 6); 7); 8);
#region load users Skripsi.Data.GlucometerDataSetTableAdapters.UserTableAdapter userTA = new Skripsi.Data.GlucometerDataSetTableAdapters.UserTableAdapter (); userTA.Fill(guserDT); #endregion userIndex = 0; userStart = 0; displayUsers(); } catch (Exception ex) { clear(); print("Error: " + ex.Message); } } private void displayUsers() { for (int iCount = userStart; iCount < userStart + 5 && iCount < guserDT.Rows.Count; iCount++) {
97 string name = guserDT[iCount].Code.ToString(); name = name + "-" + guserDT[iCount].Name; if (name.Length > 15) name = name.Substring(0, 15); else name = name.PadRight(15); print(name, 2, iCount - userStart + 3); print("<-", 20, 3 + userIndex - userStart); } } #endregion
Setting layar pada saat tombol load ditekan. Dibutuhkan layar yang dapat menampilkan list nama yang telah menjadi pengguna New glucometer dan juga terdapat kursor untuk menunjuk pada nama yang akan dipilih untuk diaktifkan accountnya. Setelah layar selesai di set, table adapter kembali beraksi dengan mengambil data – data user ID yang telah ada di dalam database.
private DateTime current = DateTime.Today; private void analyze() { Skripsi.Data.GlucometerDataSetTableAdapters.ScanTableAdapter scanTA = new Skripsi.Data.GlucometerDataSetTableAdapters.ScanTableAdapter (); Skripsi.Data.GlucometerDataSet.ScanDataTable scanDT = new Skripsi.Data.GlucometerDataSet.ScanDataTable(); if (power && mode == ScreenMode.Analyze) { DateTime start = current.ToUniversalTime(); DateTime end = current.AddDays(1).AddMilliseconds(-1).ToUniversalTime(); scanTA.FillByUserIdandPeriod(scanDT, userId, start, end); double bgtotal = 0; double lbgi = 0; double hbgi = 0; int[] counts = { 0, 0, 0 };
98 foreach (Skripsi.Data.GlucometerDataSet.ScanRow scanRow in scanDT.Rows) { bgtotal = bgtotal + scanRow.BG; BGClass bgi = new BGClass(scanRow.BG); if (bgi.FBG < 0) lbgi = lbgi + (10 * bgi.FBG * bgi.FBG); else if (bgi.FBG > 0) hbgi = hbgi + (10 * bgi.FBG * bgi.FBG); switch (bgi.Status) { case BGClass.Conditions.Hypoglicemia: counts[0] = counts[0] + 1; break; case BGClass.Conditions.HyperGlicemia: counts[1] = counts[1] + 1; break; case BGClass.Conditions.Normal: counts[2] = counts[2] + 1; break; } } BGClass todayBG = new BGClass(bgtotal / scanDT.Rows.Count); lbgi = lbgi / scanDT.Rows.Count; hbgi = hbgi / scanDT.Rows.Count; clear(); print(current.ToString("dd MMM yyyy"), 0, 0); print("-----------", 0, 1); print("BG : " + todayBG.BG.ToString("0.####"), 0, 2); print("FBG : " + todayBG.FBG.ToString("0.####"), 0, 3); print("LBGI : " + lbgi.ToString("0.####"), 0, 4); print("HBGI : " + hbgi.ToString("0.####"), 0, 5); print("Hipo : " + ((double)counts[0] / scanDT.Rows.Count * 100).ToString("0.####") + "%", 0, 6); print("Hyper : " + ((double)counts[1] / scanDT.Rows.Count * 100).ToString("0.####") + "%", 0, 7); print("Normal: " + ((double)counts[2] / scanDT.Rows.Count * 100).ToString("0.####") + "%", 0, 8); } } private void EnterButton_Click(object sender, EventArgs e)
99 { try { Skripsi.Data.GlucometerDataSetTableAdapters.ScanTableAdapter scanTA = new Skripsi.Data.GlucometerDataSetTableAdapters.ScanTableAdapter (); if (power) { switch (mode) { case ScreenMode.Home: mode = ScreenMode.Analyze; current = DateTime.Today; analyze(); break; case ScreenMode.Load: userId = guserDT[userIndex].UserID; scanTA.FillByUserId(gscanDT, userId); home(); break; } } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } }
Saat tombol enter diklik saat screenmode list data diaktifkan, maka tombol enter akan berfungsi sebagai tombol analyze yakni yang menghitung seluruh analisa data yang akan diproses menjadi informasi akhir yang dibutuhkan pengguna. private void PrevButton_Click(object sender, EventArgs e) { try { if (power) { switch (mode)
100 { case ScreenMode.Home: if (pageindex > 0) pageindex = pageindex - 1; home(); break; case ScreenMode.Analyze: current = current.AddDays(-1); analyze(); break; case ScreenMode.Load: if (userIndex > 0) { print(" ", 20, 3 + userIndex - userStart); if (userIndex == userStart) { userStart = userStart 1; displayUsers(); } userIndex = userIndex - 1; print("<-", 20, 3 + userIndex - userStart); displayUsers(); } break; } } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } } private void NextButton_Click(object sender, EventArgs e) { try { if (power) { switch (mode) { case ScreenMode.Analyze: current = current.AddDays(1); analyze(); break; case ScreenMode.Home: if (pageindex < ((int)Math.Ceiling((double)gscanDT.Rows.Count / pagesize)) 1) pageindex = pageindex + 1; home(); break;
101 case ScreenMode.Load: if (userIndex < guserDT.Rows.Count - 1) { print("
", 20, 3 +
userIndex - userStart); if (userIndex == userStart + 4) { userStart = userStart + 1; displayUsers(); } userIndex = userIndex + 1; print("<-", 20, 3 + userIndex - userStart); } break; } } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } }
Prev Button dan Next Button memilik peranan yang berbeda pada saat screenmode yang berbeda. Settingnya akan dilakukan pada fungsi – fungsi di atas. Pada saat screenmode load maka next dan prev button berfungsi untuk menggerakkan kursor penunjuk nama. Sedangkan pada saat screenmode analyze dan list data maka next dan prev button digunakan sebagai tombol paging, yakni tombol untuk melihat halaman setelah atau sebelumnya. private void EscapeButton_Click(object sender, EventArgs e) { try { if (power) { switch (mode) { case ScreenMode.Analyze:
102 home(); break; case ScreenMode.Load: home(); break; } } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } } private void SaveButton_Click(object sender, EventArgs e) { try { if (power) { Skripsi.Data.GlucometerDataSetTableAdapters.ScanTableAdapter scanTA = new Skripsi.Data.GlucometerDataSetTableAdapters.ScanTableAdapter (); scanTA.Update(gscanDT); } } catch (Exception ex) { clear(); print("Error: " + ex.Message); } } } }
Saat tombol save ditekan, maka table adapter akan kembali bekerja dan menyimpan seluruh data yang diinput saat program berjalan ke dalam database dari New Glucometer.
103 F. Menu
Gambar 3.11 Struktur Menu
Tombol atau button yang digunakan untuk mewakili menu tersebut adalah sebagai berikut: a. Button Save Æ b. Button Load Æ
c. Button Add New Acccount Æ
d. Button Scan Blood Glucose Æ e. Button Calculate Æ f. Button Back Æ g. Button Previous Æ h. Button Next Æ
104 i. Button Power Æ 3.4.3. Rancangan Layar Seperti yang telah dipaparkan sebelumnya bahwa simulasi ini mengambil alat bernama Glukometer sebagai dasarnya yang diharapkan ke depannya penerapan fungsi baru dalam Glukometer ini dapat digunakan pada alat yang sesungguhnya. Mengingat hal tersebut, rancangan layar pada simulasi ini dibuat sedemikain sehingga menyerupai Glukometer yang sebenarnya dengan beberapa penyesuaian berhubung tidak semua perangkat keras dapat disimulasikan dengan baik.
Gambar 3.12 Acuan Rancangan Layar
105
Gambar 3.13 Rancangan Layar Simulasi