Skip to content

Instantly share code, notes, and snippets.

@defrindr
Last active January 3, 2021 15:58
Show Gist options
  • Save defrindr/9c0603f77c4c4d54a1b6852b7754c7a3 to your computer and use it in GitHub Desktop.
Save defrindr/9c0603f77c4c4d54a1b6852b7754c7a3 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define LIMIT_NAMA 100
#define LIMIT_ALAMAT 200
#define LIMIT_NO_HP 20
#define LIM_TUJUAN_KUNJUNGAN 200
#define IS_NULL(x)(x != '\0')
typedef struct DATE {
int YEAR;
int MONTH;
int DATE;
} DATE;
typedef struct BUKU_TAMU {
char NAMA[LIMIT_NAMA];
char ALAMAT[LIMIT_ALAMAT];
char NO_HP[LIMIT_NO_HP];
char TUJUAN_KUNJUNGAN[LIM_TUJUAN_KUNJUNGAN];
DATE TANGGAL_KUNJUNGAN;
} BUKU_TAMU;
// declare global variable
BUKU_TAMU * LIST_BUKU_TAMU = NULL;
BUKU_TAMU * SEARCH = NULL;
int SIZE_BUKU_TAMU = 0;
void init(){
// here is initialize of global variable
// bcz c not supported to initialize
// variable global
LIST_BUKU_TAMU = (BUKU_TAMU * ) malloc(2000 * sizeof(BUKU_TAMU));
SEARCH = (BUKU_TAMU * ) malloc(2000 * sizeof(BUKU_TAMU));
}
void CLEAR_SCREEN() {
system("cls");
}
void ADD_DATA(BUKU_TAMU BUKUTAMU) {
LIST_BUKU_TAMU[SIZE_BUKU_TAMU] = BUKUTAMU;
SIZE_BUKU_TAMU++;
}
void PRINT_DATA(BUKU_TAMU BUKU_TAMU) {
printf("NAMA = %s\n", BUKU_TAMU.NAMA);
printf("ALAMAT = %s\n", BUKU_TAMU.ALAMAT);
printf("NO_HP = %s\n", BUKU_TAMU.NO_HP);
printf("TUJUAN_KUNJUNGAN = %s\n", BUKU_TAMU.TUJUAN_KUNJUNGAN);
printf("TANGGAL KUNJUNGAN = %d-%d-%d\n", BUKU_TAMU.TANGGAL_KUNJUNGAN.YEAR,
BUKU_TAMU.TANGGAL_KUNJUNGAN.MONTH,
BUKU_TAMU.TANGGAL_KUNJUNGAN.DATE);
printf("-----------------------------------\n");
}
DATE INPUT_DATE() {
DATE TANGGAL_KUNJUNGAN;
scanf("%d-%d-%d", & TANGGAL_KUNJUNGAN.YEAR, &
TANGGAL_KUNJUNGAN.MONTH, &
TANGGAL_KUNJUNGAN.DATE);
return TANGGAL_KUNJUNGAN;
}
void EDIT_DATA(int id) {
char NAMA[LIMIT_NAMA];
char ALAMAT[LIMIT_ALAMAT];
char NO_HP[LIMIT_NO_HP];
char TUJUAN_KUNJUNGAN[LIM_TUJUAN_KUNJUNGAN];
DATE TANGGAL_KUNJUNGAN;
BUKU_TAMU NEW_DATA;
printf("MASUKKAN NAMA ANDA ? ");
fgets(NAMA, LIMIT_NAMA, stdin); // dibuat double untuk handle new line
fgets(NAMA, LIMIT_NAMA, stdin);
printf("MASUKKAN ALAMAT ANDA ? ");
fgets(ALAMAT, LIMIT_ALAMAT, stdin);
printf("MASUKKAN NO HP ANDA ? ");
fgets(NO_HP, LIMIT_NO_HP, stdin);
printf("MASUKKAN TUJUAN KUNJUNGAN ANDA ? ");
fgets(TUJUAN_KUNJUNGAN, LIM_TUJUAN_KUNJUNGAN, stdin);
printf("MASUKKAN TANGGAL KUNJUNGAN ANDA ? ");
TANGGAL_KUNJUNGAN = INPUT_DATE();
// strtok unutuk meghapus character \n
strcpy(LIST_BUKU_TAMU[id].NAMA, strtok(NAMA, "\n"));
strcpy(LIST_BUKU_TAMU[id].ALAMAT, strtok(ALAMAT, "\n"));
strcpy(LIST_BUKU_TAMU[id].NO_HP, strtok(NO_HP, "\n"));
strcpy(LIST_BUKU_TAMU[id].TUJUAN_KUNJUNGAN, strtok(TUJUAN_KUNJUNGAN, "\n"));
LIST_BUKU_TAMU[id].TANGGAL_KUNJUNGAN = TANGGAL_KUNJUNGAN;
}
void INSERT_NEW_DATA() {
EDIT_DATA(SIZE_BUKU_TAMU);
SIZE_BUKU_TAMU++;
}
void SEED_DATA() {
BUKU_TAMU b1;
strcpy(b1.NAMA, "DEFRI INDRA MAHARDIKA");
strcpy(b1.ALAMAT, "PONOROGO");
strcpy(b1.NO_HP, "085604845436");
strcpy(b1.TUJUAN_KUNJUNGAN, "MEMASANG MATA BATU");
b1.TANGGAL_KUNJUNGAN.DATE = 12;
b1.TANGGAL_KUNJUNGAN.MONTH = 4;
b1.TANGGAL_KUNJUNGAN.YEAR = 2002;
BUKU_TAMU b2;
strcpy(b2.NAMA, "ENDAH KUSTIANINGSIH");
strcpy(b2.ALAMAT, "PONOROGO");
strcpy(b2.NO_HP, "085604845436");
strcpy(b2.TUJUAN_KUNJUNGAN, "MEMASANG MATA BATU");
b2.TANGGAL_KUNJUNGAN.DATE = 12;
b2.TANGGAL_KUNJUNGAN.MONTH = 5;
b2.TANGGAL_KUNJUNGAN.YEAR = 2002;
ADD_DATA(b1);
ADD_DATA(b2);
}
void SHOW_ALL_DATA() {
int start;
int numbering = 1;
for (start = 0; start < SIZE_BUKU_TAMU; start++) {
if (IS_NULL(LIST_BUKU_TAMU[start].NAMA)) {
printf("DATA KE-%d :\n", numbering);
PRINT_DATA(LIST_BUKU_TAMU[start]);
numbering++;
}
}
printf("\n\n");
}
void UPDATE_DATA() {
SHOW_ALL_DATA();
int id;
printf("Pilih Data ? ");
scanf("%d", & id);
id--;
if (id >= SIZE_BUKU_TAMU || id < 0) {
printf("%d %d\n", SIZE_BUKU_TAMU, id);
printf("DATA TIDAK DI TEMUKAN\n");
} else {
EDIT_DATA(id);
}
}
void DELETE_DATA() {
int id, start;
SHOW_ALL_DATA();
printf("Masukkan ID yang ingin dihapus ? ");
scanf("%d", & id);
id--;
if (id > SIZE_BUKU_TAMU || id < 0) {
printf("%d %d\n", SIZE_BUKU_TAMU, id);
printf("DATA TIDAK DI TEMUKAN\n");
} else {
for (start = id; start < SIZE_BUKU_TAMU; start++) {
LIST_BUKU_TAMU[start] = LIST_BUKU_TAMU[start + 1];
}
SIZE_BUKU_TAMU--;
}
}
int DATE_COMPARE(DATE d1, DATE d2) {
if (d1.DATE == d2.DATE &&
d1.MONTH == d2.MONTH &&
d1.YEAR == d2.YEAR) {
return 1;
} else return 0;
}
void MENU_SEARCH_DATA() {
DATE date;
int start, numbering = 1;
printf("MASUKKAN TANGGAL KUNJUNGAN : ");
date = INPUT_DATE();
for (start = 0; start < SIZE_BUKU_TAMU; start++) {
if (DATE_COMPARE(LIST_BUKU_TAMU[start].TANGGAL_KUNJUNGAN, date)) {
printf("DATA KE-%d :\n", numbering);
PRINT_DATA(LIST_BUKU_TAMU[start]);
numbering++;
}
}
if(numbering == 1){
printf("DATA TIDAK DITEMUKAN");
}
printf("\n\n");
}
void MENU() {
printf("====================================\n");
printf(" == MENU ==\n");
printf("0. FIND DATA\n");
printf("1. SHOW ALL DATA\n");
printf("2. INSERT DATA\n");
printf("3. UPDATE DATA\n");
printf("4. DELETE DATA\n");
printf("5. KELUAR\n");
printf("====================================\n");
printf("PILIH MENU : \n");
}
void HANDLE_INPUT(){
int menu_pilihan;
SEED_DATA();
start:
MENU();
scanf("%d", & menu_pilihan);
switch (menu_pilihan)
{
case 0:
CLEAR_SCREEN();
MENU_SEARCH_DATA();
goto start;
case 1:
CLEAR_SCREEN();
SHOW_ALL_DATA();
goto start;
case 2:
CLEAR_SCREEN();
INSERT_NEW_DATA();
goto start;
case 3:
CLEAR_SCREEN();
UPDATE_DATA();
goto start;
case 4:
CLEAR_SCREEN();
DELETE_DATA();
goto start;
case 5:
CLEAR_SCREEN();
exit(0);
default:
printf("PILIHAN TIDAK TERSEDIA\n\n\n");
goto start;
}
}
int main() {
init();
HANDLE_INPUT();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment