java的制作"时间账本"-阿里云开发者社区

开发者社区> 郭璞> 正文

java的制作"时间账本"

简介: 一直以来我都感觉自己的时间过得好荒废啊,貌似只是打开了一个网页链接的时间,一个下午便过去了;仿佛就是看了看空间,刷了刷微信,一天就过去了。哈,当然这是夸张的说法。但是我仔细地算了一下,大概我们每个人每天使用手机16个小时,其中接近百分之百的时间在无聊的翻来看去,也许我们拿起手机的一刹那想到的是”我就刷几分钟微博,看几条QQ信息“,但是现实呢,现实就是我们本来要拿起手机看时间,却忘记了去看时间…鉴于此,也为了更好的约束自己,掌控自己的时间,我就自己开发了这么一款简易的时间账本,来记录我的时间的走向。
+关注继续查看

一直以来我都感觉自己的时间过得好荒废啊,貌似只是打开了一个网页链接的时间,一个下午便过去了;仿佛就是看了看空间,刷了刷微信,一天就过去了。哈,当然这是夸张的说法。但是我仔细地算了一下,大概我们每个人每天使用手机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,最新的事件展示在最上层。
缺点:软件本身的缺点更加的明显,先不说界面不是很好看吧,然后就是代码书写的不够规范,这对我今后的发展并没有帮助,希望大家引以为戒。再就是数据库层面没有考虑好,貌似只能我一个人用,需要读者单独建库建表。希望读者不要学习我的这些缺点,取精华弃糟粕。让我么共同进步吧!

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
22598 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4478 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7751 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5456 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5724 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2138 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3829 0
+关注
郭璞
一切就交给时间,它会给我答案。
368
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载