• Java项目:SSM服装进销存管理系统


    作者主页:夜未央5788

     简介:Java领域优质创作者、Java项目、学习资料、技术互助

    文末获取源码

    项目介绍

    管理员角色包含以下功能:
    管理员登录,修改密码,管理员管理,货号管理,仓库管理,入库管理,出库管理,查看入库信息等功能。

    由于本程序规模不大,可供课程设计,毕业设计学习演示之用

    环境需要

    1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
    2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
    3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
    4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 

    5.数据库:MySql 5.7版本;

    技术栈

    1. 后端:Spring+SpringMVC+Mybatis

    2. 前端:HTML+CSS+JavaScript+jsp

    使用说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
    2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
    3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;

    4. 运行项目,输入localhost:8080/ 登录

    运行截图 

     

     

     

     

     

     

     

    相关代码

    通用管理控制器

    1. public class BaseController {
    2. @InitBinder
    3. // 必须有一个参数WebDataBinder
    4. public void initBinder(WebDataBinder binder) {
    5. //System.out.println(binder.getFieldDefaultPrefix());
    6. binder.registerCustomEditor(Date.class, new CustomDateEditor(
    7. new SimpleDateFormat("yyyy-MM-dd"), false));
    8. binder.registerCustomEditor(Integer.class, new PropertyEditorSupport() {
    9. @Override
    10. public String getAsText() {
    11. return (getValue() == null) ? "" : getValue().toString();
    12. }
    13. @Override
    14. public void setAsText(String text) {
    15. Integer value = null;
    16. if (null != text && !text.equals("")) {
    17. try {
    18. value = Integer.valueOf(text);
    19. } catch(Exception ex) {
    20. throw new UserException("数据格式输入不正确!");
    21. }
    22. }
    23. setValue(value);
    24. }
    25. });
    26. //binder.registerCustomEditor(Integer.class, null,new CustomNumberEditor(Integer.class, null, true));
    27. binder.registerCustomEditor(Float.class, new PropertyEditorSupport() {
    28. @Override
    29. public String getAsText() {
    30. return (getValue() == null)? "" : getValue().toString();
    31. }
    32. @Override
    33. public void setAsText(String text) {
    34. Float value = null;
    35. if (null != text && !text.equals("")) {
    36. try {
    37. value = Float.valueOf(text);
    38. } catch (Exception e) {
    39. throw new UserException("数据格式输入不正确!");
    40. }
    41. }
    42. setValue(value);
    43. }
    44. });
    45. }
    46. /**
    47. * 处理图片文件上传,返回保存的文件名路径
    48. * fileKeyName: 图片上传表单key
    49. * @throws IOException
    50. * @throws IllegalStateException
    51. */
    52. public String handlePhotoUpload(HttpServletRequest request,String fileKeyName) throws IllegalStateException, IOException {
    53. String fileName = "upload/NoImage.jpg";
    54. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    55. /**构建图片保存的目录**/
    56. String photoBookPathDir = "/upload";
    57. /**得到图片保存目录的真实路径**/
    58. String photoBookRealPathDir = request.getSession().getServletContext().getRealPath(photoBookPathDir);
    59. /**根据真实路径创建目录**/
    60. File photoBookSaveFile = new File(photoBookRealPathDir);
    61. if(!photoBookSaveFile.exists())
    62. photoBookSaveFile.mkdirs();
    63. /**页面控件的文件流**/
    64. MultipartFile multipartFile_photoBook = multipartRequest.getFile(fileKeyName);
    65. if(!multipartFile_photoBook.isEmpty()) {
    66. /**获取文件的后缀**/
    67. String suffix = multipartFile_photoBook.getOriginalFilename().substring
    68. (multipartFile_photoBook.getOriginalFilename().lastIndexOf("."));
    69. String smallSuffix = suffix.toLowerCase();
    70. if(!smallSuffix.equals(".jpg") && !smallSuffix.equals(".gif") && !smallSuffix.equals(".png") )
    71. throw new UserException("图片格式不正确!");
    72. /**使用UUID生成文件名称**/
    73. String photoBookFileName = UUID.randomUUID().toString()+ suffix;//构建文件名称
    74. //String logImageName = multipartFile.getOriginalFilename();
    75. /**拼成完整的文件保存路径加文件**/
    76. String photoBookFilePath = photoBookRealPathDir + File.separator + photoBookFileName;
    77. File photoBookFile = new File(photoBookFilePath);
    78. multipartFile_photoBook.transferTo(photoBookFile);
    79. fileName = "upload/" + photoBookFileName;
    80. }
    81. return fileName;
    82. }
    83. /**
    84. * 处理图片文件上传,返回保存的文件名路径
    85. * fileKeyName: 图片上传表单key
    86. * @throws IOException
    87. * @throws IllegalStateException
    88. */
    89. public String handleFileUpload(HttpServletRequest request,String fileKeyName) throws IllegalStateException, IOException {
    90. String fileName = "";
    91. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    92. /**构建图片保存的目录**/
    93. String photoBookPathDir = "/upload";
    94. /**得到图片保存目录的真实路径**/
    95. String photoBookRealPathDir = request.getSession().getServletContext().getRealPath(photoBookPathDir);
    96. /**根据真实路径创建目录**/
    97. File photoBookSaveFile = new File(photoBookRealPathDir);
    98. if(!photoBookSaveFile.exists())
    99. photoBookSaveFile.mkdirs();
    100. /**页面控件的文件流**/
    101. MultipartFile multipartFile_photoBook = multipartRequest.getFile(fileKeyName);
    102. if(!multipartFile_photoBook.isEmpty()) {
    103. /**获取文件的后缀**/
    104. String suffix = multipartFile_photoBook.getOriginalFilename().substring
    105. (multipartFile_photoBook.getOriginalFilename().lastIndexOf("."));
    106. /**使用UUID生成文件名称**/
    107. String photoBookFileName = UUID.randomUUID().toString()+ suffix;//构建文件名称
    108. //String logImageName = multipartFile.getOriginalFilename();
    109. /**拼成完整的文件保存路径加文件**/
    110. String photoBookFilePath = photoBookRealPathDir + File.separator + photoBookFileName;
    111. File photoBookFile = new File(photoBookFilePath);
    112. multipartFile_photoBook.transferTo(photoBookFile);
    113. fileName = "upload/" + photoBookFileName;
    114. }
    115. return fileName;
    116. }
    117. /*向客户端输出操作成功或失败信息*/
    118. public void writeJsonResponse(HttpServletResponse response,boolean success,String message)
    119. throws IOException, JSONException {
    120. response.setContentType("text/json;charset=UTF-8");
    121. PrintWriter out = response.getWriter();
    122. //将要被返回到客户端的对象
    123. JSONObject json=new JSONObject();
    124. json.accumulate("success", success);
    125. json.accumulate("message", message);
    126. out.println(json.toString());
    127. out.flush();
    128. out.close();
    129. }
    130. }

     系统管理控制器

    1. @Controller
    2. @SessionAttributes("username")
    3. public class SystemController {
    4. @Resource AdminService adminService;
    5. @RequestMapping(value="/login",method=RequestMethod.GET)
    6. public String login(Model model) {
    7. model.addAttribute(new Admin());
    8. return "login";
    9. }
    10. @RequestMapping(value="/login",method=RequestMethod.POST)
    11. public void login(@Validated Admin admin,BindingResult br,Model model,HttpServletRequest request,HttpServletResponse response,HttpSession session) throws Exception {
    12. boolean success = true;
    13. String msg = "";
    14. if(br.hasErrors()) {
    15. msg = br.getAllErrors().toString();
    16. success = false;
    17. }
    18. if (!adminService.checkLogin(admin)) {
    19. msg = adminService.getErrMessage();
    20. success = false;
    21. }
    22. if(success) {
    23. session.setAttribute("username", admin.getUsername());
    24. }
    25. response.setContentType("text/json;charset=UTF-8");
    26. PrintWriter out = response.getWriter();
    27. //将要被返回到客户端的对象
    28. JSONObject json=new JSONObject();
    29. json.accumulate("success", success);
    30. json.accumulate("msg", msg);
    31. out.println(json.toString());
    32. out.flush();
    33. out.close();
    34. }
    35. @RequestMapping("/logout")
    36. public String logout(Model model,HttpSession session) {
    37. model.asMap().remove("username");
    38. session.invalidate();
    39. return "redirect:/login";
    40. }
    41. @RequestMapping(value="/changePassword",method=RequestMethod.POST)
    42. public String ChangePassword(String oldPassword,String newPassword,String newPassword2,HttpServletRequest request,HttpSession session) throws Exception {
    43. if(oldPassword.equals("")) throw new UserException("请输入旧密码!");
    44. if(newPassword.equals("")) throw new UserException("请输入新密码!");
    45. if(!newPassword.equals(newPassword2)) throw new UserException("两次新密码输入不一致");
    46. String username = (String)session.getAttribute("username");
    47. if(username == null) throw new UserException("session会话超时,请重新登录系统!");
    48. Admin admin = adminService.findAdminByUserName(username);
    49. if(!admin.getPassword().equals(oldPassword)) throw new UserException("输入的旧密码不正确!");
    50. try {
    51. adminService.changePassword(username,newPassword);
    52. request.setAttribute("message", java.net.URLEncoder.encode(
    53. "密码修改成功!", "GBK"));
    54. return "message";
    55. } catch (Exception e) {
    56. e.printStackTrace();
    57. request.setAttribute("error", java.net.URLEncoder
    58. .encode("密码修改失败!","GBK"));
    59. return "error";
    60. }
    61. }
    62. }

    如果也想学习本系统,下面领取。关注并回复:160ssm

  • 相关阅读:
    Levenberg-Marquardt (LM) 算法进行非线性拟合
    【计算机毕业设计】基于SpringBoot+Vue的流浪猫狗救助救援网站的设计与实现
    REHL7.6静默安装Oracle19C
    MacBook/MacOS如何更新到指定的版本
    java基于springboot+vue的旅游心得分享攻略系统 elementui
    GemBox.Bundle 47.0.1315 最新Crack
    AN基础工具——变形工具
    【js作用域】JavaScript中作用域的是什么?:从编译时其承担什么角色和查询作用域中的变量的角度解析作用域
    【艾特淘】淘宝平台流量政策目前是在哪里?
    Nodejs+vue网上鲜花店销售信息系统express+mysql
  • 原文地址:https://blog.csdn.net/hanyunlong1989/article/details/126456192