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

用户端功能模块

用户注册

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

用户登录

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

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

家庭账户

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

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

管理端功能界面

用户管理

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

家庭账户管理

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

 

收入分类管理

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

 

支出分类信息管理

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

家庭收入管理

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

家庭支出管理

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

部分核心代码 

上传文件

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

家庭收入

/**
 * 家庭收入
 * 后端接口
 * @author 
 * @email 
 * @date 2021-04-14 10:48:37
 */
@RestController
@RequestMapping("/jiatingshouru")
public class JiatingshouruController {
    @Autowired
    private JiatingshouruService jiatingshouruService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,JiatingshouruEntity jiatingshouru,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			jiatingshouru.setYonghuming((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<JiatingshouruEntity> ew = new EntityWrapper<JiatingshouruEntity>();
		PageUtils page = jiatingshouruService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiatingshouru), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,JiatingshouruEntity jiatingshouru, HttpServletRequest request){
        EntityWrapper<JiatingshouruEntity> ew = new EntityWrapper<JiatingshouruEntity>();
		PageUtils page = jiatingshouruService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiatingshouru), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( JiatingshouruEntity jiatingshouru){
       	EntityWrapper<JiatingshouruEntity> ew = new EntityWrapper<JiatingshouruEntity>();
      	ew.allEq(MPUtil.allEQMapPre( jiatingshouru, "jiatingshouru")); 
        return R.ok().put("data", jiatingshouruService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(JiatingshouruEntity jiatingshouru){
        EntityWrapper< JiatingshouruEntity> ew = new EntityWrapper< JiatingshouruEntity>();
 		ew.allEq(MPUtil.allEQMapPre( jiatingshouru, "jiatingshouru")); 
		JiatingshouruView jiatingshouruView =  jiatingshouruService.selectView(ew);
		return R.ok("查询家庭收入成功").put("data", jiatingshouruView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        JiatingshouruEntity jiatingshouru = jiatingshouruService.selectById(id);
        return R.ok().put("data", jiatingshouru);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        JiatingshouruEntity jiatingshouru = jiatingshouruService.selectById(id);
        return R.ok().put("data", jiatingshouru);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody JiatingshouruEntity jiatingshouru, HttpServletRequest request){
    	jiatingshouru.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiatingshouru);
        jiatingshouruService.insert(jiatingshouru);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody JiatingshouruEntity jiatingshouru, HttpServletRequest request){
    	jiatingshouru.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiatingshouru);
        jiatingshouruService.insert(jiatingshouru);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody JiatingshouruEntity jiatingshouru, HttpServletRequest request){
        //ValidatorUtils.validateEntity(jiatingshouru);
        jiatingshouruService.updateById(jiatingshouru);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        jiatingshouruService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<JiatingshouruEntity> wrapper = new EntityWrapper<JiatingshouruEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		}

		int count = jiatingshouruService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现头像上传,可以结合Spring Boot后端框架,Vue前端框架以及Element UI组件库进行实现。 首先,在Vue前端页面中,可以使用Element UI中的Upload组件实现文件上传功能。可以在页面中定义一个Upload组件,设置action属性为上传接口的URL,设置headers属性为请求头部信息,设置on-success属性为上传成功后的回调函数。具体代码如下: ``` <template> <div> <el-upload class="avatar-uploader" action="/api/uploadAvatar" :headers="{ Authorization: 'Bearer ' + token }" :show-file-list="false" :on-success="handleSuccess"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </template> <script> import { getToken } from '@/utils/auth' export default { data() { return { imageUrl: '', token: getToken() } }, methods: { handleSuccess(response) { this.imageUrl = response.data.url } } } </script> ``` 其中,token是用于认证的令牌,可以通过getToken函数获取。handleSuccess函数是上传成功后的回调函数,其中response.data.url表示上传成功后的图片URL。 然后,在Spring Boot后端接口中,可以使用Spring MVC的注解@RequestParam来接收上传的文件。具体代码如下: ``` @RestController @RequestMapping("/api") public class UploadController { @PostMapping("/uploadAvatar") public JsonResult uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException { // 处理上传的文件 return JsonResult.ok("url", "http://www.example.com/avatar.jpg"); } } ``` 其中,@PostMapping注解表示接收POST请求,@RequestParam("file")注解表示接收名为file的文件参数。处理上传的文件后,可以返回一个JsonResult对象,其中包含上传成功后的图片URL。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一季春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值