切換
舊版
前往
大廳
主題

JAVA : 記帳小程式ver2

Joji(飛航模式) | 2017-06-13 18:06:55 | 巴幣 114 | 人氣 924

這次的是第二版本:
1.新增了儲存檔案
2.讀取舊檔案
3.洗白目前檔案
4.修改了StreamHelper來協助(I/O)輸出入資料






-----------------------------------------------------------------------------------------------------------------------------
AccountGUIver2:
package IO.AccountProgram;

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;

public class AccountGUIver2 {
    private JFrame frame;
    private JPanel panel;
    private ArrayList accountList;
    private Account account;
    private JButton enterbutton;
    private JButton displaybutton;
    private JButton savebutton;
    private JButton deletebutton;
    private JTextArea area;
    private JTextField datefield;
    private JTextField breakfastfield;
    private JTextField lunchfield;
    private JTextField dinnerfield;
    private JTextField othersfield;
    private StreamHelperver2 streamhelper;
    private JMenu menu;
    
    
    public void buildGUI () {
        frame = new JFrame("啷噹記帳士");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        accountList = new ArrayList();
        streamhelper = new StreamHelperver2();
        
        BorderLayout layout = new BorderLayout();
        panel = new JPanel(layout);
        
        Box rightbox = new Box(BoxLayout.Y_AXIS);
        Box centerbox = new Box(BoxLayout.Y_AXIS);
        Box leftbox = new Box(BoxLayout.Y_AXIS);
        panel.add(BorderLayout.EAST, rightbox);
        panel.add(BorderLayout.CENTER, centerbox);
        panel.add(BorderLayout.WEST, leftbox);
        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        
        area = new JTextArea(10, 10);
        area.setLineWrap(true);
        area.setSelectionColor(Color.blue);
        JScrollPane scroller = new JScrollPane(area);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panel.add(BorderLayout.NORTH, scroller);
        
        datefield = new JTextField(10);
        breakfastfield = new JTextField(5);
        lunchfield = new JTextField(5);
        dinnerfield = new JTextField(5);
        othersfield = new JTextField(5);
        centerbox.add(datefield);
        centerbox.add(breakfastfield);
        centerbox.add(lunchfield);
        centerbox.add(dinnerfield);
        centerbox.add(othersfield);
        
        Font font = new Font("LALA", Font.BOLD, 14);
        JLabel datelabel = new JLabel("日期(格式為XXXX/XX/XX)");
        datelabel.setFont(font);
        JLabel breakfastlabel = new JLabel("早餐支出");
        breakfastlabel.setFont(font);
        JLabel lunchlabel = new JLabel("午餐支出");
        lunchlabel.setFont(font);
        JLabel dinnerlabel = new JLabel("晚餐支出");
        dinnerlabel.setFont(font);
        JLabel otherslabel = new JLabel("其他支出");
        otherslabel.setFont(font);
        leftbox.add(datelabel);
        leftbox.add(breakfastlabel);
        leftbox.add(lunchlabel);
        leftbox.add(dinnerlabel);
        leftbox.add(otherslabel);
        
        enterbutton = new JButton("輸入帳目");
        savebutton = new JButton("儲存到帳目");
        displaybutton = new JButton("列出所有帳目資料");        
        deletebutton = new JButton("刪除目前帳目資料");    
        rightbox.add(savebutton);
        rightbox.add(displaybutton);
        rightbox.add(deletebutton);
        centerbox.add(enterbutton);
        
        menu = new JMenu("檔案");
        JMenuBar menuBar = new JMenuBar();
        JMenuItem saveMenuItem = new JMenuItem("另存帳目新檔");
        JMenuItem loadMenuItem = new JMenuItem("讀取帳目檔案");
        saveMenuItem.addActionListener(new SaveMenuListener());
        loadMenuItem.addActionListener(new LoadMenuListener());
        menu.add(saveMenuItem);
        menu.add(loadMenuItem);
        menuBar.add(menu);
        frame.setJMenuBar(menuBar);
        
        savebutton.addActionListener(new SaveListener());
        displaybutton.addActionListener(new DisplayListener());
        enterbutton.addActionListener(new EnterListener());
        deletebutton.addActionListener(new DeleteListener());        
        frame.setSize(300, 300);
        frame.getContentPane().add(panel);
        frame.pack();        
        frame.setVisible(true);
    }
    
    public class SaveListener implements ActionListener {
        public void actionPerformed (ActionEvent ev) {
            if (accountList == null) {
                accountList = new ArrayList();
            }
            if (account == null) {
                area.setText("錯誤!! 你沒有輸入帳目");
            }
            else {
            accountList.add(account);
            account = null;
            }
        }
    }
    
    public class EnterListener implements ActionListener {
        public void actionPerformed (ActionEvent ev) {
            String date = datefield.getText();
            String breakfast = breakfastfield.getText();
            String lunch = lunchfield.getText();
            String dinner = dinnerfield.getText();
            String others = othersfield.getText();
            
            datefield.setText("");
            breakfastfield.setText("");
            lunchfield.setText("");
            dinnerfield.setText("");
            othersfield.setText("");
            
            account = new Account(Integer.parseInt(breakfast), Integer.parseInt(lunch),
             Integer.parseInt(dinner), Integer.parseInt(others), date);
        }
    }
    
    public class DisplayListener implements ActionListener {
        public void actionPerformed (ActionEvent ev) {
            if (accountList != null) {            
            area.setText("");
            for (int i = 0; i < (accountList.size()); i++) {
                area.append(accountList.get(i).printAccount()+"\n");
            }
        } else {
            area.setText("目前帳目沒有任何資料");
        }
    }    
    }
    
    public class DeleteListener implements ActionListener {
        public void actionPerformed (ActionEvent ev) {
            accountList = null;
        }
    }
    
    public class SaveMenuListener implements ActionListener {
        public void actionPerformed (ActionEvent ev) {
            JFileChooser filechooser = new JFileChooser();
            filechooser.showSaveDialog(frame);
            streamhelper.saveFile(accountList, filechooser.getSelectedFile());
        }
    }
    
    public class LoadMenuListener implements ActionListener {
        public void actionPerformed (ActionEvent ev) {
            JFileChooser filechooser = new JFileChooser();
            filechooser.showOpenDialog(frame);
            accountList = streamhelper.loadFile(filechooser.getSelectedFile());
        }
    }
    
    public static void main(String[] args) {
        AccountGUIver2 gui = new AccountGUIver2();
        gui.buildGUI();
    }    
}

-----------------------------------------------------------------------------
ArrayList:
package IO.AccountProgram;

import java.util.*;
import java.io.*;

public class ArrayList implements Serializable {
    private Account[] elems;
    private int next;
    private static final long serialVersionUID = -45560544466L;
    
    
    
    public ArrayList(int capacity) {
        elems = new Account[capacity];
    }
    
    public ArrayList() {
        this(50);
    }
    
    public void add (Account o) {
        if (next == elems.length) {
            elems = Arrays.copyOf(elems, elems.length*2);
            elems[next++] = o;
        }
        else {
            elems[next++] = o;
        }
    }
    
    
    public Account get (int i) {
        return elems[i];
    }
    
    public Account[] getElems() {
        return elems;
    }
    
    public int size() {
        return next;
    }
    
}
------------------------------------------------------------------------------------------------------------------------
StreamHelperver2:
package IO.AccountProgram;

import java.io.*;

public class StreamHelperver2 {
    public void saveFile(ArrayList output, File file) {
        try (ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(file))) {
            os.writeObject(output);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
    public ArrayList loadFile(File file) {
        ArrayList list = null;
        
        try (ObjectInputStream is = new ObjectInputStream(new FileInputStream(file))) {
            list = (ArrayList) is.readObject();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
        return list;
    }
}
-------------------------------------------------------------------------------------------------------------------------

創作回應

村村
我不會Java qq
2022-05-19 14:05:51
Joji(飛航模式)
我也忘光了 大學自學的 剛好大學學java讓我找到第一份工作 蠻幸運ㄉ
2022-05-19 14:47:50

更多創作