Android快速实现一个财务APP程序详解

目录
  • 前言
  • 一,系统的技术栈
  • 二,系统界面
  • 三,系统核心代码

前言

昨天有个粉丝朋友也想学开发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 {
    @Autowired
    private UsersService userService;
    @Autowired
    private ShouruService shouruService;
    @Autowired
    private ZhichuService zhichuService;
    @Autowired
    private GudingzhichuService gudingzhichuService;
    @Autowired
    private GudingzhichuleixService gudingzhichuleixService;
    @Autowired
    private ShourutypeService shourutypeService;
    @Autowired
    private ZhichutypeService zhichutypeService;
    @Autowired
    private WenzhangService wenzhangService;
    @Autowired
    private GonggaoService gonggaoService;
    @PostMapping("/userlogin")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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 {
    @Autowired
    private 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 {
    @Autowired
    private GudingzhichuService gudingzhichuService;
    @Autowired
    private 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("修改失败");
    }

到此这篇关于Android快速实现一个财务APP程序详解的文章就介绍到这了,更多相关Android财务APP内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android 个人理财工具三:添加账单页面 上

    ColaBox 登记收支记录终于进入了复杂阶段了.这个界面我也是查找了很多资料以及打开android的源代码看了后才完成了,现在想来Google的开源真是明智的啊. 从前面的登录页面跳转进入添加账单页面.这个页面主要是用来登记收支记录的.说白了就是往数据库录入明细. 表结构如下: db.execSQL("CREATE TABLE bills ("                  + "_ID INTEGER PRIMARY KEY," //id          

  • Android 个人理财工具五:显示账单明细 上

    前面我们已经将每个月的收支明细存入到SQLite的数据表中,本文将实现从SQLite的数据表中取出这些数据显示为账单明细界面. 下图是最终的效果图: 在设计该界面时我考虑过好几个方案.本来准备使用一个gridview,因为觉得名字很像我需要的东西.可是后来查了一些资料,并且做了点实验,发现和我想象的有些差距.于是采用了目前这种方式.使用Listview. 这个界面布局实际上很简单,就是上面一个表头(Linearlayout),中间一个Listview,下面是一个脚注(Linearlayout).

  • Android 钱包支付之输入支付密码的实现步骤

    一.小伙伴们在做钱包支付中,相信会有个绕不过去的输入支付密码页面.下面小编给个效果图: 898342572738938468.png 实现的原理很简单,要点如下: a.自定义EditTextView b.自定义EditTextView嵌套入Dialog中,点击紧贴软键盘弹出. c.监听软键盘的弹出和收起事件,当软键盘收起,dialog也关闭. 二.下面开始讲述实现的步骤(围绕上面原理,按三个步骤阐述). 步骤1.自定义EditTextView.这里,小编采用的解决方案是网上一个开源的EditTe

  • Android 高仿微信转账金钱输入框规则

    微信转账输入框规则(可能不全) 1.小数点后两位 2.起始输入小数点,显示0. 3.删除到第一个位置是小数点的时候,第一个位置为0 ,避免出现小数点在第一个位置的情况 修改这个朋友的规则而来,他的规则在保证小数点后两位有个小bug,已经修改 http://www.jb51.net/article/99361.htm 效果: @Override public CharSequence filter(CharSequence source, int start, int end, Spanned d

  • Android 个人理财工具一:项目概述与启动界面的实现

    从本文开始为大家制作一个Android个人理财工具,并把整个开发过程记录下来,与大家分享.   项目总体介绍 此Android个人理财工具的主要功能是,可以录入日常生活中的各类收入和支出明细,并且可以在每月底能够统计每月各类情况.给出收支关系饼图,月份之间的柱状图等报告. 下图是程序的流程图: 程序可能涉及到的技术: 1.多个视图的切换,参数的传递,intent的使用. 2.Grid 明细的体现. 3.sqlite数据的操作. 4.自绘view 来表现统计图. 先写这些.        启动界面

  • Android 个人理财工具四:添加账单页面 下

    本文考虑把账单界面整理下,实现如下图中的功能.做之前感觉应该不难,但实际做时发现排列界面布局甚至比编写程序代码还要复杂.网上搜索发现,关于这种布局的资料能用的很少,Google Demo中用的最多的就是Listview了,但本实例的界面似乎要复杂一些. spinner和cursor如何配合使用成了完成此实例过程中的难点,本来应该很简单,但却把我郁闷坏了. 先给大家贴上最终的效果图片: 界面的xml: XML/HTML代码 <?xml version="1.0" encoding=

  • Android 个人理财工具六:显示账单明细 下

    上一节的显示账单明细 上中,账单明细的显示已经基本实现,本文主要整理下代码,实现此窗口的查询和删除功能:按下Menu菜单时弹出选择月份的窗口,可选择明细的月份:在ListView上长按可弹出确认删除的对话框,以完成删除. 下面上图: 这里面有个OnItemLongClickListener 事件,这个事件的用法如下: 首先activity 里面implements OnItemLongClickListener,然后如下面的代码所写: Java代码 // 这里listview 添加侦听事件 lv

  • Android 个人理财工具二:使用SQLite实现启动时初始化数据

       关于SQLite sqlite是嵌入式SQL数据库引擎SQLite(SQLite Embeddable SQL Database Engine)的一个扩展.SQLite是一个实现嵌入式SQL数据库引擎小型C语言库(C library),实现了独立的,可嵌入的,零配置的SQL数据库引擎.特性包括:事务操作是原子,一致,孤立,并且持久的,即使在系统崩溃和电源故障之后. 零配置--不需要安装和管理. 实现了绝大多数SQL92标准. 我在多年前就关注sqlite的发展,非常看好sqlite的前景,

  • Android快速实现一个财务APP程序详解

    目录 前言 一,系统的技术栈 二,系统界面 三,系统核心代码 前言 昨天有个粉丝朋友也想学开发Web和小程序.安卓,问可以在大学学会吗? 在学校学到的东西真的有限: 在很多的高校,有一些教授是学院派的,他们没有做过多少开发工作,上课就是照本宣科,讲的知识点都是陈年落伍的技术,更别说带学生做项目了. 现在的很多硕博学生帮老师做课件,然后老师上课一顿读. 当然有的老师开发能力也是很强的,他们有开发经验,可以更加全面地理解技术知识点,然后传递给学生,也能拿到一些科研项目,然后带学生实战. 但是,但是,

  • Android 实例开发一个学生管理系统流程详解

    目录 效果演示 实现功能总览 代码 登录与忘记密码界面 一.添加布局文件 二.添加标题文字 三.绑定适配器 注册界面 一.创建两个Drawable文件 二.将其添加数组内 三.动态变化背景 考勤界面 一.CircleProgressBar代码如下 签到界面 一.倒计时 二.位置签到 成绩查询界面 一.创建StackAdapter 适配器 效果演示 随手做的一个小玩意,还有很多功能没有完善,倘有疏漏,万望海涵. 实现功能总览 实现了登录.注册.忘记密码.成绩查询.考勤情况.课表查看.提交作业.课程

  • Flutter快速制作一个水印组件实例详解

    目录 正文 通过child属性将水印叠加给子组件 createWatermark方法 Watermark组件的完整代码 正文 项目开发的过程中,经常会遇到添加水印的需求,其作用无非就是防止重要信息通过截图外传.(虽然我觉得并没有什么卵用,但领导的需求是不容质疑的) 那么,作为一线码农的我,也只能屁颠屁颠的开搞. 通过child属性将水印叠加给子组件 水印组件,既然是组件,就是需要发扬Flutter套娃的精神,通过child属性将水印叠加给子组件. class Watermark extends

  • Android中检查、设置默认程序详解

    Android作为一个伟大的系统,自然提供了设置默认打开程序的实现.在这篇文章中,我会介绍如何在Android系统中设置默认的程序. 在设置默认程序之前,无非有两种情况,一种是已经有默认的程序,另一种则是没有任何默认程序. 检测是否有默认的程序 检查是必须的,因为结果关乎着我们下一步该怎么做. 复制代码 代码如下: public void testGetDefaultActivity() {     PackageManager pm = mContext.getPackageManager()

  • Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到一些坑,我把自己遇到的一些问题和解决方法总结一下,希望对广大码友们有所帮助. 注意点① 用xml定义Layout时,Root element 最好使用merge 当我们需要继承一个布局比较复杂的ViewGroup(比较多的是LinearLayout.RelativeLayout)时,通常会用xml来

  • 基于Python的Android图形解锁程序详解

    安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不想引起其警觉的话--你可以参考一下本文(前提条件:手机需要root,而且打开调试模式.一般来讲,如果用过诸如"豌豆荚手机助手"."360手机助手"一类的软件,都会被要求打开调试模式的.如果要删除手机内置软件,则需要将手机root). 首先科普一下,安卓手机是如何标记这9

  • Android 快速绘制一个圆角矩形的实例

    android 开发过程中,经常需要绘制一些简单的颜色图形.下面贴上一段最简单的图形. 圆角矩形: res\drawable\shape_small_label.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 内部颜色 --> &l

  • android 9.0 launcher3 去掉抽屉式显示所有 app(代码详解)

    效果图 修改思路 1.增加全局控制变量 sys.launcher3.is_full_app,用来动态切换 2.增加两套布局,对应有抽屉和无抽屉 3.去除 allAppsButton 4.将 AllAppsContainerView 中的图标加载到 Workspace 5.新安装的 app 自动添加图标到 Workspace 6.替换 Workspace 图标长按删除选项为取消 7.屏蔽上拉显示抽屉页面手势 8.修改页面指示线为圆点 上代码 1.增加全局控制变量 sys.launcher3.is_

  • Android Studio 如何删除/新建一个module(图文教程详解)

    一.删除一个module PS:此方法也会将该module从你的硬盘中删除 如果直接右键会发现没有delete选项 1.选中想要删除的module,右键点击Open Module Settings选项 2.选中移除 3.点击yes 4.注意点击ok 5.小绿点消失说明操作成功啦 6.右键delete 二.新建一个module 1.file-new–new module 2.选择新建的moudle类型 3.编辑应用名称和module名称 4.可直接finish不做修改 附页 1.Android s

  • 实现一个基于Servlet的hello world程序详解步骤

    目录 一. 引入相关jar包 二. 编写java代码 1. 创建一个类 2. 删除super方法 3. 构造相关字符串 4. 将类和HTTP特定请求相关联 三. 创建一些必要的目录和文件 四. 打包程序 五. 部署程序 六. 验证程序是否正常工作 一. 引入相关jar包 首先,我们先在idea里创建出一个Maven项目出来,除了路径要填成自己的希望路径以外,其他都可以一路next和finish 创建好后,我们需要在pom.xml中加上一组<dependencies>标签,在标签里引入servl

随机推荐