では上級実務アプリの CSV対応版 + GUI版サンプル をまとめて作ります。
ポイントは 配列操作 + ファイル読み書き + GUI表示 です。
上級実務アプリ:CSV対応・GUI版 月別売上管理システム(Java)
概要
- 目的:商品ごとの月別売上を CSV から読み込み、GUI で表示・編集・合計確認
- 特徴:
- CSV 入力/出力(実務でのデータ管理)
- JTable で月別売上表を GUI 表示
- 配列操作(コピー・集計・ソート)を反映
- 集計結果を GUI で確認可能
CSVファイル例(sales.csv)
Pen,10,20,30,40,50,60,70,80,90,100,110,120
Notebook,5,10,15,20,25,30,35,40,45,50,55,60
Eraser,2,4,6,8,10,12,14,16,18,20,22,24
- 1列目:商品名
- 2列目以降:1月〜12月の売上
実装例(Java Swing + CSV対応)
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.io.*;
import java.util.Arrays;
import java.util.Vector;
public class SalesManagerGUI {
public static void main(String[] args) {
String csvFile = "sales.csv";
Vector<String> products = new Vector<>();
Vector<Vector<Integer>> salesData = new Vector<>();
// CSV読み込み
try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
String line;
while ((line = br.readLine()) != null) {
String[] tokens = line.split(",");
products.add(tokens[0]);
Vector<Integer> months = new Vector<>();
for (int i = 1; i < tokens.length; i++) {
months.add(Integer.parseInt(tokens[i]));
}
salesData.add(months);
}
} catch (IOException e) {
e.printStackTrace();
}
// JTable作成
String[] columns = {"商品","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月","合計"};
DefaultTableModel model = new DefaultTableModel(columns, 0);
// データ追加
for (int i = 0; i < products.size(); i++) {
Vector<Object> row = new Vector<>();
row.add(products.get(i));
row.addAll(salesData.get(i));
int sum = salesData.get(i).stream().mapToInt(Integer::intValue).sum();
row.add(sum);
model.addRow(row);
}
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
// GUI表示
JFrame frame = new JFrame("月別売上管理");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 400);
frame.setLayout(new BorderLayout());
frame.add(scrollPane, BorderLayout.CENTER);
// ボタン:CSV保存
JButton saveBtn = new JButton("CSV保存");
saveBtn.addActionListener(e -> {
try (PrintWriter pw = new PrintWriter(new FileWriter("sales_updated.csv"))) {
for (int i = 0; i < model.getRowCount(); i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < model.getColumnCount() - 1; j++) {
sb.append(model.getValueAt(i,j));
if (j < model.getColumnCount() - 2) sb.append(",");
}
pw.println(sb);
}
JOptionPane.showMessageDialog(frame, "CSV保存完了!");
} catch (IOException ex) {
ex.printStackTrace();
}
});
frame.add(saveBtn, BorderLayout.SOUTH);
frame.setVisible(true);
}
}
Javaポイント解説
- CSV対応
BufferedReaderで読み込みPrintWriterで保存- 配列(Vector)に格納して加工可能
- 配列操作
Vector<Vector<Integer>>で多次元配列のように扱う- 合計やソートなどの集計を簡単に反映
- GUI表示
JTableに配列データをセット- スクロール可能で見やすい
- 編集対応
- ユーザーが JTable 上で数値を編集可能
- 保存ボタンで更新したデータを CSV に書き出せる
応用ポイント(上級)
- JTable の列幅自動調整やフォント変更
- 合計列の自動再計算(TableModelListener でリアルタイム更新)
- ソート機能(商品名順・売上合計順)
- GUI 上で月別グラフ(棒グラフ)を描画
- 3次元配列に拡張し、複数店舗管理
💡 次のステップ
- 売上合計順に並び替え(GUI内ソート)
- 棒グラフ表示(JFreeChartやJavaFX)
- 複数CSV対応(複数店舗・複数年度)


