LAPORAN TUGAS BESAR ALGORITMA DAN PEMROGRAMAN 1 PENJUALAN HANDPHONE
Oleh : Muhammad Arif Wardana 1801301038
Dosen Pengampu : Winda Aprianti, M.Si
PROGRAM STUDY TEKNIK INFORMATIKA POLITEKNIK NEGERI TANAH LAUT PELAIHARI 2018
A. KONSEP PROGRAM Tabel 1 Daftar Handphone beserta harga
Kod
Merk
Kode Jenis
Harga
A
Iphone
1
Iphone X
Rp18.999.000,-
2
Iphone 7
Rp9.200.000,-
3
Iphone 6
Rp4.399.000,-
Samsung Galaxy J5 Pro
Rp2.269.000,-
2
Samsung Galaxy S8
Rp6.699.000,-
3
Samsung Galaxy S9
Rp9.849.000,-
1
Oppo A83
Rp2.199.000,-
2
Oppo A71
Rp1.699.000,-
3
Oppo F5
Rp3.499.000,-
1
Asus Zenfone 5Q
Rp3.199.000,-
2
Asus Zenfone Max Pro M1
Rp2.250.000,-
3
Asus Zenfone 4 Selfie
Rp2.099.000,-
B
C
D
Samsung 1
Oppo
Asus
Program yang dibuat sesuai dengan rancangan tugas besar yang diajukan. Ada beberapa hal yang harus diperhatikan dalam tugas besar ini, yaitu : 1. Script harus ada pemilihan kondisi, baik itu if-else ataupun switch-case. 2. Ada perulangan/loop, baik menggunakan perulangan for ataupun while. 3. Dapat menggunakan array, minimal sampai array 2 dimensi. 4. Memiliki minimal 5 fungsi dan 1 fungsi proses(perhitungan). 5. Data yang dimasukkan deprogram dapat disimpan dengan akses file, baik menggunakan Notepad atau Mysql. Program Ini tidak dapat terealisasikan tanpa bantuan pihak yang lebih menguasai dan lebih memahami untuk membantu pemahaman si pembuat sehingga akhirnya mampu membuat programmnya sesuai dengan apa yang dirancang dan diminta. Program yang diusung di dalam rancangan dan direalisasikan ke dalam program yaitu program penjualan handphone dari toko “EMWA CELL”. Toko ini menyediakan 4 merk handphone dan masingmasing merk memiliki 3 jenis handphone serta harganya sesuai dengan tabel diatas.
1
Jalannya program ini, dilakukan dengan sistem pemilihan kode-kode dari setiap subjek-subjek mana yang dijadikan acuan. Misalkan untuk memilih handphone “Asus Zenfone Max Pro M1”, maka kode yang diasukkan pertama kali adalah kode huruf A-D, pilih huruf “D”, kemudian ada pilihan kembali 13, maka pilih nomor 2, maka hasilnya keluar “Asus Zenfone Max Pro M1”. Sistem analoginya program tersebut hampir sama jalan prosesnya dengan perhitungan kasir-kasir di supermarket namun yang lebih sederhananya. Pelanggan yang membeli handphone pada toko tersebut akan mendapatkan struk belanja sehingga tidak terjadi kesalahpahaman terhadap harga ataupun kembalianya. Program tersebut menggunakan switch-case untuk proses pemilihan kode-kode. Pada Program juga memuat diskon sebesar 10% jika pembelian dilakukan sebesar ≥ Rp10.000.000,00. Program tentu memuat rumus-rumus perhitungan agar sesuai dengan hasil akhir yang diinginkan. Rumus perhitungannya yaitu : 1. Total=∑harga barang yang dipilih. 2. Diskon=total×10%. 3. Total yang harus dibayar=total-diskon. B. SOURCE CODE DAN PENJELASAN Source code pada program ini menggunakan project yang terdiri dari beberapa file. Berikut adalah source code programnya sesuai dengan file masing-masing. 1. File main.cpp Tabel 2 Source code file main.cpp
Source Code File main.cpp #include
#include<windows.h> #include ///>TIPE DATA DAN VARIABEL int opsi; char pil; ///>TIPE DATA DAN VARIABEL using namespace std; ///>>>>Fungsi<<<< char judul();
2
Source Code File main.cpp char beranda(); int mesin_kasir(); int login(); int tampilkan_data(); void salah() { system("cls"); cout<<"\t\t\tAnda salah memasukkan kode"<<endl; system("start salah.vbs"); getche(); } ///============== int main() ///Fungsi utama { login(); home: system("cls"); judul(); beranda(); cout<<"\t\t\t"<<"Masukkan pilihan [1..3] : "; cin>>opsi; switch(opsi) { case 1: system("cls"); mesin_kasir(); break; case 2: system("cls"); tampilkan_data(); break; case 3:
3
Source Code File main.cpp exit(0); break; default: salah(); goto home; exit(0); break; } cout<<endl<<"\t\t\tKembali keawal? [Y/T] : "; pil=getche(); if(pil=='T'||pil=='t') { exit(0); } else { goto home; } return 0; } Pada file main ini, terdapat 3 header yaitu : a. #include
= Sebagai deklarasi masukkan dan keluaran.
b. #include<windows.h>
= Sebagai deklarasi fungsi system().
c. #include
= Sebagai deklarasi fungsi getche().
Variable yang digunakan adalah variable global, agar tidak perlu lagi menulis variable pada fungsi main(). Using namespace std; digunakan untuk mempersingkat penulisan cin dan cout agar tidak perlu menulis std sebelumnya. Fungsi yang terdapat dalam file ini meliputi : a. Char judul();
=
deklarasinya
tampilan.cpp.
4
ada
di
file
tampilan-
b. Char beranda();
= deklarasinya juga ada di file tampilan-
tampilan.cpp. c. Int login();
= deklarasinya ada di file login.cpp.
d. Int mesin_kasir();
= deklarasinya ada di file mesin_kasir.cpp.
e. Int tampilkan_data();
=
deklarasinya
ada
di
file
tampilkan_data.cpp. f. Void salah()
= deklarasinya ada dala satu file di main.cpp.
Pada fungsi main, pertama yang dijalankan adalah login, kemudian apabila login telah berhasil maka masuk ke pilihan beranda. Pada pemilihan kondisi ini menggunakan switch-case dan untuk terakhir ada pilihan lagi “kembali keawal?” menggunakan if-else dengan masukkan menggunakan getche() agar tidak mengklik enter lagi. Jika terjadi kesalahan input pada switch-case maka otomatis akan dijalankan fungsi salah() dan akan kembali ke menu beranda dengan goto home. 2. File login.cpp Tabel 3 Source code file login.cpp
Source Code File login.cpp #include #include #include<windows.h> using namespace std; char judul(); int login() { int a; char ch; for(a=1; a<=3; a++) { string user=""; string pss=""; judul(); cout<<"\t\t\tUsername : "; getline(cin, user);
5
Source Code File login.cpp cout<<"\t\t\tPassword : "; ch=_getch(); while(ch !=13) { pss.push_back(ch); cout<<'*'; ch=_getch(); } if(user=="arif"&&pss=="4121f") { system("cls"); system("start login_berhasil.vbs"); return 0; } else { system("cls"); system("start login_gagal.vbs"); } } while(a<=3); { cout<<"\t\t\tAnda telah memasukkan Username & Password yang salah sebanyak 3x"<<endl; system("start blokir.vbs"); getch(); exit(0); } } Fungsi login() ini digunakan untuk membuat perintah login, dimana menggunakan perulangan yang bervariabel a, perulangan ini dilakukan
6
apabila terjadi kesalahan saat memasukkan username ataupun password, yang mana batas perulangan dibatasi pada 3 kali melakukan kesalahan. Jika sudah melakukan kesalahan lebih dari 3 kali maka akun atau program akan diblokir dan secara otomatis program akan di close. Pemanggilan fungsi ini dengan mengetikkan login(); setelah fungsi utama yaitu int main(); ( nama fungsi dan diakhiri tanda titik koma dan di letakkan sesuai dengan keperluan datanya). 3. File tampilan-tampilan.cpp Tabel 4 Source code tampilan-tampilan.cpp
Source Code File tampilan-tampilan.cpp #include using namespace std; char judul() { cout<<"\t\t\t************************************************ ***********"<<endl; cout<<"\t\t\t cout<<"\t\t\t
EMWA CELL
"<<endl;
Jl.Purnawirawan RT.12 RW.1, Angsau, Tanah Laut
"<<endl; cout<<"\t\t\t
Hp:0821-5829-2042
|
Email:
[email protected] "<<endl;
cout<<"\t\t\t************************************************ ***********"<<endl; } char beranda() { cout<<"\t\t\tHome : "<<endl; cout<<"\t\t\t 1. Mesin kasir"<<endl; cout<<"\t\t\t 2. Lihat data penjualan"<<endl; cout<<"\t\t\t 3. Keluar"<<endl; }
7
Pada file tampilan-tampilan.cpp digunakan hanya untuk deklarasi tampilan keluar saja. Maka dari itu header yang digunakan hanya #include dan using namespace std. 4. File menu-menu_barang.cpp Tabel 5 Source code file menu-menu_barang.cpp
Source Code File menu-menu_barang.cpp #include using namespace std; char menu_merk() { cout<<"\t\t\tMerk : "<<endl; cout<<"\t\t\tA. Iphone
B. Samsung"<<endl;
cout<<"\t\t\tC. Oppo
D. Asus"<<endl;
} char menu_jenisA() { cout<<"\t\t\t Jenis : "<<endl; cout<<"\t\t\t 1. Iphone X @ Rp18.999.000,-"<<endl; cout<<"\t\t\t 2. Iphone 7 @ Rp9.200.000,-"<<endl; cout<<"\t\t\t 3. Iphone 6 @ Rp4.399.000,-"<<endl; } char menu_jenisB() { cout<<"\t\t\t Jenis : "<<endl; cout<<"\t\t\t 1. Samsung Galaxy J5 Pro
@ Rp2.269.000,-"<<endl;
cout<<"\t\t\t 2. Samsung Galaxy S8
@ Rp6.699.000,-"<<endl;
cout<<"\t\t\t 3. Samsung Galaxy S9
@ Rp9.849.000,-"<<endl;
} char menu_jenisC() { cout<<"\t\t\t Jenis : "<<endl; cout<<"\t\t\t 1. Oppo A83 @ Rp2.199.000,-"<<endl;
8
Source Code File menu-menu_barang.cpp cout<<"\t\t\t 2. Oppo A71 @ Rp1.699.000,-"<<endl; cout<<"\t\t\t 3. Oppo F5 @ Rp3.499.000,-"<<endl; } char menu_jenisD() { cout<<"\t\t\t Jenis : "<<endl; cout<<"\t\t\t 1. Asus Zenfone 5Q
@ Rp3.199.000,-"<<endl;
cout<<"\t\t\t 2. Asus Zenfone Max Pro M1 @ Rp2.250.000,-"<<endl; cout<<"\t\t\t 3. Asus Zenfone 4 Selfie @ Rp2.099.000,-"<<endl; } File ini menampilkan menu-menu, dari merk sampai ke jenis dan harganya. Fungsi ini digunakan agar tidak perlu mengulang menu tersebut disetiap case mesin kasir. 5. File mesin_kasir.cpp Tabel 6 Source code file mesin_kasir.cpp
Source Code File mesin_kasir.cpp #include #include #include<stdio.h> #include<windows.h> #include using namespace std; ///=========VARIABEL========== int n, a, jenis[10][10], jml[10], b, harga[10][10]; char merk[10][10]; string data[10][3], hp[10][10]; long
int
diskon[10],
tot_bayar[10]={0,0,0,0,0,0,0,0,0,0}; ///=========================== ///=========Fungsi============ char judul();
9
total[10]={0,0,0,0,0,0,0,0,0,0},
Source Code File mesin_kasir.cpp char menu_merk(); char menu_jenisA(); char menu_jenisB(); char menu_jenisC(); char menu_jenisD(); int discount(float x, float y); ///rumus int bayar(float x, float y); ///rumus int jml_bayar(float x, float y, float z); ///rumus void salah(); int mesin_kasir() { judul(); cout<<"\t\t\tMasukkan banyak costumer
: "; cin>>n;
cout<<"\t\t\t--------------------------------"<<endl; awal: for(a=0; a
: "; cin rel="nofollow">>data[a][0];
: "; cin>>data[a][1];
cout<<"\t\t\tNo.Pelanggan
: "; cin>>data[a][2];
cout<<"\t\t\tJumlah barang yang akan dibeli : "; cin>>jml[a]; for(b=0; b<jml[a]; b++) { cout<<"\t\t\t\t\t===Barang ke-"<>merk[a][b]; switch(merk[a][b]) { case 'A': case 'a':
10
Source Code File mesin_kasir.cpp awal_A: menu_jenisA(); cout<<"\t\t\tPilih jenis diatas [1-3] : "; cin>>jenis[a][b]; switch(jenis[a][b]) { case 1: hp[a][b]="Iphone X
";
harga[a][b]=18999000; break; case 2: hp[a][b]="Iphone 7
";
harga[a][b]=9200000; break; case 3: hp[a][b]="Iphone 6
";
harga[a][b]=4399000; break; default: system("cls"); salah(); goto awal_A; break; } break; case 'B': case 'b': awal_B: menu_jenisB(); cout<<"\t\t\tPilih jenis diatas [1-3] : "; cin>>jenis[a][b]; switch(jenis[a][b]) {
11
Source Code File mesin_kasir.cpp case 1: hp[a][b]="Samsung Galaxy J5 Pro
";
harga[a][b]=2269000; break; case 2: hp[a][b]="Samsung Galaxy S8
";
harga[a][b]=6699000; break; case 3: hp[a][b]="Samsung Galaxy S9
";
harga[a][b]=9849000; break; default: system("cls"); salah(); goto awal_B; break; } break; case 'C': case 'c': awal_C: menu_jenisC(); cout<<"\t\t\tPilih jenis diatas [1-3] : "; cin>>jenis[a][b]; switch(jenis[a][b]) { case 1: hp[a][b]="Oppo A83 harga[a][b]=2199000; break; case 2:
12
";
Source Code File mesin_kasir.cpp hp[a][b]="Oppo A71
";
harga[a][b]=1699000; break; case 3: hp[a][b]="Oppo F5
";
harga[a][b]=3499000; break; default: system("cls"); salah(); goto awal_C; break; } break; case 'D': case 'd': awal_D: menu_jenisD(); cout<<"\t\t\tPilih jenis diatas [1-3] : "; cin>>jenis[a][b]; switch(jenis[a][b]) { case 1: hp[a][b]="Asus Zenfone 5Q
";
harga[a][b]=3199000; break; case 2: hp[a][b]="Asus Zenfone Max Pro M1 "; harga[a][b]=2250000; break; case 3: hp[a][b]="Asus Zenfone 4 Selfie
13
";
Source Code File mesin_kasir.cpp harga[a][b]=2099000; break; default: system("cls"); salah(); goto awal_D; break; } break; default: system("cls"); salah(); system("cls"); goto awal; break; } }
cout<<"\t\t\t========================================== ================="<<endl; } system("cls"); for(a=0; a
: "<
cout<<"\t\tTanggal
: "<
cout<<"\t\t\tNo.Pelanggan : "<
14
Source Code File mesin_kasir.cpp { cout<<"\t\t\t"<
"<
"<
\t=\tRp "<
if(total[a] rel="nofollow">=10000000) { diskon[a]=discount(total[a], diskon[a]); tot_bayar[a]=jml_bayar(total[a], diskon[a], tot_bayar[a]); } else { tot_bayar[a]=total[a]; } cout<<"\t\t\tDiskon
\t=\tRp "<
cout<<"\t\t\tTotal yang harus dibayar\t=\tRp "<
cout<<"\t\t\t========================================== ================="<<endl; } ///Akses File fstream myfile("Data_pembeli.txt"); FILE *out=fopen("Data_pembeli.txt", "w"); myfile.is_open(); myfile<<endl;
myfile<<"\t\t\t********************************************** *************"<<endl;
15
Source Code File mesin_kasir.cpp myfile<<"\t\t\t myfile<<"\t\t\t
EMWA CELL
"<<endl;
Jl.Purnawirawan RT.12 RW.1, Angsau, Tanah Laut
"<<endl; myfile<<"\t\t\t
Hp:0821-5829-2042
|
Email:[email protected] "<<endl;
myfile<<"\t\t\t********************************************** *************"<<endl; for(a=0; a
: "<
myfile<<"\t\tTanggal
: "<
myfile<<"\t\t\tNo.Pelanggan : "<
"<
"<
\t=\tRp "<
myfile<<"\t\t\tDiskon
\t=\tRp "<
myfile<<"\t\t\tTotal yang harus dibayar\t=\tRp "<
myfile<<"\t\t\t========================================= =================="<<endl; } fclose(out);
16
Source Code File mesin_kasir.cpp myfile.close(); return 0; } Pada file ini, terdapat header yang ditambahkan dari file sebelumnya. Ada beberapa header tambahan, yaitu : 1. #Include<stdio.h rel="nofollow">
= Untuk deklarasi printf.
2. #include
= Untuk deklarasi akses file ke notepad.
Variabel yang digunakan adalah variable global. Ada beberapa variable yang memiliki array 1 dimensi dan array 2 dimensi. Contoh variable yang memiliki array 1 dimensi adalah diskon[10], 10 tersebut untuk tiap pembeli, dan contoh variable dengan 2 dimensi adalah data[10][3], yang mana 10 untuk setiap pembeli dan 3 untuk variable tanggal, nama, dan nomor pembeli. Ada beberapa fungsi juga yang dimasukkan di file ini, yaitu : 1. Dideklarasikan di file tampilan-tampilan, seperti judul(). 2. Dideklarasikan di file menu-menu barang, seperti menu_merk(), menu_jenisA-D(). 3. Dideklarasikan di file rumus.cpp. Fungsi ini digunakan untuk proses/operasi, seperti discount(float x, float y), bayar(float x, float y), dan jml_bayar(float x, float y, float z). Pada fungsi mesin_kasir(), dihadapkan dengan masukkan banyak pembeli, dimana inputan dari banyak pembeli akan dijadikan patokan perulangan. Kemudian tiap pebeli akan diminta memasukkan data-data pembeli. Setelah semua data dimasukkan pembeli diminta memasukkan banyak barang yang akan dibeli, inputan ini juga digunakan untuk patokan perulangan. Selanjutnya pembeli akan memilih merk dan jenis handphone yang diinginka. Ketika proses diatas sudah dilalui, maka program akan menghitung secara otomatis berapa total uang yang harus dibayar, apakah akan medapat diskon dan total bersih semuanya. Data-data pembeli akan dimasukkan kedalam notepad sebagai bukti pembelian dengan menggunakan akses file.
17
6. File rumus.cpp Tabel 7 Source code file rumus.cpp
Source Code File rumus.cpp int discount(float x, float y) { y=x*10/100; return(y); } int bayar(float x, float y) { y+=x; return(y); } int jml_bayar(float x, float y, float z) { z=x-y; return(z); } Pada file rumus.cpp ini, tidak menggunakan header apapun. Karena tidak menggunakan input dan output hanya proses/operasi. 7. File tampilkan_data.cpp Tabel 8 Source code file tampilkan_data.cpp
Source Code File tampilkan_data.cpp #include #include #include #include<windows.h> using namespace std; int tampilkan_data() { string baca; fstream myfile("Data_pembeli.txt");
18
Source Code File tampilkan_data.cpp myfile.is_open(); while(getline(myfile, baca)) { cout<. Di file ini digunakan untuk menampilkan data. Ada variable baca yang berfungsi untuk sebagai deklarasi isi dari notepad. Agar isi didalam notepad dapat dibaca semua, maka ditambahkan perulangan while.
19
C. HASIL RUNNING PROGRAM 1. Tampilan awal program
Gambar 1 Tampilan awal program
Pada tampilan awal user diminta memasukkan username dan password sesuai dengan source code tadi username : arif dan password : 4121f. Jika username dan password salah, maka tampilannya seperti ini :
Gambar 2 Kesalahan login
Jika terjadi kesalahan selama 3 kali berturut-turut, maka akun di program tersebut akan diblokir dan akan otomatis keluar dari program tersebut.
20
Gambar 3 Akun diblokir
Jika login sudah berhasil, maka tampilannya seperti ini :
Gambar 4 Login berhasil
21
2. Memilih fitur yang ingin digunakan indikatornya 1-3
Gambar 5 Menu beranda
Jika memilih no.1 maka akan masuk pada fungsi mesin_kasir(), jika memilih no.2 maka dapat melihat data pembeli yang dimasukkan di mesin kasir tadi, dan jika memilih no.3 maka keluar dari program. 3. Jika memilih no.1 maka, user diminta memasukkan banyak pembeli, sebagai contoh disini diisi 2 pembeli
Gambar 6 Masukkan banyak costumer
22
4. Langkah selanjutnya user diminta memasukkan data-data pembeli, tanggal dan banyak barang
Gambar 7 Memasukkan data pembeli dan banyak barang
5. Kemudian ada menu merk dengan kode A-D dan menu jenis 1-3 dipilih secara berurutan
Gambar 8 Opsi merk dan jenis
Ikuti langkah tersebut pada pembeli selanjutnya.
23
6. Jika semua pembeli telah dimaskukkan maka dengan otomatis menampilkan detail pembeli dan harga total
Gambar 9 Data pembeli
Data pembeli akan masuk kenotepad, dan user dapat memilih opsi kembali keberanda atau tidak. Jika “Y” maka akan kembali ketampilan awal. 7. Untuk melihat data pembeli yang telah dimasukkan tadi ada 2 cara, yaitu : a. Membuka file notepad pada folder project Data Penjualan HP dengan nama “Data_pembeli.txt
Gambar 10 Data pembeli melalui notepad
24
b. Melalui salah satu fitur dari program tersebut, tepatnya fitur no.2
Gambar 11 Memilih fitur no.2
Maka akan terbaca dari notepad tersebut
Gambar 12 Fitur tampilkan data
25