【解決方法】cli と gui の両方を使用して Java アプリケーションを作成します。

プログラミングQA


Sart > 構成の編集 > + > アプリケーション > 名前: Stat 引数: –stat > 適用
Sart > 構成の編集 > + > アプリケーション > 名前: GUI > 適用

モジュール情報.java:
java.sqlが必要です。

pom.xml の依存関係:
<依存関係>
<グループID>mysql
mysql-connector-java
<バージョン>8.0.33

私が試したこと:

public class Main {
    public static void main(String[] args) {
        if(Arrays.asList(args).contains("--stat")) {
            Statisztika.run();
        } else {
            HelloApplication.main(args);
        }
    }
}

解決策 1

public class Statisztika {
    private static List<Member> members;
    public static void run() {
        try {
            ReadMembersFromDatabase();
            System.out.println("Kitiltott tagok száma: " + countBannedMembers());
            System.out.println(isYoungerThan18() + " a tagok között 18 évnél fiatalabb személy.");
            System.out.println("A legidősebb klubtag: " + getOldestMember());
            System.out.println("Tagok száma:");
            /*System.out.println("Nők: " + getCount("F"));
            System.out.println("Férfiak: " + getCount("M"));
            System.out.println("Ismeretlen: " + getCount(""));*/
            Scanner sc = new Scanner(System.in);
            System.out.println("Adjon meg egy nevet:");
            /*String name = sc.next();
            System.out.println(isMemberBanned(name));*/

        } catch (SQLException e) {
            System.out.println("Nem sikerült csatlakozni adatbázishoz, az alkalmazás leáll");
            System.out.println(e.getMessage());
        }
    }

    private static String isMemberBanned(String name) {
        int index = 0;
        int count = 0;
        for(Member member:members){
            if(member.getName().equals(name)){
                index = count;
            }
            count++;
        }
        if(index == 0){
            return "Nincs ilyen tagja a klubnak";
        }else if(members.get(count).isBanned() == false) {
            return "A megadott személy nincs kitiltva";
        }else{
            return "A megadott személy ki van tiltva";
        }
    }

    private static int getCount(String gender) {
        int count = 0;
        for(Member member: members){
            if(member.getGender().equals(gender)){
                count++;
            }
        }
        return count;
    }

    private static String getOldestMember() {
        Member oldest = members.get(0);
        for(Member member: members){
            if(member.getBirth_date().isBefore(oldest.getBirth_date())){
                oldest = member;
            }
        }

        return oldest.getName() + " (" + oldest.getBirth_date() + ")";
    }

    private static String isYoungerThan18() {
        String result = "Nincs";
        for(Member member: members){
            if(Period.between(member.getBirth_date(), LocalDate.now()).getYears() < 18){
                result = "Van";
            }
        }
        return result;
    }

    private static int countBannedMembers() {
        int count = 0;

        for(Member member: members) {
            if(member.isBanned()){
                count ++;
            }
        }

        return count;
    }

    private static void ReadMembersFromDatabase() throws SQLException {
        DBHelper db = new DBHelper();
        members = db.readMembers();
    }
}

解決策 2

パブリック静的文字列 DB_DRIVER = “mysql”;
パブリック静的文字列 DB_HOST = “ローカルホスト”;
パブリック静的文字列 DB_PORT = “3306”;
public static String DB_DBNAME = “メンバー”;
パブリック静的文字列 DB_USER = “ルート”;
パブリック静的文字列 DB_PASS = “”;

プライベート接続接続;

public DBHelper() は SQLException をスローします {
文字列 url = String.format(“jdbc:%s://%s:%s/%s”, DB_DRIVER, DB_HOST, DB_PORT, DB_DBNAME);
接続 = DriverManager.getConnection(url, DB_USER, DB_PASS);

}

public List readMembers() throws SQLException {
List メンバー = new ArrayList<>();
文字列 sql = “SELECT * FROM メンバー”;
ステートメント ステートメント = connection.createStatement();
ResultSet 結果 = ステートメント.executeQuery(sql);

while(result.next()) {
int id = result.getInt(“id”);
文字列名 = result.getString(“名前”);
文字列性別 = result.getString(“性別”);
LocalDate 誕生日 = result.getDate(“誕生日”).toLocalDate();
ブール値禁止 = result.getBoolean(“禁止”);
メンバー member = 新しいメンバー(id,名前,性別,生年月日,禁止);
members.add(メンバー);
}

メンバーを戻す。
}

public boolean changeBanned(Member member) throws SQLException {
文字列 sql = “更新メンバーのセット禁止 = ? WHERE id = ?”;
PreparedStatement ステートメント = connection.prepareStatement(sql);
ステートメント.setBoolean(1, !member.isBanned());
ステートメント.setInt(2, member.getId());
戻りステートメント.executeUpdate() == 1;
}

解決策 3

public class HelloController {
    @FXML
    private Button banBtn;
    @FXML
    private TableView<Member> members;
    @FXML
    private TableColumn<Member, String> nameCol;
    @FXML
    private TableColumn<Member, String> genderCol;
    @FXML
    private TableColumn<Member, LocalDate> birth_dateCol;
    @FXML
    private TableColumn<Member, String> bannedCol;
    private DBHelper db;


    public void initialize(){
        nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
        genderCol.setCellValueFactory(new PropertyValueFactory<>("gender"));
        birth_dateCol.setCellValueFactory(new PropertyValueFactory<>("birth_date"));
        bannedCol.setCellValueFactory((new PropertyValueFactory<>("banned")));

        try {
            db = new DBHelper();
            refreshTable();
        } catch (SQLException e) {
            Platform.runLater(() -> {
                alert(Alert.AlertType.ERROR, "Nem sikerült csatlakozni az adatbázishoz", e.getMessage());
                Platform.exit();
            });
        }
    }

    private void refreshTable() throws SQLException {
        members.getItems().clear();
        members.getItems().addAll(db.readMembers());
    }

    private Optional<ButtonType> alert(Alert.AlertType alertType, String headerText, String contentText) {
        Alert alert = new Alert(alertType);
        alert.setHeaderText(headerText);
        alert.setContentText(contentText);
        return alert.showAndWait();
    }

    @FXML
    public void banClick(ActionEvent actionEvent){
        Member selected = members.getSelectionModel().getSelectedItem();
        if(selected == null) {
            alert(Alert.AlertType.ERROR, "Tiltás módosításához előbb válasszon ki klubtagot","");
            return;
        }

        String headerText = selected.isBanned() ? "Biztos szeretné visszavonni a kiválasztott klubtag tiltását?" : "Biztos szeretné kitiltani a kiválasztott klubtagot?";
        Optional<ButtonType> confirm =  alert(Alert.AlertType.CONFIRMATION, headerText, "");
        if(confirm.isPresent() && confirm.get().equals(ButtonType.OK)){
            changeBanned(selected);
        }
    }

    private void changeBanned(Member selected) {
        try {
            if(db.changeBanned(selected)){
                alert(Alert.AlertType.INFORMATION, "Sikeres módosítás", "");
            } else {
                alert(Alert.AlertType.INFORMATION, "Sikertelen módosítás", "");
            }
            refreshTable();
        } catch (SQLException e) {
            alert(Alert.AlertType.ERROR, "Hiba történt a módosítás során", e.getMessage());
        }
    }
}

コメント

タイトルとURLをコピーしました