**

基于 Spring SSM框架 开发的一套 进存销管理系统

**

1.编写工具:Eclipse;
2.开发环境 java jdk版本1.8,Tomact 版本9.0;
3.运用框架 SSM(Spring spring Mvc Mybatis)Bootstrap-table Maven;
4.前台脚本语言 js jq ;
5.相关技术 SSM框架的集成
文件的上传下载
jave Excel的部分相关操作
controller service 之间的合理运用

项目代码文件层次

主要功能模块

1:系统管理员登录模块(此处运用验证进行了用户的登录验证 可以防止机器人的识别进行操作 登录时会判断当前管理员是否已有登录账号)

2:用户注册模块 (当系统管理员没有登录账号时可以通过注册进行登录 注册时 输入的账号 以及邮箱都为唯一约束 不可重复 并且阻止用户注册)

3:系统首页(管理员登录成功后 进入的页面 在此 可以通过搜索框对系统的功能进行搜索 快速查找 如 输入物料查找功能 点击提示框 则可以进入到相应的功能页面)

4:管理员信息管理模块(管理员可在此页面对自己相应的头像 地址 邮箱 密码 出生年月 等 个人资料进行设置后修改)

5:系统物料管理页(管理可在此页面进行系统物料的录入 并且 录入的物料为唯一条件 当录入后 会做相应的判断)录入成功后会自动显示在本页面 页面中搜索框提供快速查找系统物料 为模糊查询 并带有物料的删除功能

6:物料供应商的相关信息设置

7:商品采购的申请 (从一录入的系统物料中进行选择采购)

8:已提交申请的批准驳回(批准时 需要批准人进行签名并保存 驳回时 可附上驳回原因)


9:审核通过的申请可在商品采购页 进行采购 (采购时 会提醒选择采购数量 已交存放仓库 并且会判断采购数量是否大于所选仓库的剩余容量 反之则需重新选择入库仓库 或采购数量)


10:系统仓库管理(管理员可在本页面对系统仓库进行管理 仓库的管理 以及商品的出库 销售 并且会对相应的数量进行自动更新 当 当前商品的系统库存不够销售以及出库数量时 会提示管理重新操作 )

11:仓库管理 (当系统或对应商有新加仓库 或废弃仓库 可地仓库进行仓库其添加仓库会判断当前系统是否已有改仓库 删除仓库则会判断所选仓库中是否还包含有存放物料 反之则无法进行操作)


12:退出系统(完成相对应的操作后 点击退出即可完成退出登录)

部分代码片段

1:Users_infoController (用户信息控制器)

package com.controller;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.Ajax.AjaxRes;
import com.entitys.Users_infoEntity;
import com.service.Users_infoService;
import com.uuid.UuidUtil;@Controller
public class Users_infoController {@Autowiredprivate Users_infoService users_infoService;/*** 用户注册 并且判断用户账号 以及用户邮箱是否被使用 如果是 则阻止用户注册 并提示跟换* * @return* @throws IOException */@RequestMapping("/addUsers")@ResponseBodypublic AjaxRes addUsers(Users_infoEntity users_info,@Param("users_zhanghao") String users_zhanghao,@Param("users_mail") String users_mail) throws IOException {AjaxRes res = new AjaxRes();// 账号判断users_info.setUsers_zhanghao(users_zhanghao);List<Users_infoEntity> users_infobyzh = users_infoService.findbyzh(users_info);// 邮箱判断users_info.setUsers_mail(users_mail);List<Users_infoEntity> users_infobyem = users_infoService.findbyem(users_info);if (users_infobyzh.size() > 0) {res.setResMsg("该账号已被使用!");} else if (users_infobyem.size() > 0) {res.setResMsg("该邮箱已被使用!");} else {// 用户注册// 用户赋值Uuidusers_info.setUsers_id(UuidUtil.get32UUID());users_infoService.insert(users_info);res.setResMsg("注册成功!");}return res;}/*** 用户登录 并且判断用户账号 以及用户密码的输入是否正确* * @return*/@RequestMapping("/users_login")@ResponseBodypublic AjaxRes users_login(Users_infoEntity users_info,@Param("users_zhanghao") String users_zhanghao,@Param("users_pws") String users_pws,HttpServletRequest req,@Param("logoVerify_val") String logoVerify_val) {AjaxRes res = new AjaxRes();HttpSession session=req.getSession();String ip = req.getHeader("x-forwarded-for");// 账号判断users_info.setUsers_zhanghao(users_zhanghao);List<Users_infoEntity> users_infobyzh = users_infoService.findbyzh(users_info);// 密码判断users_info.setUsers_pws(users_pws);List<Users_infoEntity> users_infobypws = users_infoService.findbypws(users_info);if (users_infobyzh.isEmpty()) {res.setResMsg("该账号未注册!");} else if (users_infobypws.isEmpty()) {res.setResMsg("密码不正确!");}else if (!(logoVerify_val.equalsIgnoreCase(session.getAttribute("logoVerify_val").toString()))) {//验证码不区分大小写res.setResMsg("验证码不正确!");} else {//用户登录session.setAttribute("user",users_infobyzh.get(0));//更新用户登录ip地址 以及登录区域users_info.setUsers_zhanghao(users_zhanghao);users_info.setUsers_dl_ip(ip);System.out.println("---------------------------------------------"+ip);users_infoService.updatedlzc(users_info);res.setResMsg("登录成功!");}return res;}/*** 用户退出登录(清空session)* * @return*/@RequestMapping("/logout")public String Logout(HttpServletRequest req){HttpSession session=req.getSession();session.setAttribute("user", null);return "redirect:login"; }/*** 用户资料设置* @param users_info* @param md* @return*/@RequestMapping("/user_info")public String user_info(Users_infoEntity users_info,Model md){List<Users_infoEntity> user_infos=users_infoService.findbyId(users_info);//日期格式转换SimpleDateFormat slf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for(int i=0;i<user_infos.size();i++){user_infos.get(i).setZh_users_zc_time(slf.format(user_infos.get(i).getUsers_zc_time()));user_infos.get(i).setZh_users_dl_time(slf.format(user_infos.get(i).getUsers_dl_time()));}md.addAttribute("user_infos", user_infos.get(0));  return "page/userInfo";}/*** 用户个人修改信息 因用户昵称 邮箱为唯一约束 故此需要进行判断系统是否存在新输入的值* @param users_info* @param users_niceng* @param users_pws* @param users_mail* @return*/@RequestMapping("/update_user_info")@ResponseBodypublic AjaxRes update_user_info(Users_infoEntity users_info,@Param("users_niceng") String users_niceng,@Param("users_mail") String users_mail){AjaxRes res=new AjaxRes();//昵称判断users_info.setUsers_niceng(users_niceng);List<Users_infoEntity> users_infobyna = users_infoService.findbyna(users_info);// 邮箱判断users_info.setUsers_mail(users_mail);List<Users_infoEntity> users_infobyem = users_infoService.findbyem(users_info);if(users_infobyna.size()>0){res.setResMsg("该昵称已被使用!");} else if (users_infobyem.size() > 0) {res.setResMsg("该邮箱已被使用!"); }else{//用户修改个人数据users_infoService.update(users_info);res.setResMsg("修改成功!");    }return res;}/*** 处于安全 用户在修改密码和邮箱时 必须经过原(旧密码的验证 )通过后才可修改 反之则阻止 修改成功时清空当前session 提示重新登录* @param users_info* @param resq* @param old_users_pws* @param users_mail* @return* @throws IOException*/@RequestMapping("/update_user_save")@ResponseBodypublic AjaxRes update_user_save(Users_infoEntity users_info,HttpServletRequest req,@Param("old_users_pws") String old_users_pws,@Param("users_pws") String users_pws,@Param("users_mail") String users_mail) {AjaxRes res=new AjaxRes();//旧密码验证判断users_info.setUsers_pws(old_users_pws);List<Users_infoEntity> users_infobypws = users_infoService.findbypws(users_info);// 邮箱判断users_info.setUsers_mail(users_mail);List<Users_infoEntity> users_infobyem = users_infoService.findbyem(users_info);if(users_infobypws.isEmpty()){res.setResMsg("原密码验证不通过 请核对后在修改!");} else if (users_infobyem.size() > 0) {res.setResMsg("该邮箱已被使用!"); }else{//用户修改个人数据users_info.setUsers_pws(users_pws);users_infoService.updatesave(users_info);res.setResMsg("修改成功当前登陆已过期请重新登陆!");//清空sessionHttpSession session=req.getSession();session.setAttribute("user", null);}return res;}
}

2:Shop_caigoushenheiController (采购审核控制器)

package com.controller;import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.Ajax.AjaxRes;
import com.entitys.Shop_caigoushenheiEntity;
import com.entitys.Shop_wuliaoEntity;
import com.pageUtil.Page;
import com.service.Shop_caigoushenheiService;
import com.service.Shop_wuliaoService;
import com.uuid.UuidUtil;import sun.misc.BASE64Decoder;@Controller
public class Shop_caigoushenheiController {@Autowiredprivate Shop_wuliaoService wuliaoService;@Autowiredprivate Shop_caigoushenheiService caigoushenheiService;/*** 查询物料信息(放入前面的页面select下拉选项选项)* @param wuliao* @param md* @return*/@RequestMapping("/findwuliaoname")public String find(Shop_wuliaoEntity wuliao,Model md){List<Shop_wuliaoEntity> wuliaos=wuliaoService.find(wuliao);md.addAttribute("wuliaos", wuliaos);return "page/subchaigoushenhei";   }/*** 条件查询物料信息(放入前面的页面物料选项卡中)* @param wuliao* @param md* @return*/@RequestMapping("/findwuliaobyId")@ResponseBodypublic AjaxRes findwuliaoby(Shop_wuliaoEntity wuliao,Model md){AjaxRes res=new AjaxRes();List<Shop_wuliaoEntity> wuliaoby=wuliaoService.findbyId(wuliao);res.setSucceed(wuliaoby,"获取成功");md.addAttribute("wuliaoby",wuliaoby);return res;            }/*** 申请采购的提交* @param caigoushenhei* @return*/@RequestMapping("/subcaigoushenhei")@ResponseBodypublic AjaxRes Subcaigoushenhei(Shop_caigoushenheiEntity caigoushenhei){//赋值uuidcaigoushenhei.setShop_caigoushenhei_id(UuidUtil.get32UUID());AjaxRes res=new AjaxRes();caigoushenheiService.insert(caigoushenhei);res.setResMsg("申请提交成功!");return res;}/*** 查询出全部的采购审核信息 并显示到页面* @param caigoushenhei* @return*/@RequestMapping("/showcaigoushenhei")@ResponseBodypublic Object Showcaigoushenhei(Shop_caigoushenheiEntity caigoushenhei){List<Shop_caigoushenheiEntity> caigoushenheis=caigoushenheiService.find(caigoushenhei);if(caigoushenhei.getLimit()>0){caigoushenhei.setLimits("1");}//实例化page对象Page page=new Page();page.setPageNumber(caigoushenhei.getOffset());page.setPageSize(caigoushenhei.getLimit());page.setTotal(caigoushenheiService.count(caigoushenhei));page.setObj(caigoushenheis);return page;}/*** 此处查询审核通过的提交信息 必将审核日期格式进行转换* @param caigoushenhei* @return*/@RequestMapping("/showcaigoushenheizt")@ResponseBodypublic Object Showcaigoushenheizt(Shop_caigoushenheiEntity caigoushenhei){List<Shop_caigoushenheiEntity> caigoushenheis=caigoushenheiService.findzt(caigoushenhei);//获取到时间戳 并将其转换SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for(int i=0;i<caigoushenheis.size();i++){caigoushenheis.get(i).setZhuanyishop_caigoushenhei_time(sdf.format(caigoushenheis.get(i).getShop_caigoushenhei_time()));}if(caigoushenhei.getLimit()>0){caigoushenhei.setLimits("1");}//实例化page对象Page page=new Page();page.setPageNumber(caigoushenhei.getOffset());page.setPageSize(caigoushenhei.getLimit());page.setTotal(caigoushenheiService.count(caigoushenhei));page.setObj(caigoushenheis);return page;}//申请批准/*** 当管理员同意申请过后 并置入管理员的签名 签名后将base64格式的签名图片转换为文件路径格式存放在数据库中* @param caigoushenhei* @param req* @return* @throws IOException*/@RequestMapping("/pizhuncaigou")@ResponseBodypublic AjaxRes pizhuncaigou(Shop_caigoushenheiEntity caigoushenhei,HttpServletRequest req) throws IOException{AjaxRes res=new AjaxRes();String qianming=caigoushenhei.getShop_caigoushenhei_qianming();//声明要截取的字段(前几位)int i=22;//将base64编码获取并截取byte[] buffer;qianming=qianming.substring(i);//转码buffer = new BASE64Decoder().decodeBuffer(qianming);//存入的文件路径String lujing="\\uploadFile\\qianming\\"+buffer+".png";String realPath=req.getServletContext().getRealPath(lujing);FileOutputStream out = new FileOutputStream(realPath);out.write(buffer);out.close();//把路径存到数据库    caigoushenhei.setShop_caigoushenhei_qianming_lujing(lujing);caigoushenheiService.update(caigoushenhei);res.setResMsg("申请批准成功!");return res;}/*** 审核驳回 如果未通过审核 管理员可将本条审核信息进行驳回* @param caigoushenhei* @return*/@RequestMapping("/pizhunbohui")@ResponseBodypublic AjaxRes pizhunbohui(Shop_caigoushenheiEntity caigoushenhei){AjaxRes res=new AjaxRes();caigoushenheiService.updatebohui(caigoushenhei);res.setResMsg("执行成功!");return res;}/*** 删除已处理的审核信息* @param caigoushenhei* @return*/@RequestMapping("/delshenhei")@ResponseBodypublic AjaxRes delshenhei(Shop_caigoushenheiEntity caigoushenhei){AjaxRes res=new AjaxRes();caigoushenheiService.delete(caigoushenhei);res.setResMsg("删除成功");return res;}}

3:仓库管理控制器(Shop_cangkuController)

package com.controller;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import com.Ajax.AjaxRes;
import com.entitys.Shop_cangkuEntity;
import com.entitys.Shop_infoEntity;
import com.service.Shop_cangkuService;
import com.service.Shop_infoService;
import com.uuid.UuidUtil;import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;@Controller
public class Shop_cangkuController {@Autowiredprivate Shop_cangkuService cangkuService;@Autowiredprivate Shop_infoService shop_infoService;/***  新加仓库(先查询是否有输入的厂库 在让其添加   系统仓库唯一约束)* @param cangku* @param shop_cangku_name* @return*/@RequestMapping("/addcangku")@ResponseBodypublic AjaxRes addcangku(Shop_cangkuEntity cangku, @Param("shop_cangku_name") String shop_cangku_name) {AjaxRes res = new AjaxRes();cangku.setShop_cangku_name(shop_cangku_name);List<Shop_cangkuEntity> cangkubyname = cangkuService.findbyname(cangku);// 判断是否已有厂库if (cangkubyname.isEmpty()) {// 赋值仓库idcangku.setShop_cangku_id(UuidUtil.get32UUID());cangkuService.insert(cangku);System.out.println("--------------------------------------------------------" + cangku);res.setResMsg("新加成功!");} else {res.setResMsg("系统已有此仓库 请勿重复添加!");}return res;}/*** 根据仓库名查询(已采购的商品) 以及仓库 并显示在相关页面* @param shop_info* @param cangku* @param md* @return*/@RequestMapping("/findckname")public String findckname(Shop_infoEntity shop_info, Shop_cangkuEntity cangku, Model md) {List<Shop_cangkuEntity> cangkus = cangkuService.find(cangku);md.addAttribute("cangkus", cangkus);List<Shop_infoEntity> shop_infos = shop_infoService.findbyckname(shop_info);md.addAttribute("shop_infos", shop_infos);return "page/cangku";}/*** 仓库管理 这里可以修改厂库的管理人员 运营状态 仓库地址 但不可修改仓库名 已交仓库容量* @param cangku* @param shop_cangku_name* @return*/@RequestMapping("/upck")@ResponseBodypublic AjaxRes upck(Shop_cangkuEntity cangku, @Param("shop_cangku_name") String shop_cangku_name) {AjaxRes res = new AjaxRes();cangku.setShop_cangku_name(shop_cangku_name);List<Shop_cangkuEntity> cangkubyname = cangkuService.findbyname(cangku);// 判断是否已有厂库if (cangkubyname.isEmpty()) {cangkuService.update(cangku);res.setResMsg("修改成功!");} else {res.setResMsg("仓库名重复!");}return res;}/*** 根据仓库名查询改仓库的容量 (因仓库名为唯一字段)* @param cangku* @param md* @return*/@RequestMapping("/findsize")@ResponseBodypublic AjaxRes findsize(Shop_cangkuEntity cangku, Model md) {AjaxRes res = new AjaxRes();List<Shop_cangkuEntity> cangkusize = cangkuService.findbyname(cangku);res.setSucceed(cangkusize, "获取成功");md.addAttribute("cangkusize", cangkusize);return res;}  /*** 在仓库管理中删除商品信息 当确认删除时 自动更新相关仓库的容量* @param cangku* @param shop_info* @param shop_id* @return*/@RequestMapping("/delete_shop_info")@ResponseBodypublic AjaxRes delete_shop_info(Shop_cangkuEntity cangku,Shop_infoEntity shop_info,@Param("shop_id") String shop_id) {AjaxRes res = new AjaxRes();cangkuService.update_rongliang(cangku);//得到需要删除的商品idshop_info.setShop_id(shop_id);shop_infoService.delete(shop_info);res.setResMsg("删除成功!");return res;}/*** 系统仓库的删除 判断当前仓库中是否还存在商品信息 如果存在 则阻止删除(验证在前端验证)* @param cangku* @return*/@RequestMapping("/del_cangku")@ResponseBodypublic AjaxRes delcangku(Shop_cangkuEntity cangku){AjaxRes res=new AjaxRes();cangkuService.delete(cangku);res.setResMsg("改仓库已被成功删除!");return res;}/*** 盘库管理(excel操作 导入以及导出)* @param cangku* @param shop_info* @param req* @param shop_cangku_name* @return*/@RequestMapping("/panku")@ResponseBodypublic AjaxRes panku(Shop_cangkuEntity cangku,Shop_infoEntity shop_info, HttpServletRequest req,@Param("shop_int_cangku") String shop_cangku_name) {AjaxRes res = new AjaxRes();// excel存放路径String realPath = req.getSession().getServletContext().getRealPath("/");String exclePath = "static\\excel\\";String pathName = shop_cangku_name + "盘库表.xls";String fileName = realPath + exclePath + pathName;File xlsFile = new File(fileName);WritableWorkbook workbook = null;try {workbook = Workbook.createWorkbook(xlsFile);WritableSheet sheet = workbook.createSheet("sheet", 0);Date date = new Date();//日期格式装换SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String zhDate=sdf.format(date);   try {WritableFont wf = new WritableFont(WritableFont.ARIAL, 15,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色WritableCellFormat wcf = new WritableCellFormat(wf); // 单元格定义wcf.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式//标题样式WritableFont wftit = new WritableFont(WritableFont.ARIAL, 15,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色WritableCellFormat wcftit = new WritableCellFormat(wftit); // 单元格定义
/*              wcftit.setBackground(jxl.format.Colour.WHITE); // 设置单元格的背景颜色*/wcftit.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式//内容样式WritableFont wfcont = new WritableFont(WritableFont.ARIAL, 14,WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色WritableCellFormat wccont = new WritableCellFormat(wfcont); // 单元格定义     wccont.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式// 因为仓库名为唯一约束(所以这里采用根据仓库名查询)List<Shop_cangkuEntity> cangkus = cangkuService.findbyname(cangku);if (cangkus != null && cangkus.size() > 0) {for (int i = 0; i < cangkus.size(); i++) {sheet.addCell(new Label(0, 0,zhDate+":"+cangkus.get(i).getShop_cangku_name() + ":盘库",wcf));sheet.mergeCells(0, 0, 5, 0);//合并垮了5列。sheet.addCell(new Label(0, 1, "仓库类型"+":" + cangkus.get(i).getShop_cangku_leixing(),wcf));sheet.addCell(new Label(1, 1, "管理员"+":" + cangkus.get(i).getShop_cangku_user(),wcf));sheet.addCell(new Label(2, 1, "仓库容量"+":" + cangkus.get(i).getShop_cangku_rongliang().toString(),wcf));sheet.addCell(new Label(3, 1, "当前容量"+":" + cangkus.get(i).getShop_cangku_now_rongliang().toString(),wcf));}}// 设置盘库表头sheet.addCell(new Label(0, 2, "盘后商品总容量",wcftit));// 设置盘库表头sheet.addCell(new Label(2, 2, "现仓库剩余容量",wcftit));// 设置列表名sheet.addCell(new Label(0, 3, "商品名",wcftit));sheet.addCell(new Label(1, 3, "供应商",wcftit));sheet.addCell(new Label(2, 3, "入库仓库",wcftit));sheet.addCell(new Label(3, 3, "当前数量",wcftit));sheet.addCell(new Label(4, 3, "实际数量",wcftit));sheet.addCell(new Label(5, 3, "备注",wcftit));shop_info.setShop_int_cangku(shop_cangku_name);List<Shop_infoEntity> shop_infos = shop_infoService.findbyckname(shop_info);if (shop_infos != null && shop_infos.size() > 0) {for (int row = 0; row < shop_infos.size(); row++) {sheet.addCell(new Label(0, row + 4, shop_infos.get(row).getShop_name(),wccont));sheet.addCell(new Label(1, row + 4, shop_infos.get(row).getShop_gongyin_name(),wccont));sheet.addCell(new Label(2, row + 4, shop_infos.get(row).getShop_int_cangku(),wccont));sheet.addCell(new Label(3, row + 4, shop_infos.get(row).getShop_size().toString(),wccont));sheet.addCell(new Label(4, row + 4, null));sheet.addCell(new Label(5, row + 4, null));}}//设置行宽sheet.setColumnView(0,30); sheet.setColumnView(1,30); sheet.setColumnView(2,30); sheet.setColumnView(3,30); sheet.setColumnView(4,30); sheet.setColumnView(5,30); sheet.setColumnView(6,30); //设置行高sheet.setRowView(0, 500);sheet.setRowView(2, 500);workbook.write();workbook.close();} catch (RowsExceededException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (WriteException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return res;}}

4:验证码

package com.logoverify;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class VerifyController {private int width = 150;// 定义图片的widthprivate int height = 50;// 定义图片的heightprivate int codeCount = 4;// 定义图片上显示验证码的个数private int xx = 30;private int fontHeight = 24;private int codeY = 30;char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X','Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };/*** 定义并创建前端用户登录验证是的验证码* @param req* @param resp* @throws IOException*/@RequestMapping("/logoVerify")public void getCode(HttpServletRequest req, HttpServletResponse resp) throws IOException {// 定义图像bufferBufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics gd = buffImg.getGraphics();// 创建一个随机数生成器类Random random = new Random();// 将图像填充为白色gd.setColor(Color.WHITE);gd.fillRect(0, 0, width, height);// 创建字体,字体的大小应该根据图片的高度来定。Font font = new Font("Fixedsys", Font.BOLD, fontHeight);// 设置字体。gd.setFont(font);// 画边框。gd.setColor(Color.BLACK);gd.drawRect(0, 0, width - 1, height - 1);// 随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。gd.setColor(Color.BLACK);for (int i = 0; i < 40; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);gd.drawLine(x, y, x + xl, y + yl);}// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。StringBuffer randomCode = new StringBuffer();int red = 0, green = 0, blue = 0;// 随机产生codeCount数字的验证码。for (int i = 0; i < codeCount; i++) {// 得到随机产生的验证码数字。String code = String.valueOf(codeSequence[random.nextInt(codeSequence.length-1)]);// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。red = random.nextInt(255);green = random.nextInt(255);blue = random.nextInt(255);// 用随机产生的颜色将验证码绘制到图像中。gd.setColor(new Color(red, green, blue));gd.drawString(code, (i + 1) * xx, codeY);// 将产生的四个随机数组合在一起。randomCode.append(code);}// 将四位数字的验证码保存到Session中。HttpSession session = req.getSession();//session传值session.setAttribute("logoVerify_val", randomCode.toString());// 禁止图像缓存。resp.setHeader("Pragma", "no-cache");resp.setHeader("Cache-Control", "no-cache");resp.setDateHeader("Expires", 0);resp.setContentType("image/jpeg");// 将图像输出到Servlet输出流中。ServletOutputStream sos = resp.getOutputStream();ImageIO.write(buffImg, "jpeg", sos);sos.close();}}

5:spring-mvl.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"><!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射-->   <!--  <mvc:annotation-driven/>  --><mvc:default-servlet-handler/><!-- 启动对@AspectJ注解的支持 -->  <aop:aspectj-autoproxy/> <!-- 通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller -->  <aop:aspectj-autoproxy proxy-target-class="true"/><mvc:interceptors>  <!--使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求  --><mvc:interceptor>  <mvc:mapping path="/**"/><mvc:exclude-mapping path="/register"/> <mvc:exclude-mapping path="/addUsers"/> <mvc:exclude-mapping path="/login"/> <mvc:exclude-mapping path="/users_login"/> <!-- 放行验证码 --><mvc:exclude-mapping path="/logoVerify"/><mvc:exclude-mapping path="/.css"/>    <mvc:exclude-mapping path="/.js"/>            <bean class="com.interceptor.LoginInterceptor"/>  </mvc:interceptor>  </mvc:interceptors><!-- 自动扫描且只扫描@Controller --><context:component-scan base-package="com" use-default-filters="false"><!-- 平台功能模块controller--><context:include-filter type="aspectj" expression="com.controller..*Controller"/><!-- 登录验证controller --><context:include-filter type="aspectj" expression="com.logoverify..*Controller"/></context:component-scan><!-- 对静态资源文件的访问  restful-->     <mvc:resources mapping="/static/**" location="/,/static/" /> <mvc:resources mapping="/boostrap/**" location="/,/boostrap/" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" ><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean><mvc:annotation-driven><mvc:message-converters register-defaults="true"><!-- 避免IE执行AJAX时,返回JSON出现下载文件 --><beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>text/json;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property></bean></mvc:message-converters></mvc:annotation-driven><!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 默认编码 --><property name="defaultEncoding" value="utf-8" /><!-- 文件大小最大值 --><property name="maxUploadSize" value="1048576000" /><!-- 内存中的最大值 --><property name="maxInMemorySize" value="40960" /></bean>
</beans>

6:SSM Maven 相关pom.xml 配置文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>InvoicingManagementSystem</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>InvoicingManagementSystem Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>6.0</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.5.RELEASE</version></dependency><!--上传文件相关的jar包  --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version></dependency>       <!-- jstl --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--跟加密算法相关的codeC  --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.9</version></dependency><!--orm或者jdbc组件需要用到的jar包 mybatis  --><!--mysql数据库驱动  --><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.1.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.0.8</version><scope>runtime</scope></dependency>   <!--阿里的连接  druid连接池 类似于c3p0  --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.15</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.1</version></dependency> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.4</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.2.1</version></dependency><!-- lg4j --><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- org.apache.commons --><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency><!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.1</version></dependency><!-- org.slf4j --><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><!-- aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.11</version></dependency><!-- aspectjrt --><dependency><groupId>aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.5.3</version></dependency><!-- jackson依赖包 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.5</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.5</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.5</version></dependency><!-- https://mvnrepository.com/artifact/jexcelapi/jxl  操作excel--><dependency><groupId>jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6</version></dependency></dependencies><build><finalName>InvoicingManagementSystem</finalName></build>
</project>

7:前台用户管理页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="jpath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><style type="text/css">*{ margin:0; padding:0;}</style>
<title>个人信息界面</title>
<link rel="stylesheet" type="text/css" href="static/css/userinfo.css" />
<link rel="stylesheet" type="text/css" href="static/date/css/date.css" />
</head><body><div class="main"><!--主框架--><div><!--头部--><div class="pan_logo"><div class="pan_logo_left"><img src="static/imgs/logo.png" style="margin-top: 10px;" />&nbsp;<label>进存销管理系统&nbsp;|&nbsp;账号设置 </label></div><div class="pan_logo_right"><label>账号:${user_infos.users_zhanghao }</label> &nbsp;|&nbsp; <label class="back">返回首页</label></div></div></div><!--头部--><div class="count_left" style="margin-top:10px;"><!--内容左边--><c:if test="${user_infos.users_touxiang==null || user_infos.users_touxiang=='' }"><img src="static/imgs/nologo.png" style="width: 300px;height: 300px; border-radius: 50px; margin-left:60px;"/><br /></c:if><c:if test="${user_infos.users_touxiang!=null }"><img src="${user_infos.users_touxiang }" style="width: 300px;height: 300px; border-radius: 150px; margin-left:60px;" /><br /></c:if><div class="ul" style="margin-top: 20px;"><span>昵&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 称:</span><label>${user_infos.users_niceng }</label></div><br /><div class="ul"><span>登录账号 :</span><label>${user_infos.users_zhanghao }</label></div><br /><div class="ul"><span>性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 别:</span><label>${user_infos.users_sex }</label></div><br /><div class="ul"><span>生&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 日:</span><label>${user_infos.users_birth }</label></div><br /><div class="ul"><span>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 箱:</span><label>${user_infos.users_mail }</label></div><br /><div class="ul"><span>电&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 话:</span><label>${user_infos.users_phone }</label></div><br /><div class="ul"><span>地&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 址:</span><label>${user_infos.users_address }</label></div><br /><div class="ul"><span>注册时间 :</span><label>${user_infos.zh_users_zc_time }</label></div><br /><div class="ul"><span>上次登录 :</span><label>${user_infos.zh_users_dl_time }</label></div><br /></div><!--内容左边--><div class="count_right"><!--内容右边--><div class="biaoti">信息修改:</div><form class="up_info"><input class="from_input" name="users_id" value="${user_infos.users_id }" type="hidden"/><br /><label>昵称:</label><input placeholder="请输入新的昵称" class="from_input" name="users_niceng" /><br /><label>生日:</label><input placeholder="出生日期" class="from_input date_picker" name="users_birth" value="${user_infos.users_birth }"/><br /><label>性别:</label><input placeholder="性别" class="from_input" name="users_sex" value="${user_infos.users_sex }"/><br /><label>电话:</label><input placeholder="联系方式" class="from_input"name="users_phone" value="${user_infos.users_phone }"/><br /><label>邮箱:</label><input placeholder="邮箱e-mail" class="from_input" name="users_mail"/><br /><div style="margin-top: 40px;"><label>地址:</label><input placeholder="地址" class="from_input" name="users_address" type="hidden" value="${user_infos.users_address }"/><br /><iframe style="margin-left: 50px; margin-top: -40px;" src="${jpath }/address" width="100%" frameborder="0" scrolling="no"></iframe></div><br/><input placeholder="请选择上传头像" class="from_input" name="users_touxiang" type="hidden" value="${user_infos.users_touxiang }"/><label>头像:</label><input placeholder="请选择上传头像" class="from_input" name="touxiangname" style="margin-top: -50px;"/><br /><!--头像选择及上传  --><input placeholder="选择头像" class="from_input" name="users_touxiang" style="display: none;"/><br /> <input class="from_input uptouxiang" type="file" id="f" style="display: none"/><br /><div class="up_show_div">  <img class="up_show_img" src=""> </div><div class="up_change_img"><img src="static/imgs/add.png" style="width: 30px; height: 30px; margin-top: 10px; margin-left: 10px;"> </div><!--头像选择及上传   --><br /> <input type="button" value="重新填写" class="reset" /> <inputtype="button" value="确认修改" class="ok yes_up" /></form><div class="biaoti">账户安全:</div><form class="up_save"><input class="from_input" name="users_id" value="${user_infos.users_id }" type="hidden"/><br /><label>验证旧的密码:</label><input placeholder="请输入旧的密码" class="save_input" name="old_users_pws" type="password"/><br /> <label>输入新的密码:</label><input placeholder="新的密码" class="save_input" name="users_pws" type="password"/><br /><label>确&nbsp;认&nbsp;&nbsp; &nbsp; &nbsp;密&nbsp;码:</label><input placeholder="确认密码" class="save_input"  name="re_users_pws" type="password"/><br /><label>邮&nbsp;箱&nbsp;&nbsp; &nbsp; &nbsp;更&nbsp;换:</label><input placeholder="新的邮箱" class="save_input" name="users_mail"/><br /><input type="button" value="重新填写" class="reset" /> <input type="button"value="确认修改" class="ok yes_save" /></form></div><!--内容右边--></div><!--主框架--><div class="hengtiao"></div><!--底部--><div style="width:100%;height:200px; background-color: #eee;margin-top:400px;"></div><script src="static/vendor/jquery/jquery.min.js"></script><!-- 日期插件 --><script src="http://www.jq22.com/jquery/1.8.3/jquery.min.js"></script><script src="static/date/js/jquery.date_input.pack.js"></script><script>//图片转换为base64格式$(".up_change_img").click(function () {  $(".uptouxiang").click();});  $(".uptouxiang").change(function () {  run(this, function (data) {  $(".up_show_div").show();$('.up_show_img').attr('src', data); $(".up_change_img").css({"margin-left":"260px","margin-top":"-52px"}); var touxiangname=$('.uptouxiang').val();//截取data:image/png;base64,便于存入数据库后 页面能够显示//var users_touxiang=data.substring(data.indexOf(",") + 1);$('[name=users_touxiang]').val(data); $('[name=touxiangname]').val(touxiangname);  });  });  function run(input_file, get_data) {  /*input_file:文件按钮对象*/  /*get_data: 转换成功后执行的方法*/  if (typeof (FileReader) === 'undefined') {  alert("抱歉,你的浏览器不支持 FileReader,不能将图片转换为Base64,请使用现代浏览器操作!");  } else {  try {  /*图片转Base64 核心代码*/  var file = input_file.files[0];        //得到上传文件的大小var f= document.getElementById("f").files; var filemaxsize = 1024*1024;//最大限制1M var fileSize =f[0].size;//这里我们判断下类型如果不是图片就返回 去掉就可以上传任意文件  if (!/image\/\w+/.test(file.type)) {  alert("请确保文件为图像类型");  return false;  }else if(fileSize>filemaxsize){ //这里判断选择图片的大小alert("头像图片不能大于"+filemaxsize/(1024*1024)+"M!请重新选择"); target.value =""; return false; } var reader = new FileReader();  reader.onload = function () {  get_data(this.result);  }  reader.readAsDataURL(file);  } catch (e) {  alert(“图片转换出错”) }  }  };
</script><script >
$(function(){$('.date_picker').date_input();});
$(".back").click(function(){window.history.back(-1);
})
//清空表单值
$(".reset").click(function(){$(".up_info")[0].reset();$(".up_save")[0].reset();
});
//邮箱格式判断
$("[name=users_mail]").change(function(){var email=$("[name=users_mail]").val()if (email != "") {var reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;isok= reg.test(email );if (!isok) {alert("邮箱格式不正确,请重新输入!");return false;}};
})
//用户信息修改
$(".yes_up").click(function(){//获取三级联动页面中的地址(值)var dizhi = localStorage.getItem("dizhi");$("[name=users_address]").val(dizhi);//表单空值判断var users_niceng=$(this).parent().find("[name=users_niceng]").val();var users_birth=$(this).parent().find("[name=users_birth]").val();var users_sex=$(this).parent().find("[name=users_sex]").val();var users_phone=$(this).parent().find("[name=users_phone]").val();var users_mail=$(this).parent().find("[name=users_mail]").val();var users_address=$(this).parent().find("[name=users_address]").val();if(users_niceng=='' || users_birth=='' || users_sex=='' || users_phone=='' || users_mail=='' || users_birth=='' || users_address==''){alert("请将数据填写完整!")}else{var dataJson = "{";var dataArr = [];$(".up_info").find("input").each(function(index, _this) {var inputN = $(_this).attr("name");if (inputN != "" && inputN != null) {dataArr.push(inputN + ":'" + $(_this).val() + "'");dataJson += ",";}});dataJson = "{" + dataArr.join(",") + "}";var jsonForms = eval('(' + dataJson + ')');$.post("${jpath}/update_user_info", jsonForms, function(data) {console.log(data);var json = $.parseJSON(data);alert(json.resMsg);//清空表单$(".up_info")[0].reset();//刷新用户信息页面window.location.reload();});}});
//两次输入密码验证相等否
$("[name=re_users_pws]").change(function(){var users_pws=$("[name=users_pws]").val();var re_users_pws=$("[name=re_users_pws]").val();if(users_pws!=re_users_pws){alert("确认密码不相等!")}})
//用户密码邮箱修改
$(".yes_save").click(function(){var dataJson = "{";var dataArr = [];$(".up_save").find("input").each(function(index, _this) {var inputN = $(_this).attr("name");if (inputN != "" && inputN != null) {dataArr.push(inputN + ":'" + $(_this).val() + "'");dataJson += ",";}});dataJson = "{" + dataArr.join(",") + "}";var jsonForms = eval('(' + dataJson + ')');$.post("${jpath}/update_user_save", jsonForms, function(data) {console.log(data);var json = $.parseJSON(data);alert(json.resMsg);//清空表单$(".up_save")[0].reset();//刷新用户信息页面window.location.reload();});
});
</script>
</body>
</html>

以上便是小生通过 java SSM框架 制作的一套进存销管理系统 学习永无止境 欢迎大家进行参观与指导
项目下载
https://download.csdn.net/download/qq_41193701/11176065

基于 Spring SSM框架 开发的一套 进存销管理系统相关推荐

  1. 基于SSH开发的陶瓷工厂进存销管理系统 JAVA MySQL

    10095基于SSH开发的陶瓷工厂进存销管理系统 代码: 鏈-椄:https://pan@baidu@com/s/1a01LN31IJLzHxmVgwtVjbg (把@换成 . 就可正常访问) 趧-紶 ...

  2. 基于Spring boot框架开发的电商网站系统

    目 录 第一章 绪论- 2 1.1 编写目的 - 2 1.2 项目背景 - 2 1.3 项目需求 - 2 第二章 系统体系结构 - 3 2.1 系统体系结构 - 3 2.2 数据库设计 E-R 图 - ...

  3. php-人员权限管理源码,基于ThinkPHP5+ACE框架开发的响应式通用后台权限管理系统PHP源码|响应式轻量级企业网站管理系统...

    源码介绍 基于ThinkPHP5+ACE框架开发的响应式通用后台权限管理系统PHP源码是一款响应式轻量级企业网站管理系统,采用ThinkPHP5.0.10+国外ACE1.40的UI模板的后台内容管理框 ...

  4. 基于SSM的进存销管理系统(超市订单管理系统)

    1.项目介绍 基于SSM的进存销管理系统5具有订单管理.供应商管理.用户管理.角色管理等功能 2.项目技术 后端框架:SSM(Spring.SpringMVC.Mybatis) 前端框架:jsp.cs ...

  5. PHP汽车销售进存销管理系统,php开发最新进存销软件库存仓库管理系统网页版进销存正版套装...

    新品上市基于php+mysql开发的进存销系统完整源码 功能亮点: · 1.进货管理:添加库存.库存数量.商品名称 ·2.库存管理:商品名称.条形码.进价.入库.库存.已售 ·3.出货管理:商品出库. ...

  6. 美容院 php源代码,基于ThinkPHP+B-JUI框架开发的微信美容院SPA预约消费管理系统PHP源码...

    源码介绍 微信美容院预约消费管理系统是基于ThinkPHP3.2.3+B-JUI1.2框架开发,权限管理运用了Auth类进行权限认证,权限可以细分到每个操作功能,增删改查功能一应俱全,整合了PHPEx ...

  7. 牛皮!竟然有大佬基于 Spring Boot + Vue 开发了一套网易云amp;QQ音乐(附源码)。。。...

    来源:segmentfault.com/a/1190000021376934 # 前言 虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某些 ...

  8. php问道茶具源代码,php开发最新进存销软件库存仓库管理系统网页版进销存正版套中装.doc...

    新品上市基于php+mysql开发的进存销系统完整源码 功能亮点: ·??1.进货管理:添加库存.库存数量.商品名称 ·?2.库存管理:商品名称.条形码.进价.入库.库存.已售 ·?3.出货管理:商品 ...

  9. 库存软件开发 php,php开发最新进存销软件库存仓库管理系统网页进销存正套装...

    <php开发最新进存销软件库存仓库管理系统网页进销存正套装>由会员分享,可在线阅读,更多相关<php开发最新进存销软件库存仓库管理系统网页进销存正套装(7页珍藏版)>请在人人文 ...

最新文章

  1. spark 笔记 1: 如何着手
  2. One order event display tool
  3. mysql select 反选_JQuery实现全选、全不选和反选功能
  4. 如何将sql server数据库转化成sqlite数据库
  5. linux下的正则表达式
  6. 网络蜘蛛爬取邮箱地址
  7. 笔记本计算机显示图标,笔记本电脑声音图标不见了?电脑声音图标显示红叉
  8. trajan 塔杨算法 求割点,割边
  9. 边缘计算研究热点地图
  10. 服务器装系统出现命令提示符,怎么通过cmd命令提示符重装系统?具体怎么操作?...
  11. 看董事长陈睿发言谈B站变化,我与B站共成长
  12. 保险产业拥抱“大数据时代” 或带来颠覆性变革
  13. 你该知道的Pyecharts简易上手教程
  14. Python学习笔记--文件操作
  15. 使用MPC设计控制器
  16. 主流DDR2内存芯片编号解析
  17. 什么样的人可以担任项目经理?
  18. Tensorflow教程-曼德布洛特(Mandelbrot)集合
  19. SOA架构和微服务架构的区别(转载)
  20. NLP-初学条件随机场(CRF)

热门文章

  1. 手机误删的照片怎么恢复?恢复方法分享
  2. 羊车门问题python程序_羊车门问题
  3. Centos7如何编译安装vim8
  4. 让两个Div并排显示的多种方法
  5. 在线网校教育平台的开发,题库的搭建必不可少
  6. 闭关之 C++ 函数式编程笔记(五):系统设计和程序测试
  7. 论游戏中Buff的实现
  8. 小数化分数 (思维)
  9. EXCEL中去掉单元格首尾空格,保留字符串中间空格
  10. 主编推荐 | 深度学习如何影响运筹学?