Android快速實(shí)現(xiàn)一個(gè)財(cái)務(wù)APP程序詳解
前言
昨天有個(gè)粉絲朋友也想學(xué)開(kāi)發(fā)Web和小程序、安卓,問(wèn)可以在大學(xué)學(xué)會(huì)嗎?
在學(xué)校學(xué)到的東西真的有限:
在很多的高校,有一些教授是學(xué)院派的,他們沒(méi)有做過(guò)多少開(kāi)發(fā)工作,上課就是照本宣科,講的知識(shí)點(diǎn)都是陳年落伍的技術(shù),更別說(shuō)帶學(xué)生做項(xiàng)目了。
現(xiàn)在的很多碩博學(xué)生幫老師做課件,然后老師上課一頓讀。
當(dāng)然有的老師開(kāi)發(fā)能力也是很強(qiáng)的,他們有開(kāi)發(fā)經(jīng)驗(yàn),可以更加全面地理解技術(shù)知識(shí)點(diǎn),然后傳遞給學(xué)生,也能拿到一些科研項(xiàng)目,然后帶學(xué)生實(shí)戰(zhàn)。
但是,但是,這種老師少之又少。我平時(shí)輔導(dǎo)過(guò)大量的計(jì)算機(jī)學(xué)生,也有個(gè)VIP群,很多學(xué)習(xí)VIP項(xiàng)目的小伙伴,也變得越來(lái)越強(qiáng),
我總結(jié)出來(lái),大部門計(jì)算機(jī)教學(xué)水平真的一般般:
1,教材落后,還有很多Java課程在教Swing/SSH框架,這已經(jīng)是淘汰多少年的技術(shù)了。
2,實(shí)戰(zhàn)不足。學(xué)生在大學(xué)期間代碼量極少,少得可憐,沒(méi)有項(xiàng)目實(shí)戰(zhàn)。找工作和企業(yè)的要求無(wú)法匹配。
3,教授課程方式極其落后。這是計(jì)算機(jī)啊,不是匯報(bào)工作,你全課程ppt有啥用。是念ppt學(xué)生能理解,還是給學(xué)生實(shí)操下項(xiàng)目,學(xué)生可以理解????
4,課后輔導(dǎo)比較差。在國(guó)外的一些名校,老師每周抽出三個(gè)小時(shí)作為 office hour,國(guó)內(nèi)的老師下課,直接拍屁股走人,課后沒(méi)有輔導(dǎo)。
昨天沒(méi)事,開(kāi)發(fā)了一個(gè)APP的財(cái)務(wù)系統(tǒng),如果需要學(xué)習(xí)開(kāi)發(fā),可以一起??!加油,奧利給!
一,系統(tǒng)的技術(shù)棧
移動(dòng)端,采用安卓進(jìn)行開(kāi)發(fā),Android它應(yīng)用于安卓系統(tǒng)軟件和程序開(kāi)發(fā),其由谷歌公司推出,目前在國(guó)際市場(chǎng)上有著廣泛的應(yīng)用及開(kāi)發(fā)環(huán)境,并不瘦限制研發(fā)人員能夠通過(guò)修改開(kāi)放的源代碼來(lái)實(shí)現(xiàn)各種使用的 APP軟件,開(kāi)發(fā)的軟件程序具有界面友好穩(wěn)定性好等特點(diǎn),安卓系統(tǒng)架構(gòu)圖具體如下:
后端采用的Java進(jìn)行開(kāi)發(fā)的,數(shù)據(jù)庫(kù)采用的Mysql。
系統(tǒng)的功能架構(gòu):
二,系統(tǒng)界面
后臺(tái):
三,系統(tǒng)核心代碼
/** * 小孟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("請(qǐng)輸入賬號(hào)"); if (password == null || password.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入密碼"); 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("用戶名或密碼錯(cuò)誤"); } } @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("請(qǐng)輸入賬號(hào)"); if (password == null || password.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入密碼"); if (nickname == null || nickname.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入真實(shí)姓名"); if (dianhua == null || dianhua.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入電話"); if (youxiang == null || youxiang.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入郵箱"); 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("用戶名已經(jīng)存在,請(qǐng)重試!"); } if (userService.save(user1)) { return JsonResult.ok("注冊(cè)成功"); } return JsonResult.error("注冊(cè)失敗"); } @PostMapping("/userupdate") @ResponseBody public JsonResult update(Integer id, String username, String password, String nickname) { if (username == null || username.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入賬號(hào)"); if (password == null || password.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入密碼"); if (nickname == null || nickname.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入真實(shí)姓名"); 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("請(qǐng)輸入賬號(hào)"); if (password == null || password.trim().isEmpty()) return JsonResult.error("請(qǐng)輸入密碼"); 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"; } /** * 分頁(yè)查詢 */ @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); // 使用關(guān)聯(lián)查詢 } /** * 查詢?nèi)? */ @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()); // 使用關(guān)聯(lián)查詢 //return JsonResult.ok().setData(pageParam.sortRecords(records)); } /** * 根據(jù)id查詢 */ @ResponseBody @RequestMapping("/get") public JsonResult get(Integer id) { return JsonResult.ok().setData(gonggaoService.getById(id)); // 使用關(guān)聯(lián)查詢 //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"; } /** * 分頁(yè)查詢 */ @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); // 使用關(guān)聯(lián)查詢 } /** * 查詢?nèi)? */ @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()); // 使用關(guān)聯(lián)查詢 //return JsonResult.ok().setData(pageParam.sortRecords(records)); } /** * 根據(jù)id查詢 */ @ResponseBody @RequestMapping("/get") public JsonResult get(Integer id) { return JsonResult.ok().setData(gudingzhichuService.getById(id)); // 使用關(guān)聯(lián)查詢 //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("修改失敗"); }
到此這篇關(guān)于Android快速實(shí)現(xiàn)一個(gè)財(cái)務(wù)APP程序詳解的文章就介紹到這了,更多相關(guān)Android財(cái)務(wù)APP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android 個(gè)人理財(cái)工具六:顯示賬單明細(xì) 下
- Android 個(gè)人理財(cái)工具五:顯示賬單明細(xì) 上
- Android 個(gè)人理財(cái)工具四:添加賬單頁(yè)面 下
- Android 個(gè)人理財(cái)工具三:添加賬單頁(yè)面 上
- Android 個(gè)人理財(cái)工具二:使用SQLite實(shí)現(xiàn)啟動(dòng)時(shí)初始化數(shù)據(jù)
- Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)
- Android 錢包支付之輸入支付密碼的實(shí)現(xiàn)步驟
- Android 高仿微信轉(zhuǎn)賬金錢輸入框規(guī)則
相關(guān)文章
一分鐘實(shí)現(xiàn)Android遮罩引導(dǎo)視圖
本文通過(guò)一分鐘的時(shí)間教大家實(shí)現(xiàn)Android遮罩引導(dǎo)視圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Android 鍵盤開(kāi)發(fā)知識(shí)點(diǎn)總結(jié)
這篇文章我們給大家總結(jié)了Android 鍵盤開(kāi)發(fā)的相關(guān)知識(shí)點(diǎn)內(nèi)容以及開(kāi)發(fā)心得,有需要的朋友參考學(xué)習(xí)下。2018-06-06Android仿支付寶自定義密碼輸入框及安全鍵盤(密碼鍵盤)
這篇文章主要介紹了Android仿支付寶自定義密碼輸入框及安全鍵盤(密碼鍵盤),需要的朋友可以參考下2018-01-01Android開(kāi)發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法
這篇文章主要介紹了Android開(kāi)發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法,結(jié)合實(shí)例形式分析了Android自定義view繪制圓角矩形的相關(guān)方法與使用技巧,需要的朋友可以參考下2017-10-10Android實(shí)現(xiàn)史上最簡(jiǎn)單自定義開(kāi)關(guān)按鈕的方法
在平常的開(kāi)發(fā)中按鈕是經(jīng)常使用到的控件之一,下面這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)史上最簡(jiǎn)單自定義開(kāi)關(guān)按鈕的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04android 跳轉(zhuǎn)進(jìn)市場(chǎng)的實(shí)現(xiàn)代碼
本篇文章是對(duì)android中跳轉(zhuǎn)進(jìn)市場(chǎng)的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06第三方開(kāi)源Android TickPlusDrawable狀態(tài)可以通過(guò)動(dòng)畫切換的按鈕
Android tickplusdrawable(TickPlusDrawable)是一個(gè)狀態(tài)可以通過(guò)動(dòng)畫切換的按鈕,本文給大家分享第三方開(kāi)源Android TickPlusDrawable狀態(tài)可以通過(guò)動(dòng)畫切換的按鈕,感興趣的朋友一起學(xué)習(xí)吧2015-12-12