java的制作"时间账本"

来源:互联网 发布:自动关注软件靠谱吗 编辑:程序博客网 时间:2024/06/02 23:37

一直以来我都感觉自己的时间过得好荒废啊,貌似只是打开了一个网页链接的时间,一个下午便过去了;仿佛就是看了看空间,刷了刷微信,一天就过去了。哈,当然这是夸张的说法。但是我仔细地算了一下,大概我们每个人每天使用手机16个小时,其中接近百分之百的时间在无聊的翻来看去,也许我们拿起手机的一刹那想到的是”我就刷几分钟微博,看几条QQ信息“,但是现实呢,现实就是我们本来要拿起手机看时间,却忘记了去看时间…鉴于此,也为了更好的约束自己,掌控自己的时间,我就自己开发了这么一款简易的时间账本,来记录我的时间的走向。
我的整体的思路是采用MVC模型搭建一个框架,每一部分分别为完成相应的功能,下面就直接上代码吧。
1、bean层,也就是模型层:
记得要实现序列化接口啊,否则你会发现意想不到的错误

package com.tiger.bean;import java.io.Serializable;public class beanUtils implements Serializable{    /**     *      */    private static final long serialVersionUID = 1L;    private int id;    private String title;    private String time;    public beanUtils(int id,String title,String time){        this.id=id;        this.time=time;        this.title=title;    }    @Override    public String toString() {        return "beanUtils [id=" + id + ", title=" + title + ", time=" + time                + "]";    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getTime() {        return time;    }    public void setTime(String time) {        this.time = time;    }    public beanUtils() {        // TODO Auto-generated constructor stub    }}

2、然后是数据库操作层,这也是控制层的一部分:
数据库的建库建表的sql语句如下:

create database tiger;use tiger;create table timebill(id int(10) primary key auto_increment,title varchar(24),time varchar(20));
package com.tiger.jdbcUtils;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.tiger.bean.beanUtils;public class JDBCUtils {    private static String DRIVER = "com.mysql.jdbc.Driver";    private static String url = "jdbc:mysql://localhost:3306/tiger";    private static String username = "****";//这个就不说了哈    private static String password = "*****";//密码好像也不能说    static Connection conn = null;    static PreparedStatement ptst;    public JDBCUtils() {        // TODO Auto-generated constructor stub    }    public static Connection getConnection(String DRIVER,String url, String username,            String password) {        try {            Class.forName(DRIVER);            conn = (Connection) DriverManager.getConnection(url, username,                    password);            System.out.println("Succeed!");        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return conn;    }    public static String Insert(beanUtils bean) throws SQLException{        String sql="insert into tiger.timebill values(?,?,?)";        conn=(Connection) getConnection(DRIVER, url, username, password);         ptst=(PreparedStatement) conn.prepareStatement(sql);         int id=bean.getId();         String title=bean.getTitle();         String time=bean.getTime();         ptst.setInt(1, id);         ptst.setString(2, title);         ptst.setString(3, time);        if(ptst.execute()){            return "数据插入成功!";        }else{            return "数据插入失败!";        }    }    public static List<beanUtils> getResult(String sql) throws SQLException {        List<beanUtils>list=new ArrayList<beanUtils>();        ptst=(PreparedStatement) getConnection(DRIVER, url, username, password).prepareStatement(sql);        if(ptst.execute()){            ResultSet result=ptst.executeQuery();            while(result.next()){                String temp="";                beanUtils bean=new beanUtils();                bean.setId(result.getInt("id"));                bean.setTitle(result.getString("title"));                bean.setTime(result.getString("time"));                list.add(bean);                temp=null;            }        }else{            return null;        }        return list;    }    public static String getResultByString(ArrayList<beanUtils> list){        String result="";        for(int i=list.size()-1;i>=0;i--){            result+=list.get(i);            result+="\n";        }        return result;    }}

3、貌似就剩一个视图层咯,虽然我这个View里面写的代码很混乱,而且没有加什么注释,嘿嘿,先凑活看吧:

package doMain;import java.awt.BorderLayout;import java.awt.Button;import java.awt.FlowLayout;import java.awt.Label;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.SQLException;import java.text.DateFormat;import java.util.ArrayList;import java.util.Date;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import com.tiger.bean.beanUtils;import com.tiger.jdbcUtils.JDBCUtils;public class Frame extends JFrame {    private static TextField tf;    private static Button begin, stop;    private static long currentTime, endTime;    private static TextArea ta;    private static int minute, second, day, year, m;    private static int SQL_id = 0;    static JLabel label = new JLabel("任务一经开始便不能暂停!请三思而后行!");    public void init() {        this.setSize(500, 400);        this.setVisible(true);        this.setLayout(new FlowLayout());        this.setDefaultCloseOperation(EXIT_ON_CLOSE);        this.setLocationRelativeTo(null);        tf = new TextField(28);        ta = new TextArea();        begin = new Button("开始计时");        stop = new Button("结束任务");        MyListener listener = new MyListener();        begin.addActionListener(listener);        stop.addActionListener(listener);    }    public void setFrame() {        Panel panel = new Panel();        panel.setLayout(new FlowLayout());        panel.add(new Label("Title:"));        panel.add(tf);        panel.add(begin);        panel.add(stop);        this.add(panel);        this.add(ta, BorderLayout.CENTER);    }    public Frame() {        init();        setFrame();        this.add(label, BorderLayout.NORTH);        this.setResizable(false);    }    public String getTime() {        Date d = new Date();        return d.toString();    }    class MyListener implements ActionListener {        @Override        public void actionPerformed(ActionEvent e) {            // TODO Auto-generated method stub            if (e.getActionCommand().equals("开始计时")) {                currentTime = System.currentTimeMillis();                System.out.println("已经开始计时了!开始时间:" + getTime());                label.setText("任务一经开始便不能暂停!请三思而后行!");                Date date=new Date();                DateFormat format=DateFormat.getDateInstance();                label.setText(label.getText()+"\n"+format.format(date));            }            if (e.getActionCommand().equals("结束任务")) {                if (ta.getText().equals("")) {                    label.setText("你还没有在标题栏输入信息,所以我不会开始计时的!");                }                    endTime = System.currentTimeMillis();                    System.out.println("任务已经停止了,结束时间:" + getTime());                    Date date=new Date();                    DateFormat format=DateFormat.getDateInstance();                    label.setText("任务一经开始便不能暂停!请三思而后行!"+"\n"+format.format(date));                    String title = tf.getText();                    SQL_id++;                    String time = String                            .valueOf(((endTime - currentTime) / 60000) + "分钟"+(endTime - currentTime) / 1000) + "秒";                    beanUtils bean = new beanUtils(SQL_id, title, time);                    JDBCUtils jdbc = new JDBCUtils();                    try {                        System.out.println(jdbc.Insert(bean));                    } catch (SQLException e1) {                        // TODO Auto-generated catch block                        e1.printStackTrace();                    }                    String sql = "select * from tiger.timebill";                    try {                        ArrayList<beanUtils> list = (ArrayList) jdbc                                .getResult(sql);                        ta.setText(((JDBCUtils) jdbc).getResultByString(list));                    } catch (SQLException e1) {                        // TODO Auto-generated catch block                        e1.printStackTrace();                }            }        }    }}

4、那么来一场轰轰烈烈的测试吧:

package com.tiger.test;import doMain.Frame;public class Test {    public static void main(String[] args) {        // TODO Auto-generated method stub        new Frame();    }}

下面是完成的效果展示图:
额,下边的日期对应的分钟秒数貌似没出现哦
略水略水,勿喷哈。

好了来个总结吧,也为了今后我自己复习的时候更快的理解,软件使用的就是MVC的思想,将代码和实现分离开来,这也体现了java的面向对象的思想,万事万物皆对象嘛。然后就是我的收获,我是真的感受到了模型的威力了,让复杂的代码变得格外的清晰,这就体现在了我的那个List《beanUtils》和数据库的语句上了,一下子就让方法的参数列表变得苗条了。另外一个功能就是使用了栈的思想,FILO,最新的事件展示在最上层。
缺点:软件本身的缺点更加的明显,先不说界面不是很好看吧,然后就是代码书写的不够规范,这对我今后的发展并没有帮助,希望大家引以为戒。再就是数据库层面没有考虑好,貌似只能我一个人用,需要读者单独建库建表。希望读者不要学习我的这些缺点,取精华弃糟粕。让我么共同进步吧!

/*其实我一开始并没有想太多,就是单纯的想做一个使用的工具,仅此而已。但是后来依次偶然的机会,我想到了可以结合报表统计的知识,将我的数据库中每天的时间流向做个数据分析,就会变得更好吧。嘿嘿,惭愧的是,一直没时间来实现这个。如果你们有兴趣,不妨给我留言哦。*/
1 0
原创粉丝点击