51af3ff116d7836dd909bf52eede45ba.png

个人记账管理系统演示

注意这只是大一java实训,用intellij idea或者eclipse等打开的并且使用你的本地数据库,不是web

web版本见:

记账管理系统网页版-CSDN博客

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

(1)用户信息管理:用户信息管理需要实现用户登录,用户个人信息修改,密码修改基本功能。

(2)记账管理:记账管理需要实现收支记录的增、删、改、查、导入和导出功能。支出信息(支出金额,支出使用的账户,支出消费的类别,支出发生日期,备注),收入信息(收入增加的账户,收入的来源科目,收入发生日期,备注)。需要注意的是:记账科目之间要实现收支平衡,支出科目增长(减少)的金额即资产账户余额减少(增长)的金额。例如,支出食品酒水-早午晚餐10元,使用账户饭卡里的余额,则支出食品酒水-早午晚餐类别金额增10,饭卡余额减10。记账过程中需调用已添加的资产账户和科目类别。

(3)账户管理:账户管理需要实现用户可对个人账户增、删、改、查、导入和导出功能。账户类别有现金、储蓄卡、信用卡、虚拟账户(比如饭卡、公交卡、支付宝、微信、各种店铺充值卡)、投资账户(比如股票账户、余额宝等)、负债、债权、自定义资产等。已添加的账户可以在记账功能,账志报表功能中被调用。

(4)科目管理:科目管理需要实现用户可对科目类别进行增、删、改、查、导入和导出功能操作。用户需要根据个人需求在系统内添加自定义科目,科目可以分为两级,一级是大类科目,二级是小类科目,大类科目包含小类科目。用户可以对添加错误或以后不再使用的科目进行删除或修改操作,用户可查询所有已添加的科目,并可以在记账中通过下拉框选择使用科目。收入科目可参考:工资收入、利息收入、加班收入、经营所得、奖金收入等。支出科目可参考:食品酒水(下设:早午晚餐、烟酒茶、水果零食等)、衣服饰品(下设:鞋帽包包、衣服裤子、化妆饰品等)、行车交通(下设:公共交通、打车租车、私家车等)、交流通讯(下设:手机费、上网费、座机费、邮寄费等)、休闲娱乐(下设:运动健身、腐败聚会、休闲玩乐、度假旅游等)、学习进修(下设:书报杂志、培训进修等)、人情往来(下设:送礼请客、孝敬家长、慈善捐助、还人钱物等)、医疗保健(下设:药品费、保健费、美容费、治疗费等)、居家物业(下设:日常用品、水电煤气、房租、物业管理、维修保养等)等、金融保险(按揭还款等)、其他(意外丢失等)。

(5)账志报表管理:账志报表管理需要实现用户需要对已记录的账目信息进行查询,编辑、添加、打印、导出等操作功能。用户需要在系统中选择查询某一时间点或时间段的记账信息,其中信息要包括账户、收入、支出、科目类别,也可以对账表历史记录进行修改。

(6)预警管理:当本月或本周等支出超过一定金额,给予提示

(7)系统退出:能够正常退出系统。

(二)组织形式

自由选题之后,需求分析分组完成,其余任务个人独立完成。

(三)分析设计要求

采用面向对象的思想和模块化方法对所选的系统进行分析和设计。

(四)功能要求

1. 覆盖所有功能需求,在规定时间内应完成。

2. 代码规范。

3. 鼓励合理增加需求,实现更多功能。附加功能均为加分项。

(五) 性能需求

1. 应用程序要提供友好的图形用户界面。

2. 应用程序具备健壮性、稳定性和好的移植性。

3. 界面要为用户提供方便的导航。

(六)应用程序开发要求

1. 选用技术:Java语言;

2. 选用数据库:MySQL、SQL Server数据库或者其它已经掌握的数据库系统;

3. 软件集成开发环境(IDE):IDEA、NetBeans、MyEclipse、Eclipse等;

4. 鼓励尝试新技术、新方法。

(七)其他要求

设计与实现的系统能够运行,提交源程序、实训日志和实训报告。

1  系统需求分析

1.1  系统功能需求分析

1.1.1  用户信息管理

在用户信息管理界面,可以实现用户名和密码的增加,除此之外用户还可以对用户的密码进行修改。

1.1.2  记账管理

   记账管理实现了收支记录的增,删,改,查的功能,用户可以首先选择是进行收入查询还是支出查询从而使得查询更清晰;并且该功能调用已经添加的资产账户和科目类别,从而让用户可以不用手动填写,直接根据数据库已经添加的资产账户和科目类别进行选择填入。

1.1.3  账户管理

   账户管理实现了用户可对个人账户增、删、改、查功能。账户类别可以由用户自行设置,已添加的账户可以在记账功能,账志报表功能中被调用,用户可以删除或修改已添加的账户,也可以查询想要查看的账户。

1.1.4  科目管理

   科目管理实现了用户可对科目类别进行增、删、改、查功能操作。用户可根据个人需求在系统内添加自定义科目,用户可以删除或修改已添加的科目,也可以查询想要查看的科目。

1.1.5  账志报表管理

账志报表管理实现了用户需要对已记录的账目信息进行查询,功能。用户可以在系统中选择查询某一时间段的记账信息,其中信息包括了账户、收入、支出、科目类别。

1.1.6  预警管理

当本月或本周等支出超过一定金额,会提示超出,否则提示未超出。

1.1.7  系统退出

   系统正常退出

1.2  系统非功能需求分析

1.2.1  登录界面

   登陆界面,用户使用系统是可以通过登录进入系统。

1.2.2  注册界面

注册界面,用户可以注册从而生成一个登录账号和密码。

1.2.3  动态时间显示

       动态时间可以让用户在使用当前系统时随时方便知道当前时间,同时还有一定美化页面作用。

1.2.4  系统背景美化

   由于登录,注册界面,以及系统主界面背景过于单调,这里通过为系统增加背景图片,从而达到系统美化效果。

8488139474e33901771418e47bf9bf65.png

56b7ddbd119f68460f6df46c160c4aaf.png

这里是部分代码,由于代码过长,需要全部代码+v: ershiqijian
package com.xm;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

public class Login  implements ActionListener {
    private JFrame app;
    private JButton 登录, 注册;
    private JLabel 用户名, 密码, 欢迎;
    private JTextField 用户板;
    private JPasswordField 密码板;
    private int message = 0;
    int x1 = Toolkit.getDefaultToolkit().getScreenSize().width;
    int y1 = Toolkit.getDefaultToolkit().getScreenSize().height;

    //得到屏幕宽,高;
    public Login() {
        app = new JFrame("个人记账管理系统");
        app.setSize(x1, y1);
        app.setDefaultCloseOperation(app.EXIT_ON_CLOSE);

        Container c = app.getContentPane();
        c.setLayout(null);//窗口无布局;

        JPanel pan1 = (JPanel) app.getContentPane();
        pan1.setOpaque(false);

        ImageIcon bg1 = new ImageIcon("img/img_3.png");
        JLabel label1 = new JLabel(bg1);
        label1.setBounds(0, 0, app.getWidth(), app.getHeight());
        bg1.setImage(bg1.getImage().getScaledInstance(app.getWidth(), app.getHeight()
                , Image.SCALE_DEFAULT));//图片自适应窗口大小;

        //将图片添加到最底层
        app.getLayeredPane().add(label1, new Integer(Integer.MIN_VALUE));

        //由于无窗口布局,所以要设置组件位置;
        欢迎 = new JLabel("欢迎使用个人记账管理系统");
        欢迎.setBounds(app.getWidth() / 4, app.getHeight() / 4, app.getWidth() / 3, 100);
        c.add(欢迎);
        用户名 = new JLabel("用户账号");
        用户名.setBounds(app.getWidth() / 4, app.getHeight() / 3, app.getWidth() / 3, 50);//设置位置,大小;
        c.add(用户名);
        用户板 = new JTextField(10);
        用户板.setBounds(app.getWidth() / 4 + 70, app.getHeight() / 3, app.getWidth() / 3, 50);
        用户板.setOpaque(false);
        c.add(用户板);
        密码 = new JLabel("密码");
        密码.setBounds(app.getWidth() / 4, app.getHeight() / 3 + 80, app.getWidth() / 3, 50);
        c.add(密码);
        密码板 = new JPasswordField(10);
        密码板.setBounds(app.getWidth() / 4 + 70, app.getHeight() / 3 + 80, app.getWidth() / 3, 50);
        密码板.setOpaque(false);
        c.add(密码板);
        登录 = new JButton("登录");
        登录.setBounds(app.getWidth() / 3 - 40, app.getHeight() / 2+40, 150, 50);
        登录.addActionListener(this);
        c.add(登录);
        注册 = new JButton("注册");
        注册.setBounds(app.getWidth() / 2+30, app.getHeight() / 2+40, 150, 50);
        注册.addActionListener(this);
        c.add(注册);

        app.setVisible(false);
        app.setVisible(true);//刷新窗口

    }

        @Override
        public void actionPerformed (ActionEvent e){
            if (e.getSource() == 登录) {
                Connection con;
                Statement stmt;
                ResultSet rs;
                try {
                    Class.forName("com.mysql.cj.jdbc.Driver");
                } catch (ClassNotFoundException f) {
                    System.out.printf("SQLException1.0:" + f.getLocalizedMessage());
                }
                try {
                    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/c1test", "root"
                            , "@y123456");
                    stmt = con.createStatement();
                    rs = stmt.executeQuery("select*from zhuce ");
                    while (rs.next()) {
                        String st1 = rs.getString("id");
                        String st2 = rs.getString("password");
                        char[] ps = 密码板.getPassword();
                        String st3 = "";
                        for (int i = 0; i < ps.length; i++)
                            st3 += ps[i];
                        if ((用户板.getText().equals(st1)) && (st3.equals(st2))) {
                            message = 1;
                            new 个人记账管理系统();
                            app.setVisible(false);
                            rs.close();
                            stmt.close();
                            con.close();
                            break;
                        }
                    }
                    if (message == 0) {
                        JOptionPane.showMessageDialog(app, "您输入的账号或密码有误,请重新输入", "系统提示"
                                , JOptionPane.ERROR_MESSAGE);
                    }
                    con.close();
                } catch (SQLException f) {
                    System.out.println("SQLException1.1:" + f);
                }
            }
            if (e.getSource() == 注册) {
                new 注册();
                app.setVisible(false);
            }

        }

    }
package com.xm;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;

public class 个人记账管理系统 implements ActionListener {
    private JButton 用户信息管理,记账管理,账户管理,科目管理,账志报表管理,预警管理,系统退出;
    private JPanel pan0,pan1,pan2;
    int x1=Toolkit.getDefaultToolkit().getScreenSize().width;
    int y1=Toolkit.getDefaultToolkit().getScreenSize().height;
    public 个人记账管理系统(){
        JFrame app=new JFrame("个人记账管理系统");
        app.setSize(x1, y1);


        app.setDefaultCloseOperation(app.EXIT_ON_CLOSE);
        app.setVisible(true);

        Container c=app.getContentPane();
        c.setLayout(null);

        pan0=(JPanel) app.getContentPane();
        pan0.setOpaque(false);

        ImageIcon bg1=new ImageIcon("img/threemao.png");
        JLabel label1=new JLabel(bg1);
        label1.setBounds(0,0,app.getWidth(),app.getHeight());
        bg1.setImage(bg1.getImage().getScaledInstance(app.getWidth(),app.getHeight()
                , Image.SCALE_DEFAULT));//图片自适应窗口大小;

        //将图片添加到最底层
        app.getLayeredPane().add(label1,new Integer(Integer.MIN_VALUE));

        JLabel welc=new JLabel("欢迎使用个人记账管理系统");
        welc.setBounds(app.getWidth()/4,app.getHeight()/70,800,50);
        welc.setFont(new Font("华文行楷",3,50));
        welc.setForeground(new Color(128,143,37));
        pan0.add(welc);

        JLabel l1=new JLabel("欢迎");
        l1.setBounds(100,app.getHeight()-105,500,30);
        l1.setFont(new Font("华文行楷",1,20));
        l1.setForeground(new Color(8,214,248));
        pan0.add(l1);

        JLabel l4=new JLabel("您好,今天是");
        l4.setBounds(30,80,900,130);
        l4.setFont(new Font("华文行楷", 1, 30));
        l4.setForeground(Color.GREEN);
        pan0.add(l4);
        pan0.add(new NowTime(pan0));//时间显示;

        pan1=new JPanel();
       // pan1.setOpaque(false);
        pan1.setBounds(450,170,app.getWidth()-500,app.getHeight()-352);
        pan2=new JPanel();
        pan2.setBounds(20,170,250,452);


        pan0.add(pan1);
        pan0.add(pan2);

        用户信息管理=new JButton("用户信息管理");
        int x0=30;
        int p1=175;
        用户信息管理.setBounds(x0,app.getHeight()/10,150,40);
        pan0.add(用户信息管理);
        用户信息管理.addActionListener(this);
        记账管理=new JButton(" 记账管理 ");
        记账管理.setBounds(p1*1+x0,app.getHeight()/10,150,40);
        pan0.add(记账管理);
        记账管理.addActionListener(this);
        账户管理=new JButton(" 账户管理 ");
        账户管理.setBounds(p1*2+x0,app.getHeight()/10,150,40);
        pan0.add(账户管理);
        账户管理.addActionListener(this);
        科目管理=new JButton(" 科目管理 ");
        科目管理.setBounds(p1*3+x0,app.getHeight()/10,150,40);
        pan0.add(科目管理);
        科目管理.addActionListener(this);
        账志报表管理=new JButton("账志报表管理");
        账志报表管理.setBounds(p1*4+x0,app.getHeight()/10,150,40);
        pan0.add(账志报表管理);
        账志报表管理.addActionListener(this);
        预警管理=new JButton(" 预警管理 ");
        预警管理.setBounds(p1*5+x0,app.getHeight()/10,150,40);
        pan0.add(预警管理);
        预警管理.addActionListener(this);
        系统退出=new JButton(" 系统退出 ");
        系统退出.setBounds(p1*6+x0,app.getHeight()/10,150,40);
        pan0.add(系统退出);
        系统退出.addActionListener(this);



        app.setVisible(false);
        app.setVisible(true);


    }





    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==用户信息管理){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            pan2.removeAll();
            new 用户信息管理(pan1,pan2);
            pan1.setVisible(true);
            pan2.setVisible(true);
        }
       if(e.getSource()==记账管理){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            pan2.removeAll();
            new 记账管理(pan1,pan2);
            pan1.setVisible(true);
            pan2.setVisible(true);
        }
        if(e.getSource()==账户管理){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            pan2.removeAll();
            new 账户管理(pan1,pan2);
            pan1.setVisible(true);
            pan2.setVisible(true);
        }
        if(e.getSource()==科目管理){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            pan2.removeAll();
            new 科目管理(pan1,pan2);
            pan1.setVisible(true);
            pan2.setVisible(true);
        }
        if(e.getSource()==账志报表管理){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            pan2.removeAll();
            new 账志报表管理(pan1,pan2);
            pan1.setVisible(true);
            pan2.setVisible(true);
        }
        if(e.getSource()==预警管理){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            new 预警管理(pan1).checkMonthlyExpense(5000);  // 检查本月支出是否超过5000元
            new 预警管理(pan1).checkWeeklyExpense(2000);  // 检查本周支出是否超过2000元
            pan2.removeAll();
            pan1.setVisible(true);
            pan2.setVisible(true);

        }
        if(e.getSource()==系统退出){
            pan1.setVisible(false);
            pan1.removeAll();
            pan2.setVisible(false);
            pan2.removeAll();
            系统退出 exit=new 系统退出(pan1,pan2);
            pan1.add(exit);
            pan1.setVisible(true);
            pan2.setVisible(true);
        }




    }
}



Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐