Last active
January 3, 2021 15:58
-
-
Save defrindr/9c0603f77c4c4d54a1b6852b7754c7a3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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