日程安排管理Java

内容

  随着生活节奏的加快,人们每天都面临的事务比较多样化,有时候可能会忘记一些重要的日程安排,例如会议,采访等。为了更好地管理和组织日常安排,要求编写一个日程安排管理程序,具体要求如下。

  用户可以多次创建日程,但是最多只能创建20个,创建日程时包括日程的标题、日期和时间。要求日程的时间不能在当前时间之前。

  创建完成后,程序按照日程时间由近及远,展示用户的所有日程信息,包括标题、日期、时间、目前距离这个日程还有多久(格式:x天x小时x分钟),以及日程的创建时间。

功能如下:

日程安排管理Java_第1张图片

源代码如下:

package schedule;

import java.time.LocalDateTime;  
import java.time.format.DateTimeFormatter;  
import java.time.Duration;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Collections;  
import java.util.Comparator;  
import java.util.Scanner; 

/**
 * 日程类,表示一个日程项
 */
class Schedule {  
    private int id;                  // 日程唯一标识符
    private String title;           // 日程标题
    private LocalDateTime dateTime;  // 日程日期时间
    private LocalDateTime createTime; // 日程创建时间

    /**
     * 构造函数
     * @param id 日程ID
     * @param title 日程标题
     * @param dateTime 日程时间
     */
    public Schedule(int id, String title, LocalDateTime dateTime) {  
        this.id = id;
        this.title = title;  
        this.dateTime = dateTime;  
        this.createTime = LocalDateTime.now();  // 创建时间设置为当前时间
    }  

    // 以下是getter和setter方法
    public int getId() { return id; }
    public String getTitle() { return title; }  
    public LocalDateTime getDateTime() { return dateTime; }  
    public LocalDateTime getCreateTime() { return createTime; } 
    
    public void setTitle(String title) { this.title = title; }  
    public void setDateTime(LocalDateTime dateTime) { this.dateTime = dateTime; }
}  

/**
 * 日程管理主类
 */
public class ScheduleManager {  
    private static int nextId = 1;          // 下一个可用的日程ID
    private static final int MAX_SCHEDULES = 20;  // 最大日程数量限制
    private static List schedules = new ArrayList<>();  // 存储所有日程的列表
    private static Scanner scanner = new Scanner(System.in);     // 用户输入扫描器

    /**
     * 主程序入口
     * @param args 命令行参数
     */
    public static void main(String[] args) {  
        boolean running = true;  // 控制程序是否继续运行的标志
        
        // 主循环
        while (running) {  
            // 打印主菜单
            System.out.println("--------日程安排管理程序--------");  
            System.out.println("1. 创建日程安排  2. 查看日程安排  3.编辑日程安排  4.删除日程安排");  
            System.out.print("请输入操作编号:");  
            int choice = scanner.nextInt();  
            
            // 根据用户选择执行不同操作
            switch (choice) {  
                case 1:  
                    createSchedule();  // 创建日程
                    break;  
                case 2:  
                    viewSchedules();   // 查看日程
                    break;
                case 3:  
                    editSchedule();    // 编辑日程
                    break;
                case 4:  
                    deleteSchedule();   // 删除日程
                    break;
                default:  
                    System.out.println("无效操作编号,请重新输入!");  
            }  
            
            // 询问用户是否继续
            System.out.print("您是否继续操作?(y/n): ");  
            String cont = scanner.next();  
            if (!cont.equalsIgnoreCase("y")) {  
                System.out.println("您已退出日程安排管理程序。");  
                running = false;  // 结束程序
            }  
        }  
        scanner.close();  // 关闭扫描器
    }  

    /**
     * 创建新日程
     */
    private static void createSchedule() {  
        // 检查是否已达最大日程数
        if (schedules.size() >= MAX_SCHEDULES) {  
            System.out.println("已达最大日程数(20个),不能再添加。");
            return;  
        }  

        // 获取用户输入的标题
        System.out.print("请输入标题:");  
        String title = scanner.next();  

        // 获取用户输入的日期和时间
        System.out.print("请输入日期(格式:yyyy-MM-dd):");  
        String dateStr = scanner.next();  
        System.out.print("请输入时间(格式:HH:mm):");  
        String timeStr = scanner.next();  

        // 解析日期时间
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");  
        LocalDateTime dateTime;  
        try {  
            dateTime = LocalDateTime.parse(dateStr + " " + timeStr, dtf);  
        } catch (Exception e) {  
            System.out.println("日期或时间格式错误,请重新操作!");  
            return;  
        }  

        // 检查时间是否合法(不能早于当前时间)
        if (dateTime.isBefore(LocalDateTime.now())) {  
            System.out.println("日程时间不能在当前时间之前,请重新操作!");  
            return;  
        }  

        // 创建并添加新日程
        Schedule schedule = new Schedule(nextId++, title, dateTime);  
        schedules.add(schedule);  
        System.out.println("日程已添加!");  
    }  

    /**
     * 查看所有日程
     */
    private static void viewSchedules() {  
        // 检查是否有日程
        if (schedules.isEmpty()) {  
            System.out.println("当前没有任何日程,查看结果为空,请先添加日程安排。");  
            return;  
        }  

        // 按时间排序日程
        Collections.sort(schedules, Comparator.comparing(Schedule::getDateTime));  
        
        // 定义日期时间格式化器
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");  
        DateTimeFormatter createFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");  

        // 打印表头
        System.out.println("当前所有日程安排如下:");
        System.out.printf("%-4s%-20s%-20s%-20s%-25s\n",  
            "编号","标题", " 日期        时间", "距离现在", "创建时间");  

        // 遍历并打印每个日程
        for (Schedule s : schedules) {  
            // 计算距离当前时间的时间差
            Duration duration = Duration.between(LocalDateTime.now(), s.getDateTime());  
            long seconds = duration.getSeconds();  
            
            String diffStr = null;  
            if (seconds >= 0) {  
                // 将秒转换为天、小时、分钟
                long days = seconds / (24 * 3600);  
                long hrs = (seconds % (24 * 3600)) / 3600;  
                long mins = (seconds % 3600) / 60;  
                diffStr = days + "天" + hrs + "小时" + mins + "分钟";  
            } 

            // 格式化输出日程信息
            System.out.printf("%-6s%-20s%-20s%-20s%-25s\n",  
                s.getId(),
                s.getTitle(),  
                dtf.format(s.getDateTime()), 
                diffStr,
                createFormatter.format(s.getCreateTime()) 
            );
        }
    }

    /**
     * 删除日程
     */
    private static void deleteSchedule() {
        // 检查是否有日程
        if (schedules.isEmpty()) {
            System.out.println("当前没有日程可以删除,请先添加日程安排。");
            return;
        }
        
        // 获取要删除的日程ID
        System.out.print("请输入要删除的日程编号:");
        int id = scanner.nextInt();
        boolean found = false;
        
        // 遍历查找并删除
        for (int i = 0; i < schedules.size(); i++) {
            if (schedules.get(i).getId() == id) {
                schedules.remove(i);
                System.out.println("编号 "+id+" 日程安排已删除。");
                found = true;
                break;
            }
        }
        
        // 如果未找到
        if (!found) {
            System.out.println("未找到对应编号的日程安排,无法删除,请先添加日程安排。");
        }
    }

    /**
     * 编辑日程
     */
    private static void editSchedule() {
        // 检查是否有日程
        if (schedules.isEmpty()) {
            System.out.println("当前没有日程可以编辑,请先添加日程安排。");
            return;
        }
        
        // 获取要编辑的日程ID
        System.out.print("请输入要编辑的日程编号:");
        int id = scanner.nextInt();
        boolean found = false;
        
        // 遍历查找并编辑
        for (Schedule s : schedules) {
            if (s.getId() == id) {
                // 获取新标题
                System.out.print("请输入新标题:");
                String newTitle = scanner.next();
                
                // 获取新日期时间
                System.out.print("请输入新日期(格式:yyyy-MM-dd):");
                String dateStr = scanner.next();
                System.out.print("请输入新时间(格式:HH:mm):");
                String timeStr = scanner.next();

                // 解析新日期时间
                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
                LocalDateTime newDateTime;
                try {
                    newDateTime = LocalDateTime.parse(dateStr + " " + timeStr, dtf);
                } catch (Exception e) {
                    System.out.println("日期或时间格式错误,编辑失败。");
                    return;
                }

                // 检查新时间是否合法
                if (newDateTime.isBefore(LocalDateTime.now())) {
                    System.out.println("新时间不能在当前时间之前。");
                    return;
                }

                // 更新日程信息
                s.setTitle(newTitle);
                s.setDateTime(newDateTime);
                System.out.println("日程已更新,编辑完成。");
                found = true;
                break;
            }
        }
        
        // 如果未找到
        if (!found) {
            System.out.println("未找到对应编号的日程安排,无法编辑,请先添加日程安排。");
        }
    }
}




/*else {  
// 负数:已过期  使用Math.abs()将负数变为正数,方便计算出“天”、“小时”、“分钟”。
long absSeconds = Math.abs(seconds);  //使用Math.abs()避免负数影响。
long days = absSeconds / (24 * 3600);  
long hrs = (absSeconds % (24 * 3600)) / 3600;  
long mins = (absSeconds % 3600) / 60;  
diffStr = "已过期(" + days + "天" + hrs + "小时" + mins + "分钟" + ")";  
}  */

你可能感兴趣的:(java,eclipse)