作者: IT学长,从事软件开发 努力在IT搬砖路上的技术小白
公众号:IT学长】,分享计算机类毕业设计源码、IT技术文章、游戏源码、网页模板、程序人生等等。公众号回复 【粉丝】进博主技术群,与大佬交流,领取干货学习资料
关于转载:欢迎转载博主文章,转载时表明出处
求赞环节:创作不易,记得 点赞+评论+转发 谢谢你一路支持

查看更多系统:系统大全,课程设计、毕业设计,请点击这里查看

文章目录

  • 查看更多系统:[系统大全,课程设计、毕业设计,请点击这里查看](https://blog.csdn.net/qq_40625778/article/details/108213145)
  • 01 系统概述
  • 02 技术
  • 03 运行环境
  • 04 技术架构
  • 05 功能模块
  • 06 项目结构
  • 07 运行截图
    • 零售关系-》零售出库
    • 采购管理-》采购入库
    • 财务管理-》收入单
    • 商品管理-》商品信息
  • 08 主要代码
    • 用户管理
    • 账户管理
  • 09 源码下载
  • 10 如何使用

01 系统概述

基于SpringBoot框架和SaaS模式,非常好用的ERP软件,目前专注进销存+财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有库存状况、出入库统计等报表。权限控制更加精确

02 技术

springboot + mybatis + easyui

03 运行环境

  • 开发工具:idea/eclipse,推荐使用idea
  • maven3+,并且在开发工具中配置好
  • jdk1.8+,推荐1.8
  • MySQL5.5+, 推荐5.7,5.6

04 技术架构

  • 核心框架:SpringBoot 2.0.0
  • 持久层框架:Mybatis 1.3.2
  • 日志管理:Log4j 2.10.0
  • JS框架:Jquery 1.8.0
  • UI框架: EasyUI 1.9.4
  • 模板框架: AdminLTE 2.4.0
  • 项目管理框架:Maven 3.2.3

05 功能模块

  • 零售管理
  • 采购管理
  • 销售管理
  • 仓库管理
  • 财务管理
  • 报表查询
  • 商品管理
  • 基本信息
  • 系统管理

06 项目结构

07 运行截图

零售关系-》零售出库

采购管理-》采购入库

财务管理-》收入单

商品管理-》商品信息

08 主要代码

用户管理

package com.jsh.erp.controller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jsh.erp.constants.BusinessConstants;
import com.jsh.erp.constants.ExceptionConstants;
import com.jsh.erp.datasource.entities.Tenant;
import com.jsh.erp.datasource.entities.User;
import com.jsh.erp.datasource.entities.UserEx;
import com.jsh.erp.datasource.vo.TreeNodeEx;
import com.jsh.erp.exception.BusinessParamCheckingException;
import com.jsh.erp.service.log.LogService;
import com.jsh.erp.service.tenant.TenantService;
import com.jsh.erp.service.user.UserService;
import com.jsh.erp.utils.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;/*** @author */
@RestController
@RequestMapping(value = "/user")
public class UserController {private Logger logger = LoggerFactory.getLogger(UserController.class);@Value("${manage.roleId}")private Integer manageRoleId;@Resourceprivate UserService userService;@Resourceprivate TenantService tenantService;@Resourceprivate LogService logService;private static String message = "成功";private static final String HTTP = "http://";private static final String CODE_OK = "200";@PostMapping(value = "/login")public BaseResponseInfo login(@RequestParam(value = "loginName", required = false) String loginName,@RequestParam(value = "password", required = false) String password,HttpServletRequest request)throws Exception {logger.info("============用户登录 login 方法调用开始==============");String msgTip = "";User user=null;BaseResponseInfo res = new BaseResponseInfo();try {String username = loginName.trim();password = password.trim();//判断用户是否已经登录过,登录过不再处理Object userInfo = request.getSession().getAttribute("user");User sessionUser = new User();if (userInfo != null) {sessionUser = (User) userInfo;}if (sessionUser != null && username.equalsIgnoreCase(sessionUser.getLoginame())) {logger.info("====用户 " + username + "已经登录过, login 方法调用结束====");msgTip = "user already login";}//获取用户状态int userStatus = -1;try {request.getSession().removeAttribute("tenantId");userStatus = userService.validateUser(username, password);} catch (Exception e) {e.printStackTrace();logger.error(">>>>>>>>>>>>>用户  " + username + " 登录 login 方法 访问服务层异常====", e);msgTip = "access service exception";}switch (userStatus) {case ExceptionCodeConstants.UserExceptionCode.USER_NOT_EXIST:msgTip = "user is not exist";break;case ExceptionCodeConstants.UserExceptionCode.USER_PASSWORD_ERROR:msgTip = "user password error";break;case ExceptionCodeConstants.UserExceptionCode.BLACK_USER:msgTip = "user is black";break;case ExceptionCodeConstants.UserExceptionCode.USER_ACCESS_EXCEPTION:msgTip = "access service error";break;default:try {msgTip = "user can login";//验证通过 ,可以登录,放入session,记录登录日志user = userService.getUserByUserName(username);request.getSession().setAttribute("user",user);if(user.getTenantId()!=null) {Tenant tenant = tenantService.getTenantByTenantId(user.getTenantId());if(tenant!=null) {Long tenantId = tenant.getTenantId();Integer userNumLimit = tenant.getUserNumLimit();Integer billsNumLimit = tenant.getBillsNumLimit();if(tenantId!=null) {request.getSession().setAttribute("tenantId",tenantId); //租户tenantIdrequest.getSession().setAttribute("userNumLimit",userNumLimit); //用户限制数request.getSession().setAttribute("billsNumLimit",billsNumLimit); //单据限制数}}}logService.insertLog("用户",new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_LOGIN).append(user.getId()).toString(),((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());} catch (Exception e) {e.printStackTrace();logger.error(">>>>>>>>>>>>>>>查询用户名为:" + username + " ,用户信息异常", e);}break;}Map<String, Object> data = new HashMap<String, Object>();data.put("msgTip", msgTip);/*** 在IE模式下,无法获取到user数据,* 在此处明确添加上user信息* */if(user!=null){data.put("user",user);}res.code = 200;res.data = data;logger.info("===============用户登录 login 方法调用结束===============");} catch(Exception e){e.printStackTrace();logger.error(e.getMessage());res.code = 500;res.data = "用户登录失败";}return res;}@GetMapping(value = "/getUserSession")public BaseResponseInfo getSessionUser(HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {Map<String, Object> data = new HashMap<String, Object>();Object userInfo = request.getSession().getAttribute("user");if(userInfo!=null) {User user = (User) userInfo;user.setPassword(null);data.put("user", user);}res.code = 200;res.data = data;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取session失败";}return res;}@GetMapping(value = "/logout")public BaseResponseInfo logout(HttpServletRequest request, HttpServletResponse response)throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {request.getSession().removeAttribute("user");request.getSession().removeAttribute("tenantId");request.getSession().removeAttribute("userNumLimit");request.getSession().removeAttribute("billsNumLimit");response.sendRedirect("/login.html");} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "退出失败";}return res;}@PostMapping(value = "/resetPwd")public String resetPwd(@RequestParam("id") Long id,HttpServletRequest request) throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();String password = "123456";String md5Pwd = Tools.md5Encryp(password);int update = userService.resetPwd(md5Pwd, id);if(update > 0) {return returnJson(objectMap, message, ErpInfo.OK.code);} else {return returnJson(objectMap, message, ErpInfo.ERROR.code);}}@PostMapping(value = "/updatePwd")public String updatePwd(@RequestParam("userId") Long userId, @RequestParam("password") String password,@RequestParam("oldpwd") String oldpwd, HttpServletRequest request)throws Exception {Integer flag = 0;Map<String, Object> objectMap = new HashMap<String, Object>();try {User user = userService.getUser(userId);String oldPassword = Tools.md5Encryp(oldpwd);String md5Pwd = Tools.md5Encryp(password);//必须和原始密码一致才可以更新密码if(user.getLoginame().equals("jsh")){flag = 3; //管理员jsh不能修改密码} else if (oldPassword.equalsIgnoreCase(user.getPassword())) {user.setPassword(md5Pwd);flag = userService.updateUserByObj(user); //1-成功} else {flag = 2; //原始密码输入错误}objectMap.put("status", flag);if(flag > 0) {return returnJson(objectMap, message, ErpInfo.OK.code);} else {return returnJson(objectMap, message, ErpInfo.ERROR.code);}} catch (Exception e) {logger.error(">>>>>>>>>>>>>修改用户ID为 : " + userId + "密码信息失败", e);flag = 3;objectMap.put("status", flag);return returnJson(objectMap, message, ErpInfo.ERROR.code);}}/*** 获取全部用户数据列表* @param request* @return*/@GetMapping(value = "/getAllList")public BaseResponseInfo getAllList(HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {Map<String, Object> data = new HashMap<String, Object>();List<User> dataList = userService.getUser();if(dataList!=null) {data.put("userList", dataList);}res.code = 200;res.data = data;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取失败";}return res;}/*** create by: cjl* description:*  查询分页用户列表* create time: 2019/3/8 15:08* @Param: pageSize* @Param: currentPage* @Param: search* @return java.lang.String*/@GetMapping(value = "/getUserList")public String getUserList(@RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize,@RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage,@RequestParam(value = Constants.SEARCH, required = false) String search)throws Exception {Map<String, Object> parameterMap = new HashMap<String, Object>();//查询参数JSONObject obj= JSON.parseObject(search);Set<String> key= obj.keySet();for(String keyEach: key){parameterMap.put(keyEach,obj.getString(keyEach));}PageQueryInfo queryInfo = new PageQueryInfo();Map<String, Object> objectMap = new HashMap<String, Object>();if (pageSize == null || pageSize <= 0) {pageSize = BusinessConstants.DEFAULT_PAGINATION_PAGE_SIZE;}if (currentPage == null || currentPage <= 0) {currentPage = BusinessConstants.DEFAULT_PAGINATION_PAGE_NUMBER;}PageHelper.startPage(currentPage,pageSize,true);List<UserEx> list = userService.getUserList(parameterMap);//获取分页查询后的数据PageInfo<UserEx> pageInfo = new PageInfo<>(list);objectMap.put("page", queryInfo);if (list == null) {queryInfo.setRows(new ArrayList<Object>());queryInfo.setTotal(BusinessConstants.DEFAULT_LIST_NULL_NUMBER);return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code);}queryInfo.setRows(list);queryInfo.setTotal(pageInfo.getTotal());return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);}/*** create by: cjl* description:*  新增用户及机构和用户关系* create time: 2019/3/8 16:06* @Param: beanJson* @return java.lang.Object*/@PostMapping("/addUser")@ResponseBodypublic Object addUser(@RequestParam("info") String beanJson, HttpServletRequest request)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();Long userNumLimit = Long.parseLong(request.getSession().getAttribute("userNumLimit").toString());Long count = userService.countUser(null,null);if(count>= userNumLimit) {throw new BusinessParamCheckingException(ExceptionConstants.USER_OVER_LIMIT_FAILED_CODE,ExceptionConstants.USER_OVER_LIMIT_FAILED_MSG);} else {UserEx ue= JSON.parseObject(beanJson, UserEx.class);userService.addUserAndOrgUserRel(ue);}return result;}/*** 注册用户* @param loginame* @param password* @return* @throws Exception*/@PostMapping(value = "/registerUser")public Object registerUser(@RequestParam(value = "loginame", required = false) String loginame,@RequestParam(value = "password", required = false) String password,HttpServletRequest request)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();UserEx ue= new UserEx();ue.setUsername(loginame);ue.setLoginame(loginame);ue.setPassword(password);userService.checkUserNameAndLoginName(ue); //检查用户名和登录名ue = userService.registerUser(ue,manageRoleId,request);return result;}/*** create by: cjl* description:*  修改用户及机构和用户关系* create time: 2019/3/8 16:06* @Param: beanJson* @return java.lang.Object*/@PostMapping("/updateUser")@ResponseBodypublic Object updateUser(@RequestParam("info") String beanJson,@RequestParam("id") Long id)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();UserEx ue= JSON.parseObject(beanJson, UserEx.class);ue.setId(id);userService.updateUserAndOrgUserRel(ue);return result;}@PostMapping("/deleteUser")@ResponseBodypublic Object deleteUser(@RequestParam("ids") String ids)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();userService.batDeleteUser(ids);return result;}@PostMapping("/batchDeleteUser")@ResponseBodypublic Object batchDeleteUser(@RequestParam("ids") String ids)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();userService.batDeleteUser(ids);return result;}@RequestMapping("/getOrganizationUserTree")public JSONArray getOrganizationUserTree()throws Exception{JSONArray arr=new JSONArray();List<TreeNodeEx> organizationUserTree= userService.getOrganizationUserTree();if(organizationUserTree!=null&&organizationUserTree.size()>0){for(TreeNodeEx node:organizationUserTree){String str=JSON.toJSONString(node);JSONObject obj=JSON.parseObject(str);arr.add(obj) ;}}return arr;}
}

账户管理

package com.jsh.erp.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jsh.erp.constants.BusinessConstants;
import com.jsh.erp.constants.ExceptionConstants;
import com.jsh.erp.datasource.entities.Account;
import com.jsh.erp.datasource.vo.AccountVo4InOutList;
import com.jsh.erp.exception.BusinessRunTimeException;
import com.jsh.erp.service.account.AccountService;
import com.jsh.erp.utils.BaseResponseInfo;
import com.jsh.erp.utils.ErpInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;/*** @author jishenghua 75271*8920*/
@RestController
@RequestMapping(value = "/account")
public class AccountController {private Logger logger = LoggerFactory.getLogger(AccountController.class);@Resourceprivate AccountService accountService;/*** 查找结算账户信息-下拉框* @param request* @return*/@GetMapping(value = "/findBySelect")public String findBySelect(HttpServletRequest request) throws Exception {String res = null;try {List<Account> dataList = accountService.findBySelect();//存放数据json数组JSONArray dataArray = new JSONArray();if (null != dataList) {for (Account account : dataList) {JSONObject item = new JSONObject();item.put("Id", account.getId());//结算账户名称item.put("AccountName", account.getName());dataArray.add(item);}}res = dataArray.toJSONString();} catch(Exception e){e.printStackTrace();res = "获取数据失败";}return res;}/*** 获取所有结算账户* @param request* @return*/@GetMapping(value = "/getAccount")public BaseResponseInfo getAccount(HttpServletRequest request) throws Exception {BaseResponseInfo res = new BaseResponseInfo();Map<String, Object> map = new HashMap<String, Object>();try {List<Account> accountList = accountService.getAccount();map.put("accountList", accountList);res.code = 200;res.data = map;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取数据失败";}return res;}/*** 账户流水信息* @param currentPage* @param pageSize* @param accountId* @param initialAmount* @param request* @return*/@GetMapping(value = "/findAccountInOutList")public BaseResponseInfo findAccountInOutList(@RequestParam("currentPage") Integer currentPage,@RequestParam("pageSize") Integer pageSize,@RequestParam("accountId") Long accountId,@RequestParam("initialAmount") BigDecimal initialAmount,HttpServletRequest request) throws Exception{BaseResponseInfo res = new BaseResponseInfo();Map<String, Object> map = new HashMap<String, Object>();try {List<AccountVo4InOutList> dataList = accountService.findAccountInOutList(accountId, (currentPage-1)*pageSize, pageSize);int total = accountService.findAccountInOutListCount(accountId);map.put("total", total);//存放数据json数组JSONArray dataArray = new JSONArray();if (null != dataList) {for (AccountVo4InOutList aEx : dataList) {String timeStr = aEx.getOperTime().toString();BigDecimal balance = accountService.getAccountSum(accountId, timeStr, "date").add(accountService.getAccountSumByHead(accountId, timeStr, "date")).add(accountService.getAccountSumByDetail(accountId, timeStr, "date")).add(accountService.getManyAccountSum(accountId, timeStr, "date")).add(initialAmount);aEx.setBalance(balance);dataArray.add(aEx);}}map.put("rows", dataArray);res.code = 200;res.data = map;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取数据失败";}return res;}@PostMapping(value = "/updateAmountIsDefault")public String updateAmountIsDefault(@RequestParam("isDefault") Boolean isDefault,@RequestParam("accountId") Long accountId,HttpServletRequest request) throws Exception{Map<String, Object> objectMap = new HashMap<String, Object>();int res = accountService.updateAmountIsDefault(isDefault, accountId);if(res > 0) {return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else {return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);}}/*** create by: qiankunpingtai* website:https://qiankunpingtai.cn* description:*  批量删除账户信息* create time: 2019/3/29 10:49* @Param: ids* @return java.lang.Object*/@RequestMapping(value = "/batchDeleteAccountByIds")public Object batchDeleteAccountByIds(@RequestParam("ids") String ids,@RequestParam(value="deleteType",required =false,defaultValue=BusinessConstants.DELETE_TYPE_NORMAL)String deleteType) throws Exception {JSONObject result = ExceptionConstants.standardSuccess();/*** create by: qiankunpingtai* create time: 2019/4/10 10:19* website:https://qiankunpingtai.cn* description:*  出于兼容性考虑,没有传递删除类型时,默认为正常删除*/int i=0;if(BusinessConstants.DELETE_TYPE_NORMAL.equals(deleteType)){i= accountService.batchDeleteAccountByIdsNormal(ids);}else if(BusinessConstants.DELETE_TYPE_FORCE.equals(deleteType)){i= accountService.batchDeleteAccountByIds(ids);}else{logger.error("异常码[{}],异常提示[{}],参数,ids[{}],deleteType[{}]",ExceptionConstants.DELETE_REFUSED_CODE,ExceptionConstants.DELETE_REFUSED_MSG,ids,deleteType);throw new BusinessRunTimeException(ExceptionConstants.DELETE_REFUSED_CODE,ExceptionConstants.DELETE_REFUSED_MSG);}if(i<1){logger.error("异常码[{}],异常提示[{}],参数,ids[{}]",ExceptionConstants.ACCOUNT_DELETE_FAILED_CODE,ExceptionConstants.ACCOUNT_DELETE_FAILED_MSG,ids);throw new BusinessRunTimeException(ExceptionConstants.ACCOUNT_DELETE_FAILED_CODE,ExceptionConstants.ACCOUNT_DELETE_FAILED_MSG);}return result;}}

09 源码下载

关注公众号【IT学长】,回复“springboot 仓库ERP管理系统”免费领取。
亦可直接扫描主页二维码关注,回复“springboot 仓库ERP管理系统”免费领取,点此打开个人主页

10 如何使用

  1. 下载代码后解压缩
  2. 导入
  • 将项目导入到开发工具当中
  • 配置maven(因为我是直接从我工程中打包的,里面含有我本地的maven配置,所以需要重新配置一下)
  • 导入sql到MySQL当中,修改application.properties中的数据源信息,和你自己的对应上就可以了
  • 启动之后会有网址访问提示,直接访问就ok。默认用户名密码:admin/123456


说明:此源码来源于网络,若有侵权,请联系删除!!

仓库ERP管理系统(springboot)设计与实现,你看这篇就够了相关推荐

  1. 基于Vue和SpringBoot的便利店仓库物资管理系统的设计与实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  2. springboot毕设项目仓库供应链管理系统的设计与实现1879p(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目仓库供应链管理系统的设计与实现1879p(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mys ...

  3. ERP管理系统开发设计现有源码

    ERP管理系统开发,ERP管理系统开发设计,ERP管理系统开发现有源码.ERP管理系统开发设计是企业和门店最好是的信息管理方法的方式之一,由于ERP管理系统是优秀的信息技术性的运用和优秀的管理模式的融 ...

  4. 基于Python+Django+MYSQL的ERP管理系统的设计与实现

    基于Python+Django+MYSQL的ERP管理系统的设计与实现  源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ ERP管理系统是商业信息管 ...

  5. C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  6. [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  7. java jsp 仓库存储管理系统的设计zcd900

    技术:Java.JSP等 摘要:仓库存储管理系统的使用是生产企业的重要组成部分,在企业的日常管理中,它影响着企业的生产运营.日常成本控制等各个环节.传统的简单.静态的仓库作业已经无法保证企业各种资源的 ...

  8. Java、JSP仓库库存管理系统的设计

    技术:Java.JSP等 摘要: 随着科技的迅速发展,各种管理系统已应用到社会的各个领域.各个大小企业无论规模如何,都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展,为了更好的发展,纷纷开发适 ...

  9. javaee图书管理系统mysql,图书管理系统设计与实现—看这篇就够了

    图书管理系统设计与实现 > 图书馆人员结构复杂,人员数量有限,涉及方面很广,如果还使用手工操作处理图书借阅问题,工作将非常繁琐,需要大量的人力.物理.财力,极大的浪费了资源,对于图书管理人员来说 ...

  10. 聊聊订单系统的设计?看这篇就够了!

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 We've stick ...

最新文章

  1. isnull的使用方法
  2. VNC CentOS
  3. 【拔刀吧少年】之循环三兄弟for while until
  4. linux下cabal安装教程,Centos 7 安装shellcheck
  5. 【Machine Learning 二】单变量线性回归,代价函数,梯度下降
  6. 屏幕录制软件哪个好?
  7. 紫光华宇拼音输入法V5发布
  8. win10 C盘磁盘清理
  9. 《中国天气预报》城市编号一览表
  10. iOS绘制1像素的线
  11. Discuz仿魔客吧模板/素材资源站模板/包含DIY文件
  12. 不用U盘从linux重装win系统,不用U盘和光盘安装win7旗舰版系统
  13. the little schemer 笔记(0)
  14. 黑马程序员---java算法实现输出任意奇数维数独
  15. 服务器win10系统开机慢,Win10开机速度慢的解决方法
  16. python中的self
  17. app运营业绩统计管理框架模板
  18. Java Web实战开发 | Web项目的创建与运行
  19. 点聚WebOffice组件介绍
  20. hackthebox-Toxic writeup

热门文章

  1. S7-1500 CPU、显示器、ET 200SP CPU 和 ET 200pro CPU 的固件更新方法
  2. 磁带机故障灯解决方法
  3. 基于深度学习的图像匹配技术一览
  4. 图像匹配 | 论文与方法整理
  5. python工程师面试题
  6. 第一章:网络信息安全概述精讲笔记
  7. 测试用例设计方法——黑盒测试和白盒测试
  8. SSM项目实战之十二:用户信息的修改
  9. SimNow仿真交易【官方环境介绍】 期货仿真环境地址 期货模拟交易
  10. GAN(生成对抗神经网络)生成MNIST 基于pytorch实现