Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 267c689b02 | |||
| 8371df0088 | |||
| 1a87cca5b7 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -24,3 +24,4 @@
|
|||||||
hs_err_pid*
|
hs_err_pid*
|
||||||
replay_pid*
|
replay_pid*
|
||||||
|
|
||||||
|
/build/
|
||||||
|
|||||||
65
src/main/java/BaseTicket.java
Normal file
65
src/main/java/BaseTicket.java
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
public class BaseTicket {
|
||||||
|
|
||||||
|
// カプセル化
|
||||||
|
private String ticketId;
|
||||||
|
private String eventName;
|
||||||
|
private String eventData;
|
||||||
|
|
||||||
|
// 初期化
|
||||||
|
public BaseTicket(String ticketId, String eventName, String eventData) {
|
||||||
|
this.ticketId = ticketId;
|
||||||
|
this.eventName = eventName;
|
||||||
|
|
||||||
|
this.eventData = eventData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEventName() {
|
||||||
|
return eventName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEventName(String eventName) {
|
||||||
|
this.eventName = eventName;
|
||||||
|
// Nullチェックと空白チェック
|
||||||
|
if (eventName == null || eventName.strip().isEmpty()) {
|
||||||
|
System.out.println("イベント名が空のため設定できませんでした");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTicketId() {
|
||||||
|
return ticketId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTicketId(String ticketId) {
|
||||||
|
this.ticketId = ticketId;
|
||||||
|
if (ticketId == null || ticketId.strip().isEmpty()) {
|
||||||
|
System.out.println("チケットIDが空のため設定できませんでした");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEventData() {
|
||||||
|
return eventData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEventData(String eventData) {
|
||||||
|
this.eventData = eventData;
|
||||||
|
if (eventData == null || eventData.strip().isEmpty()) {
|
||||||
|
System.out.println("開催日が空のため設定できませんでした");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showBaseInfo() {
|
||||||
|
System.out.println("チケットID:" + ticketId);
|
||||||
|
System.out.println("イベント名:" + eventName);
|
||||||
|
System.out.println("開催日:" + eventData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showInfo() {
|
||||||
|
showBaseInfo();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
173
src/main/java/Main.java
Normal file
173
src/main/java/Main.java
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// インスタンス化
|
||||||
|
TicketManager manager = new TicketManager();
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
|
||||||
|
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("検索するイベント名を入力してください");
|
||||||
|
scanner.nextLine();
|
||||||
|
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("予約内容の変更");
|
||||||
|
scanner.nextLine();
|
||||||
|
System.out.println("変更したいチケットIDを入力してください。");
|
||||||
|
String targetId = scanner.nextLine();
|
||||||
|
|
||||||
|
// IDでチケット検索
|
||||||
|
BaseTicket targetTicket = manager.findTicketById(targetId);
|
||||||
|
|
||||||
|
if (targetTicket == null) {
|
||||||
|
System.out.println("指定されたチケットが見つかりませんでした。");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 予約内容表示
|
||||||
|
System.out.println("現在の予約内容");
|
||||||
|
targetTicket.showInfo();
|
||||||
|
|
||||||
|
String[] changeDates;
|
||||||
|
if (targetTicket.getTicketId().toUpperCase().startsWith("R")) {
|
||||||
|
changeDates = new String[] { "2026-09-12", "2026-09-13", "2026-09-19", "2026-09-20", "2026-09-21" };
|
||||||
|
} else {
|
||||||
|
changeDates = new String[] { "2026-08-14", "2026-08-15", "2026-08-16" };
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("新しい開催日を選択してください。");
|
||||||
|
for (int i = 0; i < changeDates.length; i++) {
|
||||||
|
System.out.println((i + 1) + ":" + changeDates[i]);
|
||||||
|
}
|
||||||
|
System.out.print("番号を選択してください: ");
|
||||||
|
int changeChoice = scanner.nextInt();
|
||||||
|
scanner.nextLine();
|
||||||
|
|
||||||
|
if (changeChoice < 1 || changeChoice > changeDates.length) {
|
||||||
|
System.out.println("無効な番号です。変更を中止します。");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// カプセル化されたセッターを使って日付を上書き
|
||||||
|
String newDate = changeDates[changeChoice - 1];
|
||||||
|
targetTicket.setEventData(newDate);
|
||||||
|
|
||||||
|
System.out.println("\n予約内容が正常に変更されました!");
|
||||||
|
System.out.println("変更後の内容:");
|
||||||
|
targetTicket.showInfo();
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
System.out.println("予約のキャンセル");
|
||||||
|
scanner.nextLine();
|
||||||
|
|
||||||
|
System.out.println("キャンセルしたいチケットのIDを入力してください。");
|
||||||
|
String cancelId = scanner.nextLine();
|
||||||
|
|
||||||
|
boolean isDeleted = manager.removeTicketById(cancelId);
|
||||||
|
if (isDeleted) {
|
||||||
|
System.out.println("チケットID:" + cancelId + "の予約がキャンセルされました。");
|
||||||
|
} else {
|
||||||
|
System.out.println("指定されたチケットIDが見つかりませんでした。");
|
||||||
|
}
|
||||||
|
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() + "件");
|
||||||
|
}
|
||||||
|
}
|
||||||
33
src/main/java/Ticket.java
Normal file
33
src/main/java/Ticket.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
// 継承
|
||||||
|
public class Ticket extends BaseTicket {
|
||||||
|
private int price;
|
||||||
|
// Ticketクラスで共有する変数
|
||||||
|
private static int reservedCount = 0;
|
||||||
|
|
||||||
|
public static int getReservedCount() {
|
||||||
|
return reservedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Ticket(String ticketId, String eventName, String eventData, int price) {
|
||||||
|
|
||||||
|
super(ticketId, eventName, eventData);
|
||||||
|
this.price = price;
|
||||||
|
|
||||||
|
// チケットが追加されるたびに予約件数をカウントアップ
|
||||||
|
reservedCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPrice() {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
// BaseTicketのshowInfoに上書き
|
||||||
|
@Override
|
||||||
|
public void showInfo() {
|
||||||
|
showBaseInfo();
|
||||||
|
System.out.println("価格:" + price + "円");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
84
src/main/java/TicketManager.java
Normal file
84
src/main/java/TicketManager.java
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TicketManager {
|
||||||
|
// 可変長の配列作成
|
||||||
|
private List<BaseTicket> 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;
|
||||||
|
for (BaseTicket ticket : tickets) {
|
||||||
|
if (ticket.getEventData().equals(targetDate)) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// チケットIDから検索
|
||||||
|
public BaseTicket findTicketById(String id) {
|
||||||
|
for (BaseTicket ticket : tickets) {
|
||||||
|
if (ticket.getTicketId().equalsIgnoreCase(id)) {
|
||||||
|
return ticket;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean removeTicketById(String id) {
|
||||||
|
for (int i = 0; i < tickets.size(); i++) {
|
||||||
|
if (tickets.get(i).getTicketId().equalsIgnoreCase(id)) {
|
||||||
|
tickets.remove(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user