先贴上项目地址:https://github.com/sunlechuan/PersonTally

这个程序是学期末,实训老师带着写的,主要功能有:1.添加账目,2.修改账目,3.删除帐目,4.查询账目。

这是程序的主要界面:

类的构成:1.FileIO主要是创建新的文本文档和写入读取文件。

2.Tool获取时间,流水账号,将文本中的String类型转化成Vector;

3.Operation操作类添加、修改、查询数据。

4.UI_t界面类,设置页面,添加监听器。

程序中有点瑕疵,如果说是存入的数据为空,就会直接报异常,这时候需要把文本文档删除才可以,所以我自己在‘增加’的监听器中增加了一个if语句判断金额输入框和备注框是否为空,如果为空的话就跳出方法。

if(money.equals("") || remark.equals(""))

{
         return ;
    }

如果想要修改数据需要在表格中输入完成后点击一下其他表格,再点击一下'修改'按钮即可。

以下是代码:

FileIO类

package com.ss.file;import java.io.*;public class FileIO {private String filename = "tally.txt";public FileIO() {File file = new File(filename);if(!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}}public void write(String data,boolean mode) {try {FileWriter fw = new FileWriter(filename,mode);BufferedWriter bw = new BufferedWriter(fw);bw.write(data);bw.close();fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public String read() {FileReader fr;String line = "";String fileStr = "";try {fr = new FileReader(filename);//不能一行行的读BufferedReader br = new BufferedReader(fr);//可以一行行的读效率高while((line = br.readLine()) != null) {fileStr += line + "\n";}br.close();fr.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return fileStr;}public String getFilename() {return filename;}public void setFilename(String filename) {this.filename = filename;}}

Tool类

package com.ss.util;import java.text.SimpleDateFormat;
import java.util.*;import com.slc.file.FileIO;public class Tool {/** 获取时间*/public String getTime() {Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = sdf.format(date);return str;}/** 将String转化成Vector类型*/public Vector StringToVec(String data) {Vector bigVec = new Vector();if(data != null && !data.equals("")) {String[] array = data.split("\n");for(int i=0;i<array.length;i++) {String[] a = array[i].split(",");Vector smallVec = new Vector();smallVec.add(a[0]);smallVec.add(a[1]);smallVec.add(a[2]);smallVec.add(a[3]);smallVec.add(a[4]);bigVec.add(smallVec);}}return bigVec;}/** 获取下一个流水账号*/public int getNewID() {int id = 1;FileIO io = new FileIO();String data = io.read();if(data != null && !data.equals("")) {Vector bigVec = StringToVec(data);Vector smallVecLast = (Vector)bigVec.get(bigVec.size()-1);String str = (String)smallVecLast.get(0);id = Integer.parseInt(str) + 1;}return id;}
}

Operation类

package com.ss.oper;import java.util.Vector;import com.slc.file.FileIO;
import com.slc.util.Tool;public class Operation {FileIO io = new FileIO();public void add(String data) {io.write(data, true);}public void delete(String data) {io.write(data, false);}public void update(String data) {io.write(data, false);}/** 全部查询*/public Vector select() {String str = io.read();Tool tool = new Tool();return tool.StringToVec(str);}/** 条件查询*/public Vector select(String type,String remark) {Vector vecData = new Vector();Vector vecAll = select();for(int i = 0;i < vecAll.size();i++) {Vector smallVec = (Vector)vecAll.get(i);boolean select = (smallVec.get(1).toString().equals(type) || type.equals(""))&&(smallVec.get(4).toString().equals(remark) || remark.equals(""));if(select) {vecData.add(smallVec);}}return vecData;}
}

UI_t(界面)类

package com.ss.view;import javax.swing.*;
import javax.swing.table.DefaultTableModel;import com.slc.oper.Operation;
import com.slc.util.Tool;import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;public class UI_t extends JFrame{private JComboBox<String> typeCom = new JComboBox<String>();private JComboBox<String> typeCom2 = new JComboBox<String>();private JTextField moneyText = new JTextField(); private JTextField loteText = new JTextField();private JTextField tjText = new JTextField();private JTable table = new JTable();private DefaultTableModel dtm = new DefaultTableModel();private Vector<String> colName = new Vector<String>();public UI_t(){super("个人账目管理系统");this.setBounds(300, 200, 800, 600);init();}public void init(){JScrollPane p1 = new JScrollPane(setTable());final JSplitPane p2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT,setInfo(),p1);p2.addComponentListener(new ComponentListener(){@Overridepublic void componentResized(ComponentEvent arg0) {p2.setDividerLocation(0.4);}@Overridepublic void componentHidden(ComponentEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void componentMoved(ComponentEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void componentShown(ComponentEvent arg0) {// TODO Auto-generated method stub}});this.add(p2);}public static void main(String[] args) {new UI_t().setVisible(true);}/** 设置JPanel的界面*/public JPanel setInfo(){JPanel jp = new JPanel();jp.setLayout(null);JLabel label1 = new JLabel("类型");label1.setBounds(100, 50, 30, 30);jp.add(label1);typeCom.addItem("收入");typeCom.addItem("֧支出");typeCom.setBounds(150, 50, 60, 30);jp.add(typeCom);JLabel label2 = new JLabel("金额");label2.setBounds(250, 50, 30, 30);jp.add(label2);moneyText.setBounds(300, 50, 60, 30);jp.add(moneyText);JLabel label3 = new JLabel("备注");label3.setBounds(380, 50, 30, 30);loteText.setBounds(430, 50, 60, 30);jp.add(label3);jp.add(loteText);JButton addBut = new JButton("增加");addBut.setBounds(520, 50, 60, 30);jp.add(addBut);addBut.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent arg0) {}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent arg0) {}@Overridepublic void mouseEntered(MouseEvent arg0) {}@Overridepublic void mouseClicked(MouseEvent arg0) {String type = (String)typeCom.getSelectedItem();//返回当前所选项String money = moneyText.getText();String remark = loteText.getText();Tool tool = new Tool();String time = tool.getTime();int id = tool.getNewID();String data = id + "," + type + "," + money + "," + time + "," + remark +"\n";Operation oper = new Operation();oper.add(data);select();}});JButton xgBut = new JButton("修改");xgBut.setBounds(610, 50, 60, 30);jp.add(xgBut);xgBut.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {String data = changeTableData();Operation oper = new Operation();oper.update(data);}});JButton deleteBut = new JButton("删除");deleteBut.setBounds(700, 50, 60, 30);jp.add(deleteBut);deleteBut.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {int i = table.getSelectedRow();dtm.removeRow(i);String data = changeTableData();Operation oper = new Operation();oper.delete(data);}});JLabel label4 = new JLabel("按类型查询");label4.setBounds(100, 100, 70, 30);jp.add(label4);typeCom2.addItem("");typeCom2.addItem("收入");typeCom2.addItem("支出");typeCom2.setBounds(200, 100, 60, 30);jp.add(typeCom2);JLabel label5 = new JLabel("按条件查询");label5.setBounds(280, 100, 100, 30);jp.add(label5);tjText.setBounds(380,100,100,30);jp.add(tjText);JButton selectBut = new JButton("查询");selectBut.setBounds(500, 100, 60, 30);jp.add(selectBut);selectBut.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {String type = (String) typeCom2.getSelectedItem();String remark = tjText.getText();Operation oper = new Operation();Vector data = oper.select(type,remark);dtm.setDataVector(data, colName);table.setModel(dtm);}});return jp;}public JTable setTable(){colName.add("流水账号");colName.add("类型");colName.add("金额");colName.add("日期");colName.add("备注");Operation oper = new Operation();Vector data = oper.select();dtm.setDataVector(data, colName);table.setModel(dtm);return table;}/** 从文件中重新读取一遍数据相当于刷新*/public void select(){Operation oper = new Operation();Vector data = oper.select();dtm.setDataVector(data, colName);table.setModel(dtm); }/** 获取表格内容*/public String changeTableData(){String data = "";int row = table.getRowCount();for(int i=0;i<row;i++){String line = "";for(int j=0;j<5;j++){line += dtm.getValueAt(i, j)+",";}line += "\n";data += line;}return data;}
}

从这个项目中学到了很多,首先是关于分包的概念(虽然我还是不会分),然后是每个功能都是一个类调用另一个基础的类,一层层的调用,写一个项目之前要构思好从文件或是数据库的底层开始一层层的向上写。我之前也写过一个ATM的,返回来看发现自己的代码功能要不是凌乱的在外边,要不就是挤在了监听器中,总之还有很多需要改进的地方。

Java :个人账目管理系统相关推荐

  1. Java、JSP银行账目管理系统

    技术:Java.JSP等 摘要: 随着我国信息产业发展迅速以及中国加入世界贸易组织,国内银行之间以及与外国银行之间的竞争也越来越激烈,怎样发展业务以吸引更多顾客是各银行面队的当务之急. 而帐目管理是银 ...

  2. java毕业设计_银行账目管理系统

    银行账目管理系统mysql数据库创建语句 银行账目管理系统oracle数据库创建语句 银行账目管理系统sqlserver数据库创建语句 银行账目管理系统spring+springMVC+hiberna ...

  3. 基于JAVA进出货管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA进出货管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA进出货管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  4. JAVA大学生兼职管理系统计算机毕业设计Mybatis+系统+数据库+调试部署

    JAVA大学生兼职管理系统计算机毕业设计Mybatis+系统+数据库+调试部署 JAVA大学生兼职管理系统计算机毕业设计Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开 ...

  5. 计算机毕业设计Java消防站信息管理系统(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java消防站信息管理系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java消防站信息管理系统(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S ...

  6. netty银行账目管理系统_银行账目管理系统的设计与实现.doc

    摘要:我国加入了世界贸易组织之后,信息化产业快速发展,中国各大行业都面临着严峻的挑战,其中银行业内的竞争尤为激烈.竞争也意味着发展,我国银行业想要在如此激烈的竞争中存活下来,就需要靠发展业务和提高银行 ...

  7. SpringBoot + Ajax 实现个人账目管理系统 Ajax如此简单~

    SpringBoot + Ajax 实现个人账目管理系统 引言 Hello,我是Bug终结者,一名热爱后端Java的风趣且幽默的程序员~,本周技术分享为大家带来一个基于SpingBoot + Ajax ...

  8. 基于JAVA考试编排管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA考试编排管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA考试编排管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. java毕业设计养老院管理系统Mybatis+系统+数据库+调试部署

    java毕业设计养老院管理系统Mybatis+系统+数据库+调试部署 java毕业设计养老院管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

最新文章

  1. 用.NET创建Windows服务
  2. python精彩编程200例百度_Python趣味编程与精彩实例
  3. 孤岛营救与汽车加油行驶问题
  4. sql数据库常见命令总结
  5. 2.1 Java程序的构成
  6. 【学术相关】不喜欢做研究,到底要不要读博士?
  7. python地理空间分析指南pdf邓世超_Python地理空间分析指南(第2版)源代码.zip
  8. WinForm UI设计与开发思路(转)
  9. Xcode 如何使用旧版本SDK以保证程序兼容性
  10. Qt简单的解析Json数据例子(一)
  11. dnf会修改跨区服务器吗,dnf新跨区系统上线之后,整个游戏只有9个大区
  12. 〖Linux〗Ubuntu设定Proxy及忽略Proxy
  13. python 写文件 编码_Python文件写入时的编码问题解决
  14. maven-dependencyManagement和dependencies区别
  15. 网页布局02 盒子模型
  16. 写一个shell 快速启动停止你的微服务吧
  17. C#实现海康人脸门禁主机远程开关门和下发用户数据
  18. [原创]AM3352 + TPS65910 调试方法+调试记录
  19. 香蕉树上第六根芭蕉——PCA算法python实现和思考-站在巨人肩膀上
  20. 88E1111使用记录

热门文章

  1. 凡客微博营销:微博首发的无本诱惑
  2. 重磅| 创业者的格局要大——徐小平谈中国创业
  3. mysql数据库表设计理论原则实践
  4. 群晖nas做文件服务器的安全性,更换NAS后,数据如何安全处理?聊聊NAS数据安全性那些事...
  5. matlab并网模型,光伏并网MATLAB模型 一些入门的并网控制系统 - 下载 - 搜珍网
  6. 大型计算机游戏排行榜,iOS大型游戏
  7. python打不开py文件查看代码,Python打不开.py文件怎么办
  8. android 微信浮窗实现_Android仿微信视屏悬浮窗效果
  9. hmailserver被拒绝访问
  10. 由于OneDrive导致无法移动文档文件夹位置