Anda di halaman 1dari 15

Tugas Kelompok ke-4

(Minggu 10 / Sesi 15)

GROUP 3 – LLCA

COMPILER : Dev-C++

1. Fahmi Mas’ulun Zellyan (2401983571)


2. Irene Christovita (2401981181)
3. Raditya Putranto (2401979411)
4. Eggy Prayogia Adistira (2401983804)

1. Jelaskan apa yang dimaksud dengan File dan stream?


2. Apa yang terjadi bila file dibuka dengan mode ‘w+’ ternyata sudah ada datanya?
3. Jelaskan apa yang dimaksud
a. dynamic memory?
b. Macro
Serta berikan contohnya

4. Buatlah program .
Sebuah toko minuman menjual berbagai macam jenis minuman. Pemilik Toko
minuman tersebut menginginkan sebuah aplikasi yang mampu mencatat semua
transaksi yang ada sehingga memudahkan dalam me-monitoring usahanya.
Berikut aturan dalam membuat aplikasinya :

Pertama kali program dijalankan, program akan membaca file “dataminuman.txt”.


Pada data tersebut terdapat data minuman antara lain: nama minuman, size, Penyajian
dan harga.

Program memiliki 4 pilihan, yaitu:

a. Input data
b. View History
c. Delete History
d. Exit

Keterangan Pilihan tampilan

1). Jika user memilih menu Input data (tekan tombol ‘1’), maka program akan:
 Meminta inputan nama minuman. Validasikan inputan harus berupa Kopi,
Teh, Coklat atau Soda.
 Meminta inputan size. Validasikan inputan berupa Small, Medium dan
Largest

COMP6599 – Algorithm and Programming


 Meminta inputan penyajian. Validasikan inputan berupa Dingin, panas atau
hangat.
 Menampilkan Detail pembelian berupa nama minuman, size, dan Harga.
Harga didapat dengan menggunakan rumus:

Harga = size x pjg karakter nama minuman x pjg karakter Penyajian x 100

Contoh:

Nama Minuman: Kopi


Size : Small
Penyajian : Dingin
Harga : 12000

 Meminta inputan konfirmasi. Validasikan inputan harus berupa karakter ‘y’


atau ‘n’. Jika user memilih ‘y’, maka tambahkan data yang telah diinput ke
dalam data history. Jika user memilih ‘n’, maka program akan kembali ke
menu utama.

2). Jika user memilih menu View History (tekan tombol ‘2’), maka program akan
menampilkan data history penjualan yang pernah dilakukan dengan format:
No, Nama pesanan, Size, Penyajian dan Harga.

3). Jika user memilih menu Delete History (tekan tombol ‘3’), maka program
akan menampilkan list data history penjualan.
a) Meminta inputan index. Validasikan input minimal 1 dan maksimal
sebanyak jumlah data.
b) Hapus data sesuai dengan index yang diinput. Contoh: Jika user memilih
index 1, maka hapus data yang pertama.
Lalu Tampilkan pesan “Data Successfully delete..”.

4). Jika user memilih menu Exit (tekan tombol ‘4’), maka program akan menulis
data tersebut ke dalam file ”dataminuman.txt” dan program selesai dijalankan.

Jawaban

No 1

File : File digunakan untuk penyimpanan data yang bentuknya adalah permanen bukan
sementara.

Stream : adalah di mana data diteruskan dari pengirim ke penerima. Stream memungkinkan
perjalanan hanya dalam satu arah. Data dapat dikirim keluar dari program pada output
stream, atau diterima ke dalam program pada input stream. Membuat stream
sama seperti dengan deklarasi variable contoh : ifstream in_stream; (input-file-stream) of-
stream out_stream; (output-file-stream).

COMP6599 – Algorithm and Programming


No. 2

File yang dibuka dengan mode ‘w+’ bila terdapat file .txt yang sudah ada datanya dan
dibuka dengan mode ‘w+` maka data yang terdapat pada file tersebut akan di hapus dan
diisi dengan content yang terbaru dari program tersebut.
Berikut untuk contoh program dan screenshot hasil

Source Code

#include <stdio.h>

int main()
{
FILE* demo;
demo = fopen("demo_file.txt", "w+");

// adds content to the file


fprintf(demo, "%s", "Welcome to BINUS");

fclose(demo);
return 0;
}

Screenshot:

Data demo_file.txt awal

Data setelah program di run

COMP6599 – Algorithm and Programming


No 3

Dynamic memory

pengertian :

Dynamic Memory atau dalam Bahasa Indonesia disebut Memori dinamis, adalah suatu
teknik alokasi memori yang memungkinkan program memesan memori di saat program
berjalan (runtime) bukan di saat eksekusi program.

Misalnya, jika program pada awalnya hanya memiliki memori statis yang sudah program-
mer pesan dan tulis saat pengkodingan. Kemudian suatu saat pengguna program tersebut
membutuhkan penyimpanan data lebih yang tak terduga, otomatis dia membutuhkan mem-
ori lagi untuk menyimpan data tersebut.

Refrensi : https://www.belajarcpp.com/tutorial/cpp/dynamic-memory/

Source Code

#include <stdio.h>

int main()
{
int n, i, *ptr, sum = 0;

printf("Enter number of elements: ");


scanf("%d", &n);

ptr = (int*) malloc(n * sizeof(int));

// if memory cannot be allocated


if(ptr == NULL)
{
printf("Error! memory not allocated.");
exit(0);
}

for(i = 0; i < n; ++i)


{
printf("Enter elements: ");scanf("%d", ptr + i);
sum += *(ptr + i);
}

printf("Sum = %d", sum);

COMP6599 – Algorithm and Programming


// deallocating the memory
free(ptr);

return 0;
}

Screenshot:

Macro

Macro pada bahasa C memungkinkan nilai-nilai konstan dapat digunakan di seluruh code
program. Macro merupakan semen code yang digunakan dengan nilai macro sebuah kon-
stanta. Macro ditentukan dengan perintah #define.

Terdapat dua jenis macro : Macro Object dan Fungsi.

Fungsi Macro : untuk membuat konstanta yang mewakili angka, string, atau ekspresi.

Contoh penerapan nya pada Define. Define merupakan salah satu macro pada bahasa C.

Source Code

#include <stdio.h>

#define NUMBER 1
#define COLOR "Hitam"
#define SIZE 39

int main()
{
printf("Order Nomor %d Sepatu %s Ukuran %d.\n", NUMBER, COLOR,
SIZE);
getchar();
return 0;
}

COMP6599 – Algorithm and Programming


Screenshot

No 4

Source Code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//init global variable


struct minuman
{
char name[30],size[30],serve[30];
int no,price;
};
struct minuman data_history[100];
struct minuman data_minuman[100];

int i_data = 0; //data iteration


int i_history = 0; //history iteration

//MAIN FUNCTION
int main(){

//title
printf("\t======================================\n");
printf("\t===PROGRAM TOKO MINUMAN KELOMPOK 3====\n");
printf("\t======================================\n\n");

//open file
open_file();

//menu
menu();

return 0;
}

COMP6599 – Algorithm and Programming


//MENU
int menu()
{
//init variable
int opt;

do{
//menu
printf("\n\nSilahkan pilih menu : \n\n");
printf("1. Input Data\n");
printf("2. View History\n");
printf("3. Delete History\n");
printf("4. Exit\n");
printf("Silahkan masukkan pilihan anda:");scanf("
%d",&opt);
//switch menu
switch(opt){
case 1:
input_data();
menu();
break;
case 2:
view_history();
menu();
break;
case 3:
delete_history();
menu();
break;
case 4:
write_file();
printf("exit program\n");
exit(0);
break;
default:
printf("\nSilahkan pilih menu yang disedi-
akan!\n\n");
break;
}
}while(opt != 4);
}

//OPEN FILE FUNCTION

COMP6599 – Algorithm and Programming


int open_file()
{
//init variable
int no,price;
char name[20],size[20],serve[20];

FILE *myfile;
myfile = fopen("dataminuman.txt","r");

if(myfile == NULL)
{
printf("file dataminuman.txt telah dibuat\n");
myfile = fopen("dataminuman.txt","w+");
fclose(myfile);
return 0;
}

while (fscanf(myfile,"No:%d Nama Minuman:%s Size:%s Penya-


jian:%s Harga:%d\n", &no,name,size,serve,&price) != EOF){
data_history[i_history].no = i_history+1;//number
strcpy(data_history[i_history].name,name);//name
strcpy(data_history[i_history].size,size);//size
strcpy(data_history[i_history].serve,serve);//serve
data_history[i_history].price = price;//price

i_history++;
}
printf("file dataminuman.txt berhasil dibaca\n");
fclose(myfile);

// }
}

//WRITE FILE FUNCTION


int write_file()
{
//init var
int i;
FILE *myfile;
myfile = fopen("dataminuman.txt","w");

if(i_history == 0){
fprintf(myfile,"");
return 0;

COMP6599 – Algorithm and Programming


}

for (i = 0; i < i_history ; i++){


fprintf(myfile,"No:%d Nama Minuman:%s Size:%s Penya-
jian:%s Harga:%d\
n",data_history[i].no,data_history[i].name,data_history[i].size,
data_history[i].serve,data_history[i].price);
}

fclose(myfile);
printf("berhasil disimpan ke file\n");
return 0;
}

//INPUT DATA FUNCTION


void input_data()
{
//init variable
char *valid_name [] =
{"kopi","Kopi","teh","Teh","coklat","Coklat","soda","Soda" };
char *valid_size [] =
{"small","Small","medium","Medium","large","Large" };
char *valid_serve [] =
{"dingin","Dingin","panas","Panas","hangat","Hangat" };
char save;

//title
printf("\n\t=======INPUT DATA MINUMAN========\n");

//main body
//input name
do{
printf("Masukkan nama minuman:"); scanf(" %[^\n]s",
&data_minuman[i_data].name);
}while(check_input(valid_name,data_minuman[i_data].name,"Pa
stikan anda memasukkan minuman yang sesuai
(Kopi,Teh,Coklat,Soda)") == 0);
//input size
do{
printf("Masukkan size minuman:"); scanf(" %[^\n]s",
&data_minuman[i_data].size);
}while(check_input(valid_size,data_minuman[i_data].size,"Pa
stikan anda memasukkan size yang sesuai (Small,Medium,Large)")
== 0);
//input serve

COMP6599 – Algorithm and Programming


do{
printf("Masukkan penyajian minuman:"); scanf(" %[^\
n]s", &data_minuman[i_data].serve);
}while(check_input(valid_serve,data_minuman[i_data].serve,"
Pastikan anda memasukkan penyajian yang sesuai
(Dingin,Panas,Hangat)") == 0);
//price
data_minuman[i_data].price =
strlen(data_minuman[i_data].size)*strlen(data_minuman[i_data].na
me)*strlen(data_minuman[i_data].serve)*100;
printf("Harga minuman : %d \n",data_minuman[i_data].price);

//save or not
printf("\n=======HASIL INPUT======\n");
printf("Nama Minuman : %s \n",data_minuman[i_data].name);
printf("Size : %s\n",data_minuman[i_data].size);
printf("Penyajian : %s\n",data_minuman[i_data].serve);
printf("Harga : %d\n",data_minuman[i_data].price);
printf("\n Simpan data (y/n):");scanf(" %c", &save);

//save validate
if(save == 'y' || save == 'Y')
{
//copy to history
data_history[i_history].no = i_history+1;

strcpy(data_history[i_history].name,data_minuman[i_data].name);

strcpy(data_history[i_history].size,data_minuman[i_data].size);

strcpy(data_history[i_history].serve,data_minuman[i_data].serve)
;
data_history[i_history].price =
data_minuman[i_data].price;

i_data++;
i_history++;
printf("Data Successfully saved\n");
}

COMP6599 – Algorithm and Programming


//DELETE FUNCTION
int delete_history()
{
//list history
view_history();

//init variable
int pos;//index position
int i;

/* Input element position to delete */


printf("masukkan index yang akan dihapus : ");
scanf("%d", &pos);

/* Invalid delete position */


if(pos < 1 || pos > i_history)
{
printf("Index Salah! silahkan masukkan index 1 sampai
%d", i_history);
}
else
{
/* Copy next element value to current element */
for(i=pos-1; i<i_history-1; i++)
{
data_history[i + 1].no = data_history[i].no;//nomer
data_history[i] = data_history[i + 1];
}

/* Decrement i history*/
i_history--;
printf("Data Successfully deleted");
}

//VALIDATE FUNCTION
int check_input(char **valid[],char value[],char error[]){
//init var
int i;
int len = sizeof (valid);//get array legth

COMP6599 – Algorithm and Programming


//validate process
for (i = 0; i < len ; i++){
if (!strcmp(value,valid[i])){
return 1;
break;
}
}

//notif error
printf("\n%s\n\n",error);
return 0;
}

//VIEW HISTORY FUNCTION


int view_history()
{
//init var
int i;

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

if(i_history == 0){
printf("TIDAK ADA HISTORY PENJUALAN\n\n");
return 0;
}

for (i = 0; i < i_history ; i++){


printf("No:%d \n Nama Minuman:%s \n Size:%s \n Penya-
jian:%s \n Harga:%d \
n",data_history[i].no,data_history[i].name,data_history[i].size,
data_history[i].serve,data_history[i].price);

printf("--------------------------------------------------------
----------\n");

COMP6599 – Algorithm and Programming


Screenshot

Tampilan awal aplikasi

Input Data

View History

COMP6599 – Algorithm and Programming


Delete data

View history after delete data

Exit with save to file

COMP6599 – Algorithm and Programming


COMP6599 – Algorithm and Programming

Anda mungkin juga menyukai