1.1设计背景
本次设计的题目是对仓储管理系统设计。通过对仓储的详细调查、需求分析以及模块设计,对仓储的管理系统进行设计,使仓储的使用更加方便快捷的同时,也能对仓储进行更加有效合理的管理。
1.2设计意义
物流系统整合的意义不单单是几个单独运行系统的简单拼装,而是在几个系统之间数据的共享,资源的重新整合是提高效率和降低企业运行费用的关键。是对整个运行流程的全面控制、对原物资运行流程的改造。一个全面的物流系统是包括对多方面内容的管理,包括供应链管理、货物配送管理、订单管理、供应商管理、仓储管理、以及在工作中涉及到的对工作人员的管理、运输工具的管理等等。所以说物流系统的整合是一个庞大的、复杂的、全面的整合工作,特别是对制造行业的企业来说,自己的产品能否迅速、安全、可靠的运送到销售地点、送到用户的手中,是自己奠定在该行业地位取得用户认可的关键,与此同时这样是自己资金周转的关键。只有照顾好我们的顾客,他们才能照顾好我们的利润。在一个效率和效果并重的世界里,时间、速度是致胜的关键!
1.3数据库的选择
MySql数据库和SQL Server,Oracle相比是一个轻量级的数据库,由于MySql是一个开源的数据库解决方案因此你可以很方便的修改相关的配置来满足你开发的需要,虽然它的功能和SQL Server Oracle相比没有它们那么强大但是在开发中小型B/S应用系统时,它完全可以满足您的需要。它安装的便捷性,有的版本是绿色安装直接解压出来就可以使用;它的跨平台性也给用户带来了方便,最重要的是连接MySql数据库的速度是其他数据库不能比的,对应连接速度有很高要求的开发可以考虑使用此数据库。它最大支持5000万条记录,这完全可以满足你的开发要求,它对多国语言的支持也方便了不同语种的开发。
Aapche的Tomcat是目前被广泛使用的一款WebApplication服务器,它是Apache开源项目下的一个子项目。它不仅支持JSP、PHP而且经过适当的配置后也可以支持ASP,而且它也是一款跨平台软件,对于学习者和中小型应用项目来说它都是大家的首选并且开发应用已经日趋成熟。虽然它在某些功能方面比不上BEA公司的WebLogi和IBM公司的**,但是它是开源免费的所以从这个方面来说它在中小型应用中还是很有竞争力的。
1.4编程语言的选择
我本次设计采用Java语言从它向世人打招呼的那一天开始它就把自己定位在了致力于网络应用软件开的语言,它的跨平台、安全性、完全的面向对象,使它成为了互连网应用软件开发的一个新的宠儿。Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。具体来说,它具有如下特性:简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。
二、需求分析
仓储管理(Warehousing Management)是物流系统的一部分,它从初始点到消费点存储产品(原材料、零部件、半成品、成品),提供存储状态、条件和处置等信息。现代物流中的仓储是在物流体系中是唯一的静态环节,随着经济的发展,需求方式出现了个性化、多样化的改变,生产方式也变为多品种、小批量的柔性生产方式。物流的特征由少品种、大批量变为多品种、少批量或多批次、小批量,仓库的功能也从重视保管效率逐渐变为重视流通功能的实现。储存相当于物流体系的一个节点。仓储是物流中的重要环节,储存功能相对于整个物流体系来说,既有缓冲与调节的作用,也有创值与增效的功能。仓储管理在现代物流管理中处于重要地位,它不但起着物品储藏的功能而且对财务控制、生产供应、销售支持都有很大的作用。合理的库存控制对减少物品的资金占用有起着关键作用,而且合理的库存是为生产有序进行提供了可能,商品的销售也受库存的影响。因此仓储管理的控制是否合理、高效是提升企业竞争力的关键。
在B/S模式的软件开发中采用最多的是MVC设计模式。MVC是一种流行的设计模式,它是Model-View-Controller的简称,即模型-视图-控制器。它把应用程序分成三个层次或者模块:视图层、模型层、控制层,它们各自处理自己的任务。
视图:向用户显示数据,接受用户输入,与模型层交互,向模型查询业务状态,接受模型发出的数据,更新显示用户界面。
模型:模型是应用程序的主体,它用于表示业务数据和业务逻辑。一个模型可以同时为多个视图提供数据,从而提高了代码的可重用性。
控制器:控制器,顾名思义起控制作用。它接受用户输入,并调用模型和视图来完成用户请求。在用户提交表单时,控制器本身不做任何处理和输出工作。控制器所做的仅仅时:接受请求,然后调用模型组件处理请求,最后调用视图来显示模型处理后返回的数据。
2.1可行性研究
2.1.1价值可行性
物流管理可以根据市场分析,提高运营管理效率,合理规划分配资源,调整业务结构,确保每个业务均可盈利。根据数据分析结果,规划、预计运输路线和配送路线,环节运输高峰期的物流行为,提高客户的满意度,提高客户粘度。
2.1.2经济可行性
近年来,我国电子商务和网络购物的迅猛发展,为快递业带来了前所未有的发展机遇。 2013年,全国快递业务量首次超过函件业务量。 2014年,经济增长从高速增长转为中高速增长,全国快递量增幅也有所下滑,但仍超过140亿 件,首次超过美国,跃居世界第一,成为中国经济的一匹黑马。 2015年,全国快递业务量首次突破200亿件大关,继续稳居世界第一,中国快递业在加速流 通、扩大内需、调整结构、吸纳就业、普惠民生等方面的基础性作用日益显现。国家高度关注快递行业发展。 2016年,全国快递业务量突破300亿件,全球占比超过40%,日均服务超过2.5亿人次,支撑网络零售额超过4万亿元,占社会消费品零售总额比重达到12.5%,新增就业20万人以上。 2017年我国快递业务量突破了400亿件,达到400.6亿件,同比增长28% 2018年,我国快递业务量超过美、日、欧等发达经济体之和,规模连续五年稳居世界第一,是第二名美国的3倍多,全年中国快递业务量突破500亿件业务收入突破6000亿元
2.2系统功能需求分析
在需求分析确定之后需要对系统进行整体分析和设计。这包括系统功能的描述、对功能模块的划分对系统流程的分析下面首先对系统功能进行描述。
4.1系统功能模块划分
1.模块划分时描述一个系统需求的一个过程,需要将需求分析中的感性描述进行抽象,提取出要实现的功能,这是整个系统开发中一个关键过程。分析的根本目的时在开发者和提出需求的人员之间建立一种理解和沟通的机制。因此,物流系统的仓储管理需求分析也是根据开发者和实际用户需求一起来完成的。
这个系统的模块结构如下:
三、数据库设计
3.1数据库表设计
网络物流系统(仓储管理模块)数据库结构 | |||
数据库名称:英文(Logistic)――中文(物流) | |||
数据表编号 | 数据表英文名称 | 数据表中文名称 | 数据表功能描述 |
01 | tb_admin | 管理员表 | 管理员 |
02 | tb_goods | 货物表 | 货物 |
03 | tb_warehouse | 仓库表 | 仓库 |
04 | tb_record | 出入库记录表 | 出入库记录 |
05 | tb_checkrecord | 成本核算表 | 成本核算 |
06 | tb_purchase | 采购表 | 采购 |
07 | tb_purchaser | 采购员表 | 采购员 |
3.2数据库逻辑结构设计
四、运行效果截图
4.1登陆界面
4.2用户登录后界面
4.3管理员登录后界面
五、代码展示
5.1登录界面
/**
* 用于登陆的Servlet
*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private SqlSession sqlSession;
//查询数据mapper
private AdminDao adminDao;
private PurchaserDao purchaserDao;
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
sqlSession = JdbcUtils.getSession();
req.setCharacterEncoding("utf-8");
//登陆的用户
LoginUser loginUser;
String username = req.getParameter("username");
String password = req.getParameter("password");
String usertype = req.getParameter("usertype");
if(usertype.equals("admin")) {
Admin admin =new Admin ();
admin.setUsername(username);
admin.setPassword(password);
QueryWrapper<Admin> wrapperAdmin = new QueryWrapper();
wrapperAdmin.eq("username", username).eq("password", password);
adminDao =sqlSession.getMapper(AdminDao. class);
loginUser = adminDao.selectOne(wrapperAdmin);
if (loginUser != null) {
sqlSession.close();
req.getSession().setAttribute("user", loginUser);
req.getSession().setAttribute("role", "admin");
resp.sendRedirect(req.getContextPath() + "/hello.jsp");
return;
}
}
if(usertype.equals("purchaser")) {
Purchaser purchaser =new Purchaser ();
purchaser.setUsername(username);
purchaser.setPassword(password);
QueryWrapper<Purchaser> wrapperPurchaser = new QueryWrapper();
wrapperPurchaser.eq("username", username).eq("password", password);
purchaserDao =sqlSession.getMapper(PurchaserDao. class);
loginUser = purchaserDao.selectOne(wrapperPurchaser);
if (loginUser != null) {
sqlSession.close();
req.getSession().setAttribute("user", loginUser);
req.getSession().setAttribute("role", "purchaser");
resp.sendRedirect(req.getContextPath() + "/hello.jsp");
return;
}
}
sqlSession.close();
//登陆失败,就重新登陆
req.setAttribute("message","账号密码有误,登陆失败");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
5.2采购员用户
/**
* 采购员
*/
@TableName("tb\_purchaser")
public class Purchaser implements Serializable ,LoginUser{
/**
*主键
*/
@TableId
private String id;
/**
*用户名
*/
private String username;
/**
*密码
*/
private String password;
/**
*角色
*/
private String role;
/**
*姓名
*/
private String name;
/**
*电话
*/
private String tele;
/**
*性别
*/
private String gender;
public String getId () {
return id;
}
public void setId (String id ) {
this.id = id;
}
public String getUsername () {
return username;
}
public void setUsername (String username ) {
this.username = username;
}
public String getPassword () {
return password;
}
public void setPassword (String password ) {
this.password = password;
}
![img]()
![img]()
![img]()
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取]()**
1715327002286)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取]()**