java swing jdbc个人记账管理系统的设计与实现(GUI)

java+swing+jdbc 个人记账管理系统(GUI)

个人记账管理系统的主要功能如下:

(1)用户信息管理:用户信息管理需要实现新用户注册,用户登录,用户个人信息修改,密码修改四个基本功能。
(2)记账管理:记账管理需要实现收支记录的增删改查。支出信息(支出金额,支出使用的账户,支出消费的类别,支出发生日期,备注),收入信息(收入增加的账户,收入的来源科目,收入发生日期,备注)。需要注意的是:记账科目之间要实现收支平衡,支出科目增长(减少)的金额即资产账户余额减少(增长)的金额。例如,支出食物-蔬菜10元,使用账户饭卡里的余额,则支出食物-蔬菜类别金额增10,饭卡余额减10。记账过程中需调用已添加的资产账户和科目类别。
(3)账户管理:账户管理需要实现用户可对个人账户增删改查。用户需要在系统中添加新的个人账户,个人账户可以是暂时余额为零。用户可以对以后不再使用的账户进行清理,对添加有误的账户进行修改,查询已添加所有账户的功能。已添加的账户可以在记账功能,账志报表功能中被调用。
(4)科目管理:科目管理需要实现用户可对科目类别进行增删改查操作。用户需要根据个人需求在系统内添加自定义科目,科目可以分为两级,一级是大类科目,二级是小类科目,大类科目包含小类科目。用户可以对添加错误或以后不再使用的科目进行删除或修改操作,用户可查询所有已添加的科目,并可以在记账中通过下拉框选择使用科目。
(5)账志报表管理:账志报表管理需要实现用户需要对已记录的账目信息进行查询,编辑、添加等操作功能。用户需要在系统中选择查询某一时间点或时间段的记账信息,其中信息要包括账户、收入、支出、科目类别,也可以对账表历史记录进行修改。
(6)系统退出功能。

程序效果图

在这里插入图片描述

部分代码

代码比较多,如需要全部代码和数据库内容,请+vx:keep_going_67

(接受定制)

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.ArrayList;

/**登录界面
 */
public class login extends JFrame implements ActionListener {
    JLabel welcome = new JLabel("欢迎使用个人记账管理系统");
    JLabel user, password;
    JTextField username;
    JPasswordField passwordField;
    JButton loginButton;
    JButton button;
    CardLayout cardLayout = new CardLayout();
    JPanel card;
    JPanel cardPanel, cardPanel2, cardPanel3, cardPanel4;
    JTabbedPane jTabbedPane, jTabbedPane2;
    Users users;
    //Font font = new Font("宋体", Font.BOLD | Font.ITALIC, 20);
    public login() {
        init();
    }

    private void init() {

        welcome.setFont(new Font("方正舒体", Font.ITALIC, 30));
        setTitle("个人记账管理系统");
        setLayout(new BorderLayout());
        user = new JLabel("用户名");
        password = new JLabel("密码");
        button = new JButton("注册");
        card = new JPanel(cardLayout);

        JPanel panel1 = new JPanel(new BorderLayout());

        username = new JTextField();
        passwordField = new JPasswordField();
        loginButton = new JButton("Login!");
        loginButton.addActionListener(this);

        JPanel titlepanel = new JPanel(new FlowLayout());//标题面板
        JPanel loginpanel = new JPanel();//登录面板
        loginpanel.setLayout(null);

        welcome.setBounds(250, 100, 400, 40);
        user.setBounds(340, 170, 50, 20);
        password.setBounds(340, 210, 50, 20);
        username.setBounds(390, 170, 120, 20);
        passwordField.setBounds(390, 210, 120, 20);
        loginButton.setBounds(340, 250, 80, 25);
        button.setBounds(430, 250, 80, 25);

        loginpanel.add(welcome);
        loginpanel.add(user);
        loginpanel.add(password);
        loginpanel.add(username);
        loginpanel.add(passwordField);
        loginpanel.add(loginButton);
        loginpanel.add(button);

        panel1.add(titlepanel, BorderLayout.NORTH);
        panel1.add(loginpanel, BorderLayout.CENTER);
        //panel1.add(loginButton, BorderLayout.SOUTH);

        card.add(panel1, "login");
        //card.add(cardPanel, "info");

        add(card);
        setBounds(300, 100, 900, 600);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button.addActionListener(new ActionListener() {        //为重置按钮添加监听事件
            //同时清空name、password的数据
            public void actionPerformed(ActionEvent arg0) {
                // TODO 自动生成方法存根
                new zhuce();
            }
        });
    }

    public static void main(String[] args) {
        new login();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        boolean flag = false;//用来标志用户是否正确

        if (e.getSource() == loginButton) {
            ArrayList<Users> list = new CheckUsers().getUsers();//获得所有用户信息
            for (int i = 0; i < list.size(); i++) {//遍历所有用户信息,以此来判断输入的信息是否正确
                users = list.get(i);
                String passwordStr = new String(passwordField.getPassword());
                if (username.getText().equals(users.getName()) && passwordStr.equals(users.getPassword())) {
                    //type=users.getType();
                    //System.out.println("登录人员类别"+type);
                    JOptionPane.showMessageDialog(null, "欢迎(用户)" + username.getText() + "登录", "记账系统", JOptionPane.PLAIN_MESSAGE);
                    //当输入的信息正确时,就开始加载选项卡界面,并把选项卡界面加入到卡片布局器中

                    Cookm cookm=new Cookm(users);
                    CooUsers cooUsers=new CooUsers(users);
                    Coozj coozj=new Coozj(users);
                    Coozh coozh=new Coozh(users);
                    Coozzbb coozzbb=new Coozzbb(users);
                    Coozzbbs coozzbbs=new Coozzbbs(users);
                    cardPanel = new JPanel();
                    cardPanel2 = new JPanel();
                    cardPanel3 = new JPanel();
                    cardPanel4 = new JPanel();

                    jTabbedPane = new JTabbedPane(JTabbedPane.TOP);
                    jTabbedPane.add("用户信息管理", cooUsers);
                    jTabbedPane.add("记账管理", coozj);
                    jTabbedPane.add("账户管理", coozh);
                    jTabbedPane.add("科目管理",cookm);
                    jTabbedPane.add("账志报表管理",coozzbb);
                    jTabbedPane.add("账志报表时间段查询",coozzbbs);


                    
                    cardPanel.add(jTabbedPane);
               
                    card.add(cardPanel, "info");
                    cardLayout.show(card, "info");//输入信息正确就显示操作界面,否则重新输入正确信息
                    flag = true;
                    break;//如果信息正确就退出遍历,提高效率
                }
            }
            if (!flag) {//信息不正确,重新输入
                JOptionPane.showMessageDialog(null, "请输入正确的用户名或密码", "警告", JOptionPane.WARNING_MESSAGE);
                username.setText("");
                passwordField.setText("");
            }
        }
    }

    /**连接到SQL server
    */
    public static class GetConnection {
        private Connection con=null;
        public Connection GetConnection(){
            String URL="jdbc:mysql://localhost:3306/jizhang?&useSSL=false&serverTimezone=UTC";//数据库位置
            String USER="root";
            String KEY="root";

            try {
                Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动,连接数据库,
                con= DriverManager.getConnection(URL, USER, KEY);
            } catch (Exception e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return con;
        }
    }

    public static class Users {
        private String name;
        private String password;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

    }

    public static class zhuce extends JFrame {
        Connection connection = new GetConnection().GetConnection();

        JLabel Uname, Upassword, Utype, SP;
        JTextField UnameText, UpasswordText, UtypeText;
        JButton seek, add, delete, edit;

        public zhuce() {

            setLayout(null);//整个采用流动式布局   很好的适应了表格带来的影响
            setBounds(300, 100, 900, 600);
            Uname = new JLabel("用户:");
            UnameText = new JTextField(10);
            Upassword = new JLabel("密码:");
            UpasswordText = new JTextField(10);
            add = new JButton("注册");
            add(Uname);
            add(UnameText);
            add(Upassword);
            add(UpasswordText);
            add(add);

            Uname.setBounds(340, 170, 50, 20);
            Upassword.setBounds(340, 210, 50, 20);
            UnameText.setBounds(390, 170, 120, 20);
            UpasswordText.setBounds(390, 210, 120, 20);
            add.setBounds(340, 250, 80, 25);
            setVisible(true);

            add.addActionListener(e -> {
                try {
                    PreparedStatement statement = connection.prepareStatement("insert into Users values(?,?)");
                    statement.setString(1, UnameText.getText());
                    statement.setString(2, UpasswordText.getText());
                    //statement.setString(3, UtypeText.getText());
                        /*statement.setString(4, AtimeText.getText());
                        statement.setString(5, AreasonText.getText());*/
                    statement.executeUpdate();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }

                JOptionPane.showMessageDialog(this, "注册成功");
            });

        }
    }

    public static class CheckUsers {
        GetConnection getConnection=new GetConnection();
        Connection connection=getConnection.GetConnection();
        public ArrayList<Users> getUsers(){
            ArrayList<Users>list = new ArrayList<>();
            try {

                PreparedStatement state=connection.prepareStatement("select *from Users");
                ResultSet res=state.executeQuery();
                while(res.next()){
                    Users user = new Users();
                    user.setName(res.getString(1));
                    user.setPassword(res.getString(2));
                    list.add(user);
                }

            } catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            }
            return list;
        }
    }

看完不妨点个赞 :)

在这里插入图片描述

  • 43
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值