java通过日历预约并设置预约人数代码实现
时间: 2023-09-06 20:08:20 浏览: 58
以下是Java日历预约并设置预约人数的示例代码:
```java
import java.util.*;
public class CalendarBooking {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Calendar calendar = Calendar.getInstance();
int year, month, day, hour, minute, duration, maxAttendees;
System.out.print("请输入预约的年份:");
year = scanner.nextInt();
System.out.print("请输入预约的月份:");
month = scanner.nextInt() - 1; // Calendar.MONTH的范围是0~11
System.out.print("请输入预约的日期:");
day = scanner.nextInt();
System.out.print("请输入预约的小时:");
hour = scanner.nextInt();
System.out.print("请输入预约的分钟:");
minute = scanner.nextInt();
System.out.print("请输入预约的时长(分钟):");
duration = scanner.nextInt();
System.out.print("请输入最大的参与人数:");
maxAttendees = scanner.nextInt();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
System.out.println("开始时间:" + calendar.getTime());
// 创建事件
Event event = new Event(calendar, duration, maxAttendees);
// 预约
boolean success = event.book();
if (success) {
System.out.println("预约成功!");
} else {
System.out.println("预约失败!");
}
}
}
class Event {
private final Calendar startTime;
private final int duration; // 单位:分钟
private final int maxAttendees;
private final Set<String> attendees = new HashSet<>(); // 已经参加的人员
public Event(Calendar startTime, int duration, int maxAttendees) {
this.startTime = startTime;
this.duration = duration;
this.maxAttendees = maxAttendees;
}
// 预约
public boolean book() {
// 先检查是否能够参加
if (attendees.size() < maxAttendees) {
long startMillis = startTime.getTimeInMillis();
long endMillis = startMillis + duration * 60 * 1000;
// 检查时间是否冲突
for (String attendee : attendees) {
Set<Event> events = Attendee.getEvents(attendee);
for (Event event : events) {
long eventStartMillis = event.startTime.getTimeInMillis();
long eventEndMillis = eventStartMillis + event.duration * 60 * 1000;
if (startMillis < eventEndMillis && endMillis > eventStartMillis) {
return false; // 时间冲突
}
}
}
attendees.add("预约人"); // 预约人默认参加
return true;
} else {
// 人数已满
return false;
}
}
}
class Attendee {
// 用来存储某人参加了哪些事件
private static final Map<String, Set<Event>> ATTENDEE_EVENTS_MAP = new HashMap<>();
// 获取某人参加的所有事件
public static Set<Event> getEvents(String attendee) {
return ATTENDEE_EVENTS_MAP.getOrDefault(attendee, new HashSet<>());
}
}
```
在这段代码中,我们先创建了一个 `Calendar` 实例来表示预约的开始时间,然后输入预约的时长和最大参与人数。接下来,我们使用这些信息来创建一个 `Event` 实例,并调用 `book` 方法进行预约。如果预约成功,就会添加预约人的名字到参与名单里,否则返回错误信息。
注意,这段代码只是一个简单的示例,没有进行实际的持久化和数据校验。在实际应用中,需要根据具体需求进行设计和改进。