Petunjuk:
1]. Buatlah 3 kolompok dalam satu kelas, moderator, operator, presenter, dan yang menjawab pertanyaan bisa bergantian.
2]. Setiap kelompok mengembuat tugas untuk presentasi berdasarkan soal dibawah ini.
3]. Buatlah laporan cetak untuk dikumpulkan dan power point untuk presentasi.
4]. Struktur laporan berupa:
- a. Permasalahan
- b. Pembahasan (jelaskan fungsi2 yang dibentuk dan operasi fungsi)
- c. Program lengkap dan capture running.
5]. Buatlah program dengan menggunakan linkedlist untuk memasukkan data dengan menu:
- a. Tambah
- b. Edit
- c. Hapus
- d. Cari
- e. Selesai
Pilihan Anda [a..e]
Dalam struktur terdapat field unik (misal nomor mahasiswa, no karyawan,dll) yang digunakan untuk identifikasi. Penyimpanan data diurutkan sesuai denga field uniknya. Proses penambahan dan penghapusan akan meletakkan data sesuai dengan urutannya.
6]. Buatlah program dengan menggunakan double linkedlist untuk memasukkan data dengan menu:
- a. Tambah
- b. Edit
- c. Hapus
- d. Cari
- e. Selesai
Pilihan Anda [a..e]
Dalam struktur terdapat field unik (misal nomor mahasiswa, no karyawan,dll) yang digunakan untuk identifikasi. Penyimpanan data diurutkan sesuai denga field uniknya. Proses penambahan dan penghapusan akan meletakkan data sesuai dengan urutannya.
7]. Buatlah program dengan menggunakan stack untuk memasukkan data dengan menu:
- a. Tambah
- b. Edit
- c. Hapus
- d. Cari
- e. Selesai
Pilihan Anda [a..e]
Dalam struktur terdapat field unik (misal nomor mahasiswa, no karyawan,dll) yang digunakan untuk identifikasi. Penyimpanan data diurutkan sesuai denga field uniknya. Proses penambahan/penghapusan dengan menggunakan push dan pop saja.
Penyelesaian
TUGAS STRUKTUR DATA
PROGRAM DATA BERAT BADAN MAHASISWA DENGAN SINGLE LINKEDLIST
Pengampu: Eko Riswanto, S.T, M.Cs
Disusun Oleh:
| 1. | Agus Suroto | (12131246) |
|------------|----------------------------------|-------------------|
| 2. | Alifa Titi Subekti | (12131247) |
| 3. | Ana Alfiatun | (12131248) |
| 4. | Anggi Nurcahyo | (12131249) |
| 5. | Dwi Susanto | (12131255) |
| 6. | Erik Tri Yunianta | (12131257) |
| 7. | Erwan Sulistyo | (12131258) |
| 8. | Eva Alfian Sidiq Nurzaman | (12131260) |
| 9. | Fery Rudiyanto | (12131263) |
| 10. | Isni Fauzan | (12131266) |
| 11. | Hanung Riyadi | (12131267) |
| 12. | Muhamad Rizal | (12131272) |
| 13. | Wawan Chahyo Nugroho | (12131294) |
KATA PENGANTAR
Puji syukur penulis panjatkan ke hadirat Allah SWT yang telah memberikan rahmat serta hidayahnya sehingga kami dapat menyelesaikan tugas mata kuliah Struktur Data pada pokok bahasan "Membuat Program Data Berat Badan Mahasiswa" dalam bentuk makalah. Dalam penyusunan tugas atau materi ini, tidak sedikit hambatan yang penulis hadapi. Namun penulis menyadari bahwa kelancaran dalam penyusunan materi ini tidak lain berkat bantuan, dorongan dan bimbingan bapak dosen bapak Eko Riswanto dan rekan rekan mahasiswa sehingga kendala-kendala yang penulis hadapi bisa teratasi.
Oleh karena itu kami mengucapkan banyak terima kasih yang sebesar besarnya. Penulis juga mengharapkan saran dan kritik dari pembaca sehingga untuk penciptaan karya tulis yang lain, sekiranya bisa memberikan yang lebih baik lagi. Semoga materi untuk pembuatan program ini dapat bermanfaat dan menjadi sumbangan pemikiran bagi pihak yang membutuhkan, khususnya bagi penulis sehingga tujuan yang diharapkan dapat tercapai, amin.
Januari 2015
BAB I - PEMBAHASAN
1. Latar Belakang Masalah
Pada pembahasan ini penulis memberikan penjelasan tentang Program Data Berat Badan Mahasiswa Menurut BMI dengan Single Linked List. Program dibuat dengan pengembangan Struktur data yang mencakup Single Linklist, Sorting dan Searching.
Acuan program yang dibuat yaitu dari soal tugas no 1:
Buatlah program dengan menggunakan single link list untuk memasukkan data dengan menu :
- a. Tambah
- b. Edit
- c. Hapus
- d. Cari
- e. Selesai
Dalam struktur terdapat field unik (misal nomor mahasiswa, no karyawan, dll) yang digunakan untuk identifikasi. Penyimpanan data diurutkan sesuai dengan field uniknya. Proses penambahan dan penghapusan akan meletakkan data sesuai dengan urutannya.
Dari soal tersebut di atas, kami memutuskan untuk membuat Program Data Berat Mahasiswa, yang akan mencakup menu tambah, edit, hapus dan cari seperti soal di atas. Untuk selengkapnya akan dijelaskan pada pembahasan selanjutnya berikut ini.
2. Pembahasan Program
2.1. Program yang disusun
Judul Program : DATA BERAT BADAN MAHASISWA MENURUT RUMUS BODY MASS INDEX
Data yang digunakan:
- Data Mahasiswa dengan field unik NIM
- Data Penghitungan Berat Badan
Data yang dihasilkan:
Menampilkan data berat badan mahasiswa yang bisa diolah.
2.2. Gambar Flowchart Program

2.3. Fungsi-fungsi yang digunakan
- Fungsi inputDataMhs(int nmr)
- Fungsi delay(int a)
- Fungsi cetak_tengah(int brs, char *teks)
- Fungsi count()
- Fungsi cekData(int nmr)
- Fungsi tambah(int nmr )
- Fungsi tambah_tengah_list(int nmr, int posisi_sisip)
- Fungsi tambah_simpul_awal(int nmr)
- Fungsi tambah_simpul_akhir(int nmr)
- Fungsi InputData(int nmr)
- Fungsi CariData(int nmr)
- Fungsi Hapus(int nim)
- Fungsi tampil_senarai()
- Fungsi EditData(int nmr)
- Fungsi main()
2.4. Definisi masing-masing fungsi dan Operasinya
1.struct node
Berikut adalah deklarasi pointer dan simpul yaitu nim, nama, umur tinggi, berat, *next, *head, *posisi dan pilih.
struct node {
int nim;
char nama[20];
int umur;
float tinggi;
float berat;
node *next;
} *head;
node *posisi;
int pilih;
2. Fungsi delay(int a);
Fungsi ini berguna untuk menampilkan proses loading saat kita menginput, hapus, cari dan edit data.
void delay(int a)
{
for(int x=0;x<a*100;x++)
{
for(int y=0;y<a*100;y++)
{
}
}
}
3. Fungsi inputDataMhs(int nmr);
Fungsi ini berguna untuk mengisi data pada simpul yang dibuat diawal program tadi, yaitu nama, umur, tinggi dan berat. Data ini yang akan di olah selanjutnya, apakah akan di hapus, dicari, di edit dan di tampilkan. Sebagai acuan digunakan temp->nim sama denagn nmr.
void inputDataMhs(int nmr)
{
struct node *temp;
cout << "Masukkan Nama : "; cin >> temp->nama;
cout << "Masukkan Umur : "; cin >> temp->umur;
cout << "Masukkan tingggi : "; cin >> temp->tinggi;
cout << "Masukkan Berat : "; cin >> temp->berat;
temp->nim=nmr;
}
4. Fungsi cetak_tengah(int brs, char *teks)
Fungsi ini hanya sekedar untuk memberi tampilan agar tampil di tengah layar.
void cetak_tengah(int brs, char *teks)
{
gotoxy(40-strlen(teks)/2,brs);cout<<teks;
}
5. Fungsi count()
Fungsi ini berfungsi untuk menghitung jumlah data yang diinput. Yang menjadi acuan ada berapa data di dalam linklist. Pertama menciptakan node n. Dengan c sama dengan 0. n disini sama dengan head, selama n tidak sama dengan null maka di jalankan n sama dengan n->next,c akan bertambah 1, dan akan kembali ke c jika n sama dengan null.
int count()
{
struct node *n;
int c=0;
n=head;
while(n!=NULL)
{
n=n->next;
c++;
}
return c;
}
6. Fungsi cekData(int nmr)
Fungsi ini berguna untuk mengecek adanya data yang dobel atau tidak pada saat input data yang kedua dan seterusnya. Karena acuan pada variabel nim maka nim tidak boleh dobel. Pertama menciptakan node baru yaitu temp. Dan temp sama dengan head, selama temp tidak sama dengan null maka akan dijalankan, jika temp->nim sama dengan nmr, maka akan mengembalikan dengan nilai false. Selain itu akan mengembalikan dengan nilai true dan temp sama dengan temp->next.
bool cekData(int nmr)
{
struct node *temp;
temp=head;
while(temp!=NULL)
{
if(temp->nim == nmr)
return false;
else
return true;
temp=temp->next;
}
return true;
}
7. Fungsi tambah(int nmr)
Fungsi ini adalah untuk menambah data dalam linklist. Data pada simpul ini yang akan diolah yaitu akan di tempatkan dimana simpul ini di dalam linklist, apakah di awal, di tengah atau di akhir linklist. Untuk pengolahan akan dilakukan oleh fungsi InputData(int nmr);. Pertama menciptakan struct node *temp, temp = node baru, selanjutnya memanggil fungsi inputDataMhs(nmr); jika head bernilai null, head sama dengan temp, head next diberi nilai null,temp next sama dengan head,head sama dengan temp.
void tambah(int nmr )
{
struct node *temp;
temp = new node;
inputDataMhs(nmr);
if (head== NULL)
{
head=temp;
head->next=NULL;
}
else
{
temp->next=head;
head=temp;
}
}
8. Fungsi tambah_tengah_list(int nmr, int posisi_sisip)
Fungsi ini untuk menambah simpul di tengah dari hasil penyeleksian fungsi InputData(int nmr); sehingga didapatkan posisi sisip. Jika posisi penyisipan di luar dari jangkauan linked list yaitu jika posisi kurang dari 1 maka proses yang dilakukan adalah proses penambahan data di awal, dan jika melebihi banyak data yang ada di linked list (>) dari banyak data maka proses yang dilakukan adalah proses penambahan data di akhir. Dan jika berada dalam jangkauan linklis maka tinggal mengikuti posisi sisip.
Pertama menciptakan node *temp dan *bantu, bantu sama dengan head, temp sama dengan node baru, dan mengulang sampai i kurang dari posisi_sisip s-- 1(sisip kurang dari satu) jika bantu->next tidak sama dengan null,maka bantu sama dengan bantu->next, lainnya berhenti. Selanjutnya menginput data mahasiswa.
void tambah_tengah_list(int nmr, int posisi_sisip)
{
node *temp, *bantu;
bantu=head;
temp =new node;
for(int i=1;i<posisi_sisip-1;i++)
{
if(bantu->next != NULL)
bantu=bantu->next;
else
break;
}
cout << "Masukkan Nama : "; cin >> temp->nama;
cout << "Masukkan Umur : "; cin >> temp->umur;
cout << "Masukkan tingggi : "; cin >> temp->tinggi;
cout << "Masukkan Berat : "; cin >> temp->berat;
temp->nim=nmr;
temp->next=bantu->next;
bantu->next=temp;
}
8. Fungsi tambah_simpul_awal(int nmr)
Yaitu fungsi untuk menambahkan data pada awal simpul. Pertama ciptakan node *temp, temp di isi node baru. Selanjutnya memanggil fungsi inputDataMhs(nmr).
void tambah_simpul_awal(int nmr)
{
node *temp;
temp = new node;
inputDataMhs(nmr);
temp->next = NULL;
temp->next = head;
head = temp;
}
9. Fungsi tambah_simpul_akhir(int nmr)
Yaitu fungsi untuk menambahkan data pada akhir simpul. Pertama ciptakan node *temp, *temp2, temp di isi node baru. Selanjutnya memanggil fungsi inputDataMhs(nmr). Selanjutnya akan dilakukan proses, sampai temp->next bernilai null, baru data ditambahkan setelah simpul yang mempunyai nilai next sama dengan null.
void tambah_simpul_akhir(int nmr)
{
node *temp, *temp2;
temp=new node;
inputDataMhs(nmr);
temp->next=NULL;
temp2=head;
while(temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next=temp;
}
10. Fungsi InputData(int nmr)
Fungsi ini digunakan untuk melakukan penyeleksian fungsi tambah mana yang akan digunakan. Apakah fungsi tambah(nmr), tambah_simpul_awal(nmr), tambah_tengah_list (int nmr, int posisi_sisip), tambah_simpul_akhir(nmr) dan apakah data yang dimasukkan sudah ada sebelumnnya atau tidak.
Pertama menciptakan node baru yaitu temp. Dan temp sama dengan head. jika temp sama dengan null maka fungsi tambah(nmr) dijalankan dan lainnya jika fungsi cekData(nmr) bernilai false maka berarti data sudah pernah diinputkan, ini merupakan seleksi agar tidak ada input nim yang sama, karena nim merupakan sebagai acuan untuk proses data berikutnya. Selama temp tidak sama dengan null , jika temp->nim kurang dari nmr, c ditambahkan satu dengan temp sama dengan temp->next. Jika c sama dengan nol maka panggil fungsi tambah_simpul_awal(nmr), dan lainnya jika c kurang dari niali yang berada dalam fungsi count() maka fungsi tambah_tengah_list(int nmr, int posisi_sisip) dijalankan dengan mengisi posisi_sisip dengan ++c. Jika tidak maka fungsi tambah_simpul_akhir(nmr) yang akan dijalankan.
void InputData(int nmr)
{
int c=0;
struct node *temp;
temp=head;
if(temp==NULL)
{
tambah(nmr);
clrscr();
cout<<"DATA BERHASIL DISIMPAN.\nTEKAN ENTER UNTUK MELANJUTKAN";
getch();
}
else
{
if(cekData(nmr) == false)
{
clrscr();
cout<<"NIM sudah pernah di inputkan";
getch();
}
else
{
while(temp!=NULL)
{
if(temp->nim<nmr)
c++;
temp=temp->next;
}
if(c==0)
tambah_simpul_awal(nmr);
else if(c<count())
{
tambah_tengah_list(nmr,++c);
}
else
{
tambah_simpul_akhir(nmr);
}
clrscr();
cout<<"DATA BERHASIL DISIMPAN.\nTEKAN ENTER UNTUK MELANJUTKAN";
getch();
}
}
}
11. Fungsi CariData(int nmr);
Berikut ini adalah fungsi untuk mencari data yang berada di linklist. Proses pencarian mengacu pada nim yang diterima dengan variabel nmr pada fungsi ini. Pertama membuat variabel bool dengan nama ketemu yang berisi false, selanjutnya buat simpul temp. Temp sama dengan head, selama temp tidak sama dengan null, jalankan program jika temp->nim sama dengan nmr ketemu akan bernilai true sehingga data ditampilkan. Jika ketemu bernilai false berarti data tidak ditemukan dan tidak ditampilkan.
void CariData(int nmr)
{
bool ketemu=false;
struct node *temp;
temp=head;
while(temp!=NULL)
{
if(temp->nim == nmr){
ketemu = true;
clrscr();
cout<<"DATA BERHASIL DITEMUKAN"<<endl;
cout<<"NIM : "<<temp->nim<<" ";
cout<<"NAMA : "<<temp->nama<<" ";
cout<<"UMUR : "<<temp->umur<<" ";
cout<<"TINGGI : "<<temp->tinggi<<" ";
cout<<"BERAT : "<<temp->berat<<" ";
cout<<"\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
temp=temp->next;
}
if(ketemu == false)
{
clrscr();
cout<<"MAAF DATA DENGAN NIM "<<nmr<<" TIDAK DI TEMUKAN\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
}
12. Fungsi Hapus(int nim)
Fungsi ini digunakan untuk melakukan hapus simpul data yang ada dalam linklist. simpul yang akan dihapus berdasr pada nim yang di masukkan. Sehingga jika data yang sama dengan nim yang akan dihapus.
Pertama menciptakan node *temp dan *prev. Lalu isi temp dengan head, selama temp tidak sama denagn null, maka alukan pengujian jika temp sama dengan head yang menunjukkan data ada dan cocok, selanjutnya head sama dengan head->next dan return bernilai 1 lainnya prev->next sama dengan temp->next dan return juga bernilai 1, dan jika temp tidak sam dengan head maka prev sama dengan temp dan temp sama dengan temp->next. Jika temp bernilai null return akan bernilai 0 yang berarti data tidak ada atau tidak cocok dengan nim yang dimasukkan ayng akna dihapus.
int Hapus(int nim)
{
struct node *temp, *prev;
temp=head;
while(temp!=NULL)
{
if(temp->nim==nim)
{
if(temp==head)
{
head=temp->next;
return 1;
}
else
{
prev->next=temp->next;
return 1;
}
}
else
{
prev=temp;
temp= temp->next;
}
}
return 0;
}
13. Fungsi tampil_senarai()
Fungsi ini digunakan untuk menampilkan data yang telah kit inputkan sebelumnya, ataupun hasil olah data yang telah dilakukan. Dan juga pemrosesan data berat badan dari mahasiswa.
Pertama membuat node temp dan mengisi temp dengan head, jika temp sama dengan null berarti data masih kosong, lainnya isi i dengan nilai 1 sebagai counter. Selama temp tidak sama dengan null cetak data yang ada dalm list dan melakukan pengujian berat badan terhadap rumus standar BMI(Body Mass Index), yaitu berat /( tinggi / 100 tinggi /100). Jika bmi kurang dari 18 maka BERAT BADAN KURANG, jika bmi besar dari 18 dan kurang dari 24 maka BERAT BADAN IDEAL, jika bmi besar dari 24 dan kurang dari 30 maka KELEBIHAN BERAT BADAN, dan jika bmi besar dari 30 maka OBISITAS.
void tampil_senarai()
{
node *temp;
temp = head;
if(temp == NULL)
cout<<"List kosong"<<endl;
else
{
int i=1;
cout<<endl;
cetak_tengah(1,"DATA BERAT BADAN MAHASISWA MENURUT RUMUS BODY MASS INDEX");
cout<<"\n===================================================";
gotoxy(2,4);cout<<"No.";
gotoxy(7,4);cout<<"NIM";
gotoxy(11,4);cout<<"NAMA";
gotoxy(25,4);cout<<"UMUR";
gotoxy(31,4);cout<<"TB"<<endl;
gotoxy(35,4);cout<<"BB"<<endl;
gotoxy(38,4);cout<<"BMI"<<endl;
gotoxy(42,4);cout<<"KETERANGAN"<<endl;
cout<<"====================================================="<<endl;
while(temp != NULL)
{
gotoxy(2,i+5);cout<<i;
gotoxy(7,i+5);cout<<temp->nim;
gotoxy(11,i+5);cout<<temp->nama;
gotoxy(25,i+5);cout<<temp->umur;
gotoxy(31,i+5);cout<<temp->tinggi;
gotoxy(35,i+5);cout<<temp->berat;
//hitung bmi
int bmi = temp->berat/((temp->tinggi/100)*(temp->tinggi/100));
gotoxy(38,i+5);cout<<bmi;
//memberi keterangan
char *ket;
if(bmi <= 18)
ket = "BERAT BADAN KURANG";
else if(bmi > 18 && bmi <= 24)
ket = "BERAT BADAN IDEAL";
else if(bmi > 24 && bmi <= 30)
ket = "KELEBIHAN BERAT BADAN";
else if(bmi > 30)
ket = "OBESITAS";
gotoxy(42,i+5);cout<<ket;
temp=temp->next;
i++;
}
cout<<"\n\n================================================="<<endl;
cout<<"KETERANGAN : "<<endl;
cout<<" -BMI < 18 = BERAT BADAN KURANG"<<endl;
cout<<" -BMI 18 - 24 = IDEAL"<<endl;
cout<<" -BMI 25 - 29 = KELEBIHAN BERAT BADAN "<<endl;
cout<<" -BMI > 30 = OBESITAS"<<endl;
}
}
14. Fungsi EditData(int nmr)
Fungsi ini digunakan untuk mengedit data yang ada dalam linklist. bool ketemu=false; untuk menetukan bahwa fungsi ketemu sama dengan false/ salah. Struct node*temp; fungsi ini akan menciptakan node sama dengan temp. temp=head; maka temp sama dengan head, while(temp!=NULL) apabila temp tidak sama dengan null, maka akan terjadi proses perulangan terus. if(temp->nim == nmr) jika temp sama dengan no nim maka akan dijalankan proses edit ( data ketemu) ketemu = true; nim sama dengan true, no nim yang akan diedit maka akan tampil seperti pada gambar. Kemudian isi temp sama dengan temp->next maka akan dilakukan proses selanjutnya, If (ketemu==false) Jika ketemu bernilai false maka tidak ada data yang akan diedit.
void EditData(int nmr)
{
bool ketemu=false;
struct node *temp;
temp=head;
while(temp!=NULL)
{
if(temp->nim == nmr){
ketemu = true;
clrscr();
cout<<"EDIT DATA BERIKUT INI"<<endl;
cout<<"NIM : "<<temp->nim<<" "<<endl;
cout<<"NAMA : "<<temp->nama<<" "<<endl;
cout<<"UMUR : "<<temp->umur<<" "<<endl;
cout<<"TINGGI : "<<temp->tinggi<<" "<<endl;
cout<<"BERAT : "<<temp->berat<<" "<<endl<<endl;
cout<<"PROSES EDIT DATA"<<endl;
cout<<"NAMA : ";cin>>temp->nama;
cout<<"UMUR : ";cin>>temp->umur;
cout<<"TINGGI : ";cin>>temp->tinggi;
cout<<"BERAT : ";cin>>temp->berat;
clrscr();
cout<<"DATA BERHASIL DI EDIT.\nTEKAN ENTER UNTUK MELANJUTKAN";
getch();
}
temp=temp->next;
}
if(ketemu == false)
{
clrscr();
cout<<"MAAF DATA DENGAN NIM "<<nmr<<" TIDAK DI TEMUKAN\nTEKAN ENTER UNTUK MELANJUTKAN"<<endl;
getch();
}
}
15. Fungsi main()
Dalam fungsi main() berisi menu pilihan dan pemanggilan fungsi-fungsi sesuai menu yang ada. Menu terdiri dari input, dengan pilihan 1 yang akan memanggil fungsi InputData(nmr), pilihan 2 Cari, yang akan memanggil fungsi CariData(nmr), pilihan 3 Hapus, yang akan memanggil fungsi Hapus(nmr), pilihan 4 Edit, yang akan memanggil fungsi EditData(nmr), dan pilihan 5 Selesai, untuk keluar dari program. Dan akan berualng sampai pilihan tidak sama dengan 5.
void main()
{
int nmr;
head=NULL;
do
{
clrscr();
tampil_senarai();
cout<<endl<<endl<<"======================"<<endl;
cout<<"Menu Pilihan"<<endl;
cout<<"1. Input"<<endl;
cout<<"2. Cari"<<endl;
cout<<"3. Hapus"<<endl;
cout<<"4. Edit"<<endl;
cout<<"5. Exit"<<endl;
cout<<"Pilihan >> ";cin>>pilih;
switch(pilih)
{
case 1: cout<<"Masukkan NIM : ";
cin>>nmr;
InputData(nmr);
break;
case 2: cout<<"Masukkan NIM : ";
cin>>nmr;
CariData(nmr);
break;
case 3: cout<<"Masukkan NIM : ";
cin>>nmr;
if(Hapus(nmr)){
clrscr();
cout<<"DATA BERHASIL DIHAPUS.\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
else{
clrscr();
cout<<"DATA GAGAL DIHAPUS.\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
break;
case 4: cout<<"Masukkan NIM : ";
cin>>nmr;
EditData(nmr);
break;
default:
cout<<"Pilihan yang anda masukkan salah, \ntekan enter untuk melanjutkan ";
}
}
while(pilih !=5);
}
2.5. Program Lengkap

#include <iostream.h>
#include <conio.h>
struct node {
int nim;
char nama[20];
int umur;
float tinggi;
float berat;
node *next;
} *head;
//node *awal_ptr=NULL;
node *posisi;
int pilih;
//funsi tools
void CariData(int nmr)
{
bool ketemu=false;
struct node *temp;
temp=head;
while(temp!=NULL)
{
if(temp->nim == nmr){
ketemu = true;
clrscr();
cout<<"DATA BERHASIL DITEMUKAN"<<endl;
cout<<"NIM : "<<temp->nim<<" ";
cout<<"NAMA : "<<temp->nama<<" ";
cout<<"UMUR : "<<temp->umur<<" ";
cout<<"TINGGI : "<<temp->tinggi<<" ";
cout<<"BERAT : "<<temp->berat<<" ";
cout<<"\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
temp=temp->next;
}
if(ketemu == false)
{
clrscr();
cout<<"MAAF DATA DENGAN NIM "<<nmr<<" TIDAK DI TEMUKAN\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
}
void inputDataMhs(int nmr)
{
struct node *temp;
cout << "Masukkan Nama : "; cin >> temp->nama;
cout << "Masukkan Umur : "; cin >> temp->umur;
cout << "Masukkan tingggi : "; cin >> temp->tinggi;
cout << "Masukkan Berat : "; cin >> temp->berat;
temp->nim=nmr;
}
void cetak_tengah(int brs, char *teks)
{
gotoxy(40-strlen(teks)/2,brs);cout<<teks;
}
int count()
{
struct node *n;
int c=0;
n=head;
while(n!=NULL)
{
n=n->next;
c++;
}
return c;
}
bool cekData(int nmr)
{
struct node *temp;
temp=head;
while(temp!=NULL)
{
if(temp->nim == nmr)
return false;
else
return true;
temp=temp->next;
}
return true;
}
//Fugnsi Tambah data
void tambah(int nmr )
{
struct node *temp;
temp = new node;
inputDataMhs(nmr);
if (head== NULL)
{
head=temp;
head->next=NULL;
}
else
{
temp->next=head;
head=temp;
}
}
void tambah_tengah_list(int nmr, int posisi_sisip)
{
node *temp, *bantu;
bantu=head;
temp =new node;
for(int i=1;i<posisi_sisip-1;i++)
{
if(bantu->next != NULL)
bantu=bantu->next;
else
break;
}
cout << "Masukkan Nama : "; cin >> temp->nama;
cout << "Masukkan Umur : "; cin >> temp->umur;
cout << "Masukkan tingggi : "; cin >> temp->tinggi;
cout << "Masukkan Berat : "; cin >> temp->berat;
temp->nim=nmr;
temp->next=bantu->next;
bantu->next=temp;
}
void tambah_simpul_awal(int nmr)
{
node *temp;
temp = new node;
inputDataMhs(nmr);
temp->next = NULL;
temp->next = head;
head = temp;
}
void tambah_simpul_akhir(int nmr)
{
node *temp, *temp2;
temp=new node;
inputDataMhs(nmr);
temp->next=NULL;
temp2=head;
while(temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next=temp;
}
void InputData(int nmr)
{
int c=0;
struct node *temp;
temp=head;
if(temp==NULL)
{
tambah(nmr);
clrscr();
cout<<"DATA BERHASIL DISIMPAN.\nTEKAN ENTER UNTUK MELANJUTKAN";
getch();
}
else
{
if(cekData(nmr) == false)
{
clrscr();
cout<<"NIM sudah pernah di inputkan";
getch();
}
else
{
while(temp!=NULL)
{
if(temp->nim<nmr)
c++;
temp=temp->next;
}
if(c==0)
tambah_simpul_awal(nmr);
else if(c<count())
{
tambah_tengah_list(nmr,++c);
}
else
{
tambah_simpul_akhir(nmr);
}
clrscr();
cout<<"DATA BERHASIL DISIMPAN.\nTEKAN ENTER UNTUK MELANJUTKAN";
getch();
}
}
}
//akhir fungsi tambah data
//fungsi hapus data
int Hapus(int nim)
{
struct node *temp, *prev;
temp=head;
while(temp!=NULL)
{
if(temp->nim==nim)
{
if(temp==head)
{
head=temp->next;
return 1;
}
else
{
prev->next=temp->next;
return 1;
}
}
else
{
prev=temp;
temp= temp->next;
}
}
return 0;
}
//akhir fungsi hapus data
//fungsi tampil data
void tampil_senarai()
{
node *temp;
temp = head;
if(temp == NULL)
cout<<"List kosong"<<endl;
else
{
int i=1;
cout<<endl;
cetak_tengah(1,"DATA BERAT BADAN MAHASISWA MENURUT RUMUS BODY MASS INDEX");
cout<<"\n=====================================================================";
gotoxy(2,4);cout<<"No.";
gotoxy(7,4);cout<<"NIM";
gotoxy(11,4);cout<<"NAMA";
gotoxy(25,4);cout<<"UMUR";
gotoxy(31,4);cout<<"TB"<<endl;
gotoxy(35,4);cout<<"BB"<<endl;
gotoxy(38,4);cout<<"BMI"<<endl;
gotoxy(42,4);cout<<"KETERANGAN"<<endl;
cout<<"====================================================================="<<endl;
while(temp != NULL)
{
gotoxy(2,i+5);cout<<i;
gotoxy(7,i+5);cout<<temp->nim;
gotoxy(11,i+5);cout<<temp->nama;
gotoxy(25,i+5);cout<<temp->umur;
gotoxy(31,i+5);cout<<temp->tinggi;
gotoxy(35,i+5);cout<<temp->berat;
//hitung bmi
int bmi = temp->berat/((temp->tinggi/100)*(temp->tinggi/100));
gotoxy(38,i+5);cout<<bmi;
//memberi keterangan
char *ket;
if(bmi <= 18)
ket = "BERAT BADAN KURANG";
else if(bmi > 18 && bmi <= 24)
ket = "BERAT BADAN IDEAL";
else if(bmi > 24 && bmi <= 30)
ket = "KELEBIHAN BERAT BADAN";
else if(bmi > 30)
ket = "OBESITAS";
gotoxy(42,i+5);cout<<ket;
temp=temp->next;
i++;
}
cout<<"\n\n====================================================================="<<endl;
cout<<"KETERANGAN : "<<endl;
cout<<" -BMI < 18 = BERAT BADAN KURANG"<<endl;
cout<<" -BMI 18 - 24 = IDEAL"<<endl;
cout<<" -BMI 25 - 29 = KELEBIHAN BERAT BADAN "<<endl;
cout<<" -BMI > 30 = OBESITAS"<<endl;
}
}
//akhir fungsi tampil
//fungsi edit data
void EditData(int nmr)
{
bool ketemu=false;
struct node *temp;
temp=head;
while(temp!=NULL)
{
if(temp->nim == nmr){
ketemu = true;
clrscr();
cout<<"EDIT DATA BERIKUT INI"<<endl;
cout<<"NIM : "<<temp->nim<<" "<<endl;
cout<<"NAMA : "<<temp->nama<<" "<<endl;
cout<<"UMUR : "<<temp->umur<<" "<<endl;
cout<<"TINGGI : "<<temp->tinggi<<" "<<endl;
cout<<"BERAT : "<<temp->berat<<" "<<endl<<endl;
cout<<"PROSES EDIT DATA"<<endl;
cout<<"NAMA : ";cin>>temp->nama;
cout<<"UMUR : ";cin>>temp->umur;
cout<<"TINGGI : ";cin>>temp->tinggi;
cout<<"BERAT : ";cin>>temp->berat;
clrscr();
cout<<"DATA BERHASIL DI EDIT.\nTEKAN ENTER UNTUK MELANJUTKAN";
getch();
}
temp=temp->next;
}
if(ketemu == false)
{
clrscr();
cout<<"MAAF DATA DENGAN NIM "<<nmr<<" TIDAK DI TEMUKAN\nTEKAN ENTER UNTUK MELANJUTKAN"<<endl;
getch();
}
}
//akhir fungsi editdata
void main()
{
int nmr;
head=NULL;
do
{
clrscr();
tampil_senarai();
cout<<endl<<endl<<"======================"<<endl;
cout<<"Menu Pilihan"<<endl;
cout<<"1. Input"<<endl;
cout<<"2. Cari"<<endl;
cout<<"3. Hapus"<<endl;
cout<<"4. Edit"<<endl;
cout<<"5. Exit"<<endl;
cout<<"Pilihan >> ";cin>>pilih;
switch(pilih)
{
case 1: cout<<"Masukkan NIM : ";
cin>>nmr;
InputData(nmr);
break;
case 2: cout<<"Masukkan NIM : ";
cin>>nmr;
CariData(nmr);
break;
case 3: cout<<"Masukkan NIM : ";
cin>>nmr;
if(Hapus(nmr)){
clrscr();
cout<<"DATA BERHASIL DIHAPUS.\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
else{
clrscr();
cout<<"DATA GAGAL DIHAPUS.\nTEKAN ENTER UNTUK MELANJUTKAN PROSES";
getch();
}
break;
case 4: cout<<"Masukkan NIM : ";
cin>>nmr;
EditData(nmr);
break;
default:
cout<<"Pilihan yang anda masukkan salah, \ntekan enter untuk melanjutkan ";
}
}
while(pilih !=5);
}
BAB II - KESIMPULAN
Program ini adalah program untuk menampilkan data berat badan mahasiswa menurut rumus BMI(Body Mass Index) atau Indek Masa Tubuh yaitu berat badan dibagi (tinggi badan/100*tinggi badan/100). Program ini dibuat dengan menggunakan single linkedlist. Di dalamnya mencakup proses Tambah, Edit, Cari, Hapus dan Pengurutan yang otomatis dilakukan oleh program yang di jabarkan dengan beberapa fungsi. Dengan single linked list ini kita bisa membuat program sederhana seperti Program Data Berat Badan Mahasiswa ini.