• SpringBoot+Vue+Element-UI实现家庭理财记账管理系统


    文末获取源码

    开发语言:Java

    框架:springboot

    JDK版本:JDK1.8

    服务器:tomcat7

    数据库:mysql 5.7/8.0

    数据库工具:Navicat11

    开发软件:eclipse/myeclipse/idea

    Maven包:Maven3.3.9

    浏览器:谷歌浏览器

    前言介绍 

    家庭理财记账系统主要是为了提高用户的工作效率和更方便快捷的满足用户,更好存储所有数据信息及快速方便的检索功能,对家庭理财记账系统的各个模块是通过许多今天的发达家庭理财记账系统做出合理的分析来确定考虑用户的可操作性,遵循开发的系统优化的原则,经过全面的调查和研究。

    家庭理财记账系统所要实现的功能分析,对于现在网络方便,家庭理财记账系统要实现管理员、用户可以直接在平台上进行查看自己所需数据信息,这样既能节省管理的时间,不用再像传统的方式,如果用户想要进行交流信息,必须双方见面进行沟通交流所需的信息,由于很多用户时间的原因,没有办法进行见面沟通交流,真的很难满足用户的各种需求。所以家庭理财记账系统的开发不仅仅是能满足用户的需求,还能提高用户的使用率。所以系统管理必须要更快捷、有效、长期地为用户或潜在用户传递信息。建立一个家庭理财记账系统更好的交流平台,提高系统对用户交流后的信息服务的效率。此系统可以满足大多数用户所提出的问题,用户可以根据自身的需求获取相应的服务,为系统管理提供了快捷的途径。

    家庭理财记账系统用户端要求在浏览器上可以运行,主要实现了管理端;首页、个人中心、用户管理、家庭账户管理、收入分类管理、支出分类信息管理、家庭收入管理、家庭支出管理、银行储蓄管理、系统管理、投资理财管理,用户端;首页、家庭账户管理、收入分类管理、银行储蓄管理、投资理财管理等主要功能模块的操作和管理。

    系统结构图

    数据库设计表

    此系统需要后台数据库,下面介绍数据库中的各个表的详细信息。

    表1:gonggao

    列名

    数据类型

    长度

    约束

    id

    bigint

    19

    NOT NULL

    addtime

    varchar

    2000

     NULL DEFAULT

    gonggaobianhao

    tinyint

    2

     NULL DEFAULT

    biaoti

    varchar

    2

    NOT NULL

    xiangguantupian

    varchar

    2

    NOT NULL

    gonggaoneirong

    varchar

    2

    NOT NULL

    faburiqi

    varchar

    2

    NOT NULL

    表2:licai

    列名

    数据类型

    长度

    约束

    id

    int

    11

    NOT NULL

    addtime

    varchar

    255

    NOT NULL

    licaihaoma

    varchar

    255

    NOT NULL

    licaimingcheng

    varchar

    2

    NOT NULL

    licaijianjie

    varchar

    2

    NOT NULL

    xiangguantupian

    varchar

    2

    NOT NULL

    licaileixing

    varchar

    2

    NOT NULL

    fuzeren

    varchar

    2

    NOT NULL

    suoshugongsi

    varchar

    2

    NOT NULL

    yujinianshouyi

    varchar

    2

    NOT NULL

    faburiqi

    varchar

    2

    NOT NULL

    表3:liushuixinxi

    列名

    数据类型

    长度

    约束

    id

     int

    9

    NOT NULL

    addtime

    char

    5

    NOT NULL

    xiangmubianhao

    char

    5

    NOT NULL

    xiaofeimingcheng

    char

    5

    NOT NULL

    xiaofeijine

    char

    5

    NOT NULL

    xiaofeiriqi

    char

    5

    NOT NULL

    gerenzhanghao

    char

    5

    NOT NULL

    xingming

    char

    5

    NOT NULL

    xiangpian

    char

    5

    NOT NULL

    表4:mubiaojihua

    列名

    数据类型

    长度

    约束

    id

     int

    9

    NOT NULL

    addtime

    char

    5

    NOT NULL

    jihuabianhao

    char

    5

    NOT NULL

    jihuamingcheng

    char

    5

    NOT NULL

    shouyifenlei

    char

    5

    NOT NULL

    shouyijine

    char

    5

    NOT NULL

    gerenzhanghao

    char

    5

    NOT NULL

    xingming

    char

    5

    NOT NULL

    xiangpian

    char

    5

    NOT NULL

    dengjiriqi

    char

    5

    NOT NULL

    系统详细设计 

    本系统使用了java和mysql结合的结构开发了家庭理财记账系统应用,系统中所有和数据库有关系的操作都通过一个通用类来实现,大大提高了代码的耦合性,当数据库类型等信息变化后直接修改类文件就可以了,不再需要每个页面都修改。另外本系统解决了中文的问题,也是在配置文件中添加了编码方式的形式解决的,本系统另外一个大的特点是系统对数据库的操作都单独的写在了一个类里,这样对系统的所有数据库操作都只访问这个类就可以了,不要每个页面都去写数据库的操作,提高了系统的集成性。

    用户端功能模块

    用户注册

    在用户注册页面可以填写个人账号、姓名、身份证号码、手机号码等信息,进行注册如图

    用户登录

    在用户登录页面填写账号、密码进行登录如图

    用户登录到家庭理财记账系统可以查看首页、家庭账户管理、收入分类管理、银行储蓄管理等内容,如图 

    家庭账户

    在家庭账户页面可以查看家庭账户号码、家庭账户名称、家庭账户简介、相关图片、家庭账户类型、负责人、所属公司、预计年收益、发布日期、价格等信息,如图

    在用户信息页面可以填写个人账号、姓名、性别、年龄、身份证号码、手机号码、头像等信息,并可根据需要进行保存、退出登录,如图

    管理端功能界面

    用户管理

    通过填写个人账号、姓名、性别、年龄、身份证号码、手机号码、头像等信息进行详情、修改、删除操作,如图

    家庭账户管理

    通过填写用户名,账户号,用户姓名,金额等信息进行修改、删除操作,如图

     

    收入分类管理

    通过填写收入分类名等信息进行详情、修改、删除操作,如图

     

    支出分类信息管理

    通过填写支出分类名等信息进行详情、修改、删除操作,如图 

    家庭收入管理

    通过填写用户名,用户姓名,账户号,收入分类,金额,日期,备注等信息进行详情、修改、删除操作,如图 

    家庭支出管理

    通过填写用户名,用户姓名,账户号,支出分类,金额,日期,备注等信息进行详情、修改操作,如图 

    部分核心代码 

    上传文件

    1. /**
    2. * 上传文件映射表
    3. */
    4. @RestController
    5. @RequestMapping("file")
    6. @SuppressWarnings({"unchecked","rawtypes"})
    7. public class FileController{
    8. @Autowired
    9. private ConfigService configService;
    10. /**
    11. * 上传文件
    12. */
    13. @RequestMapping("/upload")
    14. public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
    15. if (file.isEmpty()) {
    16. throw new EIException("上传文件不能为空");
    17. }
    18. String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
    19. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
    20. if(!path.exists()) {
    21. path = new File("");
    22. }
    23. File upload = new File(path.getAbsolutePath(),"/upload/");
    24. if(!upload.exists()) {
    25. upload.mkdirs();
    26. }
    27. String fileName = new Date().getTime()+"."+fileExt;
    28. File dest = new File(upload.getAbsolutePath()+"/"+fileName);
    29. file.transferTo(dest);
    30. if(StringUtils.isNotBlank(type) && type.equals("1")) {
    31. ConfigEntity configEntity = configService.selectOne(new EntityWrapper().eq("name", "faceFile"));
    32. if(configEntity==null) {
    33. configEntity = new ConfigEntity();
    34. configEntity.setName("faceFile");
    35. configEntity.setValue(fileName);
    36. } else {
    37. configEntity.setValue(fileName);
    38. }
    39. configService.insertOrUpdate(configEntity);
    40. }
    41. return R.ok().put("file", fileName);
    42. }
    43. /**
    44. * 下载文件
    45. */
    46. @IgnoreAuth
    47. @RequestMapping("/download")
    48. public ResponseEntity<byte[]> download(@RequestParam String fileName) {
    49. try {
    50. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
    51. if(!path.exists()) {
    52. path = new File("");
    53. }
    54. File upload = new File(path.getAbsolutePath(),"/upload/");
    55. if(!upload.exists()) {
    56. upload.mkdirs();
    57. }
    58. File file = new File(upload.getAbsolutePath()+"/"+fileName);
    59. if(file.exists()){
    60. /*if(!fileService.canRead(file, SessionManager.getSessionUser())){
    61. getResponse().sendError(403);
    62. }*/
    63. HttpHeaders headers = new HttpHeaders();
    64. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    65. headers.setContentDispositionFormData("attachment", fileName);
    66. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    67. }
    68. } catch (IOException e) {
    69. e.printStackTrace();
    70. }
    71. return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
    72. }
    73. }

    家庭收入

    1. /**
    2. * 家庭收入
    3. * 后端接口
    4. * @author
    5. * @email
    6. * @date 2021-04-14 10:48:37
    7. */
    8. @RestController
    9. @RequestMapping("/jiatingshouru")
    10. public class JiatingshouruController {
    11. @Autowired
    12. private JiatingshouruService jiatingshouruService;
    13. /**
    14. * 后端列表
    15. */
    16. @RequestMapping("/page")
    17. public R page(@RequestParam Map<String, Object> params,JiatingshouruEntity jiatingshouru,
    18. HttpServletRequest request){
    19. String tableName = request.getSession().getAttribute("tableName").toString();
    20. if(tableName.equals("yonghu")) {
    21. jiatingshouru.setYonghuming((String)request.getSession().getAttribute("username"));
    22. }
    23. EntityWrapper<JiatingshouruEntity> ew = new EntityWrapper<JiatingshouruEntity>();
    24. PageUtils page = jiatingshouruService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiatingshouru), params), params));
    25. return R.ok().put("data", page);
    26. }
    27. /**
    28. * 前端列表
    29. */
    30. @RequestMapping("/list")
    31. public R list(@RequestParam Map<String, Object> params,JiatingshouruEntity jiatingshouru, HttpServletRequest request){
    32. EntityWrapper<JiatingshouruEntity> ew = new EntityWrapper<JiatingshouruEntity>();
    33. PageUtils page = jiatingshouruService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiatingshouru), params), params));
    34. return R.ok().put("data", page);
    35. }
    36. /**
    37. * 列表
    38. */
    39. @RequestMapping("/lists")
    40. public R list( JiatingshouruEntity jiatingshouru){
    41. EntityWrapper<JiatingshouruEntity> ew = new EntityWrapper<JiatingshouruEntity>();
    42. ew.allEq(MPUtil.allEQMapPre( jiatingshouru, "jiatingshouru"));
    43. return R.ok().put("data", jiatingshouruService.selectListView(ew));
    44. }
    45. /**
    46. * 查询
    47. */
    48. @RequestMapping("/query")
    49. public R query(JiatingshouruEntity jiatingshouru){
    50. EntityWrapper< JiatingshouruEntity> ew = new EntityWrapper< JiatingshouruEntity>();
    51. ew.allEq(MPUtil.allEQMapPre( jiatingshouru, "jiatingshouru"));
    52. JiatingshouruView jiatingshouruView = jiatingshouruService.selectView(ew);
    53. return R.ok("查询家庭收入成功").put("data", jiatingshouruView);
    54. }
    55. /**
    56. * 后端详情
    57. */
    58. @RequestMapping("/info/{id}")
    59. public R info(@PathVariable("id") Long id){
    60. JiatingshouruEntity jiatingshouru = jiatingshouruService.selectById(id);
    61. return R.ok().put("data", jiatingshouru);
    62. }
    63. /**
    64. * 前端详情
    65. */
    66. @RequestMapping("/detail/{id}")
    67. public R detail(@PathVariable("id") Long id){
    68. JiatingshouruEntity jiatingshouru = jiatingshouruService.selectById(id);
    69. return R.ok().put("data", jiatingshouru);
    70. }
    71. /**
    72. * 后端保存
    73. */
    74. @RequestMapping("/save")
    75. public R save(@RequestBody JiatingshouruEntity jiatingshouru, HttpServletRequest request){
    76. jiatingshouru.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    77. //ValidatorUtils.validateEntity(jiatingshouru);
    78. jiatingshouruService.insert(jiatingshouru);
    79. return R.ok();
    80. }
    81. /**
    82. * 前端保存
    83. */
    84. @RequestMapping("/add")
    85. public R add(@RequestBody JiatingshouruEntity jiatingshouru, HttpServletRequest request){
    86. jiatingshouru.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    87. //ValidatorUtils.validateEntity(jiatingshouru);
    88. jiatingshouruService.insert(jiatingshouru);
    89. return R.ok();
    90. }
    91. /**
    92. * 修改
    93. */
    94. @RequestMapping("/update")
    95. public R update(@RequestBody JiatingshouruEntity jiatingshouru, HttpServletRequest request){
    96. //ValidatorUtils.validateEntity(jiatingshouru);
    97. jiatingshouruService.updateById(jiatingshouru);//全部更新
    98. return R.ok();
    99. }
    100. /**
    101. * 删除
    102. */
    103. @RequestMapping("/delete")
    104. public R delete(@RequestBody Long[] ids){
    105. jiatingshouruService.deleteBatchIds(Arrays.asList(ids));
    106. return R.ok();
    107. }
    108. /**
    109. * 提醒接口
    110. */
    111. @RequestMapping("/remind/{columnName}/{type}")
    112. public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
    113. @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    114. map.put("column", columnName);
    115. map.put("type", type);
    116. if(type.equals("2")) {
    117. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    118. Calendar c = Calendar.getInstance();
    119. Date remindStartDate = null;
    120. Date remindEndDate = null;
    121. if(map.get("remindstart")!=null) {
    122. Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
    123. c.setTime(new Date());
    124. c.add(Calendar.DAY_OF_MONTH,remindStart);
    125. remindStartDate = c.getTime();
    126. map.put("remindstart", sdf.format(remindStartDate));
    127. }
    128. if(map.get("remindend")!=null) {
    129. Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
    130. c.setTime(new Date());
    131. c.add(Calendar.DAY_OF_MONTH,remindEnd);
    132. remindEndDate = c.getTime();
    133. map.put("remindend", sdf.format(remindEndDate));
    134. }
    135. }
    136. Wrapper<JiatingshouruEntity> wrapper = new EntityWrapper<JiatingshouruEntity>();
    137. if(map.get("remindstart")!=null) {
    138. wrapper.ge(columnName, map.get("remindstart"));
    139. }
    140. if(map.get("remindend")!=null) {
    141. wrapper.le(columnName, map.get("remindend"));
    142. }
    143. String tableName = request.getSession().getAttribute("tableName").toString();
    144. if(tableName.equals("yonghu")) {
    145. wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
    146. }
    147. int count = jiatingshouruService.selectCount(wrapper);
    148. return R.ok().put("count", count);
    149. }
    150. }

  • 相关阅读:
    数据中台:数据中台技术架构详解
    「双指针技巧解决一些数组问题」
    华为路由器AR6300 取消密码重置提醒和密码长期有效
    集合体系【List+Set+Map+HashMap+TreeSet】
    LeetCode287之寻找重复数(相关话题:二分查找,快慢指针)
    .Net6 之 asp.net core webapi Swagger 版本控制及接口注释说明
    攻防世界看雪看雪看雪
    XS-Leaks(跨站点泄漏)攻击和预防
    ubuntu服务器中运行flask
    【Ribbon】SpringCloud的Ribbon负载均衡使用
  • 原文地址:https://blog.csdn.net/m0_49113107/article/details/125247307