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