java的制作"时间账本"
一直以来我都感觉自己的时间过得好荒废啊,貌似只是打开了一个网页链接的时间,一个下午便过去了;仿佛就是看了看空间,刷了刷微信,一天就过去了。哈,当然这是夸张的说法。但是我仔细地算了一下,大概我们每个人每天使用手机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的制作"时间账本"的更多相关文章
- [Java]Java日期及时间库插件 -- Joda Time.
来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...
- java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)
一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...
- 【转】JAVA 8 日期/时间(Date Time)API指南
前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...
- 使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
利用css3来制作时间轴的知识要点:伪元素,以及如何在伪元素上添加锚伪类 1)::before 在元素之前添加内容. 2)::after 在元素之后添加内容. 提示:亦可写成 :before :aft ...
- Java最重要的21个技术点和知识点之JAVA多线程、时间处理、数据格式
(四)Java最重要的21个技术点和知识点之JAVA多线程.时间处理.数据格式 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能 ...
- 【MySQL】Java对SQL时间类型的操作(获得当前、昨天、前年。。时间)
Java获得当前时间 java.util.Date date = new java.util.Date(); Timestamp time = new Timestamp(date.getTime() ...
- Java json设置时间格式,Jackson设置时间格式,json设置单引号
Java json设置时间格式,Jackson设置时间格式,json设置单引号 >>>>>>>>>>>>>>> ...
- JAVA中的时间操作
java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...
- Java中日期时间API小结
Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...
随机推荐
- PHP 实例 - AJAX 实时搜索
AJAX Live Search 在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结果. 实时的搜索与传统的搜索相比,具有很多优势: 当键入数据时,就会显示出匹配的结果 当继续 ...
- Python3 输入和输出
输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数.(第三种方式是使用文件对象的 write() 方法; 标准输出文件可以用 sys.stdout 引用.) 如果你希望输 ...
- mysql5.7在centos上安装的完整教程以及相关的“坑”
安装前的准备 Step1: 如果你系统已经有mysql,如一般centos自带mysql5.1系列,那么你需要删除它,先检查一下系统是否自带mysql yum list installed | gre ...
- Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用
KafkaOffsetMonitor是一个可以用于监控Kafka的Topic及Consumer消费状况的工具,其配置和使用特别的方便.源项目Github地址为:https://github.com/q ...
- MS Office2016留下的坑
背景 问题源自论坛用户反馈,他用管家有几年了,之前使用IE都很正常,没有任何问题,但是最近突然发现,启动IE时,就会出现系统错误提示:无法启动此程序,因为计算机中丢失 api-ms-win-core- ...
- ROS(indigo) 安装和使用更新版本的Gazebo----3,4,5,6,7 附:中国机器人大赛中型组仿真比赛说明
ROS(indigo) 安装和使用更新版本的Gazebo,本文以7为例. Gazebo7支持更多新的功能,如果使用下面命令安装ROS(indigo): ~$ sudo apt-get install ...
- Appium移动自动化测试(三)--安装Android模拟器(建议直接连手机,跳过此步)
转自虫师,亲测有效,留备后用. 本文中如果直接安装时不出现错误,则可以忽略(一.二.三.四.五),我安装的是5.1.1,直接成功,就是有点慢,要有耐心. 如果到最后一步,启动不起来,报错: emula ...
- boost::asio::spawn 将一统C++网络库
boost::asio::spawn 将一统C++网络库(金庆的专栏)boost::asio::spawn()创建一个协程,使C++网络编程大大简化,个人认为这使得 asio 成为C++首选网络库.b ...
- python 函数运算先于单目运算
>>> def f(): >>> -f() - 初一看,-f()比较陌生的样子,细想,这是合理的
- java自动装箱拆箱总结
对于java1.5引入的自动装箱拆箱,之前只是知道一点点,最近在看一篇博客时发现自己对自动装箱拆箱这个特性了解的太少了,所以今天研究了下这个特性.以下是结合测试代码进行的总结. 测试代码: int a ...