PROBLEM STATEMENT:
You are tasked with writing a simple GUI that loads App Store information from a local MySql server using the JDBC driver and is able to filter it by rating.
GRADING DETAILS:
- 80% Code quality/Correct usage of programming concepts
- 25% Correct usage of JDBC MySQL Driver
- 25% Correct usage of GUI/JavaFX
- 15% Correct usage of OOP
- 15% Supporting code and logic (control structures, logic, etc.)
- Program runs/correct results (10%)
- Formatting/Indentation (10%)
REQUIREMENTS:
The apps can be filtered by a minimum rating of 2, 3, or 4. The user can also view allapps (clearing the filter).
The app data should be loaded into memory using a class that will store each app’s relevant information.
ATTACHED FILES:
A SQL script has been attached to the assignment to build the required database. Well all I have to say is you need mySQL to complete assignment. on top of java
Instructions
ITN 261: App Store – Databases, JavaFX
Problem statement:
You are tasked with writing a simple GUI that loads App Store information from a local MySql server using the JDBC driver and is able to filter it by rating.
Grading details:
80% Code quality/Correct usage of programming concepts
25% Correct usage of JDBC MySQL Driver
25% Correct usage of GUI/JavaFX
15% Correct usage of OOP
15% Supporting code and logic (control structures, logic, etc.)
Program runs/correct results (10%)
Formatting/Indentation (10%)
Requirements:
The apps can be filtered by a minimum rating of 2, 3, or 4. The user can also view allapps (clearing the filter).
The app data should be loaded into memory using a class that will store each app’s relevant information.
Attached Files:
A SQL script has been attached to the assignment to build the required database.
Sample output:
Google App Viewer
4 App{appName='Photo
3 App{appName='Speedtest by Ookla', rating=4.3}
2 App(appName='The Vitamin Shoppe', rating=4.8}
All Apps App(appName='Amazon Flex', rating=4.7}
App(appName='Wells Fargo Mobile', rating=4.8}
App(appName='Tinder: Dating, Chat, & Friends, rating=4.0}
App{appName='Eat This Much – Meal Planner', rating=4.4}
App{appName='Best Buy', rating=4.9}
App(appName='Waze Navigation & Live Traffic', rating=4.8}
App(appName='Amazon Shopping', rating=4.8}
App{appName='CamScanner – PDF Scanner App, rating=4.9}
ApplappName= Snapchat, rating=4.6)
App(appName='Substack', rating=4.9}
App(appName= 'X', rating=4.6}
App{appName='Google', rating=4.1}
App{appName='Amazon Music: Songs & Podcasts', rating=4.7}
App(appName='Messenger', rating=4.0}
App(appName='AAA Mobile', rating=4.6}
App{appName='Instagram, rating=4.7}
App(appName='Chase Mobile: Bank & Invest', rating=4.8}
App(appName='Brightspace Pulse', rating=4.8}
App(appName='Gmail – Email by Google', rating=4.7}
App(appName='Xfinity', rating=4.4}
App(appName='Google Photos: Backup & Edit', rating=4.7}
App(appName='Webull: Investing & Trading', rating=4.7}
App(appName='Instacart-Get Grocery Delivery', rating=4.8}
App{appName='SHEIN – Shopping Online', rating=4.6}
App{appName="Youtube: Watch, Listen, Stream', rating=4.7)
Google App Viewer
4 App(appName='Shadow Fight 2', rating=4.6}
3 App(appName='Alto's Adventure', rating=4.6}
2 App{appName='DEER HUNTER 2018', rating=4.3}
All Apps App{appName='DRAGON BALL LEGENDS', rating=4.6}
App(appName='DEAD TARGET: FPS Zombie Apocalypse Survival Games', rating=4.5}
App(appName='Cover Fire: offline shooting games for free', rating=4.7}
App(appName='Anger of stick 5: zombie', rating=4.5}
App{appName='CATS: Crash Arena Turbo Stars', rating=4.7}
App(appName='Soul Knight', rating=4.7}
App(appName='Major Mayhem', rating=4.6}
App(appName='DINO HUNTER: DEADLY SHORES', rating=4.4}
App{appName='Strawberry Shortcake BerryRush', rating=4.3}
App{appName="Extreme Match', rating=4.5}
App(appName='Power Rangers Dino Charge', rating=4.3}
App(appName='Zombie Hunter: Post Apocalypse Survival Games', rating=4.4}
App{appName='Agar.io', rating=4.2}
App{appName='Zombie Hunter King', rating=4.3}
App(appName='Garena Free Fire', rating=4.5}
App(appName='Battlelands Royale', rating=4.4}
App{appName='Once Upon a Tower', rating=4.7}
App{appName='TEKKENâ„â', rating=4.2}
App(appName='diep.io', rating=4.1}
App(appName='Arrow.io', rating=4.5}
App(appName='BEYBLADE BURST app', rating=4.5}
App(appName='Dragon Hills', rating=4.5}
App(appName='Bus Rush: Subway Edition', rating=4.1}
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class AppleAppStoreViewer extends Application {
public static class App {
private String appName;
private double rating;
public App(String appName, double rating) {
this.appName = appName;
this.rating = rating;
}
@Override
public String toString() {
return "App{appName='" + appName + "', rating=" + rating + '}';
}
}
public static class AppStore {
private ObservableList<App> apps;
public AppStore() {
this.apps = FXCollections.observableArrayList();
}
public ObservableList<App> getApps() {
return apps;
}
public void loadAppsFromDatabase(double minRating) {
// Connect to the database and fetch the apps based on the minimum rating
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "Leciaga01!")) {
String sql = "SELECT * FROM apps WHERE rating >= ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setDouble(1, minRating);
try (ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
String appName = resultSet.getString("appName");
double rating = resultSet.getDouble("rating");
App app = new App(appName, rating);
apps.add(app);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private AppStore appStore;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
appStore = new AppStore();
// Set up the GUI components
Label filterLabel = new Label("Filter by Rating:");
ChoiceBox<Double> ratingFilterChoiceBox = new ChoiceBox<>(FXCollections.observableArrayList(2.0, 3.0, 4.0));
ratingFilterChoiceBox.getItems().add(null); // Add option for viewing all apps
ratingFilterChoiceBox.setValue(null);
Button loadAppsButton = new Button("Load Apps");
TextArea appTextArea = new TextArea();
loadAppsButton.setOnAction(e -> {
Double minRating = ratingFilterChoiceBox.getValue();
appStore.getApps().clear(); // Clear existing apps
appStore.loadAppsFromDatabase(minRating);
appTextArea.setText(appStore.getApps().toString());
});
// Set up the layout
VBox layout = new VBox(10);
layout.setPadding(new Insets(10));
layout.getChildren().addAll(filterLabel, ratingFilterChoiceBox, loadAppsButton, appTextArea);
// Set up the scene
Scene scene = new Scene(layout, 400, 300);
// Set up the stage
primaryStage.setScene(scene);
primaryStage.setTitle("App Store Viewer");
primaryStage.show();
}
}
