升级版日记本要求实现以下功能:

  1. 支持多用户登录和注册,每个用户有自己的日记本。

  2. 支持对日记进行分类和标签。

  3. 支持对日记进行搜索和排序,可以按照时间、标题、分类、标签等进行排序。

  4. 支持导出日记为文本文件或者打印出来。

  5. 支持对已有日记进行修改和删除。

  6. 支持设置日记本的密码保护。

  7. 支持对日记的评论和回复。

  8. 支持对日记进行分享到社交网络。

实现思路:

  1. 使用Java Swing进行界面设计,使用MySQL数据库进行数据存储。

  2. 用户登录和注册使用JDBC连接数据库进行验证和保存数据。

  3. 日记的分类和标签使用JComboBox进行选择和编辑,使用JTextField进行输入和保存。

  4. 日记的搜索和排序使用JTable显示日记数据,使用JTextField进行搜索和JComboBox进行排序,使用JFileChooser进行导出和打印。

  5. 日记的修改和删除使用JOptionPane进行提示和确认,使用JTextField进行修改和JTable进行删除。

  6. 日记本的密码保护使用JPasswordField进行密码输入和验证。

  7. 日记的评论和回复使用JTextArea进行输入和显示,使用JButton进行保存和回复。

  8. 日记的分享使用JOptionPane进行提示和选择,使用JFileChooser进行选择和保存。

代码实现:

  1. 用户登录和注册
//登录界面
JLabel nameLabel = new JLabel("用户名:");
JTextField nameField = new JTextField(10);
JLabel passLabel = new JLabel("密码:");
JPasswordField passField = new JPasswordField(10);
JButton loginButton = new JButton("登录");
JButton registerButton = new JButton("注册");

//登录按钮
loginButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String name = nameField.getText();
        String pass = String.valueOf(passField.getPassword());
        if (name.equals("") || pass.equals("")) {
            JOptionPane.showMessageDialog(null, "用户名或密码不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
        } else {
            boolean flag = checkUser(name, pass);
            if (flag) {
                JOptionPane.showMessageDialog(null, "登录成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
                //打开日记界面并关闭登录界面
                new DiaryFrame(name).setVisible(true);
                LoginFrame.this.dispose();
            } else {
                JOptionPane.showMessageDialog(null, "用户名或密码错误!", "提示", JOptionPane.WARNING_MESSAGE);
            }
        }
    }
});

//注册按钮
registerButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String name = nameField.getText();
        String pass = String.valueOf(passField.getPassword());
        if (name.equals("") || pass.equals("")) {
            JOptionPane.showMessageDialog(null, "用户名或密码不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
        } else {
            boolean flag = addUser(name, pass);
            if (flag) {
                JOptionPane.showMessageDialog(null, "注册成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(null, "用户名已存在!", "提示", JOptionPane.WARNING_MESSAGE);
            }
        }
    }
});

//登录验证
public boolean checkUser(String name, String pass) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        String sql = "select * from user where name=? and pass=?";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        pstmt.setString(2, pass);
        ResultSet rs = pstmt.executeQuery();
        if (rs.next()) {
            flag = true;
        }
        rs.close();
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return flag;
}

//注册保存
public boolean addUser(String name, String pass) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        String sql = "insert into user(name, pass) values(?,?)";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        pstmt.setString(2, pass);
        int count = pstmt.executeUpdate();
        if (count > 0) {
            flag = true;
        }
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return flag;
}
  1. 日记的分类和标签
//分类下拉框
String[] types = {"旅行", "工作", "生活", "学习"};
JComboBox<String> typeBox = new JComboBox<>(types);
typeBox.setSelectedIndex(0);
typeBox.setEditable(true);
typeBox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String type = (String) typeBox.getSelectedItem();
        if (!Arrays.asList(types).contains(type)) {
            typeBox.addItem(type);
        }
    }
});

//标签输入框
JLabel tagLabel = new JLabel("标签:");
JTextField tagField = new JTextField(20);

//保存按钮
JButton saveButton = new JButton("保存");
saveButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String title = titleField.getText();
        String content = contentArea.getText();
        String type = (String) typeBox.getSelectedItem();
        String tag = tagField.getText();
        if (title.equals("") || content.equals("")) {
            JOptionPane.showMessageDialog(null, "标题或内容不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
        } else {
            boolean flag = addDiary(title, content, type, tag);
            if (flag) {
                JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(null, "保存失败!", "提示", JOptionPane.WARNING_MESSAGE);
            }
        }
    }
});

//保存日记
public boolean addDiary(String title, String content, String type, String tag) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        String sql = "insert into diary(title, content, type, tag) values(?,?,?,?)";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, title);
        pstmt.setString(2, content);
        pstmt.setString(3, type);
        pstmt.setString(4, tag);
        int count = pstmt.executeUpdate();
        if (count > 0) {
            flag = true;
        }
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return flag;
}
  1. 日记的搜索和排序
//搜索框
JLabel searchLabel = new JLabel("搜索:");
JTextField searchField = new JTextField(20);
searchField.getDocument().addDocumentListener(new DocumentListener() {
    public void insertUpdate(DocumentEvent e) {
        searchDiary();
    }
    public void removeUpdate(DocumentEvent e) {
        searchDiary();
    }
    public void changedUpdate(DocumentEvent e) {
        searchDiary();
    }
});

//排序下拉框
String[] sorts = {"时间", "标题", "分类", "标签"};
JComboBox<String> sortBox = new JComboBox<>(sorts);
sortBox.setSelectedIndex(0);
sortBox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        sortDiary();
    }
});

//搜索日记
public void searchDiary() {
    String keyword = searchField.getText();
    String sql = "select * from diary where title like '%" + keyword + "%' or content like '%" + keyword + "%' or type like '%" + keyword + "%' or tag like '%" + keyword + "%'";
    showDiary(sql);
}

//排序日记
public void sortDiary() {
    String sort = (String) sortBox.getSelectedItem();
    String sql = "";
    if (sort.equals("时间")) {
        sql = "select * from diary order by time desc";
    } else if (sort.equals("标题")) {
        sql = "select * from diary order by title asc";
    } else if (sort.equals("分类")) {
        sql = "select * from diary order by type asc";
    } else if (sort.equals("标签")) {
        sql = "select * from diary order by tag asc";
    }
    showDiary(sql);
}

//显示日记
public void showDiary(String sql) {
    DefaultTableModel model = new DefaultTableModel();
    model.addColumn("ID");
    model.addColumn("时间");
    model.addColumn("标题");
    model.addColumn("分类");
    model.addColumn("标签");
    model.addColumn("内容");
    try {
        Connection conn = getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            Object[] row = new Object[6];
            row[0] = rs.getInt("id");
            row[1] = rs.getString("time");
            row[2] = rs.getString("title");
            row[3] = rs.getString("type");
            row[4] = rs.getString("tag");
            row[5] = rs.getString("content");
            model.addRow(row);
        }
        rs.close();
        stmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    table.setModel(model);
}
  1. 导出日记和打印日记
//导出按钮
JButton exportButton = new JButton("导出");
exportButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        chooser.setDialogTitle("导出日记");
        chooser.setApproveButtonText("导出");
        chooser.setFileFilter(new FileFilter() {
            public boolean accept(File f) {
                return f.getName().toLowerCase().endsWith(".txt") || f.isDirectory();
            }
            public String getDescription() {
                return "文本文件(*.txt)";
            }
        });
        int result = chooser.showSaveDialog(null);
        if (result == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            if (!file.getName().toLowerCase().endsWith(".txt")) {
                file = new File(file.getAbsolutePath() + ".txt");
            }
            if (file.exists()) {
                int option = JOptionPane.showConfirmDialog(null, "文件已存在,确定要覆盖吗?", "提示", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
                if (option == JOptionPane.NO_OPTION) {
                    return;
                }
            }
            boolean flag = exportDiary(file);
            if (flag) {
                JOptionPane.showMessageDialog(null, "导出成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(null, "导出失败!", "提示", JOptionPane.WARNING_MESSAGE);
            }
        }
    }
});

//打印按钮
JButton printButton = new JButton("打印");
printButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        try {
            table.print();
        } catch (PrinterException ex) {
            ex.printStackTrace();
        }
    }
});

//导出日记
public boolean exportDiary(File file) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from diary");
        FileWriter writer = new FileWriter(file);
        while (rs.next()) {
            String id = rs.getString("id");
            String time = rs.getString("time");
            String title = rs.getString("title");
            String type = rs.getString("type");
            String tag = rs.getString("tag");
            String content = rs.getString("content");
            writer.write(id + "\t" + time + "\t" + title + "\t" + type + "\t" + tag + "\t" + content + "\n");
        }
        writer.close();
        rs.close();
        stmt.close();
        conn.close();
        flag = true;
    } catch (SQLException | IOException e) {
        e.printStackTrace();
    }
    return flag;
}
  1. 日记的修改和删除
//修改按钮
JButton editButton = new JButton("修改");
editButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        int row = table.getSelectedRow();
        if (row == -1) {
            JOptionPane.showMessageDialog(null, "请选择要修改的日记!", "提示", JOptionPane.WARNING_MESSAGE);
        } else {
            int id = (int) table.getValueAt(row, 0);
            String title = (String) table.getValueAt(row, 2);
            String content = (String) table.getValueAt(row, 5);
            String type = (String) table.getValueAt(row, 3);
            String tag = (String) table.getValueAt(row, 4);
            DiaryDialog dialog = new DiaryDialog(DiaryFrame.this, "修改日记", true, id, title, content, type, tag);
            dialog.setVisible(true);
        }
    }
});

//删除按钮
JButton deleteButton = new JButton("删除");
deleteButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        int row = table.getSelectedRow();
        if (row == -1) {
            JOptionPane.showMessageDialog(null, "请选择要删除的日记!", "提示", JOptionPane.WARNING_MESSAGE);
        } else {
            int option = JOptionPane.showConfirmDialog(null, "确定要删除吗?", "提示", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
            if (option == JOptionPane.YES_OPTION) {
                int id = (int) table.getValueAt(row, 0);
                boolean flag = deleteDiary(id);
                if (flag) {
                    JOptionPane.showMessageDialog(null, "删除成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(null, "删除失败!", "提示", JOptionPane.WARNING_MESSAGE);
                }
            }
        }
    }
});

//修改日记对话框
public class DiaryDialog extends JDialog {
    private int id;
    private JTextField titleField;
    private JTextArea contentArea;
    private JComboBox<String> typeBox;
    private JTextField tagField;

    public DiaryDialog(Frame owner, String title, boolean modal, int id, String titleText, String contentText, String typeText, String tagText) {
        super(owner, title, modal);
        this.id = id;
        JLabel titleLabel = new JLabel("标题:");
        titleField = new JTextField(20);
        titleField.setText(titleText);
        JLabel contentLabel = new JLabel("内容:");
        contentArea = new JTextArea(20, 40);
        JScrollPane contentPane = new JScrollPane(contentArea);
        contentArea.setText(contentText);
        JLabel typeLabel = new JLabel("分类:");
        String[] types = {"旅行", "工作", "生活", "学习"};
        typeBox = new JComboBox<>(types);
        typeBox.setSelectedItem(typeText);
        typeBox.setEditable(true);
        typeBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String type = (String) typeBox.getSelectedItem();
                if (!Arrays.asList(types).contains(type)) {
                    typeBox.addItem(type);
                }
            }
        });
        JLabel tagLabel = new JLabel("标签:");
        tagField = new JTextField(20);
        tagField.setText(tagText);
        JButton saveButton = new JButton("保存");
        saveButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String title = titleField.getText();
                String content = contentArea.getText();
                String type = (String) typeBox.getSelectedItem();
                String tag = tagField.getText();
                if (title.equals("") || content.equals("")) {
                    JOptionPane.showMessageDialog(null, "标题或内容不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
                } else {
                    boolean flag = updateDiary(id, title, content, type, tag);
                    if (flag) {
                        JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
                        DiaryDialog.this.dispose();
                        showDiary("select * from diary");
                    } else {
                        JOptionPane.showMessageDialog(null, "保存失败!", "提示", JOptionPane.WARNING_MESSAGE);
                    }
                }
            }
        });
        JPanel panel = new JPanel();
        panel.add(titleLabel);
        panel.add(titleField);
        panel.add(contentLabel);
        panel.add(contentPane);
        panel.add(typeLabel);
        panel.add(typeBox);
        panel.add(tagLabel);
        panel.add(tagField);
        panel.add(saveButton);
        this.add(panel);
        this.pack();
        this.setLocationRelativeTo(null);
    }
}

//修改日记
public boolean updateDiary(int id, String title, String content, String type, String tag) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        String sql = "update diary set title=?, content=?, type=?, tag=? where id=?";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, title);
        pstmt.setString(2, content);
        pstmt.setString(3, type);
        pstmt.setString(4, tag);
        pstmt.setInt(5, id);
        int count = pstmt.executeUpdate();
        if (count > 0) {
            flag = true;
        }
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return flag;
}

//删除日记
public boolean deleteDiary(int id) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        String sql = "delete from diary where id=?";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, id);
        int count = pstmt.executeUpdate();
        if (count > 0) {
            flag = true;
        }
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return flag;
}
  1. 日记本的密码保护
//密码输入框
JLabel passLabel = new JLabel("密码:");
JPasswordField passField = new JPasswordField(10);
JButton passButton = new JButton("确定");
passButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String pass = String.valueOf(passField.getPassword());
        if (pass.equals("")) {
            JOptionPane.showMessageDialog(null, "密码不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
        } else {
            boolean flag = checkPassword(pass);
            if (flag) {
                JOptionPane.showMessageDialog(null, "密码正确!", "提示", JOptionPane.INFORMATION_MESSAGE);
                passDialog.dispose();
            } else {
                JOptionPane.showMessageDialog(null, "密码错误!", "提示", JOptionPane.WARNING_MESSAGE);
            }
        }
    }
});

//检查密码
public boolean checkPassword(String pass) {
    boolean flag = false;
    try {
        Connection conn = getConnection();
        String sql = "select * from user where name=? and pass=?";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, user);
        pstmt.setString(2, pass);
        ResultSet rs = pstmt.executeQuery();
        if (rs.next()) {
            flag = true;
        }
        rs.close();
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return flag;
}
java案例7-4升级版日记本

原文地址: https://www.cveoy.top/t/topic/7Yk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录