Java记账本⼩项⽬⼀(图解超详细)⾸先展⽰⼀个这个项⽬的原型:
有这些各种各样的功能。
⾸先第⼀步是创建对应的数据库:
启动mysql 服务,然后连接Navicat
数据库的名字叫做hutubill
再创建三个表:
1. 配置表信息 config
⽤于保存每⽉预算和Mysql的安装路径( ⽤于备份还原⽤) 2. 消费分类表 category
⽤于保存消费分类,⽐如餐饮,交通,住宿英语数字单词
3. 消费记录表 record
⽤于存放每⼀笔的消费记录,并且会⽤到消费分类
config有id,key_,value
CREATE TABLE config (
id int,
key_ varchar(255),
value varchar(255)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
什么是一次函数category 有id,name
CREATE TABLE category (
id int,
name varchar(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
record有 id,spend,cid,comment,date
CREATE TABLE record (
id int,
spend int,
cid int,
comment varchar(255),
date Date
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这边没有表⽰主键,是因为在之后有其他的约束来对他进⾏标识对应的主键约束:
alter table category add constraint pk_category_id primary key (id); alter table record add constraint pk_record_id primary key (id);
alter table config add constraint pk_config_id primary key (id);
并对id进⾏⾃增长
最后是增加外键约束
(确定record表的外键是cid,指向了category表的id主键)
alter table record add constraint fk_record_category foreign key (cid) references category(id);接下来就是对应的原型设计了
在src下创建HutuMainFrame 这个类
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class HutuMainFrame {
public static void main(String[] args){
//⽤到了JFrame 它是swing的⼀个组件,是⽤来创建窗⼝的
JFrame f=new JFrame();
//应该算是他的⼤⼩
f.tSize(500,450);
f.tTitle("wzw的⼀本糊涂账");
//如果组件当前未显⽰或者 c 为 null,则此窗⼝将置于屏幕的中央
ferreira
f.tLocationRelativeTo(null);
//这个是判断是否可以调整,fal就是不能⾃动调整
f.tResizable(fal);
//设置⽤户在此窗体上发起 "clo" 时默认执⾏的操作
//⽽EXIT_ON_CLOSE(在 JFrame 中定义):使⽤ System exit ⽅法退出应⽤程序 f.tDefaultCloOperation(JFrame.EXIT_ON_CLOSE);
//创建按钮
//这个是⼀个⼯具栏
JToolBar tb=new JToolBar();
JButton bSpend=new JButton("消费⼀览");
JButton bRecord=new JButton("记⼀笔");
JButton bCategory=new JButton("消费分类");
JButton bReport=new JButton("⽉消费报表");
JButton bConfig=new JButton("设置");
JButton bBackup=new JButton("备份");
JButton bRecover=new JButton("恢复");
//再把这⼏个按钮都加到⼯具栏中
tb.add(bSpend);
tb.add(bRecord);
tb.add(bCategory);
tb.add(bReport);
tb.add(bConfig);
tb.add(bBackup);
tb.add(bRecover);
//再是位置这个是默认0边距的,可以改改看
f.tLayout(new BorderLayout());
//这⾥就是在上⾯,放这个⼯具栏
f.add(tb,BorderLayout.NORTH);
/
/这个意思应该是在布局的中间位置,放JPanel
f.add(new JPanel(),BorderLayout.CENTER);
//再让其可见
f.tVisible(true);
//再添加⼏个按键的功能,也就是监听事件
//消费⼀览
bSpend.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
//记⼀笔
bRecord.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
}
});
//消费分类《俗世奇人》
bowling
bCategory.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
}
});
/
/设置
bConfig.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
}
});
//备份
bBackup.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
}
});
//恢复
bRecover.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
梅核气的治疗}
});
}
}
但这还不是完全的,在JPanel以及之后的监听器事件上,都会做相应的添加。尽力的拼音
进⾏界⾯规划之后,⼤致需要分成以下⼏个包,和包⾥各⾃的类,现在先给这个包
⾸先第⼀个是在⾯板类中,为了⽅便监听器选择对应的值,
把组件声明为public的属性, 把⾯板类设计为单例模式
这⾥使⽤最简单的单例模式
3d画立体画墙直接声明⼀个SpendPanel类型的静态属性,并指向当前实例
SpendPanel 类