【计理01组30号】Java实现日记写作软件

博客 动态
0 193
优雅殿下
优雅殿下 2022-03-03 02:55:59
悬赏:0 积分 收藏

【计理01组30号】Java 实现日记写作软件

项目分析

代码设计

com.shiyanlou.entity

User.java

package com.shiyanlou.entity;public class User {    private String ID;      private String name;     private String passwd;    public String getName() {        return name;    }    public void setID(String iD) {        ID = iD;    }    public String getID() {        return ID;    }    public void setName(String name) {        this.name = name;    }    public String getPasswd() {        return passwd;    }    public void setPasswd(String passwd) {        this.passwd = passwd;    }}

com.shiyanlou.util

Diary.java

package com.shiyanlou.util;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import javax.swing.text.Document;public class Diary {    public static void addDiary(String pathname, String title, String txt) {        File dirfile = new File(pathname);        BufferedWriter bufw = null;        dirfile.mkdirs();        File file = new File(dirfile, title + ".ky");        try {            bufw = new BufferedWriter(new FileWriter(file, true));            bufw.write(txt);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } finally {            if (bufw != null) {                try {                    bufw.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }    public static void read(File file, Document doc) {        try (BufferedReader bufr = new BufferedReader(new FileReader(file));) {            String txt = null;            String line = System.getProperty("line.separator");            while ((txt = bufr.readLine()) != null) {                doc.insertString(doc.getLength(), txt + line, null);            }        } catch (Exception e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }    }}

JDOM.java

package com.shiyanlou.util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.TreeMap;import org.jdom2.Attribute;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import org.jdom2.output.XMLOutputter;public class JDOM {    public static String write(String n, String p, String id) {        // TODO Auto-generated method stub        String path = "/home/shiyanlou/Desktop/UserInfo.xml";        File file = new File(path);        SAXBuilder saxBuilder = new SAXBuilder();        Document doc;         try {            doc = saxBuilder.build(file);            Element root = doc.getRootElement(); //\u5F97\u5230\u6839\u5143\u7D20            Element user = new Element("User"); //\u5EFA\u7ACBUser\u5143\u7D20            Element name = new Element("name");//\u5EFA\u7ACBname\u5143\u7D20            Element passwd = new Element("passwd");//\u5EFA\u7ACBpasswd\u5143\u7D20            if (checkID(id, root)) {                user.setAttribute(new Attribute("id", id));                name.setText(n);                passwd.setText(p);                user.addContent(name);                user.addContent(passwd);                root.addContent(user);                XMLOutputter out = new XMLOutputter();                out.output(doc, new FileOutputStream(file));                return "Successful registration";//\u8FD4\u56DE\u6CE8\u518C\u6210\u529F            } else                return "ID already exists, please input again";        } catch (JDOMException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return "ERROR";    }    public static boolean checkID(String id, Element root) {        boolean flag = true;        @SuppressWarnings("unchecked")        List<Element> list = root.getChildren("User");        Iterator<Element> it = list.iterator();        while (it.hasNext()) {            Element e = (Element) it.next();            if (e.getAttributeValue("id").equals(id)) {                flag = false;            }        }        return flag;    }    public static String read(String id, String passwd) {        String path = "/home/shiyanlou/Desktop/UserInfo.xml";        File file = new File(path);        SAXBuilder saxBuilder = new SAXBuilder();        try {            Document doc = saxBuilder.build(file);            Element root = doc.getRootElement();            String info = getPasswd(root).get(id);            if (info == null) {                return "User does not exist!!";            }            String[] buf = info.split("/");            if (buf[0].equals(passwd)) {                return "Successful landing/" + buf[1];            }        } catch (JDOMException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return "Wrong password!!";    }    @SuppressWarnings("unchecked")private static Map<String, String> getPasswd(Element root) {        Map<String, String> map = new TreeMap<String, String>();//\u5B58\u8D2E\u7528\u6237\u4FE1\u606F        List<Element> list = new ArrayList<Element>();        list = root.getChildren("User");        Iterator<Element> it = list.iterator();        while (it.hasNext()) {            Element e = it.next();            String id = e.getAttributeValue("id");            String passwd = e.getChildText("passwd");            String name = e.getChildText("name");            map.put(id, getInfo(passwd, id));        }        return map;    }    private static String getInfo(String passwd, String name) {        return passwd + "/" + name;    }}

Register.java

package com.shiyanlou.util;import com.shiyanlou.entity.User;public class Register {    static User user = new User();    public static String checkName(String name) {        user.setName(name);        return null;    }    public static String checkID(String ID) {        if (ID.matches("\\d{1,8}")) {            user.setID(ID);            return null;        } else            return "ID not conform to the rules";    }    public static String checkPasswd(String passwd) {        if (passwd.matches("\\d{6,15}")) {            user.setPasswd(passwd);            return null;        } else            return "Password not conform to the rules";    }    public static String register(String name,String passwd,String ID) {        user.setName(name);        user.setPasswd(passwd);        user.setID(ID);        return (JDOM.write(user.getName(), user.getPasswd(),                user.getID()));    }}

com.shiyanlou.view

IndexGUl.java

package com.shiyanlou.view;import java.awt.EventQueue;import java.awt.Font;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;public class IndexGUI extends JFrame {        private JPanel contentPane;    private static IndexGUI frame;    public static void main(String[] args) {        init();    }    public static void init()     {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    frame = new IndexGUI();                     frame.setVisible(true);                 } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    public IndexGUI() {        setTitle("KnowYou");          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         setBounds(100, 100, 650, 400);        contentPane = new JPanel();         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));         setContentPane(contentPane);         contentPane.setLayout(null);          JLabel lblNewLabel = new JLabel("Welcome to use KnowYou");         lblNewLabel.setBounds(132, 74, 386, 35);        lblNewLabel.setFont(new Font("Ubuntu", Font.BOLD | Font.ITALIC, 30));        contentPane.add(lblNewLabel);        JButton login = new JButton("Login");         login.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                event_Login();             }        });        login.addKeyListener(new KeyAdapter() {            @Override            public void keyPressed(KeyEvent e) {                if(e.getKeyCode()==KeyEvent.VK_ENTER)                {                    event_Login();                }            }        });        login.setBounds(65, 263, 124, 45);        contentPane.add(login);        JButton register = new JButton("Sign Up");         register.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                event_register();             }        });        register.addKeyListener(new KeyAdapter() {            @Override            public void keyPressed(KeyEvent e) {                if(e.getKeyCode()==KeyEvent.VK_ENTER)                {                    event_register();                }            }        });        register.setBounds(489, 263, 109, 45);        contentPane.add(register);    }    private void event_Login()    {        setVisible(false);        new LoginGUI().loginGUI();    }    private void event_register()    {        setVisible(false);        new RegisterGUI().registerGUI();    }}

LoginGUl.java

package com.shiyanlou.view;import java.awt.EventQueue;import java.awt.Font;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import javax.swing.border.EmptyBorder;import com.shiyanlou.util.JDOM;public class LoginGUI extends JFrame {    private static final long serialVersionUID = 4994949944841194839L;    private JPanel contentPane;      private JTextField IDtxt;     private JLabel Passwdlabel;    private JPasswordField passwordField;    private JButton login;    private JButton back;    /**     * Launch the application.     * @return     */    public void loginGUI() {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    LoginGUI frame = new LoginGUI();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public LoginGUI() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 650, 400);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        contentPane.setLayout(null);        JLabel IDlabel = new JLabel("Please input ID");        IDlabel.setBounds(68, 170, 100, 39);        contentPane.add(IDlabel);        IDtxt = new JTextField();        IDtxt.setBounds(220, 179, 126, 21);        contentPane.add(IDtxt);        IDtxt.setColumns(10);        Passwdlabel = new JLabel("Please input password");        Passwdlabel.setBounds(68, 219, 150, 50);        contentPane.add(Passwdlabel);        passwordField = new JPasswordField();        passwordField.setBounds(220, 234, 126, 21);        contentPane.add(passwordField);        login = new JButton("login");        login.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                event_login();            }        });        login.addKeyListener(new KeyAdapter() {            public void keyPressed(KeyEvent e)            {                if(e.getKeyCode()==KeyEvent.VK_ENTER)                {                    event_login();                }            }        });        login.setBounds(239, 310, 93, 23);        contentPane.add(login);        back = new JButton("BACK");        back.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                 IndexGUI.init();                 setVisible(false);            }        });        back.setBounds(507, 310, 93, 23);        contentPane.add(back);        JLabel label = new JLabel("Welcome to use KnowYou");        label.setFont(new Font("Ubuntu", Font.BOLD | Font.ITALIC, 30));        label.setBounds(142, 54, 386, 35);        contentPane.add(label);    }    private void event_login()    {        String id=IDtxt.getText();        String passwd=new String(passwordField.getPassword());        String flag=JDOM.read(id, passwd);        if(flag.contains("Successful landing"))        {            String[] bufs=flag.split("/");            String name=bufs[1];            JOptionPane.showMessageDialog(contentPane, "Welcome: "+name,"Welcome",JOptionPane.PLAIN_MESSAGE);            UsersGUI.init(name);            setVisible(false);        }       else       {     JOptionPane.showMessageDialog(contentPane,flag,"ERROR",JOptionPane.ERROR_MESSAGE);       }     }}

RegisterGUl.java

package com.shiyanlou.view;import java.awt.EventQueue;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.EmptyBorder;import com.shiyanlou.util.Register;public class RegisterGUI extends JFrame {    private static final long serialVersionUID = 3250371445038102261L;    private JPanel contentPane;    private JTextField nametext;      private JTextField IDtext;      private JTextField passwdtext;      /**     * Launch the application.     */    public void registerGUI() {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    RegisterGUI frame = new RegisterGUI();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public RegisterGUI() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 650, 400);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        contentPane.setLayout(null);        JLabel namelabel = new JLabel("Please input user name");         namelabel.setBounds(102, 91, 151, 23);        contentPane.add(namelabel);        JLabel IDlabel = new JLabel("Please input user ID");        IDlabel.setBounds(102, 160, 151, 23);        contentPane.add(IDlabel);        JLabel passwdlaber = new JLabel("Please input user password");        passwdlaber.setBounds(102, 224, 163, 23);        contentPane.add(passwdlaber);        nametext = new JTextField();         nametext.setBounds(271, 92, 92, 21);         contentPane.add(nametext);        nametext.setColumns(10);          IDtext = new JTextField();        IDtext.setBounds(271, 161, 92, 21);        contentPane.add(IDtext);        IDtext.setColumns(8);        passwdtext = new JTextField();        passwdtext.setBounds(271, 225, 92, 21);        contentPane.add(passwdtext);        passwdtext.setColumns(10);        JButton register = new JButton("Sign Up");        register.addMouseListener(new MouseAdapter() {            public void mouseClicked(MouseEvent e) {                register.addMouseListener(new MouseAdapter() {                    public void mouseClicked(MouseEvent e) {                        String name = nametext.getText();                        String ID = IDtext.getText();                        String passwd = passwdtext.getText();                       if (Register.checkID(ID) == null) {                        if (Register.checkPasswd(passwd) == null) {                        String srt = Register.register(name, passwd, ID);                        JOptionPane.showMessageDialog(contentPane,srt,"information", JOptionPane.PLAIN_MESSAGE);                        setVisible(false);                        new IndexGUI().init();                        } else {                        JOptionPane.showMessageDialog(contentPane,Register.checkPasswd(passwd), "ERROR", JOptionPane.ERROR_MESSAGE);                        }                        } else {                        JOptionPane.showMessageDialog(contentPane,Register.checkID(ID), "ERROR",                 JOptionPane.ERROR_MESSAGE);                                }                        }                        });            }        });        register.setBounds(321, 305, 93, 23);        contentPane.add(register);        JButton back = new JButton("BACK");  //\u8FD4\u56DE\u6309\u94AE        back.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                IndexGUI.init();                 setVisible(false);             }        });        back.setBounds(531, 305, 93, 23);        contentPane.add(back);        JLabel label = new JLabel("Welcome to use KnowYou");         label.setFont(new Font("Ubuntu", Font.BOLD | Font.ITALIC, 30));        label.setBounds(143, 26, 374, 35);        contentPane.add(label);        JLabel lblNewLabel = new JLabel("(There are 1 to 8 numbers)");        lblNewLabel.setBounds(373, 164, 163, 15);        contentPane.add(lblNewLabel);        JLabel lblNewLabel_1 = new JLabel("(There are 6 to 15 numbers)");        lblNewLabel_1.setBounds(373, 228, 163, 15);        contentPane.add(lblNewLabel_1);    }}

UsersGUl.java

package com.shiyanlou.view;import java.awt.Color;import java.awt.EventQueue;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.File;import javax.swing.JButton;import javax.swing.JEditorPane;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JInternalFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTabbedPane;import javax.swing.JTextField;import javax.swing.JTextPane;import javax.swing.border.EmptyBorder;import javax.swing.filechooser.FileNameExtensionFilter;import com.shiyanlou.util.Diary;public class UsersGUI extends JFrame {    private JPanel contentPane;    private JTextField textField;    private JFileChooser chooser;    private static String pathname;    public static void init(String path) { //\u521D\u59CB\u5316\u65B9\u6CD5        pathname = path;        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    UsersGUI frame = new UsersGUI();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public UsersGUI() {    	        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 600, 400);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        contentPane.setLayout(null);        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);        tabbedPane.setToolTipText("KonwYou");        tabbedPane.setBounds(0, 0, 574, 67);        contentPane.add(tabbedPane);        final JPanel panel = new JPanel();        tabbedPane.addTab("Management Journal", null, panel, null);        chooser = new JFileChooser(".\\"+pathname);        FileNameExtensionFilter filter=new FileNameExtensionFilter("Allowed","ky");        chooser.setFileFilter(filter);        JButton readButton = new JButton("Read the diary");                readButton.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                int value = chooser.showOpenDialog(panel);                JInternalFrame internalFrame_Read = new JInternalFrame("Read the diary", false, true, false, false);                internalFrame_Read.setBounds(0, 77, 584, 275);                contentPane.add(internalFrame_Read);                internalFrame_Read.getContentPane().setLayout(null);                JTextPane txtDiary = new JTextPane();                txtDiary.setBounds(0, 0, 568, 246);                internalFrame_Read.getContentPane().add(txtDiary);                javax.swing.text.Document doc=txtDiary.getDocument();                txtDiary.setBackground(Color.GREEN);                txtDiary.setEditable(false);                                if (value == JFileChooser.APPROVE_OPTION) {                       File file = chooser.getSelectedFile();                                      if(file.exists()) {                    	Diary.read(file, doc);                        internalFrame_Read.setVisible(true);                    }                }            }        });        panel.add(readButton);        JButton addButton = new JButton("Create a diary");//\u65B0\u5EFA\u6309\u94AE        addButton.addMouseListener(new MouseAdapter() {            @Override            public void mouseClicked(MouseEvent e) {                final JInternalFrame internalFrame_Write = new JInternalFrame("Create a diary",false, true, false, false);                                internalFrame_Write.setBounds(0, 77, 584, 275);                contentPane.add(internalFrame_Write);                   internalFrame_Write.getContentPane().setLayout(null);                textField = new JTextField();                textField.setBounds(76, 0, 492, 21);                internalFrame_Write.getContentPane().add(textField);                textField.setColumns(10);                JLabel label = new JLabel("Title");                label.setFont(new Font("\u6977\u4F53", Font.PLAIN, 12));                   label.setBounds(46, 3, 52, 15);                   internalFrame_Write.getContentPane().add(label);                final JEditorPane editorPane = new JEditorPane();                editorPane.setBounds(0, 31, 568, 179);                internalFrame_Write.getContentPane().add(editorPane);                JButton save = new JButton("SAVE");                save.setBounds(465, 213, 93, 23);                save.addMouseListener(new MouseAdapter() {                    public void mouseClicked(MouseEvent e) {                        String title = textField.getText();                        String txt = editorPane.getText();                        Diary.addDiary(pathname, title, txt);                        internalFrame_Write.setVisible(false);                    }                });                internalFrame_Write.getContentPane().add(save);                internalFrame_Write.setVisible(true);            }        });        panel.add(addButton);        JButton delButton = new JButton("Delete");        delButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                File file=null;                int value=chooser.showOpenDialog(panel);                if(value==JFileChooser.APPROVE_OPTION)                {                    file=chooser.getSelectedFile();                    int x=JOptionPane.showConfirmDialog(panel,"Confirm delete?","Please confirm",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);                    if(file.exists())                    {                        if(x==JOptionPane.OK_OPTION) {                            file.delete();                            JOptionPane.showMessageDialog(panel, "Delete Success!","information", JOptionPane.PLAIN_MESSAGE);                        }                    }                }            }        });        panel.add(delButton);        JButton back = new JButton("BACK");        back.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                IndexGUI.init();                setVisible(false);            }        });        panel.add(back);    }}

要点解析

XML文档

需要对应着 User 类来设计一个 XML 文档,用于持久化存储用户信息。

什么是 XML

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

创建 XML 文件

在桌面空白处右键点击,选择从模版创建一个空文件

文件名可以填写为 UserInfo.xml

创建完成后可以在桌面上找到这个 UserInfo.xml 文件。

右键点击该文件,用 gedit 编辑器打开它。

编辑 XML 文件

在编辑器中输入 XML 文件的信息和项目中会用到的标签 Users

<?xml version="1.0" encoding="UTF-8"?> <Users></Users>

编辑完成后,点击保存按钮保存该文件,然后关闭编辑器。 UserInfo.xml 如图:

以上就完成了我们保存用户信息的 xml 文档。

JDOM

JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包。它的设计包含 Java 语言的语法乃至语义。

JDOM 的用法

要使用 JDOM 解析 XML 文件,需要下载 JDOM 的包,实验中使用的是 jdom-1.1。解压之后,将 lib 文件夹下的 *.jar 文件以及 build 文件夹下的 jdom.jar 拷贝到工程文件夹下,然后就可以使用 JDOM 操作 XML 文件了。

在实验环境中下载 jdom 可以使用下面的方式,打开 Xfce 终端,输入命令:

$ wget https://labfile.oss.aliyuncs.com/courses/480/jdom-2.0.6.zip $ unzip jdom-2.0.6.zip

JDOM 的具体实现

首先需要将 JDOM 的 jar 包导入到我们的工程中。

右键点击项目目录,选择 Properties 进入项目属性设置。

Java Build Path 设置项里切换到 Libraries 选项卡,然后点击右侧的 Add External JARs... 按钮。

在弹出的 JAR Selection 对话框中选择 Shiyanlou 目录下刚解压的 JDOM 相关包 jdom-2.0.6.jar,然后点击 确定 按钮完成添加。

最后在属性页点击 OK 完成设置。

接下来就需要对 JDOM 类进行编辑。

在类 JDOM.java中,主要包含了两个方法,write()read() 方法,分别用于将用户信息写入到 xml 文档中和读出用户信息。

在黑夜里梦想着光,心中覆盖悲伤,在悲伤里忍受孤独,空守一丝温暖。我的泪水是无底深海,对你的爱已无言,相信无尽的力量,那是真爱永在。我的信仰是无底深海,澎湃着心中火焰,燃烧无尽的力量,那是忠诚永在
posted @ 2022-03-03 02:33 yyyyfly 阅读(1) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员