Anda di halaman 1dari 10

BINUS University

BINUS ONLINE LEARNING Semester: Odd/ Even *)


 Graduate Program  Undergraduate Program
Period: 1 / 2 *)
Academic Year:
 Final Exam  Others Exam:
2020/2021
Faculty / Dept. : Computer Science
Course : COMP6619 - Advanced Object Oriented Student ID : 2201842144
Programming
Day/ Date : Senin – Senin / 15 - 22 Februari 2021
BULC : Bandung, Bekasi, Jakarta, Malang, N a m e : Dwi Arif Rachman
Palembang, Semarang Akhsin
Class : THCA,TGCA
Time : 00.00 – 12.00 WIB
Signature :
Exam Feature : Open/ Close Books*)
🞸
Equipment : Exam Booklet / Calculator / Laptop )
🞸
) Strikethrough the unnecessary items
Please insert this test paper into the exam booklet and submit both documents after the test!!!
The penalty for CHEATING is DROP OUT!!!
PETUNJUK UJIAN
i. Jawablah setiap pertanyaan yang berada pada bagian PERTANYAAN UJIAN dibawah ini
ii. Jawaban di ketik rapi pada halaman JAWABAN UJIAN dibawah ini
iii. Jawaban dikumpulkan paling lambat tanggal 22 Februari 2021 dalam bentuk file dan submit melalui
portal ujian
iv. Format file Jawaban adalah : KodeMatakuliah-Nama Matakuliah-NIM.pdf
Contoh : COMP6619-AdvancedObjectOrientedProgramming-2012345678.pdf

PERTANYAAN UJIAN

No. Deskripsi Soal Bobot


1. The Watches merupakan sebuah toko yang menjual berbagai macam merk jam 100
tangan. Pemiliki toko ingin memiliki sebuah Aplikasi GUI sederhana untuk dapat
melakukan administrasi inventory jam tangan. Maka dari itu Anda sebagai
programmer diminta untuk membuat Aplikasi GUI sederhanda dengan implementasi
konsep OOP. Jam Tangan ini memiliki beberapa kategori yaitu Jam Tangan Reguler,
Jam Tangan Sport, dan Jam Tangan Smart Watch. Berikut ini kriteria field yang
digunakan untuk masing-masing jam tangan.
a. Jam Tangan Reguler
- Nama merk
- Bahan jam tangan
- Panjang jam tangan
b. Jam Tangan Sport
- Memiliki semua fitur dari Jam Tangan Reguler
- Tahan kedalaman air (ukuran dalam bentuk m)
- Punya lampu LED (Yes/No)
c. Jam Tangan Smart Watch
- Memiliki semua fitur dari jam tangan regular
- Memiliki wifi (Yes/No)
- Memiliki internal storage (ukuran dalam bentuk GB)
Anda diminta untuk mengikuti beberapa ketentuan dalam pembuatan Aplikasi GUI
sebagai berikut:
a. Untuk skema database dapat dilihat pada File Attachment “watch.sql”
b. Terdapat tampilan tabel yang menampilakan No, Nama Merk, Jenis Jam, Bahan
Jam Tangan, Panjang Jam Tangan, Tahan Kedalaman Air, LED, Wifi, Internal
Storage.
c. Terdapat form yang dapat melakukan insert data jam tangan dimana terdapat
tombol Save dan Reset.
d. Terdapat tombol delete yang dapat digunakan untuk menghapus data tersebut
dengan cara memilih baris pada tabel.
e. Komponen form tersebut yaitu:
1. Jenis Jam Tangan (ComboBox)
2. Nama Merk (TextBox)
No. Deskripsi Soal Bobot
3. Bahan Jam Tangan (TextBox)
4. Panjang jam tangan (TextBox) - unit mm
5. Punya Lampu LED (RadioButton)
6. Tahan kedalaman air (Spinner) – unit M
7. Punya Wifi (RadioButton)
8. Punya Internal Storage (Spinner) – unit GB
f. Buat validasi pada komponen-komponen form dengan ketentuan sebagai berikut:
1. Untuk Jenis Jam Tangan yang dipilih maka:
 Khusus untuk jam tangan regular maka komponen yang dimiliki oleh sport
dan smart watch pada nomor 5-8 dibuat disable
 Khusus untuk jam tangan sport maka komponen yang dimiliki oleh smart
watch (komponen nomor 7 dan 8) dibuat disable
 Khusus untuk jam tangan smart watch maka komponen yang dimiliki oleh
sport (komponen nomor 5 dan 6) dibuat disable
2. Kode Jam Tangan akan terbentuk secara otomatis dimana (RXXX, SXXX, MXXX).
 R untuk Reguler
 S untuk Sport
 M untuk Smart Watch
 XXX untuk kode angka yang berjalan, missal 001, 002, 003, dst.
3. Validasikan semua field yg aktif harus wajib diisi.
4. Tampilkan pesan error jika validasi masih ada yang belum diisi.
5. Tampilkan pesan success jika proses Save maupun Delete berhasil dilakukan.

Berikut ini merupakan contoh data dan struktur dari file watch.sql

Database (watch.sql)
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Jan 17, 2021 at 05:18 PM
-- Server version: 10.4.13-MariaDB
-- PHP Version: 7.2.32

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";


START TRANSACTION;
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;


/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `test`
--

--
-- Table structure for table `watch`
--

CREATE TABLE `watch` (


`KodeJam` varchar(4) NOT NULL,
`NamaMerk` varchar(200) NOT NULL,
`BahanJam` varchar(200) NOT NULL,
`PanjangJam` float NOT NULL,
`LampuLED` tinyint(1) DEFAULT NULL,
`KedalamanAir` int(11) DEFAULT NULL,
`Wifi` tinyint(1) DEFAULT NULL,
`InternalStorage` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `watch`
--

INSERT INTO `watch` (`KodeJam`, `NamaMerk`, `BahanJam`, `PanjangJam`, `LampuLED`,


`KedalamanAir`, `Wifi`, `InternalStorage`) VALUES
('R001', 'CASIO XYZ', '80% Karet dan 20% Stainless Steel', 150, NULL, NULL, NULL, NULL),
('S002', 'G-Shock Sport XYZ', '100% Stainless Steel', 180, 1, 10, NULL, NULL),
('W001', 'Samsung Smartwatch XYZ', '70% Ceramic & 30% Stainless Steel', 178, NULL, NULL, 1, 4);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `watch`
--
ALTER TABLE `watch`
ADD PRIMARY KEY (`KodeJam`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
RUBRIK PENILAIAN
LO SKORE : % dari Bobot NILAI
KONTEN /
Bobot Skor x
ELEMEN A A- B+ B B- C D E
Level bobot
Object Object Object Object Object Object Object Object
oriented oriented oriented oriented oriented oriented oriented oriented
program program programmi program programmi programmi program program
ming on ming on ng on Java ming on ng on Java ng on Java ming on ming on
Java Java technology Java technology technology Java Java
technolog technolo completely technolo incompletel incompletel technolo technolo
Ability to
LO1 y gy constructe gy y y gy gy
apply
Apply completel complete d but complete constructe constructe inadequa inadequa
code
30 y ly solution ly d and d and te te
using Java
construct construct case not construct solution solution construct construct
ed with ed with appropriate ed but case not case not ed and ed and
solution solution solution appropriate appropriate solution solution
case case case not case not case not
appropria appropri appropri appropri appropri
te ate ate ate ate
Graphical Graphical Graphical Graphical Graphical Graphical Graphical Graphical
user user user user user user user user
interface interface interface interface interface interface interface interface
program program programmi program programmi programmi program program
ming is ming is ng is ming is ng is ng is ming is ming is
LO2 Ability to
completel complete completely complete incompletel incompletel not not
Demonstrate demonstr
y ly demonstrat ly y y demonstr demonstr
GUI ate GUI
demonstr demonstr ed but demonstr demonstrat demonstrat ated ated
30 using java
ated with ated with applying ated but ed and ed and
correct correct incorrect applying applied applied
solution solution solution incorrect incorrect incorrect
case case case solution solution solution
case case case
Java Java Java Java Java Java Java Java
graphical graphical graphical graphical graphical graphical graphical graphical
user user user user user user user user
interface interface interface interface interface interface interface interface
Ability to connect connect connect connect connect connect is not is not
LO3
demonstr completel complete completely complete incompletel incompletel connecte connecte
Demonstrate
ate java y to ly to to database ly to y to y to d to d to
DB
GUI with database database technology database database database database database
40
database technolog technolo with technolo technology technology technolo technolo
y with gy with incorrect gy with with with gy with gy with
correct correct solution incorrect incorrect incorrect incorrect incorrect
solution solution case solution solution solution solution solution
case case case case case case case
TOTAL NILAI UJIAN
JAWABAN UJIAN

1. Berikut Adalah Source Code dari Aplikasi The Watches yang telah saya buat :

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package thewatches;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;

/**
*
* @author Arif
*/

public class TheWatches extends JFrame implements ActionListener{


private connect conn = new connect();

private JComboBox jcJenisJam;


private JTextField jtNamaMerk, jtPanjangJam, jtBahanJam;
private JRadioButton jrYaLampuLed, jrTidakLampuLed, jrYaWifi, jrTidakWifi;
private JSpinner jsKetahanan, jsStorage;
private JButton jbReset, jbSubmit;
private ButtonGroup groupLampu,groupWifi;

public TheWatches(){
setTitle("The Wathces");
setSize(500 , 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
formInput();
setVisible(true);
}

public class connect {


private Statement st;
private Connection con;

public connect() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/test" +
"user=root&password=");
st = con.createStatement(1004, 1008);
System.out.println("Connection Successful");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Connection Error");
}
}
public ResultSet executeQuery(String query) {
ResultSet rs = null;
try {
rs = st.executeQuery(query);
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Connection Error");
}
return rs;
}

public void executeUpdate(String query) {


try {
st.executeUpdate(query);
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Connection Error");
}
}
}
private void formInput(){
int a;
JPanel jp = new JPanel(null);

JLabel jlJenisJam = new JLabel("Jenis Jam Tangan ");


jlJenisJam.setBounds(50, 50, 200, 20);
jp.add(jlJenisJam);

jcJenisJam = new JComboBox();


jcJenisJam.setBounds(200, 50, 200, 20);
jcJenisJam.addItem("Jam Tangan Reguler");
jcJenisJam.addItem("Jam Tangan Sport");
jcJenisJam.addItem("Jam Tangan Smart Watch");
jp.add(jcJenisJam);

JLabel jlNamaMerk = new JLabel("Nama Merk ");


jlNamaMerk.setBounds(50, 80, 200, 20);
jp.add(jlNamaMerk);

jtNamaMerk = new JTextField();


jtNamaMerk.setBounds(200, 80, 200, 20);
jp.add(jtNamaMerk);

JLabel jlBahanJam = new JLabel("Bahan Jam Tangan ");


jlBahanJam.setBounds(50, 110, 200, 20);
jp.add(jlBahanJam);

jtBahanJam = new JTextField();


jtBahanJam.setBounds(200, 110, 200, 20);
jp.add(jtBahanJam);

JLabel jlPanjangJam = new JLabel("Panjang Jam Tangan ");


jlPanjangJam.setBounds(50, 140, 200, 20);
jp.add(jlPanjangJam);

jtPanjangJam = new JTextField();


jtPanjangJam.setBounds(200, 140, 200, 20);
jp.add(jtPanjangJam);

JLabel jlLampuLed = new JLabel("Lampu Led ");


jlLampuLed.setBounds(50, 170, 200, 20);
jp.add(jlLampuLed);

jrYaLampuLed = new JRadioButton("Ya");


jrYaLampuLed.setBounds(200, 170, 50, 20);
jp.add(jrYaLampuLed);

jrTidakLampuLed = new JRadioButton("Tidak");


jrTidakLampuLed.setBounds(250, 170, 70, 20);
jp.add(jrTidakLampuLed);

groupLampu = new ButtonGroup();


groupLampu.add(jrYaLampuLed);
groupLampu.add(jrTidakLampuLed);

JLabel jlKetahanan = new JLabel("Tahan Kedalaman Air ");


jlKetahanan.setBounds(50, 200, 200, 20);
jp.add(jlKetahanan);

jsKetahanan = new JSpinner();


jsKetahanan.setBounds(200, 200, 50, 20);
jp.add(jsKetahanan);

JLabel jlWifi = new JLabel("Wifi ");


jlWifi.setBounds(50, 230, 200, 20);
jp.add(jlWifi);

jrYaWifi = new JRadioButton("Ya");


jrYaWifi.setBounds(200, 230, 50, 20);
jp.add(jrYaWifi);

jrTidakWifi = new JRadioButton("Tidak");


jrTidakWifi.setBounds(250, 230, 70, 20);
jp.add(jrTidakWifi);

groupWifi = new ButtonGroup();


groupWifi.add(jrYaWifi);
groupWifi.add(jrTidakWifi);
JLabel jlStorage = new JLabel("Internal Storage ");
jlStorage.setBounds(50, 260, 200, 20);
jp.add(jlStorage);

jsStorage = new JSpinner();


jsStorage.setBounds(200, 260, 50, 20);
jp.add(jsStorage);

jbReset = new JButton("Reset");


jbReset.setBounds(100, 310, 100, 30);
jbReset.addActionListener(this);
jp.add(jbReset);

jbSubmit = new JButton("Submit");


jbSubmit.setBounds(250, 310, 100, 30);
jbSubmit.addActionListener(this);
jp.add(jbSubmit);

jcJenisJam.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if (jcJenisJam.getSelectedItem().equals("Jam Tangan Reguler")){
jrYaLampuLed.setEnabled(false);
jrTidakLampuLed.setEnabled(false);
jsKetahanan.setEnabled(false);
jrYaWifi.setEnabled(false);
jrTidakWifi.setEnabled(false);
jsStorage.setEnabled(false);

}else if (jcJenisJam.getSelectedItem().equals("Jam Tangan Sport")){


jrYaLampuLed.setEnabled(true);
jrTidakLampuLed.setEnabled(true);
jsKetahanan.setEnabled(true);
jrYaWifi.setEnabled(false);
jrTidakWifi.setEnabled(false);
jsStorage.setEnabled(false);

}else if (jcJenisJam.getSelectedItem().equals("Jam Tangan Smart Watch")){


jrYaWifi.setEnabled(true);
jrTidakWifi.setEnabled(true);
jsStorage.setEnabled(true);
jrYaLampuLed.setEnabled(false);
jrTidakLampuLed.setEnabled(false);
jsKetahanan.setEnabled(false);
}
}

});

getContentPane().add(jp);

public void InsertData(){


String NamaMerk = jtNamaMerk.getText().trim();
String BahanJam = jtBahanJam.getText().trim();
String PanjangJam = jtPanjangJam.getText().trim();
String Lampu="", Wifi="";
int Ketahanan = (int) jsKetahanan.getValue();
int Storage = (int) jsStorage.getValue();
if (jrYaLampuLed.isSelected())
Lampu = "Iya";
else if ((jrTidakLampuLed.isSelected()))
Lampu = "Tidak";

if (jrYaWifi.isSelected())
Wifi = "Iya";
else if ((jrTidakWifi.isSelected()))
Wifi = "Tidak";

String sql = "INSERT INTO watch (KodeJam, NamaMerk, BahanJam, PanjangJam, LampuLED,KedalamanAir, Wifi,
InternalStorage) VALUES " +
"(" + NamaMerk + "," + BahanJam + "," + PanjangJam + "," + Lampu + "," + Ketahanan + "," +
Wifi + "," + Storage +")";
conn.executeUpdate(sql);
dispose();
}

public void actionPerformed(ActionEvent e) {


if(e.getSource()==jbSubmit){
if(jtNamaMerk.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "Nama Merk Harus Diisi!!");
} else if(jtBahanJam.getText().isEmpty()) {
JOptionPane.showMessageDialog(null,"Bahan Jam Tangan Harus Diisi!! ");
} else if(jtPanjangJam.getText().isEmpty()){
JOptionPane.showMessageDialog(null,"Panjang Jam Tangan Harus Diisi!!");
} else{
InsertData();
JOptionPane.showMessageDialog(null,"Sukses Input Data ");
}
}
else if(e.getSource()==jbReset){

jtNamaMerk.setText("");
jtBahanJam.setText("");
jtPanjangJam.setText("");
JOptionPane.showMessageDialog(null, "Form Telah di Reset");

}
}

public static void main(String[] args) {


// TODO code application logic here
TheWatches obj = new TheWatches();

Output Code :
 Validasi Input Jam Tangan regular
 Validasi Input Jam Tangan Sport

 Validasi Input Jam Tangan Smart Watch


 Validasi Input Tidak Boleh Kosong (Pada Semua Textfield)

 Reset Form

Anda mungkin juga menyukai