From 3eec699ac98f21f7c5344225b843813d6adc2d2a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=9F=B3=E5=8E=9F=E3=80=80=E5=8F=B6=E5=A4=A7?=
<26-k-ishihara-acrowavenet@it-college.co.jp>
Date: Fri, 23 Oct 2026 15:25:23 +0900
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E4=BA=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.classpath | 6 +
.gitignore | 1 +
.project | 17 +
src/Main.java | 126 +++++
src/Task.java | 64 +++
src/TaskManager.java | 520 ++++++++++++++++++
タスク管理システム実行例_石原/TaskManager.exe | Bin 0 -> 9216 bytes
タスク管理システム実行例_石原/tasks.csv | 13 +
8 files changed, 747 insertions(+)
create mode 100644 .classpath
create mode 100644 .gitignore
create mode 100644 .project
create mode 100644 src/Main.java
create mode 100644 src/Task.java
create mode 100644 src/TaskManager.java
create mode 100644 タスク管理システム実行例_石原/TaskManager.exe
create mode 100644 タスク管理システム実行例_石原/tasks.csv
diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..fb50116
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/.project b/.project
new file mode 100644
index 0000000..a462aa3
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ Taskmanager
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/src/Main.java b/src/Main.java
new file mode 100644
index 0000000..a4138e2
--- /dev/null
+++ b/src/Main.java
@@ -0,0 +1,126 @@
+import java.util.Scanner;
+
+//アプリ起動クラス
+//画面制御用
+//実際の処理はTaskManagerへ委譲する
+public class Main {
+
+ public static void main(String[] args) {
+
+ //キーボード入力用
+ Scanner sc = new Scanner(System.in);
+ //タスク管理クラス生成
+ TaskManager manager = new TaskManager();
+ //起動時にCSV読込
+ manager.loadTasks();
+ //メニュー処理開始
+ showMenu(sc, manager);
+
+ sc.close();
+
+ }
+
+ // メニュー処理
+ // 4が入力されるまでループ
+ public static void showMenu(Scanner sc, TaskManager manager) {
+
+ //メニュー番号
+ int menu = 0;
+
+ while (menu != 5) {
+
+ //タスク一覧表示
+ manager.displayTasks();
+ //メニュー表示
+ displayMenu();
+
+ try {
+
+ //入力値を数値へ変換
+ //数字以外の場合は再入力指示
+ menu =Integer.parseInt(sc.nextLine());
+ //メニュー実行
+ executeMenu(menu, sc, manager);
+
+ } catch (NumberFormatException e) {
+
+ //1~4が入力された場合
+ inputError(sc);
+
+ }
+ }
+ }
+
+ //メニュー表示
+ public static void displayMenu() {
+
+ //行間調整
+ System.out.println();
+ System.out.print("[1] タスク追加 ");
+ System.out.print("[2] 完了/未完了の切り替え ");
+ System.out.print("[3] 削除 ");
+ System.out.print("[4] ソート ");
+ System.out.println("[5] 終了");
+
+ System.out.print("番号を入力してください > ");
+
+ }
+
+ //メニュー実行
+ //入力された番号に応じて処理を呼び出す
+ public static void executeMenu(int menu, Scanner sc, TaskManager manager) {
+
+ switch (menu) {
+
+ case 1:
+ //タスク追加
+ manager.addTask(sc);
+
+ break;
+
+ case 2:
+ //状態切替
+ manager.changeStatus(sc);
+
+ break;
+
+ case 3:
+ //タスク削除
+ manager.deleteTask(sc);
+
+ break;
+
+ case 4:
+
+ manager.sortTasks(sc);
+
+ break;
+
+ case 5:
+
+ break;
+
+ default:
+
+ // 1~5以外の数値入力
+ inputError(sc);
+
+ break;
+
+ }
+
+ }
+
+ // 入力エラー
+ // Enter入力後にメニューへ戻る
+ public static void inputError(Scanner sc) {
+
+ System.out.println();
+ System.out.println(
+ "正しい番号を入力してください。Enterキーを押してください。");
+
+ sc.nextLine();
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/Task.java b/src/Task.java
new file mode 100644
index 0000000..0fed1ff
--- /dev/null
+++ b/src/Task.java
@@ -0,0 +1,64 @@
+ //タスク情報管理用クラス
+ //カプセル化のためフィールドはprivate
+ //値の取得や変更はgetter/setterを利用する
+
+public class Task {
+ //タスクID
+ private int id;
+ //タスク名
+ private String taskName;
+ //完了状態
+ private boolean completed;
+ //期限
+ private String deadline;
+ //優先度
+ private int priority;
+
+ //コンストラクタ
+ //タスク生成時に初期値を設定
+
+ public Task(int id, String taskName, boolean completed, String deadline, int priority) {
+ this.id = id;
+ this.taskName = taskName;
+ this.completed = completed;
+ this.deadline = deadline;
+ this.priority = priority;
+ }
+
+ //ID取得
+ //ゲッター
+ public int getId() {
+ return id;
+ }
+
+ //タスク名取得
+ //ゲッター
+ public String getTaskName() {
+ return taskName;
+ }
+
+ //完了状態取得
+ //ゲッター
+ public boolean isCompleted() {
+ return completed;
+ }
+
+ //完了状態切り替え時に使用
+ //セッター
+ public void setCompleted(boolean completed) {
+ this.completed = completed;
+ }
+
+ //期限取得
+ //ゲッター
+ public String getDeadline() {
+ return deadline;
+ }
+
+ //優先度取得
+ //ゲッター
+ public int getPriority() {
+ return priority;
+ }
+
+}
diff --git a/src/TaskManager.java b/src/TaskManager.java
new file mode 100644
index 0000000..02ced39
--- /dev/null
+++ b/src/TaskManager.java
@@ -0,0 +1,520 @@
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Scanner;
+
+//タスク管理クラス
+//タスクの登録・表示・削除・状態変更
+//CSVの読込・保存
+public class TaskManager {
+ // CSVファイル保存先
+ public static String Path =
+ "C:\\Users\\石原 叶大\\Documents\\development-taskmanager\\タスク管理システム実行例_石原\\tasks.csv";
+
+ //タスク一覧
+ //タスク数が増減するのでArrayListを使用
+ private ArrayList tasks = new ArrayList();
+ //CSV読込
+ //CSVデータをArrayListへ格納する
+ public void loadTasks() {
+ try {
+ BufferedReader br = new BufferedReader(new FileReader(Path));
+
+ String line;
+ //1行ずつ読み込むループ
+ while ((line = br.readLine()) != null) {
+ //カンマ区切りで分割
+ String[] data = line.split(",");
+
+ if (data.length == 5) {
+ int id = Integer.parseInt(data[0]);
+ String taskName = data[1];
+ boolean completed = Boolean.parseBoolean(data[2]);
+ String deadline = data[3];
+ int priority = Integer.parseInt(data[4]);
+
+ Task task = new Task(id, taskName, completed, deadline, priority);
+ tasks.add(task);
+ }
+ }
+ br.close();
+
+ } catch (IOException e) {
+ System.out.println("CSVファイルが存在しないため新規作成します");
+ }
+ }
+
+ //CSV保存
+ //ArrayList内のデータをCSVへ保存
+
+ public void saveTasks() {
+ try {
+ FileWriter fw = new FileWriter(Path);
+
+ //全件保存
+ for (Task task : tasks) {
+ fw.write(
+ task.getId() + ","
+ + task.getTaskName() + ","
+ + task.isCompleted() + ","
+ + task.getDeadline() + ","
+ + task.getPriority()
+ + "\n");//改行用
+ }
+ fw.close();
+
+ } catch (IOException e) {
+ System.out.println("保存に失敗しました");
+ }
+ }
+
+ //文字色
+ public static String Red = "\u001B[31m";
+ public static String Yellow = "\u001B[33m";
+ public static String Blue = "\u001B[36m";
+ public static String Gray = "\u001B[90m";
+ public static String Reset = "\u001B[0m";
+
+ //タスク一覧表示
+ public void displayTasks() {
+
+ System.out.println("==========================================================");
+ System.out.println(" Task Manager");
+ System.out.println("==========================================================");
+ System.out.println("ID | 状態 | 優先度 | 期限 | タスク名");
+ System.out.println("----------------------------------------------------------");
+
+ if (tasks.isEmpty()) {
+ System.out.println("登録されているタスクはありません。");
+ return;
+ }
+
+ //拡張for文
+ //ArrayListからタスクを1件ずつ取得
+ for (Task task : tasks) {
+ String status;
+ // TRUE/FALSEを表示用文字へ変換
+ if (task.isCompleted()) {
+ status = "[x] 完了 ";
+ } else {
+ status = "[ ] 未完了";
+ }
+ String priorityText = "";
+
+ //優先度変換
+ switch (task.getPriority()) {
+
+ case 1:
+ priorityText = "低 ";
+ break;
+
+ case 2:
+ priorityText = "中 ";
+ break;
+
+ case 3:
+ priorityText = "高 ";
+ break;
+
+ }
+
+ if (!task.isCompleted()) {
+
+ switch (task.getPriority()) {
+
+ case 1:
+ priorityText = Blue + priorityText + Reset;
+ break;
+
+ case 2:
+ priorityText = Yellow + priorityText + Reset;
+ break;
+
+ case 3:
+ priorityText = Red + priorityText + Reset;
+ break;
+ }
+ }
+
+ String gray =
+ padRight(String.valueOf(task.getId()), 3)
+ + "| "
+ + padRight(status, 10)
+ + "| "
+ + priorityText
+ + "| "
+ + padRight(task.getDeadline(), 11)
+ + "| "
+ + task.getTaskName();
+
+ if (task.isCompleted()) {
+
+ System.out.println(
+ Gray + gray + Reset);
+
+ } else {
+
+ System.out.println(gray);
+
+ }
+ }
+ }
+ //タスク追加
+ //入力内容からタスクを作成
+ public void addTask(Scanner sc) {
+ //行間調整用
+ System.out.println();
+ // タスク名入力
+ System.out.print("タスク名を入力:");
+ String taskName = sc.nextLine();
+
+ //期限入力
+ System.out.print(
+ "期限を入力(例:2026/09/20) [未入力で今日]:");
+
+ String deadline =
+ sc.nextLine();
+
+ //未入力なら今日の日付
+ if (deadline.isEmpty()) {
+ deadline = LocalDate.now().toString().replace("-", "/");
+
+ } else {
+ try {
+ //入力値を日付へ変換
+ LocalDate inputDate = LocalDate.parse(deadline.replace("/", "-"));
+
+ //過去日付なら処理中断
+ if (inputDate.isBefore(LocalDate.now())) {
+ System.out.println("過去の日付は入力できません。");
+
+ pause(sc);
+ return;
+ }
+
+ //保存形式をYYYY/MM/DDに統一
+ deadline =inputDate.toString().replace("-", "/");
+
+ } catch (Exception e) {
+ System.out.println("正しい日付を入力してください。(YYYY/MM/DD) 例:2026/01/01");
+
+ pause(sc);
+ return;
+ }
+ }
+
+ //優先度入力
+ System.out.print( "優先度(1:低 2:中 3:高) [デフォルト:2]:");
+
+ String input = sc.nextLine();
+
+ //未入力なら中
+ int priority = 2;
+ if (!input.isEmpty()) {
+
+ priority = Integer.parseInt(input);
+
+ //1~3以外なら中断
+ if (priority < 1 || priority > 3) {
+ return;
+ }
+ }
+
+ //新規ID
+ int id = 1;
+ if (!tasks.isEmpty()) {
+ id = tasks.get(tasks.size() - 1).getId() + 1;
+ }
+
+ //タスク生成
+ Task task = new Task(id, taskName, false, deadline, priority);
+
+ //一覧へ追加
+ tasks.add(task);
+
+ //CSV保存
+ saveTasks();
+
+ }
+
+ //完了・未完了切替
+ public void changeStatus(Scanner sc) {
+ //行間調整
+ System.out.println();
+ System.out.print("状態を変更するタスクIDを入力:");
+
+ int targetId = Integer.parseInt(sc.nextLine());
+
+ boolean found = false;
+ for (Task task : tasks) {
+ if (task.getId() == targetId) {
+
+ //true・false変換
+
+ task.setCompleted(!task.isCompleted());
+ found = true;
+
+ break;
+
+ }
+
+ }
+
+ if (found) {
+ saveTasks();
+ System.out.println("状態を切り替えました。");
+
+ } else {
+ System.out.println(
+ "そのIDのタスクはみつかりませんでした。");
+
+ }
+
+ pause(sc);
+
+ }
+
+ //タスク削除
+ //指定IDのタスクを削除する
+ public void deleteTask(Scanner sc) {
+ //行間調整
+ System.out.println();
+ System.out.print("削除するタスクIDを入力:");
+
+ int targetId = Integer.parseInt(sc.nextLine());
+
+ boolean found = false;
+
+ for (int i = 0; i < tasks.size(); i++) {
+ if (tasks.get(i).getId() == targetId) {
+ tasks.remove(i);
+ found = true;
+
+ break;
+ }
+ }
+
+ if (found) {
+ saveTasks();
+ System.out.println("タスクを削除しました。");
+
+ } else {
+ System.out.println("そのIDのタスクは見つかりませんでした。");
+
+ }
+
+ pause(sc);
+
+ }
+ //タスク名種別判定
+ //タスク名の先頭文字からソート用に番号を返す
+ //英語→1、ひらがな→2、カタカナ→3、数字→4
+ private int getTaskNameCategory(String taskName) {
+
+ if (taskName.isEmpty()) {
+ return 5;
+ }
+
+ char c = taskName.charAt(0);
+
+ //英字
+ if ((c >= 'A' && c <= 'Z')
+ || (c >= 'a' && c <= 'z')) {
+ return 1;
+ }
+
+ //ひらがな
+ if (c >= 'あ' && c <= 'ん') {
+ return 2;
+ }
+
+ //カタカナ
+ if (c >= 'ア' && c <= 'ン') {
+ return 3;
+ }
+
+ //数字
+ if (c >= '0' && c <= '9') {
+ return 4;
+
+ }
+
+ return 5;
+
+ }
+
+ //ソート
+ //指定項目を昇順または降順で並び替える
+ public void sortTasks(Scanner sc) {
+
+ System.out.println("[1] ID");
+ System.out.println("[2] 状態");
+ System.out.println("[3] 優先度");
+ System.out.println("[4] 期限");
+ System.out.println("[5] タスク名");
+
+ System.out.print("どの項目をソートしますか > ");
+
+ int type;
+ try {
+ type = Integer.parseInt(sc.nextLine());
+
+ } catch (NumberFormatException e) {
+ Main.inputError(sc);
+
+ return;
+ }
+
+ //入力チェック
+ //1~5以外の場合はメニューへ戻る
+ if (type < 1 || type > 5) {
+ Main.inputError(sc);
+
+ return;
+ }
+ //行間調整
+ System.out.println();
+ System.out.println("[1] 昇順");
+ System.out.println("[2] 降順");
+
+ System.out.print("並び順を選択してください > ");
+
+ int order;
+ try {
+ order = Integer.parseInt(sc.nextLine());
+
+ } catch (NumberFormatException e) {
+ Main.inputError(sc);
+
+ return;
+ }
+
+ //入力チェック
+ //1または2以外の場合はメニューへ戻る
+ if (order < 1 || order > 2) {
+ Main.inputError(sc);
+
+ return;
+ }
+
+ //true=昇順 false=降順
+ boolean ascending = order == 1;
+
+ switch (type) {
+
+ //IDソート
+ case 1:
+ if (ascending) {
+ tasks.sort(Comparator.comparingInt(Task::getId));
+
+ } else {
+ tasks.sort(Comparator.comparingInt(Task::getId).reversed());
+ }
+
+ break;
+
+ //状態ソート
+ case 2:
+ if (ascending) {
+ tasks.sort(Comparator.comparing(Task::isCompleted));
+
+ } else {
+ tasks.sort(Comparator.comparing(Task::isCompleted).reversed());
+ }
+
+ break;
+
+ //優先度ソート
+ case 3:
+ if (ascending) {
+ tasks.sort(Comparator.comparingInt(Task::getPriority));
+
+ } else {
+ tasks.sort(Comparator.comparingInt(Task::getPriority).reversed());
+
+ }
+
+ break;
+
+ //期限ソート
+ case 4:
+ if (ascending) {
+ tasks.sort(Comparator.comparing(Task::getDeadline));
+
+ } else {
+ tasks.sort(Comparator.comparing(Task::getDeadline).reversed());
+
+ }
+
+ break;
+
+ //タスク名ソート
+ case 5:
+ if (ascending) {
+ tasks.sort((task1, task2) -> {
+ int category1 =getTaskNameCategory(task1.getTaskName());
+ int category2 =getTaskNameCategory(task2.getTaskName());
+
+ //文字種別比較
+ if (category1 != category2) {
+
+ return category1 - category2;
+
+ }
+
+ //同じ文字種別なら名前比較
+ return task1.getTaskName().compareTo(task2.getTaskName());
+
+ });
+
+ } else {
+ tasks.sort((task1, task2) -> {
+
+ int category1 = getTaskNameCategory(task1.getTaskName());
+
+ int category2 = getTaskNameCategory(task2.getTaskName());
+
+ //文字種別比較
+ if (category1 != category2) {
+
+ return category2 - category1;
+
+ }
+
+ //同じ文字種別なら逆順比較
+ return task2.getTaskName().compareTo(task1.getTaskName());
+
+ });
+ }
+ break;
+ }
+
+ pause(sc);
+
+ }
+ //指定文字数まで空白を追加
+ //一覧表示の列を揃えるために利用
+ public String padRight(
+ String text,
+ int length) {
+
+ while (text.length() < length) {
+ text += " ";
+ }
+ return text;
+
+ }
+
+ //Enter待機
+ public void pause(Scanner sc) {
+ System.out.println("Enterキーを押してください。");
+
+ sc.nextLine();
+
+ }
+
+}
\ No newline at end of file
diff --git a/タスク管理システム実行例_石原/TaskManager.exe b/タスク管理システム実行例_石原/TaskManager.exe
new file mode 100644
index 0000000000000000000000000000000000000000..9782d56c64750d88a62108a919d6199599b755ab
GIT binary patch
literal 9216
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
literal 0
HcmV?d00001
diff --git a/タスク管理システム実行例_石原/tasks.csv b/タスク管理システム実行例_石原/tasks.csv
new file mode 100644
index 0000000..a7a1d67
--- /dev/null
+++ b/タスク管理システム実行例_石原/tasks.csv
@@ -0,0 +1,13 @@
+6,test,false,2026/10/23,2
+7,test,true,2026/10/23,2
+8,test2,false,2026/12/12,1
+9,test3,false,2026/10/23,2
+10,test,false,2026-12-12,2
+11,1,false,2026/12/12,1
+12,test,false,2026/12/12,2
+13,test,false,2026/10/23,3
+14,1,false,2026/10/23,2
+14,test,false,2026/10/23,2
+15,2,false,2026/10/23,2
+16,ぱぴこ,false,2026/10/23,2
+17,パピコ,false,2026/10/23,2