個人開発の成果物です

This commit is contained in:
2026-09-24 11:27:26 +09:00
parent 1a87cca5b7
commit 8371df0088
4 changed files with 149 additions and 26 deletions

View File

@@ -2,14 +2,15 @@
public class BaseTicket { public class BaseTicket {
// カプセル化 // カプセル化
private String eventName;
private String ticketId; private String ticketId;
private String eventName;
private String eventData; private String eventData;
// 初期化 // 初期化
public BaseTicket(String ticketId, String eventName, String eventData) { public BaseTicket(String ticketId, String eventName, String eventData) {
this.eventName = eventName;
this.ticketId = ticketId; this.ticketId = ticketId;
this.eventName = eventName;
this.eventData = eventData; this.eventData = eventData;
} }
@@ -57,6 +58,7 @@ public class BaseTicket {
} }
public void showInfo() { public void showInfo() {
showBaseInfo();
} }

View File

@@ -1,33 +1,118 @@
import java.util.Scanner;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
// インスタンス化 // インスタンス化
TicketManager manager = new TicketManager(); TicketManager manager = new TicketManager();
manager.addTicket(new Ticket("001", "ROCK IN JAPAN 2026", "2026-09-12", 16000)); manager.addTicket(new Ticket("R001", "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("R002", "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("R003", "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("R004", "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("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("=== 日付ごとの予約仕分け結果 ==="); Scanner scanner = new Scanner(System.in);
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") + "件");
System.out.println(); while (true) {
System.out.println("現在の予約件数合計:" + Ticket.getReservedCount() + "件"); System.out.println("システムを開始します");
System.out.println(); System.out.println("1:予約検索 2:新規予約 3:予約変更 4:予約キャンセル 0:終了");
System.out.println("番号を選択してください");
// テスト int menu = scanner.nextInt();
System.out.println("テスト");
Ticket sample = new Ticket("T999", "テストイベント", "2026-09-22", 16000); switch (menu) {
sample.setEventName(""); 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() + "件");
} }
} }

View File

@@ -10,9 +10,10 @@ public class Ticket extends BaseTicket {
} }
public Ticket(String ticketId, String eventName, String eventData, int price) { public Ticket(String ticketId, String eventName, String eventData, int price) {
// BaseTicketのコンストラクタを動かすため
super(ticketId, eventName, eventData); super(ticketId, eventName, eventData);
this.price = price; this.price = price;
// チケットが追加されるたびに予約件数をカウントアップ // チケットが追加されるたびに予約件数をカウントアップ
reservedCount++; reservedCount++;
} }

View File

@@ -5,17 +5,19 @@ public class TicketManager {
// 可変長の配列作成 // 可変長の配列作成
private List<BaseTicket> tickets = new ArrayList<>(); private List<BaseTicket> tickets = new ArrayList<>();
// ポリモーフィズム // リストにチケットを追加
public void addTicket(BaseTicket ticket) { public void addTicket(BaseTicket ticket) {
tickets.add(ticket); tickets.add(ticket);
} }
// ポリモーフィズム
public void showAllTockets() { public void showAllTockets() {
// for-each文 // for-each文
for (BaseTicket ticket : tickets) { for (BaseTicket ticket : tickets) {
ticket.showInfo(); ticket.showInfo();
} }
} }
// 日付ごとの仕分け // 日付ごとの仕分け
public int GetCountByDate(String targetDate) { public int GetCountByDate(String targetDate) {
int count = 0; int count = 0;
@@ -26,4 +28,37 @@ public class TicketManager {
} }
return count; 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;
}
} }