Struktur Data Struct Lanjutan: Studi Kasus Bayu Setiaji, S.Kom STMIK AMIKOM YOGYAKARTA
1. Tujuan 1. Pendalaman struct 2. Review fungsi 3. Dapat mengaplikasikan konsep struct dalam kasus nyata 2. Penjelasan Bab ini akan membahas studi kasus yang berkaitan dengan struct, yaitu pembuatan buku alamat sederhana. Di sini akan di bahas setiap langkah bagaimana mengaplikasikan struct tersebut beserta fungsi fungsi yang akan digunakan. 3. Percobaan Untuk mengilustrasikan bagaimana struct dan array struct digunakan, bagian ini akan menjelaskan pembuatan program sederhana tentang buku alamat. Dalam buku alamat terdapat informasi tentang nama, jalan, kota, dan kode pos. Langkah pertama adalah membuat struct alamat. Potongan Kode 3.1 Deklarasi struct struct alamat { char nama[30]; char jalan[40]; char kota[20]; unsigned int kdpos; bkalamat[max]; Kemudian membuat fungsi main() sebagai bagian utama program. Fungsi main() ini berisi aksi yang dilakukan berdasarkan pilihan menu. Potongan Kode 3.2 Fungsi main() int main(void) { int pilih; // inisialisasi struct init(); for(;;) { pilih = menu(); 2 P a g e
switch(pilih) { case 1: input(); break; case 2: hapus(); break; case 3: list(); break; case 4: exit(0); return 0; Fungsi init() menyiapkan array struct dengan memberikan karakter null pada byte pertama di field nama pada setiap struct dalam array. Program berasumsi bahwa elemen array dianggap tidak terpakai bila field nama kosong. Potongan Kode 3.3 Fungsi init() void init(void) { register int t; for(t = 0; t < MAX; t++) bkalamat[t].nama[0] = '\0'; Catatan: keyword register menyebabkan variabel akan disimpan di register pada prosesor (variabel biasanya disimpan di RAM), sehingga akan lebih cepat diakses. Fungsi menu() akan menampilkan pilihan menu dan mengembalikan nilai yang dipilih oleh user. Potongan Kode 3.4 Fungsi menu() int menu(void) { char s[80]; int c; printf("\n====[ MENU ]====\n"); printf("1. Input record\n"); printf("2. Hapus record\n"); printf("3. Lihat daftar\n"); 3 P a g e
printf("4. Keluar\n"); do { printf(" Pilih: "); gets(s); // atoi() akan mengubah nilai alfanumerik ke nilai int c = atoi(s); while(c < 0 c > 4); printf("\n"); return c; Fungsi input() akan meminta user memasukkan input dan menyimpan informasinya ke dalam array struct yang tidak digunakan. Bila array penuh maka akan menampilkan pesan Daftar Penuh. Di sini terjadi pemanggilan fungsi cari_kosong() yang akan mencari array struct yang tidak digunakan. Potongan Kode 3.5 Fungsi input() void input(void) { int slot; char s[80]; // melakukan pencarian terhadap index array yang tidak digunakan slot = cari_kosong(); // jika penuh if(slot == -1) { printf("\ndaftar Penuh"); return; printf("***** Input Record *****\n"); printf(" Nama : "); gets(bkalamat[slot].nama); printf(" Jalan : "); gets(bkalamat[slot].jalan); printf(" Kota : "); gets(bkalamat[slot].kota); printf(" Kode pos: "); gets(s); bkalamat[slot].kdpos = atoi(s); 4 P a g e
Perhatikan fungsi cari_kosong() akan mengembalikan nilai -1 bila semua elemen array digunakan. Nilai -1 adalah angka aman di mana tidak mungkin terdapat index -1 untuk elemen array. Potongan Kode 3.6 Fungsi cari_kosong() int cari_kosong(void) { register int t; for(t = 0; bkalamat[t].nama[0] && t < MAX; ++t); if(t == MAX) return -1; return t; Fungsi hapus() akan meminta user untuk memasukkan index pada data yang akan dihapus. Kemudian fungsi akan memberikan karakter null pada karakter pertama field nama. Potongan Kode 3.7 Fungsi hapus() void hapus(void) { register int slot; char s[80]; printf("record yang dihapus #: "); gets(s); slot = atoi(s); if(slot >= 0 && slot < MAX) bkalamat[slot].nama[0] = '\0'; Terakhir adalah fungsi list() yang akan menampilkan keseluruhan isi daftar buku alamat. Potongan Kode 3.8 Fungsi list() void list(void) { register int t; printf("***** Daftar Alamat *****\n"); for(t = 0; t < MAX; ++t) { if(bkalamat[t].nama[0]) { printf("\nrecord #:%d\n", t); printf(" %s\n", bkalamat[t].nama); printf(" %s\n", bkalamat[t].jalan); printf(" %s\n", bkalamat[t].kota); printf(" %d\n", bkalamat[t].kdpos); 5 P a g e
printf("--------------------------\n"); printf("\n"); 4. Latihan 1. Gabungkanlah semua potongan kode di atas sehingga menjadi kode program lengkap. Jangan lupa untuk menambahkan header stdio.h dan stdlib.h di awal program. Deklarasikan pula konstanta MAX dengan nilai 20 (atau terserah Anda). 2. Tambahkan fungsi untuk meng-update data. 6 P a g e