{"id":19891127,"url":"https://github.com/xenv/smallaccount","last_synced_at":"2025-07-10T17:06:56.878Z","repository":{"id":50433392,"uuid":"110326323","full_name":"xenv/SmallAccount","owner":"xenv","description":"小小记账本，拥有基础记账功能，是一个完整的JAVA (J2SE) 练手+自用的小项目，使用Swing和SQLite数据库，多层设计","archived":false,"fork":false,"pushed_at":"2018-07-01T09:43:10.000Z","size":9424,"stargazers_count":87,"open_issues_count":0,"forks_count":35,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-02T18:53:12.079Z","etag":null,"topics":["java","pratice"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xenv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-11T07:17:12.000Z","updated_at":"2025-04-08T07:20:47.000Z","dependencies_parsed_at":"2022-09-24T03:34:17.231Z","dependency_job_id":null,"html_url":"https://github.com/xenv/SmallAccount","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/xenv/SmallAccount","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xenv%2FSmallAccount","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xenv%2FSmallAccount/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xenv%2FSmallAccount/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xenv%2FSmallAccount/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xenv","download_url":"https://codeload.github.com/xenv/SmallAccount/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xenv%2FSmallAccount/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264614793,"owners_count":23637654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","pratice"],"created_at":"2024-11-12T18:17:11.432Z","updated_at":"2025-07-10T17:06:56.860Z","avatar_url":"https://github.com/xenv.png","language":"Java","readme":"# SmallAccount\n小小记账本，拥有基础记账功能，是一个JAVA (J2SE) 练手+自用的小项目。\n\n* 实现了基础记账功能\n    - [x] 记账分类的增改删查\n    - [x] 记账记录的增改删查\n    - [x] 月度一览和月度每日统计（柱状图）\n    - [x] 配置信息的修改与保存 （每月预算）\n    - [x] 数据导出、导入和重置\n\n* 使用Swing和SQLite数据库，无需额外配置数据库\n* Entity层、DAO层、Service层和GUI层分离，GUI层界面、数据、监听器分离\n* 面板使用单例模式，数据库采用外键约束\n* 带有详细的注释\n\n## 启动\n入口为\n```\nstartup.Bootstrap.main\n```\n\n## 演示\n![](https://github.com/xenv/SmallAccount/blob/master/resources/github/demo.gif?raw=true)\n\n\n## 目录结构\n\n```\n├─db \n│      data.db 数据库\n│      \n├─lib \n│      chart.jar                        表格库\n│      pgslookandfeel-1.1.2.jar         皮肤库\n│      sqlite-jdbc-3.20.0.jar           SQLite JDBC\n│      swingx-core-1.6.2.jar            日期控件\n│              \n├─resources\n│  ├─img                                图片资源（按钮图片）\n│  │      backup.png\n│  │      category1.png\n│  │      category2.png\n│  │      config.png\n│  │      home.png\n│  │      record.png\n│  │      report.png\n│  │      restore.png\n│          \n├─src\n│  ├─dao                                DAO操作类\n│  │      CategoryDAO.java\n│  │      ConfigDAO.java\n│  │      RecordDAO.java\n│  │      \n│  ├─entity                             实体类（三个表）\n│  │      Category.java\n│  │      Config.java\n│  │      Record.java\n│  │      \n│  ├─gui                                界面类\n│  │  ├─frame                           主框架\n│  │  │      MainFrame.java\n│  │  │      \n│  │  ├─listener                        监听器（按钮及菜单栏）\n│  │  │      BackupListener.java\n│  │  │      CategoryListener.java\n│  │  │      ConfigListener.java\n│  │  │      RecordListener.java\n│  │  │      RecoverListener.java\n│  │  │      ToolBarListener.java\n│  │  │      \n│  │  ├─model                           表格和下拉框的model\n│  │  │      CategoryComboBoxModel.java\n│  │  │      CategoryTableModel.java\n│  │  │      \n│  │  ├─page                            SpendPage的页面数据\n│  │  │      SpendPage.java\n│  │  │      \n│  │  └─panel                           主面板及其他面板\n│  │          BackupPanel.java\n│  │          CategoryPanel.java\n│  │          ConfigPanel.java\n│  │          MainPanel.java\n│  │          RecordPanel.java\n│  │          RecoverPanel.java\n│  │          ReportPanel.java\n│  │          SpendPanel.java\n│  │          WorkingPanel.java\n│  │          \n│  ├─service                            负责部分业务逻辑\n│  │      CategoryService.java\n│  │      ConfigService.java\n│  │      RecordService.java\n│  │      ReportService.java\n│  │      SpendService.java\n│  │      \n│  ├─startup                            启动类\n│  │      Bootstrap.java\n│  │      \n│  └─util                               工具类\n│          CenterPanel.java\n│          ChartUtil.java\n│          CircleProgressBar.java\n│          ColorUtil.java\n│          DateUtil.java\n│          DBUtil.java\n│          GUIUtil.java\n│          SQLUtil.java\n```\n\n\n## 数据库结构\ndb/data.db已经包含了完整的数据结构和测试数据\n```sqlite\nCREATE TABLE config (\n    id    INTEGER       PRIMARY KEY AUTOINCREMENT\n                        NOT NULL,\n    key_  VARCHAR (255) UNIQUE,\n    value VARCHAR (255) \n);\n\nCREATE TABLE category (\n    id   INTEGER       PRIMARY KEY AUTOINCREMENT\n                       NOT NULL,\n    name VARCHAR (255) UNIQUE\n                       NOT NULL\n);\n\nCREATE TABLE record (\n    id      INTEGER PRIMARY KEY AUTOINCREMENT\n                    NOT NULL,\n    cid     INTEGER CONSTRAINT fk_record_category REFERENCES category (id),\n    spend   INTEGER NOT NULL,\n    comment TEXT,\n    date    DATE\n);\n\n```\n\n## 启动流程\n```\nstartup.Bootstrap.main()            主类\n↓\ngui.panel.MainFrame.instance        程序窗体\n├─gui.listener.ToolBarListener等    监控按钮操作\n↓\ngui.panel.MainPanel.instance        底层Panel及导航栏\n↓\nMainPanel.instance.workingPanel     功能Panel的底Panel，实现了居中的功能\n↓\ngui.panel.SpendPanel.instance       本月一览界面\n↓\ngui.panel.*                         通过监控菜单栏实现其他Panel的切换\n```\n\n## License\n   \nGPL v3.0","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxenv%2Fsmallaccount","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxenv%2Fsmallaccount","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxenv%2Fsmallaccount/lists"}