随着社会经济的迅速发展,汽车销售业的规模也在不断扩大,有关汽车销售的信息量也成倍增加。以前我们手工记录汽车销售产品的时代已经过去了,面对庞大的信息量,我们必须制定一套高效率的汽车销售管理系统,对汽车销售资料进行集中统一的管理。随着信息技术的飞速发展,计算机已经是近代经营管理的必须工具,它已经渗透到各个领域,使用计算机对汽车销售工作进行管理,不仅能够保证各项信息准确,而且还具有查找方便、可靠性高、保密性好等优点,能够极大的提高汽车销售业的工作效率和服务质量。根据系统的综合考虑,本系统采用的开发工具使用JAVA语言和mysql数据库,设计并实现了一个基于浏览器/服务器模式结构的汽车销售管理信息系统。系统具有对用户信息、汽车基本信息、员工信息、客户信息、供应商信息、仓库信息、库存信息、汽车入库信息、汽车销售信息进行全部查询、指定查询、添加、修改和删除的功能。该项目使用框架为SSM(MYECLIPSE),选用开发工具为MYECLIPSE。汽车销售管理信息系统为一个 后台项目。
为了完成该系统,我们首先需要对该系统进行需求分析。一个汽车销售管理信息系统应包含用户角色有管理员、用户。为了能让用户顺利登陆系统完成相关操作,需要为每种登陆角色设置账户和密码字段。
总结得出该系统所有数据为:管理员(admin)、用户(yonghu)、员工(yuangong)、客户(kehu)、汽车(qiche)
管理员表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 管理员id username | VARCHAR(255) | | 账号 password | VARCHAR(255) | | 密码
用户表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 用户id username | VARCHAR(255) | | 账号 password | VARCHAR(255) | | 密码 huzhu | VARCHAR(255) | | 户主 chexing | VARCHAR(255) | | 车型 jiage | VARCHAR(255) | | 价格
员工表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 员工id xingming | VARCHAR(255) | | 姓名 nianling | VARCHAR(255) | | 年龄 xingbie | VARCHAR(255) | | 性别 zhiwei | VARCHAR(255) | | 职位 gongzi | VARCHAR(255) | | 工资
客户表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 客户id xingming | VARCHAR(255) | | 姓名 nianling | VARCHAR(255) | | 年龄 xingbie | VARCHAR(255) | | 性别 chexing | VARCHAR(255) | | 车型 nianxian | VARCHAR(255) | | 年限 jiage | VARCHAR(255) | | 价格
汽车表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 汽车id chexing | VARCHAR(255) | | 车型 pinpai | VARCHAR(255) | | 品牌 jiage | VARCHAR(255) | | 价格
package org.mypro.front; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; import javax.jms.Session; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.mypro.dao.KehuMapper; import org.mypro.entity.Kehu; import org.mypro.entity.KehuExample; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; @Controller @RequestMapping(value = "/") public class KehuController { private static final Log logger = LogFactory.getLog(KehuController.class); @Autowired private KehuMapper kehudao; //定义方法tianjiakehu,响应页面tianjiakehu请求 @RequestMapping(value = "tianjiakehu") public String tianjiakehu(HttpServletRequest request, HttpServletResponse response,HttpSession session,String backurl) { logger.debug("KehuController.tianjiakehu ......"); if(backurl != null && backurl.indexOf("tianjiakehu.action") == -1){ return "forward:/" + backurl; } return "tianjiakehu"; } @RequestMapping(value = "tianjiakehuact") public String tianjiakehuact(HttpServletRequest request,HttpSession session, HttpServletResponse response,Kehu kehu,String backurl) throws IOException { logger.debug("KehuController.tianjiakehuact ......"); kehudao.insert(kehu); request.setAttribute("message", "添加客户成功"); if(backurl != null && backurl.indexOf("tianjiakehuact.action") == -1){ return "forward:/" + backurl; } //返回tianjiakehu方法 return "forward:/tianjiakehu.action"; } //定义kehuguanli方法响应页面请求 @RequestMapping(value = "kehuguanli") public String kehuguanli(HttpServletRequest request,HttpSession session, HttpServletResponse response,String backurl) { logger.debug("KehuController.kehuguanli ......"); KehuExample example = new KehuExample(); List kehuall = kehudao.selectByExample(example); request.setAttribute("kehuall", kehuall); if(backurl != null && backurl.indexOf("kehuguanli.action") == -1){ return "forward:/" + backurl; } return "kehuguanli"; } // 定义 kehuchakan方法 @RequestMapping(value = "kehuchakan") public String kehuchakan(HttpServletRequest request,HttpSession session, HttpServletResponse response,String backurl) { logger.debug("KehuController.kehuchakan ......"); KehuExample example = new KehuExample(); List kehuall = kehudao.selectByExample(example); request.setAttribute("kehuall", kehuall); if(backurl != null && backurl.indexOf("kehuchakan.action") == -1){ return "forward:/" + backurl; } return "kehuchakan"; } // 定义 xiugaikehu方法 @RequestMapping(value = "xiugaikehu") public String xiugaikehu(HttpServletRequest request, HttpServletResponse response,HttpSession session,int id,String backurl){ logger.debug("KehuController.xiugaikehu ......"); Kehu kehu = kehudao.selectByPrimaryKey(id); request.setAttribute("kehu", kehu); if(backurl != null && backurl.indexOf("xiugaikehu.action") == -1){ return "forward:/" + backurl; } return "xiugaikehu"; } // 定义xiugaikehuact处理客户修改 @RequestMapping(value = "xiugaikehuact") public String xiugaikehuact(HttpServletRequest request, HttpServletResponse response,Kehu kehu,HttpSession session,String backurl) throws IOException { logger.debug("KehuController.xiugaikehuact ......"); kehudao.updateByPrimaryKeySelective(kehu); request.setAttribute("message", "修改客户信息成功"); if(backurl != null && backurl.indexOf("xiugaikehuact.action") == -1){ return "forward:/" + backurl; } return "forward:/kehuguanli.action"; } // 定义shanchukehu,处理删除客户 @RequestMapping(value = "shanchukehu") public String shanchukehu(HttpServletRequest request, HttpServletResponse response,HttpSession session,int id,String backurl){ logger.debug("KehuController.shanchukehu ......"); kehudao.deleteByPrimaryKey(id); request.setAttribute("message", "删除客户成功"); if(backurl != null && backurl.indexOf("shanchukehu.action") == -1){ return "forward:/" + backurl; } return "forward:/kehuguanli.action"; } // 定义sousuokehu方法,处理搜索操作 @RequestMapping(value = "sousuokehu") public String sousuokehu(HttpServletRequest request, HttpServletResponse response,HttpSession session,String search,String backurl) { logger.debug("KehuController.sousuokehu ......"); KehuExample example = new KehuExample(); KehuExample.Criteria criteria = example.createCriteria(); if(search != null){ criteria.andXingmingLike("%" + search + "%"); } List kehuall = kehudao.selectByExample(example); request.setAttribute("kehuall", kehuall); if(backurl != null && backurl.indexOf("sousuokehu.action") == -1){ return "forward:/" + backurl; } return "sousuokehu"; } // 定义KehupinglunMapper@RequestMapping (value = "kehuxiangqing") public String kehuxiangqing(HttpServletRequest request,HttpSession session, HttpServletResponse response,int id,String backurl) {logger. debug("KehuController.kehuxiangqing ......");Kehu kehu = kehudao.selectByPrimaryKey(id);request. setAttribute("kehu", kehu); if(backurl != null && backurl.indexOf("kehuxiangqing.action") == -1){ return "forward:/" + backurl; } return "kehuxiangqing"; } // 上传文件图片等 public String uploadUtile(MultipartFile file, HttpServletRequest request) throws IOException { // 根据当前时间生成时间字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS"); String res = sdf.format(new Date()); // uploads文件夹位置 String rootPath = request.getSession().getServletContext().getRealPath("resource/uploads/"); // 原始名称 String originalFileName = file.getOriginalFilename(); // 新文件名 String newFileName = "sliver" + res + originalFileName.substring(originalFileName.lastIndexOf(".")); // 创建年月文件夹 Calendar date = Calendar.getInstance(); File dateDirs = new File(date.get(Calendar.YEAR) + File.separator + (date.get(Calendar.MONTH)+1)); // 新文件 File newFile = new File(rootPath + File.separator + dateDirs + File.separator + newFileName); // 判断目标文件所在目录是否存在 if( !newFile.getParentFile().exists()) { // 如果目标文件所在的目录不存在,则创建父目录newFile. getParentFile().mkdirs(); } System.out.println(newFile); // 将内存中的数据写入磁盘file. transferTo(newFile); // 完整的url String fileUrl = date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH)+1) + "/" + newFileName; return fileUrl; }}
查询汽车模块:
在后台中定义汽车查询模块,在侧边栏中点击汽车管理,可以跳转到汽车管理界面。在该页面中通过qicheController中定义qicheguanli响应汽车查询模块。在qicheguanli中查询出所有信息,返回页面进行循环展示。查询方法为qichedao中的selectByexample方法。该部分核心代码如下:
生成汽车样例类,通过example定义查询条件 QicheExample example = new QicheExample();
通过qichedao的selectByExample方法查询出所有的汽车信息 List qicheall = qichedao.selectByExample(example);
将汽车信息,保存到request中,在页面通过foreach方法进行展示 request.setAttribute("qicheall", qicheall);
返回汽车管理界面
return "forward:/qicheguanli.action";
删除汽车模块:
删除汽车功能实现在qicheController中,实现方法为shanchuqiche。在页面中通过get方法shanchuqiche.action?Id的形式将需要删除的汽车id上传到服务器中,响应对应的方法,调用qichedao中的deleteByPrimaryKey方法,完成删除操作。将删除成功的提示信息返回到页面中,完成删除数据的操作。该部分核心代码:
通过qichedao的删除方法根据id删除对应的汽车 qichedao.deleteByPrimaryKey(id);
将删除汽车成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "删除汽车成功");
返回汽车管理界面
return "forward:/qicheguanli.action";