Java项目:学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
源码获取:博客首页 "资源" 里下载!
这个项目适合SSM框架的初学者(涉及大量增删改查,很适合初学者)以及对Shiro安全框架和Poi技术感兴趣的同学。
项目功能:
用户管理功能(登录、退出登录、增加用户、编辑用户、删除用户、多条件查询用户、上传用户头像、修改个人密码);角色管理功能(添加角色、编辑角色、删除角色、查询角色);权限管理功能(添加权限、编辑权限、删除权限、多条件查询权限);缺勤管理功能(添加缺勤、编辑缺勤、删除缺勤、多条件查询缺勤、导出Excel、柱形图显示缺勤情况)。
应用技术:Jsp + SSM + Shiro + Poi(Excel表格) + JFreeChart(柱形图) + Easyui
运行环境:eclipse/IDEA + MySQL5.7 + Maven3.6.3 + JDK1.8 + Tomcat8.5
后台用户管理控制器:
/*** 后台用户管理控制器* @author yy**/
@RequestMapping("/admin/user")
@Controller
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate RoleService roleService;@Autowiredprivate OperaterLogService operaterLogService;/*** 用户列表页面* @param model* @param user* @param pageBean* @return*/@RequestMapping(value="/list")public String list(Model model,User user,PageBean<User> pageBean){model.addAttribute("title", "用户列表");model.addAttribute("username", user.getUsername());model.addAttribute("pageBean", userService.findList(user, pageBean));return "admin/user/list";}/*** 新增用户页面* @param model* @return*/@RequestMapping(value="/add",method=RequestMethod.GET)public String add(Model model){model.addAttribute("roles", roleService.findAll());return "admin/user/add";}/*** 用户添加表单提交处理* @param user* @return*/@RequestMapping(value="/add",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> add(User user){//用统一验证实体方法验证是否合法CodeMsg validate = ValidateEntityUtil.validate(user);if(validate.getCode() != CodeMsg.SUCCESS.getCode()){return Result.error(validate);}if(user.getRole() == null || user.getRole().getId() == null){return Result.error(CodeMsg.ADMIN_USER_ROLE_EMPTY);}//判断用户名是否存在if(userService.isExistUsername(user.getUsername(), 0l)){return Result.error(CodeMsg.ADMIN_USERNAME_EXIST);}//到这说明一切符合条件,进行数据库新增if(userService.save(user) == null){return Result.error(CodeMsg.ADMIN_USE_ADD_ERROR);}operaterLogService.add("添加用户,用户名:" + user.getUsername());return Result.success(true);}/*** 用户编辑页面* @param model* @return*/@RequestMapping(value="/edit",method=RequestMethod.GET)public String edit(Model model,@RequestParam(name="id",required=true)Long id){model.addAttribute("roles", roleService.findAll());model.addAttribute("user", userService.find(id));return "admin/user/edit";}/*** 编辑用户信息表单提交处理* @param user* @return*/@RequestMapping(value="/edit",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> edit(User user){//用统一验证实体方法验证是否合法CodeMsg validate = ValidateEntityUtil.validate(user);if(validate.getCode() != CodeMsg.SUCCESS.getCode()){return Result.error(validate);}if(user.getRole() == null || user.getRole().getId() == null){return Result.error(CodeMsg.ADMIN_USER_ROLE_EMPTY);}if(user.getId() == null || user.getId().longValue() <= 0){return Result.error(CodeMsg.ADMIN_USE_NO_EXIST);}if(userService.isExistUsername(user.getUsername(), user.getId())){return Result.error(CodeMsg.ADMIN_USERNAME_EXIST);}//到这说明一切符合条件,进行数据库保存User findById = userService.find(user.getId());//讲提交的用户信息指定字段复制到已存在的user对象中,该方法会覆盖新字段内容BeanUtils.copyProperties(user, findById, "id","createTime","updateTime");if(userService.save(findById) == null){return Result.error(CodeMsg.ADMIN_USE_EDIT_ERROR);}operaterLogService.add("编辑用户,用户名:" + user.getUsername());return Result.success(true);}/*** 删除用户* @param id* @return*/@RequestMapping(value="/delete",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){try {userService.delete(id);} catch (Exception e) {return Result.error(CodeMsg.ADMIN_USE_DELETE_ERROR);}operaterLogService.add("删除用户,用户ID:" + id);return Result.success(true);}
}
系统控制器:
/*** 系统控制器* @author yy**/
@RequestMapping("/system")
@Controller
public class SystemController {@Autowiredprivate OperaterLogService operaterLogService;@Autowiredprivate UserService userService;@Autowiredprivate DatabaseBakService databaseBakService;@Autowiredprivate StaffService staffService;@Autowiredprivate OrderAuthService orderAuthService;private Logger log = LoggerFactory.getLogger(SystemController.class);/*** 登录页面* @param model* @return*/@RequestMapping(value="/login",method=RequestMethod.GET)public String login(Model model){model.addAttribute("loginTypes", LoginType.values());return "admin/system/login";}/*** 用户登录提交表单处理方法* @param request* @param cpacha* @return*/@RequestMapping(value="/login",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> login(HttpServletRequest request,String username,String password,String cpacha,Integer type){if(StringUtils.isEmpty(username)){return Result.error(CodeMsg.ADMIN_USERNAME_EMPTY);}if(StringUtils.isEmpty(password)){return Result.error(CodeMsg.ADMIN_PASSWORD_EMPTY);}//表示实体信息合法,开始验证验证码是否为空if(StringUtils.isEmpty(cpacha)){return Result.error(CodeMsg.CPACHA_EMPTY);}//说明验证码不为空,从session里获取验证码Object attribute = request.getSession().getAttribute("admin_login");if(attribute == null){return Result.error(CodeMsg.SESSION_EXPIRED);}//表示session未失效,进一步判断用户填写的验证码是否正确if(!cpacha.equalsIgnoreCase(attribute.toString())){return Result.error(CodeMsg.CPACHA_ERROR);}if(type == LoginType.ADMINISTRATOR.getCode()){//表示验证码正确,开始查询数据库,检验密码是否正确User findByUsername = userService.findByUsername(username);//判断是否为空if(findByUsername == null){return Result.error(CodeMsg.ADMIN_USERNAME_NO_EXIST);}//表示用户存在,进一步对比密码是否正确if(!findByUsername.getPassword().equals(password)){return Result.error(CodeMsg.ADMIN_PASSWORD_ERROR);}//表示密码正确,接下来判断用户状态是否可用if(findByUsername.getStatus() == User.ADMIN_USER_STATUS_UNABLE){return Result.error(CodeMsg.ADMIN_USER_UNABLE);}//检查用户所属角色状态是否可用if(findByUsername.getRole() == null || findByUsername.getRole().getStatus() == Role.ADMIN_ROLE_STATUS_UNABLE){return Result.error(CodeMsg.ADMIN_USER_ROLE_UNABLE);}//检查用户所属角色的权限是否存在if(findByUsername.getRole().getAuthorities() == null || findByUsername.getRole().getAuthorities().size() == 0){return Result.error(CodeMsg.ADMIN_USER_ROLE_AUTHORITES_EMPTY);}//检查一切符合,可以登录,将用户信息存放至sessionrequest.getSession().setAttribute(SessionConstant.SESSION_USER_LOGIN_KEY, findByUsername);request.getSession().setAttribute("loginType",type);//销毁session中的验证码request.getSession().setAttribute("admin_login", null);//将登陆记录写入日志库operaterLogService.add("用户【"+username+"】于【" + StringUtil.getFormatterDate(new Date(), "yyyy-MM-dd HH:mm:ss") + "】登录系统!");log.info("用户成功登录,user = " + findByUsername);}else{Staff byJobNumber = staffService.findByNameAndIsStatus(username);//判断是否为空if(byJobNumber == null){return Result.error(CodeMsg.ADMIN_USERNAME_NO_EXIST);}//表示用户存在,进一步对比密码是否正确if(!byJobNumber.getPassword().equals(password)){return Result.error(CodeMsg.ADMIN_PASSWORD_ERROR);}//检查用户所属角色状态是否可用if(byJobNumber.getRole() == null || byJobNumber.getRole().getStatus() == Role.ADMIN_ROLE_STATUS_UNABLE){return Result.error(CodeMsg.ADMIN_USER_ROLE_UNABLE);}//检查用户所属角色的权限是否存在if(byJobNumber.getRole().getAuthorities() == null || byJobNumber.getRole().getAuthorities().size() == 0){return Result.error(CodeMsg.ADMIN_USER_ROLE_AUTHORITES_EMPTY);}//检查一切符合,可以登录,将用户信息存放至sessionrequest.getSession().setAttribute(SessionConstant.SESSION_STAFF_LOGIN_KEY, byJobNumber);request.getSession().setAttribute("loginType",type);//销毁session中的验证码request.getSession().setAttribute("admin_login", null);//将登陆记录写入日志库operaterLogService.add("用户【"+username+"】于【" + StringUtil.getFormatterDate(new Date(), "yyyy-MM-dd HH:mm:ss") + "】登录系统!");log.info("员工成功登录,user = " + byJobNumber);}return Result.success(true);}/*** 登录成功后的系统主页* @param model* @return*/@RequestMapping(value="/index")public String index(Model model){model.addAttribute("operatorLogs", operaterLogService.findLastestLog(10));model.addAttribute("userTotal", userService.total());model.addAttribute("operatorLogTotal", operaterLogService.total());model.addAttribute("databaseBackupTotal", databaseBakService.total());model.addAttribute("onlineUserTotal", SessionListener.onlineUserCount);return "admin/system/index";}/*** 注销登录* @return*/@RequestMapping(value="/logout")public String logout(){Integer loginType = (Integer) SessionUtil.get("loginType");if(loginType == LoginType.ADMINISTRATOR.getCode()){User loginedUser = SessionUtil.getLoginedUser();if(loginedUser != null){SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, null);}}else if(loginType == LoginType.STAFF.getCode()){Staff loginedStaff = SessionUtil.getLoginedStaff();if(loginedStaff != null){SessionUtil.set(SessionConstant.SESSION_STAFF_LOGIN_KEY,null);}}return "redirect:login";}/*** 无权限提示页面* @return*/@RequestMapping(value="/no_right")public String noRight(){return "admin/system/no_right";}/*** 修改用户个人信息* @return*/@RequestMapping(value="/update_userinfo",method=RequestMethod.GET)public String updateUserInfo(){return "admin/system/update_userinfo";}/*** 修改个人信息保存* @param user* @return*/@RequestMapping(value="/update_userinfo",method=RequestMethod.POST)public String updateUserInfo(User user){User loginedUser = SessionUtil.getLoginedUser();loginedUser.setEmail(user.getEmail());loginedUser.setMobile(user.getMobile());loginedUser.setHeadPic(user.getHeadPic());//首先保存到数据库userService.save(loginedUser);//更新session里的值SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);return "redirect:update_userinfo";}/*** 修改密码页面* @return*/@RequestMapping(value="/update_pwd",method=RequestMethod.GET)public String updatePwd(){return "admin/system/update_pwd";}/*** 修改密码表单提交* @param oldPwd* @param newPwd* @return*/@RequestMapping(value="/update_pwd",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> updatePwd(@RequestParam(name="oldPwd",required=true)String oldPwd,@RequestParam(name="newPwd",required=true)String newPwd){Integer loginType = (Integer) SessionUtil.get("loginType");if(loginType == LoginType.ADMINISTRATOR.getCode()){User loginedUser = SessionUtil.getLoginedUser();if(!loginedUser.getPassword().equals(oldPwd)){return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_ERROR);}if(StringUtils.isEmpty(newPwd)){return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_EMPTY);}if(newPwd.length()<4 || newPwd.length()>32){return Result.error(CodeMsg.ADMIN_USER_PWD_LENGTH_ERROR);}loginedUser.setPassword(newPwd);//保存数据库userService.save(loginedUser);//更新sessionSessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);}else{Staff loginedStaff = SessionUtil.getLoginedStaff();Staff staff = staffService.find(loginedStaff.getId());if(!staff.getPassword().equals(oldPwd)){return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_ERROR);}if(StringUtils.isEmpty(newPwd)){return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_EMPTY);}staff.setPassword(newPwd);CodeMsg codeMsg = ValidateEntityUtil.validate(staff);if (codeMsg.getCode() != CodeMsg.SUCCESS.getCode()){return Result.error(codeMsg);}loginedStaff.setPassword(newPwd);//保存数据库staffService.save(loginedStaff);//更新sessionSessionUtil.set(SessionConstant.SESSION_STAFF_LOGIN_KEY, loginedStaff);}return Result.success(true);}/*** 日志管理列表* @param model* @param operaterLog* @param pageBean* @return*/@RequestMapping(value="/operator_log_list")public String operatorLogList(Model model,OperaterLog operaterLog,PageBean<OperaterLog> pageBean){model.addAttribute("pageBean", operaterLogService.findList(operaterLog, pageBean));model.addAttribute("operator", operaterLog.getOperator());model.addAttribute("title", "日志列表");return "admin/system/operator_log_list";}/*** 验证订单* @param orderSn* @param phone* @return*/@RequestMapping(value="/auth_order",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> authOrder(@RequestParam(name="orderSn",required=true)String orderSn,@RequestParam(name="phone",required=true)String phone){OrderAuth orderAuth = new OrderAuth();orderAuth.setMac(StringUtil.getMac());orderAuth.setOrderSn(orderSn);orderAuth.setPhone(phone);orderAuthService.save(orderAuth);AppConfig.ORDER_AUTH = 1;return Result.success(true);}/*** 删除操作日志,可删除多个* @param ids* @return*/@RequestMapping(value="/delete_operator_log",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> delete(String ids){if(!StringUtils.isEmpty(ids)){String[] splitIds = ids.split(",");for(String id : splitIds){operaterLogService.delete(Long.valueOf(id));}}return Result.success(true);}/*** 清空整个日志* @return*/@RequestMapping(value="/delete_all_operator_log",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> deleteAll(){operaterLogService.deleteAll();return Result.success(true);}
}
后台角色管理控制器:
/*** 后台角色管理控制器* @author yy**/
@RequestMapping("/admin/role")
@Controller
public class RoleController {private Logger log = LoggerFactory.getLogger(RoleController.class);@Autowiredprivate MenuService menuService;@Autowiredprivate OperaterLogService operaterLogService;@Autowiredprivate RoleService roleService;/*** 分页搜索角色列表* @param model* @param role* @param pageBean* @return*/@RequestMapping(value="/list")public String list(Model model,Role role,PageBean<Role> pageBean){model.addAttribute("title", "角色列表");model.addAttribute("name", role.getName());model.addAttribute("pageBean", roleService.findByName(role, pageBean));return "admin/role/list";}/*** 角色添加页面* @param model* @return*/@RequestMapping(value="/add",method=RequestMethod.GET)public String add(Model model){List<Menu> findAll = menuService.findAll();model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));return "admin/role/add";}/*** 角色添加表单提交处理* @param role* @return*/@RequestMapping(value="/add",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> add(Role role){//用统一验证实体方法验证是否合法CodeMsg validate = ValidateEntityUtil.validate(role);if(validate.getCode() != CodeMsg.SUCCESS.getCode()){return Result.error(validate);}if(roleService.save(role) == null){return Result.error(CodeMsg.ADMIN_ROLE_ADD_ERROR);}log.info("添加角色【"+role+"】");operaterLogService.add("添加角色【"+role.getName()+"】");return Result.success(true);}/*** 角色编辑页面* @param id* @param model* @return*/@RequestMapping(value="/edit",method=RequestMethod.GET)public String edit(@RequestParam(name="id",required=true)Long id,Model model){List<Menu> findAll = menuService.findAll();model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));Role role = roleService.find(id);model.addAttribute("role", role);model.addAttribute("authorities",JSONArray.toJSON(role.getAuthorities()).toString());return "admin/role/edit";}/*** 角色修改表单提交处理* @param request* @param role* @return*/@RequestMapping(value="/edit",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> edit(Role role){//用统一验证实体方法验证是否合法CodeMsg validate = ValidateEntityUtil.validate(role);if(validate.getCode() != CodeMsg.SUCCESS.getCode()){return Result.error(validate);}Role existRole = roleService.find(role.getId());if(existRole == null){return Result.error(CodeMsg.ADMIN_ROLE_NO_EXIST);}existRole.setName(role.getName());existRole.setRemark(role.getRemark());existRole.setStatus(role.getStatus());existRole.setAuthorities(role.getAuthorities());if(roleService.save(existRole) == null){return Result.error(CodeMsg.ADMIN_ROLE_EDIT_ERROR);}log.info("编辑角色【"+role+"】");operaterLogService.add("编辑角色【"+role.getName()+"】");return Result.success(true);}/*** 删除角色* @param request* @param id* @return*/@RequestMapping(value="delete",method=RequestMethod.POST)@ResponseBodypublic Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){try {roleService.delete(id);} catch (Exception e) {// TODO: handle exceptionreturn Result.error(CodeMsg.ADMIN_ROLE_DELETE_ERROR);}log.info("编辑角色ID【"+id+"】");operaterLogService.add("删除角色ID【"+id+"】");return Result.success(true);}
}
源码获取:博客首页 "资源" 里下载!
相关文章:
【STL源码剖析读书笔记】【第5章】关联式容器之hashtable
1、hashtable在插入、删除、搜寻操作上具有“常数平均时间”的表现,不依赖输入元素的随机性。 2、hashtable通过hashfunction将元素映射到不同的位置,但当不同的元素通过hash function映射到相同的位置时,便产生了“碰撞”问题。解决碰撞问题…

Event自定义事件
//index.html文件<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible"…
byte endian(biglittle endian)
1. 大小端的区别 little endian:把低位字节存放在内存的低位; // big endian: 将低位字节存放在内存的高位; 比如:0x1234,则12 就属于高位字节;34 属于低位字节 假如从地址0x0000 0000开始的一个字节中保存数据0x12345678, 这2中字节序在内存当中存…

鸡啄米vc++2010系列32(标签控件Tab Control 下)
上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分。 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类。 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Control,也可以使用CTabCtrl类的Create成员函数创建。…

Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)
源码获取:博客首页 "资源" 里下载! 这个项目涉及到Shiro整合JWT、秒杀功能所具备的基本要求(限流、乐观锁、接口隐藏、JMeter高并发测试等等)、消息中间件RabbitMQ的异步邮件通知和死信队列、沙箱支付宝模拟支付等等技术亮点。 项目功能&#…

虚拟机使用镜像文件安装系统
场景说明:指定Linux镜像之后,点击电源开始安装,安装完成之后,卸载ISO,进入BIOS,设置从硬盘启动。vmvare有提供快速安装的方式。当前的安装类似于手动安装,模拟真实的环境操作步骤:1&…

cmd命令简单别木马的蛛丝马迹
一些基本的Windows命令往往可以识别木马的蛛丝马迹,而且在保护网络安全上起到很大的作用。 检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中了病毒,但是手里没有完善的工具来检测是不是真有这样的事情发生,那可以…

ubuntu常用翻译工具stardict
日常办公应用中,我们经常会碰到一些陌生的外文单词或文章需要翻译,在Windows平台上,可通过很多翻译工具来帮忙解决。当我们转到Ubuntu系统 中办公时,肯定也希望能有一款简单易用、功能强大的翻译工具。 这里给大家推荐Linux平…

Java项目:教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括: 三角色教师 管理员,学生教务管理系统,包括院系管理,课题综合管理,信息管理,以及差旅管理,学生选题…

jsp 环境配置记录
1. jdk,下载地址1 环境变量配置: 1)新建 JAVA_HOME 变量 。 变量值填写jdk的安装目录(本人是 C:\Java\jdk1.7.0) 2) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; (注意原…

一些关于找工作的书籍
技术类 算法导论:不要纠缠太难的部分(红黑树、斐波那契额堆、NP、近似算法); 编程之美:仔细阅读,包括上面的智力题,纸上手写代码; 编程珠玑:建议仔细阅读,尤其…

最快地复制一张表
1.mysqldump方法 一种方法是,使用mysqldump命令将数据导出成一组INSERT语句。你可以使用下面的命令: mysqldump -h$host -P$port -u$user --add-locks --no-create-info --single-transaction --set-gtid-purgedOFF db1 t --where"a>900" …

Linux下C++开发工具介绍
概述 就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样。Emacs, vi, eclipse, anj…

Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up:Can you solve it without using extra space? 分析:和Linked List Cycle类似,还是用map。 用时:60ms 1 /**2 * Definition …

Java项目:考试管理系统(java+Springboot+Maven+Jpa+Vue+Mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述本系统功能包括: 支持单选题、多选题、判断题支持学生(student)、教师(teacher)、管理员(admin)三种角色学生:参加考试和查看我的考试教师:学生的所有权限创建…

[物理学与PDEs]第1章第7节 媒质中的 Maxwell 方程组 7.2 媒质交界面上的条件
通过 Maxwell 方程组的积分形式易在交界面上各量应满足交界面条件: $$\beex \bea \sez{{\bf D}}\cdot{\bf n}\omega_f,&\sex{\omega_f:\ \mbox{交界面上自由电荷密度}};\\ \sez{{\bf B}}\cdot{\bf n}0,&\sex{\ra\mbox{ 磁感应强度法向分量在交界面上连续}};\\ \sez{{\b…

第十二周编程总结
这个作业属于的课程C语言程序设计2这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/MS/homework/3239我在这个课程的目标是使用编程实现简单的游戏设计这个作业在哪个具体方面帮助我实现目标使用指针解决问题,熟悉指针与函数之间的关系和指针作为函数返回值…

什么是交叉编译
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上…

树形结构在关系数据库中的设计
在程序设计中,经常以树形结构表示数据的层次关系,如菜单的结构、商品的分类等。 这样的层次结构在关系数据库中难以直观地表示。常见的一种做法是用一个字段指向上级节点来表示记录的上下级关系。 fidpidfname 1 Food 2 1 Fruit 3 2 Red 4 3…

Java项目:在线课程会员系统(java+Springboot+Maven+JSP+Spring+Mysql+layui)
一、项目简述 功能包括: 用户管理,课程管理,在线视频观看,评论,会员展示,会员充值等等。 二、项目运行 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEc…

职场观察:高薪需要什么?
标签:职场高薪原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xjsunjie.blog.51cto.com/999372/1378547新的一年,看到别人跳槽或涨薪,你是否也蠢蠢欲动…

Excel-姓名列中同一个人汇总金额列,得出总金额
8、姓名列中同一个人求和金额列,得出总金额。 方法一: P2处公式SUMPRODUCT(($M$2:$M$20$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan.sogou.com/guide/detail/?id1610011625 PS:这个只是单条件求和,…

C语言编译全过程(转贴)
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件…

Java项目:家教管理系统(java+SSM+MyBatis+MySQL+Maven+Jsp)
源码获取:博客首页 "资源" 里下载! 该系统分为前台和后台 前台功能有:登录、注册、查看学员、查看教师、个人中心等。 后台功能有:用户管理、学员管理、教师管理、审核管理、公告管理、新闻管理、简历管理等。前台注册…

ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul
catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 ECShop存在一个盲注漏洞,问题存在于/api/client/api.php文件中,提交特制的恶意POST请求可进行SQL注入攻击,可获得敏感信息或操作…

C++ 检测内存泄露
本文描述了如何检测内存泄露。最主要的是纯C,C的程序如何检测内存泄露。 现在有很多专业的检测工具,比如比较有名的BoundsCheck, 但是这类工具也有他的缺点,我认为首先BoundsCheck是商业软件,呵呵。然后呢需要安装,使用…

Java 学习笔记(4)——java 常见类
上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法。其实Java相比于C来说强大的另一个原因是Java中提供了大量可用的标准库 字符串 字符串可以说是任何…

浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge ——谨以此文,悼念我等待MinGW编译时逝去的那些时间。 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA。后来一直用到C Builder,尽管Borl…

Java项目:慢病报销管理信息系统(java+MySQL+Jdbc+Servlet+Jsp)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 慢病管理,医疗机构管理,家庭管理,费用交纳,费用报销,报表统计等等功能。 二、项目运行 环境配置: Jd…

Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法
当使用jQuery Ajax post请求时可能会遇到类似这样的错误提示 XMLHttpRequest cannot load http://xxxxxx. Origin http://xxxxxx is not allowed by Access-Control-Allow-Origin. 这是Ajax跨域访问权限的问题,服务器端不接受来自另一个不同IP地址的由脚本文件发出的…