Langkah pertama yang kami lakukan adalah
mempersiapkan library yang akan digunakan.Library yang kami pakai adalah :
#include<conio.h> : sediakan
fungsi input dan output konsole
#include<iostream> : input
dan output berdasarkan stream
#include<stdlib.h> : sediakan fungsi general seperti
managemen memori dinamis,generate nomer random, integer aritmatik
Langkah kedua kami sipakan struktur data
untuk menyimpan elemen data.Disini kami mengunakan 2 buah grup data
struct TahunAjaran
{int tahun;
int
semester;};
struct Matakuliah
{char namaMK[99];
char
kode[20];
int
sks;
TahunAjaran
tahunajaran;
Matakuliah *next; };
Lalu kedua buah data stuktur
tersebut akan digabung lagi menjadi sebuah struktur baru yaitu :
typedef struct Matakuliah *dataMK;
Untuk mendeklarasikan variabel
pointer untuk menyimpand data yang nantinya disimpan distruktur data :
dataMK depan,belakang;
void link_L(dataMK *depan, dataMK
*belakang)
{*depan=NULL;
*belakang=NULL;}
Program utama diaplikai ini berisi menu utama yang akan
memanggil kelas dan fungsi yang telah disiapkan untuk menjalankan aplikasi ini.
int main(int argc, char** argv)
{
int pilih;
link_L(&depan,&belakang);
main :
system("cls");
cout<<"1.
Tambah Data Matakuliah"<<endl;
cout<<"2.
Data Matakuliah (SKS Terbesar dan Terkecil)"<<endl;
cout<<"3.
Data Matakuliah (Tahun Ajaran Terbesar)"<<endl;
cout<<"4.
Daftar Matakuliah ditahun Ajaran Genap"<<endl;
cout<<"5.
Daftar Semua Matakuliah"<<endl;
cout<<"6.
Keluar\n"<<endl;
cout<<"Masukkan
Pilihan Anda : "; cin>>pilih;
cout<<endl;
switch(pilih)
{
case
1:
system("cls");
inputData(&depan,&belakang);
break;
case
2 :
system("cls");
cout<<"\t\t\t\tSKS
Terbesar dan Terkecil"<<endl<<endl;
sksKecil_Besar(depan);
break;
case
3:
system("cls");
cout<<"\t\t\t\tTahun
Ajaran Terbesar"<<endl<<endl;
TA_Terbesar(depan);
break;
case
4:
system("cls");
cout<<"\t\t\tData
Matakuliah di Tahun Ajaran Genap "<<endl<<endl;
TA_genap(depan);
break;
case
5:
system("cls");
cout<<"\t\t\t\t Data Matakuliah"<<endl;
output(depan);
getch();
break;
case
6:
system("cls");
cout<<endl<<"\n\n\n\n\n\n\n\n";
cout<<"\t\t\t Program
Exit"<<endl<<endl;
cout<<"\t\t\t\t Thanks!!";
cout<<endl<<"\n\n\n\n\n\n\n\n";
getche();
_exit(0);
break;
default:
cout<<"Inputan
Anda Salah!!";
getche();
break;
}
goto main;
return (EXIT_SUCCESS);
}
Kami menggunakan switch case untuk memilih
menu yang ada dan di setiap case menu akan memanggil fungsi atau kelas.
Penjelasan menu :
1.
Case 1 : akan
memanggil fungsi input data
int inputData(dataMK *depan,
dataMK *belakang) //Tambah Data Matakuliah
{
dataMK newData;
newData =
(dataMK)malloc(sizeof(struct Matakuliah));
if(newData!=NULL)
{
cout<<"\t\t\t\tInput
Data Matakuliah"<<endl<<endl;
cout<<"\nMasukan
Nama Matakuliah : ";
cin>>newData->namaMK;
cout<<"Masukan
Kode Mata Kuliah : ";
cin>>newData->kode;
cout<<"Masukan
SKS Mata Kuliah : "; cin>>newData->sks;
cout<<"Masukan
Tahun Ajaran : ";
cin>>newData->tahunajaran.tahun;
cout<<"Masukan
Semester : ";
cin>>newData->tahunajaran.semester;
newData->next=NULL;
if(*depan==NULL)
{
*depan=newData;
*belakang=newData;
}
else
{
(*belakang)->next=newData;
*belakang=newData;
}
cout<<endl<<"\t\t\t Data Berhasil ditambah!!";
getch();
}
return 0;
}
Di dalam fungsi inputData
terdapat alur sebagai berikut:
-
kami membuat satu
objek bernama newData.
-
newData ini
nantinya akan menyimpan data dalam memori yang bersifat dinamik, karena
menggunakan malloc.
-
masuk ke
percabangan,
Jika newData tidak sama dengan
NULL (sudah ada alokasi memori pada newData), maka instruksi selanjutnya
dijalankan.
·
Nama makul disimpan
di newData dalam variabel namaMK dengan penulisan; newData -> namaMK karena
menggunakan pointer of struct.
·
kode makul disimpan
di newData dalam variabel kode dengan penulisan; newData -> kode karena
menggunakan pointer of struct.
·
SKS makul disimpan
di newData dalam variabel sks dengan penulisan; newData -> sks karena
menggunakan pointer of struct.
·
Tahun Ajaran makul
disimpan di newData dalam struct tahunajaran dalam variabel tahun dengan
penulisan; newData -> tahunajaran.tahun karena menggunakan pointer of
struct.
·
Semester makul
disimpan di newData dalam struct tahunajaran dalam variabel semester dengan
penulisan; newData -> tahunajaran.semester karena menggunakan pointer of
struct.
newData->next=NULL adalah
intstruksi untuk mendeklarasikan newData ke next adalah selalu NULL, selama
user belum menginputkan data yang baru.
Masuk percabangan lagi, jika
pointer depan masih kosong, maka pointer depan menyimpan newData/data yang baru
diinputkan dan pointer belakang juga menyimpan newData/data yang baru dimasukkan.
jika tidak, pointer belakang ke next dan menyimpan newData. pointer belakang
berisikan newData/data yang baru diinputkan.
2.
Case 2 : memanggil
kelas untuk menampilkan mata kulaih dengan sks terbesar dan terkecil
void sksKecil_Besar(dataMK
depan) //Data Matakuliah (SKS Terbesar
dan Terkecil)
{
dataMK a;
int max = 0, min = 0;
string MKbesar = "", MKkecil = "",
KDbesar = "", KDkecil = "";
if (depan!=NULL)
if (depan!=NULL)
{
a=depan;
max =
a->sks;
min =
a->sks;
while (a!=NULL)
{
if (a->sks>=max){
max = a->sks;
MKbesar =
a->namaMK;
KDbesar = a->kode;
}
if (a->sks<=min){
min = a->sks;
MKkecil =
a->namaMK;
KDkecil = a->kode;
}
a=a->next;
}
cout<<"SKS Terbesar
: "<<max<<" Dengan Matakuliah : "<<MKbesar<<"
Dan Kode Matakuliah : "<<KDbesar<<endl;
cout<<"SKS Terkecil
: "<<min<<" Dengan Matakuliah : "<<MKkecil<<"
Dan Kode Matakuliah : "<<KDkecil<<endl;
cout<<endl;
}
else {
cout<<"Kosong"<<endl;
}
cout<<"\nTekan Enter untuk kembali";
getch();
}
Di dalam fungsi sksKecil_Besar
terdapat alur sebagai berikut:
- Membuat objek a dari struct dataMK.
- Membuat variabel string :
string MKbesar = "", MKkecil = "", KDbesar = "",
KDkecil = "";
- Jika variabel depan tidak sama
dengan NULL, maka objek a menyimpan data yang terdapat di variabel depan. var
MAX menyimpan sks yang ada di a. var MIN menyimpan sks yang ada di a.
- Selama a tidak sama dengan
null, dia mengecek apakah sks yang ada di a >= max atau tidak. jika, maka
max berisikan sks yang ada di a, MKbesar berisikan namaMK yang ada di a, dan
KDbesar menyimpan kode yang ada di a.
- Apabila sks yang di a <=
min, maka min berisikan sks yang ada di a, MKkecil berisikan namaMK yang ada di
a, dan KDkecil menyimpan kode yang ada di a.
- Lalu a menyimpan a->next.
- Lika masih null (kosong), maka keluar
output "kosong".
3.
Case 3 : memanggil
kelas untuk menampilkan matakuliah dengan tahun ajaran terbesar
void TA_Terbesar(dataMK depan)
//Data Matakuliah (Tahun Ajaran Terbesar)
{
dataMK a;
int max = 0;
if (depan!=NULL)
{
a=depan;
max =
a->tahunajaran.tahun;
while
(a!=NULL)
{
if
(a->tahunajaran.tahun>=max)
{
system("cls");
cout<<"Tahun
ajaran Terbesar : "<<a->tahunajaran.tahun<<" Dengan
Matakuliah : "<<a->namaMK<<" Dan Kode Matakuliah :
"<<a->kode;
}
a=a->next;
}
cout<<endl;
}
else {
cout<<"Kosong"<<endl;
}
cout<<"\nTekan
Enter untuk kembali";
getch();
}
Di dalam fungsi TA_Terbesar
terdapat alur sebagai berikut:
- Membuat objek a dari struct dataMK.
- Membuat variabel i dengan tipe data integer
yang bernilai 0.
- Jika depan tidak sama dengan NULL
a = depan dan max = a->tahunajaran.tahun;
- Selama a tidak sama dengan NULL
a->tahunajaran.tahun dibandingkan dengan max, jika a->tahunajaran.tahun
lebih besar sama dengan max maka cetak cout<<"Tahun ajaran Terbesar
: "<<a->tahunajaran.tahun<<" Dengan Matakuliah :
"<<a->namaMK<<" Dan Kode Matakuliah :
"<<a->kode;
- Lalu a menyimpan a->next;
- Jika tidak
cout<<"Kosong"<<endl;
4.
Case 4 : memanggil
kelas untuk menampilkan mata kuliah dengan tahun ajaran yang genap
void
TA_genap(dataMK depan) //Daftar Matakuliah ditahun Ajaran Genap
{
dataMK a; int i = 1;
if(depan != NULL)
{
a=depan;
while(a!= NULL)
{
if(a->tahunajaran.tahun%2==0)
{
cout<<"\nDATA Matakuliah
Ke-"<<i<<endl;
cout<<"Nama Matakuliah :
"<<a->namaMK; cout<<endl;
cout<<"Kode Matakuliah :
"<<a->kode; cout<<endl;
cout<<"SKS Matakuliah : "<<a->sks<<"
SKS"; cout<<endl;
cout<<"Tahun Ajaran : "<<a->tahunajaran.tahun;
cout<<endl;
cout<<"Semester :
"<<a->tahunajaran.semester; cout<<endl;
i++;
}
a=a->next;
}
cout<<endl;
}
else{
cout<<"Kosong"<<endl;
}
cout<<"\nTekan Enter untuk kembali";
getch();
}
Di dalam fungsi TA_Genap terdapat alur sebagai berikut:
- Membuat objek a
dari struct dataMK.
- Membuat
variabel i dengan tipe data integer yang bernilai 1.
- Jika depan
tidak sama dengan NULL a = depan.
- Selama a tidak sama dengan NULL maka di cek apakah
a->tahunajaran.tahun dibagi 2 sama dengan 0.
- Jika benar
cetak :
cout<<"\nDATA Matakuliah
Ke-"<<i<<endl;
cout<<"Nama Matakuliah :
"<<a->namaMK; cout<<endl;
cout<<"Kode Matakuliah :
"<<a->kode; cout<<endl;
cout<<"SKS Matakuliah : "<<a->sks<<"
SKS"; cout<<endl;
cout<<"Tahun Ajaran : "<<a->tahunajaran.tahun;
cout<<endl;
cout<<"Semester :
"<<a->tahunajaran.semester; cout<<endl;
i++;
- Jika tidak
cetak cout<<"Kosong"<<endl;
5.
Case 5 : memanggil
kelas untukmenampilkan semua data mata kuliah
void
output(dataMK depan) //Daftar Semua Matakuliah
{
dataMK a; int i=1;
if (depan!=NULL)
{
a=depan;
while (a!=NULL)
{
cout<<"\nDATA Matakuliah
Ke-"<<i<<endl;
cout<<"Nama Matakuliah :
"<<a->namaMK;
cout<<", Kode Matakuliah :
"<<a->kode;
cout<<", SKS Matakuliah :
"<<a->sks<<" SKS";
cout<<", Tahun Ajaran :
"<<a->tahunajaran.tahun;
cout<<", Semester :
"<<a->tahunajaran.semester; cout<<endl;
i++;
a=a->next;
}
cout<<endl;
}
else {
cout<<"Kosong"<<endl;
}
cout<<"\nTekan Enter untuk kembali";
}
Di dalam fungsi output terdapat alur sebagai berikut:
- Membuat objek a
dari struct dataMK.
- Membuat
variabel i dengan tipe data integer yang bernilai 1.
-
Jika depan tidak
sama dengan NULL a sama dengan depan.
-
Selama a tidak sama
dengan NULL cetak :
cout<<"\nDATA Matakuliah
Ke-"<<i<<endl;
cout<<"Nama Matakuliah :
"<<a->namaMK;
cout<<", Kode Matakuliah :
"<<a->kode;
cout<<", SKS Matakuliah :
"<<a->sks<<" SKS";
cout<<", Tahun Ajaran :
"<<a->tahunajaran.tahun;
cout<<", Semester :
"<<a->tahunajaran.semester; cout<<endl;
i++;
-
Lalu a menyimpan
a->next;
-
Jika tidak cetak cout<<"Kosong"<<endl;
6.
Case 6 : mengakhiri
atau keluar dari program
No comments:
Post a Comment