一直以来我都感觉自己的时间过得好荒废啊,貌似只是打开了一个网页链接的时间,一个下午便过去了;仿佛就是看了看空间,刷了刷微信,一天就过去了。哈,当然这是夸张的说法。但是我仔细地算了一下,大概我们每个人每天使用手机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,最新的事件展示在最上层。

缺点:软件本身的缺点更加的明显,先不说界面不是很好看吧,然后就是代码书写的不够规范,这对我今后的发展并没有帮助,希望大家引以为戒。再就是数据库层面没有考虑好,貌似只能我一个人用,需要读者单独建库建表。希望读者不要学习我的这些缺点,取精华弃糟粕。让我么共同进步吧!

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

java的制作"时间账本"的更多相关文章

  1. [Java]Java日期及时间库插件 -- Joda Time.

    来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...

  2. java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)

    一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...

  3. 【转】JAVA 8 日期/时间(Date Time)API指南

    前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...

  4. 使用css3伪元素制作时间轴并且实现鼠标选中高亮效果

    利用css3来制作时间轴的知识要点:伪元素,以及如何在伪元素上添加锚伪类 1)::before 在元素之前添加内容. 2)::after 在元素之后添加内容. 提示:亦可写成 :before :aft ...

  5. Java最重要的21个技术点和知识点之JAVA多线程、时间处理、数据格式

    (四)Java最重要的21个技术点和知识点之JAVA多线程.时间处理.数据格式  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能 ...

  6. 【MySQL】Java对SQL时间类型的操作(获得当前、昨天、前年。。时间)

    Java获得当前时间 java.util.Date date = new java.util.Date(); Timestamp time = new Timestamp(date.getTime() ...

  7. Java json设置时间格式,Jackson设置时间格式,json设置单引号

    Java json设置时间格式,Jackson设置时间格式,json设置单引号 >>>>>>>>>>>>>>> ...

  8. JAVA中的时间操作

    java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...

  9. Java中日期时间API小结

    Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...

随机推荐

  1. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  2. jQuery 捕获

    jQuery 拥有可操作 HTML 元素和属性的强大方法. jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力. jQuery 提供一系列与 DOM 相关的方法,这使 ...

  3. JavaScript 字符串(String)对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...

  4. springMVC源码分析--@SessionAttribute用法及原理解析SessionAttributesHandler和SessionAttributeStore

    @SessionAttribute作用于处理器类上,用于在多个请求之间传递参数,类似于Session的Attribute,但不完全一样,一般来说@SessionAttribute设置的参数只用于暂时的 ...

  5. ejabberd开发和部署

    ejabberd开发和部署 (金庆的专栏 2016.10) 搭建了自己的ejabberd集群,然后少量更改源码,实现定制的XMPP服务器. 从github fork ejabberd 库,定为 mas ...

  6. 优先使用TimeUnit类中的sleep()

    TimeUnit是什么? TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段 ...

  7. SOAP Binding: Difference between Document and RPC Style Web Services

    SOAP Binding: Difference between Document and RPC Style Web Services 20FLARES Twitter 1Facebook 9Goo ...

  8. Xcode 调试技巧 --常用命令和断点

    Xcode 中的调试技巧与我们的日常开发息息相关,而这些调试技巧在我们解决Bug时,常常有事半功倍的作用,经常会用到的有各种断点 和 命令.而这些调试技巧也经常会在面试中问到,所以不知道的就来看看吧. ...

  9. iOS升级HTTPS通过ATS你所要知道的

    由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求,否则无法上架,因此研究了一下在iOS中使用HTTPS请求的实现.网上搜索了一些比较有用资料,大家可以参考下 苹果强制升级的 ...

  10. python语言学习

    前段时间要做视频直播需要编写自动模块,就考虑使用python脚本语言,python的好多语法都是很独特的,比如数据类型不需要预定义,缩进的方式等,另外功能也很强大,豆瓣就是用python写的.我写的部 ...