个人记账管理系统的设计与实现

e48545c5783d4f6280a915c1b43f9c23.png

个人记账管理系统演示

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

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

(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  系统背景美化

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

2265b25ae31d4e21b28066427a863d37.png

4bb38ac52a7a4bde834cbf82b56fa033.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);
        }




    }
}



  • 30
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
java语言写的android系统,用于个人账目管理,课程设计上写的欢迎下载 package moneymanager.moneymanager; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /* * * 데이터베이스를 관리하는 클래스입니다. * */ public class DBAdapter { private static final String TAG = "NotesDbAdapter"; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; // 데이터베이스이름과 테블이름들을 정의 private static final String DATABASE_NAME = "MoneyManagerDB"; private static final int DATABASE_VERSION = 2; private static final String DATABASE_SETTING_TABLE = "SettingTbl"; private static final String DATABASE_BADGET_TABLE = "BadgetTbl"; private static final String DATABASE_PAYMENT_TABLE = "PaymentTbl"; // 테블안의 항목들을 정의 public static final String KEY_SETTINGTBL_ID = "ID"; public static final String KEY_SETTINGTBL_NAME = "Name"; public static final String KEY_SETTINGTBL_VALUE = "Value"; public static final String KEY_BADGETTBL_ID = "ID"; public static final String KEY_BADGETTBL_ITEM = "Item"; public static final String KEY_BADGETTBL_MONEY = "Money"; public static final String KEY_PAYMENTTBL_ID = "ID"; public static final String KEY_PAYMENTTBL_BADGETID = "BadgetID"; public static final String KEY_PAYMENTTBL_OUTDATE = "OutDate"; public static final String KEY_PAYMENTTBL_MONEY = "Money"; public static final String KEY_PAYMENTTBL_NOTE = "Note"; private final Context mCtx; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String strCreateTbl; // SettingTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_SETTING_TABLE + " (" + KEY_SETTINGTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_SETTINGTBL_NAME + " TEXT NOT NULL, " + KEY_SETTINGTBL_VALUE + " TEXT NOT NULL);"; db.execSQL(strCreateTbl); // BadgetTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_BADGET_TABLE + " (" + KEY_BADGETTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_BADGETTBL_ITEM + " TEXT NOT NULL, " + KEY_BADGETTBL_MONEY + " INTEGER NOT NULL);"; db.execSQL(strCreateTbl); // PaymentTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_PAYMENT_TABLE + " (" + KEY_PAYMENTTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_PAYMENTTBL_BADGETID + " INTEGER NOT NULL, " + KEY_PAYMENTTBL_OUTDATE + " TEXT NOT NULL, " + KEY_PAYMENTTBL_MONEY + " INTEGER NOT NULL, " + KEY_PAYMENTTBL_NOTE + " TEXT);"; db.execSQL(strCreateTbl); } ......
好的,下面是一个个人记账管理系统系统设计: 1. 系统概述 本系统旨在帮助个人记录收入和支出,提供数据可视化和分析,让用户更好地了解和管理自己的财务状况。系统采用基于Web的架构,前端采用Vue.js框架进行开发,后端采用Django框架和MySQL数据库进行开发。 2. 系统功能模块设计 (1)用户管理模块 该模块包括用户注册、登录、修改密码、注销等功能,用户可以通过该模块进行账户管理。 (2)收支管理模块 该模块包括添加、编辑、删除收支记录等功能,用户可以通过该模块记录每一笔收入和支出。该模块还可以提供多种分类方式,如按时间、支出类型等,方便用户对支出进行分类管理。 (3)报表管理模块 该模块可以根据用户的记录数据自动生成收支报表,包括支出比例、收入支出对比等。用户可以通过该模块了解自己的消费习惯,调整自己的消费行为。 (4)数据分析模块 该模块提供多种数据可视化方式,如图表、统计分析等,让用户更方便地理解和管理自己的财务状况。用户可以通过该模块对数据进行深入分析,了解自己的消费情况。 (5)系统管理模块 该模块包括系统设置、日志管理等功能,管理员可以通过该模块对系统进行管理和维护。 3. 系统技术设计 (1)前端技术 本系统采用Vue.js框架进行前端开发,使用Element UI组件库进行UI设计。前端实现了用户登录、添加、编辑、删除收支记录等功能,同时提供了多种数据可视化方式,如图表、统计分析等。 (2)后端技术 本系统采用Django框架进行后端开发,使用MySQL数据库进行数据管理和存储。后端实现了用户管理、收支管理、报表管理、数据分析和系统管理等功能,通过RESTful API与前端进行数据交互。 4. 系统安全设计 为了确保系统的安全性,本系统采用了多重安全措施,包括用户登录验证、数据加密、防止SQL注入和XSS攻击等。同时,系统管理员可以对系统进行设置和管理,确保系统运行的稳定性和安全性。 5. 系统测试与部署 在系统测试方面,本系统采用了黑盒测试和白盒测试相结合的方式进行测试,确保系统的稳定性和可用性。在系统部署方面,本系统采用了Docker容器化技术,方便系统的快速部署和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值