Anda di halaman 1dari 61

PRAKTIKUM STRUKTUR DATA

MAKALAH FINAL PROJECT

Kelompok 4

Kelas : C

Nama Anggota :

I Wayan Trisna Wahyudi 2008561018

Made Yosfin Saputra 2008561023

I Ketut Santa Wijaya 2008561028

I Made Teja Sarmandana 2008561098

Tristan Bey Kusuma 2008561053

Dosen Pengampu :

I Wayan Supriana, S.Si., M.Cs.

PROGRAM STUDI INFORMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS UDAYANA

2021
KATA PENGANTAR

Puji syukur penulis panjatkan kepada Tuhan Yang Maha Esa yang mana ata
s berkat beliau penulis dapat menyelesaikan makalah yang berjudul “Praktikum St
ruktur Data Makalah Final Project “dengan lancar.

Laporan ini disusun sebagai bentuk dari penugasan Praktikum Struktur Data
dan untuk menambah wawasan yang lebih mendalam mengenai Struktur Data dal
am pemrograman. Penulis menyadari bahwa laporan ini tidak dapat diselesaikan t
anpa adanya bantuan dari pihak-pihak tertentu. Untuk itu, penulis ucapkan terima
kasih.

Penulis juga menyadari bahwa laporan ini masih jauh dari kata sempurna da
n masih terdapat kesalahan dan kekurangan. Oleh karena itu, kritik dan saran yang
konstruktif sangat membantu dalam evaluasi laporan ini agar lebih baik kedepann
ya.

Penulis harap laporan ini dapat bermanfaat dan memotivasi para pembaca da
n atas perhatiannya, penulis ucapkan terima kasih.

Denpasar, 16 Desemeber 2021

Penulis
DAFTAR ISI

KATA PENGANTAR........................................................................................... i

DAFTAR ISI.......................................................................................................... ii

BAB I LANDASAN TEORI................................................................................. 1

1.1. Penerapan Teori......................................................................................... 1

1.2. Bahasa Pemrograman................................................................................. 1

BAB II IMPELEMENTASI PROGRAM.............................................................. 3

2.1. Source Code............................................................................................... 3

2.2. Flowchart.................................................................................................... 5

2.3. Screenshot Hasil Running Program...........................................................

2.4. Penjelasan Program....................................................................................

BAB III KESIMPULAN........................................................................................ 7

DAFTAR PUSTAKA............................................................................................
BAB I

LANDASAN TEORI

1.1. Penerapan Teori

Searching

Searching merupakan salah satu jenis struktur data. Searching atau pencarian
adalah proses menemukan suatu data di dalam sekumpulan data yang bertipe
sama. Searching memiliki 2 jenis hasil yaitu data yang dicari ditemukan atau
data yang dicari tidak ditemukan. Algoritma searching yang sering digunakan
ada 2 tipe antara lain Sequiential Search dan Binary Search.

Sequential search atau Pencarian beruntun/linear/sekuensial merupakan


proses searching yang dilakukan dengan membandingkan setiap data pada
baris data satu persatu secara beruntun mulai dari data urutan pertama hingga
data yang dicari atau semua data dalam baris data tersebut.

Binary search atau pencarian bagi dua/biner merupakan proses searching


yang dilakukan dengan membagi data menjadi 2 bagian (bagian lower dan
bagian higher). Namun data tersebut harus berurutan berdasarkan nilai dari
masing-masing data.

Program ini menggunakan sequential search dikarenkan jenis searching ini


memiliki beberapa keuntungan diantaranya relatif lebih mudah untuk
diimplementasikan dalam program, lebih mudah dipahami oleh tiap anggota
sehingga memudahkan dalam pengembangan program, dan searching ini juga
lebih mendukung jumlah data yang tidak terlalu besar.

Hashing

Hashing adalah salah satu operasi modul pilihan yang kami pilih terutarama
dalam implemetasinya dalam main function login, hashing dapat diartikan
sebagai aktivity yang mengubah suatu object menjadi serangkaian karakter
unik, dan ada juga tabel yang disebut sebagai hash table. Struktur data ini erat
kaitannya dengan konsep "key value". Key adalah hal yang menjadi indeks,
dan value adalah nilai yang berasosiasi dengannya. Pada contoh
permasalahan sebelumnya, nama mahasiswa merupakan key, dan IPK
merupakan value.

Linked List

Linked list merupakan struktur data yang lebih menjurus pada manajemen
alokasi memori seperti alokasi data dalam array. Sebagai hasil dari kendala
memori, tertanam pemrograman sistem membutuhkan penggunaan memori
dinamis alokasi. Dalam hal alokasi memori dinamis salah satu struktur data
yang disukai adalah data daftar tertaut struktur[1]. Ini menjadi salah satu
alasan penerapan linked list sebagai alokasi memori dalam program ini.
Progam menjadi lebih dinamis dan alokasi data yang lebih luas. Selain itu,
linked list juga memiliki beberapa sifat lain yaitu struktur data linear, tidak
menyimpan elemen dalam memori berdekatan, dan saling terhubung
menggunakan pointer.

Linked list juga memiliki beberapa tipe yaitu single linked list, double linked
list, dan circular linked list.

Single linked list merupakan jenis linked list yang hanya memiliki 1 link
pointer untuk menyimpan alamat berikutnya. Berbeda dengan array yang
menggunakan indeks untuk pengalamatannya, namun linked list
menggunakan pointer link untuk berpindah ke data berikutnya.

Double linked list merupakan linked list yang memiliki 2 link pointer untuk
berpindah alamat. Link pertama untuk next atau alamat berikutnya dan link
kedua untuk previous atau alamat sebelumnya.

Circular linked list merupakan linked list yang memori awal (head) dan akhir
(tail) terhubung satu sama lain. Jenis linked list ini dapat menggunakan
penerapan single linked list maupun double linked list. Namun yang
membedakan adalah memori awal dan akhir yang terhubung tersebut.

Dalam program ini, menggunakan single linked list. Hal itu dikarenakan
penerapan single linked list yang relatif sederhana, dan dapat
diimplementasikan oleh kami dalam pembangunan program. Selain itu, untuk
program dengan penggunaan kinerja memori yang tidak terlalu kompleks
sehingga mendukung kinerja program dan developer lebih baik.

Sorting
Sorting adalah salah satu operasi pada struktur data yang digunakan dalam
situasi khusus. Sorting didefinisikan sebagai pengaturan data atau merekam
dalam urutan logis tertentu, yang mana sejumlah algoritma dikembangkan
untuk menyortir data dan alasan pengembangan algoritma ini adalah untuk
mengoptimalkan efisiensi dan kompleksitas[2].
Sorting atau pengurutan merupakan proses pengurutan data-data tertentu
sesuai dengan nilai masing-masing data yang menjadi perbandingan dalam
pengurutan tersebut. Sorting memiliki beberapa tipe antara lain bubble sort,
insertion sort, selection sort, merge sort, quick sort, tree sort, gnome sort,
counting sort, grouping comparison sort (GCS), heap sort, radix sort, cocktail
sort, comb sort, enhanced selection sort, shell sort, bucket sort, tim sort, even-
odd/brick sort, dan bitonic sort [2]. Sorting merupakan salah satu struktur
data yang sering digunakan, dikarenakan suatu program terkadang
membutuhkan data-data yang sistematis sehingga algoritma sorting sangat
membantu dalam manajemen data dan masih banyak penggunaan sorting
lainnya.

1.2. Bahasa Pemrograman

Bahasa Pemrograman adalah bahasa yang digunakan dalam pemrograman


sesuatu. Bahasa promrograman memiliki banyak jenis yaitu bahasa mesin,
bahasa tingkat rendah, bahasa tingkat menengah, dan bahasa tingkat tinggi.

1. Bahasa mesin adalah bahasa yang digunakan komputer dalam kode


bahasa biner seperti 0011010101010.

2. Bahasa tingkat rendah adalah bahasa dengan memakai kode-kode


singkat (kode mnemonic), contoh bahasa assembly.
3. Bahasa tingkat menengah adalah bahasa yang memakai campuran
instruksi bahasa manusia, contoh bahasa C.

4. Bahasa tingkat tinggi adalah bahasa yang memakai perintah yang


berasal dari kata-kata manusia, contoh bahasa Java, Phyton,
Javascript, dll. Untuk membuat komputer mengerti dengan bahasa
tersebut, diperlukan program interpreter atau compiler.

Manfaat potensial dari mempelajari konsep bahasa pemrograman adalah


peningkatan kapasitas untuk mengekspresikan ide, peningkatan latar
belakang untuk memilih bahasa yang sesuai, peningkatan kemampuan untuk
mempelajari bahasa baru, pemahaman yang lebih baik tentang pentingnya
implementasi, penggunaan bahasa yang sudah diketahui lebih baik, dan
kemajuan komputasi secara keseluruhan [3].

Bahasa C merupakan bahasa yang tertua dalam dunia pemrograman. Bahasa


pemrograman C adalah tujuan umum, sistem operasi-agnostik, dan bahasa
prosedural yang mendukung pemrograman terstruktur dan menyediakan
akses tingkat rendah ke memori sistem. Dennis Ritchie menemukan bahasa C
pada tahun 1972 di AT&T (kemudian disebut Bell Laboratory), dimana
bahasa C diimplementasikan dalam sistem UNIX pada DEC PDP II[4].
Sistem operasi UNIX, kompiler C, dan pada dasarnya semua program
aplikasi UNIX telah ditulis dalam C. C kini telah menjadi bahasa profesional
yang banyak digunakan untuk berbagai alasan antara lain mudah dipelajari,
bahasa terstruktur, menghasilkan program yang efisien, dapat menangani
aktivitas tingkat rendah, dan dapat dikompilasi pada berbagai platform
komputer. Selain itu, penggunaan bahasa C yang menjadi bahasa
fundamental dan banyak yang lebih menguasai bahasa ini menjadi salah satu
alasan penggunaan bahasa C dalam program ini.
BAB II

IMPLEMENTASI PROGRAM

2.1. Source Code

File .c

main.c
#include <stdio.h>
#include <string.h>
#include "lib/final_module.h"

void main(){
int status = 0, menu;
data_t *main_node = NULL;
data_t *view;
date current_date;
int options;

get_current_date(&current_date);
loginToContinue(&status);

while(status){
header_print(&menu);

switch (menu)
{
case 1:
printf("\n====================================");
printf("\n MENU 1 : INPUT TUGAS");
printf("\n====================================");
printf("\n< Current Date : %d/%d/%d >\n\n", current_date.dd,
current_date.mm, current_date.yyyy);
/* code */
input(&main_node);

system("pause");
break;

case 2:
printf("\n====================================");
printf("\n MENU 2 : CARI TUGAS");
printf("\n====================================");

if (main_node == NULL){
printf("\n== Tugas Kosong! ==\n");
} else {
search(&main_node);
}

printf("\n");
system("pause");
break;

case 3:
printf("\n====================================");
printf("\n MENU 3 : EDIT TUGAS");
printf("\n====================================");
/* code */
if (main_node == NULL){
printf("\n== Tugas Kosong! ==\n");
} else {
printf("\nMenu Edit\n");
printf("1. Nama\n");
printf("2. Deadline\n");
printf("3. Prioritas\n");
printf("4. Back to main menu\n");
printf("Input : ");
scanf("%d", &options);
getchar();
if(options == 1) {
editdata(&main_node);
break;
}
else if(options == 2){
editbyDeadline(&main_node);
break;
}
else if(options == 3){
editbyPrioritas(&main_node);
break;
}
else if( options == 4){
break;
}
else
printf("input no 1 - 4 gan :D");
getchar();
continue;
}
system("pause");
break;

case 4:
printf("\n====================================");
printf("\n MENU 4 : LIHAT SEMUA TUGAS");
printf("\n====================================");

// this is the code


if (main_node == NULL){
printf("\n== Tugas Kosong! ==\n");
} else {
menu_view(&main_node);
}

system("pause");
break;

case 5:
printf("\n====================================");
printf("\n MENU 5 : MARK AS COMPLETE");

printf("\n====================================\n");
/* code */
if (main_node == NULL){
printf("== Tugas Kosong! ==\n");
} else {
removeNode(&main_node);
}
printf("\n");
system("pause");
break;

case 6:
printf("\n====================================");
printf("\n MENU 6 : HELP\n");
printf("\n====================================");
guide();
break;

case 7:

printf("\n===========================================
=");
printf("\n KELOMPOK 4");

printf("\n===========================================
=");
printf("\n=== THANKYOU FOR USING OUR PROGRAM
SIR! ====");
printf("\n\nCredit : ");
printf("\n1. I Wayan Trisna Wahyudi (2008561018)");
printf("\n2. Made Yosfin Saputra (2008561023)");
printf("\n3. I Ketut Santa Wijaya (2008561028)");
printf("\n4. Tristan Bey Kusuma (2008561053)");
printf("\n5. I Made Teja Sarmandana (2008561098)");

printf("\n===========================================
=\n\n");

system("pause");
status = 0;
break;

default:
if(menu < 1 || menu > 7)
printf("\n====================================");
printf("\n== INVALID INPUT! ==");
printf("\n====================================");
system("pause");
break;
}
}

}
login.c
#include <string.h>
#include "login.h"

int getHashIndex(int tablesize, char name[]){


int len, index;

len = strlen(name);

for(int i = 0; i<len; i++){


index = (13*i+len) % 2021;
}

return index % tablesize;


}

int validateUser(login_t table[], login_t temp_input){


int index = getHashIndex(7, temp_input.user_name);

if((strcmp(table[index].user_name, temp_input.user_name) == 0)
&& (strcmp(table[index].user_name, temp_input.password) == 0)){
return 1;
} else {
return 0;
}
}
void register_user(login_t hash_table[], login_t temp_register){
int index = getHashIndex(7, temp_register.user_name);

strcpy(hash_table[index].user_name, temp_register.user_name);
strcpy(hash_table[index].password, temp_register.password);

void saveToFile(login_t *temp_input){


FILE *WriteUser = fopen("file\\userlist.txt", "a");
fprintf(WriteUser, "%s|%s\n", temp_input->user_name,
temp_input->password);
fclose(WriteUser);
}

void initUser(login_t table[]){


FILE *userList = fopen("file\\userlist.txt", "r");

char temp[255];
char *token;
int index;

while(fgets(temp, 255, userList) != NULL){


token = strtok(temp, "|");
index = getHashIndex(7, token);
strcpy(table[index].user_name, token);

token = strtok(temp, "|");


strcpy(table[index].password, token);
}
fclose(userList);

void loginToContinue(int *main_status){


login_t table[7], temp_input;
int login_menu, status = 1;

for (int i = 0; i < 7; i++)


{
strcpy(table[i].user_name, "-1");
}

while(status){
system("cls");
printf("\n====================================");
printf("\n== Wellcome To Our Pogram Sir! ==");
printf("\n====================================");
printf("\n1. Login\n2. Register\n3. Quit");
printf("\nYour Choice Sir : ");
scanf("%d", &login_menu); fflush(stdin);

switch (login_menu)
{
case 1:
/* login */

//read from file


initUser(table);

//validate
printf("\nUsername : ");
scanf("%[^\n]", temp_input.user_name); fflush(stdin);

printf("Password : ");
scanf("%[^\n]", temp_input.password); fflush(stdin);

*main_status = validateUser(table, temp_input);

if(*main_status){
status = 0;

printf("\n====================================");
printf("\n LOGIN SUCCESS");

printf("\n====================================");
printf("\npress any key to continue sir!\n");

getchar(); }
else {
printf("\n== Login Gagal! ==\n");
system("pause");
}
break;

case 2:
/* register */
printf("\n====================================");
printf("\n== Input Your Data Sir ==");
printf("\n====================================");
printf("\nUsername : ");
scanf("%[^\n]", temp_input.user_name); fflush(stdin);

printf("Password : ");
scanf("%[^\n]", temp_input.password); fflush(stdin);

//write to hashtable and files


register_user(table, temp_input);
saveToFile(&temp_input);

printf("\n====================================");
printf("\n== Data User Berhasil Disimpan
==");

printf("\n====================================\n");
system("pause");
break;

case 3:
/* Quit */
status = 0;
break;

default:
if(login_menu < 1 || login_menu > 3)

printf("\n====================================");
printf("\n== INVALID INPUT! ==");

printf("\n====================================");
system("pause");
break;
}
}
}

header.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "data_type.h"

void header_print(int *menu){


system("cls");
printf("\n====================================");
printf("\n PROGRAM TO-DO LIST");
printf("\n====================================");
printf("\nMenu : ");
printf("\n1. Input Tugas\n2. Cari Tugas \n3. Edit Tugas\n4. Lihat
Semua Tugas\n5. Mark As Completed\n6. Help\n7. Exit");

printf("\nYour Choice Sir : "); scanf("%d", menu); fflush(stdin);


}

void get_current_date(date *temp){


time_t current_time;
time(&current_time);
struct tm *now = localtime(&current_time);

temp->dd = now->tm_mday;
temp->mm = now->tm_mon+1;
temp->yyyy = now->tm_year+1900;

}
menu1.c
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "data_type.h"

data_t *create_node(char buff[], int dl1, int dl2, int dl3, int priority){
data_t *new = malloc(sizeof(data_t));
new->next = NULL;

strcpy(new->nama_tugas, buff);
new->priority = priority;
new->dl_dd = dl1;
new->dl_mm = dl2;
new->dl_yyyy = dl3;

return new;
}

void input(data_t **main_node){


char tempInput_namaTugas[255];
int dl_dd, dl_mm, dl_yyyy, priority;

printf("Nama Tugas : ");


scanf("%[^\n]", tempInput_namaTugas); fflush(stdin);
printf("Deadline : \n");
printf(" Tanggal : "); scanf("%d", &dl_dd);
printf(" Bulan : "); scanf("%d", &dl_mm);
printf(" Tahun : "); scanf("%d", &dl_yyyy);
printf("Level Prioritas : \n");
printf(" 1. Penting & Mendesak\n");
printf(" 2. Tidak Penting & Mendesak\n");
printf(" 3. Penting & Tidak Mendesak\n");
printf(" 4. Tidak Penting & Tidak Mendesak\n");
printf("Pilihan : ");
scanf("%d", &priority);

//creating new node


data_t *baru = create_node(tempInput_namaTugas, dl_dd, dl_mm,
dl_yyyy, priority);

//inserting to linkedList
data_t *ptr = *main_node;
if(*main_node == NULL) *main_node = baru;
else {
while(ptr->next != NULL) ptr = ptr->next;
ptr->next = baru;
}

}
menu2.c
#include <string.h>
#include <time.h>
#include "data_type.h"
#include "menu5.h"

//code below here //


void printNode(data_t **node){
int day_left = dayLeft(*node);

printf("\nNama Tugas : %s", (*node)->nama_tugas);


printf("\nDeadline : %d/%d/%d", (*node)->dl_dd, (*node)-
>dl_mm, (*node)->dl_yyyy);
printf("\nPriotity : %d", (*node)->priority);
if (day_left >= 0) printf("\nSisa Waktu : %d hari", day_left);
else printf("\nSisa Waktu : TERLAMBAT %d hari",
abs(day_left));

printf("\n");
}

void searchByName(data_t **main_node, char searchKey[]){


data_t *ptr = *main_node;
int found = 0;

while(ptr != NULL){
if( strcmp(ptr->nama_tugas, searchKey) == 0){
if(!found) printf("\nDetails : ");
printNode(&ptr);
found = 1;
}
ptr = ptr->next;
}
if(!found)printf("\n== 404 NOT FOUND SIR! ==\n");
system("pause");
}

void searchByDeadline(data_t **main_node, int day, int month, int


year){
data_t *ptr = *main_node;
int found = 0;
while(ptr != NULL){
if(ptr->dl_dd == day && ptr->dl_mm == month && ptr-
>dl_yyyy == year){
if(!found) printf("\nDetails : ");
printNode(&ptr);
found = 1;
}
ptr = ptr->next;
}
if(!found)printf("\n== 404 NOT FOUND SIR! ==\n");
system("pause");
}

void searchByPriority(data_t **main_node, int searchKey){


data_t *ptr = *main_node;
int found = 0;
while(ptr != NULL){
if(ptr->priority == searchKey ){
if(!found) printf("\nDetails : ");
printNode(&ptr);
found = 1;
}
ptr = ptr->next;
}
if(!found)printf("\n== 404 NOT FOUND SIR! ==\n");
system("pause");
}

void search(data_t **main_node){


int searchBy, f_dd, f_mm, f_yyyy, f_priority, ulang = 1;
char f_nama[255];

while(ulang){
system("cls");
printf("\n====================================");
printf("\n MENU 2 : CARI TUGAS");
printf("\n====================================");
printf("\nCari Berdasarkan : \n1. Nama Tugas\n2. Deadline\n3.
Priority\n4. Kembali ke menu utama");
printf("\nYour Choice Sir : ");
scanf("%d", &searchBy); fflush(stdin);

switch (searchBy)
{
case 1:
/* ByName */
printf("\nInput nama tugas yang ingin dicari : ");
scanf("%[^\n]", f_nama); fflush(stdin);

searchByName(main_node, f_nama);

break;

case 2:
/* byDeadLine */
printf("\nInput deadline (dd/mm/yyy) : ");
scanf("%d/%d/%d", &f_dd, &f_mm, &f_yyyy); fflush(stdin);

searchByDeadline(main_node, f_dd, f_mm, f_yyyy);

break;

case 3:
/* byPriority */
printf("\nInput Priority to Search : ");
scanf("%d", &f_priority); fflush(stdin);

searchByPriority(main_node, f_priority);

break;
case 4:
/* exit */
ulang = 0;

break;

default:
if(searchBy < 1 || searchBy > 4){
printf("\n== INVALID INPUT! ==\n");
system("pause");
}
break;
}
}

//code selesai
main3.c
#include <string.h>
#include <time.h>
#include "final_module.h"
#include "data_type.h"
#include "menu3.h"
#include "menu5.h"

//code below here //

void editdata(data_t **main_node){


data_t *temp = *main_node;
char nama[225], find[225];
printf("Input Nama Tugas yang ingin Dicari : \n");
scanf("%[^\n]", &find); fflush(stdin);

while (temp!=NULL)
{
// code here
if (strcmp(temp->nama_tugas,find)== 0){
printf("Masukan Tugas baru : \n");
scanf("%[^\n]", &nama); fflush(stdin);
strcpy(temp->nama_tugas, nama);
printf("Tugas baru berhasil di simpan \n");
break;
}
temp=temp->next;

}
if(temp == NULL){
printf("Data tidak ditemukan.\n");
}

void editbyDeadline (data_t **main_node){


data_t *temp = *main_node, input_node;
date tanggal;
getTheDate(&tanggal);
char find[255];
printf("Masukan Nama Tugas yang ingin dicari : ");
scanf("%[^\n]", &find); fflush(stdin);
while(temp!=NULL){
if(strcmp(temp->nama_tugas,find) == 0){

while (1)
{
printf("Masukan Tanggal Deadline baru (DD/MM/YYYY) :
");
scanf("%d%d%d", &input_node.dl_dd,
&input_node.dl_mm, &input_node.dl_yyyy); fflush(stdin);
//getchar();

if (input_node.dl_dd < tanggal.dd && input_node.dl_mm <


tanggal.mm && input_node.dl_yyyy < tanggal.yyyy)
{
printf("Tanggal tidak boleh sama sebelum hari ini.\n");
continue;
}else {
temp->dl_dd = input_node.dl_dd;
temp->dl_mm = input_node.dl_mm;
temp->dl_yyyy = input_node.dl_yyyy;
printf("Data Berhasil Disimpan. \n");
break;
}

}
return;

}
temp=temp->next;
}
}

void editbyPrioritas(data_t **main_node){

//code here
data_t *temp = *main_node;
int prioritas;
char find[255];
printf("Masukan Nama Tugas yang Ingin dicari : ");
scanf("%[^\n]", &find); fflush(stdin);

while (temp!=NULL)
{
if(strcmp(temp->nama_tugas,find) == 0){
printf("Masukan Nilai Prioritas Baru (1-4) : ");
scanf("%d", &prioritas); fflush(stdin);
//getchar();
temp->priority = prioritas;
printf("Data Baru tersimpan.\n");
}
temp=temp->next;
}
if (temp==NULL){
printf("Data Yang dicari tidak ada.\n");
}

}
//code selesai
main4.c
#include <string.h>
#include <time.h>
#include "data_type.h"
#include "menu4.h"
#include "menu5.h"

//code below here //

void menu_view(data_t **main_node){


int pilihan;

while(pilihan != 3){
int nomor = 1, day_left, spesifik;
data_t *tempMain = *main_node;
data_t *spesific_view = *main_node;

system("cls");
printf("\n====================================");
printf("\n MENU 4 : LIHAT SEMUA TUGAS");
printf("\n====================================");
printf("\n1. Tampilkan Semua Tugas\n2. Lihat Spesifik\n3. Back
To Main Menu");
printf("\nYour Choice Sir : ");
scanf("%d", &pilihan); fflush(stdin);

switch (pilihan)
{
case 1:
printf("\nDaftar Tugas : \n");
while(tempMain != NULL)
{
day_left = dayLeft(tempMain);
printf("%d. Nama tugas : %s\n", nomor, tempMain-
>nama_tugas);
printf(" Prioritas : %d\n", tempMain->priority);
printf(" Deadline : %02d/%02d/%d\n", tempMain-
>dl_dd, tempMain->dl_mm, tempMain->dl_yyyy);
if (day_left >= 0) printf(" Sisa Waktu : %d hari\n",
day_left);
else printf(" Sisa Waktu : TERLAMBAT %d hari\n",
abs(day_left));
tempMain = tempMain->next;

nomor++;
}

system("pause");
break;

case 2:
printf("\nCurent Task : \n");
while (tempMain != NULL)
{
printf("%d. %s\n", nomor, tempMain->nama_tugas);
tempMain = tempMain->next;
nomor++;
}

printf("\nInput Nomor Urut Tugas : ");


scanf("%d", &spesifik); fflush(stdin);

for(int i = 1; i<spesifik; ++i){


spesific_view = spesific_view->next;
}

day_left = dayLeft(spesific_view);
printf("\nDetails : \n");
printf(" Nama tugas : %s\n", spesific_view->nama_tugas);
printf(" Prioritas : %d\n", spesific_view->priority);
printf(" Deadline : %02d/%02d/%d\n", spesific_view-
>dl_dd, spesific_view->dl_mm, spesific_view->dl_yyyy);
if (day_left >= 0) printf(" Sisa Waktu : %d hari\n",
day_left);
else printf(" Sisa Waktu : TERLAMBAT %d hari\n",
abs(day_left));
system("pause");
break;

default:
if(pilihan < 1 || pilihan > 3){

printf("\n====================================");
printf("\n== INVALID INPUT! ==");

printf("\n====================================");
system("pause");
}
break;
}

}
}

//code selesai
main5.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <ctype.h>
#include "final_module.h"
#include "data_type.h"

void getTheDate(date *date_now) {


time_t time_now;
time(&time_now);
struct tm *time_now_converted = localtime(&time_now);
date_now->dd = time_now_converted->tm_mday;
date_now->mm = time_now_converted->tm_mon + 1;
date_now->yyyy = time_now_converted->tm_year + 1900;
}

int isLeapYear(int year) {


if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
return 1;
else
return 0;
}

int dateInMonth(int month, int year) {


int date_month[12] = {31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

if (month != 2) return date_month[month-1];


else {
if (isLeapYear(year) == 1) return 29;
else return 28;
}
}

int dayLeft(data_t *temp_main_node) {


int day_left;
int day_from_month = 0;
date date_now;
getTheDate(&date_now);

for (int i = date_now.mm ; i < temp_main_node->dl_mm; i++) {


day_from_month += dateInMonth(i, temp_main_node-
>dl_yyyy);
}

day_left = (temp_main_node->dl_dd - date_now.dd) +


day_from_month + \
365 * (temp_main_node->dl_yyyy - date_now.yyyy);
return day_left;
}

void viewAll(data_t *main_node, int menu) {


data_t *temp = main_node;
int nomor = 1, day_left, priority = 0, print = 1;

while (temp != NULL) {

day_left = dayLeft(temp);
printf("%d. Nama tugas : %s\n", nomor, temp->nama_tugas);
printf(" Prioritas : %d\n", temp->priority);
printf(" Deadline : %02d/%02d/%d\n", temp->dl_dd, temp-
>dl_mm, temp->dl_yyyy);
if (day_left >= 0) printf(" Sisa Waktu : %d hari\n", day_left);
else printf(" Sisa Waktu : TERLAMBAT %d hari\n",
abs(day_left));
temp = temp->next;
nomor++;
}
}

void removeNode(data_t **main_node) {


data_t *prev = NULL, *temp = *main_node;
char will_delete[50];

viewAll(temp, 0);

printf("Masukan nama tugas yang ingin di mark selesai : ");


scanf("%[^\n]", will_delete);
getchar();

while(temp != NULL && strcmp(temp->nama_tugas, will_delete))


{
prev = temp;
temp = temp->next;
}

if (temp == NULL) {
puts("\n Nama tugas yang anda masukkan tidak ada");
return;
}

if (prev == NULL) *main_node = (*main_node)->next;


else prev->next = temp->next;
}
main6.c
#include <stdio.h>
#include "data_type.h"

void heading(int n){


system("cls");
puts("====================================");
if(n==1) puts(" INPUT DATA");
else if(n==2) puts(" CARI TUGAS");
else if(n==3) puts(" EDIT TUGAS");
else if(n==4) puts(" LIHAT SEMUA TUGAS");
else if(n==5) puts(" MARK AS COMPLETE");
else if(n==6) puts(" EXIT");
else puts(" GUIDE");
puts("====================================");
}

void guide(){
int pil,status=0;
do{
puts("");
heading(0);
puts("Selamat datang di Menu Help");
puts("Menu ini berfungsi untuk membantu");
puts("mengenai fungsi dan cara penggunaan");
puts("tiap menu dalam program ini. Anda");
puts("dapat melihat informasi tersebut");
puts("dengan menginputkan menu yang Anda");
puts("inginkan di bawah ini. Jika ingin");
puts("kembali, silahkan ketik 6.");
puts("Terima kasih :)");
puts("====================================");
puts(" PILIH MENU");

puts("====================================");
puts("1. Input Tugas");
puts("2. Cari Tugas");
puts("3. Edit Tugas");
puts("4. Lihat Semua Tugas");
puts("5. Mark as Complete");
puts("6. Exit");
puts("7. Kembali");

puts("====================================");
printf("Pilih menu : ");scanf("%d", &pil);
switch(pil){
case 1:
heading(1);
puts("Input Data berfungsi untuk");
puts("menambahkan data dalam
program. Anda");
puts("akan diminta menginputkan
Nama Tugas");
puts(", Deadline, dan Level Prioritas.");
puts("Nama Tugas berisi judul dari
tugas");
puts("yang akan dikerjakan.");
puts("Deadline berisi batas waktu
tugas.");
puts("Anda akan menginputkan
tanggal,");
puts("bulan, dan tahun.");
puts("Level Prioritas berisi tingkatan");
puts("pentingnya tugas tersebut. Ada
4");
puts("tingkatan, yaitu:");
puts(" 1. Penting & Mendesak");
puts(" 2. Tidak Penting & Mendesak");
puts(" 3. Penting & Tidak Mendesak");
puts(" 4. Tidak Penting & Tidak
Mendesak");

puts("====================================");
system("pause");
break;
case 2:
heading(2);
puts("Cari Data berfungsi untuk
mencari");
puts("data berdasarkan Nama Tugas,");
puts("Deadline, dan Prioritas. Anda
dapat");
puts("memilih sesuai dengan
kebutuhan.");
puts("Jika berdasarkan Nama Tugas,
Anda");
puts("cukup menginputkan nama dari
tugas");
puts("yang dicari.");
puts("Untuk Deadline, Anda akan");
puts("menginputkan tanggal, bulan,
dan");
puts("tahun batas waktu tugas
tersebut.");
puts("Untuk Priority, Anda akan
menginput");
puts("level prioritas dari data yang");
puts("dicari. Ada 4 tingkatan, yaitu:");
puts(" 1. Penting & Mendesak");
puts(" 2. Tidak Penting & Mendesak");
puts(" 3. Penting & Tidak Mendesak");
puts(" 4. Tidak Penting & Tidak
Mendesak");

puts("====================================");
system("pause");
break;
case 3:
heading(3);
puts("Edit Data berfungsi untuk
mengedit");
puts("data yang telah diinputkan.
Dalam");
puts("menu ini, berisi 3 pilihan data");
puts("untuk diedit, yaitu Nama
Tugas,");
puts("Deadline, dan Priority.");
puts("Untuk Nama Tugas, Anda
pertama-tama");
puts("akan diminta untuk
menginputkan");
puts("Nama Tugas yang akan diedit.");
puts("Setelah itu, menginputkan
Nama");
puts("Tugas baru yang ingin diganti.");
puts("Untuk Deadline, Anda akan
diminta");
puts("menginputkan Nama Tugas yang
dicari");
puts(", dan menginputkan tanggal,
bulan,");
puts("dan tahun dengan format
penulisan");
puts("DD/MM/YYYY. Contoh :
12/03/2021.");
puts("Untuk Priority, diawali dengan");
puts("menginputkan Nama Tugas yang
dicari");
puts(", kemudian menginputkan level");
puts("priority yang ingin diganti. Ada
4");
puts("tingkatan, yaitu:");
puts(" 1. Penting & Mendesak");
puts(" 2. Tidak Penting & Mendesak");
puts(" 3. Penting & Tidak Mendesak");
puts(" 4. Tidak Penting & Tidak
Mendesak");

puts("====================================");
system("pause");
break;
case 4:
heading(4);
puts("Lihat Semua Tugas berfungsi
untuk");
puts("melihat daftar tugas yang telah");
puts("diinputkan sebelumnya.");
puts("Menu ini terdapat 2 pilihan,
yaitu");
puts("Tampilkan semua tugas dan
Lihat");
puts("Spesifik.");
puts("Tampilkan semua tugas akan");
puts("menampilkan semua data tugas
yang");
puts("telah diinputkan secara
berurutan");
puts("dan masing-masing tugas
terdiri");
puts("atas Nama Tugas, Prioritas,");
puts("Deadline, dan Sisa Waktu.");
puts("Lihat Spesifik akan
menampilkan");
puts("daftar tugas berdasarkan Nama");
puts("Tugas, kemudia akan
menampilkan");
puts("data tugas yang dipilih lebih");
puts("rinci seperti Nama Tugas,
Prioritas");
puts(", Deadline, dan Sisa Waktu.");

puts("====================================");
system("pause");
break;
case 5:
heading(5);
puts("Mark as Complete berfungsi
untuk");
puts("menandai atau menghapus
data.");
puts("Menu ini akan menampilkan
daftar");
puts("tugas yang terdiri atas Nama
Tugas");
puts(", Deadline, Prioritas, dan Sisa");
puts("Waktu. Anda dapat menginputkan
Nama");
puts("Tugas yang diinginkan untuk
ditandai/");
puts("dihapus dalam daftar data.");

puts("====================================");
system("pause");
break;
case 6:
heading(6);
puts("Exit berfungsi untuk
mengakhiri");
puts("program. Sebelum itu, program
akan");
puts("menampilkan data Nama dan
NIM dari");
puts("developer program ini.");

puts("====================================");
system("pause");
break;
case 7:
status=1;
break;
default:
heading(0);
puts("Maaf, pilihan menu tidak
tersedia");

puts("====================================");
system("pause");
}
}while(status!=1);
}

File header

final_module.h
#ifndef __FINAL_MODULE_
#define __FINAL_MODULE_
#include <stdio.h>
#include <stdlib.h>
#include "data_type.h"
#include "login.h"
#include "header.h"
#include "menu1.h"
#include "menu2.h"
#include "menu3.h"
#include "menu4.h"
#include "menu5.h"
#include "menu6.h"

#endif
data_type.h
#ifndef __DATA_TYPE_
#define __DATA_TYPE_
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct data_t


{
char nama_tugas[50];
int priority;
int dl_dd, dl_mm, dl_yyyy;
struct data_t *next;
} data_t;

typedef struct date_t


{
int dd, mm, yyyy;
}date;

typedef struct login_t{


char user_name[50], password[30];
} login_t;

#endif
login.h
#ifndef __LOGIN_
#define __LOGIN_
#include "data_type.h"
#include "login.c"

int getHashIndex(int tablesize, char name[]);


int validateUser(login_t table[], login_t temp_input);
void register_user(login_t hash_table[], login_t temp_register);
void saveToFile(login_t *temp_input);
void initUser(login_t table[]);
void loginToContinue(int *status);

#endif
header.h
#ifndef __HEADER_
#define __HEADER_
#include "header.c"
void header_print(int *menu);
void get_current_date(date *temp);

#endif
menu1.h
#ifndef __MENU1_
#define __MENU1_
#include "data_type.h"
#include "menu1.c"
data_t *create_node(char buff[], int dl1, int dl2, int dl3, int
priority);
void input(data_t **main_node);

#endif
menu2.h
#ifndef __MENU2_
#define __MENU12_
#include "data_type.h"
#include "menu2.c"
void search(data_t **main_node);
void printNode(data_t **node);
void searchByDeadline(data_t **main_node, int day, int month, int
year);
void searchByPriority(data_t **main_node, int searchKey);
void searchByName(data_t **main_node, char searchKey[]);

#endif
menu3.h
#ifndef __MENU3_
#define __MENU3_
#include "data_type.h"
#include "menu3.c"

// dekla here

void editdata(data_t **main_node);


void editbyDeadline (data_t **main_node);
void editbyPriority (data_t **main_node);

// dekla end

#endif
menu4.h
#ifndef __MENU4_
#define __MENU4_
#include "data_type.h"
#include "menu4.c"

// dekla here

void menu_view(data_t **main_node);

// dekla end
#endif
menu5.h
#ifndef __MENU5_
#define __MENU5_
#include "data_type.h"
#include "final_module.h"
#include "menu5.c"
void getTheDate(date *date_now);
int isLeapYear(int year);
int dateInMonth(int month, int year);
int dayLeft(data_t *temp_main_node);
void viewAll(data_t *main_node, int menu);
void removeNode(data_t **main_node);

#endif
menu6.h
#ifndef __MENU6_
#define __MENU6_
#include "data_type.h"
#include "menu6.c"
void guide();
void head(int n);

#endif

2.2. Flowchart

1. Main Menu
2. Input
3. Mark as Complete

4. View
5. Clear

6. Help
7. Exit

2.3. Screenshot Hasil Running Program


2.4. Penjelasan Program
BAB III

KESIMPULAN

Untuk memenuhi penugasan Pratikum Struktur Data kali ini, kelompok kami
membuat program “To Do List” yang berguna untuk memudahkan kita dalam
mengerjakan beberapa tugas tugas yang kita miliki. Dengan program ini kita bisa
memilah tugas-tugas sesuai dengan prioritas dan deadline nya sehingga kita bisa
mengetahui mana tugas yang seharusnya kita kerjakan lebih dulu. Program yang
kami buat ini menggunakan Bahasa C dan kita mengimplementasikan struktur
data Linked List dan juga Searching Bersama Sorting dan Hashing menjadi
operasinya. Dan seperti yang dijelaskan sebelumnya diharapkan program kami ini
tidak hanya untuk memenuhi nilai penugasan tetapi juga diharapkan semoga
program yang kami buat ini bisa bermanfaat bagi teman-teman semua yang
mungkin mengalami kesulitan dalam membagi prioritas dalam mengerjakan
berbagai tugasnya.
DAFTAR PUSTAKA

[1] Akinde Aderonke O., Okolie Samuel O., Kuyoro ‘Shade O, “The S-Linked Li
st – A Variant Of The Linked List Data Structure”, Journal of Emerging Tren
ds in Computing and Information Sciences. vol.4, pp. 571-576, June 2013.

[2] Mohammad Shabaz, Ashok Kumar, “SA Sorting: A Novel Sorting Technique
for Large-Scale Data”, Journal of Komputer Networks and Communication. v
ol.2019 , pp. 1-7, January 2019.

[3] Robert W. Sebesta, “Concepts of Programming Languages”, 11th ed., United


States of America : Pearson Education Limited, 2016.

[4] Simplilearn. (2021, Jul.20) What is C Programming? [online]. Available: http


s://www.simplilearn.com/c-programming-article

Anda mungkin juga menyukai