From 8371df0088cb2bfbdabace701e4269a9f9efd725 Mon Sep 17 00:00:00 2001 From: t-eguchi <26-t-eguchi-tmn@it-college.co.jp> Date: Thu, 24 Sep 2026 11:27:26 +0900 Subject: [PATCH] =?UTF-8?q?=E5=80=8B=E4=BA=BA=E9=96=8B=E7=99=BA=E3=81=AE?= =?UTF-8?q?=E6=88=90=E6=9E=9C=E7=89=A9=E3=81=A7=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/BaseTicket.java | 6 +- src/main/java/Main.java | 129 +++++++++++++++++++++++++------ src/main/java/Ticket.java | 3 +- src/main/java/TicketManager.java | 37 ++++++++- 4 files changed, 149 insertions(+), 26 deletions(-) diff --git a/src/main/java/BaseTicket.java b/src/main/java/BaseTicket.java index 2fb37ed..b05ab26 100644 --- a/src/main/java/BaseTicket.java +++ b/src/main/java/BaseTicket.java @@ -2,14 +2,15 @@ public class BaseTicket { // カプセル化 - private String eventName; private String ticketId; + private String eventName; private String eventData; // 初期化 public BaseTicket(String ticketId, String eventName, String eventData) { - this.eventName = eventName; this.ticketId = ticketId; + this.eventName = eventName; + this.eventData = eventData; } @@ -57,6 +58,7 @@ public class BaseTicket { } public void showInfo() { + showBaseInfo(); } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 3b4734f..b7b5c1e 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,33 +1,118 @@ +import java.util.Scanner; public class Main { public static void main(String[] args) { // インスタンス化 TicketManager manager = new TicketManager(); - manager.addTicket(new Ticket("001", "ROCK IN JAPAN 2026", "2026-09-12", 16000)); - manager.addTicket(new Ticket("002", "ROCK IN JAPAN 2026", "2026-09-13", 16000)); - manager.addTicket(new Ticket("003", "ROCK IN JAPAN 2026", "2026-09-19", 16000)); - manager.addTicket(new Ticket("004", "ROCK IN JAPAN 2026", "2026-09-20", 16000)); - manager.addTicket(new Ticket("005", "ROCK IN JAPAN 2026", "2026-09-21", 16000)); + manager.addTicket(new Ticket("R001", "ROCK IN JAPAN 2026", "2026-09-12", 16000)); + manager.addTicket(new Ticket("R002", "ROCK IN JAPAN 2026", "2026-09-13", 16000)); + manager.addTicket(new Ticket("R003", "ROCK IN JAPAN 2026", "2026-09-19", 16000)); + manager.addTicket(new Ticket("R004", "ROCK IN JAPAN 2026", "2026-09-20", 16000)); + manager.addTicket(new Ticket("R005", "ROCK IN JAPAN 2026", "2026-09-21", 16000)); + manager.addTicket(new Ticket("S001", "SUMMER SONIC 2026", "2026-08-14", 21000)); + manager.addTicket(new Ticket("S002", "SUMMER SONIC 2026", "2026-08-15", 21000)); + manager.addTicket(new Ticket("S003", "SUMMER SONIC 2026", "2026-08-16", 21000)); - manager.showAllTockets(); - System.out.println(); - System.out.println("=== 日付ごとの予約仕分け結果 ==="); - System.out.println("2026-09-12 (1日目) の予約件数:" + manager.GetCountByDate("2026-09-12") + "件"); - System.out.println("2026-09-13 (2日目) の予約件数:" + manager.GetCountByDate("2026-09-13") + "件"); - System.out.println("2026-09-19 (3日目) の予約件数:" + manager.GetCountByDate("2026-09-19") + "件"); - System.out.println("2026-09-20 (4日目) の予約件数:" + manager.GetCountByDate("2026-09-20") + "件"); - System.out.println("2026-09-21 (5日目) の予約件数:" + manager.GetCountByDate("2026-09-21") + "件"); + Scanner scanner = new Scanner(System.in); - System.out.println(); - System.out.println("現在の予約件数合計:" + Ticket.getReservedCount() + "件"); - System.out.println(); - - - // テスト - System.out.println("テスト"); - Ticket sample = new Ticket("T999", "テストイベント", "2026-09-22", 16000); - sample.setEventName(""); + while (true) { + System.out.println("システムを開始します"); + System.out.println("1:予約検索 2:新規予約 3:予約変更 4:予約キャンセル 0:終了"); + System.out.println("番号を選択してください"); + + int menu = scanner.nextInt(); + + switch (menu) { + case 1: + System.out.println("予約検索メニュー"); + System.out.println("1:全検索 2:条件検索 それ以外:戻る"); + System.out.println("番号を入力してください"); + int serchMenu = scanner.nextInt(); + + if (serchMenu == 1) { + System.out.println("チケット一覧"); + manager.showAllTockets(); + } else if (serchMenu == 2) { + System.out.println("検索するイベント名を入力してください"); + String keyword = scanner.nextLine(); + manager.searchByEventName(keyword); + } else { + System.out.println("メニューに戻る"); + } + break; + case 2: + + System.out.println("イベントを選択してください:"); + System.out.println("1: ROCK IN JAPAN 2026"); + System.out.println("2: SUMMER SONIC 2026"); + System.out.println("番号を選択してください "); + int eventChoice = scanner.nextInt(); + + // 三項演算子 + String prefix = (eventChoice == 2) ? "S" : "R"; + String name = (eventChoice == 2) ? "SUMMER SONIC 2026" : "ROCK IN JAPAN 2026"; + + String[] dates; + int[] prices; + + if (eventChoice == 1) { + + dates = new String[] { "2026-09-12", "2026-09-13", "2026-09-19", "2026-09-20", "2026-09-21" }; + prices = new int[] { 16000, 16000, 16000, 16000, 16000 }; + } else { + + dates = new String[] { "2026-08-14", "2026-08-15", "2026-08-16" }; + prices = new int[] { 21000, 21000, 21000 }; + } + + System.out.println("\n開催日と価格を選択してください:"); + for (int i = 0; i < dates.length; i++) { + + System.out.println((i + 1) + ": " + dates[i] + " - (" + prices[i] + "円)"); + } + + System.out.println("番号を選択してください "); + int detailChoice = scanner.nextInt(); + + // 配列から選択された値を取り出す + String date = dates[detailChoice - 1]; + int price = prices[detailChoice - 1]; + + String nextId = prefix + String.format("%03d", manager.getCountByPrefix(prefix) + 1); + + Ticket newTicket = new Ticket(nextId, name, date, price); + manager.addTicket(newTicket); + + System.out.println("選択したイベント・日程で予約が正常に登録されました!"); + System.out.println("発行ID;" + nextId); + break; + case 3: + System.out.println("予約内容の変更"); + break; + case 4: + System.out.println("予約のキャンセル"); + break; + case 0: + System.out.println("チケット予約管理システムを終了します"); + scanner.close(); + return; + default: + System.out.println("無効な入力です。"); + break; + } + + } + // String[] dates = { "2026-09-12", "2026-09-13", "2026-09-19", "2026-09-20", "2026-09-21" }; + // System.out.println("=== 日付ごとの予約仕分け結果 ==="); + // + // for (int i = 0; i < dates.length; i++) { + // String targetDate = dates[i]; + // int count = manager.GetCountByDate(targetDate); + // System.out.println(targetDate + " (" + (i + 1) + "日目) の予約件数:" + count + "件"); + // + // } + // System.out.println("現在の予約件数合計:" + Ticket.getReservedCount() + "件"); } } \ No newline at end of file diff --git a/src/main/java/Ticket.java b/src/main/java/Ticket.java index c16d6fd..55ad726 100644 --- a/src/main/java/Ticket.java +++ b/src/main/java/Ticket.java @@ -10,9 +10,10 @@ public class Ticket extends BaseTicket { } public Ticket(String ticketId, String eventName, String eventData, int price) { - // BaseTicketのコンストラクタを動かすため + super(ticketId, eventName, eventData); this.price = price; + // チケットが追加されるたびに予約件数をカウントアップ reservedCount++; } diff --git a/src/main/java/TicketManager.java b/src/main/java/TicketManager.java index 27d0e50..f20448b 100644 --- a/src/main/java/TicketManager.java +++ b/src/main/java/TicketManager.java @@ -5,17 +5,19 @@ public class TicketManager { // 可変長の配列作成 private List tickets = new ArrayList<>(); - // ポリモーフィズム + // リストにチケットを追加 public void addTicket(BaseTicket ticket) { tickets.add(ticket); } + // ポリモーフィズム public void showAllTockets() { // for-each文 for (BaseTicket ticket : tickets) { ticket.showInfo(); } } + // 日付ごとの仕分け public int GetCountByDate(String targetDate) { int count = 0; @@ -26,4 +28,37 @@ public class TicketManager { } return count; } + + // イベント名で検索メソッド + public void searchByEventName(String keyword) { + boolean found = false; + for (BaseTicket ticket : tickets) { + // キーワードが含まれているかチェック + if (ticket.getEventName().toLowerCase().contains(keyword.toLowerCase())) { + ticket.showInfo(); + found = true; + } + } + if (!found) { + System.out.println("該当するイベントの予約は見つかりませんでした。"); + } + + } + + public int getReservedCount() { + + return tickets.size(); + } + + // 指定された接頭辞(R か S)で始まるチケットの数を数える + public int getCountByPrefix(String prefix) { + int count = 0; + for (BaseTicket ticket : tickets) { + // ticketId が null でないことを確認して前方一致チェック + if (ticket.getTicketId() != null && ticket.getTicketId().startsWith(prefix)) { + count++; + } + } + return count; + } }