2301_77473818 2023-05-28 12:38 采纳率: 0%
浏览 185
已结题

具有每日记账功能的简易日历程序

java要求:编写具有图形用户界面(GUI)的日历组件显示日期和时间并进行适当的功能扩充。主要功能:
1、显示当月日历,当前日期、当前时间;2、可查询任意月以及任意年的日历;3、正常运行和退出程序。
4、每日具有记账功能,需要至少包含1)记账id;2)记账类型;2)支出费用;3)关键字(关键字写为一行,关键字数量不限,使用分号分割<需查阅使用>)
5、能够通过关键字查询某一种类型的记账记录。6、对当月记账类型的汇总;对特定关键字的记账汇总。
除Swing/AWT以外,可能是用到的类:日期类;String/StringBuffer;容器类;Math类,IO相关类。(要自己写,不能抄袭)

  • 写回答

7条回答 默认 最新

  • 小小y979 2023-05-28 13:01
    关注

    引用部分chatgpt如下回答:
    以下是一份 Java GUI 日历组件的代码示例,实现了上述5个主要功能:

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import javax.swing.BorderFactory;
    import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
    import javax.swing.table.DefaultTableModel;
    
    public class CalendarGUI extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private JLabel labelMonth, labelYear, labelDate, labelTime, labelAccount, labelKey;
        private JButton btnPrev, btnNext, btnSearch;
        private JTable tableAccounts, tableSummary;
        private JTextField txtYear, txtMonth, txtKey;
        private JCheckBox chkIncome, chkExpense;
        private JPanel paneCalendar, paneAccount, paneSummary;
        private Calendar cal;
    
        public CalendarGUI() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setTitle("日历组件");
    
            // 设置日历面板
            createCalendarPane();
    
            // 设置记账面板
            createAccountPane();
    
            // 设置汇总面板
            createSummaryPane();
    
            setSize(800, 500);
            setLocationRelativeTo(null);
            setVisible(true);
        }
    
        // 创建日历面板
        private void createCalendarPane() {
            // 创建面板和布局
            paneCalendar = new JPanel();
            paneCalendar.setLayout(new BorderLayout());
    
            // 创建日历部分和按钮部分
            JPanel paneCalendarTop = new JPanel();
            paneCalendarTop.setLayout(new GridLayout(1, 7));
            JPanel paneCalendarBottom = new JPanel();
            paneCalendarBottom.setLayout(new FlowLayout());
    
            // 创建上一个月按钮
            btnPrev = new JButton("上一月");
            btnPrev.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    cal.add(Calendar.MONTH, -1);
                    updateCalendar();
                }
            });
    
            // 创建下一个月按钮
            btnNext = new JButton("下一月");
            btnNext.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    cal.add(Calendar.MONTH, 1);
                    updateCalendar();
                }
            });
    
            // 创建查询区域,包括输入框和查询按钮
            JPanel paneSearch = new JPanel(new FlowLayout());
            txtYear = new JTextField(4);
            txtMonth = new JTextField(2);
            paneSearch.add(new JLabel("查询年份: "));
            paneSearch.add(txtYear);
            paneSearch.add(new JLabel("查询月份(01-12): "));
            paneSearch.add(txtMonth);
            btnSearch = new JButton("查询");
            btnSearch.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        int year = Integer.parseInt(txtYear.getText());
                        int month = Integer.parseInt(txtMonth.getText()) - 1;
                        cal.set(year, month, 1);
                        updateCalendar();
                    } catch (NumberFormatException ex) {
                        JOptionPane.showMessageDialog(paneCalendar, "请输入正确的年份和月份。");
                    }
                }
            });
            paneSearch.add(btnSearch);
    
            // 添加日历面板顶部的组件
            labelMonth = new JLabel("", SwingConstants.CENTER);
            labelYear = new JLabel("", SwingConstants.CENTER);
            paneCalendarTop.add(labelMonth);
            paneCalendarTop.add(labelYear);
            paneCalendarTop.add(Box.createHorizontalGlue());
            paneCalendarTop.add(paneSearch);
            paneCalendarTop.add(Box.createHorizontalGlue());
            paneCalendarTop.add(btnPrev);
            paneCalendarTop.add(btnNext);
    
            // 创建日历部分的网格布局和表格模型
            DefaultTableModel modelCalendar = new DefaultTableModel() {
                public boolean isCellEditable(int rowIndex, int mColIndex) {
                    return false;
                }
            };
            JTable tableCalendar = new JTable(modelCalendar);
            String[] headers = { "日", "一", "二", "三", "四", "五", "六" };
            modelCalendar.setColumnIdentifiers(headers);
            tableCalendar.setRowHeight(35);
    
            // 添加日历部分的组件
            paneCalendar.add(paneCalendarTop, BorderLayout.NORTH);
            paneCalendar.add(new JScrollPane(tableCalendar), BorderLayout.CENTER);
            add(paneCalendar, BorderLayout.WEST);
    
            // 初始化 Calendar 和显示当前日期、时间
            cal = Calendar.getInstance();
    
    ```java
    
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月30日
  • 创建了问题 5月28日