goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

VENICEで勘定系システムのプログラムの例を書かせた。

2025-07-23 21:12:54 | JAVA
銀行のATMシステムにおける残高照会、入金、出金、振込の操作をJavaで実装し、Oracle Databaseと連携するサンプルプログラムを以下に示します。この例では、JavaのJDBC(Java Database Connectivity)を使用してOracle Databaseと接続し、基本的なATM操作を実装します。

### 1. Oracle Databaseのセットアップ

まず、Oracle Databaseに必要なテーブルを作成します。以下は、ユーザー情報と取引履歴を管理するためのテーブルの例です。

```sql
CREATE TABLE users (
user_id NUMBER PRIMARY KEY,
name VARCHAR2(100),
balance NUMBER(10, 2) DEFAULT 0
);

CREATE TABLE transactions (
transaction_id NUMBER PRIMARY KEY,
user_id NUMBER,
transaction_type VARCHAR2(10),
amount NUMBER(10, 2),
transaction_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
```

### 2. Javaプログラム

次に、Javaプログラムを作成します。このプログラムは、ユーザー認証、残高照会、入金、出金、振込の操作を実装します。

#### 2.1. JDBC接続の設定

```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ATMSystem {

private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";

public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
```

#### 2.2. ユーザー認証

```java
public class UserAuthentication {

public static boolean authenticateUser(int userId, String password) throws SQLException {
String query = "SELECT * FROM users WHERE user_id = ? AND password = ?";
try (Connection conn = ATMSystem.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {

pstmt.setInt(1, userId);
pstmt.setString(2, password);

try (ResultSet rs = pstmt.executeQuery()) {
return rs.next();
}
}
}
}
```

#### 2.3. 残高照会

```java
public class BalanceInquiry {

public static double checkBalance(int userId) throws SQLException {
String query = "SELECT balance FROM users WHERE user_id = ?";
try (Connection conn = ATMSystem.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {

pstmt.setInt(1, userId);

try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
return rs.getDouble("balance");
}
}
}
return 0.0;
}
}
```

#### 2.4. 入金

```java
public class Deposit {

public static void deposit(int userId, double amount) throws SQLException {
String query = "UPDATE users SET balance = balance + ? WHERE user_id = ?";
try (Connection conn = ATMSystem.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {

pstmt.setDouble(1, amount);
pstmt.setInt(2, userId);
pstmt.executeUpdate();

insertTransaction(userId, "DEPOSIT", amount);
}
}

private static void insertTransaction(int userId, String transactionType, double amount) throws SQLException {
String query = "INSERT INTO transactions (transaction_id, user_id, transaction_type, amount) VALUES (transactions_seq.NEXTVAL, ?, ?, ?)";
try (Connection conn = ATMSystem.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {

pstmt.setInt(1, userId);
pstmt.setString(2, transactionType);
pstmt.setDouble(3, amount);
pstmt.executeUpdate();
}
}
}
```

#### 2.5. 出金

```java
public class Withdraw {

public static void withdraw(int userId, double amount) throws SQLException {
String query = "UPDATE users SET balance = balance - ? WHERE user_id = ? AND balance >= ?";
try (Connection conn = ATMSystem.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {

pstmt.setDouble(1, amount);
pstmt.setInt(2, userId);
pstmt.setDouble(3, amount);
int rowsAffected = pstmt.executeUpdate();

if (rowsAffected > 0) {
insertTransaction(userId, "WITHDRAW", amount);
} else {
System.out.println("不足金額です。");
}
}
}
}
```

#### 2.6. 振込

```java
public class Transfer {

public static void transfer(int fromUserId, int toUserId, double amount) throws SQLException {
String query = "UPDATE users SET balance = balance - ? WHERE user_id = ? AND balance >= ?";
try (Connection conn = ATMSystem.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {

pstmt.setDouble(1, amount);
pstmt.setInt(2, fromUserId);
pstmt.setDouble(3, amount);
int rowsAffected = pstmt.executeUpdate();

if (rowsAffected > 0) {
query = "UPDATE users SET balance = balance + ? WHERE user_id = ?";
try (PreparedStatement pstmt2 = conn.prepareStatement(query)) {
pstmt2.setDouble(1, amount);
pstmt2.setInt(2, toUserId);
pstmt2.executeUpdate();

insertTransaction(fromUserId, "TRANSFER", -amount);
insertTransaction(toUserId, "TRANSFER", amount);
}
} else {
System.out.println("不足金額です。");
}
}
}
}
```

### 3. フロントエンドのGUI

Java Swingを使用して簡単なGUIを作成します。このGUIは、ユーザーが残高を照会したり、入金や出金、振込を行ったりするためのインターフェースを提供します。

```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

public class ATMGUI extends JFrame {

private JTextField userIdField;
private JTextField amountField;
private JTextField toUserIdField;
private JTextArea outputArea;

public ATMGUI() {
setTitle("ATM System");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(6, 2));

userIdField = new JTextField();
amountField = new JTextField();
toUserIdField = new JTextField();
outputArea = new JTextArea();
outputArea.setEditable(false);

panel.add(new JLabel("User ID:"));
panel.add(userIdField);
panel.add(new JLabel("Amount:"));
panel.add(amountField);
panel.add(new JLabel("To User ID:"));
panel.add(toUserIdField);

JButton checkBalanceButton = new JButton("Check Balance");
JButton depositButton = new JButton("Deposit");
JButton withdrawButton = new JButton("Withdraw");
JButton transferButton = new JButton("Transfer");

checkBalanceButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int userId = Integer.parseInt(userIdField.getText());
double balance = BalanceInquiry.checkBalance(userId);
outputArea.append("Balance: " + balance + "\n");
} catch (SQLException | NumberFormatException ex) {
outputArea.append("Error: " + ex.getMessage() + "\n");
}
}
});

depositButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int userId = Integer.parseInt(userIdField.getText());
double amount = Double.parseDouble(amountField.getText());
Deposit.deposit(userId, amount);
outputArea.append("Deposited: " + amount + "\n");
} catch (SQLException | NumberFormatException ex) {
outputArea.append("Error: " + ex.getMessage() + "\n");
}
}
});

withdrawButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int userId = Integer.parseInt(userIdField.getText());
double amount = Double.parseDouble(amountField.getText());
Withdraw.withdraw(userId, amount);
outputArea.append("Withdrew: " + amount + "\n");
} catch (SQLException | NumberFormatException ex) {
outputArea.append("Error: " + ex.getMessage() + "\n");
}
}
});

transferButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int fromUserId = Integer.parseInt(userIdField.getText());
int toUserId = Integer.parseInt(toUserIdField.getText());
double amount = Double.parseDouble(amountField.getText());
Transfer.transfer(fromUserId, toUserId, amount);
outputArea.append("Transferred: " + amount + " to User ID: " + toUserId + "\n");
} catch (SQLException | NumberFormatException ex) {
outputArea.append("Error: " + ex.getMessage() + "\n");
}
}
});

panel.add(checkBalanceButton);
panel.add(depositButton);
panel.add(withdrawButton);
panel.add(transferButton);

add(new JScrollPane(outputArea), BorderLayout.SOUTH);
add(panel, BorderLayout.NORTH);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ATMGUI().setVisible(true);
}
});
}
}
```

このプログラムは、Java Swingを使用して簡単なATMシステムのGUIを作成し、Oracle Databaseと連携して基本的なATM操作を実装しています。ユーザーはこのインターフェースを通じて、残高照会、入金、出金、振込を行うことができます。

JAVA SE11 Silver試験(パッケージに関する問題) 肢別一問一答穴埋め問題・誤文訂正問題

2025-05-26 16:34:07 | JAVA

以下に、Java SE11 Silver試験向けの「パッケージに関する5択問題×10問」について、各問の正解選択肢は穴埋め問題として再出題、各問の不正解選択肢(4つ)をすべて誤文訂正問題として再出題。

【5択問題 × 10問 + 穴埋め × 10問 + 誤文訂正 × 40問】

問1 Javaでパッケージを定義するには、どのように記述する必要があるか?


A. クラス宣言の下にpackageを記述する

B. メソッド内にpackageを記述する

C. ファイル末尾にpackageを記述する

D. ソースファイルの最初にpackageを記述する

E. package文は省略しなければならない


正解:D

解説: package文はソースファイルの最初に書く必要がある。クラスやメソッドの内部、末尾には記述できない。


穴埋め問題


Javaでパッケージを定義するには、ソースファイルの最初に ________ を記述する。

→ package文


誤文訂正問題


誤:クラス宣言の下にpackageを記述する。

→ 正:クラス宣言の前に記述する。


誤:メソッド内にpackageを記述する。

→ 正:メソッド内には記述できない。


誤:ファイル末尾にpackageを記述する。  

→ 正:ファイルの先頭に記述する。


誤:package文は省略しなければならない。

→ 正:省略可能だが、記述したほうが明確で管理しやすい。




---


問2 次のうち、import文に関して正しいものはどれか?


A. import文はJava 11では非推奨である

B. import文を使っても完全修飾名でクラスを記述する必要がある

C. import文は必ず複数記述しなければならない

D. import文を使うと完全修飾名を省略できる

E. import文の使用はコンパイルエラーを引き起こす


正解:D

解説: import文を使えば、クラス名を完全修飾名で書く必要がなくなる。


穴埋め問題


import文を使うと、クラス名の ________ を省略して使用できる。

→ 完全修飾名


誤文訂正問題


誤:import文はJava 11では非推奨である。

→ 正:現在でも有効に使用されている。


誤:import文を使っても完全修飾名で記述する必要がある。

→ 正:完全修飾名は省略できる。


誤:import文は必ず複数記述しなければならない。

→ 正:1つでも記述できるし、省略も可能。


誤:import文の使用はコンパイルエラーを引き起こす。

→ 正:正しく使用すれば問題なく動作する。




---


問3 privateアクセス修飾子の説明として正しいものはどれか?


A. 同じパッケージのクラスからアクセスできる

B. 同じクラス内でのみアクセス可能である

C. サブクラスからアクセスできる

D. 他パッケージのクラスからアクセスできる

E. すべてのクラスからアクセスできる


正解:B

解説: privateは定義されたクラス内からしかアクセスできない。他のクラスからは同一パッケージでもアクセス不可。


穴埋め問題


private修飾子は、 ________ からのみアクセス可能である。

→ 同一クラス内


誤文訂正問題


誤:同じパッケージのクラスからアクセスできる。

→ 正:privateは他クラスからアクセス不可。


誤:サブクラスからアクセスできる。

→ 正:privateは継承しても見えない。


誤:他パッケージのクラスからアクセスできる。

→ 正:一切アクセス不可。


誤:すべてのクラスからアクセスできる。

→ 正:アクセスできるのは定義クラスのみ。


問4 次のうち、package文に関する正しい記述はどれか?


A. 1つのJavaファイルに複数のpackage文を書くことができる

B. package文の後にimport文を書いてはいけない

C. package文はファイル内のどこに書いてもよい

D. package文を省略するとデフォルトパッケージになる

E. package文はクラスの中に記述する必要がある


正解:D

解説: package文を省略した場合、デフォルトパッケージに属する扱いになる。記述する場合はファイル先頭のみでよい。


穴埋め問題


package文を省略すると、そのクラスは ________ に属する。

→ デフォルトパッケージ


誤文訂正問題


誤:1つのJavaファイルに複数のpackage文を書くことができる。

→ 正:package文は1ファイルに1つのみ記述可能。


誤:package文の後にimport文を書いてはいけない。

→ 正:packageの後にimport文を書くのが通常。


誤:package文はファイル内のどこに書いてもよい。

→ 正:ファイルの最上部に書く必要がある。


誤:package文はクラスの中に記述する必要がある。

→ 正:クラスの外、ソースファイルの先頭に記述する。




---


問5 同名クラス(例:Date)が異なるパッケージに存在する場合の正しい扱いはどれか?


A. 両方のパッケージをimport文で明示的に指定できる

B. どちらか一方しかimportできず、他方は完全修飾名で使う

C. import文は1つのクラスに対して複数記述できない

D. クラス名が同じでも常に曖昧にはならない

E. 両方を同時にimport staticで指定すれば使える


正解:B

解説: 同名クラスを両方importすると曖昧になるため、どちらかをimportし、もう片方は完全修飾名で指定する。


穴埋め問題


同名クラスを複数のパッケージから使うには、片方は ________ で使用する必要がある。

→ 完全修飾名


誤文訂正問題


誤:両方のパッケージをimport文で明示的に指定できる。

→ 正:クラス名が重複するため、片方は完全修飾名で使用する必要がある。


誤:import文は1つのクラスに対して複数記述できない。

→ 正:可能だが、同名クラスは曖昧になるため注意が必要。


誤:クラス名が同じでも常に曖昧にはならない。

→ 正:同名クラスを同時に使うと曖昧になりエラーの原因になる。


誤:両方を同時にimport staticで指定すれば使える。

→ 正:import staticはstaticメンバ用であり、クラス自体のインポートとは異なる。




---


問6 java.langパッケージに関する説明として正しいものはどれか?


A. 明示的にimport文で読み込まないと使用できない

B. SystemやStringなどの基本クラスは含まれない

C. Javaコンパイラが自動的に読み込むためimport不要

D. java.langは非推奨のパッケージである

E. java.langはJava 11以降使用できない


正解:C

解説: java.langパッケージはJavaで最も基本的なパッケージで、自動的に読み込まれる。


穴埋め問題


java.langパッケージは、 ________ によって自動的に読み込まれる。

→ コンパイラ


誤文訂正問題


誤:明示的にimport文で読み込まないと使用できない。

→ 正:自動的に読み込まれるため不要。


誤:SystemやStringなどの基本クラスは含まれない。

→ 正:それらはjava.langに含まれている。


誤:java.langは非推奨のパッケージである。

→ 正:非推奨ではない。


誤:java.langはJava 11以降使用できない。

→ 正:今も使用されている標準パッケージである。




---


問7 protected修飾子の特性として正しいものはどれか?


A. 他パッケージのすべてのクラスからアクセスできる

B. 同じパッケージまたはサブクラスからアクセスできる

C. privateと同じ挙動を示す

D. アクセス範囲に制限がない

E. アクセス修飾子が指定されていない状態と同じ


正解:B

解説: protectedは同一パッケージまたは他パッケージのサブクラスからアクセスできる。


穴埋め問題


protected修飾子は、同一パッケージまたは ________ からアクセスできる。

→ サブクラス


誤文訂正問題


誤:他パッケージのすべてのクラスからアクセスできる。

→ 正:他パッケージでもサブクラスからのみアクセス可能。


誤:privateと同じ挙動を示す。

→ 正:privateはクラス内限定、protectedはパッケージとサブクラスにも可。


誤:アクセス範囲に制限がない。

→ 正:範囲は制限されている。


誤:アクセス修飾子が指定されていない状態と同じ。

→ 正:protectedはそれより広いアクセス範囲を持つ。




---


問8 次のうち、import java.util.*;を記述した場合の正しい説明はどれか?


A. java.utilのクラスは全て自動的に読み込まれる

B. java.utilのすべてのクラスとサブパッケージが読み込まれる

C. java.util.ListやMapは使用できない

D. importしなくても使えるようになるのはjava.langのみである

E. import文は動的に変更される


正解:A

解説: java.util.*;はそのパッケージ内のクラス全てをインポートするが、サブパッケージまでは含まない。


穴埋め問題


import java.util.*; を使うと、 ________ 配下のクラスが使用可能になる。

→ java.util


誤文訂正問題


誤:java.utilのすべてのクラスとサブパッケージが読み込まれる。

→ 正:クラスのみで、サブパッケージは対象外。


誤:java.util.ListやMapは使用できない。

→ 正:それらも読み込まれる。


誤:importしなくても使えるようになるのはjava.langのみである。

→ 正:他は明示的にimportが必要。


誤:import文は動的に変更される。

→ 正:静的に記述される。




---


問9 Javaにおけるパッケージ名の命名規則として適切なのはどれか?


A. 全て英語で構成する必要がある

B. クラス名と同じ名前は使えない

C. 数字を含めてはならない

D. ドメイン名を逆にした形式で命名するのが慣例

E. パッケージ名には必ずアンダースコアを含める


正解:D

解説: Javaの慣例では、com.example.appのようにドメインを逆順にした名前を用いる。


穴埋め問題


パッケージ名は、 ________ を逆にした形式で命名するのが慣例である。

→ ドメイン名


誤文訂正問題


誤:全て英語で構成する必要がある。

→ 正:英語以外も使えるが、一般には英語が推奨されている。


誤:クラス名と同じ名前は使えない。

→ 正:重複してもパッケージとクラスは区別される。


誤:数字を含めてはならない。

→ 正:数字を含めることは可能。


誤:パッケージ名には必ずアンダースコアを含める。

→ 正:アンダースコアは任意であり、含める必要はない。




---


問10 次のうち、Javaのパッケージに関する誤った記述はどれか?


A. パッケージを分けることで名前の衝突を防げる

B. パッケージはクラスを論理的に分類する

C. パッケージ構成はディレクトリ構造に依存しない

D. import文で他のパッケージのクラスを使用できる

E. package文がないとデフォルトパッケージになる


正解:C

解説: Javaではパッケージ構成とファイルのディレクトリ構造は一致している必要がある。


穴埋め問題


Javaのパッケージ構成は、 ________ 構造と一致している必要がある。

→ ディレクトリ


誤文訂正問題


誤:パッケージ構成はディレクトリ構造に依存しない。

→ 正:Javaではパッケージ名=フォルダ階層。


誤:パッケージを分けることで名前の衝突を防げない。

→ 正:防ぐことができる。


誤:import文で他のパッケージのクラスを使用できない。

→ 正:使用できる。


誤:package文がないとコンパイルできない。

→ 正:package文がないとデフォルトパッケージに属する。




みずほ銀行の勘定系システムについて

2025-04-05 16:38:27 | JAVA
みずほ銀行の勘定系システムは、その歴史的経緯や大規模システム刷新プロジェクトの影響を受け、**複雑な変遷**を経て現在に至っています。以下に詳細を整理します:

---

### **1. システムの歴史的背景**
みずほ銀行は2002年に**第一勧業銀行・富士銀行・日本興業銀行**が合併して誕生しました。合併時、各行が異なる基幹システムを保有していたため、統合に大きな課題が生じました。
- **旧システム**:
- 第一勧業銀行:IBMメインフレーム(COBOLベース)
- 富士銀行:日立製システム(ACOSシリーズ)
- 日本興業銀行:独自システム

当初はこれらを繋ぐ「**一時統合システム**」で運用されましたが、複雑さから障害が多発(例:[2002年のシステム障害](https://www.mizuho-fg.co.jp/news/2002/news20020610.html))。

---

### **2. 現在の勘定系システム(2024年時点)**
#### **(1) メインシステム:『Mizuho Next』**
- **概要**:2019年から段階的に導入された次世代勘定系システム。
- **技術スタック**:
- **プログラミング言語**:Javaメイン(COBOLから移行)
- **プラットフォーム**:オンプレミス(三菱電機の「**MAINFRAME**」とオープン系サーバーの併用)
- **データベース**:Oracle Database(一部でIBM Db2)
- **特徴**:
- マイクロサービスアーキテクチャを部分的に採用
- リアルタイム処理とバッチ処理の効率化
- 海外システムとの連携強化

#### **(2) 残存するレガシーシステム**
- **COBOLベースのモジュール**:完全移行が完了しておらず、一部で継続運用。
- **富士銀行時代の日立ACOSシステム**:特定業務で残存(段階的廃止予定)。

---

### **3. システム刷新の目的**
- **課題解決**:
- 旧システムの複雑さによる障害リスク低減
- 国際業務(例:海外送金)対応の遅れ改善
- **新機能**:
- API連携によるFinTech企業との協業(オープンバンキング)
- AIを活用した与信管理

---

### **4. 他行との比較**
| 銀行 | 勘定系システム | 特徴 |
|---|---|---|
| **みずほ銀行** | Mizuho Next(Java/COBOL混在) | 大規模刷新進行中 |
| **三菱UFJ** | STARS(COBOLメイン) | 段階的Java化 |
| **三井住友** | SMBC-MAP(IBMメインフレーム) | クラウド移関心 |

---

### **5. 今後の方向性**
- **2025年までに**:Mizuho Nextへの完全移行を目標(COBOL依存脱却)。
- **クラウド活用**:非勘定系(顧客向けアプリ等)からAWS/Azure導入を拡大。

---

### **注意点**
- みずほのシステム構成は非公開部分が多く、上記は公開情報や技術者へのインタビューからの推測を含みます。
- 同社は「[システム統合の失敗](https://www.nikkei.com/article/DGXNASDD170H6_X10C11A1000000/)」を教訓に、刷新プロジェクトでは**段階的移行**を徹底しています。

システム障害の歴史から「**銀行のIT戦略**」を学ぶケースとして、みずほは国内外で頻繁に言及されます。

JavaとSQLを使用した簡単なGUI勘定系システムの例

2025-03-02 02:33:22 | JAVA
以下は、JavaとSQLを使用した簡単なGUI勘定系システムの例です。この例では、ユーザーが口座情報を管理できるシンプルなシステムを構築します。データベースにはSQLiteを使用し、JavaのSwingライブラリを使用してGUIを実装します。

### 1. データベースの準備
まず、SQLiteデータベースを作成し、口座情報を管理するテーブルを作成します。

```sql
-- accounts.db
CREATE TABLE accounts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
balance REAL NOT NULL
);
```

### 2. Javaプロジェクトの設定
Javaプロジェクトを作成し、SQLiteのJDBCドライバを追加します。`sqlite-jdbc`ライブラリを使用する場合は、MavenやGradleで依存関係を追加します。

#### Mavenの場合:
```xml
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.36.0.3</version>
</dependency>
```

### 3. Javaコードの実装
以下は、JavaでGUI勘定系システムを実装するコード例です。

```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

public class AccountManagementSystem extends JFrame {
private JTextField nameField;
private JTextField balanceField;
private JTextArea displayArea;

private Connection connection;

public AccountManagementSystem() {
initializeDatabase();
createUI();
}

private void initializeDatabase() {
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:accounts.db");
System.out.println("Database connected!");
} catch (Exception e) {
e.printStackTrace();
}
}

private void createUI() {
setTitle("Account Management System");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());

JPanel inputPanel = new JPanel(new GridLayout(3, 2));
inputPanel.add(new JLabel("Name:"));
nameField = new JTextField();
inputPanel.add(nameField);

inputPanel.add(new JLabel("Balance:"));
balanceField = new JTextField();
inputPanel.add(balanceField);

JButton addButton = new JButton("Add Account");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addAccount();
}
});
inputPanel.add(addButton);

JButton viewButton = new JButton("View Accounts");
viewButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
viewAccounts();
}
});
inputPanel.add(viewButton);

add(inputPanel, BorderLayout.NORTH);

displayArea = new JTextArea();
add(new JScrollPane(displayArea), BorderLayout.CENTER);
}

private void addAccount() {
String name = nameField.getText();
double balance = Double.parseDouble(balanceField.getText());

try {
PreparedStatement ps = connection.prepareStatement("INSERT INTO accounts (name, balance) VALUES (?, ?)");
ps.setString(1, name);
ps.setDouble(2, balance);
ps.executeUpdate();
JOptionPane.showMessageDialog(this, "Account added successfully!");
} catch (SQLException e) {
e.printStackTrace();
}
}

private void viewAccounts() {
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM accounts");
displayArea.setText("");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
double balance = rs.getDouble("balance");
displayArea.append("ID: " + id + ", Name: " + name + ", Balance: " + balance + "\n");
}
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new AccountManagementSystem().setVisible(true);
}
});
}
}
```

### 4. 実行方法
1. SQLiteデータベースを作成し、`accounts`テーブルを作成します。
2. Javaプロジェクトを設定し、`sqlite-jdbc`ライブラリを追加します。
3. 上記のJavaコードをプロジェクトに追加し、`AccountManagementSystem`クラスを実行します。

### 5. 動作確認
- GUIが表示され、名前と残高を入力して「Add Account」ボタンをクリックすると、データベースに口座情報が追加されます。
- 「View Accounts」ボタンをクリックすると、データベースに登録されているすべての口座情報が表示されます。

この例は非常にシンプルな勘定系システムですが、実際のシステムではさらに機能を拡張することができます。例えば、口座間の送金機能や、口座の削除・更新機能などを追加することが考えられます。

スマホのフラッシュライトがプロジェクターになるとか大法螺詐欺アプリwww

2023-11-10 18:29:20 | JAVA

Flashlight: Led Torch Light - Apps on Google Play

Flashlight: Led Torch Light - Apps on Google Play

Flashing app for incoming calls and SMS. Flashlight app for phone

逆コンパイルしてソースコード晒してやろうか?www

トップディレクトリだけでも297フォルダもあった。



さすがに全て晒せないし、直でソースコードを書くとブログの記事を公開できない糞設定になっているらしい。だから一部のみキャプチャ画像として晒したる。

ほとんどのソースコードファイルがダミーまたは不当に広告収入を搾取するためのプログラムとなっているようだ。



kindleプラグインの作り方(読み上げプラグインのソースコード付き)

2023-04-08 01:17:54 | JAVA
kindleプラグインの作り方

Kindleプラグインを作成するには、まずプログラミング言語を選択する必要があります。Kindleプラグインは主にJavaで開発されており、Javaを使用してプラグインを作成することが推奨されています。

以下は、Kindleプラグインを作成するための一般的な手順です。

Java開発環境をインストールする
Kindleプラグインを作成するには、Java開発環境(JDK)が必要です。JDKをインストールし、JavaコンパイラーとIDE(Integrated Development Environment)を使用して開発を始めることができます。有名なIDEには、Eclipse、NetBeans、IntelliJ IDEAなどがあります。

Kindle SDKをインストールする
Kindle SDKは、Kindleデバイス上で動作するアプリケーションを開発するためのツールキットです。SDKをインストールすると、Kindleアプリケーションを開発するための必要なツールやドキュメントが提供されます。

Kindleプラグインの基本的なコードを作成する
Kindleプラグインの基本的なコードを作成し、Kindleデバイスで実行されるようにする必要があります。これには、Kindleアプリケーション用のインターフェイスを実装することが含まれます。

コードをテストする
プラグインのコードをテストし、動作することを確認する必要があります。これには、Kindleデバイスで実際にテストするか、Kindleシミュレーターを使用することが含まれます。

プラグインをパッケージ化する
プラグインをKindleデバイスで使用できるようにするには、プラグインをパッケージ化する必要があります。これには、プラグインのバイナリファイルとKindleアプリケーションに関する情報を含むXMLファイルを作成することが含まれます。

プラグインを公開する
プラグインを公開するには、Amazon Developer Consoleにアカウントを作成し、プラグインをアップロードする必要があります。プラグインを公開する前に、Amazonのプラグイン開発に関するガイドラインを確認することをお勧めします。

以上が、Kindleプラグインを作成するための一般的な手順です。ただし、詳細は開発するプラグインによって異なる場合があります。


それではkindle読み上げプラグインのソースコードを書いてください

申し訳ありませんが、Kindle読み上げプラグインの完全なソースコードを提供することはできません。Kindle読み上げプラグインを作成するには、Amazonが提供するKindle SDKを使用し、Amazonのプラグイン開発に関するガイドラインに従う必要があります。

ただし、一般的なKindle読み上げプラグインの機能については、以下のようなコード例を示すことができます。

import com.amazon.kindle.kindlet.Kindlet;
import com.amazon.kindle.kindlet.KindletContext;
import com.amazon.kindle.kindlet.ui.KindleFont;
import com.amazon.kindle.kindlet.ui.KindleOrientationController;
import com.amazon.kindle.kindlet.ui.KTextArea;

public class ReadAloudPlugin implements Kindlet {
private KindletContext context;
private KTextArea textArea;
private KindleOrientationController orientationController;
private TextToSpeechEngine speechEngine;

public void create(KindletContext context) {
this.context = context;

// create the text area for displaying book content
textArea = new KTextArea();
textArea.setFont(KindleFont.SANS_SERIF_SMALL);
textArea.setEditable(false);

// create the orientation controller for detecting device orientation changes
orientationController = new KindleOrientationController(context);

// create the text-to-speech engine for reading book content aloud
speechEngine = new TextToSpeechEngine();

// add the text area to the context's content pane
context.getRootContainer().add(textArea);
}

public void start() {
// start detecting device orientation changes
orientationController.start();

// start reading book content aloud
speechEngine.start(textArea.getText());
}

public void stop() {
// stop detecting device orientation changes
orientationController.stop();

// stop reading book content aloud
speechEngine.stop();
}

public void destroy() {
// clean up any resources used by the plugin
textArea = null;
orientationController = null;
speechEngine = null;
context = null;
}
}
このコード例では、KindleのUIコンポーネントを使用して、テキストエリアに本の内容を表示し、テキストを音声に変換して読み上げるTextToSpeechEngineクラスを使用しています。また、Kindleの画面の向きが変更された場合に備えて、KindleOrientationControllerクラスを使用してデバイスの方向を監視しています。

ただし、このコード例は参考用であり、実際のプラグインの作成には、Amazonのプラグイン開発に関するガイドラインに従う必要があります。また、Kindle SDKには、テキスト読み上げのために使用できるAPIが用意されているため、それを使用する必要があります。

Oracle JAVA Silverの4択問題4問。正解と解説付き。

2023-03-11 22:13:54 | JAVA

Oracle JAVA Silverの4択問題4問を出題してください。正解と解説もお願いします。

 
はい、Oracle Java Silverの4択問題を出題いたします。以下の10問をお楽しみください。
  1. 以下のコードを実行した場合、どのような結果が返されるでしょうか?
go<button class="flex ml-auto gap-2">Copy code</button>
int[] numbers = {1, 2, 3}; System.out.println(numbers[3]);

a) 1

b) 2

c) 3

d) IndexOutOfBoundsExceptionがスローされます。

 

【正解】 d) IndexOutOfBoundsExceptionがスローされます。

【解説】 配列の要素数は3ですが、numbers[3]という配列の範囲外のインデックスを指定しています。そのため、IndexOutOfBoundsExceptionがスローされます。

 

  1. 以下のコードを実行した場合、どのような結果が返されるでしょうか?
rust<button class="flex ml-auto gap-2">Copy code</button>
String str = "Java"; str.concat("SE 11"); System.out.println(str);

a) Java

b) JavaSE 11

c) SE 11

d) NullPointerExceptionがスローされます。

 

【正解】 a) Java

【解説】 Stringはimmutable(不変)です。つまり、concat()メソッドは元の文字列を変更せず、新しい文字列を作成します。しかし、新しい文字列が元のstrに代入されていないため、strの値は変わらずに"Java"のままです。

 

  1. 以下のコードを実行した場合、どのような結果が返されるでしょうか?
rust<button class="flex ml-auto gap-2">Copy code</button>
String str = "Java"; str = str.concat("SE 11"); System.out.println(str);

a) Java

b) JavaSE 11

c) SE 11

d) NullPointerExceptionがスローされます。

 

【正解】 b) JavaSE 11

【解説】 concat()メソッドで新しい文字列が作成され、strに再代入されています。そのため、strの値は"JavaSE 11"に変わります。

 

  1. 以下のコードを実行した場合、どのような結果が返されるでしょうか?
go<button class="flex ml-auto gap-2">Copy code</button>
int x = 1; switch (x) { case 1: System.out.println("A"); case 2: System.out.println("B"); default: System.out.println("C"); }

a) A

b) A, B

c) A, B, C

d) B

 

【正解】 c) A, B, C

【解説】 switch文のcaseブロックには、break文がないため、case 1が一致した場合は"A"が出力され、その後のcase 2defaultブロックも実行されます。そのため、"B"と"C"も出力されます。

 

EclipseでJAVAの勉強

2023-02-18 08:52:27 | JAVA

EclipseはJAVAの開発環境の一つだ。

JDKのインストールに失敗してEclipseをインストールしてみたが、使い方が分からんのでこの本をブックオフで見つけて買ってきた。
開発環境の導入でエラーの連続でいやになり、JAVAのプログラミングでエラーの連続でさらにいやになり、といった有り様。

レーシングゲームCodeRallyを題材にしてEclipseの使い方とJAVAのプログラミングが学べるという一石二鳥いや一石三鳥の神本だ。
何で三鳥なのかというと、ゲーム開発も学べるという点があるからだ。

しかしこの本、初版が2005年1月という古い本。

最新のJAVAのバージョン、Eclipseのバージョンで果たして使えるだろうか?