一天撸一个财务APP系统【安卓端+前端+后端】

article/2025/9/12 22:08:23

昨天有个粉丝朋友也想学开发Web和小程序、安卓,问可以在大学学会吗?

在学校学到的东西真的有限:

在很多的高校,有一些教授是学院派的,他们没有做过多少开发工作,上课就是照本宣科,讲的知识点都是陈年落伍的技术,更别说带学生做项目了。

现在的很多硕博学生帮老师做课件,然后老师上课一顿读。

当然有的老师开发能力也是很强的,他们有开发经验,可以更加全面地理解技术知识点,然后传递给学生,也能拿到一些科研项目,然后带学生实战。

但是,但是,这种老师少之又少。我平时辅导过大量的计算机学生,也有个VIP群,很多学习VIP项目的小伙伴,也变得越来越强,

我总结出来,大部门计算机教学水平真的一般般:

1,教材落后,还有很多Java课程在教Swing/SSH框架,这已经是淘汰多少年的技术了。

2,实战不足。学生在大学期间代码量极少,少得可怜,没有项目实战。找工作和企业的要求无法匹配。

3,教授课程方式极其落后。这是计算机啊,不是汇报工作,你全课程ppt有啥用。是念ppt学生能理解,还是给学生实操下项目,学生可以理解????

4,课后辅导比较差。在国外的一些名校,老师每周抽出三个小时作为 office hour,国内的老师下课,直接拍屁股走人,课后没有辅导。

昨天没事,开发了一个APP的财务系统,如果需要学习开发,可以一起啊!加油,奥利给!

一,系统的技术栈

移动端,采用安卓进行开发,Android它应用于安卓系统软件和程序开发,其由谷歌公司推出,目前在国际市场上有着广泛的应用及开发环境,并不瘦限制研发人员能够通过修改开放的源代码来实现各种使用的 APP软件,开发的软件程序具有界面友好稳定性好等特点,安卓系统架构图具体如下:
在这里插入图片描述

后端采用的Java进行开发的,数据库采用的Mysql。

系统的功能架构:
在这里插入图片描述

二,系统界面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
后台:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三,系统核心代码

/*** 小孟v:jishulearn*/
@Controller
@RequestMapping("/api")
public class ApiController {@Autowiredprivate UsersService userService;@Autowiredprivate ShouruService shouruService;@Autowiredprivate ZhichuService zhichuService;@Autowiredprivate GudingzhichuService gudingzhichuService;@Autowiredprivate GudingzhichuleixService gudingzhichuleixService;@Autowiredprivate ShourutypeService shourutypeService;@Autowiredprivate ZhichutypeService zhichutypeService;@Autowiredprivate WenzhangService wenzhangService;@Autowiredprivate GonggaoService gonggaoService;@PostMapping("/userlogin")@ResponseBodypublic JsonResult login(String username, String password) {if (username == null || username.trim().isEmpty()) return JsonResult.error("请输入账号");if (password == null || password.trim().isEmpty()) return JsonResult.error("请输入密码");Users user = userService.getOne(new QueryWrapper<Users>().eq("username", username).eq("password", password));if (user != null) {return JsonResult.ok("登录成功").setData(user);} else {return JsonResult.error("用户名或密码错误");}}@PostMapping("/userreg")@ResponseBodypublic JsonResult reg(String username, String password, String nickname, String dianhua, String youxiang,String image) {if (username == null || username.trim().isEmpty()) return JsonResult.error("请输入账号");if (password == null || password.trim().isEmpty()) return JsonResult.error("请输入密码");if (nickname == null || nickname.trim().isEmpty()) return JsonResult.error("请输入真实姓名");if (dianhua == null || dianhua.trim().isEmpty()) return JsonResult.error("请输入电话");if (youxiang == null || youxiang.trim().isEmpty()) return JsonResult.error("请输入邮箱");Users user1 = new Users();user1.setUsername(username);user1.setNickname(nickname);user1.setPassword(password);user1.setDianhua(dianhua);user1.setYouxiang(youxiang);user1.setImage(image);Users user = userService.getOne(new QueryWrapper<Users>().eq("username", username));if (user!=null){return JsonResult.error("用户名已经存在,请重试!");}if (userService.save(user1)) {return JsonResult.ok("注册成功");}return JsonResult.error("注册失败");}@PostMapping("/userupdate")@ResponseBodypublic JsonResult update(Integer id, String username, String password, String nickname) {if (username == null || username.trim().isEmpty()) return JsonResult.error("请输入账号");if (password == null || password.trim().isEmpty()) return JsonResult.error("请输入密码");if (nickname == null || nickname.trim().isEmpty()) return JsonResult.error("请输入真实姓名");Users userone = userService.getById(id);if (userone == null) {return JsonResult.ok("用户不存在!");}userone.setUsername(username);userone.setPassword(password);userone.setNickname(nickname);if (userService.updateById(userone)) {return JsonResult.ok("修改成功");}return JsonResult.error("修改失败");}@PostMapping("/userupdatePass")@ResponseBodypublic JsonResult updatePass(Integer id, String username, String password) {if (username == null || username.trim().isEmpty()) return JsonResult.error("请输入账号");if (password == null || password.trim().isEmpty()) return JsonResult.error("请输入密码");Users userone = userService.getById(id);if (userone == null) {return JsonResult.ok("用户不存在!");}userone.setUsername(username);userone.setPassword(password);if (userService.updateById(userone)) {return JsonResult.ok("修改成功");}return JsonResult.error("修改失败");}@PostMapping("/userupdateImage")@ResponseBodypublic JsonResult updateImage(Integer id, String image) {Users userone = userService.getById(id);if (userone == null) {return JsonResult.ok("用户不存在!");}userone.setImage(image);if (userService.updateById(userone)) {return JsonResult.ok("修改成功");}return JsonResult.error("修改失败");}@ResponseBody@RequestMapping("/shouru/list")public JsonResult ShouRuList(String username) {PageParam<Zhichu> pageParam = new PageParam<>();pageParam.put("username", username);List<Shouru> records = shouruService.listAll(pageParam.getNoPageParam());return JsonResult.ok().setData(records);}@ResponseBody@RequestMapping("/wenzhang/list")public JsonResult WenZhangList() {PageParam<Wenzhang> pageParam = new PageParam<>();List<Wenzhang> records = wenzhangService.listAll(pageParam.getNoPageParam());return JsonResult.ok().setData(records);}@ResponseBody@RequestMapping("/gonggao/list")public JsonResult GongGaoList() {PageParam<Gonggao> pageParam = new PageParam<>();List<Gonggao> records = gonggaoService.listAll(pageParam.getNoPageParam());return JsonResult.ok().setData(records);}
/*** 管理* Created by xiaomeng,vx:jiushulearn*/
@Controller
@RequestMapping("/caiwu/gonggao")
public class GonggaoController extends BaseController {@Autowiredprivate GonggaoService gonggaoService;@RequestMapping()public String view() {return "caiwu/gonggao.html";}/*** 分页查询*/@ResponseBody@RequestMapping("/page")public PageResult<Gonggao> page(HttpServletRequest request) {PageParam<Gonggao> pageParam = new PageParam<>(request);return new PageResult<>(gonggaoService.page(pageParam, pageParam.getWrapper()).getRecords(), pageParam.getTotal());//return gonggaoService.listPage(pageParam);  // 使用关联查询}/*** 查询全部*/@ResponseBody@RequestMapping("/list")public JsonResult list(HttpServletRequest request) {PageParam<Gonggao> pageParam = new PageParam<>(request);return JsonResult.ok().setData(gonggaoService.list(pageParam.getOrderWrapper()));//List<Gonggao> records = gonggaoService.listAll(pageParam.getNoPageParam());  // 使用关联查询//return JsonResult.ok().setData(pageParam.sortRecords(records));}/*** 根据id查询*/@ResponseBody@RequestMapping("/get")public JsonResult get(Integer id) {return JsonResult.ok().setData(gonggaoService.getById(id));// 使用关联查询//PageParam<Gonggao> pageParam = new PageParam<>();//pageParam.put("id", id);//List<Gonggao> records = gonggaoService.listAll(pageParam.getNoPageParam());//return JsonResult.ok().setData(pageParam.getOne(records));}/*** 添加*/@ResponseBody@RequestMapping("/save")public JsonResult save(Gonggao gonggao) {if (gonggaoService.save(gonggao)) {return JsonResult.ok("添加成功");}return JsonResult.error("添加失败");}/*** 修改*/@ResponseBody@RequestMapping("/update")public JsonResult update(Gonggao gonggao) {if (gonggaoService.updateById(gonggao)) {return JsonResult.ok("修改成功");}return JsonResult.error("修改失败");}/*** 删除*/@ResponseBody@RequestMapping("/remove")public JsonResult remove(Integer id) {if (gonggaoService.removeById(id)) {return JsonResult.ok("删除成功");}return JsonResult.error("删除失败");}/*** 批量添加*/@ResponseBody@RequestMapping("/saveBatch")public JsonResult saveBatch(@RequestBody List<Gonggao> list) {if (gonggaoService.saveBatch(list)) {return JsonResult.ok("添加成功");}return JsonResult.error("添加失败");}/*** 批量修改*/@ResponseBody@RequestMapping("/updateBatch")public JsonResult updateBatch(@RequestBody BatchParam<Gonggao> batchParam) {if (batchParam.update(gonggaoService, "id")) {return JsonResult.ok("修改成功");}return JsonResult.error("修改失败");}
@Controller
@RequestMapping("/caiwu/gudingzhichu")
public class GudingzhichuController extends BaseController {@Autowiredprivate GudingzhichuService gudingzhichuService;@Autowiredprivate GudingzhichuleixService gudingzhichuleixService;private List<String> shijianleixing=new ArrayList<>();@RequestMapping()public String view(Model model) {model.addAttribute("leixing",gudingzhichuleixService.list());//每周  每月  每年  一直shijianleixing.add("每周");shijianleixing.add("每月");shijianleixing.add("每年");shijianleixing.add("一直");model.addAttribute("shijianleixing", shijianleixing);return "caiwu/gudingzhichu.html";}/*** 分页查询*/@ResponseBody@RequestMapping("/page")public PageResult<Gudingzhichu> page(HttpServletRequest request) {PageParam<Gudingzhichu> pageParam = new PageParam<>(request);return new PageResult<>(gudingzhichuService.page(pageParam, pageParam.getWrapper()).getRecords(), pageParam.getTotal());//return gudingzhichuService.listPage(pageParam);  // 使用关联查询}/*** 查询全部*/@ResponseBody@RequestMapping("/list")public JsonResult list(HttpServletRequest request) {PageParam<Gudingzhichu> pageParam = new PageParam<>(request);return JsonResult.ok().setData(gudingzhichuService.list(pageParam.getOrderWrapper()));//List<Gudingzhichu> records = gudingzhichuService.listAll(pageParam.getNoPageParam());  // 使用关联查询//return JsonResult.ok().setData(pageParam.sortRecords(records));}/*** 根据id查询*/@ResponseBody@RequestMapping("/get")public JsonResult get(Integer id) {return JsonResult.ok().setData(gudingzhichuService.getById(id));// 使用关联查询//PageParam<Gudingzhichu> pageParam = new PageParam<>();//pageParam.put("id", id);//List<Gudingzhichu> records = gudingzhichuService.listAll(pageParam.getNoPageParam());//return JsonResult.ok().setData(pageParam.getOne(records));}/*** 添加*/@ResponseBody@RequestMapping("/save")public JsonResult save(Gudingzhichu gudingzhichu) {if (gudingzhichuService.save(gudingzhichu)) {return JsonResult.ok("添加成功");}return JsonResult.error("添加失败");}/*** 修改*/@ResponseBody@RequestMapping("/update")public JsonResult update(Gudingzhichu gudingzhichu) {if (gudingzhichuService.updateById(gudingzhichu)) {return JsonResult.ok("修改成功");}return JsonResult.error("修改失败");}

四,一起学习

前面小孟已经开源了很多的项目给大家,如果大家想一起学习,可以一起搞起。

关注下面弹出的公众号,回复:项目大全

全部是干货。

👇🏻 点击下面图片回复 项目大全 获取👇🏻


http://chatgpt.dhexx.cn/article/vVZtoPLI.shtml

相关文章

如何查看手机APP使用的前端框架?

一、首先获取该APP的apk包&#xff08;长按APP&#xff0c;点击‘分享’&#xff0c;分享到微信‘文件传输助手’&#xff0c;即可获得apk包--参考本博主上篇文章&#xff09;。 二、把apk扩展名改成.zip然后解压。不同的编译软件目录结果也不一样。&#xff08;为方便起见&am…

【网络协议】IPV4协议介绍

&#x1f4aa;本节内容&#xff1a;IPV4协议介绍、IPV4地址格式、IPV4数据格式及C项目结构体设计 &#x1f60f;【Qt6网络抓包工具项目实战】总导航目录&#xff08;建议收藏书签~~~&#xff09; ✌️ part1 &#x1f60f;【Qt6网络抓包工具项目实战】1.1Qt6.2.2环境搭建(免费…

DHCP协议

目录 1、DHCP协议 2、DHCP的工作过程 动态获取IP地址流程 跟新租期流程 解除租期流程 1、DHCP协议 DHCP(Dynamic Host Configuration Protocol)协议是处于应用层的协议。一个主机如果想正常上网&#xff0c;需要配置IP地址&#xff0c;子网掩码&#xff0c;默认网关基本配置…

TCP/IP-----协议号、端口号、ARP、icmp

文章目录 一、数据流向过程二、协议详解1&#xff09;ARP协议2&#xff09;ICMP协议 协议号 协议号是存在于IP数据报的首部的20字节的固定部分&#xff0c;占有8bit.该字段是指出此数据报所携带的是数据是使用何种协议&#xff0c;以便目的主机的IP层知道将数据部分上交给哪个处…

UDP协议

引言 本文中只关于IPv4&#xff1b;UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。总之&#xff0c;能没有的都没了。但它提供了差错检测&#xff0c;是一种端到端的校验和。因此使用它的程序必须自己实现…

BGP协议

BGP协议 工作层工作原理BGP简单配置———含密码认证配置个人图解BGP 工作层 BGP是工作在应用层的协议&#xff0c;但基于传输层的TCP协议 工作原理 路由协议通常分为内部网关协议&#xff08;IGP: Interior Gateway Protocol&#xff09;和外部网关协议&#xff08;EGP: Ext…

IP协议介绍

文章目录 定义特点作用寻址和路由&#xff1a;分片与重组&#xff1a; ①TCP分段与IP分片的区别&#xff1f;TCP分段IP分片什么是MSS&#xff1f;滑动窗口与MSS的区别&#xff1f; 什么是MTU&#xff1f;MSS与MTU的关系疑问UDP是否会进行分段&#xff1f;TCP分段后会进行IP分片…

华为 协议归纳总结

青出于蓝而胜于蓝 文章目录 一、路由优先级二、路由协议三、常见的永久组地址四、常用的UDP协议及端口号五、常用的TCP协议及端口号六、协议七、报文头格式 一些常用的知识点&#xff0c;经常用到&#xff0c;也很容易忘记、混淆&#xff0c;所以有必要去整理一下这些常用知识点…

管理距离 动态协议端口号 协议号

管理距离(Administrative Distance&#xff0c;简称AD ) 路由器可以通过多种途径获知路由条目∶如静态手工配置、各种动态路由协议等等。当路由器从两种不用的途径获知去往同一个目的地的两条路由&#xff0c;那么路由器会比较这两条路由的AD值&#xff0c;也就是管理距离&…

各协议的协议号和端口号

协议号与端口号详解 IP是网络层协议&#xff0c;IP头中的协议号用来说明IP报文中承载的是哪种协议&#xff08;一般是传输层协议&#xff0c;比如6 TCP&#xff0c;17 UDP&#xff1b;但也可能是网络层协议&#xff0c;比如1 ICMP&#xff1b;也可能是应用层协议&#xff0c;比…

TCP/IP协议号

转自http://www.52rd.com/Blog/Detail_RD.Blog_liweikui_22903.html&#xff0c;作者&#xff1a;liweikui IP协议号&#xff1a;IP首部中有8位协议号&#xff0c;用于指明IP的上层协议&#xff0c;具体如下&#xff1a; 协议号 协议类型 说明 0 HOPOPT IPv6逐跳选项 1…

MATLAB APP全局变量的使用

切换到代码视图&#xff0c;左上角代码浏览器点击属性&#xff0c;有如下提示&#xff1a; 点击➕旁边&#xff0c;会出现提示&#xff1a; 按照提示所说&#xff0c;在这里就可以添加全局变量了。 点击➕&#xff0c;在代码中便会添加如下代码&#xff1a; properties (Acce…

MATLAB GUI 设全局变量的位置

如果要在控件之外定义全局变量&#xff0c; 则这个全局变量要设置在OutputFcn下面 如图&#xff1a;

matlab 全局变量(global)数据类型报错问题

今天我在做matlab的GUI界面时&#xff0c;其中涉及到定义一个全局的元胞变量(cell)。将其摘录下来如下&#xff1a; clc;clear all global a s11;s2123;s3a; a(1,1:3){s1,s2,s3}然后出现错误&#xff1a;从 cell 转换为 double 时出现以下错误:错误使用 double无法从 cell 转换…

matlab 全局符号变量,优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

示例模型 在模型 matlab:rtwdemo_optimize_global_ebf 中&#xff0c;Assignment 模块将来自 Inport 模块和 Constant 模块的值赋给输出信号。输出信号馈入 Gain 模块中。 model rtwdemo_optimize_global_ebf; load_system(rtwdemo_optimize_global_ebf) 生成代码但不进行优化…

20220117 matlab 全局变量调试

要在外部和里面都定义global才行貌似 global f1function parameter_inpu__() global f1 f11;endglobal f1 b1 f_temp test1__(); dynamic_e()function parameter_inpu__() global f1 f11;endfunction test1__() global f1 b1 b1f1;endfunction dynamic_e() global f_temp f_te…

matlab变量全局化,matlab全局变量global

matlab global定义全局变量的问题 我写了matlab的一个主函数,放在一个M文件中,然后在这个主函数中调用其可以,前提是两个函数共用变量均需用global声明 例子: 保存f.m内容如下: function f(a,b) global x y; x=a; y=b; 保存g.m内容如下: function [out]=g global x y; ou…

matlab 编程之全局变量(global)和永久变量(persistent)

一、global 官方解释&#xff1a; help globalglobal Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function has itsown local variables, which are separate from those of other functions,and from those of th…

Matlab之全局变量

通过返回修改后的输入参数&#xff0c;可以实现函数内部对Matlab工作空间变量的修改。而另一种殊途同归的方法则是使用全局变量。 声明全局变量需要用到global关键词&#xff0c;语法格式为‘global variable’ 通过全局变量可以实现Matlab工作空间变量空间和多个函数的函数空间…